Uint8 self_check(){ if(check_code()!=E_OK) return E_ERR; if(check_rom()!=E_OK) return E_ERR; if(check_ram()!=E_OK) return E_ERR; if(check_eeprom()!=E_OK) return E_ERR; if(check_ad()!=E_OK) return E_ERR; return E_OK; }
phys_size_t initdram(int board_type) { volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR; volatile memctl8xx_t *memctl = &immap->im_memctl; long int size; upmconfig(UPMB, (uint *) sdram_table, sizeof(sdram_table) / sizeof(uint)); /* * Preliminary prescaler for refresh */ memctl->memc_mptpr = MPTPR_PTP_DIV8; memctl->memc_mar = MAR_SDRAM_INIT; /* 32-bit address to be output on the address bus if AMX = 0b11 */ /* * Map controller bank 3 to the SDRAM bank at preliminary address. */ memctl->memc_or3 = CONFIG_SYS_OR3_PRELIM; memctl->memc_br3 = CONFIG_SYS_BR3_PRELIM; memctl->memc_mbmr = CONFIG_SYS_MAMR & ~MAMR_PTAE; /* no refresh yet */ udelay(200); /* perform SDRAM initialisation sequence */ memctl->memc_mcr = MCR_OP_RUN | MCR_UPM_B | MCR_MB_CS3 | MCR_MLCF(1) | MCR_MAD(0x3C); /* precharge all */ udelay(1); memctl->memc_mcr = MCR_OP_RUN | MCR_UPM_B | MCR_MB_CS3 | MCR_MLCF(2) | MCR_MAD(0x30); /* refresh 2 times(0) */ udelay(1); memctl->memc_mcr = MCR_OP_RUN | MCR_UPM_B | MCR_MB_CS3 | MCR_MLCF(1) | MCR_MAD(0x3E); /* exception program (write mar)*/ udelay(1); memctl->memc_mbmr |= MAMR_PTAE; /* enable refresh */ udelay(10000); { u32 d1, d2; d1 = 0xAA55AA55; *(volatile u32 *)0 = d1; d2 = *(volatile u32 *)0; if (d1 != d2) { printf("DRAM fails: wrote 0x%08x read 0x%08x\n", d1, d2); hang(); } d1 = 0x55AA55AA; *(volatile u32 *)0 = d1; d2 = *(volatile u32 *)0; if (d1 != d2) { printf("DRAM fails: wrote 0x%08x read 0x%08x\n", d1, d2); hang(); } } size = get_ram_size((long *)0, SDRAM_MAX_SIZE); #if 0 printf("check 0\n"); check_ram(( 0 << 20), (2 << 20)); printf("check 16\n"); check_ram((16 << 20), (2 << 20)); printf("check 32\n"); check_ram((32 << 20), (2 << 20)); printf("check 48\n"); check_ram((48 << 20), (2 << 20)); #endif if (size == 0) { printf("SIZE is zero: LOOP on 0\n"); for (;;) { *(volatile u32 *)0 = 0; (void)*(volatile u32 *)0; } } return size; }