From: Johnny Liu <johnliu@nvidia.com>
To: Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Thierry Reding <thierry.reding@kernel.org>,
Jonathan Hunter <jonathanh@nvidia.com>,
"Prashant Gaikwad" <pgaikwad@nvidia.com>,
Stephen Boyd <sboyd@kernel.org>,
Brian Masney <bmasney+clk@redhat.com>,
Jerome Brunet <jbrunet+clk@baylibre.com>,
"Douglas Anderson" <dianders@chromium.org>,
Aniruddha Rao <anrao@nvidia.com>, <devicetree@vger.kernel.org>,
<linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-clk@vger.kernel.org>
Cc: Johnny Liu <johnliu@nvidia.com>
Subject: [PATCH v3 2/4] firmware: tegra: bpmp: Add per-SoC EMC clock ID
Date: Mon, 2 Nov 2026 12:12:00 +0000 [thread overview]
Message-ID: <20261102121202.2431928-3-johnliu@nvidia.com> (raw)
In-Reply-To: <20261102121202.2431928-1-johnliu@nvidia.com>
The EMC clock ID differs per chip (TEGRA234_CLK_EMC=31,
TEGRA264_CLK_EMC=290).
Add an emc_clk_id field to struct tegra_bpmp_soc and set it for Tegra234
and Tegra264. The specified EMC clock ID is intended to be used by the
BPMP common clock provider driver to set the CLK_GET_RATE_NOCACHE flag
on that clock. Since the EMC clock is completely managed by the
firmware, the common clock framework must not read back a stale cached
rate, but forcefully pass the request through to the firmware to get the
latest clock rate.
To describe such chip specific properties, give Tegra234 and Tegra264
dedicated SoC data selected through their specific compatibles, built on
top of a common TEGRA186_BPMP_SOC_COMMON initializer. Tegra186 and
Tegra194 keep using tegra186_soc.
Signed-off-by: Johnny Liu <johnliu@nvidia.com>
---
drivers/firmware/tegra/bpmp.c | 52 +++++++++++++++++++++++------------
include/soc/tegra/bpmp.h | 1 +
2 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c
index d3508e98e338..5d97a8600fd1 100644
--- a/drivers/firmware/tegra/bpmp.c
+++ b/drivers/firmware/tegra/bpmp.c
@@ -21,6 +21,9 @@
#include <soc/tegra/bpmp-abi.h>
#include <soc/tegra/ivc.h>
+#include <dt-bindings/clock/nvidia,tegra264.h>
+#include <dt-bindings/clock/tegra234-clock.h>
+
#include "bpmp-private.h"
#define MSG_ACK BIT(0)
@@ -1132,24 +1135,37 @@ static const struct dev_pm_ops tegra_bpmp_pm_ops = {
IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) || \
IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) || \
IS_ENABLED(CONFIG_ARCH_TEGRA_264_SOC)
+#define TEGRA186_BPMP_SOC_COMMON \
+ .channels = { \
+ .cpu_tx = { \
+ .offset = 3, \
+ .timeout = 60 * USEC_PER_SEC, \
+ }, \
+ .thread = { \
+ .offset = 0, \
+ .count = 3, \
+ .timeout = 600 * USEC_PER_SEC, \
+ }, \
+ .cpu_rx = { \
+ .offset = 13, \
+ .timeout = 0, \
+ }, \
+ }, \
+ .ops = &tegra186_bpmp_ops, \
+ .num_resets = 193
+
static const struct tegra_bpmp_soc tegra186_soc = {
- .channels = {
- .cpu_tx = {
- .offset = 3,
- .timeout = 60 * USEC_PER_SEC,
- },
- .thread = {
- .offset = 0,
- .count = 3,
- .timeout = 600 * USEC_PER_SEC,
- },
- .cpu_rx = {
- .offset = 13,
- .timeout = 0,
- },
- },
- .ops = &tegra186_bpmp_ops,
- .num_resets = 193,
+ TEGRA186_BPMP_SOC_COMMON,
+};
+
+static const struct tegra_bpmp_soc tegra234_soc = {
+ TEGRA186_BPMP_SOC_COMMON,
+ .emc_clk_id = TEGRA234_CLK_EMC,
+};
+
+static const struct tegra_bpmp_soc tegra264_soc = {
+ TEGRA186_BPMP_SOC_COMMON,
+ .emc_clk_id = TEGRA264_CLK_EMC,
};
#endif
@@ -1182,6 +1198,8 @@ static const struct of_device_id tegra_bpmp_match[] = {
IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) || \
IS_ENABLED(CONFIG_ARCH_TEGRA_264_SOC)
{ .compatible = "nvidia,tegra186-bpmp", .data = &tegra186_soc },
+ { .compatible = "nvidia,tegra234-bpmp", .data = &tegra234_soc },
+ { .compatible = "nvidia,tegra264-bpmp", .data = &tegra264_soc },
#endif
#if IS_ENABLED(CONFIG_ARCH_TEGRA_210_SOC)
{ .compatible = "nvidia,tegra210-bpmp", .data = &tegra210_soc },
diff --git a/include/soc/tegra/bpmp.h b/include/soc/tegra/bpmp.h
index f55db918ccb1..40e2db8e69cc 100644
--- a/include/soc/tegra/bpmp.h
+++ b/include/soc/tegra/bpmp.h
@@ -31,6 +31,7 @@ struct tegra_bpmp_soc {
const struct tegra_bpmp_ops *ops;
const struct tegra_bpmp_mbwt_soc *mbwt;
unsigned int num_resets;
+ unsigned int emc_clk_id;
};
struct tegra_bpmp_mb_data {
--
2.43.0
next prev parent reply other threads:[~2026-11-02 12:12 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 12:11 [PATCH v3 0/4] Add Tegra238 BPMP support and fix stale EMC clock rate Johnny Liu
2026-11-02 12:11 ` [PATCH v3 1/4] dt-bindings: firmware: tegra186-bpmp: Add Tegra238 BPMP Johnny Liu
2026-11-02 13:12 ` Johnny Liu
2026-11-02 12:12 ` Johnny Liu [this message]
2026-11-02 12:12 ` [PATCH v3 3/4] firmware: tegra: bpmp: Add Tegra238 support Johnny Liu
2026-11-02 12:12 ` [PATCH v3 4/4] clk: tegra: bpmp: Do not cache the EMC clock rate Johnny Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261102121202.2431928-3-johnliu@nvidia.com \
--to=johnliu@nvidia.com \
--cc=anrao@nvidia.com \
--cc=bmasney+clk@redhat.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=jbrunet+clk@baylibre.com \
--cc=jonathanh@nvidia.com \
--cc=krzk+dt@kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=pgaikwad@nvidia.com \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=thierry.reding@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®