Re: [PATCH v2 2/4] firmware: tegra: bpmp: Add Tegra238 support
From: Johnny Liu
Date: Mon Nov 02 2026 - 06:40:11 EST
On 2026/11/02 08:48, Mikko Perttunen wrote:
> On Thursday, October 29, 2026 12:49 AM Johnny Liu wrote:
> > The "nvidia,tegra186-bpmp" compatible and tegra186_soc data are shared by
> > Tegra186, Tegra194, Tegra234 and Tegra264. Tegra238 has its own BPMP
> > compatible, so give Tegra234, Tegra238 and Tegra264 dedicated SoC data
> > selected through their specific compatibles, built on top of a common
> > TEGRA186_BPMP_SOC_COMMON initializer. This allows chip specific
> > properties to be described in the SoC data. Tegra186 and Tegra194 keep
> > using tegra186_soc.
> >
> > Also build bpmp-tegra186.o and the shared match table for
> > CONFIG_ARCH_TEGRA_238_SOC, so that a Tegra238-only configuration binds
> > the driver.
> >
> > Signed-off-by: Johnny Liu <johnliu@xxxxxxxxxx>
> > ---
> > drivers/firmware/tegra/Makefile | 1 +
> > drivers/firmware/tegra/bpmp.c | 54 ++++++++++++++++++++++-----------
> > 2 files changed, 38 insertions(+), 17 deletions(-)
>
> This refactoring in this patch makes no sense unless you first read the
> next patch, plus it has the unrelated factor of adding Tegra238 support,
> which makes it quite confusing.
Yes, I agree with you. This patch makes sense only after reading the next
patch in the patch series.
> Can you move the TEGRA186_BPMP_SOC_COMMON refactoring into the 'per-SoC
> EMC clock ID' patch, and have the Tegra238 addition as a separate patch
> before or after it?
Ack, I will move this refactor in the 'per-SoC EMC clock ID' patch.
[...]
Best Regards,
Johnny Liu
> > diff --git a/drivers/firmware/tegra/Makefile b/drivers/firmware/tegra/Makefile
> > index 97f7a5db9d0a..21e87f3afffe 100644
> > --- a/drivers/firmware/tegra/Makefile
> > +++ b/drivers/firmware/tegra/Makefile
> > @@ -4,6 +4,7 @@ tegra-bpmp-$(CONFIG_ARCH_TEGRA_210_SOC) += bpmp-tegra210.o
> > tegra-bpmp-$(CONFIG_ARCH_TEGRA_186_SOC) += bpmp-tegra186.o
> > tegra-bpmp-$(CONFIG_ARCH_TEGRA_194_SOC) += bpmp-tegra186.o
> > tegra-bpmp-$(CONFIG_ARCH_TEGRA_234_SOC) += bpmp-tegra186.o
> > +tegra-bpmp-$(CONFIG_ARCH_TEGRA_238_SOC) += bpmp-tegra186.o
> > tegra-bpmp-$(CONFIG_ARCH_TEGRA_264_SOC) += bpmp-tegra186.o
> > tegra-bpmp-$(CONFIG_DEBUG_FS) += bpmp-debugfs.o
> > tegra-bpmp-$(CONFIG_SYSFS) += bpmp-sysfs.o
> > diff --git a/drivers/firmware/tegra/bpmp.c b/drivers/firmware/tegra/bpmp.c
> > index d3508e98e338..beeb385870f5 100644
> > --- a/drivers/firmware/tegra/bpmp.c
> > +++ b/drivers/firmware/tegra/bpmp.c
> > @@ -1131,25 +1131,41 @@ static const struct dev_pm_ops tegra_bpmp_pm_ops = {
> > #if IS_ENABLED(CONFIG_ARCH_TEGRA_186_SOC) || \
> > IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) || \
> > IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) || \
> > + IS_ENABLED(CONFIG_ARCH_TEGRA_238_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,
> > +};
> > +
> > +static const struct tegra_bpmp_soc tegra238_soc = {
> > + TEGRA186_BPMP_SOC_COMMON,
> > +};
> > +
> > +static const struct tegra_bpmp_soc tegra264_soc = {
> > + TEGRA186_BPMP_SOC_COMMON,
> > };
> > #endif
> >
> > @@ -1180,8 +1196,12 @@ static const struct of_device_id tegra_bpmp_match[] = {
> > #if IS_ENABLED(CONFIG_ARCH_TEGRA_186_SOC) || \
> > IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC) || \
> > IS_ENABLED(CONFIG_ARCH_TEGRA_234_SOC) || \
> > + IS_ENABLED(CONFIG_ARCH_TEGRA_238_SOC) || \
> > IS_ENABLED(CONFIG_ARCH_TEGRA_264_SOC)
> > { .compatible = "nvidia,tegra186-bpmp", .data = &tegra186_soc },
> > + { .compatible = "nvidia,tegra234-bpmp", .data = &tegra234_soc },
> > + { .compatible = "nvidia,tegra238-bpmp", .data = &tegra238_soc },
> > + { .compatible = "nvidia,tegra264-bpmp", .data = &tegra264_soc },
> > #endif
> > #if IS_ENABLED(CONFIG_ARCH_TEGRA_210_SOC)
> > { .compatible = "nvidia,tegra210-bpmp", .data = &tegra210_soc },
> > --
> > 2.43.0
> >
> >
>
>
>
>