Hi Pavel,
On Monday, 24 January 2022, 21:41:48 CET, Pavel Machek wrote:
Hi!
commit f53d4c109a666bf1a4883b45d546fba079258717 upstream.
gpmi_io clock needs to be gated off when changing the parent/dividers of enfc_clk_root (i.MX6Q/i.MX6UL) respectively qspi2_clk_root (i.MX6SX). Otherwise this rate change can lead to an unresponsive GPMI core which results in DMA timeouts and failed driver probe:
...
@@ -2429,7 +2449,9 @@ static int gpmi_nfc_exec_op(struct nand_ */ if (this->hw.must_apply_timings) { this->hw.must_apply_timings = false;
gpmi_nfc_apply_timings(this);
ret = gpmi_nfc_apply_timings(this);
if (ret)
}return ret;
dev_dbg(this->dev, "%s: %d instructions\n", __func__, op->ninstrs);
AFAICT this leaks pm reference in the error case. Not sure what variant is right, there, so...
You're right, thanks for pointing this out. I think that the error path currently should not appear in practice, but I plan to add further patches in future where this could happen then.
Although there's a potential new error, I think that this patch should improve the situation.
Best regards, Pavel
diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c index 1b64c5a5140d..06840cff6945 100644 --- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c @@ -2284,8 +2284,10 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip, if (this->hw.must_apply_timings) { this->hw.must_apply_timings = false; ret = gpmi_nfc_apply_timings(this);
if (ret)
if (ret) {
pm_runtime_put_....(this->dev); return ret;
}}
dev_dbg(this->dev, "%s: %d instructions\n", __func__, op->ninstrs);
I'll prepare and send a new patch tomorrow.
regards Christian