ddr3libv2: bobk: Fix BobK CPU divider configuration
Previously, BobK used Divider configuration according to AC3/BobK flow
definition, but this suffered from issues (SoC freezed).
This patch Replaces Divider configuration, to use BC2 flow.
(previous flow kept until issues solved).
Change-Id: Ib8f9dde57a9ffdf3948d9383e08a019f65224d00
Signed-off-by: Margarita Granov <margra@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/22425
Reviewed-by: Omri Itach <omrii@marvell.com>
Tested-by: Omri Itach <omrii@marvell.com>
Reviewed-on: http://vgitil04.il.marvell.com:8080/24145
diff --git a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c
index 089189d..b190ed3 100755
--- a/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c
+++ b/tools/marvell/bin_hdr/src_ddr/ddr3libv2/src/Silicon/mvHwsDdr3BobK.c
@@ -1312,9 +1312,40 @@
{
GT_U32 data = 0, value, divider = 0, divRatio;
MV_HWS_DDR_FREQ sarFreq;
+ GT_U32 writeData;
DEBUG_TRAINING_ACCESS(DEBUG_LEVEL_INFO, ("CPU PLL Config\n"));
+#if 1
+ /* calc SAR */
+ ddr3TipBobKGetInitFreq(devNum, interfaceId, &sarFreq);
+ divider = freqVal[sarFreq]/freqVal[frequency];
+ DEBUG_TRAINING_ACCESS(DEBUG_LEVEL_TRACE, ("\nSAR value %d divider %d freqVal[%d] %d freqVal[%d] %d\n",
+ sarFreq, divider, sarFreq, freqVal[sarFreq], frequency, freqVal[frequency]));
+
+ CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0x000F82ec, &data, MASK_ALL_BITS ));
+ writeData = (0x1 << 9);
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0x000F82ec, R_MOD_W(writeData,data, (0x1 << 9))));
+
+ switch (divider)
+ {
+ case 1:
+ /*Not 800 is a 667 only*/
+ writeData = (sarFreq==DDR_FREQ_800)?(0x2):(0x1);
+ break;
+ case 2:
+ /*Not 800 is a 667 only*/
+ writeData = (sarFreq==DDR_FREQ_800)?(0x3):(0x2);
+ break;
+ default:
+ DEBUG_TRAINING_ACCESS(DEBUG_LEVEL_INFO, ("Error: Wrong divider %d\n", divider));
+ return GT_BAD_PARAM;
+ break;
+ }
+
+ CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0x000F82e8, &data, MASK_ALL_BITS ));
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0x000F82e8, R_MOD_W(writeData,data, (0x7 << 0))));
+#else
/* calc SAR */
ddr3TipBobKGetInitFreq(devNum, interfaceId, &sarFreq);
divider = freqVal[sarFreq]/freqVal[frequency];
@@ -1333,17 +1364,17 @@
CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8298, R_MOD_W(divRatio, data, (0x3 << 16))));
divRatio = (frequency==initFreq)?(0):(1);
/*sel_pll_ddr_clk_div2*/
- CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8298, R_MOD_W( divRatio<<15, data, (0x1 << 5))));
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8298, R_MOD_W( divRatio<<15, data, (0x1 << 15))));
/*cpu_pll_clkdiv_reload_smooth*/
CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0xF8270, &data, MASK_ALL_BITS ));
- CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8270, R_MOD_W((0x7F<<11), data, (0x7F << 16))));
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8270, R_MOD_W((/*0x7F<*/0x6f<11), data, (0x7F << 11))));
CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0xF8268, &data, MASK_ALL_BITS ));
/*cpu_pll_clkdiv_relax_en*/
- CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8268, R_MOD_W(0x7F, data, 0x7F)));
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8268, R_MOD_W(/*0x7F<*/0x6f, data, 0x7F)));
/*cpu_pll_clkdiv_reset_mask*/
- CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8268, R_MOD_W((0x7F<<7), data, (0x7F << 7))));
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8268, R_MOD_W((/*0x7F<*/0x6f<<7), data, (0x7F << 7))));
/*cpu_pll_ddr_clkdiv_ratio_full*/
CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0xF826C, &data, MASK_ALL_BITS ));
@@ -1351,7 +1382,7 @@
/*cpu_pll_clkdiv_reload_force*/
CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0xF8268, &data, MASK_ALL_BITS ));
- CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8268, R_MOD_W((divider<<21), data, (0x7F << 21))));
+ CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8268, R_MOD_W((0x2<<21), data, (0x7F << 21))));
/*cpu_pll_clkdiv_reload_ratio*/
CHECK_STATUS(ddr3TipBobKServerRegRead(devNum, 0xF8270, &data, MASK_ALL_BITS ));
@@ -1359,6 +1390,7 @@
CHECK_STATUS(ddr3TipBobKServerRegWrite(devNum, 0xF8270, R_MOD_W(0, data, (0x1 << 10))));
DEBUG_TRAINING_ACCESS(DEBUG_LEVEL_INFO, ("\tCPU PLL config Done\n"));
+#endif
return GT_OK;
}