[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