support ddr resume after CPU power down
authorhcy <hcy@rock-chips.com>
Tue, 8 Apr 2014 02:03:42 +0000 (10:03 +0800)
committerhcy <hcy@rock-chips.com>
Tue, 8 Apr 2014 02:03:42 +0000 (10:03 +0800)
arch/arm/mach-rockchip/ddr_reg_resume.inc
arch/arm/mach-rockchip/ddr_rk32.c

index 8673a05ac3eb771dd4bb5323bb0ce6d2c6c05fc0..530da34812160976ed04b4f024c3ca3044ced73b 100755 (executable)
-    0xea00008e ,
-    0xe3a03000 ,
+    0xea0000a2 ,
+    0xe0801300 ,
+    0xe3010fff ,
+    0xe92d4008 ,
+    0xe0811181 ,
+    0xe0800181 ,
+    0xe1a006a0 ,
+    0xe58d0000 ,
+    0xe3500000 ,
+    0x159d0000 ,
+    0x12401001 ,
+    0x158d1000 ,
+    0x1afffffa ,
+    0xe8bd8008 ,
     0xe92d4010 ,
+    0xe3a03000 ,
     0xe1530002 ,
     0x37914103 ,
     0x37804103 ,
     0x32833001 ,
     0x3afffffa ,
     0xe8bd8010 ,
-    0xe59f1470 ,
-    0xe5910004 ,
-    0xe3802010 ,
-    0xe3a00000 ,
-    0xe38222f1 ,
-    0xe5812004 ,
-    0xe2800001 ,
-    0xe350000a ,
-    0x23a00007 ,
-    0x3afffffb ,
-    0xe591200c ,
-    0xe1d02002 ,
+    0xe52de004 ,
+    0xe1a02000 ,
+    0xe5900004 ,
+    0xe3800010 ,
+    0xe38002f1 ,
+    0xe5820004 ,
+    0xe3a00001 ,
+    0xebffffe2 ,
+    0xe3a00007 ,
+    0xe592100c ,
+    0xe1d01001 ,
     0x1afffffc ,
-    0xe12fff1e ,
-    0xe3500003 ,
-    0xe59f0434 ,
-    0xe5901004 ,
-    0x3811207 ,
-    0x3811061 ,
-    0x13811207 ,
-    0x13811041 ,
-    0xe5801004 ,
-    0xe3a01000 ,
-    0xe2811001 ,
-    0xe351000a ,
-    0x23a01009 ,
-    0x3afffffb ,
-    0xe590200c ,
-    0xe1d12002 ,
+    0xe49df004 ,
+    0xe52de004 ,
+    0xe1a02000 ,
+    0xe5900004 ,
+    0xe3800207 ,
+    0xe3800041 ,
+    0xe5820004 ,
+    0xe3a00001 ,
+    0xebffffd5 ,
+    0xe3a00009 ,
+    0xe592100c ,
+    0xe1d01001 ,
     0x1afffffc ,
-    0xe12fff1e ,
-    0xe59f23f4 ,
-    0xe3a03001 ,
-    0xe92d4010 ,
+    0xe49df004 ,
+    0xe92d4018 ,
     0xe3a04004 ,
-    0xe2420802 ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510001 ,
-    0x8bd8010 ,
-    0xe3510000 ,
-    0x13510003 ,
+    0xe3a02001 ,
+    0xe5913008 ,
+    0xe2033007 ,
+    0xe3530001 ,
+    0xe58d3000 ,
+    0xa000012 ,
+    0xe3530000 ,
+    0x13530003 ,
     0xa000009 ,
-    0xe3510005 ,
-    0x5804004 ,
-    0x1afffff5 ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510003 ,
+    0xe3530005 ,
+    0x5814004 ,
+    0x1afffff4 ,
+    0xe5913008 ,
+    0xe2033007 ,
+    0xe3530003 ,
     0x1afffffb ,
-    0xe592100c ,
-    0xe3110002 ,
+    0xe590300c ,
+    0xe3130002 ,
     0xafffffc ,
-    0xe5803004 ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510001 ,
+    0xe5812004 ,
+    0xe5913008 ,
+    0xe2033007 ,
+    0xe3530001 ,
     0x1afffffb ,
-    0xeaffffe8 ,
-    0xe59f2384 ,
-    0xe3a03002 ,
-    0xe92d4030 ,
-    0xe3a05004 ,
-    0xe3a04001 ,
-    0xe2420802 ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510003 ,
-    0x8bd8030 ,
-    0xe3510000 ,
-    0x5804004 ,
-    0xa00000c ,
-    0xe3510001 ,
-    0xa00000e ,
-    0xe3510005 ,
-    0x5805004 ,
-    0x1afffff3 ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510003 ,
+    0xeaffffe7 ,
+    0xe8bd8018 ,
+    0xe92d4008 ,
+    0xe5912008 ,
+    0xe2022007 ,
+    0xe3520003 ,
+    0xe58d2000 ,
+    0xa00002b ,
+    0xe5912008 ,
+    0xe7e22252 ,
+    0xe3520001 ,
+    0x5912008 ,
+    0x2022007 ,
+    0x3520005 ,
+    0xa000024 ,
+    0xe59d2000 ,
+    0xe3520000 ,
+    0x3a02001 ,
+    0x5812004 ,
+    0xa00000d ,
+    0xe3520001 ,
+    0xa00000f ,
+    0xe3520005 ,
+    0x3a02004 ,
+    0x5812004 ,
+    0x1affffe8 ,
+    0xe5912008 ,
+    0xe2022007 ,
+    0xe3520003 ,
     0x1afffffb ,
-    0xe592100c ,
-    0xe3110002 ,
+    0xe590200c ,
+    0xe3120002 ,
     0xafffffc ,
-    0xeaffffeb ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510001 ,
+    0xeaffffe0 ,
+    0xe5912008 ,
+    0xe2022007 ,
+    0xe3520001 ,
     0x1afffffb ,
-    0xe5803004 ,
-    0xe5901008 ,
-    0xe2011007 ,
-    0xe3510003 ,
-    0x1afffffb ,
-    0xeaffffe1 ,
-    0xe59f02f4 ,
-    0xe5901014 ,
-    0xe3c11101 ,
-    0xe5801014 ,
-    0xe59011cc ,
-    0xe3c11101 ,
-    0xe58011cc ,
-    0xe590120c ,
-    0xe3c11101 ,
-    0xe580120c ,
-    0xe590124c ,
-    0xe3c11101 ,
-    0xe580124c ,
-    0xe590128c ,
-    0xe3c11101 ,
-    0xe580128c ,
-    0xe3a01000 ,
-    0xe2811001 ,
-    0xe3510ffa ,
-    0x3afffffc ,
-    0xe5901014 ,
-    0xe3811101 ,
-    0xe5801014 ,
-    0xe59011cc ,
-    0xe3811101 ,
-    0xe58011cc ,
-    0xe590120c ,
-    0xe3811101 ,
-    0xe580120c ,
-    0xe590124c ,
-    0xe3811101 ,
-    0xe580124c ,
-    0xe590128c ,
-    0xe3811101 ,
-    0xe580128c ,
-    0xe3a00000 ,
-    0xe2800001 ,
-    0xe3500ffa ,
-    0x3afffffc ,
-    0xe12fff1e ,
-    0xe92d40f0 ,
+    0xe3a02002 ,
+    0xe5812004 ,
+    0xe5912008 ,
+    0xe2022007 ,
+    0xe3520003 ,
+    0xaffffd6 ,
+    0xe5912008 ,
+    0xe7e22252 ,
+    0xe3520001 ,
+    0x5912008 ,
+    0x2022007 ,
+    0x3520005 ,
+    0x1afffff4 ,
+    0xeaffffce ,
+    0xe8bd8008 ,
+    0xe52de004 ,
+    0xe1a02000 ,
+    0xe5900014 ,
+    0xe3c00101 ,
+    0xe5820014 ,
+    0xe59201cc ,
+    0xe3c00101 ,
+    0xe58201cc ,
+    0xe592020c ,
+    0xe3c00101 ,
+    0xe582020c ,
+    0xe592024c ,
+    0xe3c00101 ,
+    0xe582024c ,
+    0xe592028c ,
+    0xe3c00101 ,
+    0xe582028c ,
+    0xe3a0000a ,
+    0xebffff6e ,
+    0xe5920014 ,
+    0xe3800101 ,
+    0xe5820014 ,
+    0xe59201cc ,
+    0xe3800101 ,
+    0xe58201cc ,
+    0xe592020c ,
+    0xe3800101 ,
+    0xe582020c ,
+    0xe592024c ,
+    0xe3800101 ,
+    0xe582024c ,
+    0xe592028c ,
+    0xe3800101 ,
+    0xe582028c ,
+    0xe3a0000a ,
+    0xe49de004 ,
+    0xeaffff5c ,
+    0xe92d41f0 ,
     0xe1a04000 ,
-    0xe59f624c ,
-    0xe5901104 ,
-    0xe5900124 ,
-    0xe5861010 ,
-    0xe5941108 ,
-    0xe5861014 ,
-    0xe5941158 ,
-    0xe58611cc ,
-    0xe5941168 ,
-    0xe586120c ,
-    0xe5941178 ,
-    0xe586124c ,
-    0xe5941188 ,
-    0xe586128c ,
-    0xe2007007 ,
-    0xe59410fc ,
-    0xe5861004 ,
-    0xebffffc3 ,
-    0xe59f0208 ,
+    0xe5900274 ,
+    0xe3700001 ,
+    0xa000030 ,
+    0xe5900000 ,
+    0xe5941278 ,
+    0xe594227c ,
+    0xe0000001 ,
+    0xe1500002 ,
+    0x1a00002a ,
+    0xe5940280 ,
+    0xe3700001 ,
+    0x15941284 ,
+    0x15801000 ,
+    0xe594028c ,
+    0xe3700001 ,
+    0x15941290 ,
+    0x15801000 ,
+    0xe5941298 ,
+    0xe3710001 ,
+    0x13a00000 ,
+    0xa000005 ,
+    0xe0842100 ,
+    0xe592229c ,
+    0xe7812100 ,
+    0xe2800001 ,
+    0xe3500003 ,
+    0x3afffff9 ,
+    0xe3a00001 ,
+    0xebffff3d ,
+    0xe594028c ,
+    0xe3700001 ,
+    0x15941294 ,
+    0x15801000 ,
+    0xe3a00001 ,
+    0xebffff37 ,
+    0xe59402ac ,
+    0xe3700001 ,
+    0x159412b0 ,
+    0x159422b4 ,
+    0xa000003 ,
+    0xe5903000 ,
+    0xe0033001 ,
+    0xe1530002 ,
+    0x1afffffb ,
+    0xe59402b8 ,
+    0xe3700001 ,
+    0x159412bc ,
+    0x15801000 ,
+    0xe5940280 ,
+    0xe3700001 ,
+    0x15941288 ,
+    0x15801000 ,
+    0xe3a0c000 ,
+    0xe084810c ,
+    0xe5985004 ,
+    0xe3750001 ,
+    0x15986108 ,
+    0x13760001 ,
+    0xa00007b ,
+    0xe5940118 ,
+    0xe5860010 ,
+    0xe084730c ,
+    0xe594011c ,
+    0xe5860014 ,
+    0xe5970170 ,
+    0xe58601cc ,
+    0xe5970180 ,
+    0xe586020c ,
+    0xe5970190 ,
+    0xe586024c ,
+    0xe59701a0 ,
+    0xe586028c ,
+    0xe5940110 ,
+    0xe5860004 ,
+    0xe1a00006 ,
+    0xebffff8c ,
     0xe3a02022 ,
-    0xe2841014 ,
-    0xebffff58 ,
-    0xe5940000 ,
-    0xe2465802 ,
+    0xe2841020 ,
+    0xe28500c0 ,
+    0xebffff17 ,
+    0xe594000c ,
     0xe5850000 ,
-    0xe5940004 ,
+    0xe5940010 ,
     0xe5850050 ,
-    0xe5940008 ,
+    0xe5940014 ,
     0xe585007c ,
-    0xe594000c ,
+    0xe5940018 ,
     0xe5850080 ,
-    0xe594009c ,
+    0xe59400a8 ,
     0xe5850240 ,
-    0xe59400a0 ,
+    0xe59400ac ,
     0xe5850244 ,
-    0xe59400a4 ,
+    0xe59400b0 ,
     0xe5850248 ,
-    0xe59400a8 ,
+    0xe59400b4 ,
     0xe585024c ,
-    0xe59400ac ,
+    0xe59400b8 ,
     0xe5850250 ,
-    0xe59400b0 ,
+    0xe59400bc ,
     0xe5850254 ,
-    0xe59400b4 ,
+    0xe59400c0 ,
     0xe5850260 ,
-    0xe59400b8 ,
+    0xe59400c4 ,
     0xe5850264 ,
-    0xe59400bc ,
+    0xe59400c8 ,
     0xe5850270 ,
-    0xe59400c0 ,
+    0xe59400cc ,
     0xe5850274 ,
-    0xe59400c4 ,
+    0xe59400d0 ,
     0xe5850278 ,
-    0xe59400c8 ,
+    0xe59400d4 ,
     0xe585027c ,
-    0xe59400cc ,
+    0xe59400d8 ,
     0xe5850280 ,
-    0xe59400d0 ,
+    0xe59400dc ,
     0xe5850284 ,
-    0xe59400d4 ,
+    0xe59400e0 ,
     0xe5850288 ,
-    0xe59400d8 ,
+    0xe59400e4 ,
     0xe5850290 ,
-    0xe59400dc ,
+    0xe59400e8 ,
     0xe5850294 ,
-    0xe59400e0 ,
+    0xe59400ec ,
     0xe5850298 ,
-    0xe59400e4 ,
+    0xe59400f0 ,
     0xe58502c4 ,
-    0xe59400e8 ,
+    0xe59400f4 ,
     0xe58502c8 ,
-    0xe59400ec ,
+    0xe59400f8 ,
     0xe58502d0 ,
-    0xe59400f0 ,
+    0xe59400fc ,
     0xe58502d4 ,
-    0xe59400f4 ,
+    0xe5940100 ,
     0xe58502d8 ,
-    0xe59400f8 ,
+    0xe5940104 ,
     0xe58502f0 ,
     0xe3a02007 ,
-    0xe2841f4a ,
+    0xe2841f4f ,
     0xe2860034 ,
-    0xebffff1b ,
-    0xe5940100 ,
+    0xebfffedb ,
+    0xe5940114 ,
     0xe5860008 ,
-    0xe594010c ,
+    0xe5940120 ,
     0xe5860018 ,
-    0xe5940110 ,
+    0xe5940124 ,
     0xe586001c ,
-    0xe5940114 ,
+    0xe5940128 ,
     0xe5860020 ,
-    0xe5940118 ,
+    0xe594012c ,
     0xe5860024 ,
-    0xe594011c ,
+    0xe5940130 ,
     0xe5860028 ,
-    0xe5940120 ,
+    0xe5940134 ,
     0xe586002c ,
-    0xe5940124 ,
+    0xe5940138 ,
     0xe5860030 ,
-    0xe5940144 ,
+    0xe594015c ,
     0xe5860050 ,
-    0xe5940148 ,
+    0xe5940160 ,
     0xe5860054 ,
-    0xe5940154 ,
+    0xe597016c ,
     0xe58601c0 ,
-    0xe5940164 ,
+    0xe597017c ,
     0xe5860200 ,
-    0xe5940174 ,
+    0xe597018c ,
     0xe5860240 ,
-    0xe5941184 ,
-    0xe59f009c ,
-    0xe5861280 ,
-    0xe5941194 ,
+    0xe597019c ,
+    0xe5860280 ,
+    0xe59801ec ,
+    0xe3700001 ,
+    0xa00000b ,
+    0xe59711fc ,
     0xe5801008 ,
-    0xe594119c ,
+    0xe5971200 ,
+    0xe580100c ,
+    0xe5971204 ,
     0xe5801010 ,
-    0xe59411a0 ,
+    0xe5971208 ,
     0xe5801014 ,
-    0xebfffeff ,
+    0xe597122c ,
+    0xe5801038 ,
+    0xe5971230 ,
+    0xe580103c ,
+    0xe28cc001 ,
+    0xe35c0002 ,
+    0x23a00000 ,
+    0x3affff79 ,
+    0xe59412d4 ,
+    0xe1500001 ,
+    0x2a000006 ,
+    0xe0842180 ,
+    0xe59212d8 ,
+    0xe3710001 ,
+    0x159222dc ,
+    0x15812000 ,
+    0xe2800001 ,
+    0xeafffff5 ,
+    0xe2840fb6 ,
+    0xe7b02181 ,
+    0xe3720001 ,
+    0x13a01000 ,
+    0x12800004 ,
+    0xa000004 ,
+    0xe1510002 ,
+    0x38900028 ,
+    0x35835000 ,
+    0x32811001 ,
+    0x3afffffa ,
+    0xe3a06000 ,
+    0xe0840106 ,
+    0xe5907004 ,
+    0xe3770001 ,
+    0x15905108 ,
+    0x13750001 ,
+    0xa000023 ,
+    0xe1a00005 ,
+    0xebfffe96 ,
     0xe3a00001 ,
-    0xe5850044 ,
-    0xe5950048 ,
+    0xe5870044 ,
+    0xe5970048 ,
     0xe3100001 ,
     0xafffffc ,
-    0xe594014c ,
-    0xe5860180 ,
-    0xe5940150 ,
-    0xe5860190 ,
-    0xe1a00007 ,
-    0xebffff02 ,
-    0xebffff12 ,
-    0xe594015c ,
-    0xe58601d0 ,
-    0xe5940160 ,
-    0xe58601d4 ,
-    0xe594016c ,
-    0xe5860210 ,
-    0xe5940170 ,
-    0xe5860214 ,
-    0xe594017c ,
-    0xe5860250 ,
-    0xe5940180 ,
-    0xe5860254 ,
-    0xe594018c ,
-    0xe5860290 ,
-    0xe5940190 ,
-    0xe5860294 ,
-    0xe8bd40f0 ,
-    0xeaffff1c ,
-    0x20040000 ,
-    0x200200c0 ,
-    0x10128000 ,
+    0xe5940164 ,
+    0xe5850180 ,
+    0xe5940168 ,
+    0xe5850190 ,
+    0xe1a00005 ,
+    0xebfffe98 ,
+    0xe1a01007 ,
+    0xe1a00005 ,
+    0xebfffea2 ,
+    0xe0840306 ,
+    0xe5901174 ,
+    0xe58511d0 ,
+    0xe5901178 ,
+    0xe58511d4 ,
+    0xe5901184 ,
+    0xe5851210 ,
+    0xe5901188 ,
+    0xe5851214 ,
+    0xe5901194 ,
+    0xe5851250 ,
+    0xe5901198 ,
+    0xe5851254 ,
+    0xe59011a4 ,
+    0xe5851290 ,
+    0xe59001a8 ,
+    0xe5850294 ,
+    0xe1a01007 ,
+    0xe1a00005 ,
+    0xebfffeaa ,
+    0xe2866001 ,
+    0xe3560002 ,
+    0x3affffd2 ,
+    0xe59402c0 ,
+    0xe3700001 ,
+    0xa000003 ,
+    0xe5901000 ,
+    0xe59422c4 ,
+    0xe1811002 ,
+    0xe5801000 ,
+    0xe59402c8 ,
+    0xe3700001 ,
+    0x8bd81f0 ,
+    0xe3a00001 ,
+    0xe8bd41f0 ,
+    0xeafffe4f ,
index b947eb864d22796a9b90105b40074490f8d14736..445f33891cb0d5e77c65b5ba1e870feaa9921b45 100755 (executable)
@@ -1271,23 +1271,8 @@ typedef struct PCTL_REG_Tag
     uint32 DFILPCFG0;
 }PCTL_REG_T;
 
-typedef struct PUBL_REG_Tag
+typedef struct PUBL_DQS_REG_Tag
 {
-    uint32 PIR;
-    uint32 PGCR;
-    uint32 DLLGCR;
-    uint32 ACDLLCR;
-    uint32 PTR[3];
-    uint32 ACIOCR;
-    uint32 DXCCR;
-    uint32 DSGCR;
-    uint32 DCR;
-    PHY_TIMING_T phy_timing;
-    uint32 ODTCR;
-    uint32 DTAR;
-    uint32 ZQ0CR0;
-    uint32 ZQ1CR0;
-
     uint32 DX0GCR;
     uint32 DX0DLLCR;
     uint32 DX0DQTR;
@@ -1307,6 +1292,24 @@ typedef struct PUBL_REG_Tag
     uint32 DX3DLLCR;
     uint32 DX3DQTR;
     uint32 DX3DQSTR;
+}PUBL_DQS_REG;
+
+typedef struct PUBL_REG_Tag
+{
+    uint32 PIR;
+    uint32 PGCR;
+    uint32 DLLGCR;
+    uint32 ACDLLCR;
+    uint32 PTR[3];
+    uint32 ACIOCR;
+    uint32 DXCCR;
+    uint32 DSGCR;
+    uint32 DCR;
+    PHY_TIMING_T phy_timing;
+    uint32 ODTCR;
+    uint32 DTAR;
+    uint32 ZQ0CR0;
+    uint32 ZQ1CR0;
 }PUBL_REG_T;
 
 typedef struct SET_REG_Tag
@@ -1319,14 +1322,13 @@ typedef struct BACKUP_REG_Tag
 {
     uint32 tag;
     /* any addr = 0xFFFFFFFF, indicate invalid */
-    uint32 pctlAddr;
+    uint32 pctlAddr[CH_MAX];
     PCTL_REG_T pctl;
-    uint32 publAddr;
+    uint32 publAddr[CH_MAX];
     PUBL_REG_T publ;
-    uint32 nocAddr;
-    MSCH_REG   noc;
-    uint32 strideAddr;
-    uint32     stride;
+    PUBL_DQS_REG dqs[CH_MAX];
+    uint32 nocAddr[CH_MAX];
+    MSCH_REG   noc[CH_MAX];
 
     uint32 pllpdAddr;
     uint32 pllpdMask;
@@ -1344,6 +1346,9 @@ typedef struct BACKUP_REG_Tag
     uint32 dpllLockMask;
     uint32 dpllLockVal;
 
+    uint32 ddrPllSrcDivAddr;
+    uint32 ddrPllSrcDiv;
+
     uint32 retenDisAddr;
     uint32 retenDisVal;
     uint32 retenStAddr;
@@ -1352,7 +1357,7 @@ typedef struct BACKUP_REG_Tag
 
     /* ddr relative grf register */
     uint32 grfRegCnt;     //if no grf, set 0
-    SET_REG_T grf;        //SET_REG_T grf[grfRegCnt];
+    SET_REG_T grf[3];        //SET_REG_T grf[grfRegCnt];
 
     /* other ddr relative register */
     //uint32 otherRegCnt; // if = 0xFFFFFFFF, indicate invalid
@@ -1689,7 +1694,7 @@ static void __sramfunc ddr_delayus(uint32 us)
     } while (0);
 }
 
-static __sramfunc void ddr_copy(uint32 *pDest, uint32 *pSrc, uint32 words)
+void PIE_FUNC(ddr_copy)(uint32 *pDest, uint32 *pSrc, uint32 words)
 {
     uint32 i;
 
@@ -1698,6 +1703,7 @@ static __sramfunc void ddr_copy(uint32 *pDest, uint32 *pSrc, uint32 words)
         pDest[i] = pSrc[i];
     }
 }
+EXPORT_PIE_SYMBOL(FUNC(ddr_copy));
 
 static void ddr_get_datatraing_addr(uint32 *pdtar)
 {
@@ -2094,8 +2100,8 @@ static noinline uint32 ddr_get_parameter(uint32 nMHz)
     uint32 cwl;
     PCTL_TIMING_T *p_pctl_timing=&(p_ddr_reg->pctl.pctl_timing);
     PHY_TIMING_T  *p_publ_timing=&(p_ddr_reg->publ.phy_timing);
-    NOC_TIMING_T  *p_noc_timing=&(p_ddr_reg->noc.ddrtiming);
-    NOC_ACTIVATE_T  *p_noc_activate=&(p_ddr_reg->noc.activate);
+    NOC_TIMING_T  *p_noc_timing=&(p_ddr_reg->noc[0].ddrtiming);
+    NOC_ACTIVATE_T  *p_noc_activate=&(p_ddr_reg->noc[0].activate);
     uint32 ch;
     uint32 mem_type;
     uint32 ddr_speed_bin=DDR3_DEFAULT;
@@ -3270,14 +3276,14 @@ static uint32 __sramfunc ddr_update_timing(uint32 ch)
     uint32 i,bl_tmp=0;
     PCTL_TIMING_T *p_pctl_timing=&(DATA(ddr_reg).pctl.pctl_timing);
     PHY_TIMING_T  *p_publ_timing=&(DATA(ddr_reg).publ.phy_timing);
-    NOC_TIMING_T  *p_noc_timing=&(DATA(ddr_reg).noc.ddrtiming);    
-    NOC_ACTIVATE_T  *p_noc_activate=&(DATA(ddr_reg).noc.activate);
+    NOC_TIMING_T  *p_noc_timing=&(DATA(ddr_reg).noc[0].ddrtiming);    
+    NOC_ACTIVATE_T  *p_noc_activate=&(DATA(ddr_reg).noc[0].activate);
     pDDR_REG_T    pDDR_Reg = DATA(ddr_ch[ch]).pDDR_Reg;
     pDDRPHY_REG_T pPHY_Reg = DATA(ddr_ch[ch]).pPHY_Reg;
     pMSCH_REG     pMSCH_Reg= DATA(ddr_ch[ch]).pMSCH_Reg;
 
-    ddr_copy((uint32 *)&(pDDR_Reg->TOGCNT1U), (uint32*)&(p_pctl_timing->togcnt1u), 34);
-    ddr_copy((uint32 *)&(pPHY_Reg->DTPR[0]), (uint32*)&(p_publ_timing->dtpr0), 3);    
+    FUNC(ddr_copy)((uint32 *)&(pDDR_Reg->TOGCNT1U), (uint32*)&(p_pctl_timing->togcnt1u), 34);
+    FUNC(ddr_copy)((uint32 *)&(pPHY_Reg->DTPR[0]), (uint32*)&(p_publ_timing->dtpr0), 3);    
     pMSCH_Reg->ddrtiming.d32 = (pMSCH_Reg->ddrtiming.b.BwRatio) | p_noc_timing->d32;
     pMSCH_Reg->activate.d32 = p_noc_activate->d32;
     // Update PCTL BL
@@ -3334,7 +3340,7 @@ static uint32 __sramfunc ddr_update_mr(uint32 ch)
 
     cs = ((pPHY_Reg->PGCR>>18) & 0xF);
     dll_off = (pPHY_Reg->MR[1] & DDR3_DLL_DISABLE) ? 1:0;
-    ddr_copy((uint32 *)&(pPHY_Reg->MR[0]), (uint32*)&(p_publ_timing->mr[0]), 4);
+    FUNC(ddr_copy)((uint32 *)&(pPHY_Reg->MR[0]), (uint32*)&(p_publ_timing->mr[0]), 4);
     if(DATA(ddr_ch[ch]).mem_type == DDR3)
     {
         if(DATA(ddr_freq)>DDR3_DDR2_DLL_DISABLE_FREQ)
@@ -3993,19 +3999,54 @@ static void __sramfunc ddr_resume(void)
 #endif
 }
 
-#if 0
-static void ddr_reg_save(void)
+//pArg:Ö¸ÕëÄÚÈݱíʾpll pd or not¡£
+void ddr_reg_save(uint32 *pArg)
 {
-    ddr_reg.tag = 0x56313030;
-    ddr_reg.pctlAddr = RK30_DDR_PCTL_PHYS;
-    ddr_reg.publAddr = RK30_DDR_PUBL_PHYS;
-    ddr_reg.nocAddr = RK30_CPU_AXI_BUS_PHYS;
-    //PCTLR
+    uint32        ch;
+    pDDR_REG_T    pDDR_Reg=NULL;
+    pDDRPHY_REG_T pPHY_Reg=NULL;
+    pMSCH_REG     pMSCH_Reg;
+    
+    p_ddr_reg->tag = 0x56313031;
+    if(p_ddr_ch[0]->mem_type != DRAM_MAX)
+    {
+        p_ddr_reg->pctlAddr[0] = RK3288_DDR_PCTL0_PHYS;
+        p_ddr_reg->publAddr[0] = RK3288_DDR_PUBL0_PHYS;
+        p_ddr_reg->nocAddr[0] = RK3288_SERVICE_BUS_PHYS;
+        pDDR_Reg = p_ddr_ch[0]->pDDR_Reg;
+        pPHY_Reg = p_ddr_ch[0]->pPHY_Reg;
+    }
+    else
+    {
+        p_ddr_reg->pctlAddr[0] = 0xFFFFFFFF;
+        p_ddr_reg->publAddr[0] = 0xFFFFFFFF;
+        p_ddr_reg->nocAddr[0] = 0xFFFFFFFF;
+    }
+    if(p_ddr_ch[1]->mem_type != DRAM_MAX)
+    {
+        p_ddr_reg->pctlAddr[1] = RK3288_DDR_PCTL1_PHYS;
+        p_ddr_reg->publAddr[1] = RK3288_DDR_PUBL1_PHYS;
+        p_ddr_reg->nocAddr[1] = RK3288_SERVICE_BUS_PHYS+0x80;
+        if((pDDR_Reg == NULL) || (pPHY_Reg == NULL))
+        {
+            pDDR_Reg = p_ddr_ch[1]->pDDR_Reg;
+            pPHY_Reg = p_ddr_ch[1]->pPHY_Reg; 
+        }
+    }
+    else
+    {
+        p_ddr_reg->pctlAddr[1] = 0xFFFFFFFF;
+        p_ddr_reg->publAddr[1] = 0xFFFFFFFF;
+        p_ddr_reg->nocAddr[1] = 0xFFFFFFFF;
+    }
+    
+    //PCTLR    
+    (fn_to_pie(rockchip_pie_chunk, &FUNC(ddr_copy)))((uint32*)&(p_ddr_reg->pctl.pctl_timing.togcnt1u), (uint32 *)&(pDDR_Reg->TOGCNT1U), 34);
     p_ddr_reg->pctl.SCFG = pDDR_Reg->SCFG.d32;
     p_ddr_reg->pctl.CMDTSTATEN = pDDR_Reg->CMDTSTATEN;
     p_ddr_reg->pctl.MCFG1 = pDDR_Reg->MCFG1;
     p_ddr_reg->pctl.MCFG = pDDR_Reg->MCFG;
-    p_ddr_reg->pctl.pctl_timing.ddrFreq = ddr_freq;
+    p_ddr_reg->pctl.pctl_timing.ddrFreq = *kern_to_pie(rockchip_pie_chunk, &DATA(ddr_freq));
     p_ddr_reg->pctl.DFITCTRLDELAY = pDDR_Reg->DFITCTRLDELAY;
     p_ddr_reg->pctl.DFIODTCFG = pDDR_Reg->DFIODTCFG;
     p_ddr_reg->pctl.DFIODTCFG1 = pDDR_Reg->DFIODTCFG1;
@@ -4032,7 +4073,8 @@ static void ddr_reg_save(void)
     p_ddr_reg->pctl.DFISTCFG2 = pDDR_Reg->DFISTCFG2;
     p_ddr_reg->pctl.DFILPCFG0 = pDDR_Reg->DFILPCFG0;
 
-    //PUBL
+    //PUBL  
+    (fn_to_pie(rockchip_pie_chunk, &FUNC(ddr_copy)))((uint32*)&(p_ddr_reg->publ.phy_timing.dtpr0), (uint32 *)&(pPHY_Reg->DTPR[0]), 7);
     p_ddr_reg->publ.PIR = pPHY_Reg->PIR;
     p_ddr_reg->publ.PGCR = pPHY_Reg->PGCR;
     p_ddr_reg->publ.DLLGCR = pPHY_Reg->DLLGCR;
@@ -4049,71 +4091,111 @@ static void ddr_reg_save(void)
     p_ddr_reg->publ.ZQ0CR0 = (pPHY_Reg->ZQ0SR[0] & 0x0FFFFFFF) | (0x1<<28);
     p_ddr_reg->publ.ZQ1CR0 = (pPHY_Reg->ZQ1SR[0] & 0x0FFFFFFF) | (0x1<<28);
 
-    p_ddr_reg->publ.DX0GCR = pPHY_Reg->DATX8[0].DXGCR;
-    p_ddr_reg->publ.DX0DLLCR = pPHY_Reg->DATX8[0].DXDLLCR;
-    p_ddr_reg->publ.DX0DQTR = pPHY_Reg->DATX8[0].DXDQTR;
-    p_ddr_reg->publ.DX0DQSTR = pPHY_Reg->DATX8[0].DXDQSTR;
-
-    p_ddr_reg->publ.DX1GCR = pPHY_Reg->DATX8[1].DXGCR;
-    p_ddr_reg->publ.DX1DLLCR = pPHY_Reg->DATX8[1].DXDLLCR;
-    p_ddr_reg->publ.DX1DQTR = pPHY_Reg->DATX8[1].DXDQTR;
-    p_ddr_reg->publ.DX1DQSTR = pPHY_Reg->DATX8[1].DXDQSTR;
-
-    p_ddr_reg->publ.DX2GCR = pPHY_Reg->DATX8[2].DXGCR;
-    p_ddr_reg->publ.DX2DLLCR = pPHY_Reg->DATX8[2].DXDLLCR;
-    p_ddr_reg->publ.DX2DQTR = pPHY_Reg->DATX8[2].DXDQTR;
-    p_ddr_reg->publ.DX2DQSTR = pPHY_Reg->DATX8[2].DXDQSTR;
-
-    p_ddr_reg->publ.DX3GCR = pPHY_Reg->DATX8[3].DXGCR;
-    p_ddr_reg->publ.DX3DLLCR = pPHY_Reg->DATX8[3].DXDLLCR;
-    p_ddr_reg->publ.DX3DQTR = pPHY_Reg->DATX8[3].DXDQTR;
-    p_ddr_reg->publ.DX3DQSTR = pPHY_Reg->DATX8[3].DXDQSTR;
-
-    //NOC
-    p_ddr_reg->DdrConf = *(volatile uint32_t *)SysSrv_DdrConf;
-    p_ddr_reg->DdrMode = *(volatile uint32_t *)SysSrv_DdrMode;
-    p_ddr_reg->ReadLatency = *(volatile uint32_t *)SysSrv_ReadLatency;
+    for(ch=0;ch<CH_MAX;ch++)
+    {
+        if(p_ddr_ch[0]->mem_type != DRAM_MAX)
+        {
+            pPHY_Reg = p_ddr_ch[ch]->pPHY_Reg;         
+            p_ddr_reg->dqs[ch].DX0GCR = pPHY_Reg->DATX8[0].DXGCR;
+            p_ddr_reg->dqs[ch].DX0DLLCR = pPHY_Reg->DATX8[0].DXDLLCR;
+            p_ddr_reg->dqs[ch].DX0DQTR = pPHY_Reg->DATX8[0].DXDQTR;
+            p_ddr_reg->dqs[ch].DX0DQSTR = pPHY_Reg->DATX8[0].DXDQSTR;
+
+            p_ddr_reg->dqs[ch].DX1GCR = pPHY_Reg->DATX8[1].DXGCR;
+            p_ddr_reg->dqs[ch].DX1DLLCR = pPHY_Reg->DATX8[1].DXDLLCR;
+            p_ddr_reg->dqs[ch].DX1DQTR = pPHY_Reg->DATX8[1].DXDQTR;
+            p_ddr_reg->dqs[ch].DX1DQSTR = pPHY_Reg->DATX8[1].DXDQSTR;
+
+            p_ddr_reg->dqs[ch].DX2GCR = pPHY_Reg->DATX8[2].DXGCR;
+            p_ddr_reg->dqs[ch].DX2DLLCR = pPHY_Reg->DATX8[2].DXDLLCR;
+            p_ddr_reg->dqs[ch].DX2DQTR = pPHY_Reg->DATX8[2].DXDQTR;
+            p_ddr_reg->dqs[ch].DX2DQSTR = pPHY_Reg->DATX8[2].DXDQSTR;
+
+            p_ddr_reg->dqs[ch].DX3GCR = pPHY_Reg->DATX8[3].DXGCR;
+            p_ddr_reg->dqs[ch].DX3DLLCR = pPHY_Reg->DATX8[3].DXDLLCR;
+            p_ddr_reg->dqs[ch].DX3DQTR = pPHY_Reg->DATX8[3].DXDQTR;
+            p_ddr_reg->dqs[ch].DX3DQSTR = pPHY_Reg->DATX8[3].DXDQSTR;
+
+            //NOC
+            pMSCH_Reg= p_ddr_ch[ch]->pMSCH_Reg;        
+            p_ddr_reg->noc[ch].ddrconf = pMSCH_Reg->ddrconf;
+            p_ddr_reg->noc[ch].ddrtiming.d32 = pMSCH_Reg->ddrtiming.d32;
+            p_ddr_reg->noc[ch].ddrmode = pMSCH_Reg->ddrmode;
+            p_ddr_reg->noc[ch].readlatency = pMSCH_Reg->readlatency;
+            p_ddr_reg->noc[ch].activate.d32 = pMSCH_Reg->activate.d32;
+            p_ddr_reg->noc[ch].devtodev = pMSCH_Reg->devtodev;
+        }
+    }
 
     //PLLPD
-    ddr_reg.pllpdAddr = (uint32_t)pArg;  //pll power-down tag
-    ddr_reg.pllpdMask = 1;
-    ddr_reg.pllpdVal = 1;
+    p_ddr_reg->pllpdAddr = (uint32_t)pArg;  //pll power-down tag addr
+    p_ddr_reg->pllpdMask = 1;
+    p_ddr_reg->pllpdVal = 1;
 
     //DPLL
-    ddr_reg.dpllmodeAddr = RK30_CRU_PHYS + 0x40;  //APCRU_MODE_CON
-    ddr_reg.dpllSlowMode = ((3<<4)<<16) | (0<<4);
-    ddr_reg.dpllNormalMode = ((3<<4)<<16) | (1<<4);
-    ddr_reg.dpllResetAddr = RK30_CRU_PHYS + 0x1c; //APCRU_DPLL_CON3
-    ddr_reg.dpllReset = (((0x1<<5)<<16) | (0x1<<5));
-    ddr_reg.dpllDeReset = (((0x1<<5)<<16) | (0x0<<5));
-    ddr_reg.dpllConAddr = RK30_CRU_PHYS + 0x10;   //APCRU_DPLL_CON0
-    ddr_reg.dpllCon[0] = pCRU_Reg->CRU_PLL_CON[DPLL][0] | (0xFFFF<<16);
-    ddr_reg.dpllCon[1] = pCRU_Reg->CRU_PLL_CON[DPLL][1] | (0xFFFF<<16);
-    ddr_reg.dpllCon[2] = pCRU_Reg->CRU_PLL_CON[DPLL][2] | (0xFFFF<<16);
-    ddr_reg.dpllCon[3] = pCRU_Reg->CRU_PLL_CON[DPLL][3] | (0xFFFF<<16);
-    ddr_reg.dpllLockAddr = RK30_GRF_PHYS + 0x74;  //GRF_SOC_STATUS0
-    ddr_reg.dpllLockMask = (1<<5);
-    ddr_reg.dpllLockVal = (1<<5);
-
-    ddr_reg.retenDisAddr = RK30_PMU_PHYS+0x14;  //pmu_pwrmode_con_ap
-    ddr_reg.retenDisVal = (1<<18);  //OR operation
-    ddr_reg.retenStAddr = RK30_PMU_PHYS+0x14;  //pmu_pwrmode_con_ap
-    ddr_reg.retenStMask = (1<<18);
-    ddr_reg.retenStVal = (0<<18);
-
-    ddr_reg.grfRegCnt = 1;
-    ddr_reg.grf.addr = RK30_GRF_PHYS + 0x60;  //GRF_SOC_CON0
-    ddr_reg.grf.val = pGRF_Reg->GRF_SOC_CON[0] | (((0x5f<<9)|(1<<3))<<16);
-
-    ddr_reg.endTag = 0xFFFFFFFF;
+    p_ddr_reg->dpllmodeAddr = RK3288_CRU_PHYS + 0x50;  //APCRU_MODE_CON
+    p_ddr_reg->dpllSlowMode = ((3<<4)<<16) | (0<<4);
+    p_ddr_reg->dpllNormalMode = ((3<<4)<<16) | (1<<4);
+    p_ddr_reg->dpllResetAddr = RK3288_CRU_PHYS + 0x1c; //APCRU_DPLL_CON3
+    p_ddr_reg->dpllReset = (((0x1<<5)<<16) | (0x1<<5));
+    p_ddr_reg->dpllDeReset = (((0x1<<5)<<16) | (0x0<<5));
+    p_ddr_reg->dpllConAddr = RK3288_CRU_PHYS + 0x10;   //APCRU_DPLL_CON0
+    p_ddr_reg->dpllCon[0] = pCRU_Reg->CRU_PLL_CON[DPLL][0] | (0xFFFF<<16);
+    p_ddr_reg->dpllCon[1] = pCRU_Reg->CRU_PLL_CON[DPLL][1] | (0xFFFF<<16);
+    p_ddr_reg->dpllCon[2] = pCRU_Reg->CRU_PLL_CON[DPLL][2] | (0xFFFF<<16);
+    p_ddr_reg->dpllCon[3] = pCRU_Reg->CRU_PLL_CON[DPLL][3] | (0xFFFF<<16);
+    p_ddr_reg->dpllLockAddr = RK3288_GRF_PHYS + 0x284;  //GRF_SOC_STATUS1
+    p_ddr_reg->dpllLockMask = (1<<5);
+    p_ddr_reg->dpllLockVal = (1<<5);
+
+    //SET_DDR_PLL_SRC
+    p_ddr_reg->ddrPllSrcDivAddr = RK3288_CRU_PHYS + 0xc8;
+    p_ddr_reg->ddrPllSrcDiv = (pCRU_Reg->CRU_CLKSEL_CON[26] & 0x7) | (0x7<<16);
+
+    p_ddr_reg->retenDisAddr = RK3288_PMU_PHYS+0x18;  //pmu_pwrmode_con
+    p_ddr_reg->retenDisVal = (3<<22);  //OR operation
+    p_ddr_reg->retenStAddr = RK3288_PMU_PHYS+0x1c;  //pmu_pwrmode_con
+    p_ddr_reg->retenStMask = (1<<6);
+    p_ddr_reg->retenStVal = (0<<6);
+
+    p_ddr_reg->grfRegCnt = 3;
+    //DDR_16BIT,DDR_HW_WAKEUP,DDR_TYPE
+    p_ddr_reg->grf[0].addr = RK3288_GRF_PHYS + 0x244;
+    p_ddr_reg->grf[0].val = (pGRF_Reg->GRF_SOC_CON[0] & ((0x3<<8)|(0x3<<5)|(0x3<<3))) | (((0x3<<8)|(0x3<<5)|(0x3<<3))<<16);
+    
+    //LPDDR_TYPE
+    p_ddr_reg->grf[1].addr = RK3288_GRF_PHYS + 0x24c;
+    p_ddr_reg->grf[1].val = (pGRF_Reg->GRF_SOC_CON[2] & (0x3f<<8)) | ((0x3f<<8)<<16);
+
+    //STRIDE
+    p_ddr_reg->grf[2].addr = RK3288_SGRF_PHYS + 0x8;
+    p_ddr_reg->grf[2].val = READ_DDR_STRIDE() | (0x1F<<16);
+
+    p_ddr_reg->endTag = 0xFFFFFFFF;
 }
-#endif
 
-static __attribute__((aligned(4))) __sramdata uint32 ddr_reg_resume[] =
+__attribute__((aligned(4)))   uint32 ddr_reg_resume[]=
 {
 #include "ddr_reg_resume.inc"
 };
 
+char * ddr_get_resume_code_info(u32 *size)
+{
+    *size=sizeof(ddr_reg_resume);
+    
+    return (char *)ddr_reg_resume;
+
+}
+EXPORT_SYMBOL(ddr_get_resume_code_info);
+
+char * ddr_get_resume_data_info(u32 *size)
+{
+    *size=sizeof(DATA(ddr_reg));
+    return (char *) kern_to_pie(rockchip_pie_chunk, &DATA(ddr_reg));
+}
+EXPORT_SYMBOL(ddr_get_resume_data_info);
+
+
 static int ddr_init(uint32 dram_speed_bin, uint32 freq)
 {
     uint32 tmp;
@@ -4122,7 +4204,7 @@ static int ddr_init(uint32 dram_speed_bin, uint32 freq)
     struct clk *clk;
     uint32 ch,cap=0,cs_cap;
 
-    ddr_print("version 1.00 20140331 \n");
+    ddr_print("version 1.00 20140404 \n");
 
     p_ddr_reg = kern_to_pie(rockchip_pie_chunk, &DATA(ddr_reg));
     p_ddr_set_pll = fn_to_pie(rockchip_pie_chunk, &FUNC(ddr_set_pll));