Message ID | 1449843417-4189-1-git-send-email-jteki@openedev.com |
---|---|
State | Superseded |
Delegated to: | Jagannadha Sutradharudu Teki |
Headers | show |
Hi Bin, On 11 December 2015 at 19:46, Jagan Teki <jteki@openedev.com> wrote: > Rename spi_flash_validate_params to spi_flash_scan > as this code not only deals with params setup but > also configure all spi_flash attributes. > > And also moved all flash related code into > spi_flash_scan for future functionality addition. > > Tested-by: Jagan Teki <jteki@openedev.com> > Tested-by: Bin Meng <bmeng.cn@gmail.com> > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > Signed-off-by: Jagan Teki <jteki@openedev.com> > --- > Changes for v9: > - Fixed nits pointed by Bin > > drivers/mtd/spi/sf_probe.c | 147 +++++++++++++++++++++++---------------------- > 1 file changed, 76 insertions(+), 71 deletions(-) > > diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c > index a619182..d60c40e 100644 > --- a/drivers/mtd/spi/sf_probe.c > +++ b/drivers/mtd/spi/sf_probe.c > @@ -130,13 +130,42 @@ bank_end: > } > #endif > > -static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, > - struct spi_flash *flash) > +#if CONFIG_IS_ENABLED(OF_CONTROL) > +int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) > +{ > + fdt_addr_t addr; > + fdt_size_t size; > + int node; > + > + /* If there is no node, do nothing */ > + node = fdtdec_next_compatible(blob, 0, COMPAT_GENERIC_SPI_FLASH); > + if (node < 0) > + return 0; > + > + addr = fdtdec_get_addr_size(blob, node, "memory-map", &size); > + if (addr == FDT_ADDR_T_NONE) { > + debug("%s: Cannot decode address\n", __func__); > + return 0; > + } > + > + if (flash->size != size) { > + debug("%s: Memory map must cover entire device\n", __func__); > + return -1; > + } > + flash->memory_map = map_sysmem(addr, size); > + > + return 0; > +} > +#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ > + > +static int spi_flash_scan(struct spi_slave *spi, u8 *idcode, > + struct spi_flash *flash) > { Please let me know if your fine? I need to push this series asap before the next released. > const struct spi_flash_params *params; > u8 cmd; > u16 jedec = idcode[1] << 8 | idcode[2]; > u16 ext_jedec = idcode[3] << 8 | idcode[4]; > + int ret; > > /* Validate params from spi_flash_params table */ > params = spi_flash_params_table; > @@ -158,6 +187,13 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, > return -EPROTONOSUPPORT; > } > > + /* Flash powers up read-only, so clear BP# bits */ > +#if defined(CONFIG_SPI_FLASH_ATMEL) || \ > + defined(CONFIG_SPI_FLASH_MACRONIX) || \ > + defined(CONFIG_SPI_FLASH_SST) > + spi_flash_cmd_write_status(flash, 0); > +#endif > + > /* Assign spi data */ > flash->spi = spi; > flash->name = params->name; > @@ -253,6 +289,17 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, > /* Go for default supported write cmd */ > flash->write_cmd = CMD_PAGE_PROGRAM; > > + /* Set the quad enable bit - only for quad commands */ > + if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || > + (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || > + (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { > + ret = spi_flash_set_qeb(flash, idcode[0]); > + if (ret) { > + debug("SF: Fail to set QEB for %02x\n", idcode[0]); > + return -EINVAL; > + } > + } > + > /* Read dummy_byte: dummy byte is determined based on the > * dummy cycles of a particular command. > * Fast commands - dummy_byte = dummy_cycles/8 > @@ -279,48 +326,41 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, > > /* Configure the BAR - discover bank cmds and read current bank */ > #ifdef CONFIG_SPI_FLASH_BAR > - int ret = spi_flash_read_bank(flash, idcode[0]); > + ret = spi_flash_read_bank(flash, idcode[0]); > if (ret < 0) > return ret; > #endif > > - /* Flash powers up read-only, so clear BP# bits */ > -#if defined(CONFIG_SPI_FLASH_ATMEL) || \ > - defined(CONFIG_SPI_FLASH_MACRONIX) || \ > - defined(CONFIG_SPI_FLASH_SST) > - spi_flash_cmd_write_status(flash, 0); > -#endif > - > - return 0; > -} > - > #if CONFIG_IS_ENABLED(OF_CONTROL) > -int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) > -{ > - fdt_addr_t addr; > - fdt_size_t size; > - int node; > - > - /* If there is no node, do nothing */ > - node = fdtdec_next_compatible(blob, 0, COMPAT_GENERIC_SPI_FLASH); > - if (node < 0) > - return 0; > - > - addr = fdtdec_get_addr_size(blob, node, "memory-map", &size); > - if (addr == FDT_ADDR_T_NONE) { > - debug("%s: Cannot decode address\n", __func__); > - return 0; > + ret = spi_flash_decode_fdt(gd->fdt_blob, flash); > + if (ret) { > + debug("SF: FDT decode error\n"); > + return -EINVAL; > } > +#endif > > - if (flash->size != size) { > - debug("%s: Memory map must cover entire device\n", __func__); > - return -1; > +#ifndef CONFIG_SPL_BUILD > + printf("SF: Detected %s with page size ", flash->name); > + print_size(flash->page_size, ", erase size "); > + print_size(flash->erase_size, ", total "); > + print_size(flash->size, ""); > + if (flash->memory_map) > + printf(", mapped at %p", flash->memory_map); > + puts("\n"); > +#endif > + > +#ifndef CONFIG_SPI_FLASH_BAR > + if (((flash->dual_flash == SF_SINGLE_FLASH) && > + (flash->size > SPI_FLASH_16MB_BOUN)) || > + ((flash->dual_flash > SF_SINGLE_FLASH) && > + (flash->size > SPI_FLASH_16MB_BOUN << 1))) { > + puts("SF: Warning - Only lower 16MiB accessible,"); > + puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); > } > - flash->memory_map = map_sysmem(addr, size); > +#endif > > - return 0; > + return ret; > } > -#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ > > /** > * spi_flash_probe_slave() - Probe for a SPI flash device on a bus > @@ -359,47 +399,12 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash) > print_buffer(0, idcode, 1, sizeof(idcode), 0); > #endif > > - if (spi_flash_validate_params(spi, idcode, flash)) { > + ret = spi_flash_scan(spi, idcode, flash); > + if (ret) { > ret = -EINVAL; > goto err_read_id; > } > > - /* Set the quad enable bit - only for quad commands */ > - if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || > - (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || > - (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { > - if (spi_flash_set_qeb(flash, idcode[0])) { > - debug("SF: Fail to set QEB for %02x\n", idcode[0]); > - ret = -EINVAL; > - goto err_read_id; > - } > - } > - > -#if CONFIG_IS_ENABLED(OF_CONTROL) > - if (spi_flash_decode_fdt(gd->fdt_blob, flash)) { > - debug("SF: FDT decode error\n"); > - ret = -EINVAL; > - goto err_read_id; > - } > -#endif > -#ifndef CONFIG_SPL_BUILD > - printf("SF: Detected %s with page size ", flash->name); > - print_size(flash->page_size, ", erase size "); > - print_size(flash->erase_size, ", total "); > - print_size(flash->size, ""); > - if (flash->memory_map) > - printf(", mapped at %p", flash->memory_map); > - puts("\n"); > -#endif > -#ifndef CONFIG_SPI_FLASH_BAR > - if (((flash->dual_flash == SF_SINGLE_FLASH) && > - (flash->size > SPI_FLASH_16MB_BOUN)) || > - ((flash->dual_flash > SF_SINGLE_FLASH) && > - (flash->size > SPI_FLASH_16MB_BOUN << 1))) { > - puts("SF: Warning - Only lower 16MiB accessible,"); > - puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); > - } > -#endif > #ifdef CONFIG_SPI_FLASH_MTD > ret = spi_flash_mtd_register(flash); > #endif > -- > 1.9.1 >
Hi Jagan, On Fri, Dec 11, 2015 at 10:31 PM, Jagan Teki <jteki@openedev.com> wrote: > Hi Bin, > > On 11 December 2015 at 19:46, Jagan Teki <jteki@openedev.com> wrote: >> Rename spi_flash_validate_params to spi_flash_scan >> as this code not only deals with params setup but >> also configure all spi_flash attributes. >> >> And also moved all flash related code into >> spi_flash_scan for future functionality addition. >> >> Tested-by: Jagan Teki <jteki@openedev.com> >> Tested-by: Bin Meng <bmeng.cn@gmail.com> >> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> >> Reviewed-by: Simon Glass <sjg@chromium.org> >> Signed-off-by: Jagan Teki <jteki@openedev.com> >> --- >> Changes for v9: >> - Fixed nits pointed by Bin >> >> drivers/mtd/spi/sf_probe.c | 147 +++++++++++++++++++++++---------------------- >> 1 file changed, 76 insertions(+), 71 deletions(-) >> >> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c >> index a619182..d60c40e 100644 >> --- a/drivers/mtd/spi/sf_probe.c >> +++ b/drivers/mtd/spi/sf_probe.c >> @@ -130,13 +130,42 @@ bank_end: >> } >> #endif >> >> -static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, >> - struct spi_flash *flash) >> +#if CONFIG_IS_ENABLED(OF_CONTROL) >> +int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) >> +{ >> + fdt_addr_t addr; >> + fdt_size_t size; >> + int node; >> + >> + /* If there is no node, do nothing */ >> + node = fdtdec_next_compatible(blob, 0, COMPAT_GENERIC_SPI_FLASH); >> + if (node < 0) >> + return 0; >> + >> + addr = fdtdec_get_addr_size(blob, node, "memory-map", &size); >> + if (addr == FDT_ADDR_T_NONE) { >> + debug("%s: Cannot decode address\n", __func__); >> + return 0; >> + } >> + >> + if (flash->size != size) { >> + debug("%s: Memory map must cover entire device\n", __func__); >> + return -1; >> + } >> + flash->memory_map = map_sysmem(addr, size); >> + >> + return 0; >> +} >> +#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ >> + >> +static int spi_flash_scan(struct spi_slave *spi, u8 *idcode, >> + struct spi_flash *flash) >> { > > Please let me know if your fine? I need to push this series asap > before the next released. Still looks not correct. See http://patchwork.ozlabs.org/patch/555780/. I sent you a patch offline. Please check that. > >> const struct spi_flash_params *params; >> u8 cmd; >> u16 jedec = idcode[1] << 8 | idcode[2]; >> u16 ext_jedec = idcode[3] << 8 | idcode[4]; >> + int ret; >> >> /* Validate params from spi_flash_params table */ >> params = spi_flash_params_table; >> @@ -158,6 +187,13 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, >> return -EPROTONOSUPPORT; >> } >> >> + /* Flash powers up read-only, so clear BP# bits */ >> +#if defined(CONFIG_SPI_FLASH_ATMEL) || \ >> + defined(CONFIG_SPI_FLASH_MACRONIX) || \ >> + defined(CONFIG_SPI_FLASH_SST) >> + spi_flash_cmd_write_status(flash, 0); >> +#endif >> + >> /* Assign spi data */ >> flash->spi = spi; >> flash->name = params->name; >> @@ -253,6 +289,17 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, >> /* Go for default supported write cmd */ >> flash->write_cmd = CMD_PAGE_PROGRAM; >> >> + /* Set the quad enable bit - only for quad commands */ >> + if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || >> + (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || >> + (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { >> + ret = spi_flash_set_qeb(flash, idcode[0]); >> + if (ret) { >> + debug("SF: Fail to set QEB for %02x\n", idcode[0]); >> + return -EINVAL; >> + } >> + } >> + >> /* Read dummy_byte: dummy byte is determined based on the >> * dummy cycles of a particular command. >> * Fast commands - dummy_byte = dummy_cycles/8 >> @@ -279,48 +326,41 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, >> >> /* Configure the BAR - discover bank cmds and read current bank */ >> #ifdef CONFIG_SPI_FLASH_BAR >> - int ret = spi_flash_read_bank(flash, idcode[0]); >> + ret = spi_flash_read_bank(flash, idcode[0]); >> if (ret < 0) >> return ret; >> #endif >> >> - /* Flash powers up read-only, so clear BP# bits */ >> -#if defined(CONFIG_SPI_FLASH_ATMEL) || \ >> - defined(CONFIG_SPI_FLASH_MACRONIX) || \ >> - defined(CONFIG_SPI_FLASH_SST) >> - spi_flash_cmd_write_status(flash, 0); >> -#endif >> - >> - return 0; >> -} >> - >> #if CONFIG_IS_ENABLED(OF_CONTROL) >> -int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) >> -{ >> - fdt_addr_t addr; >> - fdt_size_t size; >> - int node; >> - >> - /* If there is no node, do nothing */ >> - node = fdtdec_next_compatible(blob, 0, COMPAT_GENERIC_SPI_FLASH); >> - if (node < 0) >> - return 0; >> - >> - addr = fdtdec_get_addr_size(blob, node, "memory-map", &size); >> - if (addr == FDT_ADDR_T_NONE) { >> - debug("%s: Cannot decode address\n", __func__); >> - return 0; >> + ret = spi_flash_decode_fdt(gd->fdt_blob, flash); >> + if (ret) { >> + debug("SF: FDT decode error\n"); >> + return -EINVAL; >> } >> +#endif >> >> - if (flash->size != size) { >> - debug("%s: Memory map must cover entire device\n", __func__); >> - return -1; >> +#ifndef CONFIG_SPL_BUILD >> + printf("SF: Detected %s with page size ", flash->name); >> + print_size(flash->page_size, ", erase size "); >> + print_size(flash->erase_size, ", total "); >> + print_size(flash->size, ""); >> + if (flash->memory_map) >> + printf(", mapped at %p", flash->memory_map); >> + puts("\n"); >> +#endif >> + >> +#ifndef CONFIG_SPI_FLASH_BAR >> + if (((flash->dual_flash == SF_SINGLE_FLASH) && >> + (flash->size > SPI_FLASH_16MB_BOUN)) || >> + ((flash->dual_flash > SF_SINGLE_FLASH) && >> + (flash->size > SPI_FLASH_16MB_BOUN << 1))) { >> + puts("SF: Warning - Only lower 16MiB accessible,"); >> + puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); >> } >> - flash->memory_map = map_sysmem(addr, size); >> +#endif >> >> - return 0; >> + return ret; >> } >> -#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ >> >> /** >> * spi_flash_probe_slave() - Probe for a SPI flash device on a bus >> @@ -359,47 +399,12 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash) >> print_buffer(0, idcode, 1, sizeof(idcode), 0); >> #endif >> >> - if (spi_flash_validate_params(spi, idcode, flash)) { >> + ret = spi_flash_scan(spi, idcode, flash); >> + if (ret) { >> ret = -EINVAL; >> goto err_read_id; >> } >> >> - /* Set the quad enable bit - only for quad commands */ >> - if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || >> - (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || >> - (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { >> - if (spi_flash_set_qeb(flash, idcode[0])) { >> - debug("SF: Fail to set QEB for %02x\n", idcode[0]); >> - ret = -EINVAL; >> - goto err_read_id; >> - } >> - } >> - >> -#if CONFIG_IS_ENABLED(OF_CONTROL) >> - if (spi_flash_decode_fdt(gd->fdt_blob, flash)) { >> - debug("SF: FDT decode error\n"); >> - ret = -EINVAL; >> - goto err_read_id; >> - } >> -#endif >> -#ifndef CONFIG_SPL_BUILD >> - printf("SF: Detected %s with page size ", flash->name); >> - print_size(flash->page_size, ", erase size "); >> - print_size(flash->erase_size, ", total "); >> - print_size(flash->size, ""); >> - if (flash->memory_map) >> - printf(", mapped at %p", flash->memory_map); >> - puts("\n"); >> -#endif >> -#ifndef CONFIG_SPI_FLASH_BAR >> - if (((flash->dual_flash == SF_SINGLE_FLASH) && >> - (flash->size > SPI_FLASH_16MB_BOUN)) || >> - ((flash->dual_flash > SF_SINGLE_FLASH) && >> - (flash->size > SPI_FLASH_16MB_BOUN << 1))) { >> - puts("SF: Warning - Only lower 16MiB accessible,"); >> - puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); >> - } >> -#endif >> #ifdef CONFIG_SPI_FLASH_MTD >> ret = spi_flash_mtd_register(flash); >> #endif >> -- Regards, Bin
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c index a619182..d60c40e 100644 --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@ -130,13 +130,42 @@ bank_end: } #endif -static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, - struct spi_flash *flash) +#if CONFIG_IS_ENABLED(OF_CONTROL) +int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) +{ + fdt_addr_t addr; + fdt_size_t size; + int node; + + /* If there is no node, do nothing */ + node = fdtdec_next_compatible(blob, 0, COMPAT_GENERIC_SPI_FLASH); + if (node < 0) + return 0; + + addr = fdtdec_get_addr_size(blob, node, "memory-map", &size); + if (addr == FDT_ADDR_T_NONE) { + debug("%s: Cannot decode address\n", __func__); + return 0; + } + + if (flash->size != size) { + debug("%s: Memory map must cover entire device\n", __func__); + return -1; + } + flash->memory_map = map_sysmem(addr, size); + + return 0; +} +#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ + +static int spi_flash_scan(struct spi_slave *spi, u8 *idcode, + struct spi_flash *flash) { const struct spi_flash_params *params; u8 cmd; u16 jedec = idcode[1] << 8 | idcode[2]; u16 ext_jedec = idcode[3] << 8 | idcode[4]; + int ret; /* Validate params from spi_flash_params table */ params = spi_flash_params_table; @@ -158,6 +187,13 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, return -EPROTONOSUPPORT; } + /* Flash powers up read-only, so clear BP# bits */ +#if defined(CONFIG_SPI_FLASH_ATMEL) || \ + defined(CONFIG_SPI_FLASH_MACRONIX) || \ + defined(CONFIG_SPI_FLASH_SST) + spi_flash_cmd_write_status(flash, 0); +#endif + /* Assign spi data */ flash->spi = spi; flash->name = params->name; @@ -253,6 +289,17 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, /* Go for default supported write cmd */ flash->write_cmd = CMD_PAGE_PROGRAM; + /* Set the quad enable bit - only for quad commands */ + if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || + (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || + (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { + ret = spi_flash_set_qeb(flash, idcode[0]); + if (ret) { + debug("SF: Fail to set QEB for %02x\n", idcode[0]); + return -EINVAL; + } + } + /* Read dummy_byte: dummy byte is determined based on the * dummy cycles of a particular command. * Fast commands - dummy_byte = dummy_cycles/8 @@ -279,48 +326,41 @@ static int spi_flash_validate_params(struct spi_slave *spi, u8 *idcode, /* Configure the BAR - discover bank cmds and read current bank */ #ifdef CONFIG_SPI_FLASH_BAR - int ret = spi_flash_read_bank(flash, idcode[0]); + ret = spi_flash_read_bank(flash, idcode[0]); if (ret < 0) return ret; #endif - /* Flash powers up read-only, so clear BP# bits */ -#if defined(CONFIG_SPI_FLASH_ATMEL) || \ - defined(CONFIG_SPI_FLASH_MACRONIX) || \ - defined(CONFIG_SPI_FLASH_SST) - spi_flash_cmd_write_status(flash, 0); -#endif - - return 0; -} - #if CONFIG_IS_ENABLED(OF_CONTROL) -int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash) -{ - fdt_addr_t addr; - fdt_size_t size; - int node; - - /* If there is no node, do nothing */ - node = fdtdec_next_compatible(blob, 0, COMPAT_GENERIC_SPI_FLASH); - if (node < 0) - return 0; - - addr = fdtdec_get_addr_size(blob, node, "memory-map", &size); - if (addr == FDT_ADDR_T_NONE) { - debug("%s: Cannot decode address\n", __func__); - return 0; + ret = spi_flash_decode_fdt(gd->fdt_blob, flash); + if (ret) { + debug("SF: FDT decode error\n"); + return -EINVAL; } +#endif - if (flash->size != size) { - debug("%s: Memory map must cover entire device\n", __func__); - return -1; +#ifndef CONFIG_SPL_BUILD + printf("SF: Detected %s with page size ", flash->name); + print_size(flash->page_size, ", erase size "); + print_size(flash->erase_size, ", total "); + print_size(flash->size, ""); + if (flash->memory_map) + printf(", mapped at %p", flash->memory_map); + puts("\n"); +#endif + +#ifndef CONFIG_SPI_FLASH_BAR + if (((flash->dual_flash == SF_SINGLE_FLASH) && + (flash->size > SPI_FLASH_16MB_BOUN)) || + ((flash->dual_flash > SF_SINGLE_FLASH) && + (flash->size > SPI_FLASH_16MB_BOUN << 1))) { + puts("SF: Warning - Only lower 16MiB accessible,"); + puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); } - flash->memory_map = map_sysmem(addr, size); +#endif - return 0; + return ret; } -#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ /** * spi_flash_probe_slave() - Probe for a SPI flash device on a bus @@ -359,47 +399,12 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash) print_buffer(0, idcode, 1, sizeof(idcode), 0); #endif - if (spi_flash_validate_params(spi, idcode, flash)) { + ret = spi_flash_scan(spi, idcode, flash); + if (ret) { ret = -EINVAL; goto err_read_id; } - /* Set the quad enable bit - only for quad commands */ - if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || - (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || - (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { - if (spi_flash_set_qeb(flash, idcode[0])) { - debug("SF: Fail to set QEB for %02x\n", idcode[0]); - ret = -EINVAL; - goto err_read_id; - } - } - -#if CONFIG_IS_ENABLED(OF_CONTROL) - if (spi_flash_decode_fdt(gd->fdt_blob, flash)) { - debug("SF: FDT decode error\n"); - ret = -EINVAL; - goto err_read_id; - } -#endif -#ifndef CONFIG_SPL_BUILD - printf("SF: Detected %s with page size ", flash->name); - print_size(flash->page_size, ", erase size "); - print_size(flash->erase_size, ", total "); - print_size(flash->size, ""); - if (flash->memory_map) - printf(", mapped at %p", flash->memory_map); - puts("\n"); -#endif -#ifndef CONFIG_SPI_FLASH_BAR - if (((flash->dual_flash == SF_SINGLE_FLASH) && - (flash->size > SPI_FLASH_16MB_BOUN)) || - ((flash->dual_flash > SF_SINGLE_FLASH) && - (flash->size > SPI_FLASH_16MB_BOUN << 1))) { - puts("SF: Warning - Only lower 16MiB accessible,"); - puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); - } -#endif #ifdef CONFIG_SPI_FLASH_MTD ret = spi_flash_mtd_register(flash); #endif