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@xxxxxxxxx> > > Fixes: 6423207e57ea (spi: dw: Add memory operations support) > Signed-off-by: Lars Povlsen <lars.povlsen@xxxxxxxxxxxxx> > --- > 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