* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
@ 2015-12-06 18:34 Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
` (17 more replies)
0 siblings, 18 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
This series bypasses MTD changes from previous series[1][2] and
entire series tunned spi-flash layer for better code handling.
Changes in v8:
- Rebase to master
- PATCH v8 12/14, 13/14, 14/14 added newly.
Changes in v7:
- Rebase to master
- Few patch bisectable separations
Changes in v6, v5, v4, v3, v2:
- One patch bisectable separation
- Rebase to master
Testing:
$ git clone git://git.denx.de/u-boot-spi.git
$ cd u-boot-spi
$ git checkout -b next origin/next
[1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
[2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
thanks!
Jagan.
Jagan Teki (14):
sf: spi_flash_validate_params => spi_flash_scan
sf: Move spi_flash_scan code to sf_ops
sf: Move read_id code to sf_ops
sf: probe: Code cleanup
sf: Use static for file-scope functions
sf: Fix Makefile
sf: Use simple name for register access functions
sf: Flash power up read-only based on idcode0
sf: Remove unneeded header includes
sf: Remove unneeded SST_BP and SST_WP
sf: ops: Fix missing break on spansion read_bar
sf: sf_probe: Remove spi_slave pointer argument
sf: Use static for file-scope functions
sf: Rename sf_ops.c to spi-flash.c
drivers/mtd/spi/Makefile | 6 +-
drivers/mtd/spi/sf_internal.h | 38 ++-
drivers/mtd/spi/sf_probe.c | 373 +--------------------------
drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 406 ++++++++++++++++++++++++++++--
4 files changed, 408 insertions(+), 415 deletions(-)
rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (60%)
--
1.9.1
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
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
2015-12-10 1:30 ` Bin Meng
2015-12-06 18:34 ` [U-Boot] [PATCH v8 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
` (16 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 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.
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
^ permalink raw reply related [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 02/14] sf: Move spi_flash_scan code to sf_ops
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
@ 2015-12-06 18:34 ` 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
` (15 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 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
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 14 ++
drivers/mtd/spi/sf_ops.c | 343 ++++++++++++++++++++++++++++++++++++++++++
drivers/mtd/spi/sf_probe.c | 342 -----------------------------------------
3 files changed, 357 insertions(+), 342 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 85c8a89..f3eb6f3 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -245,4 +245,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 3a56d7f..306db8f 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>
@@ -19,6 +20,8 @@
#include "sf_internal.h"
+DECLARE_GLOBAL_DATA_PTR;
+
static void spi_flash_addr(u32 addr, u8 *cmd)
{
/* cmd[0] is actual command */
@@ -757,3 +760,343 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len)
return 0;
}
#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 flags */
+ if (params->flags & SST_WR)
+ flash->flags |= SNOR_F_SST_WR;
+
+ /* Assign spi_flash ops */
+#ifndef CONFIG_DM_SPI_FLASH
+ flash->write = spi_flash_cmd_write_ops;
+#if defined(CONFIG_SPI_FLASH_SST)
+ if (flash->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
+
+ /* lock hooks are flash specific - assign them based on idcode0 */
+ switch (idcode[0]) {
+#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
+ case SPI_FLASH_CFI_MFR_STMICRO:
+ case SPI_FLASH_CFI_MFR_SST:
+ flash->flash_lock = stm_lock;
+ flash->flash_unlock = stm_unlock;
+ flash->flash_is_locked = stm_is_locked;
+#endif
+ break;
+ default:
+ debug("SF: Lock ops not supported for %02x flash\n", idcode[0]);
+ }
+
+ /* 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 0e20088..994559d 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -20,348 +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 flags */
- if (params->flags & SST_WR)
- flash->flags |= SNOR_F_SST_WR;
-
- /* Assign spi_flash ops */
-#ifndef CONFIG_DM_SPI_FLASH
- flash->write = spi_flash_cmd_write_ops;
-#if defined(CONFIG_SPI_FLASH_SST)
- if (flash->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
-
- /* lock hooks are flash specific - assign them based on idcode0 */
- switch (idcode[0]) {
-#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
- case SPI_FLASH_CFI_MFR_STMICRO:
- case SPI_FLASH_CFI_MFR_SST:
- flash->flash_lock = stm_lock;
- flash->flash_unlock = stm_unlock;
- flash->flash_is_locked = stm_is_locked;
-#endif
- break;
- default:
- debug("SF: Lock ops not supported for %02x flash\n", idcode[0]);
- }
-
- /* 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] 48+ messages in thread
* [U-Boot] [PATCH v8 03/14] sf: Move read_id code to sf_ops
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 02/14] sf: Move spi_flash_scan code to sf_ops Jagan Teki
@ 2015-12-06 18:34 ` 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
` (14 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
read_id code is related to spi_flash stuff
hence moved to sf_ops.
Reviewed-by: Simon Glass <sjg@chromium.org>
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 f3eb6f3..670429f 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -248,7 +248,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.
@@ -257,6 +256,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 306db8f..54c6468 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -898,14 +898,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 994559d..e35b917 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] 48+ messages in thread
* [U-Boot] [PATCH v8 04/14] sf: probe: Code cleanup
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (2 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 03/14] sf: Move read_id " Jagan Teki
@ 2015-12-06 18:34 ` 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
` (13 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 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
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 80 +++++++++++++++++++++++-------------------------
1 file changed, 39 insertions(+), 41 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index 54c6468..8d6040e 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -30,6 +30,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;
@@ -133,6 +143,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
@@ -762,16 +801,6 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, 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)
{
@@ -839,37 +868,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] 48+ messages in thread
* [U-Boot] [PATCH v8 05/14] sf: Use static for file-scope functions
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (3 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 04/14] sf: probe: Code cleanup Jagan Teki
@ 2015-12-06 18:34 ` 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
` (12 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 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 670429f..8f586ee 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -171,12 +171,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);
-
/* Lock stmicro spi flash region */
int stm_lock(struct spi_flash *flash, u32 ofs, size_t len);
@@ -186,12 +180,6 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len);
/* Check if a stmicro spi flash region is completely locked */
int stm_is_locked(struct spi_flash *flash, u32 ofs, size_t len);
-/* 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)
{
@@ -205,12 +193,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 8d6040e..23a6adb 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -40,7 +40,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;
@@ -69,7 +69,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;
@@ -85,7 +85,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;
@@ -100,7 +100,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;
@@ -238,7 +238,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] 48+ messages in thread
* [U-Boot] [PATCH v8 06/14] sf: Fix Makefile
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (4 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 05/14] sf: Use static for file-scope functions Jagan Teki
@ 2015-12-06 18:34 ` Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 07/14] sf: Use simple name for register access functions Jagan Teki
` (11 subsequent siblings)
17 siblings, 0 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
This patch removes unneeded ifdef and fixed accordingly.
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
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 cf4e7e1..a24f761 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] 48+ messages in thread
* [U-Boot] [PATCH v8 07/14] sf: Use simple name for register access functions
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (5 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 06/14] sf: Fix Makefile Jagan Teki
@ 2015-12-06 18:34 ` 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
` (10 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
Most of the register access function are static,
so used simple name to represent each.
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 52 ++++++++++++++++++++++++------------------------
1 file changed, 26 insertions(+), 26 deletions(-)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index 23a6adb..853759e 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -40,7 +40,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;
@@ -69,7 +69,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;
@@ -85,7 +85,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;
@@ -100,13 +100,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;
@@ -123,7 +123,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;
@@ -144,7 +144,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;
@@ -175,7 +175,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:
@@ -201,7 +201,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;
@@ -325,10 +325,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
@@ -375,10 +375,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
@@ -470,10 +470,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;
@@ -671,7 +671,7 @@ int stm_is_locked(struct spi_flash *flash, u32 ofs, size_t len)
int status;
u8 sr;
- status = spi_flash_cmd_read_status(flash, &sr);
+ status = read_sr(flash, &sr);
if (status < 0)
return status;
@@ -708,7 +708,7 @@ int stm_lock(struct spi_flash *flash, u32 ofs, size_t len)
u8 shift = ffs(mask) - 1, pow, val;
int ret;
- ret = spi_flash_cmd_read_status(flash, &status_old);
+ ret = read_sr(flash, &status_old);
if (ret < 0)
return ret;
@@ -745,7 +745,7 @@ int stm_lock(struct spi_flash *flash, u32 ofs, size_t len)
if ((status_new & mask) <= (status_old & mask))
return -EINVAL;
- spi_flash_cmd_write_status(flash, status_new);
+ write_sr(flash, status_new);
return 0;
}
@@ -762,7 +762,7 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len)
u8 shift = ffs(mask) - 1, pow, val;
int ret;
- ret = spi_flash_cmd_read_status(flash, &status_old);
+ ret = read_sr(flash, &status_old);
if (ret < 0)
return ret;
@@ -795,7 +795,7 @@ int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len)
if ((status_new & mask) >= (status_old & mask))
return -EINVAL;
- spi_flash_cmd_write_status(flash, status_new);
+ write_sr(flash, status_new);
return 0;
}
@@ -808,14 +808,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;
}
@@ -830,14 +830,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;
}
@@ -944,7 +944,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 */
@@ -1079,7 +1079,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] 48+ messages in thread
* [U-Boot] [PATCH v8 08/14] sf: Flash power up read-only based on idcode0
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (6 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 07/14] sf: Use simple name for register access functions Jagan Teki
@ 2015-12-06 18:34 ` 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
` (9 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 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.
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 1 +
drivers/mtd/spi/sf_ops.c | 7 +++----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 8f586ee..b8692c6 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -66,6 +66,7 @@ enum spi_nor_option_flags {
#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 853759e..e5514ab 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -941,11 +941,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] 48+ messages in thread
* [U-Boot] [PATCH v8 09/14] sf: Remove unneeded header includes
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (7 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 08/14] sf: Flash power up read-only based on idcode0 Jagan Teki
@ 2015-12-06 18:34 ` 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
` (8 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
Removed unneeded header includes in sf_ops and sf_probe
Reviewed-by: Simon Glass <sjg@chromium.org>
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 e5514ab..ef45fc1 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 <linux/log2.h>
#include "sf_internal.h"
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index e35b917..f8aad56 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] 48+ messages in thread
* [U-Boot] [PATCH v8 10/14] sf: Remove unneeded SST_BP and SST_WP
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (8 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 09/14] sf: Remove unneeded header includes Jagan Teki
@ 2015-12-06 18:34 ` 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
` (7 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
SST parts added on sf_params.c supports both SST_WR which consits
of both BP and WP and there is a spi controller ich which supports
only BP so the relevent _write hook set based on "slave->op_mode_tx"
hence there is no respective change required from flash side hance
removed these.
Cc: Bin Meng <bmeng.cn@gmail.com>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index b8692c6..16dd45b 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -44,13 +44,10 @@ enum {
#endif
SECT_32K = 1 << 1,
E_FSR = 1 << 2,
- SST_BP = 1 << 3,
- SST_WP = 1 << 4,
- WR_QPP = 1 << 5,
+ SST_WR = 1 << 3,
+ WR_QPP = 1 << 4,
};
-#define SST_WR (SST_BP | SST_WP)
-
enum spi_nor_option_flags {
SNOR_F_SST_WR = (1 << 0),
SNOR_F_USE_FSR = (1 << 1),
--
1.9.1
^ permalink raw reply related [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 11/14] sf: ops: Fix missing break on spansion read_bar
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (9 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 10/14] sf: Remove unneeded SST_BP and SST_WP Jagan Teki
@ 2015-12-06 18:34 ` 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
` (6 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
For assigning read_bar commands in spansion case, break
is missing this patch add that break.
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_ops.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/sf_ops.c
index ef45fc1..68f191b 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -154,6 +154,7 @@ static int spi_flash_read_bar(struct spi_flash *flash, u8 idcode0)
case SPI_FLASH_CFI_MFR_SPANSION:
flash->bank_read_cmd = CMD_BANKADDR_BRRD;
flash->bank_write_cmd = CMD_BANKADDR_BRWR;
+ break;
default:
flash->bank_read_cmd = CMD_EXTNADDR_RDEAR;
flash->bank_write_cmd = CMD_EXTNADDR_WREAR;
--
1.9.1
^ permalink raw reply related [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 12/14] sf: sf_probe: Remove spi_slave pointer argument
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (10 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 11/14] sf: ops: Fix missing break on spansion read_bar Jagan Teki
@ 2015-12-06 18:34 ` 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
` (5 subsequent siblings)
17 siblings, 2 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
Since spi_slave is a spi pointer in spi_flash{} then assign
spi_slave{} pointer to flash->spi and remove spi_slave
pointer argument to
- spi_flash_probe_slave
- spi_flash_scan
Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_internal.h | 3 +--
drivers/mtd/spi/sf_ops.c | 4 ++--
drivers/mtd/spi/sf_probe.c | 12 +++++++-----
3 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/drivers/mtd/spi/sf_internal.h b/drivers/mtd/spi/sf_internal.h
index 16dd45b..ed5c391 100644
--- a/drivers/mtd/spi/sf_internal.h
+++ b/drivers/mtd/spi/sf_internal.h
@@ -227,7 +227,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.
@@ -236,6 +235,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 68f191b..c065858 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/sf_ops.c
@@ -896,8 +896,9 @@ 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)
{
+ struct spi_slave *spi = flash->spi;
const struct spi_flash_params *params;
u16 jedec, ext_jedec;
u8 idcode[5];
@@ -946,7 +947,6 @@ 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->dual_flash = flash->spi->option;
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index f8aad56..bf53eef 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -20,12 +20,12 @@
/**
* 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 spi_flash_probe_slave(struct spi_flash *flash)
{
+ struct spi_slave *spi = flash->spi;
int ret;
/* Setup spi_slave */
@@ -41,7 +41,7 @@ int spi_flash_probe_slave(struct spi_slave *spi, struct spi_flash *flash)
return ret;
}
- ret = spi_flash_scan(spi, flash);
+ ret = spi_flash_scan(flash);
if (ret) {
ret = -EINVAL;
goto err_read_id;
@@ -68,7 +68,8 @@ struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus)
return NULL;
}
- if (spi_flash_probe_slave(bus, flash)) {
+ flash->spi = bus;
+ if (spi_flash_probe_slave(flash)) {
spi_free_slave(bus);
free(flash);
return NULL;
@@ -152,8 +153,9 @@ int spi_flash_std_probe(struct udevice *dev)
flash = dev_get_uclass_priv(dev);
flash->dev = dev;
+ flash->spi = slave;
debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
- return spi_flash_probe_slave(slave, flash);
+ return spi_flash_probe_slave(flash);
}
static const struct dm_spi_flash_ops spi_flash_std_ops = {
--
1.9.1
^ permalink raw reply related [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 13/14] sf: Use static for file-scope functions
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (11 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 12/14] sf: sf_probe: Remove spi_slave pointer argument Jagan Teki
@ 2015-12-06 18:34 ` 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
` (4 subsequent siblings)
17 siblings, 2 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
Used static for file-scope functions in sf_probe.c
Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/sf_probe.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index bf53eef..0cafc29 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -23,7 +23,7 @@
* @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_flash *flash)
+static int spi_flash_probe_slave(struct spi_flash *flash)
{
struct spi_slave *spi = flash->spi;
int ret;
@@ -57,7 +57,7 @@ err_read_id:
}
#ifndef CONFIG_DM_SPI_FLASH
-struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus)
+static struct spi_flash *spi_flash_probe_tail(struct spi_slave *bus)
{
struct spi_flash *flash;
@@ -121,7 +121,7 @@ static int spi_flash_std_read(struct udevice *dev, u32 offset, size_t len,
return spi_flash_cmd_read_ops(flash, offset, len, buf);
}
-int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
+static int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
const void *buf)
{
struct spi_flash *flash = dev_get_uclass_priv(dev);
@@ -138,14 +138,14 @@ int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
return spi_flash_cmd_write_ops(flash, offset, len, buf);
}
-int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
+static 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);
}
-int spi_flash_std_probe(struct udevice *dev)
+static int spi_flash_std_probe(struct udevice *dev)
{
struct spi_slave *slave = dev_get_parent_priv(dev);
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
--
1.9.1
^ permalink raw reply related [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (12 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 13/14] sf: Use static for file-scope functions Jagan Teki
@ 2015-12-06 18:34 ` Jagan Teki
2015-12-09 4:54 ` Simon Glass
2015-12-07 13:14 ` [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (3 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-06 18:34 UTC (permalink / raw)
To: u-boot
Since all spi-flash core operations are moved into
sf_ops.c then it's better to renamed as spi-flash.c
Signed-off-by: Jagan Teki <jteki@openedev.com>
---
drivers/mtd/spi/Makefile | 2 +-
drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile
index a24f761..7bc76a2 100644
--- a/drivers/mtd/spi/Makefile
+++ b/drivers/mtd/spi/Makefile
@@ -12,7 +12,7 @@ obj-$(CONFIG_SPL_SPI_LOAD) += spi_spl_load.o
obj-$(CONFIG_SPL_SPI_BOOT) += fsl_espi_spl.o
endif
-obj-$(CONFIG_SPI_FLASH) += sf_probe.o sf_ops.o sf_params.o sf.o
+obj-$(CONFIG_SPI_FLASH) += sf_probe.o spi-flash.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
diff --git a/drivers/mtd/spi/sf_ops.c b/drivers/mtd/spi/spi-flash.c
similarity index 99%
rename from drivers/mtd/spi/sf_ops.c
rename to drivers/mtd/spi/spi-flash.c
index c065858..7ffa136 100644
--- a/drivers/mtd/spi/sf_ops.c
+++ b/drivers/mtd/spi/spi-flash.c
@@ -1,9 +1,10 @@
/*
- * SPI flash operations
+ * SPI Flash Core
*
- * Copyright (C) 2008 Atmel Corporation
- * Copyright (C) 2010 Reinhard Meyer, EMK Elektronik
+ * Copyright (C) 2015 Jagan Teki <jteki@openedev.com>
* Copyright (C) 2013 Jagannadha Sutradharudu Teki, Xilinx Inc.
+ * Copyright (C) 2010 Reinhard Meyer, EMK Elektronik
+ * Copyright (C) 2008 Atmel Corporation
*
* SPDX-License-Identifier: GPL-2.0+
*/
--
1.9.1
^ permalink raw reply related [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (13 preceding siblings ...)
2015-12-06 18:34 ` [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c Jagan Teki
@ 2015-12-07 13:14 ` Jagan Teki
2015-12-08 11:54 ` Bin Meng
2015-12-08 10:30 ` Jagan Teki
` (2 subsequent siblings)
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-07 13:14 UTC (permalink / raw)
To: u-boot
Hi Bin,
On 7 December 2015 at 00:04, Jagan Teki <jteki@openedev.com> wrote:
> This series bypasses MTD changes from previous series[1][2] and
> entire series tunned spi-flash layer for better code handling.
>
> Changes in v8:
> - Rebase to master
> - PATCH v8 12/14, 13/14, 14/14 added newly.
>
> Changes in v7:
> - Rebase to master
> - Few patch bisectable separations
>
> Changes in v6, v5, v4, v3, v2:
> - One patch bisectable separation
> - Rebase to master
>
> Testing:
> $ git clone git://git.denx.de/u-boot-spi.git
> $ cd u-boot-spi
> $ git checkout -b next origin/next
Please test this.
>
> [1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
> [2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
>
> thanks!
> Jagan.
>
> Jagan Teki (14):
> sf: spi_flash_validate_params => spi_flash_scan
> sf: Move spi_flash_scan code to sf_ops
> sf: Move read_id code to sf_ops
> sf: probe: Code cleanup
> sf: Use static for file-scope functions
> sf: Fix Makefile
> sf: Use simple name for register access functions
> sf: Flash power up read-only based on idcode0
> sf: Remove unneeded header includes
> sf: Remove unneeded SST_BP and SST_WP
> sf: ops: Fix missing break on spansion read_bar
> sf: sf_probe: Remove spi_slave pointer argument
> sf: Use static for file-scope functions
> sf: Rename sf_ops.c to spi-flash.c
>
> drivers/mtd/spi/Makefile | 6 +-
> drivers/mtd/spi/sf_internal.h | 38 ++-
> drivers/mtd/spi/sf_probe.c | 373 +--------------------------
> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 406 ++++++++++++++++++++++++++++--
> 4 files changed, 408 insertions(+), 415 deletions(-)
> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (60%)
>
> --
> 1.9.1
>
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (14 preceding siblings ...)
2015-12-07 13:14 ` [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
@ 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
17 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-08 10:30 UTC (permalink / raw)
To: u-boot
Hi Tom/Wolfgang,
"Need a separate repo for spi-nor and related subsystem."
Why?
- Currently I'm using u-boot-spi for both spi and spi-flash - some
flash stuff been added to spi area which is hard for
adding/maintaining new features.
- Both are two separate(not different) Subsystems one is generic SPI
drivers/spi and another one is flash slave device drivers/mtd/spi
- Development is going on for SPI-NOR Subsystem similar like mtd nand,
cfi-flash etc.
On 7 December 2015 at 00:04, Jagan Teki <jteki@openedev.com> wrote:
> This series bypasses MTD changes from previous series[1][2] and
> entire series tunned spi-flash layer for better code handling.
>
> Changes in v8:
> - Rebase to master
> - PATCH v8 12/14, 13/14, 14/14 added newly.
>
> Changes in v7:
> - Rebase to master
> - Few patch bisectable separations
>
> Changes in v6, v5, v4, v3, v2:
> - One patch bisectable separation
> - Rebase to master
>
> Testing:
> $ git clone git://git.denx.de/u-boot-spi.git
> $ cd u-boot-spi
> $ git checkout -b next origin/next
>
> [1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
> [2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-08 11:54 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On Mon, Dec 7, 2015 at 9:14 PM, Jagan Teki <jteki@openedev.com> wrote:
> Hi Bin,
>
> On 7 December 2015 at 00:04, Jagan Teki <jteki@openedev.com> wrote:
>> This series bypasses MTD changes from previous series[1][2] and
>> entire series tunned spi-flash layer for better code handling.
>>
>> Changes in v8:
>> - Rebase to master
>> - PATCH v8 12/14, 13/14, 14/14 added newly.
>>
>> Changes in v7:
>> - Rebase to master
>> - Few patch bisectable separations
>>
>> Changes in v6, v5, v4, v3, v2:
>> - One patch bisectable separation
>> - Rebase to master
>>
>> Testing:
>> $ git clone git://git.denx.de/u-boot-spi.git
>> $ cd u-boot-spi
>> $ git checkout -b next origin/next
>
> Please test this.
>
Will do this week.
>>
>> [1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
>> [2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
>>
>> thanks!
>> Jagan.
>>
>> Jagan Teki (14):
>> sf: spi_flash_validate_params => spi_flash_scan
>> sf: Move spi_flash_scan code to sf_ops
>> sf: Move read_id code to sf_ops
>> sf: probe: Code cleanup
>> sf: Use static for file-scope functions
>> sf: Fix Makefile
>> sf: Use simple name for register access functions
>> sf: Flash power up read-only based on idcode0
>> sf: Remove unneeded header includes
>> sf: Remove unneeded SST_BP and SST_WP
>> sf: ops: Fix missing break on spansion read_bar
>> sf: sf_probe: Remove spi_slave pointer argument
>> sf: Use static for file-scope functions
>> sf: Rename sf_ops.c to spi-flash.c
>>
>> drivers/mtd/spi/Makefile | 6 +-
>> drivers/mtd/spi/sf_internal.h | 38 ++-
>> drivers/mtd/spi/sf_probe.c | 373 +--------------------------
>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 406 ++++++++++++++++++++++++++++--
>> 4 files changed, 408 insertions(+), 415 deletions(-)
>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (60%)
>>
Regards,
Bin
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 11/14] sf: ops: Fix missing break on spansion read_bar
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
0 siblings, 0 replies; 48+ messages in thread
From: Simon Glass @ 2015-12-09 4:53 UTC (permalink / raw)
To: u-boot
On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
> For assigning read_bar commands in spansion case, break
> is missing this patch add that break.
>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_ops.c | 1 +
> 1 file changed, 1 insertion(+)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 12/14] sf: sf_probe: Remove spi_slave pointer argument
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
1 sibling, 0 replies; 48+ messages in thread
From: Simon Glass @ 2015-12-09 4:53 UTC (permalink / raw)
To: u-boot
On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
> Since spi_slave is a spi pointer in spi_flash{} then assign
> spi_slave{} pointer to flash->spi and remove spi_slave
> pointer argument to
> - spi_flash_probe_slave
> - spi_flash_scan
>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_internal.h | 3 +--
> drivers/mtd/spi/sf_ops.c | 4 ++--
> drivers/mtd/spi/sf_probe.c | 12 +++++++-----
> 3 files changed, 10 insertions(+), 9 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 13/14] sf: Use static for file-scope functions
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
1 sibling, 0 replies; 48+ messages in thread
From: Simon Glass @ 2015-12-09 4:53 UTC (permalink / raw)
To: u-boot
On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
> Used static for file-scope functions in sf_probe.c
>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_probe.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
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
0 siblings, 2 replies; 48+ messages in thread
From: Simon Glass @ 2015-12-09 4:54 UTC (permalink / raw)
To: u-boot
On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
> Since all spi-flash core operations are moved into
> sf_ops.c then it's better to renamed as spi-flash.c
>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/Makefile | 2 +-
> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
> 2 files changed, 5 insertions(+), 4 deletions(-)
> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
Reviewed-by: Simon Glass <sjg@chromium.org>
(but I suggest spi_flash.c is better as it fits with the other files)
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-09 4:54 ` Simon Glass
@ 2015-12-09 13:48 ` Jagan Teki
2015-12-10 1:31 ` Bin Meng
1 sibling, 0 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-09 13:48 UTC (permalink / raw)
To: u-boot
On 9 December 2015 at 10:24, Simon Glass <sjg@chromium.org> wrote:
> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>> Since all spi-flash core operations are moved into
>> sf_ops.c then it's better to renamed as spi-flash.c
>>
>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>> ---
>> drivers/mtd/spi/Makefile | 2 +-
>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>> 2 files changed, 5 insertions(+), 4 deletions(-)
>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> (but I suggest spi_flash.c is better as it fits with the other files)
I too thought the same, but will rename the remaining to proper have a
plan for the same.
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
2015-12-06 18:34 ` [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
@ 2015-12-10 1:30 ` Bin Meng
2015-12-10 15:16 ` Jagan Teki
0 siblings, 1 reply; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:30 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, 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.
>
> 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)
nits: please align above line to the left (
> {
> 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
> --
Other than that,
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 02/14] sf: Move spi_flash_scan code to sf_ops
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:30 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> 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
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_internal.h | 14 ++
> drivers/mtd/spi/sf_ops.c | 343 ++++++++++++++++++++++++++++++++++++++++++
> drivers/mtd/spi/sf_probe.c | 342 -----------------------------------------
> 3 files changed, 357 insertions(+), 342 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 03/14] sf: Move read_id code to sf_ops
2015-12-06 18:34 ` [U-Boot] [PATCH v8 03/14] sf: Move read_id " Jagan Teki
@ 2015-12-10 1:30 ` Bin Meng
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:30 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> read_id code is related to spi_flash stuff
> hence moved to sf_ops.
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> 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(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 04/14] sf: probe: Code cleanup
2015-12-06 18:34 ` [U-Boot] [PATCH v8 04/14] sf: probe: Code cleanup Jagan Teki
@ 2015-12-10 1:30 ` Bin Meng
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:30 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> - 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
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_ops.c | 80 +++++++++++++++++++++++-------------------------
> 1 file changed, 39 insertions(+), 41 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 05/14] sf: Use static for file-scope functions
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> 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(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 07/14] sf: Use simple name for register access functions
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> Most of the register access function are static,
> so used simple name to represent each.
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_ops.c | 52 ++++++++++++++++++++++++------------------------
> 1 file changed, 26 insertions(+), 26 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 08/14] sf: Flash power up read-only based on idcode0
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> 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.
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_internal.h | 1 +
> drivers/mtd/spi/sf_ops.c | 7 +++----
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 09/14] sf: Remove unneeded header includes
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> Removed unneeded header includes in sf_ops and sf_probe
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> 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(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 10/14] sf: Remove unneeded SST_BP and SST_WP
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
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> SST parts added on sf_params.c supports both SST_WR which consits
> of both BP and WP and there is a spi controller ich which supports
> only BP so the relevent _write hook set based on "slave->op_mode_tx"
> hence there is no respective change required from flash side hance
> removed these.
>
> Cc: Bin Meng <bmeng.cn@gmail.com>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_internal.h | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 12/14] sf: sf_probe: Remove spi_slave pointer argument
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
1 sibling, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> Since spi_slave is a spi pointer in spi_flash{} then assign
> spi_slave{} pointer to flash->spi and remove spi_slave
> pointer argument to
> - spi_flash_probe_slave
> - spi_flash_scan
>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_internal.h | 3 +--
> drivers/mtd/spi/sf_ops.c | 4 ++--
> drivers/mtd/spi/sf_probe.c | 12 +++++++-----
> 3 files changed, 10 insertions(+), 9 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 13/14] sf: Use static for file-scope functions
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
1 sibling, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Mon, Dec 7, 2015 at 2:34 AM, Jagan Teki <jteki@openedev.com> wrote:
> Used static for file-scope functions in sf_probe.c
>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Jagan Teki <jteki@openedev.com>
> ---
> drivers/mtd/spi/sf_probe.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
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
1 sibling, 1 reply; 48+ messages in thread
From: Bin Meng @ 2015-12-10 1:31 UTC (permalink / raw)
To: u-boot
On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>> Since all spi-flash core operations are moved into
>> sf_ops.c then it's better to renamed as spi-flash.c
>>
>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>> ---
>> drivers/mtd/spi/Makefile | 2 +-
>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>> 2 files changed, 5 insertions(+), 4 deletions(-)
>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> (but I suggest spi_flash.c is better as it fits with the other files)
Agreed. spi_flash.c makes more sense. So far it looks that only driver
model uclass driver is using - in the file name, others are using _.
Other than this,
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-10 1:31 ` Bin Meng
@ 2015-12-10 15:13 ` Jagan Teki
2015-12-11 6:23 ` Bin Meng
0 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-10 15:13 UTC (permalink / raw)
To: u-boot
On 10 December 2015 at 07:01, Bin Meng <bmeng.cn@gmail.com> wrote:
> On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
>> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>>> Since all spi-flash core operations are moved into
>>> sf_ops.c then it's better to renamed as spi-flash.c
>>>
>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>> ---
>>> drivers/mtd/spi/Makefile | 2 +-
>>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>> (but I suggest spi_flash.c is better as it fits with the other files)
>
> Agreed. spi_flash.c makes more sense. So far it looks that only driver
> model uclass driver is using - in the file name, others are using _.
Clear, but this file will handle common spi-flash core functionalities
it shouldn't be dm even now or later and more over underlying sf_probe
which is calling this through spi_flash_scan has a driver model on it.
>
> Other than this,
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
2015-12-10 1:30 ` Bin Meng
@ 2015-12-10 15:16 ` Jagan Teki
2015-12-11 6:21 ` Bin Meng
0 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-10 15:16 UTC (permalink / raw)
To: u-boot
On 10 December 2015 at 07:00, Bin Meng <bmeng.cn@gmail.com> wrote:
> On Mon, Dec 7, 2015 at 2:34 AM, 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.
>>
>> 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)
>
> nits: please align above line to the left (
What is the reason, will it be an alignment issue.
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
>> --
>
> Other than that,
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> Tested-by: Bin Meng <bmeng.cn@gmail.com>
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
2015-12-08 10:30 ` Jagan Teki
@ 2015-12-10 15:18 ` Jagan Teki
0 siblings, 0 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-10 15:18 UTC (permalink / raw)
To: u-boot
On 8 December 2015 at 16:00, Jagan Teki <jteki@openedev.com> wrote:
> Hi Tom/Wolfgang,
>
> "Need a separate repo for spi-nor and related subsystem."
>
> Why?
> - Currently I'm using u-boot-spi for both spi and spi-flash - some
> flash stuff been added to spi area which is hard for
> adding/maintaining new features.
> - Both are two separate(not different) Subsystems one is generic SPI
> drivers/spi and another one is flash slave device drivers/mtd/spi
> - Development is going on for SPI-NOR Subsystem similar like mtd nand,
> cfi-flash etc.
Any inputs on this or am I unclear?
>
> On 7 December 2015 at 00:04, Jagan Teki <jteki@openedev.com> wrote:
>> This series bypasses MTD changes from previous series[1][2] and
>> entire series tunned spi-flash layer for better code handling.
>>
>> Changes in v8:
>> - Rebase to master
>> - PATCH v8 12/14, 13/14, 14/14 added newly.
>>
>> Changes in v7:
>> - Rebase to master
>> - Few patch bisectable separations
>>
>> Changes in v6, v5, v4, v3, v2:
>> - One patch bisectable separation
>> - Rebase to master
>>
>> Testing:
>> $ git clone git://git.denx.de/u-boot-spi.git
>> $ cd u-boot-spi
>> $ git checkout -b next origin/next
>>
>> [1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
>> [2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (15 preceding siblings ...)
2015-12-08 10:30 ` Jagan Teki
@ 2015-12-10 15:22 ` Jagan Teki
2015-12-11 16:45 ` Jagan Teki
17 siblings, 0 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-10 15:22 UTC (permalink / raw)
To: u-boot
On 7 December 2015 at 00:04, Jagan Teki <jteki@openedev.com> wrote:
> This series bypasses MTD changes from previous series[1][2] and
> entire series tunned spi-flash layer for better code handling.
>
> Changes in v8:
> - Rebase to master
> - PATCH v8 12/14, 13/14, 14/14 added newly.
>
> Changes in v7:
> - Rebase to master
> - Few patch bisectable separations
>
> Changes in v6, v5, v4, v3, v2:
> - One patch bisectable separation
> - Rebase to master
>
> Testing:
> $ git clone git://git.denx.de/u-boot-spi.git
> $ cd u-boot-spi
> $ git checkout -b next origin/next
>
> [1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
> [2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
Tested whole series on Microzed board.
Tested-by: Jagan Teki <jteki@openedev.com>
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
2015-12-10 15:16 ` Jagan Teki
@ 2015-12-11 6:21 ` Bin Meng
2015-12-11 6:31 ` Jagan Teki
0 siblings, 1 reply; 48+ messages in thread
From: Bin Meng @ 2015-12-11 6:21 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On Thu, Dec 10, 2015 at 11:16 PM, Jagan Teki <jteki@openedev.com> wrote:
> On 10 December 2015 at 07:00, Bin Meng <bmeng.cn@gmail.com> wrote:
>> On Mon, Dec 7, 2015 at 2:34 AM, 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.
>>>
>>> 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)
>>
>> nits: please align above line to the left (
>
> What is the reason, will it be an alignment issue.
checkpatch.pl will report such warnings.
[snip]
Regards,
Bin
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-10 15:13 ` Jagan Teki
@ 2015-12-11 6:23 ` Bin Meng
2015-12-11 6:28 ` Jagan Teki
0 siblings, 1 reply; 48+ messages in thread
From: Bin Meng @ 2015-12-11 6:23 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On Thu, Dec 10, 2015 at 11:13 PM, Jagan Teki <jteki@openedev.com> wrote:
> On 10 December 2015 at 07:01, Bin Meng <bmeng.cn@gmail.com> wrote:
>> On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
>>> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>>>> Since all spi-flash core operations are moved into
>>>> sf_ops.c then it's better to renamed as spi-flash.c
>>>>
>>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>>> ---
>>>> drivers/mtd/spi/Makefile | 2 +-
>>>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>>>
>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>
>>> (but I suggest spi_flash.c is better as it fits with the other files)
>>
>> Agreed. spi_flash.c makes more sense. So far it looks that only driver
>> model uclass driver is using - in the file name, others are using _.
>
> Clear, but this file will handle common spi-flash core functionalities
> it shouldn't be dm even now or later and more over underlying sf_probe
> which is calling this through spi_flash_scan has a driver model on it.
Sorry, I don't quite understand what you mean. But my comment is to
rename sf_ops.c to sf_flash.c, not sf-flash.c.
>
>>
>> Other than this,
>>
>> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>
> thanks!
> --
Regards,
Bin
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-11 6:23 ` Bin Meng
@ 2015-12-11 6:28 ` Jagan Teki
2015-12-11 6:51 ` Bin Meng
0 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-11 6:28 UTC (permalink / raw)
To: u-boot
On Friday 11 December 2015 11:53 AM, Bin Meng wrote:
> Hi Jagan,
>
> On Thu, Dec 10, 2015 at 11:13 PM, Jagan Teki <jteki@openedev.com> wrote:
>> On 10 December 2015 at 07:01, Bin Meng <bmeng.cn@gmail.com> wrote:
>>> On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
>>>> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>>>>> Since all spi-flash core operations are moved into
>>>>> sf_ops.c then it's better to renamed as spi-flash.c
>>>>>
>>>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>>>> ---
>>>>> drivers/mtd/spi/Makefile | 2 +-
>>>>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>>>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>>>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>>>>
>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>
>>>> (but I suggest spi_flash.c is better as it fits with the other files)
>>>
>>> Agreed. spi_flash.c makes more sense. So far it looks that only driver
>>> model uclass driver is using - in the file name, others are using _.
>>
>> Clear, but this file will handle common spi-flash core functionalities
>> it shouldn't be dm even now or later and more over underlying sf_probe
>> which is calling this through spi_flash_scan has a driver model on it.
>
> Sorry, I don't quite understand what you mean. But my comment is to
> rename sf_ops.c to sf_flash.c, not sf-flash.c.
spi-flash.c (the function spi_flash_scan from sf_probe, so this never be
a dm driver and it handles all core functionalities
======================================================================
sf_probe.c (this has dm support)
=================================
Since you're saying dm has - and ie the reason I'm saying spi-flash.c
should technically a dm supported core.
Let me know if you're not clear though.
thanks!
--
Jagan
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
2015-12-11 6:21 ` Bin Meng
@ 2015-12-11 6:31 ` Jagan Teki
2015-12-11 6:44 ` Bin Meng
0 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-11 6:31 UTC (permalink / raw)
To: u-boot
On Friday 11 December 2015 11:51 AM, Bin Meng wrote:
> Hi Jagan,
>
> On Thu, Dec 10, 2015 at 11:16 PM, Jagan Teki <jteki@openedev.com> wrote:
>> On 10 December 2015 at 07:00, Bin Meng <bmeng.cn@gmail.com> wrote:
>>> On Mon, Dec 7, 2015 at 2:34 AM, 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.
>>>>
>>>> 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)
>>>
>>> nits: please align above line to the left (
>>
>> What is the reason, will it be an alignment issue.
>
> checkpatch.pl will report such warnings.
>
> [snip]
>
$> ./scripts/checkpatch.pl
0001-sf-spi_flash_validate_params-spi_flash_scan.patch
total: 0 errors, 0 warnings, 0 checks, 195 lines checked
NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX
MULTISTATEMENT_MACRO_USE_DO_WHILE NETWORKING_BLOCK_COMMENT_STYLE
USLEEP_RANGE
0001-sf-spi_flash_validate_params-spi_flash_scan.patch has no obvious
style problems and is ready for submission.
--
Jagan
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan
2015-12-11 6:31 ` Jagan Teki
@ 2015-12-11 6:44 ` Bin Meng
0 siblings, 0 replies; 48+ messages in thread
From: Bin Meng @ 2015-12-11 6:44 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On Fri, Dec 11, 2015 at 2:31 PM, Jagan Teki <jteki@openedev.com> wrote:
> On Friday 11 December 2015 11:51 AM, Bin Meng wrote:
>>
>> Hi Jagan,
>>
>> On Thu, Dec 10, 2015 at 11:16 PM, Jagan Teki <jteki@openedev.com> wrote:
>>>
>>> On 10 December 2015 at 07:00, Bin Meng <bmeng.cn@gmail.com> wrote:
>>>>
>>>> On Mon, Dec 7, 2015 at 2:34 AM, 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.
>>>>>
>>>>> 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)
>>>>
>>>>
>>>> nits: please align above line to the left (
>>>
>>>
>>> What is the reason, will it be an alignment issue.
>>
>>
>> checkpatch.pl will report such warnings.
>>
>> [snip]
>>
>
> $> ./scripts/checkpatch.pl
> 0001-sf-spi_flash_validate_params-spi_flash_scan.patch
> total: 0 errors, 0 warnings, 0 checks, 195 lines checked
>
> NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX
> MULTISTATEMENT_MACRO_USE_DO_WHILE NETWORKING_BLOCK_COMMENT_STYLE
> USLEEP_RANGE
>
> 0001-sf-spi_flash_validate_params-spi_flash_scan.patch has no obvious style
> problems and is ready for submission.
>
This is because your patch did not touch the second line.
checkpatch.pl only reports issues with modified lines.
The alignment was correct before, because the function name is
spi_flash_validate_params(). Now you have renamed it to
spi_flash_scan(), the alignment is wrong.
Regards,
Bin
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-11 6:28 ` Jagan Teki
@ 2015-12-11 6:51 ` Bin Meng
2015-12-11 7:02 ` Jagan Teki
0 siblings, 1 reply; 48+ messages in thread
From: Bin Meng @ 2015-12-11 6:51 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On Fri, Dec 11, 2015 at 2:28 PM, Jagan Teki <jteki@openedev.com> wrote:
>
>
> On Friday 11 December 2015 11:53 AM, Bin Meng wrote:
>>
>> Hi Jagan,
>>
>> On Thu, Dec 10, 2015 at 11:13 PM, Jagan Teki <jteki@openedev.com> wrote:
>>>
>>> On 10 December 2015 at 07:01, Bin Meng <bmeng.cn@gmail.com> wrote:
>>>>
>>>> On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
>>>>>
>>>>> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>>>>>>
>>>>>> Since all spi-flash core operations are moved into
>>>>>> sf_ops.c then it's better to renamed as spi-flash.c
>>>>>>
>>>>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>>>>> ---
>>>>>> drivers/mtd/spi/Makefile | 2 +-
>>>>>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>>>>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>>>>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>>>>>
>>>>>
>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>>
>>>>> (but I suggest spi_flash.c is better as it fits with the other files)
>>>>
>>>>
>>>> Agreed. spi_flash.c makes more sense. So far it looks that only driver
>>>> model uclass driver is using - in the file name, others are using _.
>>>
>>>
>>> Clear, but this file will handle common spi-flash core functionalities
>>> it shouldn't be dm even now or later and more over underlying sf_probe
>>> which is calling this through spi_flash_scan has a driver model on it.
>>
>>
>> Sorry, I don't quite understand what you mean. But my comment is to
>> rename sf_ops.c to sf_flash.c, not sf-flash.c.
>
>
>
> spi-flash.c (the function spi_flash_scan from sf_probe, so this never be a
> dm driver and it handles all core functionalities
> ======================================================================
> sf_probe.c (this has dm support)
> =================================
>
> Since you're saying dm has - and ie the reason I'm saying spi-flash.c should
> technically a dm supported core.
>
I was saying it looks to me that only dm uclass driver is allowed to
have -, like sf-uclass.c or pci-uclass.c. Other files we should use _.
> Let me know if you're not clear though.
>
Regards,
Bin
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-11 6:51 ` Bin Meng
@ 2015-12-11 7:02 ` Jagan Teki
2015-12-11 14:34 ` Simon Glass
0 siblings, 1 reply; 48+ messages in thread
From: Jagan Teki @ 2015-12-11 7:02 UTC (permalink / raw)
To: u-boot
On Friday 11 December 2015 12:21 PM, Bin Meng wrote:
> Hi Jagan,
>
> On Fri, Dec 11, 2015 at 2:28 PM, Jagan Teki <jteki@openedev.com> wrote:
>>
>>
>> On Friday 11 December 2015 11:53 AM, Bin Meng wrote:
>>>
>>> Hi Jagan,
>>>
>>> On Thu, Dec 10, 2015 at 11:13 PM, Jagan Teki <jteki@openedev.com> wrote:
>>>>
>>>> On 10 December 2015 at 07:01, Bin Meng <bmeng.cn@gmail.com> wrote:
>>>>>
>>>>> On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
>>>>>>
>>>>>> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>>>>>>>
>>>>>>> Since all spi-flash core operations are moved into
>>>>>>> sf_ops.c then it's better to renamed as spi-flash.c
>>>>>>>
>>>>>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>>>>>> ---
>>>>>>> drivers/mtd/spi/Makefile | 2 +-
>>>>>>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>>>>>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>>>>>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>>>>>>
>>>>>>
>>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>>>
>>>>>> (but I suggest spi_flash.c is better as it fits with the other files)
>>>>>
>>>>>
>>>>> Agreed. spi_flash.c makes more sense. So far it looks that only driver
>>>>> model uclass driver is using - in the file name, others are using _.
>>>>
>>>>
>>>> Clear, but this file will handle common spi-flash core functionalities
>>>> it shouldn't be dm even now or later and more over underlying sf_probe
>>>> which is calling this through spi_flash_scan has a driver model on it.
>>>
>>>
>>> Sorry, I don't quite understand what you mean. But my comment is to
>>> rename sf_ops.c to sf_flash.c, not sf-flash.c.
>>
>>
>>
>> spi-flash.c (the function spi_flash_scan from sf_probe, so this never be a
>> dm driver and it handles all core functionalities
>> ======================================================================
>> sf_probe.c (this has dm support)
>> =================================
>>
>> Since you're saying dm has - and ie the reason I'm saying spi-flash.c should
>> technically a dm supported core.
>>
>
> I was saying it looks to me that only dm uclass driver is allowed to
> have -, like sf-uclass.c or pci-uclass.c. Other files we should use _.
sf_probe.c is a dm driver - agree?
If ie the case probably this is the first file has a code moved from dm
driver into different file which is spi-flash in this case.
thanks!
--
Jagan
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 14/14] sf: Rename sf_ops.c to spi-flash.c
2015-12-11 7:02 ` Jagan Teki
@ 2015-12-11 14:34 ` Simon Glass
0 siblings, 0 replies; 48+ messages in thread
From: Simon Glass @ 2015-12-11 14:34 UTC (permalink / raw)
To: u-boot
Hi Jagan,
On 11 December 2015 at 00:02, Jagan Teki <jteki@openedev.com> wrote:
> On Friday 11 December 2015 12:21 PM, Bin Meng wrote:
>>
>> Hi Jagan,
>>
>> On Fri, Dec 11, 2015 at 2:28 PM, Jagan Teki <jteki@openedev.com> wrote:
>>>
>>>
>>>
>>> On Friday 11 December 2015 11:53 AM, Bin Meng wrote:
>>>>
>>>>
>>>> Hi Jagan,
>>>>
>>>> On Thu, Dec 10, 2015 at 11:13 PM, Jagan Teki <jteki@openedev.com> wrote:
>>>>>
>>>>>
>>>>> On 10 December 2015 at 07:01, Bin Meng <bmeng.cn@gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>> On Wed, Dec 9, 2015 at 12:54 PM, Simon Glass <sjg@chromium.org> wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 6 December 2015 at 11:34, Jagan Teki <jteki@openedev.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> Since all spi-flash core operations are moved into
>>>>>>>> sf_ops.c then it's better to renamed as spi-flash.c
>>>>>>>>
>>>>>>>> Signed-off-by: Jagan Teki <jteki@openedev.com>
>>>>>>>> ---
>>>>>>>> drivers/mtd/spi/Makefile | 2 +-
>>>>>>>> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 7 ++++---
>>>>>>>> 2 files changed, 5 insertions(+), 4 deletions(-)
>>>>>>>> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (99%)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>>>>>>
>>>>>>> (but I suggest spi_flash.c is better as it fits with the other files)
>>>>>>
>>>>>>
>>>>>>
>>>>>> Agreed. spi_flash.c makes more sense. So far it looks that only driver
>>>>>> model uclass driver is using - in the file name, others are using _.
>>>>>
>>>>>
>>>>>
>>>>> Clear, but this file will handle common spi-flash core functionalities
>>>>> it shouldn't be dm even now or later and more over underlying sf_probe
>>>>> which is calling this through spi_flash_scan has a driver model on it.
>>>>
>>>>
>>>>
>>>> Sorry, I don't quite understand what you mean. But my comment is to
>>>> rename sf_ops.c to sf_flash.c, not sf-flash.c.
>>>
>>>
>>>
>>>
>>> spi-flash.c (the function spi_flash_scan from sf_probe, so this never be
>>> a
>>> dm driver and it handles all core functionalities
>>> ======================================================================
>>> sf_probe.c (this has dm support)
>>> =================================
>>>
>>> Since you're saying dm has - and ie the reason I'm saying spi-flash.c
>>> should
>>> technically a dm supported core.
>>>
>>
>> I was saying it looks to me that only dm uclass driver is allowed to
>> have -, like sf-uclass.c or pci-uclass.c. Other files we should use _.
>
>
> sf_probe.c is a dm driver - agree?
> If ie the case probably this is the first file has a code moved from dm
> driver into different file which is spi-flash in this case.
The current convention is that the uclass driver has a hyphen. There
is a different between the *single* uclass driver for a uclass, and
all the 'normal' drivers that use it. Also all the uclass drivers have
UCLASS_DRIVER() defined in then, and end in '-uclass.c'. Please can
you rename the file to spi_flash.c?
Regards,
Simon
^ permalink raw reply [flat|nested] 48+ messages in thread
* [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
` (16 preceding siblings ...)
2015-12-10 15:22 ` Jagan Teki
@ 2015-12-11 16:45 ` Jagan Teki
17 siblings, 0 replies; 48+ messages in thread
From: Jagan Teki @ 2015-12-11 16:45 UTC (permalink / raw)
To: u-boot
On 7 December 2015 at 00:04, Jagan Teki <jteki@openedev.com> wrote:
> This series bypasses MTD changes from previous series[1][2] and
> entire series tunned spi-flash layer for better code handling.
>
> Changes in v8:
> - Rebase to master
> - PATCH v8 12/14, 13/14, 14/14 added newly.
>
> Changes in v7:
> - Rebase to master
> - Few patch bisectable separations
>
> Changes in v6, v5, v4, v3, v2:
> - One patch bisectable separation
> - Rebase to master
>
> Testing:
> $ git clone git://git.denx.de/u-boot-spi.git
> $ cd u-boot-spi
> $ git checkout -b next origin/next
>
> [1] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/242397
> [2] http://permalink.gmane.org/gmane.comp.boot-loaders.u-boot/233262
>
> thanks!
> Jagan.
>
> Jagan Teki (14):
> sf: spi_flash_validate_params => spi_flash_scan
> sf: Move spi_flash_scan code to sf_ops
> sf: Move read_id code to sf_ops
> sf: probe: Code cleanup
> sf: Use static for file-scope functions
> sf: Fix Makefile
> sf: Use simple name for register access functions
> sf: Flash power up read-only based on idcode0
> sf: Remove unneeded header includes
> sf: Remove unneeded SST_BP and SST_WP
> sf: ops: Fix missing break on spansion read_bar
> sf: sf_probe: Remove spi_slave pointer argument
> sf: Use static for file-scope functions
> sf: Rename sf_ops.c to spi-flash.c
>
> drivers/mtd/spi/Makefile | 6 +-
> drivers/mtd/spi/sf_internal.h | 38 ++-
> drivers/mtd/spi/sf_probe.c | 373 +--------------------------
> drivers/mtd/spi/{sf_ops.c => spi-flash.c} | 406 ++++++++++++++++++++++++++++--
> 4 files changed, 408 insertions(+), 415 deletions(-)
> rename drivers/mtd/spi/{sf_ops.c => spi-flash.c} (60%)
>
> --
> 1.9.1
>
Applied to u-boot-spi/master
thanks!
--
Jagan.
^ permalink raw reply [flat|nested] 48+ messages in thread
end of thread, other threads:[~2015-12-11 16:45 UTC | newest]
Thread overview: 48+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-06 18:34 [U-Boot] [PATCH v8 00/14] sf: Tuning spi-flash layer Jagan Teki
2015-12-06 18:34 ` [U-Boot] [PATCH v8 01/14] sf: spi_flash_validate_params => spi_flash_scan Jagan Teki
2015-12-10 1:30 ` 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
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.