From 9956ad2afd44699933188f388e6f1cf1943987b7 Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Tue, 2 Jun 2026 20:32:48 +0100 Subject: [PATCH] pmdomain: tegra: Add support for multi-socket platforms On multi-socket platforms each socket has its own BPMP that is registered with the kernel. For such platforms prefix the NUMA ID for each socket to the BPMP powergate name to ensure there is a unique name for each power-domain. Note that we only add the NUMA ID for powergates that return a valid name because an invalid name indicates that the powergate ID is not supported. Note the check for the NULL string is moved into the function tegra_bpmp_powergate_get_name(), because in the multi-socket case we must only add the prefix if we receive a valid name. A NULL string indicates that there is no valid powergate associated with the ID that is being queried. Signed-off-by: Jon Hunter Signed-off-by: Ulf Hansson --- drivers/pmdomain/tegra/powergate-bpmp.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/pmdomain/tegra/powergate-bpmp.c b/drivers/pmdomain/tegra/powergate-bpmp.c index 8cde4f384846..e6a7e025b012 100644 --- a/drivers/pmdomain/tegra/powergate-bpmp.c +++ b/drivers/pmdomain/tegra/powergate-bpmp.c @@ -137,6 +137,13 @@ static char *tegra_bpmp_powergate_get_name(struct tegra_bpmp *bpmp, if (err < 0 || msg.rx.ret < 0) return NULL; + if (response.get_name.name[0] == '\0') + return NULL; + + if (dev_to_node(bpmp->dev) != NUMA_NO_NODE) + return kasprintf(GFP_KERNEL, "%d-%s", dev_to_node(bpmp->dev), + response.get_name.name); + return kstrdup(response.get_name.name, GFP_KERNEL); } @@ -234,7 +241,7 @@ tegra_bpmp_probe_powergates(struct tegra_bpmp *bpmp, struct tegra_powergate_info *info = &powergates[count]; info->name = tegra_bpmp_powergate_get_name(bpmp, id); - if (!info->name || info->name[0] == '\0') { + if (!info->name) { num_holes++; continue; }