⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nandfls.cod

📁 平台PXA270, Mobile6.0 这是270的mobile6.0的bootloader
💻 COD
📖 第 1 页 / 共 5 页
字号:
	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 + -