diff --git a/src/cpu/samsung/exynos5420/dmc_init_ddr3.c b/src/cpu/samsung/exynos5420/dmc_init_ddr3.c index a758433487..1126dca130 100644 --- a/src/cpu/samsung/exynos5420/dmc_init_ddr3.c +++ b/src/cpu/samsung/exynos5420/dmc_init_ddr3.c @@ -44,7 +44,7 @@ int ddr3_mem_ctrl_init(struct mem_timings *mem, int interleave_size, int reset) struct exynos5_dmc *drex0, *drex1; struct exynos5_tzasc *tzasc0, *tzasc1; u32 val, nLockR, nLockW_phy0, nLockW_phy1; - int i; + int i, chip; phy0_ctrl = (struct exynos5_phy_control *)EXYNOS5_DMC_PHY0_BASE; phy1_ctrl = (struct exynos5_phy_control *)EXYNOS5_DMC_PHY1_BASE; @@ -218,12 +218,14 @@ int ddr3_mem_ctrl_init(struct mem_timings *mem, int interleave_size, int reset) * Send auto refresh command for DRAM refresh. */ for (i = 0; i < 128; i++) { - writel(DIRECT_CMD_REFA, &drex0->directcmd); - writel(DIRECT_CMD_REFA | (0x1 << DIRECT_CMD_CHIP_SHIFT), - &drex0->directcmd); - writel(DIRECT_CMD_REFA, &drex1->directcmd); - writel(DIRECT_CMD_REFA | (0x1 << DIRECT_CMD_CHIP_SHIFT), - &drex1->directcmd); + for (chip = 0; chip < mem->chips_to_configure; chip++) { + writel(DIRECT_CMD_REFA | + (chip << DIRECT_CMD_CHIP_SHIFT), + &drex0->directcmd); + writel(DIRECT_CMD_REFA | + (chip << DIRECT_CMD_CHIP_SHIFT), + &drex1->directcmd); + } } } @@ -263,10 +265,12 @@ int ddr3_mem_ctrl_init(struct mem_timings *mem, int interleave_size, int reset) writel(nLockR, &phy1_ctrl->phy_con12); val = (0x3 << DIRECT_CMD_BANK_SHIFT) | 0x4; - writel(val, &drex0->directcmd); - writel(val | (0x1 << DIRECT_CMD_CHIP_SHIFT), &drex0->directcmd); - writel(val, &drex1->directcmd); - writel(val | (0x1 << DIRECT_CMD_CHIP_SHIFT), &drex1->directcmd); + for (chip = 0; chip < mem->chips_to_configure; chip++) { + writel(val | (chip << DIRECT_CMD_CHIP_SHIFT), + &drex0->directcmd); + writel(val | (chip << DIRECT_CMD_CHIP_SHIFT), + &drex1->directcmd); + } setbits_le32(&phy0_ctrl->phy_con2, RDLVL_GATE_EN); setbits_le32(&phy1_ctrl->phy_con2, RDLVL_GATE_EN); @@ -316,10 +320,12 @@ int ddr3_mem_ctrl_init(struct mem_timings *mem, int interleave_size, int reset) writel(0, &phy1_ctrl->phy_con14); val = (0x3 << DIRECT_CMD_BANK_SHIFT); - writel(val, &drex0->directcmd); - writel(val | (0x1 << DIRECT_CMD_CHIP_SHIFT), &drex0->directcmd); - writel(val, &drex1->directcmd); - writel(val | (0x1 << DIRECT_CMD_CHIP_SHIFT), &drex1->directcmd); + for (chip = 0; chip < mem->chips_to_configure; chip++) { + writel(val | (chip << DIRECT_CMD_CHIP_SHIFT), + &drex0->directcmd); + writel(val | (chip << DIRECT_CMD_CHIP_SHIFT), + &drex1->directcmd); + } /* Common Settings for Leveling */ val = PHY_CON12_RESET_VAL; diff --git a/src/mainboard/google/pit/memory.c b/src/mainboard/google/pit/memory.c index ddd7aa0ff1..4ac3d0c999 100644 --- a/src/mainboard/google/pit/memory.c +++ b/src/mainboard/google/pit/memory.c @@ -86,7 +86,7 @@ const struct mem_timings mem_timings = { DMC_MEMCONTROL_ADD_LAT_PALL_CYCLE(0) | DMC_MEMCONTROL_MEM_TYPE_DDR3 | DMC_MEMCONTROL_MEM_WIDTH_32BIT | - DMC_MEMCONTROL_NUM_CHIP_2 | + DMC_MEMCONTROL_NUM_CHIP_1 | DMC_MEMCONTROL_BL_8 | DMC_MEMCONTROL_PZQ_DISABLE | DMC_MEMCONTROL_MRR_BYTE_7_0, @@ -104,8 +104,8 @@ const struct mem_timings mem_timings = { DMC_CONCONTROL_AREF_EN_DISABLE | DMC_CONCONTROL_IO_PD_CON_DISABLE, .dmc_channels = 1, - .chips_per_channel = 2, - .chips_to_configure = 2, + .chips_per_channel = 1, + .chips_to_configure = 1, .send_zq_init = 1, .gate_leveling_enable = 1, };