[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260109-debug_bus-v1-11-8f2142b5a738@foss.st.com>
Date: Fri, 9 Jan 2026 11:55:11 +0100
From: Gatien Chevallier <gatien.chevallier@...s.st.com>
To: Suzuki K Poulose <suzuki.poulose@....com>,
Mike Leach
<mike.leach@...aro.org>,
James Clark <james.clark@...aro.org>, Rob Herring
<robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley
<conor+dt@...nel.org>,
Mathieu Poirier <mathieu.poirier@...aro.org>,
Leo Yan
<leo.yan@...ux.dev>,
Clément Le Goffic
<legoffic.clement@...il.com>,
Linus Walleij <linusw@...nel.org>,
"Maxime
Coquelin" <mcoquelin.stm32@...il.com>,
Alexandre Torgue
<alexandre.torgue@...s.st.com>
CC: <coresight@...ts.linaro.org>, <linux-arm-kernel@...ts.infradead.org>,
<devicetree@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<linux-gpio@...r.kernel.org>,
<linux-stm32@...md-mailman.stormreply.com>,
Gatien Chevallier <gatien.chevallier@...s.st.com>
Subject: [PATCH 11/11] pinctrl: stm32: add firewall checks before probing
the HDP driver
Because the HDP peripheral both depends on debug and firewall
configuration, when CONFIG_STM32_FIREWALL is present, use the
stm32 firewall framework to be able to check these configuration against
the relevant controllers.
Signed-off-by: Gatien Chevallier <gatien.chevallier@...s.st.com>
---
drivers/pinctrl/stm32/pinctrl-stm32-hdp.c | 41 +++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
index 0b1dff01e04c..7e4aa0465c06 100644
--- a/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
+++ b/drivers/pinctrl/stm32/pinctrl-stm32-hdp.c
@@ -4,6 +4,7 @@
* Author: Clément Le Goffic <clement.legoffic@...s.st.com> for STMicroelectronics.
*/
#include <linux/bits.h>
+#include <linux/bus/stm32_firewall_device.h>
#include <linux/clk.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/generic.h>
@@ -605,10 +606,50 @@ MODULE_DEVICE_TABLE(of, stm32_hdp_of_match);
static int stm32_hdp_probe(struct platform_device *pdev)
{
struct gpio_generic_chip_config config;
+ struct stm32_firewall *firewall = NULL;
struct device *dev = &pdev->dev;
struct stm32_hdp *hdp;
+ int nb_firewall;
u8 version;
int err;
+ int i;
+
+ nb_firewall = of_count_phandle_with_args(pdev->dev.of_node, "access-controllers",
+ "#access-controller-cells");
+ if (IS_ENABLED(CONFIG_STM32_FIREWALL) && nb_firewall != -ENOENT) {
+ if (nb_firewall <= 0)
+ return -EINVAL;
+
+ firewall = devm_kcalloc(dev, nb_firewall, sizeof(*firewall), GFP_KERNEL);
+ if (!firewall)
+ return -ENOMEM;
+
+ /* Get stm32 firewall information */
+ err = stm32_firewall_get_firewall(dev->of_node, firewall, nb_firewall);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to get firewall controller\n");
+
+ for (i = 0; i < nb_firewall; i++) {
+ err = stm32_firewall_grant_access_by_id(firewall + i,
+ firewall[i].firewall_id);
+ if (err) {
+ while (i) {
+ u32 id;
+
+ i--;
+ id = firewall[i].firewall_id;
+ stm32_firewall_release_access_by_id(firewall + i, id);
+ }
+ if (err == -EACCES) {
+ dev_info(dev, "No firewall access\n");
+ return -ENODEV;
+ }
+
+ return dev_err_probe(dev, err, "Error checking firewall access\n");
+ }
+ }
+ }
+
hdp = devm_kzalloc(dev, sizeof(*hdp), GFP_KERNEL);
if (!hdp)
--
2.43.0
Powered by blists - more mailing lists