diff mbox series

[v4,12/12] spi: aspeed: Fix bug when SPI_NOR_4B_OPCODES flag is set

Message ID 20220524055650.1115899-13-chin-ting_kuo@aspeedtech.com
State Changes Requested
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series Add ASPEED SPI controller driver | expand

Commit Message

Chin-Ting Kuo May 24, 2022, 5:56 a.m. UTC
When SPI_NOR_4B_OPCODES flag is set for a specific flash
in spi_nor_ids[] table, EN4B command will not be issued and
4-byte dedicated commands will be used to access SPI flash.
Thus, instead of EN4B command, address length is more suitable
for deciding whether the controller should be set to 4-byte mode.

Signed-off-by: Chin-Ting Kuo <chin-ting_kuo@aspeedtech.com>
---
 drivers/spi/spi-aspeed.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

Comments

Cédric Le Goater July 1, 2022, 9:44 a.m. UTC | #1
On 5/24/22 07:56, Chin-Ting Kuo wrote:
> When SPI_NOR_4B_OPCODES flag is set for a specific flash
> in spi_nor_ids[] table, EN4B command will not be issued and
> 4-byte dedicated commands will be used to access SPI flash.
> Thus, instead of EN4B command, address length is more suitable
> for deciding whether the controller should be set to 4-byte mode.
> 
> Signed-off-by: Chin-Ting Kuo <chin-ting_kuo@aspeedtech.com>
> ---
>   drivers/spi/spi-aspeed.c | 7 +++----
>   1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/spi/spi-aspeed.c b/drivers/spi/spi-aspeed.c
> index e5e348eb7b..687ddc370b 100644
> --- a/drivers/spi/spi-aspeed.c
> +++ b/drivers/spi/spi-aspeed.c
> @@ -504,10 +504,6 @@ static int aspeed_spi_exec_op_user_mode(struct spi_slave *slave,
>   	/* Restore controller setting. */
>   	writel(flash->ce_ctrl_read, ctrl_reg);
>   
> -	/* Set controller to 4-byte mode when flash is in 4-byte mode. */
> -	if (op->cmd.opcode == SPINOR_OP_EN4B)
> -		priv->info->set_4byte(bus, cs);
> -
>   	return 0;
>   }


This should be part of the patch adding the driver.

Thanks,

C.


> @@ -561,6 +557,9 @@ static int aspeed_spi_dirmap_create(struct spi_mem_dirmap_desc *desc)
>   		       plat->ctrl_base + REG_CE0_CTRL_REG + cs * 4);
>   		priv->flashes[cs].ce_ctrl_read = reg_val;
>   
> +		if (op_tmpl.addr.nbytes == 4)
> +			priv->info->set_4byte(bus, cs);
> +
>   		dev_dbg(dev, "read bus width: %d [0x%08x]\n",
>   			op_tmpl.data.buswidth, priv->flashes[cs].ce_ctrl_read);
>   	} else {
Chin-Ting Kuo July 3, 2022, 8:56 a.m. UTC | #2
Hi Cédric,

> -----Original Message-----
> From: Cédric Le Goater <clg@kaod.org>
> Sent: Friday, July 1, 2022 5:45 PM
> Subject: Re: [v4 12/12] spi: aspeed: Fix bug when SPI_NOR_4B_OPCODES flag
> is set
> 
> On 5/24/22 07:56, Chin-Ting Kuo wrote:
> > When SPI_NOR_4B_OPCODES flag is set for a specific flash in
> > spi_nor_ids[] table, EN4B command will not be issued and 4-byte
> > dedicated commands will be used to access SPI flash.
> > Thus, instead of EN4B command, address length is more suitable for
> > deciding whether the controller should be set to 4-byte mode.
> >
> > Signed-off-by: Chin-Ting Kuo <chin-ting_kuo@aspeedtech.com>
> > ---
> >   drivers/spi/spi-aspeed.c | 7 +++----
> >   1 file changed, 3 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/spi/spi-aspeed.c b/drivers/spi/spi-aspeed.c index
> > e5e348eb7b..687ddc370b 100644
> > --- a/drivers/spi/spi-aspeed.c
> > +++ b/drivers/spi/spi-aspeed.c
> > @@ -504,10 +504,6 @@ static int aspeed_spi_exec_op_user_mode(struct
> spi_slave *slave,
> >   	/* Restore controller setting. */
> >   	writel(flash->ce_ctrl_read, ctrl_reg);
> >
> > -	/* Set controller to 4-byte mode when flash is in 4-byte mode. */
> > -	if (op->cmd.opcode == SPINOR_OP_EN4B)
> > -		priv->info->set_4byte(bus, cs);
> > -
> >   	return 0;
> >   }
> 
> 
> This should be part of the patch adding the driver.
> 

Okay.

Thanks.

Chin-Ting

> Thanks,
> 
> C.
> 
> 
> > @@ -561,6 +557,9 @@ static int aspeed_spi_dirmap_create(struct
> spi_mem_dirmap_desc *desc)
> >   		       plat->ctrl_base + REG_CE0_CTRL_REG + cs * 4);
> >   		priv->flashes[cs].ce_ctrl_read = reg_val;
> >
> > +		if (op_tmpl.addr.nbytes == 4)
> > +			priv->info->set_4byte(bus, cs);
> > +
> >   		dev_dbg(dev, "read bus width: %d [0x%08x]\n",
> >   			op_tmpl.data.buswidth, priv->flashes[cs].ce_ctrl_read);
> >   	} else {
diff mbox series

Patch

diff --git a/drivers/spi/spi-aspeed.c b/drivers/spi/spi-aspeed.c
index e5e348eb7b..687ddc370b 100644
--- a/drivers/spi/spi-aspeed.c
+++ b/drivers/spi/spi-aspeed.c
@@ -504,10 +504,6 @@  static int aspeed_spi_exec_op_user_mode(struct spi_slave *slave,
 	/* Restore controller setting. */
 	writel(flash->ce_ctrl_read, ctrl_reg);
 
-	/* Set controller to 4-byte mode when flash is in 4-byte mode. */
-	if (op->cmd.opcode == SPINOR_OP_EN4B)
-		priv->info->set_4byte(bus, cs);
-
 	return 0;
 }
 
@@ -561,6 +557,9 @@  static int aspeed_spi_dirmap_create(struct spi_mem_dirmap_desc *desc)
 		       plat->ctrl_base + REG_CE0_CTRL_REG + cs * 4);
 		priv->flashes[cs].ce_ctrl_read = reg_val;
 
+		if (op_tmpl.addr.nbytes == 4)
+			priv->info->set_4byte(bus, cs);
+
 		dev_dbg(dev, "read bus width: %d [0x%08x]\n",
 			op_tmpl.data.buswidth, priv->flashes[cs].ce_ctrl_read);
 	} else {