+// SPDX-License-Identifier: GPL-2.0+
/*
* (C) Copyright 2002-2004
* Brad Kemp, Seranoa Networks, Brad.Kemp@seranoa.com
*
* Copyright (C) 2006
* Tolunay Orkun <listmember@orkun.us>
- *
- * SPDX-License-Identifier: GPL-2.0+
*/
/* The DEBUG define must be before common to enable debugging */
#if defined(CONFIG_SYS_MAX_FLASH_BANKS_DETECT)
int cfi_flash_num_flash_banks = CONFIG_SYS_MAX_FLASH_BANKS_DETECT;
+#else
+int cfi_flash_num_flash_banks;
#endif
#ifdef CONFIG_CFI_FLASH /* for driver model */
/*-----------------------------------------------------------------------
*/
-#if defined(CONFIG_ENV_IS_IN_FLASH) || defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE)
+#if defined(CONFIG_ENV_IS_IN_FLASH) || defined(CONFIG_ENV_ADDR_REDUND) || \
+ (CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE)
static flash_info_t *flash_get_info(ulong base)
{
int i;
}
static inline void flash_unmap(flash_info_t *info, flash_sect_t sect,
- unsigned int offset, void *addr)
+ unsigned int offset, void *addr)
{
}
#ifdef DEBUG
debug("long addr is at %p info->portwidth = %d\n", addr,
- info->portwidth);
+ info->portwidth);
for (x = 0; x < 4 * info->portwidth; x++)
debug("addr[%x] = 0x%x\n", x, flash_read8(addr + x));
#endif
switch (info->portwidth) {
case FLASH_CFI_8BIT:
debug("fwc addr %p cmd %x %x 8bit x %d bit\n", addr, cmd,
- cword.w8, info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
+ cword.w8, info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
flash_write8(cword.w8, addr);
break;
case FLASH_CFI_16BIT:
debug("fwc addr %p cmd %x %4.4x 16bit x %d bit\n", addr,
- cmd, cword.w16,
- info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
+ cmd, cword.w16,
+ info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
flash_write16(cword.w16, addr);
break;
case FLASH_CFI_32BIT:
debug("fwc addr %p cmd %x %8.8x 32bit x %d bit\n", addr,
- cmd, cword.w32,
- info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
+ cmd, cword.w32,
+ info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
flash_write32(cword.w32, addr);
break;
case FLASH_CFI_64BIT:
print_longlong(str, cword.w64);
debug("fwrite addr %p cmd %x %s 64 bit x %d bit\n",
- addr, cmd, str,
- info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
+ addr, cmd, str,
+ info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
}
#endif
flash_write64(cword.w64, addr);
/*-----------------------------------------------------------------------
*/
-static int flash_isequal(flash_info_t *info, flash_sect_t sect,
- uint offset, uchar cmd)
+static int flash_isequal(flash_info_t *info, flash_sect_t sect, uint offset,
+ uchar cmd)
{
void *addr;
cfiword_t cword;
/*-----------------------------------------------------------------------
*/
-static int flash_isset(flash_info_t *info, flash_sect_t sect,
- uint offset, uchar cmd)
+static int flash_isset(flash_info_t *info, flash_sect_t sect, uint offset,
+ uchar cmd)
{
void *addr;
cfiword_t cword;
/*-----------------------------------------------------------------------
*/
-static int flash_toggle(flash_info_t *info, flash_sect_t sect,
- uint offset, uchar cmd)
+static int flash_toggle(flash_info_t *info, flash_sect_t sect, uint offset,
+ uchar cmd)
{
- void *addr;
+ u8 *addr;
cfiword_t cword;
int retval;
#endif
if (info->sr_supported) {
flash_write_cmd(info, sect, info->addr_unlock1,
- FLASH_CMD_READ_STATUS);
+ FLASH_CMD_READ_STATUS);
retval = !flash_isset(info, sect, 0,
- FLASH_STATUS_DONE);
+ FLASH_STATUS_DONE);
} else {
retval = flash_toggle(info, sect, 0,
- AMD_STATUS_TOGGLE);
+ AMD_STATUS_TOGGLE);
}
break;
* This routine does not set the flash to read-array mode.
*/
static int flash_status_check(flash_info_t *info, flash_sect_t sector,
- ulong tout, char *prompt)
+ ulong tout, char *prompt)
{
ulong start;
#if CONFIG_SYS_HZ != 1000
+ /* Avoid overflow for large HZ */
if ((ulong)CONFIG_SYS_HZ > 100000)
- tout *= (ulong)CONFIG_SYS_HZ / 1000; /* for a big HZ, avoid overflow */
+ tout *= (ulong)CONFIG_SYS_HZ / 1000;
else
tout = DIV_ROUND_UP(tout * (ulong)CONFIG_SYS_HZ, 1000);
#endif
while (flash_is_busy(info, sector)) {
if (get_timer(start) > tout) {
printf("Flash %s timeout at address %lx data %lx\n",
- prompt, info->start[sector],
- flash_read_long(info, sector, 0));
+ prompt, info->start[sector],
+ flash_read_long(info, sector, 0));
flash_write_cmd(info, sector, 0, info->cmd_reset);
udelay(1);
- return ERR_TIMOUT;
+ return ERR_TIMEOUT;
}
udelay(1); /* also triggers watchdog */
}
* This routine sets the flash to read-array mode.
*/
static int flash_full_status_check(flash_info_t *info, flash_sect_t sector,
- ulong tout, char *prompt)
+ ulong tout, char *prompt)
{
int retcode;
case CFI_CMDSET_INTEL_EXTENDED:
case CFI_CMDSET_INTEL_STANDARD:
if (retcode == ERR_OK &&
- !flash_isset(info, sector, 0, FLASH_STATUS_DONE)) {
+ !flash_isset(info, sector, 0, FLASH_STATUS_DONE)) {
retcode = ERR_INVAL;
printf("Flash %s error at address %lx\n", prompt,
- info->start[sector]);
+ info->start[sector]);
if (flash_isset(info, sector, 0, FLASH_STATUS_ECLBS |
FLASH_STATUS_PSLBS)) {
puts("Command Sequence Error.\n");
int ready;
#if CONFIG_SYS_HZ != 1000
+ /* Avoid overflow for large HZ */
if ((ulong)CONFIG_SYS_HZ > 100000)
- tout *= (ulong)CONFIG_SYS_HZ / 1000; /* for a big HZ, avoid overflow */
+ tout *= (ulong)CONFIG_SYS_HZ / 1000;
else
tout = DIV_ROUND_UP(tout * (ulong)CONFIG_SYS_HZ, 1000);
#endif
if (get_timer(start) > tout) {
printf("Flash %s timeout at address %lx data %lx\n",
prompt, (ulong)dst, (ulong)flash_read8(dst));
- return ERR_TIMOUT;
+ return ERR_TIMEOUT;
}
udelay(1); /* also triggers watchdog */
}
if (info != saved_info || sector >= info->sector_count)
sector = 0;
- while ((info->start[sector] < addr) &&
- (sector < info->sector_count - 1))
+ while ((sector < info->sector_count - 1) &&
+ (info->start[sector] < addr))
sector++;
while ((info->start[sector] > addr) && (sector > 0))
/*
/*-----------------------------------------------------------------------
*/
-static int flash_write_cfiword(flash_info_t *info, ulong dest,
- cfiword_t cword)
+static int flash_write_cfiword(flash_info_t *info, ulong dest, cfiword_t cword)
{
void *dstaddr = (void *)dest;
int flag;
#ifdef CONFIG_SYS_FLASH_USE_BUFFER_WRITE
static int flash_write_cfibuffer(flash_info_t *info, ulong dest, uchar *cp,
- int len)
+ int len)
{
flash_sect_t sector;
int cnt;
int retcode;
- void *src = cp;
- void *dst = (void *)dest;
- void *dst2 = dst;
+ u8 *src = cp;
+ u8 *dst = (u8 *)dest;
+ u8 *dst2 = dst;
int flag = 1;
uint offset = 0;
unsigned int shift;
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
write_cmd = (info->vendor == CFI_CMDSET_INTEL_PROG_REGIONS) ?
- FLASH_CMD_WRITE_BUFFER_PROG : FLASH_CMD_WRITE_TO_BUFFER;
+ FLASH_CMD_WRITE_BUFFER_PROG :
+ FLASH_CMD_WRITE_TO_BUFFER;
flash_write_cmd(info, sector, 0, FLASH_CMD_CLEAR_STATUS);
flash_write_cmd(info, sector, 0, FLASH_CMD_READ_STATUS);
flash_write_cmd(info, sector, 0, write_cmd);
retcode = flash_status_check(info, sector,
- info->buffer_write_tout,
- "write to buffer");
+ info->buffer_write_tout,
+ "write to buffer");
if (retcode == ERR_OK) {
/* reduce the number of loops by the width of
* the port
}
}
flash_write_cmd(info, sector, 0,
- FLASH_CMD_WRITE_BUFFER_CONFIRM);
+ FLASH_CMD_WRITE_BUFFER_CONFIRM);
retcode = flash_full_status_check(
info, sector, info->buffer_write_tout,
"buffer write");
prot++;
if (prot) {
printf("- Warning: %d protected sectors will not be erased!\n",
- prot);
+ prot);
} else if (flash_verbose) {
putc('\n');
}
case CFI_CMDSET_INTEL_STANDARD:
case CFI_CMDSET_INTEL_EXTENDED:
flash_write_cmd(info, sect, 0,
- FLASH_CMD_CLEAR_STATUS);
+ FLASH_CMD_CLEAR_STATUS);
flash_write_cmd(info, sect, 0,
- FLASH_CMD_BLOCK_ERASE);
+ FLASH_CMD_BLOCK_ERASE);
flash_write_cmd(info, sect, 0,
- FLASH_CMD_ERASE_CONFIRM);
+ FLASH_CMD_ERASE_CONFIRM);
break;
case CFI_CMDSET_AMD_STANDARD:
case CFI_CMDSET_AMD_EXTENDED:
AMD_CMD_ERASE_START);
flash_unlock_seq(info, sect);
flash_write_cmd(info, sect, 0,
- info->cmd_erase_sector);
+ info->cmd_erase_sector);
break;
#ifdef CONFIG_FLASH_CFI_LEGACY
case CFI_CMDSET_AMD_LEGACY:
#endif
default:
debug("Unknown flash vendor %d\n",
- info->vendor);
+ info->vendor);
break;
}
cword.w64 = 0xffffffffffffffffULL;
dest = flash_map(info, sect, 0);
st = flash_status_poll(info, &cword, dest,
- info->erase_blk_tout, "erase");
+ info->erase_blk_tout,
+ "erase");
flash_unmap(info, sect, 0, dest);
} else {
st = flash_full_status_check(info, sect,
}
printf("%s flash (%d x %d)",
- info->name,
- (info->portwidth << 3), (info->chipwidth << 3));
+ info->name,
+ (info->portwidth << 3), (info->chipwidth << 3));
if (info->size < 1024 * 1024)
printf(" Size: %ld kB in %d Sectors\n",
- info->size >> 10, info->sector_count);
+ info->size >> 10, info->sector_count);
else
printf(" Size: %ld MB in %d Sectors\n",
- info->size >> 20, info->sector_count);
+ info->size >> 20, info->sector_count);
printf(" ");
switch (info->vendor) {
case CFI_CMDSET_INTEL_PROG_REGIONS:
break;
}
printf(" command set, Manufacturer ID: 0x%02X, Device ID: 0x",
- info->manufacturer_id);
+ info->manufacturer_id);
printf(info->chipwidth == FLASH_CFI_16BIT ? "%04X" : "%02X",
- info->device_id);
+ info->device_id);
if ((info->device_id & 0xff) == 0x7E) {
printf(info->chipwidth == FLASH_CFI_16BIT ? "%04X" : "%02X",
- info->device_id2);
+ info->device_id2);
}
if (info->vendor == CFI_CMDSET_AMD_STANDARD && info->legacy_unlock)
printf("\n Advanced Sector Protection (PPB) enabled");
printf("\n Erase timeout: %ld ms, write timeout: %ld ms\n",
- info->erase_blk_tout,
- info->write_tout);
+ info->erase_blk_tout, info->write_tout);
if (info->buffer_size > 1) {
- printf(" Buffer write timeout: %ld ms, "
- "buffer size: %d bytes\n",
- info->buffer_write_tout,
- info->buffer_size);
+ printf(" Buffer write timeout: %ld ms, ",
+ info->buffer_write_tout);
+ printf("buffer size: %d bytes\n", info->buffer_size);
}
puts("\n Sector Start Addresses:");
#ifdef CONFIG_SYS_FLASH_EMPTY_INFO
/* print empty and read-only info */
printf(" %08lX %c %s ",
- info->start[i],
- sector_erased(info, i) ? 'E' : ' ',
- info->protect[i] ? "RO" : " ");
+ info->start[i],
+ sector_erased(info, i) ? 'E' : ' ',
+ info->protect[i] ? "RO" : " ");
#else /* ! CONFIG_SYS_FLASH_EMPTY_INFO */
printf(" %08lX %s ",
- info->start[i],
- info->protect[i] ? "RO" : " ");
+ info->start[i],
+ info->protect[i] ? "RO" : " ");
#endif
}
putc('\n');
- return;
}
/*-----------------------------------------------------------------------
wp = (addr & ~(info->portwidth - 1));
/* handle unaligned start */
- if ((aln = addr - wp) != 0) {
+ aln = addr - wp;
+ if (aln != 0) {
cword.w32 = 0;
p = (uchar *)wp;
for (i = 0; i < aln; ++i)
cword.w32 = 0;
for (i = 0; i < info->portwidth; i++)
flash_add_byte(info, &cword, *src++);
- if ((rc = flash_write_cfiword(info, wp, cword)) != 0)
+ rc = flash_write_cfiword(info, wp, cword);
+ if (rc != 0)
return rc;
wp += info->portwidth;
cnt -= info->portwidth;
i = buffered_size - (wp % buffered_size);
if (i > cnt)
i = cnt;
- if ((rc = flash_write_cfibuffer(info, wp, src, i)) != ERR_OK)
+ rc = flash_write_cfibuffer(info, wp, src, i);
+ if (rc != ERR_OK)
return rc;
i -= i & (info->portwidth - 1);
wp += i;
cword.w32 = 0;
for (i = 0; i < info->portwidth; i++)
flash_add_byte(info, &cword, *src++);
- if ((rc = flash_write_cfiword(info, wp, cword)) != 0)
+ rc = flash_write_cfiword(info, wp, cword);
+ if (rc != 0)
return rc;
wp += info->portwidth;
cnt -= info->portwidth;
static int cfi_protect_bugfix(flash_info_t *info, long sector, int prot)
{
if (manufact_match(info, INTEL_MANUFACT) &&
- info->device_id == NUMONYX_256MBIT) {
+ info->device_id == NUMONYX_256MBIT) {
/*
* see errata called
* "Numonyx Axcell P33/P30 Specification Update" :)
case CFI_CMDSET_INTEL_EXTENDED:
if (!cfi_protect_bugfix(info, sector, prot)) {
flash_write_cmd(info, sector, 0,
- FLASH_CMD_CLEAR_STATUS);
+ FLASH_CMD_CLEAR_STATUS);
flash_write_cmd(info, sector, 0,
- FLASH_CMD_PROTECT);
+ FLASH_CMD_PROTECT);
if (prot)
flash_write_cmd(info, sector, 0,
- FLASH_CMD_PROTECT_SET);
+ FLASH_CMD_PROTECT_SET);
else
flash_write_cmd(info, sector, 0,
- FLASH_CMD_PROTECT_CLEAR);
+ FLASH_CMD_PROTECT_CLEAR);
}
break;
case CFI_CMDSET_AMD_EXTENDED:
AMD_CMD_UNLOCK_START);
if (info->device_id == ATM_ID_BV6416)
flash_write_cmd(info, sector,
- 0, ATM_CMD_UNLOCK_SECT);
+ 0, ATM_CMD_UNLOCK_SECT);
}
}
if (info->legacy_unlock) {
if (prot) {
if (lock_flag) {
flash_write_cmd(info, sector, 0,
- AMD_CMD_PPB_LOCK_BC1);
+ AMD_CMD_PPB_LOCK_BC1);
flash_write_cmd(info, sector, 0,
- AMD_CMD_PPB_LOCK_BC2);
+ AMD_CMD_PPB_LOCK_BC2);
}
debug("sector %ld %slocked\n", sector,
- lock_flag ? "" : "already ");
+ lock_flag ? "" : "already ");
} else {
if (!lock_flag) {
debug("unlock %ld\n", sector);
flash_write_cmd(info, 0, 0,
- AMD_CMD_PPB_UNLOCK_BC1);
+ AMD_CMD_PPB_UNLOCK_BC1);
flash_write_cmd(info, 0, 0,
- AMD_CMD_PPB_UNLOCK_BC2);
+ AMD_CMD_PPB_UNLOCK_BC2);
}
debug("sector %ld %sunlocked\n", sector,
- !lock_flag ? "" : "already ");
+ !lock_flag ? "" : "already ");
}
if (flag)
enable_interrupts();
if (flash_status_check(info, sector,
- info->erase_blk_tout,
- prot ? "protect" : "unprotect"))
+ info->erase_blk_tout,
+ prot ? "protect" : "unprotect"))
printf("status check error\n");
flash_write_cmd(info, 0, 0,
flash_write_cmd(info, sector, 0, FLASH_CMD_CLEAR_STATUS);
flash_write_cmd(info, sector, 0, FLASH_CMD_PROTECT);
if (prot)
- flash_write_cmd(info, sector, 0, FLASH_CMD_PROTECT_SET);
+ flash_write_cmd(info, sector, 0,
+ FLASH_CMD_PROTECT_SET);
else
- flash_write_cmd(info, sector, 0, FLASH_CMD_PROTECT_CLEAR);
+ flash_write_cmd(info, sector, 0,
+ FLASH_CMD_PROTECT_CLEAR);
#endif
};
* flash_full_status_check() to work correctly
*/
flash_write_cmd(info, sector, 0, FLASH_CMD_READ_STATUS);
- if ((retcode =
- flash_full_status_check(info, sector, info->erase_blk_tout,
- prot ? "protect" : "unprotect")) == 0) {
+ retcode = flash_full_status_check(info, sector, info->erase_blk_tout,
+ prot ? "protect" : "unprotect");
+ if (retcode == 0) {
info->protect[sector] = prot;
/*
* flash_read_user_serial - read the OneTimeProgramming cells
*/
void flash_read_user_serial(flash_info_t *info, void *buffer, int offset,
- int len)
+ int len)
{
uchar *src;
uchar *dst;
* flash_read_factory_serial - read the device Id from the protection area
*/
void flash_read_factory_serial(flash_info_t *info, void *buffer, int offset,
- int len)
+ int len)
{
uchar *src;
flash_write_cmd(info, 0, 0, FLASH_CMD_READ_ID);
udelay(1000); /* some flash are slow to respond */
info->manufacturer_id = flash_read_uchar(info,
- FLASH_OFFSET_MANUFACTURER_ID);
+ FLASH_OFFSET_MANUFACTURER_ID);
info->device_id = (info->chipwidth == FLASH_CFI_16BIT) ?
flash_read_word(info, FLASH_OFFSET_DEVICE_ID) :
flash_read_uchar(info, FLASH_OFFSET_DEVICE_ID);
#ifdef CONFIG_SYS_FLASH_PROTECTION
/* read legacy lock/unlock bit from intel flash */
if (info->ext_addr) {
- info->legacy_unlock = flash_read_uchar(info,
- info->ext_addr + 5) & 0x08;
+ info->legacy_unlock =
+ flash_read_uchar(info, info->ext_addr + 5) & 0x08;
}
#endif
static void cmdset_amd_read_jedec_ids(flash_info_t *info)
{
- ushort bankId = 0;
- uchar manuId;
+ ushort bank_id = 0;
+ uchar manu_id;
uchar feature;
flash_write_cmd(info, 0, 0, AMD_CMD_RESET);
flash_write_cmd(info, 0, info->addr_unlock1, FLASH_CMD_READ_ID);
udelay(1000); /* some flash are slow to respond */
- manuId = flash_read_uchar(info, FLASH_OFFSET_MANUFACTURER_ID);
+ manu_id = flash_read_uchar(info, FLASH_OFFSET_MANUFACTURER_ID);
/* JEDEC JEP106Z specifies ID codes up to bank 7 */
- while (manuId == FLASH_CONTINUATION_CODE && bankId < 0x800) {
- bankId += 0x100;
- manuId = flash_read_uchar(info,
- bankId | FLASH_OFFSET_MANUFACTURER_ID);
+ while (manu_id == FLASH_CONTINUATION_CODE && bank_id < 0x800) {
+ bank_id += 0x100;
+ manu_id = flash_read_uchar(info,
+ bank_id | FLASH_OFFSET_MANUFACTURER_ID);
}
- info->manufacturer_id = manuId;
+ info->manufacturer_id = manu_id;
debug("info->ext_addr = 0x%x, cfi_version = 0x%x\n",
info->ext_addr, info->cfi_version);
switch (info->chipwidth) {
case FLASH_CFI_8BIT:
info->device_id = flash_read_uchar(info,
- FLASH_OFFSET_DEVICE_ID);
+ FLASH_OFFSET_DEVICE_ID);
if (info->device_id == 0x7E) {
/* AMD 3-byte (expanded) device ids */
info->device_id2 = flash_read_uchar(info,
- FLASH_OFFSET_DEVICE_ID2);
+ FLASH_OFFSET_DEVICE_ID2);
info->device_id2 <<= 8;
info->device_id2 |= flash_read_uchar(info,
FLASH_OFFSET_DEVICE_ID3);
break;
case FLASH_CFI_16BIT:
info->device_id = flash_read_word(info,
- FLASH_OFFSET_DEVICE_ID);
+ FLASH_OFFSET_DEVICE_ID);
if ((info->device_id & 0xff) == 0x7E) {
/* AMD 3-byte (expanded) device ids */
info->device_id2 = flash_read_uchar(info,
- FLASH_OFFSET_DEVICE_ID2);
+ FLASH_OFFSET_DEVICE_ID2);
info->device_id2 <<= 8;
info->device_id2 |= flash_read_uchar(info,
FLASH_OFFSET_DEVICE_ID3);
info->portwidth,
MAP_NOCACHE);
if (info->portwidth == FLASH_CFI_8BIT &&
- info->interface == FLASH_CFI_X8X16) {
+ info->interface == FLASH_CFI_X8X16) {
info->addr_unlock1 = 0x2AAA;
info->addr_unlock2 = 0x5555;
} else {
}
flash_read_jedec_ids(info);
debug("JEDEC PROBE: ID %x %x %x\n",
- info->manufacturer_id,
- info->device_id,
- info->device_id2);
+ info->manufacturer_id,
+ info->device_id,
+ info->device_id2);
if (jedec_flash_match(info, info->start[0]))
break;
* detect if flash is compatible with the Common Flash Interface (CFI)
* http://www.jedec.org/download/search/jesd68.pdf
*/
-static void flash_read_cfi(flash_info_t *info, void *buf,
- unsigned int start, size_t len)
+static void flash_read_cfi(flash_info_t *info, void *buf, unsigned int start,
+ size_t len)
{
u8 *p = buf;
unsigned int i;
for (cfi_offset = 0; cfi_offset < ARRAY_SIZE(flash_offset_cfi);
cfi_offset++) {
flash_write_cmd(info, 0, flash_offset_cfi[cfi_offset],
- FLASH_CMD_CFI);
+ FLASH_CMD_CFI);
if (flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP, 'Q') &&
- flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R') &&
- flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
+ flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP + 1, 'R') &&
+ flash_isequal(info, 0, FLASH_OFFSET_CFI_RESP + 2, 'Y')) {
flash_read_cfi(info, qry, FLASH_OFFSET_CFI_RESP,
- sizeof(struct cfi_qry));
+ sizeof(struct cfi_qry));
info->interface = le16_to_cpu(qry->interface_desc);
info->cfi_offset = flash_offset_cfi[cfi_offset];
debug("device interface is %d\n",
- info->interface);
+ info->interface);
debug("found port %d chip %d ",
- info->portwidth, info->chipwidth);
+ info->portwidth, info->chipwidth);
debug("port %d bits chip %d bits\n",
- info->portwidth << CFI_FLASH_SHIFT_WIDTH,
- info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
+ info->portwidth << CFI_FLASH_SHIFT_WIDTH,
+ info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
/* calculate command offsets as in the Linux driver */
info->addr_unlock1 = 0x555;
* So adjust the buffer size for M29EW while operating in 8-bit mode
*/
if (qry->max_buf_write_size > 0x8 &&
- info->device_id == 0x7E &&
- (info->device_id2 == 0x2201 ||
- info->device_id2 == 0x2301 ||
- info->device_id2 == 0x2801 ||
- info->device_id2 == 0x4801)) {
- debug("Adjusted buffer size on Numonyx flash"
- " M29EW family in 8 bit mode\n");
+ info->device_id == 0x7E &&
+ (info->device_id2 == 0x2201 ||
+ info->device_id2 == 0x2301 ||
+ info->device_id2 == 0x2801 ||
+ info->device_id2 == 0x4801)) {
+ debug("Adjusted buffer size on Numonyx flash");
+ debug(" M29EW family in 8 bit mode\n");
qry->max_buf_write_size = 0x8;
}
}
break;
default:
printf("CFI: Unknown command set 0x%x\n",
- info->vendor);
+ info->vendor);
/*
* Unfortunately, this means we don't know how
* to get the chip back to Read mode. Might
size_ratio = info->portwidth / info->chipwidth;
/* if the chip is x8/x16 reduce the ratio by half */
if (info->interface == FLASH_CFI_X8X16 &&
- info->chipwidth == FLASH_CFI_BY8) {
+ info->chipwidth == FLASH_CFI_BY8) {
size_ratio >>= 1;
}
debug("size_ratio %d port %d bits chip %d bits\n",
- size_ratio, info->portwidth << CFI_FLASH_SHIFT_WIDTH,
- info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
+ size_ratio, info->portwidth << CFI_FLASH_SHIFT_WIDTH,
+ info->chipwidth << CFI_FLASH_SHIFT_WIDTH);
info->size = 1 << qry.dev_size;
/* multiply the size by the number of chips */
info->size *= size_ratio;
for (i = 0; i < num_erase_regions; i++) {
if (i > NUM_ERASE_REGIONS) {
printf("%d erase regions found, only %d used\n",
- num_erase_regions, NUM_ERASE_REGIONS);
+ num_erase_regions, NUM_ERASE_REGIONS);
break;
}
tmp >>= 16;
erase_region_size =
(tmp & 0xffff) ? ((tmp & 0xffff) * 256) : 128;
- debug("erase_region_count = %d erase_region_size = %d\n",
- erase_region_count, erase_region_size);
+ debug("erase_region_count = %d ", erase_region_count);
+ debug("erase_region_size = %d\n", erase_region_size);
for (j = 0; j < erase_region_count; j++) {
if (sector - base >= info->size)
break;
FLASH_CMD_READ_ID);
info->protect[sect_cnt] =
flash_isset(info, sect_cnt,
- FLASH_OFFSET_PROTECT,
- FLASH_STATUS_PROTECT);
+ FLASH_OFFSET_PROTECT,
+ FLASH_STATUS_PROTECT);
flash_write_cmd(info, sect_cnt, 0,
FLASH_CMD_RESET);
break;
#if (CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE) && \
(!defined(CONFIG_MONITOR_IS_IN_RAM))
flash_protect(FLAG_PROTECT_SET,
- CONFIG_SYS_MONITOR_BASE,
- CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
- flash_get_info(CONFIG_SYS_MONITOR_BASE));
+ CONFIG_SYS_MONITOR_BASE,
+ CONFIG_SYS_MONITOR_BASE + monitor_flash_len - 1,
+ flash_get_info(CONFIG_SYS_MONITOR_BASE));
#endif
/* Environment protection ON by default */
#ifdef CONFIG_ENV_IS_IN_FLASH
flash_protect(FLAG_PROTECT_SET,
- CONFIG_ENV_ADDR,
- CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1,
- flash_get_info(CONFIG_ENV_ADDR));
+ CONFIG_ENV_ADDR,
+ CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE - 1,
+ flash_get_info(CONFIG_ENV_ADDR));
#endif
/* Redundant environment protection ON by default */
#ifdef CONFIG_ENV_ADDR_REDUND
flash_protect(FLAG_PROTECT_SET,
- CONFIG_ENV_ADDR_REDUND,
- CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1,
- flash_get_info(CONFIG_ENV_ADDR_REDUND));
+ CONFIG_ENV_ADDR_REDUND,
+ CONFIG_ENV_ADDR_REDUND + CONFIG_ENV_SECT_SIZE - 1,
+ flash_get_info(CONFIG_ENV_ADDR_REDUND));
#endif
#if defined(CONFIG_SYS_FLASH_AUTOPROTECT_LIST)
debug("autoprotecting from %08lx to %08lx\n",
apl[i].start, apl[i].start + apl[i].size - 1);
flash_protect(FLAG_PROTECT_SET,
- apl[i].start,
- apl[i].start + apl[i].size - 1,
- flash_get_info(apl[i].start));
+ apl[i].start,
+ apl[i].start + apl[i].size - 1,
+ flash_get_info(apl[i].start));
}
#endif
}
size += flash_info[i].size;
if (flash_info[i].flash_id == FLASH_UNKNOWN) {
#ifndef CONFIG_SYS_FLASH_QUIET_TEST
- printf("## Unknown flash on Bank %d "
- "- Size = 0x%08lx = %ld MB\n",
- i + 1, flash_info[i].size,
- flash_info[i].size >> 20);
+ printf("## Unknown flash on Bank %d ", i + 1);
+ printf("- Size = 0x%08lx = %ld MB\n",
+ flash_info[i].size,
+ flash_info[i].size >> 20);
#endif /* CONFIG_SYS_FLASH_QUIET_TEST */
}
#ifdef CONFIG_SYS_FLASH_PROTECTION
* No legancy unlocking -> unlock all sectors
*/
flash_protect(FLAG_PROTECT_CLEAR,
- flash_info[i].start[0],
- flash_info[i].start[0]
- + flash_info[i].size - 1,
- &flash_info[i]);
+ flash_info[i].start[0],
+ flash_info[i].start[0]
+ + flash_info[i].size - 1,
+ &flash_info[i]);
}
}
#endif /* CONFIG_SYS_FLASH_PROTECTION */
#ifdef CONFIG_CFI_FLASH /* for driver model */
static int cfi_flash_probe(struct udevice *dev)
{
- void *blob = (void *)gd->fdt_blob;
- int node = dev_of_offset(dev);
const fdt32_t *cell;
- phys_addr_t addr;
- int parent, addrc, sizec;
+ int addrc, sizec;
int len, idx;
- parent = fdt_parent_offset(blob, node);
- fdt_support_default_count_cells(blob, parent, &addrc, &sizec);
- /* decode regs, there may be multiple reg tuples. */
- cell = fdt_getprop(blob, node, "reg", &len);
+ addrc = dev_read_addr_cells(dev);
+ sizec = dev_read_size_cells(dev);
+
+ /* decode regs; there may be multiple reg tuples. */
+ cell = dev_read_prop(dev, "reg", &len);
if (!cell)
return -ENOENT;
idx = 0;
len /= sizeof(fdt32_t);
while (idx < len) {
- addr = fdt_translate_address((void *)blob,
- node, cell + idx);
+ phys_addr_t addr;
+
+ addr = dev_translate_address(dev, cell + idx);
+
flash_info[cfi_flash_num_flash_banks].dev = dev;
flash_info[cfi_flash_num_flash_banks].base = addr;
cfi_flash_num_flash_banks++;
+
idx += addrc + sizec;
}
gd->bd->bi_flashstart = flash_info[0].base;