diff options
| author | wdenk <wdenk> | 2003-07-07 20:07:54 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-07-07 20:07:54 +0000 | 
| commit | f12e568ca45f6c56b5a6d52a43524987e141abe7 (patch) | |
| tree | e0c4c1dc83553fa1ac900d2819a605372c1430d1 /board/tqm8xx/flash.c | |
| parent | 0d4983930a3559be92452761cfa268ee9d0f2773 (diff) | |
| download | olio-uboot-2014.01-f12e568ca45f6c56b5a6d52a43524987e141abe7.tar.xz olio-uboot-2014.01-f12e568ca45f6c56b5a6d52a43524987e141abe7.zip | |
* Add support for NSCU boardU-Boot-0_4_2
* Add support for TQM823M, TQM850M, TQM855M and TQM860M modules
* Add support for Am29LV160ML, Am29LV320ML, and Am29LV640ML
  mirror bit flash on TQM8xxM modules
Diffstat (limited to 'board/tqm8xx/flash.c')
| -rw-r--r-- | board/tqm8xx/flash.c | 79 | 
1 files changed, 61 insertions, 18 deletions
| diff --git a/board/tqm8xx/flash.c b/board/tqm8xx/flash.c index c791c3052..6ce6235d3 100644 --- a/board/tqm8xx/flash.c +++ b/board/tqm8xx/flash.c @@ -209,6 +209,10 @@ void flash_print_info  (flash_info_t *info)  #ifdef CONFIG_TQM8xxM	/* mirror bit flash */  	case FLASH_AMLV128U:	printf ("AM29LV128ML (128Mbit, uniform sector size)\n");  				break; +	case FLASH_AMLV320U:	printf ("AM29LV320ML (32Mbit, uniform sector size)\n"); +				break; +	case FLASH_AMLV640U:	printf ("AM29LV640ML (64Mbit, uniform sector size)\n"); +				break;  # else	/* ! TQM8xxM */  	case FLASH_AM400B:	printf ("AM29LV400B (4 Mbit, bottom boot sect)\n");  				break; @@ -218,15 +222,15 @@ void flash_print_info  (flash_info_t *info)  				break;  	case FLASH_AM800T:	printf ("AM29LV800T (8 Mbit, top boot sector)\n");  				break; -	case FLASH_AM160B:	printf ("AM29LV160B (16 Mbit, bottom boot sect)\n"); -				break; -	case FLASH_AM160T:	printf ("AM29LV160T (16 Mbit, top boot sector)\n"); -				break;  	case FLASH_AM320B:	printf ("AM29LV320B (32 Mbit, bottom boot sect)\n");  				break;  	case FLASH_AM320T:	printf ("AM29LV320T (32 Mbit, top boot sector)\n");  				break;  #endif	/* TQM8xxM */ +	case FLASH_AM160B:	printf ("AM29LV160B (16 Mbit, bottom boot sect)\n"); +				break; +	case FLASH_AM160T:	printf ("AM29LV160T (16 Mbit, top boot sector)\n"); +				break;  	default:		printf ("Unknown Chip Type\n");  				break;  	} @@ -294,6 +298,14 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  	switch (value) {  #ifdef CONFIG_TQM8xxM	/* mirror bit flash */  	case AMD_ID_MIRROR: +		/* Special case for AMLV320MH/L */ +		if ((addr[14] & 0x00ff00ff) == 0x001d001d && +			(addr[15] & 0x00ff00ff) == 0x00000000) { +			info->flash_id += FLASH_AMLV320U; +			info->sector_count = 64; +			info->size = 0x00800000; /* => 8 MB */ +			break; +		}   		switch(addr[14]) {  		case AMD_ID_LV128U_2:  			if (addr[15] != AMD_ID_LV128U_3) { @@ -305,6 +317,16 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  				info->size = 0x02000000;  			}  			break;				/* => 32 MB		*/ +		case AMD_ID_LV640U_2: +			if (addr[15] != AMD_ID_LV640U_3) { +				info->flash_id = FLASH_UNKNOWN; +			} +			else { +				info->flash_id += FLASH_AMLV640U; +				info->sector_count = 128; +				info->size = 0x01000000; +			} +			break;				/* => 16 MB		*/  		default:  			info->flash_id = FLASH_UNKNOWN;  			break; @@ -335,18 +357,6 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  		info->size = 0x00200000;  		break;				/* => 2 MB		*/ -	case AMD_ID_LV160T: -		info->flash_id += FLASH_AM160T; -		info->sector_count = 35; -		info->size = 0x00400000; -		break;				/* => 4 MB		*/ - -	case AMD_ID_LV160B: -		info->flash_id += FLASH_AM160B; -		info->sector_count = 35; -		info->size = 0x00400000; -		break;				/* => 4 MB		*/ -  	case AMD_ID_LV320T:  		info->flash_id += FLASH_AM320T;  		info->sector_count = 71; @@ -359,6 +369,19 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  		info->size = 0x00800000;  		break;				/* => 8 MB		*/  #endif	/* TQM8xxM */ + +	case AMD_ID_LV160T: +		info->flash_id += FLASH_AM160T; +		info->sector_count = 35; +		info->size = 0x00400000; +		break;				/* => 4 MB		*/ + +	case AMD_ID_LV160B: +		info->flash_id += FLASH_AM160B; +		info->sector_count = 35; +		info->size = 0x00400000; +		break;				/* => 4 MB		*/ +  	default:  		info->flash_id = FLASH_UNKNOWN;  		return (0);			/* => no or unknown flash */ @@ -371,6 +394,8 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  		switch (info->flash_id & FLASH_TYPEMASK) {  			/* only known types here - no default */  		case FLASH_AMLV128U: +		case FLASH_AMLV640U: +		case FLASH_AMLV320U:  			for (i = 0; i < info->sector_count; i++) {  				info->start[i] = base;  				base += 0x20000; @@ -381,7 +406,6 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  # else	/* ! TQM8xxM */  	case AMD_ID_LV400B:  	case AMD_ID_LV800B: -	case AMD_ID_LV160B:  		/* set sector offsets for bottom boot block type	*/  		info->start[0] = base + 0x00000000;  		info->start[1] = base + 0x00008000; @@ -393,7 +417,6 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  		break;  	case AMD_ID_LV400T:  	case AMD_ID_LV800T: -	case AMD_ID_LV160T:  		/* set sector offsets for top boot block type		*/  		i = info->sector_count - 1;  		info->start[i--] = base + info->size - 0x00008000; @@ -428,6 +451,26 @@ static ulong flash_get_size (vu_long *addr, flash_info_t *info)  		}  		break;  #endif	/* TQM8xxM */ +	case AMD_ID_LV160B: +		/* set sector offsets for bottom boot block type	*/ +		info->start[0] = base + 0x00000000; +		info->start[1] = base + 0x00008000; +		info->start[2] = base + 0x0000C000; +		info->start[3] = base + 0x00010000; +		for (i = 4; i < info->sector_count; i++) { +			info->start[i] = base + (i * 0x00020000) - 0x00060000; +		} +		break; +	case AMD_ID_LV160T: +		/* set sector offsets for top boot block type		*/ +		i = info->sector_count - 1; +		info->start[i--] = base + info->size - 0x00008000; +		info->start[i--] = base + info->size - 0x0000C000; +		info->start[i--] = base + info->size - 0x00010000; +		for (; i >= 0; i--) { +			info->start[i] = base + i * 0x00020000; +		} +		break;  	default:  		return (0);  		break; |