[PATCH v3 1/3] mtd: nand: pxa3xx: Pass valid dev to dev_err()
Stefan Roese
stefan.roese at mailbox.org
Mon Dec 22 12:37:46 CET 2025
On 12/18/25 23:59, Chris Packham wrote:
> info->controller.active is not initialised so the dev_err() call ends up
> dereferencing a null pointer causing a crash instead of outputting the
> error. Add a dev member to struct pxa3xx_nand_info and use that instead
> of info->controller.active->mtd.dev.
>
> Fixes: 661c98121d49 ("mtd: nand: pxa3xx: Fix not calling dev_xxx with a device")
> Signed-off-by: Chris Packham <judge.packham at gmail.com>
> ---
> Cc: Sean Anderson <seanga2 at gmail.com>
Reviewed-by: Stefan Roese <stefan.roese at mailbox.org>
Thanks,
Stefan
>
> Notes:
> Changes in v2:
> - Add a dev member to pxa3xx_nand_info so we can keep using dev_err()
>
> drivers/mtd/nand/raw/pxa3xx_nand.c | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/pxa3xx_nand.c b/drivers/mtd/nand/raw/pxa3xx_nand.c
> index 7bf54fa46540..a5293563a9fd 100644
> --- a/drivers/mtd/nand/raw/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/raw/pxa3xx_nand.c
> @@ -187,6 +187,7 @@ struct pxa3xx_nand_host {
> struct pxa3xx_nand_info {
> struct nand_hw_control controller;
> struct pxa3xx_nand_platform_data *pdata;
> + struct udevice *dev;
>
> struct clk *clk;
> void __iomem *mmio_base;
> @@ -588,8 +589,7 @@ static void drain_fifo(struct pxa3xx_nand_info *info, void *data, int len)
> ts = get_timer(0);
> while (!(nand_readl(info, NDSR) & NDSR_RDDREQ)) {
> if (get_timer(ts) > TIMEOUT_DRAIN_FIFO) {
> - dev_err(info->controller.active->mtd.dev,
> - "Timeout on RDDREQ while draining the FIFO\n");
> + dev_err(info->dev, "Timeout on RDDREQ while draining the FIFO\n");
> return;
> }
> }
> @@ -641,8 +641,7 @@ static void handle_data_pio(struct pxa3xx_nand_info *info)
> DIV_ROUND_UP(info->step_spare_size, 4));
> break;
> default:
> - dev_err(info->controller.active->mtd.dev,
> - "%s: invalid state %d\n", __func__, info->state);
> + dev_err(info->dev, "%s: invalid state %d\n", __func__, info->state);
> BUG();
> }
>
> @@ -1560,8 +1559,7 @@ static int pxa_ecc_init(struct pxa3xx_nand_info *info,
> ecc->size = 512;
>
> if (ecc_stepsize != 512 || !(nfc_layouts[i].strength)) {
> - dev_err(info->controller.active->mtd.dev,
> - "ECC strength %d at page size %d is not supported\n",
> + dev_err(info->dev, "ECC strength %d at page size %d is not supported\n",
> strength, page_size);
> return -ENODEV;
> }
> @@ -1802,6 +1800,7 @@ static int pxa3xx_nand_probe(struct udevice *dev)
> if (ret)
> return ret;
>
> + info->dev = dev;
> pdata = info->pdata;
>
> ret = alloc_nand_resource(dev, info);
More information about the U-Boot
mailing list