Message ID | 20220802175755.6530-5-sudip.mukherjee@sifive.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for enhanced SPI for Designware SPI controllers | expand |
On Tue, Aug 02, 2022 at 06:57:48PM +0100, Sudip Mukherjee wrote: > When we are using the enhanced spi modes we can not use EEPROM Read. > The Synopsys datasheet mentions EEPROM Read is not applicable in > enhanced SPI modes. We will need to use Receive only mode. > > Signed-off-by: Sudip Mukherjee <sudip.mukherjee@sifive.com> > --- > drivers/spi/spi-dw-core.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c > index 8c84a2e991b5..8e624620864f 100644 > --- a/drivers/spi/spi-dw-core.c > +++ b/drivers/spi/spi-dw-core.c > @@ -727,7 +727,10 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op) > cfg.dfs = 8; > cfg.freq = clamp(mem->spi->max_speed_hz, 0U, dws->max_mem_freq); > if (op->data.dir == SPI_MEM_DATA_IN) { > - cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; > + if (enhanced_spi) > + cfg.tmode = DW_SPI_CTRLR0_TMOD_RO; > + else > + cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; This is fixing the previous commit...
Hi Mark, On Tue, Aug 2, 2022 at 8:13 PM Mark Brown <broonie@kernel.org> wrote: > > On Tue, Aug 02, 2022 at 06:57:48PM +0100, Sudip Mukherjee wrote: > > When we are using the enhanced spi modes we can not use EEPROM Read. > > The Synopsys datasheet mentions EEPROM Read is not applicable in > > enhanced SPI modes. We will need to use Receive only mode. > > > > Signed-off-by: Sudip Mukherjee <sudip.mukherjee@sifive.com> > > --- > > drivers/spi/spi-dw-core.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c > > index 8c84a2e991b5..8e624620864f 100644 > > --- a/drivers/spi/spi-dw-core.c > > +++ b/drivers/spi/spi-dw-core.c > > @@ -727,7 +727,10 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op) > > cfg.dfs = 8; > > cfg.freq = clamp(mem->spi->max_speed_hz, 0U, dws->max_mem_freq); > > if (op->data.dir == SPI_MEM_DATA_IN) { > > - cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; > > + if (enhanced_spi) > > + cfg.tmode = DW_SPI_CTRLR0_TMOD_RO; > > + else > > + cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; > > This is fixing the previous commit... This was not actually meant to be a fixup patch. I intentionally made it separate so that "enhanced_spi" is introduced in the previous patch, and then modified the tmode read protocol in this patch based on enhanced_spi. But I can merge it with the previous patch like you have suggested. -- Regards Sudip
On Tue, Aug 02, 2022 at 06:57:48PM +0100, Sudip Mukherjee wrote: > When we are using the enhanced spi modes we can not use EEPROM Read. > The Synopsys datasheet mentions EEPROM Read is not applicable in > enhanced SPI modes. We will need to use Receive only mode. > > Signed-off-by: Sudip Mukherjee <sudip.mukherjee@sifive.com> > --- > drivers/spi/spi-dw-core.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c > index 8c84a2e991b5..8e624620864f 100644 > --- a/drivers/spi/spi-dw-core.c > +++ b/drivers/spi/spi-dw-core.c > @@ -727,7 +727,10 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op) > cfg.dfs = 8; > cfg.freq = clamp(mem->spi->max_speed_hz, 0U, dws->max_mem_freq); > if (op->data.dir == SPI_MEM_DATA_IN) { > - cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; > + if (enhanced_spi) > + cfg.tmode = DW_SPI_CTRLR0_TMOD_RO; > + else > + cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; Just drop this modification and initialize the dw_spi_cfg structure from scratch in the Enhanced SPI-specific method: dw_spi_exec_enh_mem_op(). -Sergey > cfg.ndf = op->data.nbytes; > } else { > cfg.tmode = DW_SPI_CTRLR0_TMOD_TO; > -- > 2.30.2 >
diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c index 8c84a2e991b5..8e624620864f 100644 --- a/drivers/spi/spi-dw-core.c +++ b/drivers/spi/spi-dw-core.c @@ -727,7 +727,10 @@ static int dw_spi_exec_mem_op(struct spi_mem *mem, const struct spi_mem_op *op) cfg.dfs = 8; cfg.freq = clamp(mem->spi->max_speed_hz, 0U, dws->max_mem_freq); if (op->data.dir == SPI_MEM_DATA_IN) { - cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; + if (enhanced_spi) + cfg.tmode = DW_SPI_CTRLR0_TMOD_RO; + else + cfg.tmode = DW_SPI_CTRLR0_TMOD_EPROMREAD; cfg.ndf = op->data.nbytes; } else { cfg.tmode = DW_SPI_CTRLR0_TMOD_TO;
When we are using the enhanced spi modes we can not use EEPROM Read. The Synopsys datasheet mentions EEPROM Read is not applicable in enhanced SPI modes. We will need to use Receive only mode. Signed-off-by: Sudip Mukherjee <sudip.mukherjee@sifive.com> --- drivers/spi/spi-dw-core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)