Re: [PATCH] mtd: rawnand: brcmnand: skip DMA during panic write
From: William Zhang
Date: Thu Mar 05 2026 - 21:50:28 EST
On Thu, Mar 5, 2026 at 12:23 PM Kamal Dasu <kamal.dasu@xxxxxxxxxxxx> wrote:
>
> When oops_panic_write is set, the driver disables interrupts and
> switches to PIO polling mode but still falls through into the DMA
> path. DMA cannot be used reliably in panic context, so make the
> DMA path an else branch to ensure only PIO is used during panic
> writes.
>
> Fixes: c1ac2dc34b51 ("mtd: rawnand: brcmnand: When oops in progress use pio and interrupt polling")
> Signed-off-by: Kamal Dasu <kamal.dasu@xxxxxxxxxxxx>
> ---
> drivers/mtd/nand/raw/brcmnand/brcmnand.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
> index 0427d76f45d0..5b9dadd5405e 100644
> --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
> +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
> @@ -2350,14 +2350,12 @@ static int brcmnand_write(struct mtd_info *mtd, struct nand_chip *chip,
> for (i = 0; i < ctrl->max_oob; i += 4)
> oob_reg_write(ctrl, i, 0xffffffff);
>
> - if (mtd->oops_panic_write)
> + if (mtd->oops_panic_write) {
> /* switch to interrupt polling and PIO mode */
> disable_ctrl_irqs(ctrl);
> -
> - if (use_dma(ctrl) && (has_edu(ctrl) || !oob) && flash_dma_buf_ok(buf)) {
> + } else if (use_dma(ctrl) && (has_edu(ctrl) || !oob) && flash_dma_buf_ok(buf)) {
> if (ctrl->dma_trans(host, addr, (u32 *)buf, oob, mtd->writesize,
> CMD_PROGRAM_PAGE))
> -
> ret = -EIO;
>
> goto out;
> --
> 2.34.1
>
Reviewed-by: William Zhang <william.zhang@xxxxxxxxxxxx>