* [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan
@ 2015-10-27 18:37 Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
` (12 more replies)
0 siblings, 13 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
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.
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 f591ab1..a150263 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;
@@ -238,6 +274,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
@@ -264,48 +311,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
@@ -344,47 +384,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
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 02/14] sf: Move spi_flash_scan code to sf_ops
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 03/14] sf: Move read_id " Jagan Teki
` (11 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
Intension is that sf_ops should deals all spi_flash
related stuff and sf_probe (which should renamed future)
should be an interface layer for spi_flash versus spi drivers.
sf_ops => spi_flash interface
sf_probe => interface layer vs spi_flash(sf_probe) to spi drivers
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 14 ++
drivers/mtd/spi/sf_ops.c | 328 ++++++++++++++++++++++++++++++++++++++++++
drivers/mtd/spi/sf_probe.c | 327 -----------------------------------------
3 files changed, 342 insertions(+), 327 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 8a3e5ec..3f07560 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -232,4 +232,18 @@ int spi_flash_mtd_register(struct spi_flash *flash);
void spi_flash_mtd_unregister(void);
#endif
+/**
+ * spi_flash_scan - scan the SPI FLASH
+ * @spi: the spi slave structure
+ * @idcode: idcode of spi flash
+ * @flash: the spi flash structure
+ *
+ * The drivers can use this fuction to scan the SPI FLASH.
+ * In the scanning, it will try to get all the necessary information to
+ * fill the spi_flash{}.
+ *
+ * Return: 0 for success, others for failure.
+ */
+int spi_flash_scan(struct spi_slave *spi, u8 *idcode, struct spi_flash *flash);
+
#endif /* _SF_INTERNAL_H_ */
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index f2a9244..d37b0a9 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -11,6 +11,7 @@
#include <common.h>
#include <errno.h>
#include <malloc.h>
+#include <mapmem.h>
#include <spi.h>
#include <spi_flash.h>
#include <watchdog.h>
@@ -18,6 +19,8 @@
#include "sf_internal.h"
+DECLARE_GLOBAL_DATA_PTR;
+
static void spi_flash_addr(u32 addr, u8 *cmd)
{
/* cmd[0] is actual command */
@@ -565,3 +568,328 @@ int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
return ret;
}
#endif
+
+
+/* Read commands array */
+static u8 spi_read_cmds_array[] = {
+ CMD_READ_ARRAY_SLOW,
+ CMD_READ_ARRAY_FAST,
+ CMD_READ_DUAL_OUTPUT_FAST,
+ CMD_READ_DUAL_IO_FAST,
+ CMD_READ_QUAD_OUTPUT_FAST,
+ CMD_READ_QUAD_IO_FAST,
+};
+
+#ifdef CONFIG_SPI_FLASH_MACRONIX
+static int spi_flash_set_qeb_mxic(struct spi_flash *flash)
+{
+ u8 qeb_status;
+ int ret;
+
+ ret = spi_flash_cmd_read_status(flash, &qeb_status);
+ if (ret < 0)
+ return ret;
+
+ if (qeb_status & STATUS_QEB_MXIC) {
+ debug("SF: mxic: QEB is already set\n");
+ } else {
+ ret = spi_flash_cmd_write_status(flash, STATUS_QEB_MXIC);
+ if (ret < 0)
+ return ret;
+ }
+
+ return ret;
+}
+#endif
+
+#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
+static int spi_flash_set_qeb_winspan(struct spi_flash *flash)
+{
+ u8 qeb_status;
+ int ret;
+
+ ret = spi_flash_cmd_read_config(flash, &qeb_status);
+ if (ret < 0)
+ return ret;
+
+ if (qeb_status & STATUS_QEB_WINSPAN) {
+ debug("SF: winspan: QEB is already set\n");
+ } else {
+ ret = spi_flash_cmd_write_config(flash, STATUS_QEB_WINSPAN);
+ if (ret < 0)
+ return ret;
+ }
+
+ return ret;
+}
+#endif
+
+static int spi_flash_set_qeb(struct spi_flash *flash, u8 idcode0)
+{
+ switch (idcode0) {
+#ifdef CONFIG_SPI_FLASH_MACRONIX
+ case SPI_FLASH_CFI_MFR_MACRONIX:
+ return spi_flash_set_qeb_mxic(flash);
+#endif
+#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
+ case SPI_FLASH_CFI_MFR_SPANSION:
+ case SPI_FLASH_CFI_MFR_WINBOND:
+ return spi_flash_set_qeb_winspan(flash);
+#endif
+#ifdef CONFIG_SPI_FLASH_STMICRO
+ case SPI_FLASH_CFI_MFR_STMICRO:
+ debug("SF: QEB is volatile for %02x flash\n", idcode0);
+ return 0;
+#endif
+ default:
+ printf("SF: Need set QEB func for %02x flash\n", idcode0);
+ return -1;
+ }
+}
+
+#ifdef CONFIG_SPI_FLASH_BAR
+static int spi_flash_read_bank(struct spi_flash *flash, u8 idcode0)
+{
+ u8 curr_bank = 0;
+ int ret;
+
+ if (flash->size <= SPI_FLASH_16MB_BOUN)
+ goto bank_end;
+
+ switch (idcode0) {
+ case SPI_FLASH_CFI_MFR_SPANSION:
+ flash->bank_read_cmd = CMD_BANKADDR_BRRD;
+ flash->bank_write_cmd = CMD_BANKADDR_BRWR;
+ default:
+ flash->bank_read_cmd = CMD_EXTNADDR_RDEAR;
+ flash->bank_write_cmd = CMD_EXTNADDR_WREAR;
+ }
+
+ ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1,
+ &curr_bank, 1);
+ if (ret) {
+ debug("SF: fail to read bank addr register\n");
+ return ret;
+ }
+
+bank_end:
+ flash->bank_curr = curr_bank;
+ return 0;
+}
+#endif
+
+#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) */
+
+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;
+ for (; params->name != NULL; params++) {
+ if ((params->jedec >> 16) == idcode[0]) {
+ if ((params->jedec & 0xFFFF) == jedec) {
+ if (params->ext_jedec == 0)
+ break;
+ else if (params->ext_jedec == ext_jedec)
+ break;
+ }
+ }
+ }
+
+ if (!params->name) {
+ printf("SF: Unsupported flash IDs: ");
+ printf("manuf %02x, jedec %04x, ext_jedec %04x\n",
+ idcode[0], jedec, ext_jedec);
+ 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;
+ flash->memory_map = spi->memory_map;
+ flash->dual_flash = flash->spi->option;
+
+ /* Assign spi_flash ops */
+#ifndef CONFIG_DM_SPI_FLASH
+ flash->write = spi_flash_cmd_write_ops;
+#if defined(CONFIG_SPI_FLASH_SST)
+ if (params->flags & SST_WR)
+ flash->flags |= SNOR_F_SST_WR;
+
+ if (params->flags & SNOR_F_SST_WR) {
+ if (flash->spi->op_mode_tx & SPI_OPM_TX_BP)
+ flash->write = sst_write_bp;
+ else
+ flash->write = sst_write_wp;
+ }
+#endif
+ flash->erase = spi_flash_cmd_erase_ops;
+ flash->read = spi_flash_cmd_read_ops;
+#endif
+
+ /* Compute the flash size */
+ flash->shift = (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) ? 1 : 0;
+ /*
+ * The Spansion S25FL032P and S25FL064P have 256b pages, yet use the
+ * 0x4d00 Extended JEDEC code. The rest of the Spansion flashes with
+ * the 0x4d00 Extended JEDEC code have 512b pages. All of the others
+ * have 256b pages.
+ */
+ if (ext_jedec == 0x4d00) {
+ if ((jedec == 0x0215) || (jedec == 0x216))
+ flash->page_size = 256;
+ else
+ flash->page_size = 512;
+ } else {
+ flash->page_size = 256;
+ }
+ flash->page_size <<= flash->shift;
+ flash->sector_size = params->sector_size << flash->shift;
+ flash->size = flash->sector_size * params->nr_sectors << flash->shift;
+#ifdef CONFIG_SF_DUAL_FLASH
+ if (flash->dual_flash & SF_DUAL_STACKED_FLASH)
+ flash->size <<= 1;
+#endif
+
+ /* Compute erase sector and command */
+ if (params->flags & SECT_4K) {
+ flash->erase_cmd = CMD_ERASE_4K;
+ flash->erase_size = 4096 << flash->shift;
+ } else if (params->flags & SECT_32K) {
+ flash->erase_cmd = CMD_ERASE_32K;
+ flash->erase_size = 32768 << flash->shift;
+ } else {
+ flash->erase_cmd = CMD_ERASE_64K;
+ flash->erase_size = flash->sector_size;
+ }
+
+ /* Now erase size becomes valid sector size */
+ flash->sector_size = flash->erase_size;
+
+ /* Look for the fastest read cmd */
+ cmd = fls(params->e_rd_cmd & flash->spi->op_mode_rx);
+ if (cmd) {
+ cmd = spi_read_cmds_array[cmd - 1];
+ flash->read_cmd = cmd;
+ } else {
+ /* Go for default supported read cmd */
+ flash->read_cmd = CMD_READ_ARRAY_FAST;
+ }
+
+ /* Not require to look for fastest only two write cmds yet */
+ if (params->flags & WR_QPP && flash->spi->op_mode_tx & SPI_OPM_TX_QPP)
+ flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
+ else
+ /* 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
+ * I/O commands- dummy_byte = (dummy_cycles * no.of lines)/8
+ * For I/O commands except cmd[0] everything goes on no.of lines
+ * based on particular command but incase of fast commands except
+ * data all go on single line irrespective of command.
+ */
+ switch (flash->read_cmd) {
+ case CMD_READ_QUAD_IO_FAST:
+ flash->dummy_byte = 2;
+ break;
+ case CMD_READ_ARRAY_SLOW:
+ flash->dummy_byte = 0;
+ break;
+ default:
+ flash->dummy_byte = 1;
+ }
+
+#ifdef CONFIG_SPI_FLASH_STMICRO
+ if (params->flags & E_FSR)
+ flash->flags |= SNOR_F_USE_FSR;
+#endif
+
+ /* Configure the BAR - discover bank cmds and read current bank */
+#ifdef CONFIG_SPI_FLASH_BAR
+ ret = spi_flash_read_bank(flash, idcode[0]);
+ if (ret < 0)
+ return ret;
+#endif
+
+#if CONFIG_IS_ENABLED(OF_CONTROL)
+ ret = spi_flash_decode_fdt(gd->fdt_blob, flash);
+ if (ret) {
+ debug("SF: FDT decode error\n");
+ return -EINVAL;
+ }
+#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
+
+ return ret;
+}
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index a150263..d2991de 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -20,333 +20,6 @@
#include "sf_internal.h"
-DECLARE_GLOBAL_DATA_PTR;
-
-/* Read commands array */
-static u8 spi_read_cmds_array[] = {
- CMD_READ_ARRAY_SLOW,
- CMD_READ_ARRAY_FAST,
- CMD_READ_DUAL_OUTPUT_FAST,
- CMD_READ_DUAL_IO_FAST,
- CMD_READ_QUAD_OUTPUT_FAST,
- CMD_READ_QUAD_IO_FAST,
-};
-
-#ifdef CONFIG_SPI_FLASH_MACRONIX
-static int spi_flash_set_qeb_mxic(struct spi_flash *flash)
-{
- u8 qeb_status;
- int ret;
-
- ret = spi_flash_cmd_read_status(flash, &qeb_status);
- if (ret < 0)
- return ret;
-
- if (qeb_status & STATUS_QEB_MXIC) {
- debug("SF: mxic: QEB is already set\n");
- } else {
- ret = spi_flash_cmd_write_status(flash, STATUS_QEB_MXIC);
- if (ret < 0)
- return ret;
- }
-
- return ret;
-}
-#endif
-
-#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
-static int spi_flash_set_qeb_winspan(struct spi_flash *flash)
-{
- u8 qeb_status;
- int ret;
-
- ret = spi_flash_cmd_read_config(flash, &qeb_status);
- if (ret < 0)
- return ret;
-
- if (qeb_status & STATUS_QEB_WINSPAN) {
- debug("SF: winspan: QEB is already set\n");
- } else {
- ret = spi_flash_cmd_write_config(flash, STATUS_QEB_WINSPAN);
- if (ret < 0)
- return ret;
- }
-
- return ret;
-}
-#endif
-
-static int spi_flash_set_qeb(struct spi_flash *flash, u8 idcode0)
-{
- switch (idcode0) {
-#ifdef CONFIG_SPI_FLASH_MACRONIX
- case SPI_FLASH_CFI_MFR_MACRONIX:
- return spi_flash_set_qeb_mxic(flash);
-#endif
-#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
- case SPI_FLASH_CFI_MFR_SPANSION:
- case SPI_FLASH_CFI_MFR_WINBOND:
- return spi_flash_set_qeb_winspan(flash);
-#endif
-#ifdef CONFIG_SPI_FLASH_STMICRO
- case SPI_FLASH_CFI_MFR_STMICRO:
- debug("SF: QEB is volatile for %02x flash\n", idcode0);
- return 0;
-#endif
- default:
- printf("SF: Need set QEB func for %02x flash\n", idcode0);
- return -1;
- }
-}
-
-#ifdef CONFIG_SPI_FLASH_BAR
-static int spi_flash_read_bank(struct spi_flash *flash, u8 idcode0)
-{
- u8 curr_bank = 0;
- int ret;
-
- if (flash->size <= SPI_FLASH_16MB_BOUN)
- goto bank_end;
-
- switch (idcode0) {
- case SPI_FLASH_CFI_MFR_SPANSION:
- flash->bank_read_cmd = CMD_BANKADDR_BRRD;
- flash->bank_write_cmd = CMD_BANKADDR_BRWR;
- default:
- flash->bank_read_cmd = CMD_EXTNADDR_RDEAR;
- flash->bank_write_cmd = CMD_EXTNADDR_WREAR;
- }
-
- ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1,
- &curr_bank, 1);
- if (ret) {
- debug("SF: fail to read bank addr register\n");
- return ret;
- }
-
-bank_end:
- flash->bank_curr = curr_bank;
- return 0;
-}
-#endif
-
-#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;
- for (; params->name != NULL; params++) {
- if ((params->jedec >> 16) == idcode[0]) {
- if ((params->jedec & 0xFFFF) == jedec) {
- if (params->ext_jedec == 0)
- break;
- else if (params->ext_jedec == ext_jedec)
- break;
- }
- }
- }
-
- if (!params->name) {
- printf("SF: Unsupported flash IDs: ");
- printf("manuf %02x, jedec %04x, ext_jedec %04x\n",
- idcode[0], jedec, ext_jedec);
- 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;
- flash->memory_map = spi->memory_map;
- flash->dual_flash = flash->spi->option;
-
- /* Assign spi_flash ops */
-#ifndef CONFIG_DM_SPI_FLASH
- flash->write = spi_flash_cmd_write_ops;
-#if defined(CONFIG_SPI_FLASH_SST)
- if (params->flags & SST_WR)
- flash->flags |= SNOR_F_SST_WR;
-
- if (params->flags & SNOR_F_SST_WR) {
- if (flash->spi->op_mode_tx & SPI_OPM_TX_BP)
- flash->write = sst_write_bp;
- else
- flash->write = sst_write_wp;
- }
-#endif
- flash->erase = spi_flash_cmd_erase_ops;
- flash->read = spi_flash_cmd_read_ops;
-#endif
-
- /* Compute the flash size */
- flash->shift = (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) ? 1 : 0;
- /*
- * The Spansion S25FL032P and S25FL064P have 256b pages, yet use the
- * 0x4d00 Extended JEDEC code. The rest of the Spansion flashes with
- * the 0x4d00 Extended JEDEC code have 512b pages. All of the others
- * have 256b pages.
- */
- if (ext_jedec == 0x4d00) {
- if ((jedec == 0x0215) || (jedec == 0x216))
- flash->page_size = 256;
- else
- flash->page_size = 512;
- } else {
- flash->page_size = 256;
- }
- flash->page_size <<= flash->shift;
- flash->sector_size = params->sector_size << flash->shift;
- flash->size = flash->sector_size * params->nr_sectors << flash->shift;
-#ifdef CONFIG_SF_DUAL_FLASH
- if (flash->dual_flash & SF_DUAL_STACKED_FLASH)
- flash->size <<= 1;
-#endif
-
- /* Compute erase sector and command */
- if (params->flags & SECT_4K) {
- flash->erase_cmd = CMD_ERASE_4K;
- flash->erase_size = 4096 << flash->shift;
- } else if (params->flags & SECT_32K) {
- flash->erase_cmd = CMD_ERASE_32K;
- flash->erase_size = 32768 << flash->shift;
- } else {
- flash->erase_cmd = CMD_ERASE_64K;
- flash->erase_size = flash->sector_size;
- }
-
- /* Now erase size becomes valid sector size */
- flash->sector_size = flash->erase_size;
-
- /* Look for the fastest read cmd */
- cmd = fls(params->e_rd_cmd & flash->spi->op_mode_rx);
- if (cmd) {
- cmd = spi_read_cmds_array[cmd - 1];
- flash->read_cmd = cmd;
- } else {
- /* Go for default supported read cmd */
- flash->read_cmd = CMD_READ_ARRAY_FAST;
- }
-
- /* Not require to look for fastest only two write cmds yet */
- if (params->flags & WR_QPP && flash->spi->op_mode_tx & SPI_OPM_TX_QPP)
- flash->write_cmd = CMD_QUAD_PAGE_PROGRAM;
- else
- /* 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
- * I/O commands- dummy_byte = (dummy_cycles * no.of lines)/8
- * For I/O commands except cmd[0] everything goes on no.of lines
- * based on particular command but incase of fast commands except
- * data all go on single line irrespective of command.
- */
- switch (flash->read_cmd) {
- case CMD_READ_QUAD_IO_FAST:
- flash->dummy_byte = 2;
- break;
- case CMD_READ_ARRAY_SLOW:
- flash->dummy_byte = 0;
- break;
- default:
- flash->dummy_byte = 1;
- }
-
-#ifdef CONFIG_SPI_FLASH_STMICRO
- if (params->flags & E_FSR)
- flash->flags |= SNOR_F_USE_FSR;
-#endif
-
- /* Configure the BAR - discover bank cmds and read current bank */
-#ifdef CONFIG_SPI_FLASH_BAR
- ret = spi_flash_read_bank(flash, idcode[0]);
- if (ret < 0)
- return ret;
-#endif
-
-#if CONFIG_IS_ENABLED(OF_CONTROL)
- ret = spi_flash_decode_fdt(gd->fdt_blob, flash);
- if (ret) {
- debug("SF: FDT decode error\n");
- return -EINVAL;
- }
-#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
-
- return ret;
-}
-
/**
* spi_flash_probe_slave() - Probe for a SPI flash device on a bus
*
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 03/14] sf: Move read_id code to sf_ops
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 04/14] sf: probe: Code cleanup Jagan Teki
` (10 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
read_id code is related to spi_flash stuff
hence moved to sf_ops.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 3 +--
drivers/mtd/spi/sf_ops.c | 21 ++++++++++++++++++---
drivers/mtd/spi/sf_probe.c | 15 +--------------
3 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 3f07560..8216fdc 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -235,7 +235,6 @@ void spi_flash_mtd_unregister(void);
/**
* spi_flash_scan - scan the SPI FLASH
* @spi: the spi slave structure
- * @idcode: idcode of spi flash
* @flash: the spi flash structure
*
* The drivers can use this fuction to scan the SPI FLASH.
@@ -244,6 +243,6 @@ void spi_flash_mtd_unregister(void);
*
* Return: 0 for success, others for failure.
*/
-int spi_flash_scan(struct spi_slave *spi, u8 *idcode, struct spi_flash *flash);
+int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash);
#endif /* _SF_INTERNAL_H_ */
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index d37b0a9..016a5df 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -706,14 +706,29 @@ int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash)
}
#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
-int spi_flash_scan(struct spi_slave *spi, u8 *idcode, struct spi_flash *flash)
+int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
{
const struct spi_flash_params *params;
+ u16 jedec, ext_jedec;
+ u8 idcode[5];
u8 cmd;
- u16 jedec = idcode[1] << 8 | idcode[2];
- u16 ext_jedec = idcode[3] << 8 | idcode[4];
int ret;
+ /* Read the ID codes */
+ ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
+ if (ret) {
+ printf("SF: Failed to get idcodes\n");
+ return -EINVAL;
+ }
+
+#ifdef DEBUG
+ printf("SF: Got idcodes\n");
+ print_buffer(0, idcode, 1, sizeof(idcode), 0);
+#endif
+
+ jedec = idcode[1] << 8 | idcode[2];
+ ext_jedec = idcode[3] << 8 | idcode[4];
+
/* Validate params from spi_flash_params table */
params = spi_flash_params_table;
for (; params->name != NULL; params++) {
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index d2991de..a712792 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -29,7 +29,6 @@
*/
int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
{
- u8 idcode[5];
int ret;
/* Setup spi_slave */
@@ -45,19 +44,7 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
return ret;
}
- /* Read the ID codes */
- ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
- if (ret) {
- printf("SF: Failed to get idcodes\n");
- goto err_read_id;
- }
-
-#ifdef DEBUG
- printf("SF: Got idcodes\n");
- print_buffer(0, idcode, 1, sizeof(idcode), 0);
-#endif
-
- ret = spi_flash_scan(spi, idcode, flash);
+ ret = spi_flash_scan(spi, flash);
if (ret) {
ret = -EINVAL;
goto err_read_id;
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 04/14] sf: probe: Code cleanup
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 03/14] sf: Move read_id " Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 05/14] sf: Use static for file-scope functions Jagan Teki
` (9 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
- Move bar read code below the bar write hance both
at once place, hence it easy for #ifdef macro only
once and readable.
- Move read_cmd_array at top
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 81 +++++++++++++++++++++++-------------------------
1 file changed, 39 insertions(+), 42 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index 016a5df..e20a3d6 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -29,6 +29,16 @@ static void spi_flash_addr(u32 addr, u8 *cmd)
cmd[3] = addr >> 0;
}
+/* Read commands array */
+static u8 spi_read_cmds_array[] = {
+ CMD_READ_ARRAY_SLOW,
+ CMD_READ_ARRAY_FAST,
+ CMD_READ_DUAL_OUTPUT_FAST,
+ CMD_READ_DUAL_IO_FAST,
+ CMD_READ_QUAD_OUTPUT_FAST,
+ CMD_READ_QUAD_IO_FAST,
+};
+
int spi_flash_cmd_read_status(struct spi_flash *flash, u8 *rs)
{
int ret;
@@ -132,6 +142,35 @@ bar_end:
flash->bank_curr = bank_sel;
return flash->bank_curr;
}
+
+static int spi_flash_read_bank(struct spi_flash *flash, u8 idcode0)
+{
+ u8 curr_bank = 0;
+ int ret;
+
+ if (flash->size <= SPI_FLASH_16MB_BOUN)
+ goto bank_end;
+
+ switch (idcode0) {
+ case SPI_FLASH_CFI_MFR_SPANSION:
+ flash->bank_read_cmd = CMD_BANKADDR_BRRD;
+ flash->bank_write_cmd = CMD_BANKADDR_BRWR;
+ default:
+ flash->bank_read_cmd = CMD_EXTNADDR_RDEAR;
+ flash->bank_write_cmd = CMD_EXTNADDR_WREAR;
+ }
+
+ ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1,
+ &curr_bank, 1);
+ if (ret) {
+ debug("SF: fail to read bank addr register\n");
+ return ret;
+ }
+
+bank_end:
+ flash->bank_curr = curr_bank;
+ return 0;
+}
#endif
#ifdef CONFIG_SF_DUAL_FLASH
@@ -569,17 +608,6 @@ int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
}
#endif
-
-/* Read commands array */
-static u8 spi_read_cmds_array[] = {
- CMD_READ_ARRAY_SLOW,
- CMD_READ_ARRAY_FAST,
- CMD_READ_DUAL_OUTPUT_FAST,
- CMD_READ_DUAL_IO_FAST,
- CMD_READ_QUAD_OUTPUT_FAST,
- CMD_READ_QUAD_IO_FAST,
-};
-
#ifdef CONFIG_SPI_FLASH_MACRONIX
static int spi_flash_set_qeb_mxic(struct spi_flash *flash)
{
@@ -647,37 +675,6 @@ static int spi_flash_set_qeb(struct spi_flash *flash, u8 idcode0)
}
}
-#ifdef CONFIG_SPI_FLASH_BAR
-static int spi_flash_read_bank(struct spi_flash *flash, u8 idcode0)
-{
- u8 curr_bank = 0;
- int ret;
-
- if (flash->size <= SPI_FLASH_16MB_BOUN)
- goto bank_end;
-
- switch (idcode0) {
- case SPI_FLASH_CFI_MFR_SPANSION:
- flash->bank_read_cmd = CMD_BANKADDR_BRRD;
- flash->bank_write_cmd = CMD_BANKADDR_BRWR;
- default:
- flash->bank_read_cmd = CMD_EXTNADDR_RDEAR;
- flash->bank_write_cmd = CMD_EXTNADDR_WREAR;
- }
-
- ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1,
- &curr_bank, 1);
- if (ret) {
- debug("SF: fail to read bank addr register\n");
- return ret;
- }
-
-bank_end:
- flash->bank_curr = curr_bank;
- return 0;
-}
-#endif
-
#if CONFIG_IS_ENABLED(OF_CONTROL)
int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash)
{
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 05/14] sf: Use static for file-scope functions
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (2 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 04/14] sf: probe: Code cleanup Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 06/14] sf: Fix Makefile Jagan Teki
` (8 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
Use static for file-scope functions and removed
them from header files.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 18 ------------------
drivers/mtd/spi/sf_ops.c | 11 ++++++-----
2 files changed, 6 insertions(+), 23 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 8216fdc..8ef88f4 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -167,18 +167,6 @@ int spi_flash_cmd_write(struct spi_slave *spi, const u8 *cmd, size_t cmd_len,
/* Flash erase(sectors) operation, support all possible erase commands */
int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len);
-/* Read the status register */
-int spi_flash_cmd_read_status(struct spi_flash *flash, u8 *rs);
-
-/* Program the status register */
-int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws);
-
-/* Read the config register */
-int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc);
-
-/* Program the config register */
-int spi_flash_cmd_write_config(struct spi_flash *flash, u8 wc);
-
/* Enable writing on the SPI flash */
static inline int spi_flash_cmd_write_enable(struct spi_flash *flash)
{
@@ -192,12 +180,6 @@ static inline int spi_flash_cmd_write_disable(struct spi_flash *flash)
}
/*
- * Send the read status command to the device and wait for the wip
- * (write-in-progress) bit to clear itself.
- */
-int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout);
-
-/*
* Used for spi_flash write operation
* - SPI claim
* - spi_flash_cmd_write_enable
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index e20a3d6..af94c0b 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -39,7 +39,7 @@ static u8 spi_read_cmds_array[] = {
CMD_READ_QUAD_IO_FAST,
};
-int spi_flash_cmd_read_status(struct spi_flash *flash, u8 *rs)
+static int spi_flash_cmd_read_status(struct spi_flash *flash, u8 *rs)
{
int ret;
u8 cmd;
@@ -68,7 +68,7 @@ static int read_fsr(struct spi_flash *flash, u8 *fsr)
return 0;
}
-int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws)
+static int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws)
{
u8 cmd;
int ret;
@@ -84,7 +84,7 @@ int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws)
}
#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
-int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc)
+static int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc)
{
int ret;
u8 cmd;
@@ -99,7 +99,7 @@ int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc)
return 0;
}
-int spi_flash_cmd_write_config(struct spi_flash *flash, u8 wc)
+static int spi_flash_cmd_write_config(struct spi_flash *flash, u8 wc)
{
u8 data[2];
u8 cmd;
@@ -237,7 +237,8 @@ static int spi_flash_ready(struct spi_flash *flash)
return sr && fsr;
}
-int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)
+static int spi_flash_cmd_wait_ready(struct spi_flash *flash,
+ unsigned long timeout)
{
int timebase, ret;
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 06/14] sf: Fix Makefile
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (3 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 05/14] sf: Use static for file-scope functions Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 07/14] sf: Use simple name for register access functions Jagan Teki
` (7 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
This patch removes unneeded ifdef and fixed accordingly.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/Makefile | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
index ff48b25..66c4424 100644
--- a/drivers/mtd/spi/Makefile
+++ b/drivers/mtd/spi/Makefile
@@ -12,11 +12,7 @@ obj-$(CONFIG_SPL_SPI_LOAD) += spi_spl_load.o
obj-$(CONFIG_SPL_SPI_BOOT) += fsl_espi_spl.o
endif
-#ifndef CONFIG_DM_SPI
-obj-$(CONFIG_SPI_FLASH) += sf_probe.o
-#endif
-obj-$(CONFIG_CMD_SF) += sf.o
-obj-$(CONFIG_SPI_FLASH) += sf_ops.o sf_params.o
+obj-$(CONFIG_SPI_FLASH) += sf_probe.o sf_ops.o sf_params.o sf.o
obj-$(CONFIG_SPI_FLASH_DATAFLASH) += sf_dataflash.o
obj-$(CONFIG_SPI_FLASH_MTD) += sf_mtd.o
obj-$(CONFIG_SPI_FLASH_SANDBOX) += sandbox.o
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 07/14] sf: Use simple name for register access functions
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (4 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 06/14] sf: Fix Makefile Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 08/14] sf: Use flash function pointers in dm_spi_flash_ops Jagan Teki
` (6 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
Most of the register access function are static,
so used simple name to represent each.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 42 +++++++++++++++++++++---------------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index af94c0b..97e644d 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -39,7 +39,7 @@ static u8 spi_read_cmds_array[] = {
CMD_READ_QUAD_IO_FAST,
};
-static int spi_flash_cmd_read_status(struct spi_flash *flash, u8 *rs)
+static int read_sr(struct spi_flash *flash, u8 *rs)
{
int ret;
u8 cmd;
@@ -68,7 +68,7 @@ static int read_fsr(struct spi_flash *flash, u8 *fsr)
return 0;
}
-static int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws)
+static int write_sr(struct spi_flash *flash, u8 ws)
{
u8 cmd;
int ret;
@@ -84,7 +84,7 @@ static int spi_flash_cmd_write_status(struct spi_flash *flash, u8 ws)
}
#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
-static int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc)
+static int read_cr(struct spi_flash *flash, u8 *rc)
{
int ret;
u8 cmd;
@@ -99,13 +99,13 @@ static int spi_flash_cmd_read_config(struct spi_flash *flash, u8 *rc)
return 0;
}
-static int spi_flash_cmd_write_config(struct spi_flash *flash, u8 wc)
+static int write_cr(struct spi_flash *flash, u8 wc)
{
u8 data[2];
u8 cmd;
int ret;
- ret = spi_flash_cmd_read_status(flash, &data[0]);
+ ret = read_sr(flash, &data[0]);
if (ret < 0)
return ret;
@@ -122,7 +122,7 @@ static int spi_flash_cmd_write_config(struct spi_flash *flash, u8 wc)
#endif
#ifdef CONFIG_SPI_FLASH_BAR
-static int spi_flash_write_bank(struct spi_flash *flash, u32 offset)
+static int spi_flash_write_bar(struct spi_flash *flash, u32 offset)
{
u8 cmd, bank_sel;
int ret;
@@ -143,7 +143,7 @@ bar_end:
return flash->bank_curr;
}
-static int spi_flash_read_bank(struct spi_flash *flash, u8 idcode0)
+static int spi_flash_read_bar(struct spi_flash *flash, u8 idcode0)
{
u8 curr_bank = 0;
int ret;
@@ -174,7 +174,7 @@ bank_end:
#endif
#ifdef CONFIG_SF_DUAL_FLASH
-static void spi_flash_dual_flash(struct spi_flash *flash, u32 *addr)
+static void spi_flash_dual(struct spi_flash *flash, u32 *addr)
{
switch (flash->dual_flash) {
case SF_DUAL_STACKED_FLASH:
@@ -200,7 +200,7 @@ static int spi_flash_sr_ready(struct spi_flash *flash)
u8 sr;
int ret;
- ret = spi_flash_cmd_read_status(flash, &sr);
+ ret = read_sr(flash, &sr);
if (ret < 0)
return ret;
@@ -316,10 +316,10 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
#ifdef CONFIG_SF_DUAL_FLASH
if (flash->dual_flash > SF_SINGLE_FLASH)
- spi_flash_dual_flash(flash, &erase_addr);
+ spi_flash_dual(flash, &erase_addr);
#endif
#ifdef CONFIG_SPI_FLASH_BAR
- ret = spi_flash_write_bank(flash, erase_addr);
+ ret = spi_flash_write_bar(flash, erase_addr);
if (ret < 0)
return ret;
#endif
@@ -358,10 +358,10 @@ int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
#ifdef CONFIG_SF_DUAL_FLASH
if (flash->dual_flash > SF_SINGLE_FLASH)
- spi_flash_dual_flash(flash, &write_addr);
+ spi_flash_dual(flash, &write_addr);
#endif
#ifdef CONFIG_SPI_FLASH_BAR
- ret = spi_flash_write_bank(flash, write_addr);
+ ret = spi_flash_write_bar(flash, write_addr);
if (ret < 0)
return ret;
#endif
@@ -453,10 +453,10 @@ int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
#ifdef CONFIG_SF_DUAL_FLASH
if (flash->dual_flash > SF_SINGLE_FLASH)
- spi_flash_dual_flash(flash, &read_addr);
+ spi_flash_dual(flash, &read_addr);
#endif
#ifdef CONFIG_SPI_FLASH_BAR
- ret = spi_flash_write_bank(flash, read_addr);
+ ret = spi_flash_write_bar(flash, read_addr);
if (ret < 0)
return ret;
bank_sel = flash->bank_curr;
@@ -615,14 +615,14 @@ static int spi_flash_set_qeb_mxic(struct spi_flash *flash)
u8 qeb_status;
int ret;
- ret = spi_flash_cmd_read_status(flash, &qeb_status);
+ ret = read_sr(flash, &qeb_status);
if (ret < 0)
return ret;
if (qeb_status & STATUS_QEB_MXIC) {
debug("SF: mxic: QEB is already set\n");
} else {
- ret = spi_flash_cmd_write_status(flash, STATUS_QEB_MXIC);
+ ret = write_sr(flash, STATUS_QEB_MXIC);
if (ret < 0)
return ret;
}
@@ -637,14 +637,14 @@ static int spi_flash_set_qeb_winspan(struct spi_flash *flash)
u8 qeb_status;
int ret;
- ret = spi_flash_cmd_read_config(flash, &qeb_status);
+ ret = read_cr(flash, &qeb_status);
if (ret < 0)
return ret;
if (qeb_status & STATUS_QEB_WINSPAN) {
debug("SF: winspan: QEB is already set\n");
} else {
- ret = spi_flash_cmd_write_config(flash, STATUS_QEB_WINSPAN);
+ ret = write_cr(flash, STATUS_QEB_WINSPAN);
if (ret < 0)
return ret;
}
@@ -751,7 +751,7 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
#if defined(CONFIG_SPI_FLASH_ATMEL) || \
defined(CONFIG_SPI_FLASH_MACRONIX) || \
defined(CONFIG_SPI_FLASH_SST)
- spi_flash_cmd_write_status(flash, 0);
+ write_sr(flash, 0);
#endif
/* Assign spi data */
@@ -871,7 +871,7 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
/* Configure the BAR - discover bank cmds and read current bank */
#ifdef CONFIG_SPI_FLASH_BAR
- ret = spi_flash_read_bank(flash, idcode[0]);
+ ret = spi_flash_read_bar(flash, idcode[0]);
if (ret < 0)
return ret;
#endif
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 08/14] sf: Use flash function pointers in dm_spi_flash_ops
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (5 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 07/14] sf: Use simple name for register access functions Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 09/14] sf: Flash power up read-only based on idcode0 Jagan Teki
` (5 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
flash operations are defined as static and reuse them
with function-pointers so call them with generic
function pounters instead of calling like normal functions.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 2 --
drivers/mtd/spi/sf_probe.c | 15 +++------------
include/spi_flash.h | 13 -------------
3 files changed, 3 insertions(+), 27 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index 97e644d..f63ce7a 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -761,7 +761,6 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
flash->dual_flash = flash->spi->option;
/* Assign spi_flash ops */
-#ifndef CONFIG_DM_SPI_FLASH
flash->write = spi_flash_cmd_write_ops;
#if defined(CONFIG_SPI_FLASH_SST)
if (params->flags & SST_WR)
@@ -776,7 +775,6 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
#endif
flash->erase = spi_flash_cmd_erase_ops;
flash->read = spi_flash_cmd_read_ops;
-#endif
/* Compute the flash size */
flash->shift = (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) ? 1 : 0;
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index a712792..e2dac7e 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -120,7 +120,7 @@ static int spi_flash_std_read(struct udevice *dev, u32 offset, size_t len,
{
struct spi_flash *flash = dev_get_uclass_priv(dev);
- return spi_flash_cmd_read_ops(flash, offset, len, buf);
+ return flash->read(flash, offset, len, buf);
}
int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
@@ -128,23 +128,14 @@ int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
{
struct spi_flash *flash = dev_get_uclass_priv(dev);
-#if defined(CONFIG_SPI_FLASH_SST)
- if (flash->flags & SNOR_F_SST_WR) {
- if (flash->spi->op_mode_tx & SPI_OPM_TX_BP)
- return sst_write_bp(flash, offset, len, buf);
- else
- return sst_write_wp(flash, offset, len, buf);
- }
-#endif
-
- return spi_flash_cmd_write_ops(flash, offset, len, buf);
+ return flash->write(flash, offset, len, buf);
}
int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
{
struct spi_flash *flash = dev_get_uclass_priv(dev);
- return spi_flash_cmd_erase_ops(flash, offset, len);
+ return flash->erase(flash, offset, len);
}
int spi_flash_std_probe(struct udevice *dev)
diff --git a/include/spi_flash.h b/include/spi_flash.h
index 4312d3d..0732172 100644
--- a/include/spi_flash.h
+++ b/include/spi_flash.h
@@ -87,23 +87,10 @@ struct spi_flash {
u8 dummy_byte;
void *memory_map;
-#ifndef CONFIG_DM_SPI_FLASH
- /*
- * These are not strictly needed for driver model, but keep them here
- * while the transition is in progress.
- *
- * Normally each driver would provide its own operations, but for
- * SPI flash most chips use the same algorithms. One approach is
- * to create a 'common' SPI flash device which knows how to talk
- * to most devices, and then allow other drivers to be used instead
- * if required, perhaps with a way of scanning through the list to
- * find the driver that matches the device.
- */
int (*read)(struct spi_flash *flash, u32 offset, size_t len, void *buf);
int (*write)(struct spi_flash *flash, u32 offset, size_t len,
const void *buf);
int (*erase)(struct spi_flash *flash, u32 offset, size_t len);
-#endif
};
struct dm_spi_flash_ops {
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 09/14] sf: Flash power up read-only based on idcode0
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (6 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 08/14] sf: Use flash function pointers in dm_spi_flash_ops Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 10/14] sf: Use static for file-scope functions Jagan Teki
` (4 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
Using macro's for flash power up read-only access code
leads wrong behaviour hence use idcode0 for runtime
detection, hence the flash which require this functionality
gets detected at runtime.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 2 ++
drivers/mtd/spi/sf_ops.c | 7 +++----
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 8ef88f4..39749c2 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -64,7 +64,9 @@ enum spi_nor_option_flags {
#define SPI_FLASH_CFI_MFR_SPANSION 0x01
#define SPI_FLASH_CFI_MFR_STMICRO 0x20
#define SPI_FLASH_CFI_MFR_MACRONIX 0xc2
+#define SPI_FLASH_CFI_MFR_SST 0xbf
#define SPI_FLASH_CFI_MFR_WINBOND 0xef
+#define SPI_FLASH_CFI_MFR_ATMEL 0x1f
/* Erase commands */
#define CMD_ERASE_4K 0x20
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index f63ce7a..f90f041 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -748,11 +748,10 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
}
/* 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)
+ if (idcode[0] == SPI_FLASH_CFI_MFR_ATMEL ||
+ idcode[0] == SPI_FLASH_CFI_MFR_MACRONIX ||
+ idcode[0] == SPI_FLASH_CFI_MFR_SST)
write_sr(flash, 0);
-#endif
/* Assign spi data */
flash->spi = spi;
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 10/14] sf: Use static for file-scope functions
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (7 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 09/14] sf: Flash power up read-only based on idcode0 Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 11/14] sf: Remove unneeded header includes Jagan Teki
` (3 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
Use static for file-scope functions and removed
them from header files.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 20 --------------------
drivers/mtd/spi/sf_ops.c | 11 ++++++-----
2 files changed, 6 insertions(+), 25 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 39749c2..2873402 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -117,11 +117,6 @@ enum spi_nor_option_flags {
#ifdef CONFIG_SPI_FLASH_SST
# define CMD_SST_BP 0x02 /* Byte Program */
# define CMD_SST_AAI_WP 0xAD /* Auto Address Incr Word Program */
-
-int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
- const void *buf);
-int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
- const void *buf);
#endif
/**
@@ -166,9 +161,6 @@ int spi_flash_cmd_write(struct spi_slave *spi, const u8 *cmd, size_t cmd_len,
const void *data, size_t data_len);
-/* Flash erase(sectors) operation, support all possible erase commands */
-int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len);
-
/* Enable writing on the SPI flash */
static inline int spi_flash_cmd_write_enable(struct spi_flash *flash)
{
@@ -193,24 +185,12 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd,
size_t cmd_len, const void *buf, size_t buf_len);
/*
- * Flash write operation, support all possible write commands.
- * Write the requested data out breaking it up into multiple write
- * commands as needed per the write size.
- */
-int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
- size_t len, const void *buf);
-
-/*
* Same as spi_flash_cmd_read() except it also claims/releases the SPI
* bus. Used as common part of the ->read() operation.
*/
int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd,
size_t cmd_len, void *data, size_t data_len);
-/* Flash read operation, support all possible read commands */
-int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
- size_t len, void *data);
-
#ifdef CONFIG_SPI_FLASH_MTD
int spi_flash_mtd_register(struct spi_flash *flash);
void spi_flash_mtd_unregister(void);
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index f90f041..e04f8aa 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -298,7 +298,8 @@ int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd,
return ret;
}
-int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
+static int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset,
+ size_t len)
{
u32 erase_size, erase_addr;
u8 cmd[SPI_FLASH_CMD_LEN];
@@ -341,7 +342,7 @@ int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len)
return ret;
}
-int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
+static int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset,
size_t len, const void *buf)
{
unsigned long byte_addr, page_size;
@@ -418,7 +419,7 @@ void __weak spi_flash_copy_mmap(void *data, void *offset, size_t len)
memcpy(data, offset, len);
}
-int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
+static int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset,
size_t len, void *data)
{
u8 *cmd, cmdsz;
@@ -510,7 +511,7 @@ static int sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf)
return spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT);
}
-int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
+static int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
const void *buf)
{
size_t actual, cmd_len;
@@ -577,7 +578,7 @@ int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len,
return ret;
}
-int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
+static int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len,
const void *buf)
{
size_t actual;
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 11/14] sf: Remove unneeded header includes
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (8 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 10/14] sf: Use static for file-scope functions Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 12/14] sf: probe: Use spi_flash_scan in dm-spi-flash Jagan Teki
` (2 subsequent siblings)
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
Removed unneeded header includes in sf_ops and sf_probe.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 2 --
drivers/mtd/spi/sf_probe.c | 3 ---
2 files changed, 5 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index e04f8aa..d3e8a83 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -14,8 +14,6 @@
#include <mapmem.h>
#include <spi.h>
#include <spi_flash.h>
-#include <watchdog.h>
-#include <linux/compiler.h>
#include "sf_internal.h"
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index e2dac7e..cfc696f 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -11,12 +11,9 @@
#include <common.h>
#include <dm.h>
#include <errno.h>
-#include <fdtdec.h>
#include <malloc.h>
-#include <mapmem.h>
#include <spi.h>
#include <spi_flash.h>
-#include <asm/io.h>
#include "sf_internal.h"
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 12/14] sf: probe: Use spi_flash_scan in dm-spi-flash
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (9 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 11/14] sf: Remove unneeded header includes Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 13/14] sf: Re-factorize spi_flash_probe_tail code Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code Jagan Teki
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
This patch add support to use spi_flash_scan in
dm-spi-flash probe, so-that it can access
the spi_flash functionalities same as non-dm sf probe.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_probe.c | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index cfc696f..6ce82a7 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -137,14 +137,36 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
int spi_flash_std_probe(struct udevice *dev)
{
- struct spi_slave *slave = dev_get_parentdata(dev);
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
+ struct spi_slave *slave = dev_get_parentdata(dev);
struct spi_flash *flash;
+ int ret;
+
+ debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
flash = dev_get_uclass_priv(dev);
flash->dev = dev;
- debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
- return spi_flash_probe_slave(slave, flash);
+
+ /* Claim spi bus */
+ ret = spi_claim_bus(slave);
+ if (ret) {
+ debug("SF: Failed to claim SPI bus: %d\n", ret);
+ return ret;
+ }
+
+ ret = spi_flash_scan(slave, flash);
+ if (ret) {
+ ret = -EINVAL;
+ goto err_read_id;
+ }
+
+#ifdef CONFIG_SPI_FLASH_MTD
+ ret = spi_flash_mtd_register(flash);
+#endif
+
+err_read_id:
+ spi_release_bus(slave);
+ return ret;
}
static const struct dm_spi_flash_ops spi_flash_std_ops = {
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 13/14] sf: Re-factorize spi_flash_probe_tail code
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (10 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 12/14] sf: probe: Use spi_flash_scan in dm-spi-flash Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code Jagan Teki
12 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
spi_flash_probe_tail code looks not in proper shape
to add more functionalities. hence refactorized
so-that it's more readable and hence we may extend
more functionalies to it.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 3 +-
drivers/mtd/spi/sf_ops.c | 7 ++---
drivers/mtd/spi/sf_probe.c | 72 +++++++++++++++++--------------------------
3 files changed, 33 insertions(+), 49 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 2873402..d74bc18 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -198,7 +198,6 @@ void spi_flash_mtd_unregister(void);
/**
* spi_flash_scan - scan the SPI FLASH
- * @spi: the spi slave structure
* @flash: the spi flash structure
*
* The drivers can use this fuction to scan the SPI FLASH.
@@ -207,6 +206,6 @@ void spi_flash_mtd_unregister(void);
*
* Return: 0 for success, others for failure.
*/
-int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash);
+int spi_flash_scan(struct spi_flash *flash);
#endif /* _SF_INTERNAL_H_ */
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index d3e8a83..703099f 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -703,7 +703,7 @@ int spi_flash_decode_fdt(const void *blob, struct spi_flash *flash)
}
#endif /* CONFIG_IS_ENABLED(OF_CONTROL) */
-int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
+int spi_flash_scan(struct spi_flash *flash)
{
const struct spi_flash_params *params;
u16 jedec, ext_jedec;
@@ -712,7 +712,7 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
int ret;
/* Read the ID codes */
- ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
+ ret = spi_flash_cmd(flash->spi, CMD_READ_ID, idcode, sizeof(idcode));
if (ret) {
printf("SF: Failed to get idcodes\n");
return -EINVAL;
@@ -753,9 +753,8 @@ int spi_flash_scan(struct spi_slave *spi, struct spi_flash *flash)
write_sr(flash, 0);
/* Assign spi data */
- flash->spi = spi;
flash->name = params->name;
- flash->memory_map = spi->memory_map;
+ flash->memory_map = flash->spi->memory_map;
flash->dual_flash = flash->spi->option;
/* Assign spi_flash ops */
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index 6ce82a7..319b7e6 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -17,49 +17,11 @@
#include "sf_internal.h"
-/**
- * spi_flash_probe_slave() - Probe for a SPI flash device on a bus
- *
- * @spi: Bus to probe
- * @flashp: Pointer to place to put flash info, which may be NULL if the
- * space should be allocated
- */
-int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
-{
- int ret;
-
- /* Setup spi_slave */
- if (!spi) {
- printf("SF: Failed to set up slave\n");
- return -ENODEV;
- }
-
- /* Claim spi bus */
- ret = spi_claim_bus(spi);
- if (ret) {
- debug("SF: Failed to claim SPI bus: %d\n", ret);
- return ret;
- }
-
- ret = spi_flash_scan(spi, flash);
- if (ret) {
- ret = -EINVAL;
- goto err_read_id;
- }
-
-#ifdef CONFIG_SPI_FLASH_MTD
- ret = spi_flash_mtd_register(flash);
-#endif
-
-err_read_id:
- spi_release_bus(spi);
- return ret;
-}
-
#ifndef CONFIG_DM_SPI_FLASH
struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus)
{
struct spi_flash *flash;
+ int ret;
/* Allocate space if needed (not used by sf-uclass */
flash = calloc(1, sizeof(*flash));
@@ -68,13 +30,37 @@ struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus)
return NULL;
}
- if (spi_flash_probe_slave(bus, flash)) {
- spi_free_slave(bus);
- free(flash);
- return NULL;
+ flash->spi = bus;
+
+ /* Claim spi bus */
+ ret = spi_claim_bus(bus);
+ if (ret) {
+ debug("SF: Failed to claim SPI bus: %d\n", ret);
+ goto err_claim;
}
+ ret = spi_flash_scan(flash);
+ if (ret)
+ goto err_scan;
+
+#ifdef CONFIG_SPI_FLASH_MTD
+ ret = spi_flash_mtd_register(flash);
+ if (ret) {
+ printf("SF: failed to register mtd device: %d\n", ret);
+ goto err_mtd;
+ }
+#endif
return flash;
+
+#ifdef CONFIG_SPI_FLASH_MTD
+err_mtd:
+ spi_free_slave(bus);
+#endif
+err_scan:
+ spi_release_bus(bus);
+err_claim:
+ free(flash);
+ return NULL;
}
struct spi_flash *spi_flash_probe(unsigned int busnum, unsigned int cs,
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (11 preceding siblings ...)
2015-10-27 18:37 ` [U-Boot] [PATCH v5 13/14] sf: Re-factorize spi_flash_probe_tail code Jagan Teki
@ 2015-10-27 18:37 ` Jagan Teki
2015-10-27 19:20 ` Troy Kisky
12 siblings, 1 reply; 18+ messages in thread
From: Jagan Teki @ 2015-10-27 18:37 UTC (permalink / raw)
To: u-boot
spi_flash_probe_tail code looks not in proper shape
to add more functionalities. hence refactorized
so-that it's more readable and hence we may extend
more functionalies to it.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_probe.c | 22 ++++++++++++++--------
1 file changed, 14 insertions(+), 8 deletions(-)
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index 319b7e6..87ac33e 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -123,15 +123,12 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
int spi_flash_std_probe(struct udevice *dev)
{
- struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
+ struct spi_flash *flash = dev_get_uclass_priv(dev);
struct spi_slave *slave = dev_get_parentdata(dev);
- struct spi_flash *flash;
int ret;
- debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
-
- flash = dev_get_uclass_priv(dev);
flash->dev = dev;
+ flash->spi = slave;
/* Claim spi bus */
ret = spi_claim_bus(slave);
@@ -140,17 +137,26 @@ int spi_flash_std_probe(struct udevice *dev)
return ret;
}
- ret = spi_flash_scan(slave, flash);
+ ret = spi_flash_scan(flash);
if (ret) {
ret = -EINVAL;
- goto err_read_id;
+ goto err_scan;
}
#ifdef CONFIG_SPI_FLASH_MTD
ret = spi_flash_mtd_register(flash);
+ if (ret) {
+ printf("SF: failed to register mtd device: %d\n", ret);
+ goto err_mtd;
+ }
#endif
+ return ret;
-err_read_id:
+#ifdef CONFIG_SPI_FLASH_MTD
+err_mtd:
+ spi_free_slave(slave);
+#endif
+err_scan:
spi_release_bus(slave);
return ret;
}
--
1.9.1
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code
2015-10-27 18:37 ` [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code Jagan Teki
@ 2015-10-27 19:20 ` Troy Kisky
2015-10-28 5:18 ` Jagan Teki
0 siblings, 1 reply; 18+ messages in thread
From: Troy Kisky @ 2015-10-27 19:20 UTC (permalink / raw)
To: u-boot
On 10/27/2015 11:37 AM, Jagan Teki wrote:
> spi_flash_probe_tail code looks not in proper shape
> to add more functionalities. hence refactorized
> so-that it's more readable and hence we may extend
> more functionalies to it.
>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_probe.c | 22 ++++++++++++++--------
> 1 file changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> index 319b7e6..87ac33e 100644
> --- a/drivers/mtd/spi/sf_probe.c
> +++ b/drivers/mtd/spi/sf_probe.c
> @@ -123,15 +123,12 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
>
> int spi_flash_std_probe(struct udevice *dev)
> {
> - struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
> + struct spi_flash *flash = dev_get_uclass_priv(dev);
> struct spi_slave *slave = dev_get_parentdata(dev);
> - struct spi_flash *flash;
> int ret;
>
> - debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
> -
> - flash = dev_get_uclass_priv(dev);
> flash->dev = dev;
> + flash->spi = slave;
>
> /* Claim spi bus */
> ret = spi_claim_bus(slave);
> @@ -140,17 +137,26 @@ int spi_flash_std_probe(struct udevice *dev)
> return ret;
> }
>
> - ret = spi_flash_scan(slave, flash);
> + ret = spi_flash_scan(flash);
Is this bisectable ? It doesn't look like it.
> if (ret) {
> ret = -EINVAL;
> - goto err_read_id;
> + goto err_scan;
> }
>
> #ifdef CONFIG_SPI_FLASH_MTD
> ret = spi_flash_mtd_register(flash);
> + if (ret) {
> + printf("SF: failed to register mtd device: %d\n", ret);
> + goto err_mtd;
> + }
> #endif
> + return ret;
>
> -err_read_id:
> +#ifdef CONFIG_SPI_FLASH_MTD
> +err_mtd:
> + spi_free_slave(slave);
> +#endif
> +err_scan:
> spi_release_bus(slave);
> return ret;
> }
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code
2015-10-27 19:20 ` Troy Kisky
@ 2015-10-28 5:18 ` Jagan Teki
2015-10-28 5:31 ` Bin Meng
0 siblings, 1 reply; 18+ messages in thread
From: Jagan Teki @ 2015-10-28 5:18 UTC (permalink / raw)
To: u-boot
On 28 October 2015 at 00:50, Troy Kisky <troy.kisky@boundarydevices.com> wrote:
> On 10/27/2015 11:37 AM, Jagan Teki wrote:
>> spi_flash_probe_tail code looks not in proper shape
>> to add more functionalities. hence refactorized
>> so-that it's more readable and hence we may extend
>> more functionalies to it.
>>
>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>> ---
>> drivers/mtd/spi/sf_probe.c | 22 ++++++++++++++--------
>> 1 file changed, 14 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
>> index 319b7e6..87ac33e 100644
>> --- a/drivers/mtd/spi/sf_probe.c
>> +++ b/drivers/mtd/spi/sf_probe.c
>> @@ -123,15 +123,12 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
>>
>> int spi_flash_std_probe(struct udevice *dev)
>> {
>> - struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
>> + struct spi_flash *flash = dev_get_uclass_priv(dev);
>> struct spi_slave *slave = dev_get_parentdata(dev);
>> - struct spi_flash *flash;
>> int ret;
>>
>> - debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
>> -
>> - flash = dev_get_uclass_priv(dev);
>> flash->dev = dev;
>> + flash->spi = slave;
>>
>> /* Claim spi bus */
>> ret = spi_claim_bus(slave);
>> @@ -140,17 +137,26 @@ int spi_flash_std_probe(struct udevice *dev)
>> return ret;
>> }
>>
>> - ret = spi_flash_scan(slave, flash);
>> + ret = spi_flash_scan(flash);
>
>
>
> Is this bisectable ? It doesn't look like it.
What you mean bisectable here? This commit re-factorize the code in
accordance with changes introduced in v5 13/14 on dm-sf front.
>
>
>> if (ret) {
>> ret = -EINVAL;
>> - goto err_read_id;
>> + goto err_scan;
>> }
>>
>> #ifdef CONFIG_SPI_FLASH_MTD
>> ret = spi_flash_mtd_register(flash);
>> + if (ret) {
>> + printf("SF: failed to register mtd device: %d\n", ret);
>> + goto err_mtd;
>> + }
>> #endif
>> + return ret;
>>
>> -err_read_id:
>> +#ifdef CONFIG_SPI_FLASH_MTD
>> +err_mtd:
>> + spi_free_slave(slave);
>> +#endif
>> +err_scan:
>> spi_release_bus(slave);
>> return ret;
>> }
--
Jagan | openedev.
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code
2015-10-28 5:18 ` Jagan Teki
@ 2015-10-28 5:31 ` Bin Meng
2015-10-28 6:37 ` Jagan Teki
0 siblings, 1 reply; 18+ messages in thread
From: Bin Meng @ 2015-10-28 5:31 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On Wed, Oct 28, 2015 at 1:18 PM, Jagan Teki <jteki@openedev.com> wrote:
> On 28 October 2015 at 00:50, Troy Kisky <troy.kisky@boundarydevices.com> wrote:
>> On 10/27/2015 11:37 AM, Jagan Teki wrote:
>>> spi_flash_probe_tail code looks not in proper shape
>>> to add more functionalities. hence refactorized
>>> so-that it's more readable and hence we may extend
>>> more functionalies to it.
>>>
>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>> ---
>>> drivers/mtd/spi/sf_probe.c | 22 ++++++++++++++--------
>>> 1 file changed, 14 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
>>> index 319b7e6..87ac33e 100644
>>> --- a/drivers/mtd/spi/sf_probe.c
>>> +++ b/drivers/mtd/spi/sf_probe.c
>>> @@ -123,15 +123,12 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
>>>
>>> int spi_flash_std_probe(struct udevice *dev)
>>> {
>>> - struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
>>> + struct spi_flash *flash = dev_get_uclass_priv(dev);
>>> struct spi_slave *slave = dev_get_parentdata(dev);
>>> - struct spi_flash *flash;
>>> int ret;
>>>
>>> - debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
>>> -
>>> - flash = dev_get_uclass_priv(dev);
>>> flash->dev = dev;
>>> + flash->spi = slave;
>>>
>>> /* Claim spi bus */
>>> ret = spi_claim_bus(slave);
>>> @@ -140,17 +137,26 @@ int spi_flash_std_probe(struct udevice *dev)
>>> return ret;
>>> }
>>>
>>> - ret = spi_flash_scan(slave, flash);
>>> + ret = spi_flash_scan(flash);
>>
>>
>>
>> Is this bisectable ? It doesn't look like it.
>
> What you mean bisectable here? This commit re-factorize the code in
> accordance with changes introduced in v5 13/14 on dm-sf front.
>
We should make sure every commit can build successfully, aka
bisectable via 'git bisect'. It looks like you changed the
spi_flash_scan() function signature somewhere else, but not in this
commit, hence the question bisectable?
Regards,
Bin
^ permalink raw reply [flat|nested] 18+ messages in thread
* [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code
2015-10-28 5:31 ` Bin Meng
@ 2015-10-28 6:37 ` Jagan Teki
0 siblings, 0 replies; 18+ messages in thread
From: Jagan Teki @ 2015-10-28 6:37 UTC (permalink / raw)
To: u-boot
On 28 October 2015 at 11:01, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Jagan,
>
> On Wed, Oct 28, 2015 at 1:18 PM, Jagan Teki <jteki@openedev.com> wrote:
>> On 28 October 2015 at 00:50, Troy Kisky <troy.kisky@boundarydevices.com> wrote:
>>> On 10/27/2015 11:37 AM, Jagan Teki wrote:
>>>> spi_flash_probe_tail code looks not in proper shape
>>>> to add more functionalities. hence refactorized
>>>> so-that it's more readable and hence we may extend
>>>> more functionalies to it.
Thanks Bin, for the info I will move spi_flash_scan change back to 13/14 patch.
>>>>
>>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>>> ---
>>>> drivers/mtd/spi/sf_probe.c | 22 ++++++++++++++--------
>>>> 1 file changed, 14 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
>>>> index 319b7e6..87ac33e 100644
>>>> --- a/drivers/mtd/spi/sf_probe.c
>>>> +++ b/drivers/mtd/spi/sf_probe.c
>>>> @@ -123,15 +123,12 @@ int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
>>>>
>>>> int spi_flash_std_probe(struct udevice *dev)
>>>> {
>>>> - struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
>>>> + struct spi_flash *flash = dev_get_uclass_priv(dev);
>>>> struct spi_slave *slave = dev_get_parentdata(dev);
>>>> - struct spi_flash *flash;
>>>> int ret;
>>>>
>>>> - debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
>>>> -
>>>> - flash = dev_get_uclass_priv(dev);
>>>> flash->dev = dev;
>>>> + flash->spi = slave;
>>>>
>>>> /* Claim spi bus */
>>>> ret = spi_claim_bus(slave);
>>>> @@ -140,17 +137,26 @@ int spi_flash_std_probe(struct udevice *dev)
>>>> return ret;
>>>> }
>>>>
>>>> - ret = spi_flash_scan(slave, flash);
>>>> + ret = spi_flash_scan(flash);
>>>
>>>
>>>
>>> Is this bisectable ? It doesn't look like it.
>>
>> What you mean bisectable here? This commit re-factorize the code in
>> accordance with changes introduced in v5 13/14 on dm-sf front.
>>
>
> We should make sure every commit can build successfully, aka
> bisectable via 'git bisect'. It looks like you changed the
> spi_flash_scan() function signature somewhere else, but not in this
> commit, hence the question bisectable?
>
> Regards,
> Bin
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
--
Jagan | openedev.
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2015-10-28 6:37 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-27 18:37 [U-Boot] [PATCH v5 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 03/14] sf: Move read_id " Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 04/14] sf: probe: Code cleanup Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 05/14] sf: Use static for file-scope functions Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 06/14] sf: Fix Makefile Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 07/14] sf: Use simple name for register access functions Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 08/14] sf: Use flash function pointers in dm_spi_flash_ops Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 09/14] sf: Flash power up read-only based on idcode0 Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 10/14] sf: Use static for file-scope functions Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 11/14] sf: Remove unneeded header includes Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 12/14] sf: probe: Use spi_flash_scan in dm-spi-flash Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 13/14] sf: Re-factorize spi_flash_probe_tail code Jagan Teki
2015-10-27 18:37 ` [U-Boot] [PATCH v5 14/14] dm-sf: Re-factorize spi_flash_std_probe code Jagan Teki
2015-10-27 19:20 ` Troy Kisky
2015-10-28 5:18 ` Jagan Teki
2015-10-28 5:31 ` Bin Meng
2015-10-28 6:37 ` Jagan Teki
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.