|
@@ -158,6 +158,7 @@ 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 };
|
|
static uint flash_offset_cfi[2] = { FLASH_OFFSET_CFI, FLASH_OFFSET_CFI_ALT };
|
|
|
|
+static uint flash_verbose = 1;
|
|
|
|
|
|
/* use CONFIG_SYS_MAX_FLASH_BANKS_DETECT if defined */
|
|
/* use CONFIG_SYS_MAX_FLASH_BANKS_DETECT if defined */
|
|
#ifdef CONFIG_SYS_MAX_FLASH_BANKS_DETECT
|
|
#ifdef CONFIG_SYS_MAX_FLASH_BANKS_DETECT
|
|
@@ -175,8 +176,6 @@ flash_info_t flash_info[CFI_MAX_FLASH_BANKS]; /* FLASH chips info */
|
|
#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_8BIT
|
|
#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_8BIT
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-typedef unsigned long flash_sect_t;
|
|
|
|
-
|
|
|
|
/* CFI standard query structure */
|
|
/* CFI standard query structure */
|
|
struct cfi_qry {
|
|
struct cfi_qry {
|
|
u8 qry[3];
|
|
u8 qry[3];
|
|
@@ -209,38 +208,38 @@ struct cfi_pri_hdr {
|
|
u8 minor_version;
|
|
u8 minor_version;
|
|
} __attribute__((packed));
|
|
} __attribute__((packed));
|
|
|
|
|
|
-static void flash_write8(u8 value, void *addr)
|
|
|
|
|
|
+static void __flash_write8(u8 value, void *addr)
|
|
{
|
|
{
|
|
__raw_writeb(value, addr);
|
|
__raw_writeb(value, addr);
|
|
}
|
|
}
|
|
|
|
|
|
-static void flash_write16(u16 value, void *addr)
|
|
|
|
|
|
+static void __flash_write16(u16 value, void *addr)
|
|
{
|
|
{
|
|
__raw_writew(value, addr);
|
|
__raw_writew(value, addr);
|
|
}
|
|
}
|
|
|
|
|
|
-static void flash_write32(u32 value, void *addr)
|
|
|
|
|
|
+static void __flash_write32(u32 value, void *addr)
|
|
{
|
|
{
|
|
__raw_writel(value, addr);
|
|
__raw_writel(value, addr);
|
|
}
|
|
}
|
|
|
|
|
|
-static void flash_write64(u64 value, void *addr)
|
|
|
|
|
|
+static void __flash_write64(u64 value, void *addr)
|
|
{
|
|
{
|
|
/* No architectures currently implement __raw_writeq() */
|
|
/* No architectures currently implement __raw_writeq() */
|
|
*(volatile u64 *)addr = value;
|
|
*(volatile u64 *)addr = value;
|
|
}
|
|
}
|
|
|
|
|
|
-static u8 flash_read8(void *addr)
|
|
|
|
|
|
+static u8 __flash_read8(void *addr)
|
|
{
|
|
{
|
|
return __raw_readb(addr);
|
|
return __raw_readb(addr);
|
|
}
|
|
}
|
|
|
|
|
|
-static u16 flash_read16(void *addr)
|
|
|
|
|
|
+static u16 __flash_read16(void *addr)
|
|
{
|
|
{
|
|
return __raw_readw(addr);
|
|
return __raw_readw(addr);
|
|
}
|
|
}
|
|
|
|
|
|
-static u32 flash_read32(void *addr)
|
|
|
|
|
|
+static u32 __flash_read32(void *addr)
|
|
{
|
|
{
|
|
return __raw_readl(addr);
|
|
return __raw_readl(addr);
|
|
}
|
|
}
|
|
@@ -251,7 +250,25 @@ static u64 __flash_read64(void *addr)
|
|
return *(volatile u64 *)addr;
|
|
return *(volatile u64 *)addr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS
|
|
|
|
+void flash_write8(u8 value, void *addr)__attribute__((weak, alias("__flash_write8")));
|
|
|
|
+void flash_write16(u16 value, void *addr)__attribute__((weak, alias("__flash_write16")));
|
|
|
|
+void flash_write32(u32 value, void *addr)__attribute__((weak, alias("__flash_write32")));
|
|
|
|
+void flash_write64(u64 value, void *addr)__attribute__((weak, alias("__flash_write64")));
|
|
|
|
+u8 flash_read8(void *addr)__attribute__((weak, alias("__flash_read8")));
|
|
|
|
+u16 flash_read16(void *addr)__attribute__((weak, alias("__flash_read16")));
|
|
|
|
+u32 flash_read32(void *addr)__attribute__((weak, alias("__flash_read32")));
|
|
u64 flash_read64(void *addr)__attribute__((weak, alias("__flash_read64")));
|
|
u64 flash_read64(void *addr)__attribute__((weak, alias("__flash_read64")));
|
|
|
|
+#else
|
|
|
|
+#define flash_write8 __flash_write8
|
|
|
|
+#define flash_write16 __flash_write16
|
|
|
|
+#define flash_write32 __flash_write32
|
|
|
|
+#define flash_write64 __flash_write64
|
|
|
|
+#define flash_read8 __flash_read8
|
|
|
|
+#define flash_read16 __flash_read16
|
|
|
|
+#define flash_read32 __flash_read32
|
|
|
|
+#define flash_read64 __flash_read64
|
|
|
|
+#endif
|
|
|
|
|
|
/*-----------------------------------------------------------------------
|
|
/*-----------------------------------------------------------------------
|
|
*/
|
|
*/
|
|
@@ -1054,7 +1071,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|
if (prot) {
|
|
if (prot) {
|
|
printf ("- Warning: %d protected sectors will not be erased!\n",
|
|
printf ("- Warning: %d protected sectors will not be erased!\n",
|
|
prot);
|
|
prot);
|
|
- } else {
|
|
|
|
|
|
+ } else if (flash_verbose) {
|
|
putc ('\n');
|
|
putc ('\n');
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1101,11 +1118,14 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|
if (flash_full_status_check
|
|
if (flash_full_status_check
|
|
(info, sect, info->erase_blk_tout, "erase")) {
|
|
(info, sect, info->erase_blk_tout, "erase")) {
|
|
rcode = 1;
|
|
rcode = 1;
|
|
- } else
|
|
|
|
|
|
+ } else if (flash_verbose)
|
|
putc ('.');
|
|
putc ('.');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- puts (" done\n");
|
|
|
|
|
|
+
|
|
|
|
+ if (flash_verbose)
|
|
|
|
+ puts (" done\n");
|
|
|
|
+
|
|
return rcode;
|
|
return rcode;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1217,14 +1237,16 @@ void flash_print_info (flash_info_t * info)
|
|
*/
|
|
*/
|
|
#ifdef CONFIG_FLASH_SHOW_PROGRESS
|
|
#ifdef CONFIG_FLASH_SHOW_PROGRESS
|
|
#define FLASH_SHOW_PROGRESS(scale, dots, digit, dots_sub) \
|
|
#define FLASH_SHOW_PROGRESS(scale, dots, digit, dots_sub) \
|
|
- dots -= dots_sub; \
|
|
|
|
- if ((scale > 0) && (dots <= 0)) { \
|
|
|
|
- if ((digit % 5) == 0) \
|
|
|
|
- printf ("%d", digit / 5); \
|
|
|
|
- else \
|
|
|
|
- putc ('.'); \
|
|
|
|
- digit--; \
|
|
|
|
- dots += scale; \
|
|
|
|
|
|
+ if (flash_verbose) { \
|
|
|
|
+ dots -= dots_sub; \
|
|
|
|
+ if ((scale > 0) && (dots <= 0)) { \
|
|
|
|
+ if ((digit % 5) == 0) \
|
|
|
|
+ printf ("%d", digit / 5); \
|
|
|
|
+ else \
|
|
|
|
+ putc ('.'); \
|
|
|
|
+ digit--; \
|
|
|
|
+ dots += scale; \
|
|
|
|
+ } \
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
#define FLASH_SHOW_PROGRESS(scale, dots, digit, dots_sub)
|
|
#define FLASH_SHOW_PROGRESS(scale, dots, digit, dots_sub)
|
|
@@ -1942,6 +1964,11 @@ ulong flash_get_size (ulong base, int banknum)
|
|
return (info->size);
|
|
return (info->size);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void flash_set_verbose(uint v)
|
|
|
|
+{
|
|
|
|
+ flash_verbose = v;
|
|
|
|
+}
|
|
|
|
+
|
|
/*-----------------------------------------------------------------------
|
|
/*-----------------------------------------------------------------------
|
|
*/
|
|
*/
|
|
unsigned long flash_init (void)
|
|
unsigned long flash_init (void)
|
|
@@ -2060,5 +2087,10 @@ unsigned long flash_init (void)
|
|
flash_get_info(apl[i].start));
|
|
flash_get_info(apl[i].start));
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_FLASH_CFI_MTD
|
|
|
|
+ cfi_mtd_init();
|
|
|
|
+#endif
|
|
|
|
+
|
|
return (size);
|
|
return (size);
|
|
}
|
|
}
|