From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (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 B75D63A1A58 for ; Fri, 10 Jul 2026 10:19:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783678795; cv=none; b=WnzSIBrtoRomvSdaYlqh/TE3ylsgS/YWB8mHmRQXf6vNeM2Pw8mxOWgK6eBZlNfBIyU4Krxt9akOhXbP8Xg0OKSX2489njxCVEkcdQnDXHvlooVR3sFu+p0AfeB3rZjbClhHFYsa6GYU2uKPFOdsGD9g43KbawCx17x8HDOBLdM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783678795; c=relaxed/simple; bh=q9Hy2TgH3madf8IC3T2QwU/u5k6WUON3nq/qIY91qDQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=cpdQR7+KIJudR6IiwWHhLPJcPKRvBsuc9pdpLqzgfi2/4RDGf281UDULSGiCGpwl0pCfzGi0+phyDDmTV+H605WVMdQSGP/3N1vOryr+us3BcXIyVy1SxzCepwLoEFJZQ3B15PeodNnEO78wLrYtB64rO3TjzNTLscGk0vk+Jbw= 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=gACUj3at; arc=none smtp.client-ip=209.85.218.44 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="gACUj3at" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-c15e3141d02so93388666b.2 for ; Fri, 10 Jul 2026 03:19:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783678792; x=1784283592; darn=vger.kernel.org; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=qAkOkuickC1FfxJI2jEJ+KCNfYVzR0zR1QQfc0v2ndw=; b=gACUj3at1FZBP0rFZjwUCxqCMSKZ7deHmvMpoyqsyI8qH8QtNMACUrEVFoNPcaMa+X YtCcvsdoq2QeAHbK8BtiTZ6togJIBc639tnv7gMEmYHnmPkayd1owo7TVfq21qm8DtIi COcCtuBOo3hBoV+ULZXyFglwS3Ht/GvXjvAPpm9fgd2kjiMS+oXUzBqyhMunha4cZixK K6x68y5cYSx+lQP85oW2TPED2/n5UGsYUrAO/SsodoDPc5yPiVC+1nQTsXIlubuDXLkH 1lw/Mtv4lKmhVymPh5hGHCP8xEk0pYmRrweZstM9IGMKlOmDjDbmJ7Eo1XEAoP6qcZC6 Xd9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783678792; x=1784283592; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=qAkOkuickC1FfxJI2jEJ+KCNfYVzR0zR1QQfc0v2ndw=; b=fZAKJ1h6i7VMt4Vg3cB1/a8kO39gk+tF7D25OqttekkJ2CM8IJqBFpM26iHQd/zhCC AO9J4fisEJQusCIgqByBjLppH2ditVqIupU1WAVl+RBFp+NjicZTJkpuAolvMhY1pz3i shLI/GJcM8Nl8aY7kNuqg9Q9tKFCXAKLFOgVPflCVR1yfd0+uMHUM04kw5lz2lMj4kkq ocBBwyj6ldd1EBeEwo4a/u5qGKgIMOaAp9yrAn9kDThRNoW3o8C0YXkWaGld44c0Yxnv P20B39DuiodzHK/EUJYS23S0+Kv9MB020W06WLk0j/gHcvpXZmjQPS4BRBSB4odFTFYU b0RA== X-Forwarded-Encrypted: i=1; AHgh+RrBAwMdEaHn6P4fLgY8LzwQn1nvi7Z0sr2nr3vGS5+M2Yb9cDgpRDKcAtxxgZG+G8qQlTiOunTm5S9v3HU=@vger.kernel.org X-Gm-Message-State: AOJu0Yw39ZFzNH7i56rH7LLQzUVEiX1QS8AO2tZCK7eF52Knw8JPRn8j u04RCNybu3Wo8rD+cpsohb+udwOWNCsnLD668flPTb2OvSycuVHcJSH/ X-Gm-Gg: AfdE7cnvsKg6k+VJlyp1U3Ue1/3Kg41L31AUHCD+vZbFuFUXcHaKhtEYlGoGk9vU7Dc wUdOvaJDXjeAgyTryJItAwdSFwl4mv7iKXNFKnBJB4jhVkXC2PumveYJOFO+YB1dHbgSZEM5BJh oL7YEu8+5X10CyVnmKIq6AX/M9U1nNOG/7hVbuIasZDXV0L5z9nxle5UHo90xGaCBeJCaDzFnUr kEkMJSGz3QxaRLoz6XDKl57eTDzaOqIitilHN9mq49aeEbolgudeW1lH9YRhym8+gKQPjkJVQQX N0G8AXvmXLzN1SNgdf4Xl522FZvVOVNyYVcnBO9GKmuV3a1tktOtoULZZjwuh8vhPXGYlhKVUrI pso+HIPqRwd1iHkboTTDxz+q8dEE4rA8YuKv91Q0IZKqWMGfrOzB1LNAya5sUigly2serWp7dKK qmG25pMHkYVD/lRu0J/8w5v+5BYHoSnIwnm7WzXGZ5ox1r2heCfkuU5drpetsA6J07KITXrtxeg Is= X-Received: by 2002:a17:907:e155:b0:c12:e23d:ba18 with SMTP id a640c23a62f3a-c15ce0712a3mr271790166b.7.1783678792019; Fri, 10 Jul 2026 03:19:52 -0700 (PDT) Received: from orome (p200300e41f023e00f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f02:3e00:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-c15eb1dbdc9sm209356766b.10.2026.07.10.03.19.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jul 2026 03:19:50 -0700 (PDT) Date: Fri, 10 Jul 2026 12:19:48 +0200 From: Thierry Reding To: Aniruddha Rao Cc: thierry.reding@kernel.org, jonathanh@nvidia.com, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 5/6] firmware: tegra: bpmp: Add Tegra410 MBWT BPMP helpers Message-ID: References: <20260615083731.888055-1-anrao@nvidia.com> <20260615083731.888055-6-anrao@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="rkg4gljm4yzozdsk" Content-Disposition: inline In-Reply-To: <20260615083731.888055-6-anrao@nvidia.com> --rkg4gljm4yzozdsk Content-Type: text/plain; protected-headers=v1; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Subject: Re: [PATCH 5/6] firmware: tegra: bpmp: Add Tegra410 MBWT BPMP helpers MIME-Version: 1.0 On Mon, Jun 15, 2026 at 08:37:30AM +0000, Aniruddha Rao wrote: > Add helper functions that send MBWT requests to BPMP firmware on > Tegra410. >=20 > The helpers implement the GET_BW and SET_BW operations and provide a > QUERY_ABI-based probe for command availability. I'd rather not make this Tegra410 specific. We might need it on future chips, too. In fact, given the size, I'd be inclined to just include this unconditionally in the BPMP driver. > Signed-off-by: Aniruddha Rao > --- > drivers/firmware/tegra/Makefile | 1 + > drivers/firmware/tegra/bpmp-private.h | 31 +++++++ > drivers/firmware/tegra/bpmp-tegra410.c | 108 +++++++++++++++++++++++++ > 3 files changed, 140 insertions(+) > create mode 100644 drivers/firmware/tegra/bpmp-tegra410.c >=20 > diff --git a/drivers/firmware/tegra/Makefile b/drivers/firmware/tegra/Mak= efile > index 41e2e4dc31d6..4310cc0ff294 100644 > --- a/drivers/firmware/tegra/Makefile > +++ b/drivers/firmware/tegra/Makefile > @@ -4,6 +4,7 @@ tegra-bpmp-$(CONFIG_ARCH_TEGRA_210_SOC) +=3D bpmp-tegra21= 0.o > tegra-bpmp-$(CONFIG_ARCH_TEGRA_186_SOC) +=3D bpmp-tegra186.o > tegra-bpmp-$(CONFIG_ARCH_TEGRA_194_SOC) +=3D bpmp-tegra186.o > tegra-bpmp-$(CONFIG_ARCH_TEGRA_234_SOC) +=3D bpmp-tegra186.o > +tegra-bpmp-$(CONFIG_ARCH_TEGRA_410_SOC) +=3D bpmp-tegra410.o Just make this bpmp-mbwt.o or maybe even stick it into bpmp.c. It's barely 100 lines of proper code. > tegra-bpmp-$(CONFIG_ARCH_TEGRA_264_SOC) +=3D bpmp-tegra186.o > tegra-bpmp-$(CONFIG_DEBUG_FS) +=3D bpmp-debugfs.o > obj-$(CONFIG_TEGRA_BPMP) +=3D tegra-bpmp.o > diff --git a/drivers/firmware/tegra/bpmp-private.h b/drivers/firmware/teg= ra/bpmp-private.h > index ebde0e36ae20..c3f466ae5979 100644 > --- a/drivers/firmware/tegra/bpmp-private.h > +++ b/drivers/firmware/tegra/bpmp-private.h > @@ -35,4 +35,35 @@ struct tegra_bpmp_acpi_message { > u8 data[TEGRA_BPMP_ACPI_BMRQ_DATA_SZ]; > }; > =20 > +#if IS_ENABLED(CONFIG_ARCH_TEGRA_410_SOC) > +int tegra410_bpmp_mbwt_set(struct tegra_bpmp *bpmp, unsigned int instanc= e, > + unsigned int vc_type, unsigned int bandwidth); > +int tegra410_bpmp_mbwt_get(struct tegra_bpmp *bpmp, unsigned int instanc= e, > + unsigned int vc_type, unsigned int *bandwidth_out); > +bool tegra410_bpmp_mbwt_cmd_is_supported(struct tegra_bpmp *bpmp, > + unsigned int cmd_code); > +#else > +static inline int tegra410_bpmp_mbwt_set(struct tegra_bpmp *bpmp, > + unsigned int instance, > + unsigned int vc_type, > + unsigned int bandwidth) > +{ > + return -EOPNOTSUPP; > +} > + > +static inline int tegra410_bpmp_mbwt_get(struct tegra_bpmp *bpmp, > + unsigned int instance, > + unsigned int vc_type, > + unsigned int *bandwidth_out) > +{ > + return -EOPNOTSUPP; > +} > + > +static inline bool tegra410_bpmp_mbwt_cmd_is_supported(struct tegra_bpmp= *bpmp, > + unsigned int cmd_code) > +{ > + return false; > +} > +#endif We can then drop the 410 from the prefix and get rid of the dummy implementations. Thierry > + > #endif > diff --git a/drivers/firmware/tegra/bpmp-tegra410.c b/drivers/firmware/te= gra/bpmp-tegra410.c > new file mode 100644 > index 000000000000..87c5dfab864b > --- /dev/null > +++ b/drivers/firmware/tegra/bpmp-tegra410.c > @@ -0,0 +1,108 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (c) 2026, NVIDIA CORPORATION. > + */ > + > +#include > +#include > +#include > + > +#include > +#include > + > +#include "bpmp-private.h" > + > +bool tegra410_bpmp_mbwt_cmd_is_supported(struct tegra_bpmp *bpmp, > + unsigned int cmd_code) > +{ > + struct mrq_sochub_mbwt_request request; > + struct tegra_bpmp_message msg; > + int err; > + > + memset(&request, 0, sizeof(request)); > + request.cmd =3D CMD_SOCHUB_MBWT_QUERY_ABI; > + request.query_abi.cmd_code =3D cmd_code; > + > + memset(&msg, 0, sizeof(msg)); > + msg.mrq =3D MRQ_SOCHUB_MBWT; > + msg.tx.data =3D &request; > + msg.tx.size =3D sizeof(request); > + > + err =3D tegra_bpmp_transfer(bpmp, &msg); > + if (err || msg.rx.ret) > + return false; > + > + return true; > +} > + > +int tegra410_bpmp_mbwt_set(struct tegra_bpmp *bpmp, > + unsigned int instance, > + unsigned int vc_type, > + unsigned int bandwidth) > +{ > + struct mrq_sochub_mbwt_request request; > + struct tegra_bpmp_message msg; > + int err; > + > + memset(&request, 0, sizeof(request)); > + request.cmd =3D CMD_SOCHUB_MBWT_SET_BW; > + request.set_bw.instance =3D instance; > + request.set_bw.vc_type =3D vc_type; > + request.set_bw.bw =3D bandwidth; > + > + memset(&msg, 0, sizeof(msg)); > + msg.mrq =3D MRQ_SOCHUB_MBWT; > + msg.tx.data =3D &request; > + msg.tx.size =3D sizeof(request); > + > + err =3D tegra_bpmp_transfer(bpmp, &msg); > + > + if (err) { > + dev_err(bpmp->dev, "MBWT set bandwidth transfer failed: %d\n", err); > + return err; > + } > + if (msg.rx.ret < 0) > + return msg.rx.ret; > + > + return 0; > +} > + > +int tegra410_bpmp_mbwt_get(struct tegra_bpmp *bpmp, > + unsigned int instance, > + unsigned int vc_type, > + unsigned int *bandwidth_out) > +{ > + struct mrq_sochub_mbwt_request request; > + struct mrq_sochub_mbwt_response response; > + struct tegra_bpmp_message msg; > + int err; > + > + if (!bandwidth_out) > + return -EINVAL; > + > + memset(&request, 0, sizeof(request)); > + request.cmd =3D CMD_SOCHUB_MBWT_GET_BW; > + request.get_bw.instance =3D instance; > + request.get_bw.vc_type =3D vc_type; > + > + memset(&response, 0, sizeof(response)); > + > + memset(&msg, 0, sizeof(msg)); > + msg.mrq =3D MRQ_SOCHUB_MBWT; > + msg.tx.data =3D &request; > + msg.tx.size =3D sizeof(request); > + msg.rx.data =3D &response; > + msg.rx.size =3D sizeof(response); > + > + err =3D tegra_bpmp_transfer(bpmp, &msg); > + if (err) { > + dev_err(bpmp->dev, "MBWT get bandwidth transfer failed: %d\n", err); > + return err; > + } > + if (msg.rx.ret < 0) > + return msg.rx.ret; > + > + *bandwidth_out =3D response.get_bw.bw; > + > + return 0; > +} > --=20 > 2.43.0 >=20 --rkg4gljm4yzozdsk Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEiOrDCAFJzPfAjcif3SOs138+s6EFAmpQx0QACgkQ3SOs138+ s6EgYg//YjjYlIYnW//gJAzkDSqfZOgdU5gMlmSCQ8VbWhtX9PjB28FYfBJKOvkQ +b1twd9BIaAYqSBdWIoVIb/4T9Rty74OFaefAqd/m2AIJ+5OdjhOEIB5R6lYtGxK oOv0myFIq8kKfnA9PllPx0TfZyV1DPNEpA47v8EAxbI4W5KAU7tuOmXZpVshWZLJ hTU8HeLImDA3HDNTzWCOfXnPZK1y7FRJeFQ2ZWVrIR95z+y2jzZxElHwKlFuxKxn Xgb4ccAL2v5hcmQozEzDXD5pDK1q2DzHffdyftleIsF7svG560JRx6cE7XnW13JW RxhD7TvgYEo3vbrbY23SpnzyHHOAsJPoQc0vXBfUfAEMlcxf8d2Aj0PmH3VD1RZi 38lE5XhbaNmFWgv/h9IPMDQwt7k7xWAX+MdmmNvtQYl2jRk87yZCD001Ks+QlFv5 IuU93+FjEZADRjrIemNVlyOjpIFWOwXdmn/E/VZXz68T+Dd8RDIAEXCwHKhavMlf BFfAG5+j5fzOMZMSVtfO7j0jCm2wLidz8XBzceXCDkqakqoStw/S5yHVM2uCiZg1 olQn/uG6h2xoOGQwgm+hV48GnOfZ0obEOGLUXAztpKDxw2I1agrqdYf84Tvjek9/ FJmP1nC8K750/benCtKt44bU0ujQqzXgxhHd/n+z9xaX+sJiyQg= =t8wh -----END PGP SIGNATURE----- --rkg4gljm4yzozdsk--