Commit 348741a9 authored by Gatien Chevallier's avatar Gatien Chevallier Committed by Alexandre Torgue
Browse files

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: default avatarGatien Chevallier <gatien.chevallier@foss.st.com>
Reviewed-by: default avatarClément Le Goffic <legoffic.clement@gmail.com>
Reviewed-by: default avatarLinus Walleij <linusw@kernel.org>
Link: https://lore.kernel.org/r/20260226-debug_bus-v6-12-5d794697798d@foss.st.com


Signed-off-by: default avatarAlexandre Torgue <alexandre.torgue@foss.st.com>
parent f1939c6a
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
 * Author: Clément Le Goffic <clement.legoffic@foss.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>
@@ -46,9 +47,11 @@ struct stm32_hdp {
	void __iomem *base;
	struct clk *clk;
	struct pinctrl_dev *pctl_dev;
	struct stm32_firewall *firewall;
	struct gpio_generic_chip gpio_chip;
	u32 mux_conf;
	u32 gposet_conf;
	int nb_firewall_entries;
	const char * const *func_name;
};

@@ -615,6 +618,13 @@ static int stm32_hdp_probe(struct platform_device *pdev)
		return -ENOMEM;
	hdp->dev = dev;

	if (IS_ENABLED(CONFIG_STM32_FIREWALL)) {
		err = stm32_firewall_get_grant_all_access(dev, &hdp->firewall,
							  &hdp->nb_firewall_entries);
		if (err)
			return err;
	}

	platform_set_drvdata(pdev, hdp);

	hdp->base = devm_platform_ioremap_resource(pdev, 0);
@@ -670,8 +680,12 @@ static int stm32_hdp_probe(struct platform_device *pdev)
static void stm32_hdp_remove(struct platform_device *pdev)
{
	struct stm32_hdp *hdp = platform_get_drvdata(pdev);
	int i;

	writel_relaxed(HDP_CTRL_DISABLE, hdp->base + HDP_CTRL);

	for (i = 0; i < hdp->nb_firewall_entries; i++)
		stm32_firewall_release_access(&hdp->firewall[i]);
}

static int stm32_hdp_suspend(struct device *dev)