[PATCH linux dev-4.7 8/8] mtd: spi-nor: aspeed: use command mode for reads
Joel Stanley
joel at jms.id.au
Mon Nov 7 13:32:27 AEDT 2016
On Sat, Nov 5, 2016 at 3:30 AM, Cédric Le Goater <clg at kaod.org> wrote:
> When accessing flash contents, let use the "command mode" for read.
>
> Signed-off-by: Cédric Le Goater <clg at kaod.org>
> ---
> drivers/mtd/spi-nor/aspeed-smc.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/mtd/spi-nor/aspeed-smc.c b/drivers/mtd/spi-nor/aspeed-smc.c
> index 88cbfe7c4340..89085d84b4b5 100644
> --- a/drivers/mtd/spi-nor/aspeed-smc.c
> +++ b/drivers/mtd/spi-nor/aspeed-smc.c
> @@ -522,8 +522,8 @@ static void aspeed_smc_send_cmd_addr(struct spi_nor *nor, u8 cmd, u32 addr)
> }
> }
>
> -static int aspeed_smc_read_user(struct spi_nor *nor, loff_t from, size_t len,
> - size_t *retlen, u_char *read_buf)
> +static int aspeed_smc_read(struct spi_nor *nor, loff_t from, size_t len,
> + size_t *retlen, u_char *read_buf)
> {
> struct aspeed_smc_chip *chip = nor->priv;
> int ret;
> @@ -542,10 +542,10 @@ static int aspeed_smc_read_user(struct spi_nor *nor, loff_t from, size_t len,
> dev_err(chip->nor.dev, "DMA read failed: %d", ret);
> }
>
> - aspeed_smc_start_user(nor);
> - aspeed_smc_send_cmd_addr(nor, nor->read_opcode, from);
> - aspeed_smc_from_ahb(read_buf, chip->base, len);
> - aspeed_smc_stop_user(nor);
> + /*
> + * we are in read or fread mode by default
> + */
> + aspeed_smc_from_ahb(read_buf, chip->base + from, len);
Even though I just acked the previous patch, when reading this it's
not clear that we're doing a read. Perhaps
smc_{read_from,write_to}_ahb?
Cheers,
Joel
>
> out:
> mutex_unlock(&chip->controller->mutex);
> @@ -861,6 +861,7 @@ static int aspeed_smc_chip_setup_finish(struct aspeed_smc_chip *chip)
> }
>
> chip->ctl_val[smc_read] |= cmd |
> + spi_control_fill_opcode(chip->nor.read_opcode) |
> CONTROL_SPI_IO_DUMMY_CYCLES_SET(chip->nor.read_dummy / 8);
>
> dev_dbg(controller->dev, "base control register: %08x\n",
> @@ -956,7 +957,7 @@ static int aspeed_smc_probe(struct platform_device *pdev)
> chip->nor.priv = chip;
> spi_nor_set_flash_node(&chip->nor, child);
> chip->nor.mtd.name = of_get_property(child, "label", NULL);
> - chip->nor.read = aspeed_smc_read_user;
> + chip->nor.read = aspeed_smc_read;
> chip->nor.write = aspeed_smc_write_user;
> chip->nor.read_reg = aspeed_smc_read_reg;
> chip->nor.write_reg = aspeed_smc_write_reg;
> --
> 2.7.4
>
More information about the openbmc
mailing list