From nobody Thu Apr 2 12:36:47 2026 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C70CD3EFD1C for ; Tue, 24 Mar 2026 11:43:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774352624; cv=none; b=ZsFU1yvxxQojs2OtqQFpT6aOEZxZKkGJW+VbSHqX68chlhhH2ndtgYpTQai9W3eTk4Db461iYkXS2Aiy8wRcv44ggPwf3ZI98akKhvIhAfCeRbnt6VWi1vrziDAFaP4ZTjKL6ojzGtI6MeldFjWHeZV0Z+rY095RGGGl/lqz5rI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774352624; c=relaxed/simple; bh=tMIliIfFi5lR2/wRIsIo/Pu8rrmOHm9c6ZsxrsgHRV4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UWLO+fW3KfHszV9cVl3g8p84giepnvf2fRIwu9EhgNekj62qHxWLsRMsQF2Pkc/GQ78YpGC7DqvuWJtUXacj36zE+b11OVUsKiGLK7C596k8XDy5TpkUnRuQgviuzDKQCjtwy8lnHfPMryIJ3DFpUCnKKecqoENbVgd2gn3Q2L4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=rYg7ipM/; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rYg7ipM/" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-439b97a8a8cso4095412f8f.1 for ; Tue, 24 Mar 2026 04:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774352615; x=1774957415; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kbEI/M0HqfFMx8pnHBxJmnqRJ3E+kcbAEuNKlxD4MiU=; b=rYg7ipM/mWEmcCmMbOjn/HtY6ZCjgYx9L1DGhBMxK7HX0Msn8r9w2bJsuOtdRD/E84 uXgIMzb1Yq1pAHZQW30sW2ysat+I+SO5tIgA34NmweE4ZS8ZHKHbRKrnNHRN0mBVkEwI /M6r7FsHILKMeU94uS27kkYpbea5VDNJwL3jxW/GKy+LNTBtq8jin7zPRcD0WsVseP7s Y745ffbNMpxXrZ1cbxlcCt4ZwGUszkf0sd/6Y1f3hVf8aPcBTFr5avTq2tkangjmyQe2 fxyBAezUp9RTupWUQSSCdFtCOdMDOFvBonA6Yz2/ltlWxr3HhaDVaVF4mozCSqIZPyPG mDQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774352615; x=1774957415; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=kbEI/M0HqfFMx8pnHBxJmnqRJ3E+kcbAEuNKlxD4MiU=; b=hgUpczRppUMproCWr6DsUHPl1CRuOADB1Q782+tpzNr+BhTv3SJ20NwrtLSISdBW+F Vd+Hlym76P3IOB5+wReqhWD8jKyoHfDDeHD3JKNB9IB+XS2RevbopETnhdpFsgJhZEfG ADFH+akXYMv3SGwQl6qeT4rAXz9CBrBJhUw8ls2OdS8Wxhri2d4AxvXkJFP5DqsDK+ZA 4pGJZqLYvkZGU4tkjJX2ePmFNV4mQ3rRTjrjCGfaz89aOM+/3m3iV58kMYXFgv55iKDT YMrhIiFGsRvBzeu6j6ia1EW3D+gm+1iAQCh2pQiiHkS5KPUZrEKmOeVN37mtc/YzmV8I lwhg== X-Forwarded-Encrypted: i=1; AJvYcCVh5D2sZxPoRGczw43eJC8pobIzgV+9pjN8h4R59W8kBSXg/Bb/snUg6fRXi2CoDlBob37b9n/2Lq50NRk=@vger.kernel.org X-Gm-Message-State: AOJu0YysSmqn8PZr+4sfn4pf9JhWJ0Gm7/QEDJMthvTi52LZ8z0UuIum G6Kfn+A0MNHfFlN7/OcAWEpFZk/Z8xkvCAsE9EZEjN3rCglc82JnMTCs X-Gm-Gg: ATEYQzzVPaRPGVy4Y4crB6N1qHCfLd/RhBq8Z7T73vTuZ9t2RS6sNnF0yC3zvS1CR9l /2o+33AV8nb+J4p8L++d2nJkt1xya8HrkoeFdDsWtVWnpkqiauKRqk1yh2QW2t/OnAshZ6h79rn iU9AwUQgOhz7lJC4bzmjybhY6jtV0/Ch7rBuSlvZyX+Pt9Gzty+fNWB7/u0eeQCgeX4ZEfCXQOA b4k1tEogTj8emZ7X0+xkPN16lVIKSTCdOE7G5XsRb3rFqKTLNTtZEHq6F6dIbYx/tIm8reBFmq3 A+k5F4PKlMC7ZxkMqmh6FCiORMpWjYMSU6L0yBBNDiCRdG0bEHIlfKmpsPBjAGZFHRxk7yH8B// arwA59mrBm64F+UGq9y3CrKNeUrWPE1Wy1/Ly2B+E2yACxCXI/DMmpVRqMY7q99T5DB29IXMWo5 50OftSO9TfFm5WwT6S+S6L0HLN8J9jmhSOS6SNclzihOsAOHoJ X-Received: by 2002:a05:600c:1e09:b0:485:4526:ee06 with SMTP id 5b1f17b1804b1-486fedfb677mr229085025e9.11.1774352614349; Tue, 24 Mar 2026 04:43:34 -0700 (PDT) Received: from localhost.localdomain ([2a00:23c4:a758:8a01:a4a6:e61e:cd81:c756]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4870f7f5682sm25416465e9.3.2026.03.24.04.43.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 24 Mar 2026 04:43:34 -0700 (PDT) From: Biju X-Google-Original-From: Biju To: Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel Cc: Biju Das , linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Prabhakar Mahadev Lad , Biju Das Subject: [PATCH v8 02/11] clk: renesas: rzg2l-cpg: Add support for critical resets Date: Tue, 24 Mar 2026 11:43:07 +0000 Message-ID: <20260324114329.268249-3-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260324114329.268249-1-biju.das.jz@bp.renesas.com> References: <20260324114329.268249-1-biju.das.jz@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Biju Das Some reset lines must remain deasserted at all times after boot, as asserting them would disable critical system functionality with no owning driver to restore them. This mirrors the existing crit_mod_clks mechanism which protects critical module clocks from being disabled. On RZ/G2L family SoCs, the DMA reset must be remain deasserted for routing some peripheral interrupts to CPU. Add crit_resets and num_crit_resets fields to struct rzg2l_cpg_info to allow SoC-specific data tables to declare reset IDs that must never be asserted. Introduce rzg2l_cpg_deassert_crit_resets() to iterate over all critical resets and deassert them. Call it both at probe time and during resume to ensure critical peripherals are held out of reset after power-on and suspend/resume cycles. Reviewed-by: Geert Uytterhoeven Signed-off-by: Biju Das --- v7->v8: * No change v6->v7: * No change v5->v6: * Moved loop variable declaration inside for loops in __rzg2l_cpg_assert() and rzg2l_cpg_deassert_crit_resets() * Collected tag v4->v5: * No change v4: * Moved this patch from [1] as it is boot-dependent [1] https://lore.kernel.org/all/20260306134228.871815-1-biju.das.jz@bp.ren= esas.com/ --- drivers/clk/renesas/rzg2l-cpg.c | 30 ++++++++++++++++++++++++++++++ drivers/clk/renesas/rzg2l-cpg.h | 7 +++++++ 2 files changed, 37 insertions(+) diff --git a/drivers/clk/renesas/rzg2l-cpg.c b/drivers/clk/renesas/rzg2l-cp= g.c index c0584bab58a3..f9e4af7f49d0 100644 --- a/drivers/clk/renesas/rzg2l-cpg.c +++ b/drivers/clk/renesas/rzg2l-cpg.c @@ -1765,6 +1765,13 @@ static int __rzg2l_cpg_assert(struct reset_controlle= r_dev *rcdev, dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n", assert ? "assert" : "deassert", id, CLK_RST_R(reg)); =20 + if (assert) { + for (unsigned int i =3D 0; i < priv->info->num_crit_resets; i++) { + if (id =3D=3D priv->info->crit_resets[i]) + return 0; + } + } + if (!assert) value |=3D mask; writel(value, priv->base + CLK_RST_R(reg)); @@ -1802,6 +1809,20 @@ static int rzg2l_cpg_deassert(struct reset_controlle= r_dev *rcdev, return __rzg2l_cpg_assert(rcdev, id, false); } =20 +static int rzg2l_cpg_deassert_crit_resets(struct reset_controller_dev *rcd= ev, + const struct rzg2l_cpg_info *info) +{ + int ret; + + for (unsigned int i =3D 0; i < info->num_crit_resets; i++) { + ret =3D rzg2l_cpg_deassert(rcdev, info->crit_resets[i]); + if (ret) + return ret; + } + + return 0; +} + static int rzg2l_cpg_reset(struct reset_controller_dev *rcdev, unsigned long id) { @@ -2051,6 +2072,10 @@ static int __init rzg2l_cpg_probe(struct platform_de= vice *pdev) if (error) return error; =20 + error =3D rzg2l_cpg_deassert_crit_resets(&priv->rcdev, info); + if (error) + return error; + debugfs_create_file("mstop", 0444, NULL, priv, &rzg2l_mod_clock_mstop_fop= s); return 0; } @@ -2058,6 +2083,11 @@ static int __init rzg2l_cpg_probe(struct platform_de= vice *pdev) static int rzg2l_cpg_resume(struct device *dev) { struct rzg2l_cpg_priv *priv =3D dev_get_drvdata(dev); + int ret; + + ret =3D rzg2l_cpg_deassert_crit_resets(&priv->rcdev, priv->info); + if (ret) + return ret; =20 rzg2l_mod_clock_init_mstop(priv); =20 diff --git a/drivers/clk/renesas/rzg2l-cpg.h b/drivers/clk/renesas/rzg2l-cp= g.h index 55e815be16c8..af0a003d93f7 100644 --- a/drivers/clk/renesas/rzg2l-cpg.h +++ b/drivers/clk/renesas/rzg2l-cpg.h @@ -276,6 +276,9 @@ struct rzg2l_reset { * @crit_mod_clks: Array with Module Clock IDs of critical clocks that * should not be disabled without a knowledgeable driver * @num_crit_mod_clks: Number of entries in crit_mod_clks[] + * @crit_resets: Array with Reset IDs of critical resets that should not be + * asserted without a knowledgeable driver + * @num_crit_resets: Number of entries in crit_resets[] * @has_clk_mon_regs: Flag indicating whether the SoC has CLK_MON registers */ struct rzg2l_cpg_info { @@ -302,6 +305,10 @@ struct rzg2l_cpg_info { const unsigned int *crit_mod_clks; unsigned int num_crit_mod_clks; =20 + /* Critical Resets that should not be asserted */ + const unsigned int *crit_resets; + unsigned int num_crit_resets; + bool has_clk_mon_regs; }; =20 --=20 2.43.0