mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
Fix bug in adaption of Stefano Babic's CFI driver patch.
This commit is contained in:
parent
9c0f42ecfe
commit
92eb729bad
1 changed files with 21 additions and 15 deletions
|
@ -104,6 +104,7 @@
|
||||||
#define FLASH_OFFSET_DEVICE_ID2 0x0E
|
#define FLASH_OFFSET_DEVICE_ID2 0x0E
|
||||||
#define FLASH_OFFSET_DEVICE_ID3 0x0F
|
#define FLASH_OFFSET_DEVICE_ID3 0x0F
|
||||||
#define FLASH_OFFSET_CFI 0x55
|
#define FLASH_OFFSET_CFI 0x55
|
||||||
|
#define FLASH_OFFSET_CFI_ALT 0x555
|
||||||
#define FLASH_OFFSET_CFI_RESP 0x10
|
#define FLASH_OFFSET_CFI_RESP 0x10
|
||||||
#define FLASH_OFFSET_PRIMARY_VENDOR 0x13
|
#define FLASH_OFFSET_PRIMARY_VENDOR 0x13
|
||||||
#define FLASH_OFFSET_EXT_QUERY_T_P_ADDR 0x15 /* extended query table primary addr */
|
#define FLASH_OFFSET_EXT_QUERY_T_P_ADDR 0x15 /* extended query table primary addr */
|
||||||
|
@ -154,6 +155,8 @@ typedef union {
|
||||||
|
|
||||||
#define NUM_ERASE_REGIONS 4 /* max. number of erase regions */
|
#define NUM_ERASE_REGIONS 4 /* max. number of erase regions */
|
||||||
|
|
||||||
|
static uint flash_offset_cfi[2]={FLASH_OFFSET_CFI,FLASH_OFFSET_CFI_ALT};
|
||||||
|
|
||||||
/* use CFG_MAX_FLASH_BANKS_DETECT if defined */
|
/* use CFG_MAX_FLASH_BANKS_DETECT if defined */
|
||||||
#ifdef CFG_MAX_FLASH_BANKS_DETECT
|
#ifdef CFG_MAX_FLASH_BANKS_DETECT
|
||||||
static ulong bank_base[CFG_MAX_FLASH_BANKS_DETECT] = CFG_FLASH_BANKS_LIST;
|
static ulong bank_base[CFG_MAX_FLASH_BANKS_DETECT] = CFG_FLASH_BANKS_LIST;
|
||||||
|
@ -343,7 +346,7 @@ unsigned long flash_init (void)
|
||||||
if (flash_info[i].flash_id == FLASH_UNKNOWN) {
|
if (flash_info[i].flash_id == FLASH_UNKNOWN) {
|
||||||
#ifndef CFG_FLASH_QUIET_TEST
|
#ifndef CFG_FLASH_QUIET_TEST
|
||||||
printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n",
|
printf ("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n",
|
||||||
i, flash_info[i].size, flash_info[i].size << 20);
|
i+1, flash_info[i].size, flash_info[i].size << 20);
|
||||||
#endif /* CFG_FLASH_QUIET_TEST */
|
#endif /* CFG_FLASH_QUIET_TEST */
|
||||||
}
|
}
|
||||||
#ifdef CFG_FLASH_PROTECTION
|
#ifdef CFG_FLASH_PROTECTION
|
||||||
|
@ -1136,6 +1139,7 @@ static void flash_read_jedec_ids (flash_info_t * info)
|
||||||
*/
|
*/
|
||||||
static int flash_detect_cfi (flash_info_t * info)
|
static int flash_detect_cfi (flash_info_t * info)
|
||||||
{
|
{
|
||||||
|
int cfi_offset;
|
||||||
debug ("flash detect cfi\n");
|
debug ("flash detect cfi\n");
|
||||||
|
|
||||||
for (info->portwidth = CFG_FLASH_CFI_WIDTH;
|
for (info->portwidth = CFG_FLASH_CFI_WIDTH;
|
||||||
|
@ -1144,20 +1148,22 @@ static int flash_detect_cfi (flash_info_t * info)
|
||||||
info->chipwidth <= info->portwidth;
|
info->chipwidth <= info->portwidth;
|
||||||
info->chipwidth <<= 1) {
|
info->chipwidth <<= 1) {
|
||||||
flash_write_cmd (info, 0, 0, info->cmd_reset);
|
flash_write_cmd (info, 0, 0, info->cmd_reset);
|
||||||
flash_write_cmd (info, 0, FLASH_OFFSET_CFI, FLASH_CMD_CFI);
|
for (cfi_offset=0; cfi_offset < sizeof(flash_offset_cfi)/sizeof(uint); cfi_offset++) {
|
||||||
if (flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP, 'Q')
|
flash_write_cmd (info, 0, flash_offset_cfi[cfi_offset], FLASH_CMD_CFI);
|
||||||
&& flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R')
|
if (flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP, 'Q')
|
||||||
&& flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
|
&& flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R')
|
||||||
info->interface = flash_read_ushort (info, 0, FLASH_OFFSET_INTERFACE);
|
&& flash_isequal (info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
|
||||||
info->cfi_offset=flash_offset_cfi[cfi_offset];
|
info->interface = flash_read_ushort (info, 0, FLASH_OFFSET_INTERFACE);
|
||||||
debug ("device interface is %d\n",
|
info->cfi_offset=flash_offset_cfi[cfi_offset];
|
||||||
info->interface);
|
debug ("device interface is %d\n",
|
||||||
debug ("found port %d chip %d ",
|
info->interface);
|
||||||
info->portwidth, info->chipwidth);
|
debug ("found port %d chip %d ",
|
||||||
debug ("port %d bits chip %d bits\n",
|
info->portwidth, info->chipwidth);
|
||||||
info->portwidth << CFI_FLASH_SHIFT_WIDTH,
|
debug ("port %d bits chip %d bits\n",
|
||||||
info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
|
info->portwidth << CFI_FLASH_SHIFT_WIDTH,
|
||||||
return 1;
|
info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue