From: Jagan Teki <jteki@openedev.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
Date: Mon, 7 Dec 2015 00:04:13 +0530 [thread overview]
Message-ID: <1449426866-696-2-git-send-email-jteki@openedev.com> (raw)
In-Reply-To: <1449426866-696-1-git-send-email-jteki@openedev.com>
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.
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_probe.c | 145 +++++++++++++++++++++++----------------------
1 file changed, 75 insertions(+), 70 deletions(-)
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index a619182..0e20088 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,
+#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
--
1.9.1
next prev parent reply other threads:[~2015-12-06 18:34 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
2015-12-06 18:34 ` Jagan Teki [this message]
2015-12-10 1:30 ` [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan Bin Meng
2015-12-10 15:16 ` Jagan Teki
2015-12-11 6:21 ` Bin Meng
2015-12-11 6:31 ` Jagan Teki
2015-12-11 6:44 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
2015-12-10 1:30 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 03/14] sf: Move read_id " Jagan Teki
2015-12-10 1:30 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 04/14] sf: probe: Code cleanup Jagan Teki
2015-12-10 1:30 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 05/14] sf: Use static for file-scope functions Jagan Teki
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 06/14] sf: Fix Makefile Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 07/14] sf: Use simple name for register access functions Jagan Teki
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 08/14] sf: Flash power up read-only based on idcode0 Jagan Teki
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 09/14] sf: Remove unneeded header includes Jagan Teki
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 10/14] sf: Remove unneeded SST_BP and SST_WP Jagan Teki
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 11/14] sf: ops: Fix missing break on spansion read_bar Jagan Teki
2015-12-09 4:53 ` Simon Glass
2015-12-06 18:34 ` [U-Boot] [PATCH v8 12/14] sf: sf_probe: Remove spi_slave pointer argument Jagan Teki
2015-12-09 4:53 ` Simon Glass
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 13/14] sf: Use static for file-scope functions Jagan Teki
2015-12-09 4:53 ` Simon Glass
2015-12-10 1:31 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c Jagan Teki
2015-12-09 4:54 ` Simon Glass
2015-12-09 13:48 ` Jagan Teki
2015-12-10 1:31 ` Bin Meng
2015-12-10 15:13 ` Jagan Teki
2015-12-11 6:23 ` Bin Meng
2015-12-11 6:28 ` Jagan Teki
2015-12-11 6:51 ` Bin Meng
2015-12-11 7:02 ` Jagan Teki
2015-12-11 14:34 ` Simon Glass
2015-12-07 13:14 ` [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
2015-12-08 11:54 ` Bin Meng
2015-12-08 10:30 ` Jagan Teki
2015-12-10 15:18 ` Jagan Teki
2015-12-10 15:22 ` Jagan Teki
2015-12-11 16:45 ` Jagan Teki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1449426866-696-2-git-send-email-jteki@openedev.com \
--to=jteki@openedev.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox