summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Cai <R63905@freescale.com>2010-12-10 14:15:32 +0800
committerRobby Cai <R63905@freescale.com>2010-12-10 15:20:02 +0800
commitba0672af160ce5f6eb4342f7acb0bcb0bbb41f0f (patch)
tree26368c9b60828e5b7ca801cadcbeffe46dff186b
parent92be7f9821a293fb4dc0932263af946d7b81ff89 (diff)
ENGR00136202 MX50: Finetune DLL delay paramater for LPDDR2
Changed DLL delay from 0x14 to 0x0b Swapped pu and (pu+1), pd and (pd+1) assignment in CFG1 and CFG2. Signed-off-by: Robby Cai <R63905@freescale.com>
-rw-r--r--arch/arm/mach-mx5/mx50_ddr_freq.S10
-rw-r--r--arch/arm/plat-mxc/zq_calib.c33
2 files changed, 27 insertions, 16 deletions
diff --git a/arch/arm/mach-mx5/mx50_ddr_freq.S b/arch/arm/mach-mx5/mx50_ddr_freq.S
index 3077515ebf76..38317675c52f 100644
--- a/arch/arm/mach-mx5/mx50_ddr_freq.S
+++ b/arch/arm/mach-mx5/mx50_ddr_freq.S
@@ -645,25 +645,25 @@ tref_done:
str r0, [r5, #0x234]
ldr r0, =0x60099414
str r0, [r5, #0x238]
- ldr r0, =0x000a1401
+ ldr r0, =0x000a0b01
str r0, [r5, #0x23c]
ldr r0, =0x60099414
str r0, [r5, #0x240]
- ldr r0, =0x000a1401
+ ldr r0, =0x000a0b01
str r0, [r5, #0x244]
ldr r0, =0x60099414
str r0, [r5, #0x248]
- ldr r0, =0x000a1401
+ ldr r0, =0x000a0b01
str r0, [r5, #0x24c]
ldr r0, =0x60099414
str r0, [r5, #0x250]
- ldr r0, =0x000a1401
+ ldr r0, =0x000a0b01
str r0, [r5, #0x254]
ldr r0, =0x60099414
str r0, [r5, #0x258]
- ldr r0, =0x000a1401
+ ldr r0, =0x000a0b01
str r0, [r5, #0x25c]
b Setup_Done
diff --git a/arch/arm/plat-mxc/zq_calib.c b/arch/arm/plat-mxc/zq_calib.c
index 33e744cfbdaa..bf0a693d9f80 100644
--- a/arch/arm/plat-mxc/zq_calib.c
+++ b/arch/arm/plat-mxc/zq_calib.c
@@ -69,14 +69,15 @@ static u32 mxc_zq_pu_compare(u32 pu, u32 pd)
{
u32 data;
- /* set PU & PD value */
- data = (pd << 24) | (pu << 16);
+ /* set PU+1 & PD+1 value
+ * when pu=0x1F, set (pu+1) = 0x1F
+ */
+ data = ((pd + 1) << 24) | ((pu + 1) << 16);
__raw_writel(data, databahn_base + DATABAHN_REG_ZQ_SW_CFG1);
/*
- * set PU+1 & PD+1 value
- * when pu=0x1F, set (pu+1) = 0x1F
+ * set PU & PD value
*/
- data = ((pd + 1) << 8) | (pu + 1);
+ data = (pd << 8) | pu;
__raw_writel(data, databahn_base + DATABAHN_REG_ZQ_SW_CFG2);
/*
* Enable the ZQ comparator,
@@ -106,11 +107,11 @@ static u32 mxc_zq_pd_compare(u32 pu, u32 pd)
u32 data;
/* set bit[4]=1, select PU/PD comparison */
- /* PD range: 0~0xE (0xF has problem, drop it) */
- data = (pd << 24) | (pu << 16) | (1 << 4);
+ /* PD range: 0~0xF */
+ /* when pd=0x0F, set (pd+1) = 0x0F */
+ data = ((pd + 1) << 24) | ((pu + 1) << 16) | (1 << 4);
__raw_writel(data, databahn_base + DATABAHN_REG_ZQ_SW_CFG1);
- /* when pu=0x1F, set (pu+1) = 0x1F */
- data = ((pd + 1) << 8) | (pu + 1);
+ data = (pd << 8) | pu;
__raw_writel(data, databahn_base + DATABAHN_REG_ZQ_SW_CFG2);
/*
* Enable the ZQ comparator,
@@ -175,7 +176,7 @@ static s32 mxc_zq_pd_calib(u32 start, u32 pu)
u32 zq_pd_val = 0;
/*
- * Compare PD from 0 to 0x0E (please ignore 0x0F)
+ * Compare PD from 0 to 0x0F
* data is the result of the comparator
* the result sequence looks like:
* 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0
@@ -225,8 +226,18 @@ static void mxc_zq_hw_load(u32 pu, u32 pd, u32 pu_pd_sel)
* When the posedge of bit[4] detected, hardware trigger a load.
*/
__raw_writel(0x10011, databahn_base + DATABAHN_REG_ZQ_HW_CFG);
+ /*
+ * Clear the zq_hw_load bit for next loading
+ */
__raw_writel(0x10001, databahn_base + DATABAHN_REG_ZQ_HW_CFG);
- ndelay(300);
+ /*
+ * Delay at least 10us waiting an ddr auto-refresh occurs
+ * PU PD value are loaded on auto-refresh event
+ */
+ udelay(10);
+ /*
+ * Clear the calibration_en (bit[16]) to save power consumption
+ */
__raw_writel(0x1, databahn_base + DATABAHN_REG_ZQ_HW_CFG);
}