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 |
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
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 --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;
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