[U-Boot] [PATCH] mtd: spi: check return value of spi_setup_slave

Jagan Teki jagannadh.teki at gmail.com
Wed Apr 22 13:37:15 CEST 2015


On 20 March 2015 at 10:49, Peng Fan <Peng.Fan at freescale.com> wrote:
> Need to check value of spi_setup_slave and spi_setup_slave_fdt.
> If their return value 'bus' is NULL, there is no need to pass it
> to following spi_flash_probe_tail.
>
> If 'bus' is null, the original function flow is as following:
> spi_flash_probe
>         |->spi_setup_slave
>         |->spi_probe_bus_tail
>                 |->spi_flash_probe_slave
>                 |->spi_free_slave
> Alougth check the pointer in spi_free_slave is ok, checking the return value
> of spi_setup_slave and spi_setup_slave_fdt is better.
>
> Before this fix:
> "
> => sf probe 0:2
> FSL_QSPI: Not a valid cs !
> SF: Failed to set up slave
> data abort
> pc : [<fff66dcc>]          lr : [<fff7628c>]
> reloc pc : [<87814dcc>]    lr : [<8782428c>]
> sp : fdf4fcf0  ip : e630396c     fp : fe0d0888
> r10: fffa2538  r9 : fdf4feb8     r8 : 02625a00
> r7 : 00000002  r6 : fff94ec0     r5 : 00000000  r4 : 9355553c
> r3 : 1af0593c  r2 : cb3fe030     r1 : fff94eb8  r0 : e59ff018
> Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
> Resetting CPU ...
> "
>
> After this fix:
> "
> => sf probe 0:2
> FSL_QSPI: Not a valid cs !
> Failed to initialize SPI flash at 0:2
> "
> No data abort using this patch.
>
> Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
> ---
>  drivers/mtd/spi/sf_probe.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
> index 4103723..689af3a 100644
> --- a/drivers/mtd/spi/sf_probe.c
> +++ b/drivers/mtd/spi/sf_probe.c
> @@ -433,6 +433,8 @@ struct spi_flash *spi_flash_probe(unsigned int busnum, unsigned int cs,
>         struct spi_slave *bus;
>
>         bus = spi_setup_slave(busnum, cs, max_hz, spi_mode);
> +       if (!bus)
> +               return NULL;
>         return spi_flash_probe_tail(bus);
>  }
>
> @@ -443,6 +445,8 @@ struct spi_flash *spi_flash_probe_fdt(const void *blob, int slave_node,
>         struct spi_slave *bus;
>
>         bus = spi_setup_slave_fdt(blob, slave_node, spi_node);
> +       if (!bus)
> +               return NULL;
>         return spi_flash_probe_tail(bus);
>  }
>  #endif
> --
> 1.8.4
>
>

Applied to u-boot-spi/master

thanks!
-- 
Jagan.


More information about the U-Boot mailing list