diff mbox series

spi: dw: Fix spi registration for controllers overriding CS

Message ID 20201120213414.339701-1-lars.povlsen@microchip.com
State Accepted
Commit 0abdb0fba07322ce960d32a92a64847b3009b2e2
Headers show
Series spi: dw: Fix spi registration for controllers overriding CS | expand

Commit Message

Lars Povlsen Nov. 20, 2020, 9:34 p.m. UTC
When SPI DW memory ops support was introduced, there was a check for
excluding controllers which supplied their own CS function. Even so,
the mem_ops pointer is *always* presented to the SPI core.

This causes the SPI core sanity check in spi_controller_check_ops() to
refuse registration, since a mem_ops pointer is being supplied without
an exec_op member function.

The end result is failure of the SPI DW driver on sparx5 and similar
platforms.

The fix in the core SPI DW driver is to avoid presenting the mem_ops
pointer if the exec_op function is not set.

Fixes: 6423207e57ea (spi: dw: Add memory operations support)
Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>
---
 drivers/spi/spi-dw-core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--
2.25.1

Comments

Serge Semin Nov. 25, 2020, 12:39 p.m. UTC | #1
Hello Lars

On Fri, Nov 20, 2020 at 10:34:14PM +0100, Lars Povlsen wrote:
> When SPI DW memory ops support was introduced, there was a check for

> excluding controllers which supplied their own CS function. Even so,

> the mem_ops pointer is *always* presented to the SPI core.

> 

> This causes the SPI core sanity check in spi_controller_check_ops() to

> refuse registration, since a mem_ops pointer is being supplied without

> an exec_op member function.

> 

> The end result is failure of the SPI DW driver on sparx5 and similar

> platforms.

> 

> The fix in the core SPI DW driver is to avoid presenting the mem_ops

> pointer if the exec_op function is not set.


Thanks for sending the patch fixing the regression.
Acked-by: Serge Semin <fancer.lancer@gmail.com>


> 

> Fixes: 6423207e57ea (spi: dw: Add memory operations support)

> Signed-off-by: Lars Povlsen <lars.povlsen@microchip.com>

> ---

>  drivers/spi/spi-dw-core.c | 3 ++-

>  1 file changed, 2 insertions(+), 1 deletion(-)

> 

> diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c

> index 2e50cc0a9291..a0794eac2094 100644

> --- a/drivers/spi/spi-dw-core.c

> +++ b/drivers/spi/spi-dw-core.c

> @@ -875,7 +875,8 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)

>  		master->set_cs = dw_spi_set_cs;

>  	master->transfer_one = dw_spi_transfer_one;

>  	master->handle_err = dw_spi_handle_err;

> -	master->mem_ops = &dws->mem_ops;

> +	if (dws->mem_ops.exec_op)

> +		master->mem_ops = &dws->mem_ops;

>  	master->max_speed_hz = dws->max_freq;

>  	master->dev.of_node = dev->of_node;

>  	master->dev.fwnode = dev->fwnode;

> --

> 2.25.1
Mark Brown Nov. 25, 2020, 1:58 p.m. UTC | #2
On Fri, 20 Nov 2020 22:34:14 +0100, Lars Povlsen wrote:
> When SPI DW memory ops support was introduced, there was a check for

> excluding controllers which supplied their own CS function. Even so,

> the mem_ops pointer is *always* presented to the SPI core.

> 

> This causes the SPI core sanity check in spi_controller_check_ops() to

> refuse registration, since a mem_ops pointer is being supplied without

> an exec_op member function.

> 

> [...]


Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: dw: Fix spi registration for controllers overriding CS
      commit: 0abdb0fba07322ce960d32a92a64847b3009b2e2

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
diff mbox series

Patch

diff --git a/drivers/spi/spi-dw-core.c b/drivers/spi/spi-dw-core.c
index 2e50cc0a9291..a0794eac2094 100644
--- a/drivers/spi/spi-dw-core.c
+++ b/drivers/spi/spi-dw-core.c
@@ -875,7 +875,8 @@  int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
 		master->set_cs = dw_spi_set_cs;
 	master->transfer_one = dw_spi_transfer_one;
 	master->handle_err = dw_spi_handle_err;
-	master->mem_ops = &dws->mem_ops;
+	if (dws->mem_ops.exec_op)
+		master->mem_ops = &dws->mem_ops;
 	master->max_speed_hz = dws->max_freq;
 	master->dev.of_node = dev->of_node;
 	master->dev.fwnode = dev->fwnode;