diff options
author | Robert Schwebel <r.schwebel@pengutronix.de> | 2023-10-21 11:12:55 +0200 |
---|---|---|
committer | Robert Schwebel <r.schwebel@pengutronix.de> | 2023-10-21 11:12:55 +0200 |
commit | 77a5ded8db38326f62691b26c66ee53b5d267227 (patch) | |
tree | 7d482e88f7de9cbb5675a2a1d07da0fb9a4134a6 /configs/platform-v7a/patches | |
parent | 5b3855bd676a2470d39118fdad4f582ba63f5128 (diff) | |
download | DistroKit-77a5ded8db38326f62691b26c66ee53b5d267227.tar.gz DistroKit-77a5ded8db38326f62691b26c66ee53b5d267227.tar.xz |
platform-v7a: add upstream patches for stm32mp
Currently we get this new error:
ERROR: stm32-rproc 10000000.m4@10000000.of: failed to get tz syscfg
Apply upstream patches from the mailing list.
Signed-off-by: Robert Schwebel <r.schwebel@pengutronix.de>
Diffstat (limited to 'configs/platform-v7a/patches')
3 files changed, 166 insertions, 0 deletions
diff --git a/configs/platform-v7a/patches/barebox-2023.09.0/0001-remoteproc-stm32-fix-typo-in-Kconfig-symbol.patch b/configs/platform-v7a/patches/barebox-2023.09.0/0001-remoteproc-stm32-fix-typo-in-Kconfig-symbol.patch new file mode 100644 index 0000000..acb5ba3 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2023.09.0/0001-remoteproc-stm32-fix-typo-in-Kconfig-symbol.patch @@ -0,0 +1,26 @@ +From: Ahmad Fatoum <a.fatoum@pengutronix.de> +Date: Fri, 20 Oct 2023 15:37:43 +0200 +Subject: [PATCH] remoteproc: stm32: fix typo in Kconfig symbol + +The Kconfig symbol for enabling support for the ARM Secure Monitor Call +Calling Convention if CONFIG_ARM_SMCCC and not CONFIG_ARM_SMCC, but the +latter is checked with IS_ENABLED() in the driver. Fix the typo. + +Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> +--- + drivers/remoteproc/stm32_rproc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c +index b6a62634842f..b2282f2fac5b 100644 +--- a/drivers/remoteproc/stm32_rproc.c ++++ b/drivers/remoteproc/stm32_rproc.c +@@ -56,7 +56,7 @@ static int stm32_rproc_set_hold_boot(struct rproc *rproc, bool hold) + + val = hold ? HOLD_BOOT : RELEASE_BOOT; + +- if (IS_ENABLED(CONFIG_ARM_SMCC) && ddata->secured_soc) { ++ if (IS_ENABLED(CONFIG_ARM_SMCCC) && ddata->secured_soc) { + arm_smccc_smc(STM32_SMC_RCC, STM32_SMC_REG_WRITE, + hold_boot->reg, val, 0, 0, 0, 0, &smc_res); + err = smc_res.a0; diff --git a/configs/platform-v7a/patches/barebox-2023.09.0/0002-remoteproc-stm32-fix-breakage-after-DT-sync-with-ups.patch b/configs/platform-v7a/patches/barebox-2023.09.0/0002-remoteproc-stm32-fix-breakage-after-DT-sync-with-ups.patch new file mode 100644 index 0000000..8d93285 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2023.09.0/0002-remoteproc-stm32-fix-breakage-after-DT-sync-with-ups.patch @@ -0,0 +1,135 @@ +From: Ahmad Fatoum <a.fatoum@pengutronix.de> +Date: Fri, 20 Oct 2023 15:37:44 +0200 +Subject: [PATCH] remoteproc: stm32: fix breakage after DT sync with upstream + +Once more, a device tree sync with Linux breaks a barebox driver. + +This time, the STM32 remoteproc driver ported from Linux was broken by +the upstream stm32mp151.dtsi removing the st,syscfg-tz property. + +This property is only needed for the SiP secure monitor call case, +but was so far always specified and the driver required its presence, +even if it went unused. + +The Linux driver has since removed this hard requirement and added a new +third way to do co-processor reset: Besides direct access to hardware +and Silicon Provider specific secure monitor call, there's also support +for doing it over SCMI now. + +Sync that part with the Linux driver to fix following boot-time error +message: + + ERROR: stm32-rproc 10000000.m4@10000000.of: failed to get tz syscfg + +Reported-by: Robert Schwebel <rsc@pengutronix.de> +Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> +--- + drivers/remoteproc/stm32_rproc.c | 70 ++++++++++++++++++++++++++++------------ + 1 file changed, 50 insertions(+), 20 deletions(-) + +diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c +index b2282f2fac5b..a7df29e57051 100644 +--- a/drivers/remoteproc/stm32_rproc.c ++++ b/drivers/remoteproc/stm32_rproc.c +@@ -30,8 +30,9 @@ struct stm32_syscon { + + struct stm32_rproc { + struct reset_control *rst; ++ struct reset_control *hold_boot_rst; + struct stm32_syscon hold_boot; +- bool secured_soc; ++ bool hold_boot_smc; + }; + + static void *stm32_rproc_da_to_va(struct rproc *rproc, u64 da, int len) +@@ -54,13 +55,28 @@ static int stm32_rproc_set_hold_boot(struct rproc *rproc, bool hold) + struct arm_smccc_res smc_res; + int val, err; + ++ /* ++ * Three ways to manage the hold boot ++ * - using SCMI: the hold boot is managed as a reset, ++ * - using Linux(no SCMI): the hold boot is managed as a syscon register ++ * - using SMC call (deprecated): use SMC reset interface ++ */ ++ + val = hold ? HOLD_BOOT : RELEASE_BOOT; + +- if (IS_ENABLED(CONFIG_ARM_SMCCC) && ddata->secured_soc) { ++ if (ddata->hold_boot_rst) { ++ /* Use the SCMI reset controller */ ++ if (!hold) ++ err = reset_control_deassert(ddata->hold_boot_rst); ++ else ++ err = reset_control_assert(ddata->hold_boot_rst); ++ } else if (IS_ENABLED(CONFIG_HAVE_ARM_SMCCC) && ddata->hold_boot_smc) { ++ /* Use the SMC call */ + arm_smccc_smc(STM32_SMC_RCC, STM32_SMC_REG_WRITE, + hold_boot->reg, val, 0, 0, 0, 0, &smc_res); + err = smc_res.a0; + } else { ++ /* Use syscon */ + err = regmap_update_bits(hold_boot->map, hold_boot->reg, + hold_boot->mask, val); + } +@@ -142,28 +158,42 @@ static int stm32_rproc_parse_dt(struct device *dev, struct stm32_rproc *ddata) + } + + /* +- * if platform is secured the hold boot bit must be written by +- * smc call and read normally. +- * if not secure the hold boot bit could be read/write normally ++ * Three ways to manage the hold boot ++ * - using SCMI: the hold boot is managed as a reset ++ * The DT "reset-mames" property should be defined with 2 items: ++ * reset-names = "mcu_rst", "hold_boot"; ++ * - using SMC call (deprecated): use SMC reset interface ++ * The DT "reset-mames" property is optional, "st,syscfg-tz" is required ++ * - default(no SCMI, no SMC): the hold boot is managed as a syscon register ++ * The DT "reset-mames" property is optional, "st,syscfg-holdboot" is required + */ +- err = stm32_rproc_get_syscon(np, "st,syscfg-tz", &tz); +- if (err) { +- dev_err(dev, "failed to get tz syscfg\n"); +- return err; +- } + +- err = regmap_read(tz.map, tz.reg, &tzen); +- if (err) { +- dev_err(dev, "failed to read tzen\n"); +- return err; ++ ddata->hold_boot_rst = reset_control_get_optional(dev, "hold_boot"); ++ if (IS_ERR(ddata->hold_boot_rst)) ++ return dev_err_probe(dev, PTR_ERR(ddata->hold_boot_rst), ++ "failed to get hold_boot reset\n"); ++ ++ if (!ddata->hold_boot_rst && IS_ENABLED(CONFIG_HAVE_ARM_SMCCC)) { ++ /* Manage the MCU_BOOT using SMC call */ ++ err = stm32_rproc_get_syscon(np, "st,syscfg-tz", &tz); ++ if (!err) { ++ err = regmap_read(tz.map, tz.reg, &tzen); ++ if (err) { ++ dev_err(dev, "failed to read tzen\n"); ++ return err; ++ } ++ ddata->hold_boot_smc = tzen & tz.mask; ++ } + } +- ddata->secured_soc = tzen & tz.mask; + +- err = stm32_rproc_get_syscon(np, "st,syscfg-holdboot", +- &ddata->hold_boot); +- if (err) { +- dev_err(dev, "failed to get hold boot\n"); +- return err; ++ if (!ddata->hold_boot_rst && !ddata->hold_boot_smc) { ++ /* Default: hold boot manage it through the syscon controller */ ++ err = stm32_rproc_get_syscon(np, "st,syscfg-holdboot", ++ &ddata->hold_boot); ++ if (err) { ++ dev_err(dev, "failed to get hold boot\n"); ++ return err; ++ } + } + + return 0; diff --git a/configs/platform-v7a/patches/barebox-2023.09.0/series b/configs/platform-v7a/patches/barebox-2023.09.0/series new file mode 100644 index 0000000..7dadf91 --- /dev/null +++ b/configs/platform-v7a/patches/barebox-2023.09.0/series @@ -0,0 +1,5 @@ +# generated by git-ptx-patches +#tag:base --start-number 1 +0001-remoteproc-stm32-fix-typo-in-Kconfig-symbol.patch +0002-remoteproc-stm32-fix-breakage-after-DT-sync-with-ups.patch +# 3e889491708d7a397dcb8350d8babf58 - git-ptx-patches magic |