The 01/07/2019 18:09, Daniel Schwierzeck wrote: > > > Am 07.01.19 um 09:20 schrieb Horatiu Vultur: > > When probing soft_spi the result of dev_get_parent_priv(dev) in probe > > function is null ptr because the spi is on the ahb bus which has > > per_child_auto_alloc_size set to 0. Therefore it would generate an Ooops > > messages when accessing spi_slave structure. > > > > The fix consist of updating the soft_spi_platdata flags inside the > > .set_mode. > > > > Signed-off-by: Horatiu Vultur <[email protected]> > > --- > > drivers/spi/soft_spi.c | 15 ++++++++------- > > 1 file changed, 8 insertions(+), 7 deletions(-) > > is this patch still required with https://patchwork.ozlabs.org/cover/1021335/ > ?
This patch is not required if you will take in https://patchwork.ozlabs.org/cover/1021335. > > > > > diff --git a/drivers/spi/soft_spi.c b/drivers/spi/soft_spi.c > > index b06883f..2c47577 100644 > > --- a/drivers/spi/soft_spi.c > > +++ b/drivers/spi/soft_spi.c > > @@ -183,9 +183,15 @@ static int soft_spi_set_speed(struct udevice *dev, > > unsigned int speed) > > static int soft_spi_set_mode(struct udevice *dev, unsigned int mode) > > { > > struct soft_spi_priv *priv = dev_get_priv(dev); > > + struct soft_spi_platdata *plat = dev->platdata; > > > > priv->mode = mode; > > > > + if (!(mode & SPI_CS_HIGH)) > > + plat->cs.flags |= GPIOD_ACTIVE_LOW; > > + if (mode & SPI_CPOL) > > + plat->sclk.flags |= GPIOD_ACTIVE_LOW; > > + > > don't you need to manually set the initial state of CS and CLK now? This was > previously done by > gpio_request_by_name(). That's why the driver needed to know the low-active > bits early. No, because it is still using gpio_request_by_name() and that one will set the initial values for CS and CLK. And now in the .set_mode() we just update the CS and CLK, which is called before probing the spi. > > > return 0; > > } > > > > @@ -210,18 +216,13 @@ static int soft_spi_ofdata_to_platdata(struct udevice > > *dev) > > > > static int soft_spi_probe(struct udevice *dev) > > { > > - struct spi_slave *slave = dev_get_parent_priv(dev); > > struct soft_spi_platdata *plat = dev->platdata; > > - int cs_flags, clk_flags; > > int ret; > > > > - cs_flags = (slave->mode & SPI_CS_HIGH) ? 0 : GPIOD_ACTIVE_LOW; > > - clk_flags = (slave->mode & SPI_CPOL) ? GPIOD_ACTIVE_LOW : 0; > > - > > if (gpio_request_by_name(dev, "cs-gpios", 0, &plat->cs, > > - GPIOD_IS_OUT | cs_flags) || > > + GPIOD_IS_OUT) || > > gpio_request_by_name(dev, "gpio-sck", 0, &plat->sclk, > > - GPIOD_IS_OUT | clk_flags)) > > + GPIOD_IS_OUT)) > > return -EINVAL; > > > > ret = gpio_request_by_name(dev, "gpio-mosi", 0, &plat->mosi, > > > > -- > - Daniel -- /Horatiu _______________________________________________ U-Boot mailing list [email protected] https://lists.denx.de/listinfo/u-boot

