The RZ/G2L SoC family requires DMA resets to be deasserted for routing
some peripheral interrupts to the CPU. Asserting these resets after boot
would silently break interrupt delivery with no driver to restore them.
Mark the DMA resets as critical by adding them to the crit_resets table
in the SoC-specific rzg2l_cpg_info for r9a07g043, r9a07g044, and
r9a08g045, preventing __rzg2l_cpg_assert() from asserting them and
ensuring they are deasserted during probe and resume.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20260324114329.268249-4-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
MOD_CLK_BASE + R9A07G043_DMAC_ACLK,
};
+static const unsigned int r9a07g043_crit_resets[] = {
+ R9A07G043_DMAC_ARESETN,
+ R9A07G043_DMAC_RST_ASYNC,
+};
+
#ifdef CONFIG_ARM64
static const unsigned int r9a07g043_no_pm_mod_clks[] = {
MOD_CLK_BASE + R9A07G043_CRU_SYSCLK,
.num_resets = R9A07G043_IAX45_RESETN + 1, /* Last reset ID + 1 */
#endif
+ /* Critical Resets */
+ .crit_resets = r9a07g043_crit_resets,
+ .num_crit_resets = ARRAY_SIZE(r9a07g043_crit_resets),
+
.has_clk_mon_regs = true,
};
MOD_CLK_BASE + R9A07G044_DMAC_ACLK,
};
+static const unsigned int r9a07g044_crit_resets[] = {
+ R9A07G044_DMAC_ARESETN,
+ R9A07G044_DMAC_RST_ASYNC,
+};
+
static const unsigned int r9a07g044_no_pm_mod_clks[] = {
MOD_CLK_BASE + R9A07G044_CRU_SYSCLK,
MOD_CLK_BASE + R9A07G044_CRU_VCLK,
.resets = r9a07g044_resets,
.num_resets = R9A07G044_TSU_PRESETN + 1, /* Last reset ID + 1 */
+ /* Critical Resets */
+ .crit_resets = r9a07g044_crit_resets,
+ .num_crit_resets = ARRAY_SIZE(r9a07g044_crit_resets),
+
.has_clk_mon_regs = true,
};
#endif
.resets = r9a07g044_resets,
.num_resets = R9A07G054_STPAI_ARESETN + 1, /* Last reset ID + 1 */
+ /* Critical Resets */
+ .crit_resets = r9a07g044_crit_resets,
+ .num_crit_resets = ARRAY_SIZE(r9a07g044_crit_resets),
+
.has_clk_mon_regs = true,
};
#endif
MOD_CLK_BASE + R9A08G045_VBAT_BCLK,
};
+static const unsigned int r9a08g045_crit_resets[] = {
+ R9A08G045_DMAC_ARESETN,
+ R9A08G045_DMAC_RST_ASYNC,
+};
+
static const unsigned int r9a08g045_no_pm_mod_clks[] = {
MOD_CLK_BASE + R9A08G045_PCI_CLKL1PM,
};
.resets = r9a08g045_resets,
.num_resets = R9A08G045_VBAT_BRESETN + 1, /* Last reset ID + 1 */
+ /* Critical Resets */
+ .crit_resets = r9a08g045_crit_resets,
+ .num_crit_resets = ARRAY_SIZE(r9a08g045_crit_resets),
+
.has_clk_mon_regs = true,
};