X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=board%2Frpxsuper%2Fflash.c;h=70ae1d2ff93f8f897f1dcab5527db1903150ac98;hb=e5f5c4a977c411c0cd3899a4f9487eea77a0e150;hp=0c298ba858fa2d534cace9e3c9a160c5a5182e01;hpb=affae2bff825c1a8d2cfeaf7b270188d251d39d2;p=karo-tx-uboot.git diff --git a/board/rpxsuper/flash.c b/board/rpxsuper/flash.c index 0c298ba858..70ae1d2ff9 100644 --- a/board/rpxsuper/flash.c +++ b/board/rpxsuper/flash.c @@ -33,7 +33,7 @@ #include #include -flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; +flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; #define RD_SWP32(x) in_le32((volatile u32*)x) @@ -47,41 +47,39 @@ static int write_word (flash_info_t *info, ulong dest, ulong data); /*----------------------------------------------------------------------- */ -unsigned long flash_init (void) +unsigned long flash_init(void) { - unsigned long size; - int i; - - /* Init: no FLASHes known */ - for (i=0; i= CFG_FLASH0_BASE - flash_protect(FLAG_PROTECT_SET, - CFG_MONITOR_BASE, - CFG_MONITOR_BASE+CFG_MONITOR_LEN-1, - &flash_info[0]); + /* + * protect monitor and environment sectors + */ + +#if CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH0_BASE + flash_protect(FLAG_PROTECT_SET, + CONFIG_SYS_MONITOR_BASE, + CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1, + &flash_info[0]); #endif -#if (CFG_ENV_IS_IN_FLASH == 1) && defined(CFG_ENV_ADDR) -# ifndef CFG_ENV_SIZE -# define CFG_ENV_SIZE CFG_ENV_SECT_SIZE -# endif - flash_protect(FLAG_PROTECT_SET, - CFG_ENV_ADDR, - CFG_ENV_ADDR + CFG_ENV_SIZE - 1, - &flash_info[0]); +#if defined(CONFIG_ENV_IS_IN_FLASH) && defined(CONFIG_ENV_ADDR) +#ifndef CONFIG_ENV_SIZE +#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE +#endif + flash_protect(FLAG_PROTECT_SET, + CONFIG_ENV_ADDR, + CONFIG_ENV_ADDR + CONFIG_ENV_SIZE - 1, &flash_info[0]); #endif - return /*size*/ (CFG_FLASH0_SIZE * 1024 * 1024); + return CONFIG_SYS_FLASH0_SIZE * 1024 * 1024; } /*----------------------------------------------------------------------- @@ -172,7 +170,7 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info) * Bank 2 (48 Sectors): 23-70=64kbyte */ info->flash_id = (AMD_MANUFACT & FLASH_VENDMASK) | - (AMD_ID_DL323B & FLASH_TYPEMASK); + (AMD_ID_DL323B & FLASH_TYPEMASK); info->sector_count = 71; info->size = 4 * (8 * 8 + 63 * 64) * 1024; } @@ -183,24 +181,24 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info) /* set up sector start address table */ for (i = 0; i < 8; i++) { - info->start[i] = base + (i * 0x8000); + info->start[i] = base + (i * 0x8000); } for (i = 8; i < info->sector_count; i++) { - info->start[i] = base + (i * 0x40000) + 8 * 0x8000 - 8 * 0x40000; + info->start[i] = base + (i * 0x40000) + 8 * 0x8000 - 8 * 0x40000; } /* check for protected sectors */ for (i = 0; i < info->sector_count; i++) { - /* read sector protection at sector address */ + /* read sector protection at sector address */ addr = (volatile unsigned long *)(info->start[i]); - addr[2 * 0x0555] = 0xAAAAAAAA; + addr[2 * 0x0555] = 0xAAAAAAAA; addr[2 * 0x02AA] = 0x55555555; addr[2 * 0x0555] = 0x90909090; addr[2 * 0x0555 + 1] = 0xAAAAAAAA; addr[2 * 0x02AA + 1] = 0x55555555; addr[2 * 0x0555 + 1] = 0x90909090; udelay (1000); - base = RD_SWP32(&addr[4]); + base = RD_SWP32(&addr[4]); base |= RD_SWP32(&addr[5]); info->protect[i] = base & 0x00010001 ? 1 : 0; } @@ -292,7 +290,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last) addr = (vu_long*)(info->start[l_sect]); while ( (addr[0] & 0x80808080) != 0x80808080 || (addr[1] & 0x80808080) != 0x80808080) { - if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) { + if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) { printf ("Timeout\n"); return 1; } @@ -404,14 +402,14 @@ static int write_word (flash_info_t *info, ulong dest, ulong data) flag = disable_interrupts(); if ((dest & 0x00000004) == 0) { - addr[2 * 0x0555] = 0xAAAAAAAA; + addr[2 * 0x0555] = 0xAAAAAAAA; addr[2 * 0x02AA] = 0x55555555; - addr[2 * 0x0555] = 0xA0A0A0A0; + addr[2 * 0x0555] = 0xA0A0A0A0; } else { - addr[2 * 0x0555 + 1] = 0xAAAAAAAA; + addr[2 * 0x0555 + 1] = 0xAAAAAAAA; addr[2 * 0x02AA + 1] = 0x55555555; - addr[2 * 0x0555 + 1] = 0xA0A0A0A0; + addr[2 * 0x0555 + 1] = 0xA0A0A0A0; } *((vu_long *)dest) = data; @@ -423,7 +421,7 @@ static int write_word (flash_info_t *info, ulong dest, ulong data) /* data polling for D7 */ start = get_timer (0); while ((*((vu_long *)dest) & 0x80808080) != (data & 0x80808080)) { - if (get_timer(start) > CFG_FLASH_WRITE_TOUT) { + if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) { return (1); } }