📄 nandfls.cod
字号:
DCB 0x0, "I", 0x0, "D", 0x0, " ", 0x0, "0", 0x0, "x", 0x0, "%"
DCB 0x0, "x", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1EA@IJCPAIBI@?$AAU?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?5?$AAN?$AAa?$AAn?$AAd?$AA?5?$AAf?$AAl?$AAa?$AAs?$AAh?$AA?5?$AAt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EA@IJCPAIBI@?$AAU?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?5?$AAN?$AAa?$AAn?$AAd?$AA?5?$AAf?$AAl?$AAa?$AAs?$AAh?$AA?5?$AAt@| DCB "U"
DCB 0x0, "n", 0x0, "k", 0x0, "n", 0x0, "o", 0x0, "w", 0x0, "n"
DCB 0x0, " ", 0x0, "N", 0x0, "a", 0x0, "n", 0x0, "d", 0x0, " "
DCB 0x0, "f", 0x0, "l", 0x0, "a", 0x0, "s", 0x0, "h", 0x0, " "
DCB 0x0, "t", 0x0, "y", 0x0, "p", 0x0, "e", 0x0, ":", 0x0, "0"
DCB 0x0, "x", 0x0, "%", 0x0, "X", 0x0, "!", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1EM@BENDAAA@?$AAN?$AAa?$AAn?$AAd?$AA_?$AAF?$AAM?$AAD?$AA_?$AAI?$AAn?$AAi?$AAt?$AA?3?$AA?5?$AAd?$AAw?$AAN?$AAa?$AAn@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EM@BENDAAA@?$AAN?$AAa?$AAn?$AAd?$AA_?$AAF?$AAM?$AAD?$AA_?$AAI?$AAn?$AAi?$AAt?$AA?3?$AA?5?$AAd?$AAw?$AAN?$AAa?$AAn@| DCB "N"
DCB 0x0, "a", 0x0, "n", 0x0, "d", 0x0, "_", 0x0, "F", 0x0, "M"
DCB 0x0, "D", 0x0, "_", 0x0, "I", 0x0, "n", 0x0, "i", 0x0, "t"
DCB 0x0, ":", 0x0, " ", 0x0, "d", 0x0, "w", 0x0, "N", 0x0, "a"
DCB 0x0, "n", 0x0, "d", 0x0, "K", 0x0, "l", 0x0, "A", 0x0, "d"
DCB 0x0, "d", 0x0, "r", 0x0, " ", 0x0, "=", 0x0, " ", 0x0, "0"
DCB 0x0, "x", 0x0, "%", 0x0, "X", 0x0, ".", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1BM@LHIEIPAP@?$AAm?$AAs?$AAc?$AA0?$AA?5?$AAi?$AAs?$AA?5?$AA?$CF?$AAX?$AA?4?$AA?$AN?$AA?6?$AA?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1BM@LHIEIPAP@?$AAm?$AAs?$AAc?$AA0?$AA?5?$AAi?$AAs?$AA?5?$AA?$CF?$AAX?$AA?4?$AA?$AN?$AA?6?$AA?$AA@| DCB "m"
DCB 0x0, "s", 0x0, "c", 0x0, "0", 0x0, " ", 0x0, "i", 0x0, "s"
DCB 0x0, " ", 0x0, "%", 0x0, "X", 0x0, ".", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |Nand_FMD_Init| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Nand_FMD_Init| PROC
; 144 : {
00000 |$L36083|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M36081|
; 145 : DWORD dwNandKlAddr = (UINT32)OALPAtoVA(MAINSTONEII_BASE_PA_SECONDARY_FLASH, FALSE);
00004 e3a01000 mov r1, #0
00008 e3a00301 mov r0, #1, 6
0000c eb000000 bl OALPAtoVA
00010 e1a04000 mov r4, r0
; 146 : DWORD dwNandLen = 4096;
; 147 : BYTE bsDevId[4];
; 148 : t_NandFlashType NandFlashType = UNDEFINED_NAND_FLASH;
; 149 : XLLP_MEMORY_CONTROL_REGISTER_T *pMemCtrl;
; 150 :
; 151 : RETAILMSG(1, (TEXT("Nand_FMD_Init: dwNandKlAddr = 0x%X.\r\n"), dwNandKlAddr));
00014 e59f0200 ldr r0, [pc, #0x200]
00018 e1a01004 mov r1, r4
0001c eb000000 bl NKDbgPrintfW
; 152 : // Use the default address; or get flash base address and length from caller.
; 153 : memset(&sg_PXANandFlash, 0, sizeof(stPXANandFlash));
00020 e59f51f0 ldr r5, [pc, #0x1F0]
00024 e3a02044 mov r2, #0x44
00028 e3a01000 mov r1, #0
0002c e1a00005 mov r0, r5
00030 eb000000 bl memset
; 154 : sg_PXANandFlash.pbBassAdd = (BYTE *)dwNandKlAddr;
; 155 :
; 156 : sg_PXANandFlash.v_pGPIORegs = (P_XLLP_GPIO_T)OALPAtoVA(BULVERDE_BASE_REG_PA_GPIO, FALSE);
00034 e3a00101 mov r0, #1, 2
00038 e380060e orr r0, r0, #0xE, 12
0003c e3a01000 mov r1, #0
00040 e5854004 str r4, [r5, #4]
00044 eb000000 bl OALPAtoVA
00048 e1a03000 mov r3, r0
; 157 : pMemCtrl = (XLLP_MEMORY_CONTROL_REGISTER_T *)OALPAtoVA(BULVERDE_BASE_REG_PA_MEMC, FALSE);
0004c e3a00312 mov r0, #0x12, 6
00050 e3a01000 mov r1, #0
00054 e5853000 str r3, [r5]
00058 eb000000 bl OALPAtoVA
; 158 : RETAILMSG(1, (TEXT("msc0 is %X.\r\n"), pMemCtrl->MSC0));
0005c e5901008 ldr r1, [r0, #8]
00060 e59f01ac ldr r0, [pc, #0x1AC]
00064 eb000000 bl NKDbgPrintfW
; 159 : if ((sg_PXANandFlash.pbBassAdd == NULL) || (sg_PXANandFlash.v_pGPIORegs == NULL))
00068 e5952004 ldr r2, [r5, #4]
0006c e3520000 cmp r2, #0
00070 0a000062 beq |$L35604|
00074 e5953000 ldr r3, [r5]
00078 e3530000 cmp r3, #0
0007c 0a00005f beq |$L35604|
; 163 : }
; 164 : Nand_GPIO_Init();
; 165 :
; 166 : //read the chip id
; 167 : if(FALSE == NandRdId(bsDevId))
00080 e3a03090 mov r3, #0x90
00084 e5c23004 strb r3, [r2, #4]
00088 e5953004 ldr r3, [r5, #4]
0008c e3a02000 mov r2, #0
; 168 : {
; 169 : DEBUGMSG(1,(TEXT("FMD_Init: Read chip ID error!!!Maker ID:0x%X, Device ID:0x%X\n"),bsDevId[0],bsDevId[1]));
; 170 : }
; 171 : sg_PXANandFlash.dwDeviceId = (bsDevId[0] << 0x8) + bsDevId[1];
; 172 :
; 173 : // set the nand flash info
; 174 : switch (sg_PXANandFlash.dwDeviceId)
00090 e3a0eb3b mov lr, #0x3B, 22
00094 e5c32008 strb r2, [r3, #8]
00098 e5951004 ldr r1, [r5, #4]
0009c e38ee0a1 orr lr, lr, #0xA1
000a0 e5d10000 ldrb r0, [r1]
000a4 e5d13000 ldrb r3, [r1]
000a8 e5d12000 ldrb r2, [r1]
000ac e5d11000 ldrb r1, [r1]
000b0 e0834400 add r4, r3, r0, lsl #8
000b4 e585400c str r4, [r5, #0xC]
000b8 e154000e cmp r4, lr
000bc 0a000030 beq |$L35613|
000c0 e3a03b3b mov r3, #0x3B, 22
000c4 e38330d3 orr r3, r3, #0xD3
000c8 e1540003 cmp r4, r3
000cc 0a000027 beq |$L35616|
000d0 e3a03b3b mov r3, #0x3B, 22
000d4 e38330da orr r3, r3, #0xDA
000d8 e1540003 cmp r4, r3
000dc 0a00001e beq |$L35614|
000e0 e3a03b3b mov r3, #0x3B, 22
000e4 e38330dc orr r3, r3, #0xDC
000e8 e1540003 cmp r4, r3
000ec 0a000015 beq |$L35615|
000f0 e3a03b3b mov r3, #0x3B, 22
000f4 e38330f1 orr r3, r3, #0xF1
000f8 e1540003 cmp r4, r3
000fc 0a000020 beq |$L35613|
; 219 :
; 220 : default:
; 221 : sg_PXANandFlash.dwColumnCycles = 0;
00100 e3a03000 mov r3, #0
00104 e5853024 str r3, [r5, #0x24]
; 222 : sg_PXANandFlash.dwRowCycles = 0;
00108 e3a03000 mov r3, #0
0010c e5853028 str r3, [r5, #0x28]
; 223 : sg_PXANandFlash.Info.wSectorsPerBlock = 0; // 64 pages per block
00110 e3a03000 mov r3, #0
; 224 : sg_PXANandFlash.Info.dwNumBlocks = 0; // 2K per page
; 225 : sg_PXANandFlash.Info.wDataBytesPerSector = 0;
; 226 : RETAILMSG(1, (TEXT("Unknown Nand flash type:0x%X!\r\n"), sg_PXANandFlash.dwDeviceId));
00114 e1c531bc strh r3, [r5, #0x1C]
00118 e3a03000 mov r3, #0
0011c e59f00ec ldr r0, [pc, #0xEC]
00120 e5853014 str r3, [r5, #0x14]
00124 e3a03000 mov r3, #0
00128 e1a01004 mov r1, r4
0012c e1c531be strh r3, [r5, #0x1E]
00130 eb000000 bl NKDbgPrintfW
; 227 : break;
00134 e1d521be ldrh r2, [r5, #0x1E]
00138 e1d531bc ldrh r3, [r5, #0x1C]
0013c e5951014 ldr r1, [r5, #0x14]
00140 e595400c ldr r4, [r5, #0xC]
00144 ea000018 b |$L35609|
00148 |$L35615|
; 202 :
; 203 : // for samsung nand flash, 512MB
; 204 : case 0xECDC:
; 205 : sg_PXANandFlash.dwColumnCycles = 2;
00148 e3a03002 mov r3, #2
0014c e5853024 str r3, [r5, #0x24]
; 206 : sg_PXANandFlash.dwRowCycles = 3;
00150 e3a03003 mov r3, #3
; 207 : sg_PXANandFlash.Info.wSectorsPerBlock = 64; // 64 pages per block
; 208 : sg_PXANandFlash.Info.dwNumBlocks = 4096; // 2K per page
00154 e3a01a01 mov r1, #1, 20
; 209 : sg_PXANandFlash.Info.wDataBytesPerSector = 2048;
; 210 : break;
00158 ea00000d b |$L36079|
0015c |$L35614|
; 192 : break;
; 193 :
; 194 : // for samsung nand flash, 256MB
; 195 : case 0xECDA:
; 196 : sg_PXANandFlash.dwColumnCycles = 2;
0015c e3a03002 mov r3, #2
00160 e5853024 str r3, [r5, #0x24]
; 197 : sg_PXANandFlash.dwRowCycles = 3;
00164 e3a03003 mov r3, #3
; 198 : sg_PXANandFlash.Info.wSectorsPerBlock = 64; // 64 pages per block
; 199 : sg_PXANandFlash.Info.dwNumBlocks = 2048; // 2K per page
00168 e3a01b02 mov r1, #2, 22
; 200 : sg_PXANandFlash.Info.wDataBytesPerSector = 2048;
; 201 : break;
0016c ea000008 b |$L36079|
00170 |$L35616|
; 211 : // for samsung nand flash, 1GB
; 212 : case 0xECD3:
; 213 : sg_PXANandFlash.dwColumnCycles = 2;
00170 e3a03002 mov r3, #2
00174 e5853024 str r3, [r5, #0x24]
; 214 : sg_PXANandFlash.dwRowCycles = 3;
00178 e3a03003 mov r3, #3
; 215 : sg_PXANandFlash.Info.wSectorsPerBlock = 64; // 64 pages per block
; 216 : sg_PXANandFlash.Info.dwNumBlocks = 8192; // 2K per page
0017c e3a01a02 mov r1, #2, 20
; 217 : sg_PXANandFlash.Info.wDataBytesPerSector = 2048;
; 218 : break;
00180 ea000003 b |$L36079|
00184 |$L35613|
; 175 : {
; 176 : // for samsung nand flash,128MB
; 177 : case 0xECF1:
; 178 : sg_PXANandFlash.dwColumnCycles = 2;
; 179 : sg_PXANandFlash.dwRowCycles = 2;
; 180 : sg_PXANandFlash.Info.wSectorsPerBlock = 64; // 64 pages per block
; 181 : sg_PXANandFlash.Info.dwNumBlocks = 1024; // 2K per page
; 182 : sg_PXANandFlash.Info.wDataBytesPerSector = 2048;
; 183 : break;
; 184 :
; 185 : // for samsung nand flash,128MB
; 186 : case 0xECA1:
; 187 : sg_PXANandFlash.dwColumnCycles = 2;
00184 e3a03002 mov r3, #2
00188 e5853024 str r3, [r5, #0x24]
; 188 : sg_PXANandFlash.dwRowCycles = 2;
0018c e3a03002 mov r3, #2
; 189 : sg_PXANandFlash.Info.wSectorsPerBlock = 64; // 64 pages per block
; 190 : sg_PXANandFlash.Info.dwNumBlocks = 1024; // 2K per page
00190 e3a01b01 mov r1, #1, 22
00194 |$L36079|
00194 e5853028 str r3, [r5, #0x28]
00198 e3a03040 mov r3, #0x40
0019c e1c531bc strh r3, [r5, #0x1C]
; 191 : sg_PXANandFlash.Info.wDataBytesPerSector = 2048;
001a0 e3a02b02 mov r2, #2, 22
001a4 e5851014 str r1, [r5, #0x14]
001a8 e1c521be strh r2, [r5, #0x1E]
001ac |$L35609|
; 228 : }
; 229 : RETAILMSG(1, (TEXT("Nand Chip: Detect %dMB samsung nand flash, ID 0x%x\r\n"), sg_PXANandFlash.Info.dwNumBlocks * sg_PXANandFlash.Info.wSectorsPerBlock * sg_PXANandFlash.Info.wDataBytesPerSector / (1024 * 1024), sg_PXANandFlash.dwDeviceId));
001ac e0030392 mul r3, r2, r3
001b0 e59f0054 ldr r0, [pc, #0x54]
001b4 e1a02004 mov r2, r4
001b8 e0010193 mul r1, r3, r1
001bc e1a01a21 mov r1, r1, lsr #20
001c0 eb000000 bl NKDbgPrintfW
; 230 : sg_PXANandFlash.Info.flashType = NAND;
001c4 e3a03000 mov r3, #0
001c8 e5853010 str r3, [r5, #0x10]
; 231 : sg_PXANandFlash.Info.dwBytesPerBlock = (sg_PXANandFlash.Info.wSectorsPerBlock * sg_PXANandFlash.Info.wDataBytesPerSector);
001cc e1d521be ldrh r2, [r5, #0x1E]
001d0 e1d531bc ldrh r3, [r5, #0x1C]
001d4 e0010392 mul r1, r2, r3
001d8 e5851018 str r1, [r5, #0x18]
; 232 : if((1 << (8 * 3 + 1)) < (sg_PXANandFlash.Info.dwBytesPerBlock * sg_PXANandFlash.Info.dwNumBlocks))
001dc e5953014 ldr r3, [r5, #0x14]
001e0 e0030391 mul r3, r1, r3
001e4 e3530402 cmp r3, #2, 8
; 233 : {
; 234 : sg_PXANandFlash.bAddrCycles = 4;
001e8 83a03004 movhi r3, #4
; 235 : }
; 236 : else
; 237 : {
; 238 : sg_PXANandFlash.bAddrCycles = 3;
001ec 93a03003 movls r3, #3
001f0 e5c53020 strb r3, [r5, #0x20]
; 239 : }
; 240 :
; 241 : return (PVOID)(sg_PXANandFlash.pbBassAdd);
001f4 e5950004 ldr r0, [r5, #4]
; 242 : }
001f8 e8bd4030 ldmia sp!, {r4, r5, lr}
001fc e12fff1e bx lr
00200 |$L35604|
; 160 : {
; 161 : DEBUGMSG(1,(TEXT("FMD_Init: Can't get memory!!!\n")));
; 162 : return NULL;
00200 e3a00000 mov r0, #0
; 242 : }
00204 e8bd4030 ldmia sp!, {r4, r5, lr}
00208 e12fff1e bx lr
0020c |$L36086|
0020c 00000000 DCD |??_C@_1GK@OHEOAFFP@?$AAN?$AAa?$AAn?$AAd?$AA?5?$AAC?$AAh?$AAi?$AAp?$AA?3?$AA?5?$AAD?$AAe?$AAt?$AAe?$AAc?$AAt?$AA?5?$AA?$CF?$AAd@|
00210 00000000 DCD |??_C@_1EA@IJCPAIBI@?$AAU?$AAn?$AAk?$AAn?$AAo?$AAw?$AAn?$AA?5?$AAN?$AAa?$AAn?$AAd?$AA?5?$AAf?$AAl?$AAa?$AAs?$AAh?$AA?5?$AAt@|
00214 00000000 DCD |??_C@_1BM@LHIEIPAP@?$AAm?$AAs?$AAc?$AA0?$AA?5?$AAi?$AAs?$AA?5?$AA?$CF?$AAX?$AA?4?$AA?$AN?$AA?6?$AA?$AA@|
00218 00000000 DCD |?sg_PXANandFlash@@3UstPXANandFlash@@A|
0021c 00000000 DCD |??_C@_1EM@BENDAAA@?$AAN?$AAa?$AAn?$AAd?$AA_?$AAF?$AAM?$AAD?$AA_?$AAI?$AAn?$AAi?$AAt?$AA?3?$AA?5?$AAd?$AAw?$AAN?$AAa?$AAn@|
00220 |$M36082|
ENDP ; |Nand_FMD_Init|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -