LINUX-STM32MP: v5.15-stm32mp-r2

Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
Change-Id: I908051bb3c17f9c36e163f1459cdbdafac725d20
This commit is contained in:
Sebastien GANDON
2022-06-30 11:09:27 +02:00
committed by bernard PUEL
parent 83a6bfebc6
commit efe2f89975
27 changed files with 14680 additions and 6400 deletions

View File

@ -1,114 +0,0 @@
From 4ad9ff21f9950e378e159d614a4f3edb5cd187b6 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
Date: Tue, 31 May 2022 12:00:10 +0200
Subject: [PATCH 12/22] ARM-5.15.24-stm32mp1-r1-MMC
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
---
Documentation/devicetree/bindings/mmc/arm,pl18x.yaml | 6 ++++++
drivers/mmc/host/mmci.c | 12 ++++++++++--
drivers/mmc/host/mmci.h | 1 +
drivers/mmc/host/mmci_stm32_sdmmc.c | 5 +++--
4 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml b/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml
index 47595cb48..eed54bee7 100644
--- a/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml
+++ b/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml
@@ -53,6 +53,12 @@ properties:
items:
- const: arm,pl18x
- const: arm,primecell
+ - description: Entry for STMicroelectronics variant of PL18x.
+ This dedicated compatible is used by bootloaders.
+ items:
+ - const: st,stm32-sdmmc2
+ - const: arm,pl18x
+ - const: arm,primecell
clocks:
description: One or two clocks, the "apb_pclk" and the "MCLK"
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 3765e2f4a..c15b9a2cd 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -274,13 +274,14 @@ static struct variant_data variant_stm32_sdmmc = {
.busy_detect = true,
.busy_detect_flag = MCI_STM32_BUSYD0,
.busy_detect_mask = MCI_STM32_BUSYD0ENDMASK,
+ .disable_keep_power = true,
.init = sdmmc_variant_init,
};
static struct variant_data variant_stm32_sdmmcv2 = {
.fifosize = 16 * 4,
.fifohalfsize = 8 * 4,
- .f_max = 208000000,
+ .f_max = 267000000,
.stm32_clkdiv = true,
.cmdreg_cpsm_enable = MCI_CPSM_STM32_ENABLE,
.cmdreg_lrsp_crc = MCI_CPSM_STM32_LRSP_CRC,
@@ -301,6 +302,7 @@ static struct variant_data variant_stm32_sdmmcv2 = {
.busy_detect = true,
.busy_detect_flag = MCI_STM32_BUSYD0,
.busy_detect_mask = MCI_STM32_BUSYD0ENDMASK,
+ .disable_keep_power = true,
.init = sdmmc_variant_init,
};
@@ -2168,7 +2170,8 @@ static int mmci_probe(struct amba_device *dev,
host->stop_abort.flags = MMC_RSP_R1B | MMC_CMD_AC;
/* We support these PM capabilities. */
- mmc->pm_caps |= MMC_PM_KEEP_POWER;
+ if (!variant->disable_keep_power)
+ mmc->pm_caps |= MMC_PM_KEEP_POWER;
/*
* We can do SGIO
@@ -2431,6 +2434,11 @@ static const struct amba_id mmci_ids[] = {
.mask = 0xf0ffffff,
.data = &variant_stm32_sdmmcv2,
},
+ {
+ .id = 0x20253180,
+ .mask = 0xf0ffffff,
+ .data = &variant_stm32_sdmmcv2,
+ },
/* Qualcomm variants */
{
.id = 0x00051180,
diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
index e1a9b96a3..2cad1ef97 100644
--- a/drivers/mmc/host/mmci.h
+++ b/drivers/mmc/host/mmci.h
@@ -361,6 +361,7 @@ struct variant_data {
u32 opendrain;
u8 dma_lli:1;
u32 stm32_idmabsize_mask;
+ u8 disable_keep_power:1;
void (*init)(struct mmci_host *host);
};
diff --git a/drivers/mmc/host/mmci_stm32_sdmmc.c b/drivers/mmc/host/mmci_stm32_sdmmc.c
index a75d3dd34..9c13f2c31 100644
--- a/drivers/mmc/host/mmci_stm32_sdmmc.c
+++ b/drivers/mmc/host/mmci_stm32_sdmmc.c
@@ -241,11 +241,12 @@ static void mmci_sdmmc_set_clkreg(struct mmci_host *host, unsigned int desired)
/*
* SDMMC_FBCK is selected when an external Delay Block is needed
- * with SDR104.
+ * with SDR104 or HS200.
*/
if (host->mmc->ios.timing >= MMC_TIMING_UHS_SDR50) {
clk |= MCI_STM32_CLK_BUSSPEED;
- if (host->mmc->ios.timing == MMC_TIMING_UHS_SDR104) {
+ if (host->mmc->ios.timing == MMC_TIMING_UHS_SDR104 ||
+ host->mmc->ios.timing == MMC_TIMING_MMC_HS200) {
clk &= ~MCI_STM32_CLK_SEL_MSK;
clk |= MCI_STM32_CLK_SELFBCK;
}
--
2.25.1

View File

@ -1,9 +1,9 @@
From 4868d40c41f2fb7dea18d7b5fe14da02fc82e2f1 Mon Sep 17 00:00:00 2001 From 84827f5873b8cd852cc79177e9a42b12760b3723 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 11:50:09 +0200 Date: Thu, 13 Oct 2022 12:22:34 +0200
Subject: [PATCH 01/22] ARM-5.15.24-stm32mp1-r1-MACHINE Subject: [PATCH 01/22] v5.15-stm32mp-r2 MACHINE
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
Documentation/arm/index.rst | 1 + Documentation/arm/index.rst | 1 +
.../arm/stm32/stm32mp13-overview.rst | 37 +++++++++++++++++++ .../arm/stm32/stm32mp13-overview.rst | 37 +++++++++++++++++++
@ -14,7 +14,7 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
create mode 100644 Documentation/arm/stm32/stm32mp13-overview.rst create mode 100644 Documentation/arm/stm32/stm32mp13-overview.rst
diff --git a/Documentation/arm/index.rst b/Documentation/arm/index.rst diff --git a/Documentation/arm/index.rst b/Documentation/arm/index.rst
index d4f34ae9e..2bda5461a 100644 index d4f34ae9e6f4..2bda5461a80b 100644
--- a/Documentation/arm/index.rst --- a/Documentation/arm/index.rst
+++ b/Documentation/arm/index.rst +++ b/Documentation/arm/index.rst
@@ -55,6 +55,7 @@ SoC-specific documents @@ -55,6 +55,7 @@ SoC-specific documents
@ -27,7 +27,7 @@ index d4f34ae9e..2bda5461a 100644
sunxi sunxi
diff --git a/Documentation/arm/stm32/stm32mp13-overview.rst b/Documentation/arm/stm32/stm32mp13-overview.rst diff --git a/Documentation/arm/stm32/stm32mp13-overview.rst b/Documentation/arm/stm32/stm32mp13-overview.rst
new file mode 100644 new file mode 100644
index 000000000..3bb9492da index 000000000000..3bb9492dad49
--- /dev/null --- /dev/null
+++ b/Documentation/arm/stm32/stm32mp13-overview.rst +++ b/Documentation/arm/stm32/stm32mp13-overview.rst
@@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
@ -69,7 +69,7 @@ index 000000000..3bb9492da
+ +
+- Alexandre Torgue <alexandre.torgue@foss.st.com> +- Alexandre Torgue <alexandre.torgue@foss.st.com>
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 644875d73..37b833761 100644 index 644875d73ba1..37b8337617d7 100644
--- a/arch/arm/Kconfig.debug --- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug
@@ -1244,7 +1244,7 @@ choice @@ -1244,7 +1244,7 @@ choice
@ -82,7 +82,7 @@ index 644875d73..37b833761 100644
help help
Say Y here if you want kernel low-level debugging support Say Y here if you want kernel low-level debugging support
diff --git a/arch/arm/mach-stm32/Kconfig b/arch/arm/mach-stm32/Kconfig diff --git a/arch/arm/mach-stm32/Kconfig b/arch/arm/mach-stm32/Kconfig
index 57699bd8f..ab6978451 100644 index 57699bd8f107..ab69784518c9 100644
--- a/arch/arm/mach-stm32/Kconfig --- a/arch/arm/mach-stm32/Kconfig
+++ b/arch/arm/mach-stm32/Kconfig +++ b/arch/arm/mach-stm32/Kconfig
@@ -46,8 +46,17 @@ if ARCH_MULTI_V7 @@ -46,8 +46,17 @@ if ARCH_MULTI_V7
@ -104,7 +104,7 @@ index 57699bd8f..ab6978451 100644
endif endif
diff --git a/arch/arm/mach-stm32/board-dt.c b/arch/arm/mach-stm32/board-dt.c diff --git a/arch/arm/mach-stm32/board-dt.c b/arch/arm/mach-stm32/board-dt.c
index a766310d8..9ff06f2fc 100644 index a766310d8dca..9ff06f2fcbf4 100644
--- a/arch/arm/mach-stm32/board-dt.c --- a/arch/arm/mach-stm32/board-dt.c
+++ b/arch/arm/mach-stm32/board-dt.c +++ b/arch/arm/mach-stm32/board-dt.c
@@ -18,6 +18,11 @@ static const char *const stm32_compat[] __initconst = { @@ -18,6 +18,11 @@ static const char *const stm32_compat[] __initconst = {
@ -120,5 +120,5 @@ index a766310d8..9ff06f2fc 100644
NULL NULL
}; };
-- --
2.25.1 2.17.1

View File

@ -1,19 +1,88 @@
From 1aacc70479e14dd5ca0e60a969478957a390dbda Mon Sep 17 00:00:00 2001 From 7b129c9db71e9dcb515a4585861898b6a3644f1b Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 11:51:10 +0200 Date: Thu, 3 Nov 2022 15:23:32 +0100
Subject: [PATCH 03/22] ARM-5.15.24-stm32mp1-r1-CPUFREQ Subject: [PATCH 03/22] v5.15-stm32mp-r2 CPUFREQ
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
drivers/cpufreq/Kconfig.arm | 7 ++ .../bindings/cpufreq/stm32-cpufreq.txt | 61 +++++++++++
drivers/cpufreq/Makefile | 1 + drivers/cpufreq/Kconfig.arm | 7 ++
drivers/cpufreq/cpufreq-dt-platdev.c | 1 + drivers/cpufreq/Makefile | 1 +
drivers/cpufreq/stm32-cpufreq.c | 103 +++++++++++++++++++++++++++ drivers/cpufreq/cpufreq-dt-platdev.c | 1 +
4 files changed, 112 insertions(+) drivers/cpufreq/stm32-cpufreq.c | 103 ++++++++++++++++++
5 files changed, 173 insertions(+)
create mode 100644 Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt
create mode 100644 drivers/cpufreq/stm32-cpufreq.c create mode 100644 drivers/cpufreq/stm32-cpufreq.c
diff --git a/Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt b/Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt
new file mode 100644
index 000000000000..1292eb2612a0
--- /dev/null
+++ b/Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt
@@ -0,0 +1,61 @@
+STM32 CPUFreq and OPP bindings
+==============================
+
+STM32 CPUFreq driver needs to read chip information from the SoC to list
+available OPPs. Then it depends on cpufreq-dt bindings.
+
+Required properties:
+--------------------
+- clocks: Phandle to the cpu clock "cpu".
+- clocks-name: Should contain "cpu".
+- nvmem-cells: Phandle to nvmem cell that contains "part_number".
+- nvmem-cell-names: Must be "part_number".
+- operating-points-v2: Phandle to operating points table. See ../power/opp.txt
+ for more details.
+
+Optional properties:
+--------------------
+See cpufreq-dt.txt for optional properties.
+
+Examples:
+---------
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu@0 {
+ compatible = "arm,cortex-a7";
+ device_type = "cpu";
+ reg = <0>;
+ clocks = <&rcc CK_MPU>;
+ clock-names = "cpu";
+ operating-points-v2 = <&cpu0_opp_table>;
+ nvmem-cells = <&part_number_otp>;
+ nvmem-cell-names = "part_number";
+ };
+
+ cpu1: cpu@1 {
+ compatible = "arm,cortex-a7";
+ device_type = "cpu";
+ reg = <1>;
+ clocks = <&rcc CK_MPU>;
+ clock-names = "cpu";
+ operating-points-v2 = <&cpu0_opp_table>;
+ };
+ };
+
+ cpu0_opp_table: cpu0-opp-table {
+ compatible = "operating-points-v2";
+ opp-shared;
+
+ opp-650000000 {
+ opp-hz = /bits/ 64 <650000000>;
+ opp-microvolt = <1200000>;
+ opp-supported-hw = <0x1>;
+ };
+ opp-800000000 {
+ opp-hz = /bits/ 64 <800000000>;
+ opp-microvolt = <1350000>;
+ opp-supported-hw = <0x2>;
+ };
+ };
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index 954749afb..eac08e907 100644 index 954749afb5fe..eac08e90768c 100644
--- a/drivers/cpufreq/Kconfig.arm --- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm
@@ -311,6 +311,13 @@ config ARM_STI_CPUFREQ @@ -311,6 +311,13 @@ config ARM_STI_CPUFREQ
@ -31,7 +100,7 @@ index 954749afb..eac08e907 100644
tristate "Tegra20/30 CPUFreq support" tristate "Tegra20/30 CPUFreq support"
depends on ARCH_TEGRA && CPUFREQ_DT depends on ARCH_TEGRA && CPUFREQ_DT
diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile diff --git a/drivers/cpufreq/Makefile b/drivers/cpufreq/Makefile
index 48ee58590..d34de1b92 100644 index 48ee5859030c..d34de1b927bf 100644
--- a/drivers/cpufreq/Makefile --- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile +++ b/drivers/cpufreq/Makefile
@@ -78,6 +78,7 @@ obj-$(CONFIG_ARM_SCMI_CPUFREQ) += scmi-cpufreq.o @@ -78,6 +78,7 @@ obj-$(CONFIG_ARM_SCMI_CPUFREQ) += scmi-cpufreq.o
@ -43,7 +112,7 @@ index 48ee58590..d34de1b92 100644
obj-$(CONFIG_ARM_TEGRA20_CPUFREQ) += tegra20-cpufreq.o obj-$(CONFIG_ARM_TEGRA20_CPUFREQ) += tegra20-cpufreq.o
obj-$(CONFIG_ARM_TEGRA124_CPUFREQ) += tegra124-cpufreq.o obj-$(CONFIG_ARM_TEGRA124_CPUFREQ) += tegra124-cpufreq.o
diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c diff --git a/drivers/cpufreq/cpufreq-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c
index ca1d103ec..f205e6e97 100644 index ca1d103ec449..f205e6e9703e 100644
--- a/drivers/cpufreq/cpufreq-dt-platdev.c --- a/drivers/cpufreq/cpufreq-dt-platdev.c
+++ b/drivers/cpufreq/cpufreq-dt-platdev.c +++ b/drivers/cpufreq/cpufreq-dt-platdev.c
@@ -150,6 +150,7 @@ static const struct of_device_id blocklist[] __initconst = { @@ -150,6 +150,7 @@ static const struct of_device_id blocklist[] __initconst = {
@ -56,7 +125,7 @@ index ca1d103ec..f205e6e97 100644
{ .compatible = "ti,am43", }, { .compatible = "ti,am43", },
diff --git a/drivers/cpufreq/stm32-cpufreq.c b/drivers/cpufreq/stm32-cpufreq.c diff --git a/drivers/cpufreq/stm32-cpufreq.c b/drivers/cpufreq/stm32-cpufreq.c
new file mode 100644 new file mode 100644
index 000000000..d7b1b16ea index 000000000000..d7b1b16ea1d1
--- /dev/null --- /dev/null
+++ b/drivers/cpufreq/stm32-cpufreq.c +++ b/drivers/cpufreq/stm32-cpufreq.c
@@ -0,0 +1,103 @@ @@ -0,0 +1,103 @@
@ -164,5 +233,5 @@ index 000000000..d7b1b16ea
+MODULE_AUTHOR("Alexandre Torgue <alexandre.torgue@st.com>"); +MODULE_AUTHOR("Alexandre Torgue <alexandre.torgue@st.com>");
+MODULE_LICENSE("GPL v2"); +MODULE_LICENSE("GPL v2");
-- --
2.25.1 2.17.1

View File

@ -1,88 +1,19 @@
From 4627c869d60932edc00dd979d9b1bd374518c5c8 Mon Sep 17 00:00:00 2001 From dc62943bb269dbe5f3294beda26e299bb00f0e97 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:08:46 +0200 Date: Thu, 3 Nov 2022 16:49:53 +0100
Subject: [PATCH 20/22] ARM-5.15.24-stm32mp1-r1-CPUIDLE-POWER Subject: [PATCH 04/22] v5.15-stm32mp-r2 CPUIDLE-POWER
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../bindings/cpufreq/stm32-cpufreq.txt | 61 ++++ drivers/cpuidle/Kconfig.arm | 8 +
drivers/cpuidle/Kconfig.arm | 8 + drivers/cpuidle/Makefile | 1 +
drivers/cpuidle/Makefile | 1 + drivers/cpuidle/cpuidle-stm32.c | 276 ++++++++++++++++++++++++++++++++
drivers/cpuidle/cpuidle-stm32.c | 276 ++++++++++++++++++ kernel/power/suspend.c | 1 -
kernel/power/suspend.c | 1 - 4 files changed, 285 insertions(+), 1 deletion(-)
5 files changed, 346 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt
create mode 100644 drivers/cpuidle/cpuidle-stm32.c create mode 100644 drivers/cpuidle/cpuidle-stm32.c
diff --git a/Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt b/Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt
new file mode 100644
index 000000000..1292eb261
--- /dev/null
+++ b/Documentation/devicetree/bindings/cpufreq/stm32-cpufreq.txt
@@ -0,0 +1,61 @@
+STM32 CPUFreq and OPP bindings
+==============================
+
+STM32 CPUFreq driver needs to read chip information from the SoC to list
+available OPPs. Then it depends on cpufreq-dt bindings.
+
+Required properties:
+--------------------
+- clocks: Phandle to the cpu clock "cpu".
+- clocks-name: Should contain "cpu".
+- nvmem-cells: Phandle to nvmem cell that contains "part_number".
+- nvmem-cell-names: Must be "part_number".
+- operating-points-v2: Phandle to operating points table. See ../power/opp.txt
+ for more details.
+
+Optional properties:
+--------------------
+See cpufreq-dt.txt for optional properties.
+
+Examples:
+---------
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu0: cpu@0 {
+ compatible = "arm,cortex-a7";
+ device_type = "cpu";
+ reg = <0>;
+ clocks = <&rcc CK_MPU>;
+ clock-names = "cpu";
+ operating-points-v2 = <&cpu0_opp_table>;
+ nvmem-cells = <&part_number_otp>;
+ nvmem-cell-names = "part_number";
+ };
+
+ cpu1: cpu@1 {
+ compatible = "arm,cortex-a7";
+ device_type = "cpu";
+ reg = <1>;
+ clocks = <&rcc CK_MPU>;
+ clock-names = "cpu";
+ operating-points-v2 = <&cpu0_opp_table>;
+ };
+ };
+
+ cpu0_opp_table: cpu0-opp-table {
+ compatible = "operating-points-v2";
+ opp-shared;
+
+ opp-650000000 {
+ opp-hz = /bits/ 64 <650000000>;
+ opp-microvolt = <1200000>;
+ opp-supported-hw = <0x1>;
+ };
+ opp-800000000 {
+ opp-hz = /bits/ 64 <800000000>;
+ opp-microvolt = <1350000>;
+ opp-supported-hw = <0x2>;
+ };
+ };
diff --git a/drivers/cpuidle/Kconfig.arm b/drivers/cpuidle/Kconfig.arm diff --git a/drivers/cpuidle/Kconfig.arm b/drivers/cpuidle/Kconfig.arm
index 334f83e56..4de5db493 100644 index 334f83e56120..4de5db493d42 100644
--- a/drivers/cpuidle/Kconfig.arm --- a/drivers/cpuidle/Kconfig.arm
+++ b/drivers/cpuidle/Kconfig.arm +++ b/drivers/cpuidle/Kconfig.arm
@@ -91,6 +91,14 @@ config ARM_EXYNOS_CPUIDLE @@ -91,6 +91,14 @@ config ARM_EXYNOS_CPUIDLE
@ -101,7 +32,7 @@ index 334f83e56..4de5db493 100644
bool "CPU Idle Driver for mvebu v7 family processors" bool "CPU Idle Driver for mvebu v7 family processors"
depends on (ARCH_MVEBU || COMPILE_TEST) && !ARM64 depends on (ARCH_MVEBU || COMPILE_TEST) && !ARM64
diff --git a/drivers/cpuidle/Makefile b/drivers/cpuidle/Makefile diff --git a/drivers/cpuidle/Makefile b/drivers/cpuidle/Makefile
index 26bbc5e74..cc1eccc73 100644 index 26bbc5e74123..cc1eccc73d65 100644
--- a/drivers/cpuidle/Makefile --- a/drivers/cpuidle/Makefile
+++ b/drivers/cpuidle/Makefile +++ b/drivers/cpuidle/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_ARM_PSCI_CPUIDLE) += cpuidle-psci.o @@ -25,6 +25,7 @@ obj-$(CONFIG_ARM_PSCI_CPUIDLE) += cpuidle-psci.o
@ -114,7 +45,7 @@ index 26bbc5e74..cc1eccc73 100644
# MIPS drivers # MIPS drivers
diff --git a/drivers/cpuidle/cpuidle-stm32.c b/drivers/cpuidle/cpuidle-stm32.c diff --git a/drivers/cpuidle/cpuidle-stm32.c b/drivers/cpuidle/cpuidle-stm32.c
new file mode 100644 new file mode 100644
index 000000000..2fef170d6 index 000000000000..2fef170d6877
--- /dev/null --- /dev/null
+++ b/drivers/cpuidle/cpuidle-stm32.c +++ b/drivers/cpuidle/cpuidle-stm32.c
@@ -0,0 +1,276 @@ @@ -0,0 +1,276 @@
@ -395,7 +326,7 @@ index 000000000..2fef170d6
+MODULE_DESCRIPTION("STM32 cpu idle driver"); +MODULE_DESCRIPTION("STM32 cpu idle driver");
+MODULE_LICENSE("GPL v2"); +MODULE_LICENSE("GPL v2");
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 13d905dd3..371f2765d 100644 index 13d905dd3267..371f2765da18 100644
--- a/kernel/power/suspend.c --- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c +++ b/kernel/power/suspend.c
@@ -34,7 +34,6 @@ @@ -34,7 +34,6 @@
@ -407,5 +338,5 @@ index 13d905dd3..371f2765d 100644
[PM_SUSPEND_MEM] = "mem", [PM_SUSPEND_MEM] = "mem",
}; };
-- --
2.25.1 2.17.1

View File

@ -1,19 +1,19 @@
From 20c1092971871e4018f8ca5de96282711289cb6f Mon Sep 17 00:00:00 2001 From 62911b17f33f57875c1b18ed211d5fa0f731ad42 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 11:52:37 +0200 Date: Thu, 3 Nov 2022 15:26:34 +0100
Subject: [PATCH 05/22] ARM-5.15.24-stm32mp1-r1-DMA Subject: [PATCH 06/22] v5.15-stm32mp-r2 DMA
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../devicetree/bindings/dma/st,stm32-dma.yaml | 47 + .../devicetree/bindings/dma/st,stm32-dma.yaml | 47 +
.../bindings/dma/st,stm32-mdma.yaml | 12 +- .../bindings/dma/st,stm32-mdma.yaml | 12 +-
drivers/dma/stm32-dma.c | 1169 +++++++++++++++-- drivers/dma/stm32-dma.c | 1169 +++++++++++++++--
drivers/dma/stm32-dmamux.c | 2 +- drivers/dma/stm32-dmamux.c | 2 +-
drivers/dma/stm32-mdma.c | 170 ++- drivers/dma/stm32-mdma.c | 147 ++-
5 files changed, 1246 insertions(+), 154 deletions(-) 5 files changed, 1240 insertions(+), 137 deletions(-)
diff --git a/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml b/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml diff --git a/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml b/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml
index 4bf676fd2..99351fe0f 100644 index 4bf676fd25dc..99351fe0fa17 100644
--- a/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml --- a/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml
+++ b/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml +++ b/Documentation/devicetree/bindings/dma/st,stm32-dma.yaml
@@ -47,6 +47,14 @@ description: | @@ -47,6 +47,14 @@ description: |
@ -85,7 +85,7 @@ index 4bf676fd2..99351fe0f 100644
... ...
diff --git a/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml b/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml diff --git a/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml b/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml
index c30be840b..c4bb58014 100644 index c30be840be1c..c4bb58014374 100644
--- a/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml --- a/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml
+++ b/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml +++ b/Documentation/devicetree/bindings/dma/st,stm32-mdma.yaml
@@ -10,8 +10,8 @@ description: | @@ -10,8 +10,8 @@ description: |
@ -129,7 +129,7 @@ index c30be840b..c4bb58014 100644
dma-requests = <32>; dma-requests = <32>;
st,ahb-addr-masks = <0x20000000>, <0x00000000>; st,ahb-addr-masks = <0x20000000>, <0x00000000>;
diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c
index 7dfc743ac..7c6078c6c 100644 index 7dfc743ac433..7c6078c6c3bf 100644
--- a/drivers/dma/stm32-dma.c --- a/drivers/dma/stm32-dma.c
+++ b/drivers/dma/stm32-dma.c +++ b/drivers/dma/stm32-dma.c
@@ -14,12 +14,14 @@ @@ -14,12 +14,14 @@
@ -1728,7 +1728,7 @@ index 7dfc743ac..7c6078c6c 100644
-subsys_initcall(stm32_dma_init); -subsys_initcall(stm32_dma_init);
+device_initcall(stm32_dma_init); +device_initcall(stm32_dma_init);
diff --git a/drivers/dma/stm32-dmamux.c b/drivers/dma/stm32-dmamux.c diff --git a/drivers/dma/stm32-dmamux.c b/drivers/dma/stm32-dmamux.c
index a42164389..f9f77bb09 100644 index d5d55732adba..eee0c5aa5fb5 100644
--- a/drivers/dma/stm32-dmamux.c --- a/drivers/dma/stm32-dmamux.c
+++ b/drivers/dma/stm32-dmamux.c +++ b/drivers/dma/stm32-dmamux.c
@@ -267,7 +267,7 @@ static int stm32_dmamux_probe(struct platform_device *pdev) @@ -267,7 +267,7 @@ static int stm32_dmamux_probe(struct platform_device *pdev)
@ -1741,18 +1741,10 @@ index a42164389..f9f77bb09 100644
udelay(2); udelay(2);
reset_control_deassert(rst); reset_control_deassert(rst);
diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c diff --git a/drivers/dma/stm32-mdma.c b/drivers/dma/stm32-mdma.c
index f17a9ffcd..133534663 100644 index 21a7bdc88970..1335346635de 100644
--- a/drivers/dma/stm32-mdma.c --- a/drivers/dma/stm32-mdma.c
+++ b/drivers/dma/stm32-mdma.c +++ b/drivers/dma/stm32-mdma.c
@@ -40,7 +40,6 @@ @@ -78,6 +78,7 @@
STM32_MDMA_SHIFT(mask))
#define STM32_MDMA_GISR0 0x0000 /* MDMA Int Status Reg 1 */
-#define STM32_MDMA_GISR1 0x0004 /* MDMA Int Status Reg 2 */
/* MDMA Channel x interrupt/status register */
#define STM32_MDMA_CISR(x) (0x40 + 0x40 * (x)) /* x = 0..62 */
@@ -79,6 +78,7 @@
#define STM32_MDMA_CCR_WEX BIT(14) #define STM32_MDMA_CCR_WEX BIT(14)
#define STM32_MDMA_CCR_HEX BIT(13) #define STM32_MDMA_CCR_HEX BIT(13)
#define STM32_MDMA_CCR_BEX BIT(12) #define STM32_MDMA_CCR_BEX BIT(12)
@ -1760,13 +1752,7 @@ index f17a9ffcd..133534663 100644
#define STM32_MDMA_CCR_PL_MASK GENMASK(7, 6) #define STM32_MDMA_CCR_PL_MASK GENMASK(7, 6)
#define STM32_MDMA_CCR_PL(n) STM32_MDMA_SET(n, \ #define STM32_MDMA_CCR_PL(n) STM32_MDMA_SET(n, \
STM32_MDMA_CCR_PL_MASK) STM32_MDMA_CCR_PL_MASK)
@@ -196,11 +196,13 @@ @@ -200,6 +201,8 @@
#define STM32_MDMA_MAX_BUF_LEN 128
#define STM32_MDMA_MAX_BLOCK_LEN 65536
-#define STM32_MDMA_MAX_CHANNELS 63
+#define STM32_MDMA_MAX_CHANNELS 32
#define STM32_MDMA_MAX_REQUESTS 256
#define STM32_MDMA_MAX_BURST 128 #define STM32_MDMA_MAX_BURST 128
#define STM32_MDMA_VERY_HIGH_PRIORITY 0x3 #define STM32_MDMA_VERY_HIGH_PRIORITY 0x3
@ -1775,7 +1761,7 @@ index f17a9ffcd..133534663 100644
enum stm32_mdma_trigger_mode { enum stm32_mdma_trigger_mode {
STM32_MDMA_BUFFER, STM32_MDMA_BUFFER,
STM32_MDMA_BLOCK, STM32_MDMA_BLOCK,
@@ -227,6 +229,7 @@ struct stm32_mdma_chan_config { @@ -226,6 +229,7 @@ struct stm32_mdma_chan_config {
u32 transfer_config; u32 transfer_config;
u32 mask_addr; u32 mask_addr;
u32 mask_data; u32 mask_data;
@ -1783,7 +1769,7 @@ index f17a9ffcd..133534663 100644
}; };
struct stm32_mdma_hwdesc { struct stm32_mdma_hwdesc {
@@ -252,6 +255,7 @@ struct stm32_mdma_desc { @@ -251,6 +255,7 @@ struct stm32_mdma_desc {
u32 ccr; u32 ccr;
bool cyclic; bool cyclic;
u32 count; u32 count;
@ -1791,7 +1777,7 @@ index f17a9ffcd..133534663 100644
struct stm32_mdma_desc_node node[]; struct stm32_mdma_desc_node node[];
}; };
@@ -276,6 +280,7 @@ struct stm32_mdma_device { @@ -275,6 +280,7 @@ struct stm32_mdma_device {
u32 nr_channels; u32 nr_channels;
u32 nr_requests; u32 nr_requests;
u32 nr_ahb_addr_masks; u32 nr_ahb_addr_masks;
@ -1799,7 +1785,7 @@ index f17a9ffcd..133534663 100644
struct stm32_mdma_chan chan[STM32_MDMA_MAX_CHANNELS]; struct stm32_mdma_chan chan[STM32_MDMA_MAX_CHANNELS];
u32 ahb_addr_masks[]; u32 ahb_addr_masks[];
}; };
@@ -566,13 +571,24 @@ static int stm32_mdma_set_xfer_param(struct stm32_mdma_chan *chan, @@ -565,13 +571,24 @@ static int stm32_mdma_set_xfer_param(struct stm32_mdma_chan *chan,
dst_addr = chan->dma_config.dst_addr; dst_addr = chan->dma_config.dst_addr;
/* Set device data size */ /* Set device data size */
@ -1824,7 +1810,7 @@ index f17a9ffcd..133534663 100644
dst_best_burst = stm32_mdma_get_best_burst(buf_len, tlen, dst_best_burst = stm32_mdma_get_best_burst(buf_len, tlen,
dst_maxburst, dst_maxburst,
dst_addr_width); dst_addr_width);
@@ -615,13 +631,24 @@ static int stm32_mdma_set_xfer_param(struct stm32_mdma_chan *chan, @@ -614,13 +631,24 @@ static int stm32_mdma_set_xfer_param(struct stm32_mdma_chan *chan,
src_addr = chan->dma_config.src_addr; src_addr = chan->dma_config.src_addr;
/* Set device data size */ /* Set device data size */
@ -1849,7 +1835,7 @@ index f17a9ffcd..133534663 100644
src_best_burst = stm32_mdma_get_best_burst(buf_len, tlen, src_best_burst = stm32_mdma_get_best_burst(buf_len, tlen,
src_maxburst, src_maxburst,
src_addr_width); src_addr_width);
@@ -729,6 +756,7 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan, @@ -728,6 +756,7 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan,
{ {
struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
struct dma_slave_config *dma_config = &chan->dma_config; struct dma_slave_config *dma_config = &chan->dma_config;
@ -1857,7 +1843,7 @@ index f17a9ffcd..133534663 100644
struct scatterlist *sg; struct scatterlist *sg;
dma_addr_t src_addr, dst_addr; dma_addr_t src_addr, dst_addr;
u32 ccr, ctcr, ctbr; u32 ccr, ctcr, ctbr;
@@ -751,6 +779,8 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan, @@ -750,6 +779,8 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan,
} else { } else {
src_addr = dma_config->src_addr; src_addr = dma_config->src_addr;
dst_addr = sg_dma_address(sg); dst_addr = sg_dma_address(sg);
@ -1866,7 +1852,7 @@ index f17a9ffcd..133534663 100644
ret = stm32_mdma_set_xfer_param(chan, direction, &ccr, ret = stm32_mdma_set_xfer_param(chan, direction, &ccr,
&ctcr, &ctbr, dst_addr, &ctcr, &ctbr, dst_addr,
sg_dma_len(sg)); sg_dma_len(sg));
@@ -769,8 +799,6 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan, @@ -768,8 +799,6 @@ static int stm32_mdma_setup_xfer(struct stm32_mdma_chan *chan,
/* Enable interrupts */ /* Enable interrupts */
ccr &= ~STM32_MDMA_CCR_IRQ_MASK; ccr &= ~STM32_MDMA_CCR_IRQ_MASK;
ccr |= STM32_MDMA_CCR_TEIE | STM32_MDMA_CCR_CTCIE; ccr |= STM32_MDMA_CCR_TEIE | STM32_MDMA_CCR_CTCIE;
@ -1875,7 +1861,7 @@ index f17a9ffcd..133534663 100644
desc->ccr = ccr; desc->ccr = ccr;
return 0; return 0;
@@ -782,7 +810,9 @@ stm32_mdma_prep_slave_sg(struct dma_chan *c, struct scatterlist *sgl, @@ -781,7 +810,9 @@ stm32_mdma_prep_slave_sg(struct dma_chan *c, struct scatterlist *sgl,
unsigned long flags, void *context) unsigned long flags, void *context)
{ {
struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
@ -1885,7 +1871,7 @@ index f17a9ffcd..133534663 100644
int i, ret; int i, ret;
/* /*
@@ -804,6 +834,20 @@ stm32_mdma_prep_slave_sg(struct dma_chan *c, struct scatterlist *sgl, @@ -803,6 +834,20 @@ stm32_mdma_prep_slave_sg(struct dma_chan *c, struct scatterlist *sgl,
if (ret < 0) if (ret < 0)
goto xfer_setup_err; goto xfer_setup_err;
@ -1906,7 +1892,7 @@ index f17a9ffcd..133534663 100644
desc->cyclic = false; desc->cyclic = false;
return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags); return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags);
@@ -825,9 +869,10 @@ stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr, @@ -824,9 +869,10 @@ stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr,
struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
struct dma_slave_config *dma_config = &chan->dma_config; struct dma_slave_config *dma_config = &chan->dma_config;
@ -1918,7 +1904,7 @@ index f17a9ffcd..133534663 100644
int i, ret; int i, ret;
/* /*
@@ -881,12 +926,29 @@ stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr, @@ -880,12 +926,29 @@ stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr,
desc->ccr = ccr; desc->ccr = ccr;
/* Configure hwdesc list */ /* Configure hwdesc list */
@ -1950,7 +1936,7 @@ index f17a9ffcd..133534663 100644
dst_addr = buf_addr + i * period_len; dst_addr = buf_addr + i * period_len;
} }
@@ -896,6 +958,7 @@ stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr, @@ -895,6 +958,7 @@ stm32_mdma_prep_dma_cyclic(struct dma_chan *c, dma_addr_t buf_addr,
} }
desc->cyclic = true; desc->cyclic = true;
@ -1958,7 +1944,7 @@ index f17a9ffcd..133534663 100644
return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags); return vchan_tx_prep(&chan->vchan, &desc->vdesc, flags);
@@ -1280,14 +1343,28 @@ static size_t stm32_mdma_desc_residue(struct stm32_mdma_chan *chan, @@ -1279,14 +1343,28 @@ static size_t stm32_mdma_desc_residue(struct stm32_mdma_chan *chan,
{ {
struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan); struct stm32_mdma_device *dmadev = stm32_mdma_get_dev(chan);
struct stm32_mdma_hwdesc *hwdesc = desc->node[0].hwdesc; struct stm32_mdma_hwdesc *hwdesc = desc->node[0].hwdesc;
@ -1990,7 +1976,7 @@ index f17a9ffcd..133534663 100644
cbndtr = stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id)); cbndtr = stm32_mdma_read(dmadev, STM32_MDMA_CBNDTR(chan->id));
residue += cbndtr & STM32_MDMA_CBNDTR_BNDT_MASK; residue += cbndtr & STM32_MDMA_CBNDTR_BNDT_MASK;
@@ -1307,24 +1384,36 @@ static enum dma_status stm32_mdma_tx_status(struct dma_chan *c, @@ -1306,24 +1384,36 @@ static enum dma_status stm32_mdma_tx_status(struct dma_chan *c,
struct dma_tx_state *state) struct dma_tx_state *state)
{ {
struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c); struct stm32_mdma_chan *chan = to_stm32_mdma_chan(c);
@ -2032,39 +2018,7 @@ index f17a9ffcd..133534663 100644
dma_set_residue(state, residue); dma_set_residue(state, residue);
spin_unlock_irqrestore(&chan->vchan.lock, flags); spin_unlock_irqrestore(&chan->vchan.lock, flags);
@@ -1345,26 +1434,16 @@ static void stm32_mdma_xfer_end(struct stm32_mdma_chan *chan) @@ -1371,9 +1461,12 @@ static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid)
static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid)
{
struct stm32_mdma_device *dmadev = devid;
- struct stm32_mdma_chan *chan = devid;
+ struct stm32_mdma_chan *chan;
u32 reg, id, ccr, ien, status;
/* Find out which channel generates the interrupt */
status = readl_relaxed(dmadev->base + STM32_MDMA_GISR0);
- if (status) {
- id = __ffs(status);
- } else {
- status = readl_relaxed(dmadev->base + STM32_MDMA_GISR1);
- if (!status) {
- dev_dbg(mdma2dev(dmadev), "spurious it\n");
- return IRQ_NONE;
- }
- id = __ffs(status);
- /*
- * As GISR0 provides status for channel id from 0 to 31,
- * so GISR1 provides status for channel id from 32 to 62
- */
- id += 32;
+ if (!status) {
+ dev_dbg(mdma2dev(dmadev), "spurious it\n");
+ return IRQ_NONE;
}
+ id = __ffs(status);
chan = &dmadev->chan[id];
if (!chan) {
@@ -1382,9 +1461,12 @@ static irqreturn_t stm32_mdma_irq_handler(int irq, void *devid)
if (!(status & ien)) { if (!(status & ien)) {
spin_unlock(&chan->vchan.lock); spin_unlock(&chan->vchan.lock);
@ -2080,7 +2034,7 @@ index f17a9ffcd..133534663 100644
return IRQ_NONE; return IRQ_NONE;
} }
@@ -1484,15 +1566,28 @@ static void stm32_mdma_free_chan_resources(struct dma_chan *c) @@ -1473,15 +1566,28 @@ static void stm32_mdma_free_chan_resources(struct dma_chan *c)
chan->desc_pool = NULL; chan->desc_pool = NULL;
} }
@ -2110,7 +2064,7 @@ index f17a9ffcd..133534663 100644
dev_err(mdma2dev(dmadev), "Bad number of args\n"); dev_err(mdma2dev(dmadev), "Bad number of args\n");
return NULL; return NULL;
} }
@@ -1502,6 +1597,7 @@ static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec, @@ -1491,6 +1597,7 @@ static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec,
config.transfer_config = dma_spec->args[2]; config.transfer_config = dma_spec->args[2];
config.mask_addr = dma_spec->args[3]; config.mask_addr = dma_spec->args[3];
config.mask_data = dma_spec->args[4]; config.mask_data = dma_spec->args[4];
@ -2118,7 +2072,7 @@ index f17a9ffcd..133534663 100644
if (config.request >= dmadev->nr_requests) { if (config.request >= dmadev->nr_requests) {
dev_err(mdma2dev(dmadev), "Bad request line\n"); dev_err(mdma2dev(dmadev), "Bad request line\n");
@@ -1513,7 +1609,7 @@ static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec, @@ -1502,7 +1609,7 @@ static struct dma_chan *stm32_mdma_of_xlate(struct of_phandle_args *dma_spec,
return NULL; return NULL;
} }
@ -2127,7 +2081,7 @@ index f17a9ffcd..133534663 100644
if (!c) { if (!c) {
dev_err(mdma2dev(dmadev), "No more channels available\n"); dev_err(mdma2dev(dmadev), "No more channels available\n");
return NULL; return NULL;
@@ -1642,6 +1738,10 @@ static int stm32_mdma_probe(struct platform_device *pdev) @@ -1631,6 +1738,10 @@ static int stm32_mdma_probe(struct platform_device *pdev)
for (i = 0; i < dmadev->nr_channels; i++) { for (i = 0; i < dmadev->nr_channels; i++) {
chan = &dmadev->chan[i]; chan = &dmadev->chan[i];
chan->id = i; chan->id = i;
@ -2139,5 +2093,5 @@ index f17a9ffcd..133534663 100644
vchan_init(&chan->vchan, dd); vchan_init(&chan->vchan, dd);
} }
-- --
2.25.1 2.17.1

View File

@ -1,9 +1,9 @@
From 924efc211ec362bf6b42a5f18327ad6b8b0652a2 Mon Sep 17 00:00:00 2001 From 8fade81923d0fc70c09d3f2beae3466cc5e71c2d Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 11:53:54 +0200 Date: Thu, 3 Nov 2022 15:28:58 +0100
Subject: [PATCH 07/22] ARM-5.15.24-stm32mp1-r1-HWSPINLOCK Subject: [PATCH 08/22] v5.15-stm32mp-r2 HWSPINLOCK
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../devicetree/bindings/hwlock/hwlock.txt | 27 +++++-- .../devicetree/bindings/hwlock/hwlock.txt | 27 +++++--
.../bindings/hwlock/st,stm32-hwspinlock.yaml | 4 +- .../bindings/hwlock/st,stm32-hwspinlock.yaml | 4 +-
@ -14,7 +14,7 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
6 files changed, 131 insertions(+), 50 deletions(-) 6 files changed, 131 insertions(+), 50 deletions(-)
diff --git a/Documentation/devicetree/bindings/hwlock/hwlock.txt b/Documentation/devicetree/bindings/hwlock/hwlock.txt diff --git a/Documentation/devicetree/bindings/hwlock/hwlock.txt b/Documentation/devicetree/bindings/hwlock/hwlock.txt
index 085d1f5c9..e98088a40 100644 index 085d1f5c916a..e98088a409ba 100644
--- a/Documentation/devicetree/bindings/hwlock/hwlock.txt --- a/Documentation/devicetree/bindings/hwlock/hwlock.txt
+++ b/Documentation/devicetree/bindings/hwlock/hwlock.txt +++ b/Documentation/devicetree/bindings/hwlock/hwlock.txt
@@ -13,7 +13,7 @@ hwlock providers: @@ -13,7 +13,7 @@ hwlock providers:
@ -69,7 +69,7 @@ index 085d1f5c9..e98088a40 100644
+ }; + };
\ No newline at end of file \ No newline at end of file
diff --git a/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml b/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml diff --git a/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml b/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml
index 47cf9c8d9..539a1dc05 100644 index 47cf9c8d97e9..539a1dc052b7 100644
--- a/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml --- a/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml
+++ b/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml +++ b/Documentation/devicetree/bindings/hwlock/st,stm32-hwspinlock.yaml
@@ -12,7 +12,7 @@ maintainers: @@ -12,7 +12,7 @@ maintainers:
@ -91,7 +91,7 @@ index 47cf9c8d9..539a1dc05 100644
clocks = <&rcc HSEM>; clocks = <&rcc HSEM>;
clock-names = "hsem"; clock-names = "hsem";
diff --git a/Documentation/locking/hwspinlock.rst b/Documentation/locking/hwspinlock.rst diff --git a/Documentation/locking/hwspinlock.rst b/Documentation/locking/hwspinlock.rst
index 6f03713b7..605bd2dc8 100644 index 6f03713b7003..605bd2dc8a03 100644
--- a/Documentation/locking/hwspinlock.rst --- a/Documentation/locking/hwspinlock.rst
+++ b/Documentation/locking/hwspinlock.rst +++ b/Documentation/locking/hwspinlock.rst
@@ -54,9 +54,11 @@ Should be called from a process context (might sleep). @@ -54,9 +54,11 @@ Should be called from a process context (might sleep).
@ -124,7 +124,7 @@ index 6f03713b7..605bd2dc8 100644
}; };
diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c diff --git a/drivers/hwspinlock/hwspinlock_core.c b/drivers/hwspinlock/hwspinlock_core.c
index fd5f5c5a5..a2197af89 100644 index fd5f5c5a5244..a2197af8973d 100644
--- a/drivers/hwspinlock/hwspinlock_core.c --- a/drivers/hwspinlock/hwspinlock_core.c
+++ b/drivers/hwspinlock/hwspinlock_core.c +++ b/drivers/hwspinlock/hwspinlock_core.c
@@ -29,6 +29,8 @@ @@ -29,6 +29,8 @@
@ -309,7 +309,7 @@ index fd5f5c5a5..a2197af89 100644
return ret; return ret;
} }
diff --git a/drivers/hwspinlock/hwspinlock_internal.h b/drivers/hwspinlock/hwspinlock_internal.h diff --git a/drivers/hwspinlock/hwspinlock_internal.h b/drivers/hwspinlock/hwspinlock_internal.h
index 29892767b..e1f9c9600 100644 index 29892767bb7a..e1f9c9600635 100644
--- a/drivers/hwspinlock/hwspinlock_internal.h --- a/drivers/hwspinlock/hwspinlock_internal.h
+++ b/drivers/hwspinlock/hwspinlock_internal.h +++ b/drivers/hwspinlock/hwspinlock_internal.h
@@ -35,11 +35,13 @@ struct hwspinlock_ops { @@ -35,11 +35,13 @@ struct hwspinlock_ops {
@ -327,7 +327,7 @@ index 29892767b..e1f9c9600 100644
}; };
diff --git a/drivers/hwspinlock/stm32_hwspinlock.c b/drivers/hwspinlock/stm32_hwspinlock.c diff --git a/drivers/hwspinlock/stm32_hwspinlock.c b/drivers/hwspinlock/stm32_hwspinlock.c
index 3ad0ce0da..5bd11a7fa 100644 index 3ad0ce0da4d9..5bd11a7fab65 100644
--- a/drivers/hwspinlock/stm32_hwspinlock.c --- a/drivers/hwspinlock/stm32_hwspinlock.c
+++ b/drivers/hwspinlock/stm32_hwspinlock.c +++ b/drivers/hwspinlock/stm32_hwspinlock.c
@@ -54,8 +54,23 @@ static const struct hwspinlock_ops stm32_hwspinlock_ops = { @@ -54,8 +54,23 @@ static const struct hwspinlock_ops stm32_hwspinlock_ops = {
@ -427,5 +427,5 @@ index 3ad0ce0da..5bd11a7fa 100644
.name = "stm32_hwspinlock", .name = "stm32_hwspinlock",
.of_match_table = stm32_hwpinlock_ids, .of_match_table = stm32_hwpinlock_ids,
-- --
2.25.1 2.17.1

View File

@ -1,9 +1,9 @@
From d88b31f16b525087c38623bda52699ff7859dcf6 Mon Sep 17 00:00:00 2001 From 69ed3aa4864f05afff66ffd7596de3b45d739360 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 11:59:44 +0200 Date: Thu, 3 Nov 2022 15:55:56 +0100
Subject: [PATCH 11/22] ARM-5.15.24-stm32mp1-r1-MFD Subject: [PATCH 12/22] v5.15-stm32mp-r2 MFD
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../bindings/mfd/st,stm32-lptimer.yaml | 3 + .../bindings/mfd/st,stm32-lptimer.yaml | 3 +
.../bindings/mfd/st,stm32mp1-pwr.txt | 57 +++ .../bindings/mfd/st,stm32mp1-pwr.txt | 57 +++
@ -19,7 +19,7 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
create mode 100644 drivers/mfd/stm32-pwr.c create mode 100644 drivers/mfd/stm32-pwr.c
diff --git a/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml b/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml diff --git a/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml b/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml
index 8bcea8dd7..6e518ae12 100644 index 8bcea8dd7d90..6e518ae12e7f 100644
--- a/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml --- a/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml
+++ b/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml +++ b/Documentation/devicetree/bindings/mfd/st,stm32-lptimer.yaml
@@ -44,6 +44,9 @@ properties: @@ -44,6 +44,9 @@ properties:
@ -34,7 +34,7 @@ index 8bcea8dd7..6e518ae12 100644
diff --git a/Documentation/devicetree/bindings/mfd/st,stm32mp1-pwr.txt b/Documentation/devicetree/bindings/mfd/st,stm32mp1-pwr.txt diff --git a/Documentation/devicetree/bindings/mfd/st,stm32mp1-pwr.txt b/Documentation/devicetree/bindings/mfd/st,stm32mp1-pwr.txt
new file mode 100644 new file mode 100644
index 000000000..b5f414a19 index 000000000000..b5f414a19120
--- /dev/null --- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/st,stm32mp1-pwr.txt +++ b/Documentation/devicetree/bindings/mfd/st,stm32mp1-pwr.txt
@@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
@ -96,7 +96,7 @@ index 000000000..b5f414a19
+}; +};
+ +
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index d2f345245..181730a69 100644 index d2f345245538..181730a693a1 100644
--- a/drivers/mfd/Kconfig --- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig
@@ -2042,6 +2042,16 @@ config MFD_STPMIC1 @@ -2042,6 +2042,16 @@ config MFD_STPMIC1
@ -117,7 +117,7 @@ index d2f345245..181730a69 100644
tristate "Support for STMicroelectronics Multi-Function eXpander (STMFX)" tristate "Support for STMicroelectronics Multi-Function eXpander (STMFX)"
depends on I2C depends on I2C
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 2ba6646e8..68201ea8e 100644 index 2ba6646e874c..68201ea8e037 100644
--- a/drivers/mfd/Makefile --- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile
@@ -255,6 +255,7 @@ obj-$(CONFIG_MFD_SUN4I_GPADC) += sun4i-gpadc.o @@ -255,6 +255,7 @@ obj-$(CONFIG_MFD_SUN4I_GPADC) += sun4i-gpadc.o
@ -130,7 +130,7 @@ index 2ba6646e8..68201ea8e 100644
obj-$(CONFIG_RAVE_SP_CORE) += rave-sp.o obj-$(CONFIG_RAVE_SP_CORE) += rave-sp.o
diff --git a/drivers/mfd/stm32-pwr.c b/drivers/mfd/stm32-pwr.c diff --git a/drivers/mfd/stm32-pwr.c b/drivers/mfd/stm32-pwr.c
new file mode 100644 new file mode 100644
index 000000000..c06e2fb6c index 000000000000..c06e2fb6c0eb
--- /dev/null --- /dev/null
+++ b/drivers/mfd/stm32-pwr.c +++ b/drivers/mfd/stm32-pwr.c
@@ -0,0 +1,423 @@ @@ -0,0 +1,423 @@
@ -558,7 +558,7 @@ index 000000000..c06e2fb6c
+arch_initcall(stm32_pwr_init); +arch_initcall(stm32_pwr_init);
+module_exit(stm32_pwr_exit); +module_exit(stm32_pwr_exit);
diff --git a/drivers/mfd/stmfx.c b/drivers/mfd/stmfx.c diff --git a/drivers/mfd/stmfx.c b/drivers/mfd/stmfx.c
index e095a3930..b411d2958 100644 index e095a3930142..b411d2958c18 100644
--- a/drivers/mfd/stmfx.c --- a/drivers/mfd/stmfx.c
+++ b/drivers/mfd/stmfx.c +++ b/drivers/mfd/stmfx.c
@@ -81,13 +81,11 @@ static struct mfd_cell stmfx_cells[] = { @@ -81,13 +81,11 @@ static struct mfd_cell stmfx_cells[] = {
@ -576,7 +576,7 @@ index e095a3930..b411d2958 100644
.resources = stmfx_ts_resources, .resources = stmfx_ts_resources,
.num_resources = ARRAY_SIZE(stmfx_ts_resources), .num_resources = ARRAY_SIZE(stmfx_ts_resources),
diff --git a/drivers/mfd/stpmic1.c b/drivers/mfd/stpmic1.c diff --git a/drivers/mfd/stpmic1.c b/drivers/mfd/stpmic1.c
index eb3da558c..40eef5d18 100644 index eb3da558c3fb..40eef5d18b90 100644
--- a/drivers/mfd/stpmic1.c --- a/drivers/mfd/stpmic1.c
+++ b/drivers/mfd/stpmic1.c +++ b/drivers/mfd/stpmic1.c
@@ -170,6 +170,9 @@ static int stpmic1_suspend(struct device *dev) @@ -170,6 +170,9 @@ static int stpmic1_suspend(struct device *dev)
@ -600,7 +600,7 @@ index eb3da558c..40eef5d18 100644
return 0; return 0;
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index 7b1d27072..e2c98c66b 100644 index 7b1d270722ba..e2c98c66bf9f 100644
--- a/drivers/mfd/wm8994-core.c --- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c +++ b/drivers/mfd/wm8994-core.c
@@ -185,6 +185,12 @@ static int wm8994_resume(struct device *dev) @@ -185,6 +185,12 @@ static int wm8994_resume(struct device *dev)
@ -617,7 +617,7 @@ index 7b1d27072..e2c98c66b 100644
wm8994->supplies); wm8994->supplies);
if (ret != 0) { if (ret != 0) {
diff --git a/include/linux/mfd/stm32-timers.h b/include/linux/mfd/stm32-timers.h diff --git a/include/linux/mfd/stm32-timers.h b/include/linux/mfd/stm32-timers.h
index f8db83aed..f48f04dc4 100644 index f8db83aedb2b..f48f04dc4187 100644
--- a/include/linux/mfd/stm32-timers.h --- a/include/linux/mfd/stm32-timers.h
+++ b/include/linux/mfd/stm32-timers.h +++ b/include/linux/mfd/stm32-timers.h
@@ -31,6 +31,7 @@ @@ -31,6 +31,7 @@
@ -629,5 +629,5 @@ index f8db83aed..f48f04dc4 100644
#define TIM_CR1_CEN BIT(0) /* Counter Enable */ #define TIM_CR1_CEN BIT(0) /* Counter Enable */
#define TIM_CR1_DIR BIT(4) /* Counter Direction */ #define TIM_CR1_DIR BIT(4) /* Counter Direction */
-- --
2.25.1 2.17.1

View File

@ -0,0 +1,341 @@
From 99e2eb7f37c25b7e9a5e0b18af405d8bae95df12 Mon Sep 17 00:00:00 2001
From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Thu, 3 Nov 2022 15:56:26 +0100
Subject: [PATCH 13/22] v5.15-stm32mp-r2 MMC
Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
---
.../devicetree/bindings/mmc/arm,pl18x.yaml | 6 ++
drivers/mmc/host/mmci.c | 7 +-
drivers/mmc/host/mmci_stm32_sdmmc.c | 93 +++++++++++++++----
drivers/mtd/nand/raw/stm32_fmc2_nand.c | 40 +++++++-
4 files changed, 125 insertions(+), 21 deletions(-)
diff --git a/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml b/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml
index 47595cb483be..eed54bee7665 100644
--- a/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml
+++ b/Documentation/devicetree/bindings/mmc/arm,pl18x.yaml
@@ -53,6 +53,12 @@ properties:
items:
- const: arm,pl18x
- const: arm,primecell
+ - description: Entry for STMicroelectronics variant of PL18x.
+ This dedicated compatible is used by bootloaders.
+ items:
+ - const: st,stm32-sdmmc2
+ - const: arm,pl18x
+ - const: arm,primecell
clocks:
description: One or two clocks, the "apb_pclk" and the "MCLK"
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 3765e2f4ad98..3d416c4edc7c 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -280,7 +280,7 @@ static struct variant_data variant_stm32_sdmmc = {
static struct variant_data variant_stm32_sdmmcv2 = {
.fifosize = 16 * 4,
.fifohalfsize = 8 * 4,
- .f_max = 208000000,
+ .f_max = 267000000,
.stm32_clkdiv = true,
.cmdreg_cpsm_enable = MCI_CPSM_STM32_ENABLE,
.cmdreg_lrsp_crc = MCI_CPSM_STM32_LRSP_CRC,
@@ -2431,6 +2431,11 @@ static const struct amba_id mmci_ids[] = {
.mask = 0xf0ffffff,
.data = &variant_stm32_sdmmcv2,
},
+ {
+ .id = 0x20253180,
+ .mask = 0xf0ffffff,
+ .data = &variant_stm32_sdmmcv2,
+ },
/* Qualcomm variants */
{
.id = 0x00051180,
diff --git a/drivers/mmc/host/mmci_stm32_sdmmc.c b/drivers/mmc/host/mmci_stm32_sdmmc.c
index 4cceb9bab036..60bca78a72b1 100644
--- a/drivers/mmc/host/mmci_stm32_sdmmc.c
+++ b/drivers/mmc/host/mmci_stm32_sdmmc.c
@@ -43,6 +43,9 @@ struct sdmmc_lli_desc {
struct sdmmc_idma {
dma_addr_t sg_dma;
void *sg_cpu;
+ dma_addr_t bounce_dma_addr;
+ void *bounce_buf;
+ bool use_bounce_buffer;
};
struct sdmmc_dlyb {
@@ -54,6 +57,8 @@ struct sdmmc_dlyb {
static int sdmmc_idma_validate_data(struct mmci_host *host,
struct mmc_data *data)
{
+ struct sdmmc_idma *idma = host->dma_priv;
+ struct device *dev = mmc_dev(host->mmc);
struct scatterlist *sg;
int i;
@@ -61,41 +66,69 @@ static int sdmmc_idma_validate_data(struct mmci_host *host,
* idma has constraints on idmabase & idmasize for each element
* excepted the last element which has no constraint on idmasize
*/
+ idma->use_bounce_buffer = false;
for_each_sg(data->sg, sg, data->sg_len - 1, i) {
if (!IS_ALIGNED(sg->offset, sizeof(u32)) ||
!IS_ALIGNED(sg->length, SDMMC_IDMA_BURST)) {
- dev_err(mmc_dev(host->mmc),
+ dev_dbg(mmc_dev(host->mmc),
"unaligned scatterlist: ofst:%x length:%d\n",
data->sg->offset, data->sg->length);
- return -EINVAL;
+ goto use_bounce_buffer;
}
}
if (!IS_ALIGNED(sg->offset, sizeof(u32))) {
- dev_err(mmc_dev(host->mmc),
+ dev_dbg(mmc_dev(host->mmc),
"unaligned last scatterlist: ofst:%x length:%d\n",
data->sg->offset, data->sg->length);
- return -EINVAL;
+ goto use_bounce_buffer;
}
+ return 0;
+
+use_bounce_buffer:
+ if (!idma->bounce_buf) {
+ idma->bounce_buf = dmam_alloc_coherent(dev,
+ host->mmc->max_req_size,
+ &idma->bounce_dma_addr,
+ GFP_KERNEL);
+ if (!idma->bounce_buf) {
+ dev_err(dev, "Unable to map allocate DMA bounce buffer.\n");
+ return -ENOMEM;
+ }
+ }
+
+ idma->use_bounce_buffer = true;
+
return 0;
}
static int _sdmmc_idma_prep_data(struct mmci_host *host,
struct mmc_data *data)
{
- int n_elem;
+ struct sdmmc_idma *idma = host->dma_priv;
- n_elem = dma_map_sg(mmc_dev(host->mmc),
- data->sg,
- data->sg_len,
- mmc_get_dma_dir(data));
+ if (idma->use_bounce_buffer) {
+ if (data->flags & MMC_DATA_WRITE) {
+ unsigned int xfer_bytes = data->blksz * data->blocks;
- if (!n_elem) {
- dev_err(mmc_dev(host->mmc), "dma_map_sg failed\n");
- return -EINVAL;
- }
+ sg_copy_to_buffer(data->sg, data->sg_len,
+ idma->bounce_buf, xfer_bytes);
+ dma_wmb();
+ }
+ } else {
+ int n_elem;
+
+ n_elem = dma_map_sg(mmc_dev(host->mmc),
+ data->sg,
+ data->sg_len,
+ mmc_get_dma_dir(data));
+ if (!n_elem) {
+ dev_err(mmc_dev(host->mmc), "dma_map_sg failed\n");
+ return -EINVAL;
+ }
+ }
return 0;
}
@@ -112,8 +145,19 @@ static int sdmmc_idma_prep_data(struct mmci_host *host,
static void sdmmc_idma_unprep_data(struct mmci_host *host,
struct mmc_data *data, int err)
{
- dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
- mmc_get_dma_dir(data));
+ struct sdmmc_idma *idma = host->dma_priv;
+
+ if (idma->use_bounce_buffer) {
+ if (data->flags & MMC_DATA_READ) {
+ unsigned int xfer_bytes = data->blksz * data->blocks;
+
+ sg_copy_from_buffer(data->sg, data->sg_len,
+ idma->bounce_buf, xfer_bytes);
+ }
+ } else {
+ dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
+ mmc_get_dma_dir(data));
+ }
}
static int sdmmc_idma_setup(struct mmci_host *host)
@@ -137,6 +181,8 @@ static int sdmmc_idma_setup(struct mmci_host *host)
host->mmc->max_segs = SDMMC_LLI_BUF_LEN /
sizeof(struct sdmmc_lli_desc);
host->mmc->max_seg_size = host->variant->stm32_idmabsize_mask;
+
+ host->mmc->max_req_size = SZ_1M;
} else {
host->mmc->max_segs = 1;
host->mmc->max_seg_size = host->mmc->max_req_size;
@@ -154,8 +200,16 @@ static int sdmmc_idma_start(struct mmci_host *host, unsigned int *datactrl)
struct scatterlist *sg;
int i;
- if (!host->variant->dma_lli || data->sg_len == 1) {
- writel_relaxed(sg_dma_address(data->sg),
+ if (!host->variant->dma_lli || data->sg_len == 1 ||
+ idma->use_bounce_buffer) {
+ u32 dma_addr;
+
+ if (idma->use_bounce_buffer)
+ dma_addr = idma->bounce_dma_addr;
+ else
+ dma_addr = sg_dma_address(data->sg);
+
+ writel_relaxed(dma_addr,
host->base + MMCI_STM32_IDMABASE0R);
writel_relaxed(MMCI_STM32_IDMAEN,
host->base + MMCI_STM32_IDMACTRLR);
@@ -241,11 +295,12 @@ static void mmci_sdmmc_set_clkreg(struct mmci_host *host, unsigned int desired)
/*
* SDMMC_FBCK is selected when an external Delay Block is needed
- * with SDR104.
+ * with SDR104 or HS200.
*/
if (host->mmc->ios.timing >= MMC_TIMING_UHS_SDR50) {
clk |= MCI_STM32_CLK_BUSSPEED;
- if (host->mmc->ios.timing == MMC_TIMING_UHS_SDR104) {
+ if (host->mmc->ios.timing == MMC_TIMING_UHS_SDR104 ||
+ host->mmc->ios.timing == MMC_TIMING_MMC_HS200) {
clk &= ~MCI_STM32_CLK_SEL_MSK;
clk |= MCI_STM32_CLK_SELFBCK;
}
diff --git a/drivers/mtd/nand/raw/stm32_fmc2_nand.c b/drivers/mtd/nand/raw/stm32_fmc2_nand.c
index 1c277fbb91f2..733f9857e801 100644
--- a/drivers/mtd/nand/raw/stm32_fmc2_nand.c
+++ b/drivers/mtd/nand/raw/stm32_fmc2_nand.c
@@ -9,6 +9,7 @@
#include <linux/dmaengine.h>
#include <linux/dma-mapping.h>
#include <linux/errno.h>
+#include <linux/gpio/consumer.h>
#include <linux/interrupt.h>
#include <linux/iopoll.h>
#include <linux/mfd/syscon.h>
@@ -231,6 +232,7 @@ struct stm32_fmc2_timings {
struct stm32_fmc2_nand {
struct nand_chip chip;
+ struct gpio_desc *wp_gpio;
struct stm32_fmc2_timings timings;
int ncs;
int cs_used[FMC2_MAX_CE];
@@ -1747,6 +1749,18 @@ static const struct nand_controller_ops stm32_fmc2_nfc_controller_ops = {
.setup_interface = stm32_fmc2_nfc_setup_interface,
};
+static void stm32_fmc2_nfc_wp_enable(struct stm32_fmc2_nand *nand)
+{
+ if (nand->wp_gpio)
+ gpiod_set_value(nand->wp_gpio, 1);
+}
+
+static void stm32_fmc2_nfc_wp_disable(struct stm32_fmc2_nand *nand)
+{
+ if (nand->wp_gpio)
+ gpiod_set_value(nand->wp_gpio, 0);
+}
+
static int stm32_fmc2_nfc_parse_child(struct stm32_fmc2_nfc *nfc,
struct device_node *dn)
{
@@ -1785,6 +1799,18 @@ static int stm32_fmc2_nfc_parse_child(struct stm32_fmc2_nfc *nfc,
nand->cs_used[i] = cs;
}
+ nand->wp_gpio = devm_gpiod_get_from_of_node(nfc->dev, dn,
+ "wp-gpios", 0,
+ GPIOD_OUT_HIGH, "wp");
+ if (IS_ERR(nand->wp_gpio)) {
+ ret = PTR_ERR(nand->wp_gpio);
+ if (ret != -ENOENT)
+ return dev_err_probe(nfc->dev, ret,
+ "failed to request WP GPIO\n");
+
+ nand->wp_gpio = NULL;
+ }
+
nand_set_flash_node(&nand->chip, dn);
return 0;
@@ -1960,10 +1986,12 @@ static int stm32_fmc2_nfc_probe(struct platform_device *pdev)
chip->options |= NAND_BUSWIDTH_AUTO | NAND_NO_SUBPAGE_WRITE |
NAND_USES_DMA;
+ stm32_fmc2_nfc_wp_disable(nand);
+
/* Scan to find existence of the device */
ret = nand_scan(chip, nand->ncs);
if (ret)
- goto err_release_dma;
+ goto err_wp_enable;
ret = mtd_device_register(mtd, NULL, 0);
if (ret)
@@ -1976,6 +2004,9 @@ static int stm32_fmc2_nfc_probe(struct platform_device *pdev)
err_nand_cleanup:
nand_cleanup(chip);
+err_wp_enable:
+ stm32_fmc2_nfc_wp_enable(nand);
+
err_release_dma:
if (nfc->dma_ecc_ch)
dma_release_channel(nfc->dma_ecc_ch);
@@ -2016,15 +2047,20 @@ static int stm32_fmc2_nfc_remove(struct platform_device *pdev)
clk_disable_unprepare(nfc->clk);
+ stm32_fmc2_nfc_wp_enable(nand);
+
return 0;
}
static int __maybe_unused stm32_fmc2_nfc_suspend(struct device *dev)
{
struct stm32_fmc2_nfc *nfc = dev_get_drvdata(dev);
+ struct stm32_fmc2_nand *nand = &nfc->nand;
clk_disable_unprepare(nfc->clk);
+ stm32_fmc2_nfc_wp_enable(nand);
+
pinctrl_pm_select_sleep_state(dev);
return 0;
@@ -2046,6 +2082,8 @@ static int __maybe_unused stm32_fmc2_nfc_resume(struct device *dev)
stm32_fmc2_nfc_init(nfc);
+ stm32_fmc2_nfc_wp_disable(nand);
+
for (chip_cs = 0; chip_cs < FMC2_MAX_CE; chip_cs++) {
if (!(nfc->cs_assigned & BIT(chip_cs)))
continue;
--
2.17.1

View File

@ -1,9 +1,9 @@
From 004f2714f71a2ebf3f233b3fae5a3e0e14b5e68e Mon Sep 17 00:00:00 2001 From df5b54b2fc266fd51fff7130ee8707027e2aa3ea Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:01:13 +0200 Date: Thu, 3 Nov 2022 15:58:41 +0100
Subject: [PATCH 14/22] ARM-5.15.24-stm32mp1-r1-PERF Subject: [PATCH 15/22] v5.15-stm32mp-r2 PERF
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
Documentation/admin-guide/perf/index.rst | 1 + Documentation/admin-guide/perf/index.rst | 1 +
.../admin-guide/perf/stm32-ddr-pmu.rst | 44 ++ .../admin-guide/perf/stm32-ddr-pmu.rst | 44 ++
@ -17,7 +17,7 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
create mode 100644 drivers/perf/stm32_ddr_pmu.c create mode 100644 drivers/perf/stm32_ddr_pmu.c
diff --git a/Documentation/admin-guide/perf/index.rst b/Documentation/admin-guide/perf/index.rst diff --git a/Documentation/admin-guide/perf/index.rst b/Documentation/admin-guide/perf/index.rst
index 5a8f2529a..9f68f68be 100644 index 5a8f2529a033..9f68f68be161 100644
--- a/Documentation/admin-guide/perf/index.rst --- a/Documentation/admin-guide/perf/index.rst
+++ b/Documentation/admin-guide/perf/index.rst +++ b/Documentation/admin-guide/perf/index.rst
@@ -11,6 +11,7 @@ Performance monitor support @@ -11,6 +11,7 @@ Performance monitor support
@ -30,7 +30,7 @@ index 5a8f2529a..9f68f68be 100644
xgene-pmu xgene-pmu
diff --git a/Documentation/admin-guide/perf/stm32-ddr-pmu.rst b/Documentation/admin-guide/perf/stm32-ddr-pmu.rst diff --git a/Documentation/admin-guide/perf/stm32-ddr-pmu.rst b/Documentation/admin-guide/perf/stm32-ddr-pmu.rst
new file mode 100644 new file mode 100644
index 000000000..db647fc1a index 000000000000..db647fc1acad
--- /dev/null --- /dev/null
+++ b/Documentation/admin-guide/perf/stm32-ddr-pmu.rst +++ b/Documentation/admin-guide/perf/stm32-ddr-pmu.rst
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
@ -80,7 +80,7 @@ index 000000000..db647fc1a
+ +
diff --git a/Documentation/devicetree/bindings/perf/stm32-ddr-pmu.yaml b/Documentation/devicetree/bindings/perf/stm32-ddr-pmu.yaml diff --git a/Documentation/devicetree/bindings/perf/stm32-ddr-pmu.yaml b/Documentation/devicetree/bindings/perf/stm32-ddr-pmu.yaml
new file mode 100644 new file mode 100644
index 000000000..085f2886e index 000000000000..085f2886e580
--- /dev/null --- /dev/null
+++ b/Documentation/devicetree/bindings/perf/stm32-ddr-pmu.yaml +++ b/Documentation/devicetree/bindings/perf/stm32-ddr-pmu.yaml
@@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
@ -129,7 +129,7 @@ index 000000000..085f2886e
+ }; + };
+... +...
diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
index 77522e5ef..fb55e0bbf 100644 index 77522e5efe11..fb55e0bbfb90 100644
--- a/drivers/perf/Kconfig --- a/drivers/perf/Kconfig
+++ b/drivers/perf/Kconfig +++ b/drivers/perf/Kconfig
@@ -106,6 +106,13 @@ config QCOM_L3_PMU @@ -106,6 +106,13 @@ config QCOM_L3_PMU
@ -147,7 +147,7 @@ index 77522e5ef..fb55e0bbf 100644
tristate "Cavium ThunderX2 SoC PMU UNCORE" tristate "Cavium ThunderX2 SoC PMU UNCORE"
depends on ARCH_THUNDER2 && ARM64 && ACPI && NUMA depends on ARCH_THUNDER2 && ARM64 && ACPI && NUMA
diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile
index 5260b116c..f1d363307 100644 index 5260b116c7da..f1d3633075b7 100644
--- a/drivers/perf/Makefile --- a/drivers/perf/Makefile
+++ b/drivers/perf/Makefile +++ b/drivers/perf/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_FSL_IMX8_DDR_PMU) += fsl_imx8_ddr_perf.o @@ -10,6 +10,7 @@ obj-$(CONFIG_FSL_IMX8_DDR_PMU) += fsl_imx8_ddr_perf.o
@ -160,7 +160,7 @@ index 5260b116c..f1d363307 100644
obj-$(CONFIG_ARM_SPE_PMU) += arm_spe_pmu.o obj-$(CONFIG_ARM_SPE_PMU) += arm_spe_pmu.o
diff --git a/drivers/perf/stm32_ddr_pmu.c b/drivers/perf/stm32_ddr_pmu.c diff --git a/drivers/perf/stm32_ddr_pmu.c b/drivers/perf/stm32_ddr_pmu.c
new file mode 100644 new file mode 100644
index 000000000..c0082109a index 000000000000..c0082109aa16
--- /dev/null --- /dev/null
+++ b/drivers/perf/stm32_ddr_pmu.c +++ b/drivers/perf/stm32_ddr_pmu.c
@@ -0,0 +1,439 @@ @@ -0,0 +1,439 @@
@ -604,5 +604,5 @@ index 000000000..c0082109a
+MODULE_AUTHOR("Gerald Baeza <gerald.baeza@st.com>"); +MODULE_AUTHOR("Gerald Baeza <gerald.baeza@st.com>");
+MODULE_LICENSE("GPL v2"); +MODULE_LICENSE("GPL v2");
-- --
2.25.1 2.17.1

View File

@ -1,24 +1,24 @@
From 36353ea45646109b55656e806ea70c10fce2453b Mon Sep 17 00:00:00 2001 From f593955537b76035054bfc42586146cd974c9ae3 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:04:31 +0200 Date: Thu, 3 Nov 2022 15:59:56 +0100
Subject: [PATCH 15/22] ARM-5.15.24-stm32mp1-r1-PHY-USB Subject: [PATCH 16/22] v5.15-stm32mp-r2 PHY-USB
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../bindings/phy/phy-stm32-usbphyc.yaml | 133 +++ .../bindings/phy/phy-stm32-usbphyc.yaml | 133 +++
.../devicetree/bindings/usb/dwc2.yaml | 33 +- .../devicetree/bindings/usb/dwc2.yaml | 33 +-
.../devicetree/bindings/usb/generic-ehci.yaml | 5 + .../devicetree/bindings/usb/generic-ehci.yaml | 5 +
.../devicetree/bindings/usb/generic-ohci.yaml | 5 + .../devicetree/bindings/usb/generic-ohci.yaml | 5 +
.../bindings/usb/st,typec-stm32g0.yaml | 83 ++ .../bindings/usb/st,typec-stm32g0.yaml | 83 ++
drivers/phy/st/phy-stm32-usbphyc.c | 232 ++++- drivers/phy/st/phy-stm32-usbphyc.c | 233 +++++-
drivers/usb/core/hcd.c | 9 +- drivers/usb/core/hcd.c | 9 +-
drivers/usb/core/phy.c | 22 +- drivers/usb/core/phy.c | 22 +-
drivers/usb/core/phy.h | 6 +- drivers/usb/core/phy.h | 6 +-
drivers/usb/dwc2/core.h | 24 +- drivers/usb/dwc2/core.h | 22 +-
drivers/usb/dwc2/core_intr.c | 3 +- drivers/usb/dwc2/core_intr.c | 3 +-
drivers/usb/dwc2/debugfs.c | 4 +- drivers/usb/dwc2/debugfs.c | 4 +-
drivers/usb/dwc2/drd.c | 85 +- drivers/usb/dwc2/drd.c | 79 +-
drivers/usb/dwc2/gadget.c | 5 +- drivers/usb/dwc2/gadget.c | 2 +-
drivers/usb/dwc2/hcd.c | 61 +- drivers/usb/dwc2/hcd.c | 61 +-
drivers/usb/dwc2/params.c | 75 +- drivers/usb/dwc2/params.c | 75 +-
drivers/usb/dwc2/platform.c | 82 +- drivers/usb/dwc2/platform.c | 82 +-
@ -26,15 +26,15 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
drivers/usb/host/ohci-platform.c | 14 +- drivers/usb/host/ohci-platform.c | 14 +-
drivers/usb/typec/ucsi/Kconfig | 10 + drivers/usb/typec/ucsi/Kconfig | 10 +
drivers/usb/typec/ucsi/Makefile | 1 + drivers/usb/typec/ucsi/Makefile | 1 +
drivers/usb/typec/ucsi/ucsi.c | 42 +- drivers/usb/typec/ucsi/ucsi.c | 49 +-
drivers/usb/typec/ucsi/ucsi.h | 2 + drivers/usb/typec/ucsi/ucsi.h | 2 +
drivers/usb/typec/ucsi/ucsi_stm32g0.c | 801 ++++++++++++++++++ drivers/usb/typec/ucsi/ucsi_stm32g0.c | 770 ++++++++++++++++++
24 files changed, 1584 insertions(+), 169 deletions(-) 24 files changed, 1551 insertions(+), 168 deletions(-)
create mode 100644 Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml create mode 100644 Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml
create mode 100644 drivers/usb/typec/ucsi/ucsi_stm32g0.c create mode 100644 drivers/usb/typec/ucsi/ucsi_stm32g0.c
diff --git a/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml b/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml diff --git a/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml b/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml
index 3329f1d33..750ce7074 100644 index 3329f1d33a4f..750ce7074648 100644
--- a/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml --- a/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml
+++ b/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml +++ b/Documentation/devicetree/bindings/phy/phy-stm32-usbphyc.yaml
@@ -74,6 +74,10 @@ patternProperties: @@ -74,6 +74,10 @@ patternProperties:
@ -199,7 +199,7 @@ index 3329f1d33..750ce7074 100644
}; };
... ...
diff --git a/Documentation/devicetree/bindings/usb/dwc2.yaml b/Documentation/devicetree/bindings/usb/dwc2.yaml diff --git a/Documentation/devicetree/bindings/usb/dwc2.yaml b/Documentation/devicetree/bindings/usb/dwc2.yaml
index 10c7d9b6c..882a2f1e0 100644 index 10c7d9b6cc53..882a2f1e0738 100644
--- a/Documentation/devicetree/bindings/usb/dwc2.yaml --- a/Documentation/devicetree/bindings/usb/dwc2.yaml
+++ b/Documentation/devicetree/bindings/usb/dwc2.yaml +++ b/Documentation/devicetree/bindings/usb/dwc2.yaml
@@ -9,6 +9,9 @@ title: DesignWare HS OTG USB 2.0 controller Bindings @@ -9,6 +9,9 @@ title: DesignWare HS OTG USB 2.0 controller Bindings
@ -258,10 +258,10 @@ index 10c7d9b6c..882a2f1e0 100644
- compatible - compatible
- reg - reg
diff --git a/Documentation/devicetree/bindings/usb/generic-ehci.yaml b/Documentation/devicetree/bindings/usb/generic-ehci.yaml diff --git a/Documentation/devicetree/bindings/usb/generic-ehci.yaml b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
index 891349762..c134aabec 100644 index cb5da1df8d40..0b12acf804ec 100644
--- a/Documentation/devicetree/bindings/usb/generic-ehci.yaml --- a/Documentation/devicetree/bindings/usb/generic-ehci.yaml
+++ b/Documentation/devicetree/bindings/usb/generic-ehci.yaml +++ b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
@@ -148,6 +148,11 @@ properties: @@ -149,6 +149,11 @@ properties:
- host - host
- otg - otg
@ -274,10 +274,10 @@ index 891349762..c134aabec 100644
- compatible - compatible
- reg - reg
diff --git a/Documentation/devicetree/bindings/usb/generic-ohci.yaml b/Documentation/devicetree/bindings/usb/generic-ohci.yaml diff --git a/Documentation/devicetree/bindings/usb/generic-ohci.yaml b/Documentation/devicetree/bindings/usb/generic-ohci.yaml
index acbf94fa5..1efa1eed9 100644 index d5fd3aa53ed2..ef237675a83a 100644
--- a/Documentation/devicetree/bindings/usb/generic-ohci.yaml --- a/Documentation/devicetree/bindings/usb/generic-ohci.yaml
+++ b/Documentation/devicetree/bindings/usb/generic-ohci.yaml +++ b/Documentation/devicetree/bindings/usb/generic-ohci.yaml
@@ -115,6 +115,11 @@ properties: @@ -116,6 +116,11 @@ properties:
- host - host
- otg - otg
@ -291,7 +291,7 @@ index acbf94fa5..1efa1eed9 100644
- reg - reg
diff --git a/Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml b/Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml diff --git a/Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml b/Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml
new file mode 100644 new file mode 100644
index 000000000..b2729bd01 index 000000000000..b2729bd015a1
--- /dev/null --- /dev/null
+++ b/Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml +++ b/Documentation/devicetree/bindings/usb/st,typec-stm32g0.yaml
@@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
@ -379,7 +379,7 @@ index 000000000..b2729bd01
+ }; + };
+... +...
diff --git a/drivers/phy/st/phy-stm32-usbphyc.c b/drivers/phy/st/phy-stm32-usbphyc.c diff --git a/drivers/phy/st/phy-stm32-usbphyc.c b/drivers/phy/st/phy-stm32-usbphyc.c
index da05642d3..d3d1235b9 100644 index cd0747ab6267..af198f7c3f09 100644
--- a/drivers/phy/st/phy-stm32-usbphyc.c --- a/drivers/phy/st/phy-stm32-usbphyc.c
+++ b/drivers/phy/st/phy-stm32-usbphyc.c +++ b/drivers/phy/st/phy-stm32-usbphyc.c
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
@ -493,7 +493,7 @@ index da05642d3..d3d1235b9 100644
}; };
struct stm32_usbphyc { struct stm32_usbphyc {
@@ -295,6 +376,12 @@ static int stm32_usbphyc_phy_exit(struct phy *phy) @@ -297,6 +378,12 @@ static int stm32_usbphyc_phy_exit(struct phy *phy)
static int stm32_usbphyc_phy_power_on(struct phy *phy) static int stm32_usbphyc_phy_power_on(struct phy *phy)
{ {
struct stm32_usbphyc_phy *usbphyc_phy = phy_get_drvdata(phy); struct stm32_usbphyc_phy *usbphyc_phy = phy_get_drvdata(phy);
@ -506,7 +506,7 @@ index da05642d3..d3d1235b9 100644
if (usbphyc_phy->vbus) if (usbphyc_phy->vbus)
return regulator_enable(usbphyc_phy->vbus); return regulator_enable(usbphyc_phy->vbus);
@@ -305,6 +392,12 @@ static int stm32_usbphyc_phy_power_on(struct phy *phy) @@ -307,6 +394,12 @@ static int stm32_usbphyc_phy_power_on(struct phy *phy)
static int stm32_usbphyc_phy_power_off(struct phy *phy) static int stm32_usbphyc_phy_power_off(struct phy *phy)
{ {
struct stm32_usbphyc_phy *usbphyc_phy = phy_get_drvdata(phy); struct stm32_usbphyc_phy *usbphyc_phy = phy_get_drvdata(phy);
@ -519,7 +519,7 @@ index da05642d3..d3d1235b9 100644
if (usbphyc_phy->vbus) if (usbphyc_phy->vbus)
return regulator_disable(usbphyc_phy->vbus); return regulator_disable(usbphyc_phy->vbus);
@@ -375,6 +468,107 @@ static int stm32_usbphyc_clk48_register(struct stm32_usbphyc *usbphyc) @@ -377,6 +470,107 @@ static int stm32_usbphyc_clk48_register(struct stm32_usbphyc *usbphyc)
return ret; return ret;
} }
@ -627,7 +627,7 @@ index da05642d3..d3d1235b9 100644
static void stm32_usbphyc_switch_setup(struct stm32_usbphyc *usbphyc, static void stm32_usbphyc_switch_setup(struct stm32_usbphyc *usbphyc,
u32 utmi_switch) u32 utmi_switch)
{ {
@@ -492,17 +686,15 @@ static int stm32_usbphyc_probe(struct platform_device *pdev) @@ -494,17 +688,15 @@ static int stm32_usbphyc_probe(struct platform_device *pdev)
usbphyc->vdda1v1 = devm_regulator_get(dev, "vdda1v1"); usbphyc->vdda1v1 = devm_regulator_get(dev, "vdda1v1");
if (IS_ERR(usbphyc->vdda1v1)) { if (IS_ERR(usbphyc->vdda1v1)) {
@ -649,14 +649,15 @@ index da05642d3..d3d1235b9 100644
goto clk_disable; goto clk_disable;
} }
@@ -550,6 +742,14 @@ static int stm32_usbphyc_probe(struct platform_device *pdev) @@ -552,6 +744,15 @@ static int stm32_usbphyc_probe(struct platform_device *pdev)
usbphyc->phys[port]->vbus = NULL; usbphyc->phys[port]->vbus = NULL;
} }
+ /* Get optional wakeup interrupt */ + /* Get optional wakeup interrupt */
+ usbphyc->phys[port]->wakeirq = of_irq_get(child, 0); + ret = of_irq_get(child, 0);
+ if (usbphyc->phys[port]->wakeirq == -EPROBE_DEFER) + if (ret == -EPROBE_DEFER)
+ goto put_child; + goto put_child;
+ usbphyc->phys[port]->wakeirq = ret;
+ +
+ /* Configure phy tuning */ + /* Configure phy tuning */
+ stm32_usbphyc_phy_tuning(usbphyc, child, index); + stm32_usbphyc_phy_tuning(usbphyc, child, index);
@ -664,7 +665,7 @@ index da05642d3..d3d1235b9 100644
port++; port++;
} }
@@ -598,6 +798,25 @@ static int stm32_usbphyc_remove(struct platform_device *pdev) @@ -600,6 +801,25 @@ static int stm32_usbphyc_remove(struct platform_device *pdev)
return 0; return 0;
} }
@ -690,7 +691,7 @@ index da05642d3..d3d1235b9 100644
static const struct of_device_id stm32_usbphyc_of_match[] = { static const struct of_device_id stm32_usbphyc_of_match[] = {
{ .compatible = "st,stm32mp1-usbphyc", }, { .compatible = "st,stm32mp1-usbphyc", },
{ }, { },
@@ -610,6 +829,7 @@ static struct platform_driver stm32_usbphyc_driver = { @@ -612,6 +832,7 @@ static struct platform_driver stm32_usbphyc_driver = {
.driver = { .driver = {
.of_match_table = stm32_usbphyc_of_match, .of_match_table = stm32_usbphyc_of_match,
.name = "stm32-usbphyc", .name = "stm32-usbphyc",
@ -699,10 +700,10 @@ index da05642d3..d3d1235b9 100644
}; };
module_platform_driver(stm32_usbphyc_driver); module_platform_driver(stm32_usbphyc_driver);
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index dd3c288fa..9c4fef396 100644 index 6c5934dbe9b3..ee16e33b431e 100644
--- a/drivers/usb/core/hcd.c --- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c
@@ -2292,7 +2292,8 @@ int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg) @@ -2295,7 +2295,8 @@ int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
if (!PMSG_IS_AUTO(msg)) if (!PMSG_IS_AUTO(msg))
usb_phy_roothub_suspend(hcd->self.sysdev, usb_phy_roothub_suspend(hcd->self.sysdev,
@ -712,7 +713,7 @@ index dd3c288fa..9c4fef396 100644
/* Did we race with a root-hub wakeup event? */ /* Did we race with a root-hub wakeup event? */
if (rhdev->do_remote_wakeup) { if (rhdev->do_remote_wakeup) {
@@ -2333,7 +2334,8 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg) @@ -2336,7 +2337,8 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
if (!PMSG_IS_AUTO(msg)) { if (!PMSG_IS_AUTO(msg)) {
status = usb_phy_roothub_resume(hcd->self.sysdev, status = usb_phy_roothub_resume(hcd->self.sysdev,
@ -722,7 +723,7 @@ index dd3c288fa..9c4fef396 100644
if (status) if (status)
return status; return status;
} }
@@ -2378,7 +2380,8 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg) @@ -2381,7 +2383,8 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg)
} }
} else { } else {
hcd->state = old_state; hcd->state = old_state;
@ -733,7 +734,7 @@ index dd3c288fa..9c4fef396 100644
"resume", status); "resume", status);
if (status != -ESHUTDOWN) if (status != -ESHUTDOWN)
diff --git a/drivers/usb/core/phy.c b/drivers/usb/core/phy.c diff --git a/drivers/usb/core/phy.c b/drivers/usb/core/phy.c
index fb1588e7c..746615aa1 100644 index fb1588e7c282..746615aa1b2d 100644
--- a/drivers/usb/core/phy.c --- a/drivers/usb/core/phy.c
+++ b/drivers/usb/core/phy.c +++ b/drivers/usb/core/phy.c
@@ -212,34 +212,36 @@ void usb_phy_roothub_power_off(struct usb_phy_roothub *phy_roothub) @@ -212,34 +212,36 @@ void usb_phy_roothub_power_off(struct usb_phy_roothub *phy_roothub)
@ -784,7 +785,7 @@ index fb1588e7c..746615aa1 100644
return err; return err;
diff --git a/drivers/usb/core/phy.h b/drivers/usb/core/phy.h diff --git a/drivers/usb/core/phy.h b/drivers/usb/core/phy.h
index 20a267cd9..3df4ddbb6 100644 index 20a267cd986b..3df4ddbb6046 100644
--- a/drivers/usb/core/phy.h --- a/drivers/usb/core/phy.h
+++ b/drivers/usb/core/phy.h +++ b/drivers/usb/core/phy.h
@@ -23,8 +23,10 @@ int usb_phy_roothub_power_on(struct usb_phy_roothub *phy_roothub); @@ -23,8 +23,10 @@ int usb_phy_roothub_power_on(struct usb_phy_roothub *phy_roothub);
@ -801,7 +802,7 @@ index 20a267cd9..3df4ddbb6 100644
#endif /* __USB_CORE_PHY_H_ */ #endif /* __USB_CORE_PHY_H_ */
diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
index cb9059a84..255fca4e8 100644 index 71e62b3081db..255fca4e8346 100644
--- a/drivers/usb/dwc2/core.h --- a/drivers/usb/dwc2/core.h
+++ b/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h
@@ -238,11 +238,14 @@ enum dwc2_ep0_state { @@ -238,11 +238,14 @@ enum dwc2_ep0_state {
@ -854,24 +855,8 @@ index cb9059a84..255fca4e8 100644
unsigned int hcd_enabled:1; unsigned int hcd_enabled:1;
unsigned int gadget_enabled:1; unsigned int gadget_enabled:1;
unsigned int ll_hw_enabled:1; unsigned int ll_hw_enabled:1;
@@ -1417,6 +1419,7 @@ void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg);
void dwc2_hsotg_disconnect(struct dwc2_hsotg *dwc2);
int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg, int testmode);
#define dwc2_is_device_connected(hsotg) (hsotg->connected)
+#define dwc2_is_device_enabled(hsotg) (hsotg->enabled)
int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg);
int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg, int remote_wakeup);
int dwc2_gadget_enter_hibernation(struct dwc2_hsotg *hsotg);
@@ -1453,6 +1456,7 @@ static inline int dwc2_hsotg_set_test_mode(struct dwc2_hsotg *hsotg,
int testmode)
{ return 0; }
#define dwc2_is_device_connected(hsotg) (0)
+#define dwc2_is_device_enabled(hsotg) (0)
static inline int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg)
{ return 0; }
static inline int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg,
diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
index a5c52b237..c786560fb 100644 index a5c52b237e72..c786560fb54e 100644
--- a/drivers/usb/dwc2/core_intr.c --- a/drivers/usb/dwc2/core_intr.c
+++ b/drivers/usb/dwc2/core_intr.c +++ b/drivers/usb/dwc2/core_intr.c
@@ -433,13 +433,14 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg) @@ -433,13 +433,14 @@ static void dwc2_handle_wakeup_detected_intr(struct dwc2_hsotg *hsotg)
@ -891,7 +876,7 @@ index a5c52b237..c786560fb 100644
/* Change to L0 state */ /* Change to L0 state */
hsotg->lx_state = DWC2_L0; hsotg->lx_state = DWC2_L0;
diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c
index f13eed423..1d72ece9c 100644 index f13eed4231e1..1d72ece9cfe4 100644
--- a/drivers/usb/dwc2/debugfs.c --- a/drivers/usb/dwc2/debugfs.c
+++ b/drivers/usb/dwc2/debugfs.c +++ b/drivers/usb/dwc2/debugfs.c
@@ -670,7 +670,9 @@ static int params_show(struct seq_file *seq, void *v) @@ -670,7 +670,9 @@ static int params_show(struct seq_file *seq, void *v)
@ -906,7 +891,7 @@ index f13eed423..1d72ece9c 100644
print_param(seq, p, dma_desc_fs_enable); print_param(seq, p, dma_desc_fs_enable);
print_param(seq, p, speed); print_param(seq, p, speed);
diff --git a/drivers/usb/dwc2/drd.c b/drivers/usb/dwc2/drd.c diff --git a/drivers/usb/dwc2/drd.c b/drivers/usb/dwc2/drd.c
index aa6eb76f6..c64701307 100644 index 36f2c38416e5..c64701307ccc 100644
--- a/drivers/usb/dwc2/drd.c --- a/drivers/usb/dwc2/drd.c
+++ b/drivers/usb/dwc2/drd.c +++ b/drivers/usb/dwc2/drd.c
@@ -13,6 +13,10 @@ @@ -13,6 +13,10 @@
@ -967,7 +952,7 @@ index aa6eb76f6..c64701307 100644
gotgctl &= ~GOTGCTL_AVALOVAL; gotgctl &= ~GOTGCTL_AVALOVAL;
if (valid) if (valid)
gotgctl |= GOTGCTL_BVALOVAL | GOTGCTL_VBVALOVAL; gotgctl |= GOTGCTL_BVALOVAL | GOTGCTL_VBVALOVAL;
@@ -105,12 +118,22 @@ static int dwc2_drd_role_sw_set(struct usb_role_switch *sw, enum usb_role role) @@ -105,6 +118,14 @@ static int dwc2_drd_role_sw_set(struct usb_role_switch *sw, enum usb_role role)
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
@ -982,17 +967,7 @@ index aa6eb76f6..c64701307 100644
if (role == USB_ROLE_HOST) { if (role == USB_ROLE_HOST) {
already = dwc2_ovr_avalid(hsotg, true); already = dwc2_ovr_avalid(hsotg, true);
} else if (role == USB_ROLE_DEVICE) { } else if (role == USB_ROLE_DEVICE) {
already = dwc2_ovr_bvalid(hsotg, true); @@ -125,9 +146,18 @@ static int dwc2_drd_role_sw_set(struct usb_role_switch *sw, enum usb_role role)
- /* This clear DCTL.SFTDISCON bit */
- dwc2_hsotg_core_connect(hsotg);
+ if (dwc2_is_device_enabled(hsotg)) {
+ /* This clear DCTL.SFTDISCON bit */
+ dwc2_hsotg_core_connect(hsotg);
+ }
} else {
if (dwc2_is_device_mode(hsotg)) {
if (!dwc2_ovr_bvalid(hsotg, false))
@@ -123,9 +146,18 @@ static int dwc2_drd_role_sw_set(struct usb_role_switch *sw, enum usb_role role)
spin_unlock_irqrestore(&hsotg->lock, flags); spin_unlock_irqrestore(&hsotg->lock, flags);
@ -1012,7 +987,7 @@ index aa6eb76f6..c64701307 100644
if (!hsotg->ll_hw_enabled && hsotg->clk) if (!hsotg->ll_hw_enabled && hsotg->clk)
clk_disable_unprepare(hsotg->clk); clk_disable_unprepare(hsotg->clk);
@@ -141,11 +173,21 @@ int dwc2_drd_init(struct dwc2_hsotg *hsotg) @@ -143,11 +173,21 @@ int dwc2_drd_init(struct dwc2_hsotg *hsotg)
{ {
struct usb_role_switch_desc role_sw_desc = {0}; struct usb_role_switch_desc role_sw_desc = {0};
struct usb_role_switch *role_sw; struct usb_role_switch *role_sw;
@ -1034,7 +1009,7 @@ index aa6eb76f6..c64701307 100644
role_sw_desc.driver_data = hsotg; role_sw_desc.driver_data = hsotg;
role_sw_desc.fwnode = dev_fwnode(hsotg->dev); role_sw_desc.fwnode = dev_fwnode(hsotg->dev);
role_sw_desc.set = dwc2_drd_role_sw_set; role_sw_desc.set = dwc2_drd_role_sw_set;
@@ -183,6 +225,31 @@ void dwc2_drd_suspend(struct dwc2_hsotg *hsotg) @@ -185,6 +225,31 @@ void dwc2_drd_suspend(struct dwc2_hsotg *hsotg)
void dwc2_drd_resume(struct dwc2_hsotg *hsotg) void dwc2_drd_resume(struct dwc2_hsotg *hsotg)
{ {
u32 gintsts, gintmsk; u32 gintsts, gintmsk;
@ -1067,20 +1042,10 @@ index aa6eb76f6..c64701307 100644
if (hsotg->role_sw && !hsotg->params.external_id_pin_ctl) { if (hsotg->role_sw && !hsotg->params.external_id_pin_ctl) {
gintsts = dwc2_readl(hsotg, GINTSTS); gintsts = dwc2_readl(hsotg, GINTSTS);
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index 0909b088a..c96299472 100644 index 519bb82b00e8..b171fac12585 100644
--- a/drivers/usb/dwc2/gadget.c --- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c
@@ -3594,7 +3594,8 @@ void dwc2_hsotg_core_disconnect(struct dwc2_hsotg *hsotg) @@ -4988,6 +4988,7 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg)
void dwc2_hsotg_core_connect(struct dwc2_hsotg *hsotg)
{
/* remove the soft-disconnect and let's go */
- dwc2_clear_bit(hsotg, DCTL, DCTL_SFTDISCON);
+ if (!hsotg->role_sw || (dwc2_readl(hsotg, GOTGCTL) & GOTGCTL_BSESVLD))
+ dwc2_clear_bit(hsotg, DCTL, DCTL_SFTDISCON);
}
/**
@@ -4988,6 +4989,7 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg)
hsotg->gadget.ops = &dwc2_hsotg_gadget_ops; hsotg->gadget.ops = &dwc2_hsotg_gadget_ops;
hsotg->gadget.name = dev_name(dev); hsotg->gadget.name = dev_name(dev);
@ -1088,7 +1053,7 @@ index 0909b088a..c96299472 100644
hsotg->remote_wakeup_allowed = 0; hsotg->remote_wakeup_allowed = 0;
if (hsotg->params.lpm) if (hsotg->params.lpm)
@@ -5670,7 +5672,6 @@ void dwc2_gadget_exit_clock_gating(struct dwc2_hsotg *hsotg, int rem_wakeup) @@ -5670,7 +5671,6 @@ void dwc2_gadget_exit_clock_gating(struct dwc2_hsotg *hsotg, int rem_wakeup)
} }
/* Change to L0 state */ /* Change to L0 state */
@ -1097,7 +1062,7 @@ index 0909b088a..c96299472 100644
hsotg->bus_suspended = false; hsotg->bus_suspended = false;
} }
diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index 657dbd50f..7929af33f 100644 index 82322696b903..c0dc708cc32a 100644
--- a/drivers/usb/dwc2/hcd.c --- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c
@@ -138,19 +138,15 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg) @@ -138,19 +138,15 @@ static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg)
@ -1255,7 +1220,7 @@ index 657dbd50f..7929af33f 100644
usleep_range(3000, 5000); usleep_range(3000, 5000);
spin_lock_irqsave(&hsotg->lock, flags); spin_lock_irqsave(&hsotg->lock, flags);
diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c
index 59e119345..d300ae3d9 100644 index 59e119345994..d300ae3d9274 100644
--- a/drivers/usb/dwc2/params.c --- a/drivers/usb/dwc2/params.c
+++ b/drivers/usb/dwc2/params.c +++ b/drivers/usb/dwc2/params.c
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
@ -1425,7 +1390,7 @@ index 59e119345..d300ae3d9 100644
if (!valid) if (!valid)
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
index c331a5128..cdfd78535 100644 index 265d437ca0f1..d16a69355e89 100644
--- a/drivers/usb/dwc2/platform.c --- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c +++ b/drivers/usb/dwc2/platform.c
@@ -222,20 +222,16 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) @@ -222,20 +222,16 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
@ -1599,7 +1564,7 @@ index c331a5128..cdfd78535 100644
if (dwc2_is_device_mode(dwc2)) if (dwc2_is_device_mode(dwc2))
ret = dwc2_hsotg_resume(dwc2); ret = dwc2_hsotg_resume(dwc2);
diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index c3dc90627..92401d01d 100644 index c3dc906274d9..92401d01d28d 100644
--- a/drivers/usb/host/ehci-platform.c --- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
@ -1661,7 +1626,7 @@ index c3dc90627..92401d01d 100644
int err = pdata->power_on(pdev); int err = pdata->power_on(pdev);
if (err < 0) if (err < 0)
diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index 4a8456f12..f2e0c78cc 100644 index 4a8456f12a73..f2e0c78cc58d 100644
--- a/drivers/usb/host/ohci-platform.c --- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c +++ b/drivers/usb/host/ohci-platform.c
@@ -214,7 +214,8 @@ static int ohci_platform_probe(struct platform_device *dev) @@ -214,7 +214,8 @@ static int ohci_platform_probe(struct platform_device *dev)
@ -1714,7 +1679,7 @@ index 4a8456f12..f2e0c78cc 100644
int err = pdata->power_on(pdev); int err = pdata->power_on(pdev);
if (err < 0) if (err < 0)
diff --git a/drivers/usb/typec/ucsi/Kconfig b/drivers/usb/typec/ucsi/Kconfig diff --git a/drivers/usb/typec/ucsi/Kconfig b/drivers/usb/typec/ucsi/Kconfig
index 5e9b37b3f..8f9c4b9f3 100644 index 5e9b37b3f25e..8f9c4b9f31f7 100644
--- a/drivers/usb/typec/ucsi/Kconfig --- a/drivers/usb/typec/ucsi/Kconfig
+++ b/drivers/usb/typec/ucsi/Kconfig +++ b/drivers/usb/typec/ucsi/Kconfig
@@ -48,4 +48,14 @@ config UCSI_ACPI @@ -48,4 +48,14 @@ config UCSI_ACPI
@ -1733,7 +1698,7 @@ index 5e9b37b3f..8f9c4b9f3 100644
+ +
endif endif
diff --git a/drivers/usb/typec/ucsi/Makefile b/drivers/usb/typec/ucsi/Makefile diff --git a/drivers/usb/typec/ucsi/Makefile b/drivers/usb/typec/ucsi/Makefile
index 8a8eb5cb8..480d533d7 100644 index 8a8eb5cb8e0f..480d533d762f 100644
--- a/drivers/usb/typec/ucsi/Makefile --- a/drivers/usb/typec/ucsi/Makefile
+++ b/drivers/usb/typec/ucsi/Makefile +++ b/drivers/usb/typec/ucsi/Makefile
@@ -17,3 +17,4 @@ endif @@ -17,3 +17,4 @@ endif
@ -1742,10 +1707,24 @@ index 8a8eb5cb8..480d533d7 100644
obj-$(CONFIG_UCSI_CCG) += ucsi_ccg.o obj-$(CONFIG_UCSI_CCG) += ucsi_ccg.o
+obj-$(CONFIG_UCSI_STM32G0) += ucsi_stm32g0.o +obj-$(CONFIG_UCSI_STM32G0) += ucsi_stm32g0.o
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 5ef5bd0e8..3f5bd05a6 100644 index 1f23eb543d8f..9659819ca2c9 100644
--- a/drivers/usb/typec/ucsi/ucsi.c --- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -1142,12 +1142,8 @@ static int ucsi_register_port(struct ucsi *ucsi, int index) @@ -205,8 +205,11 @@ void ucsi_altmode_update_active(struct ucsi_connector *con)
ret = ucsi_send_command(con->ucsi, command, &cur, sizeof(cur));
if (ret < 0) {
if (con->ucsi->version > 0x0100) {
- dev_err(con->ucsi->dev,
- "GET_CURRENT_CAM command failed\n");
+ if (ret != -EOPNOTSUPP)
+ dev_err(con->ucsi->dev,
+ "GET_CURRENT_CAM command failed %d\n", ret);
+ else
+ dev_dbg(con->ucsi->dev, "GET_CURRENT_CAM not supported\n");
return;
}
cur = 0xff;
@@ -1156,12 +1159,8 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
ucsi_port_psy_changed(con); ucsi_port_psy_changed(con);
} }
@ -1760,7 +1739,7 @@ index 5ef5bd0e8..3f5bd05a6 100644
/* Only notify USB controller if partner supports USB data */ /* Only notify USB controller if partner supports USB data */
if (!(UCSI_CONSTAT_PARTNER_FLAGS(con->status.flags) & UCSI_CONSTAT_PARTNER_FLAG_USB)) if (!(UCSI_CONSTAT_PARTNER_FLAGS(con->status.flags) & UCSI_CONSTAT_PARTNER_FLAG_USB))
@@ -1331,7 +1327,9 @@ EXPORT_SYMBOL_GPL(ucsi_destroy); @@ -1345,7 +1344,9 @@ EXPORT_SYMBOL_GPL(ucsi_destroy);
*/ */
int ucsi_register(struct ucsi *ucsi) int ucsi_register(struct ucsi *ucsi)
{ {
@ -1771,7 +1750,7 @@ index 5ef5bd0e8..3f5bd05a6 100644
ret = ucsi->ops->read(ucsi, UCSI_VERSION, &ucsi->version, ret = ucsi->ops->read(ucsi, UCSI_VERSION, &ucsi->version,
sizeof(ucsi->version)); sizeof(ucsi->version));
@@ -1341,6 +1339,33 @@ int ucsi_register(struct ucsi *ucsi) @@ -1355,6 +1356,33 @@ int ucsi_register(struct ucsi *ucsi)
if (!ucsi->version) if (!ucsi->version)
return -ENODEV; return -ENODEV;
@ -1805,7 +1784,7 @@ index 5ef5bd0e8..3f5bd05a6 100644
queue_work(system_long_wq, &ucsi->work); queue_work(system_long_wq, &ucsi->work);
return 0; return 0;
@@ -1374,6 +1399,9 @@ void ucsi_unregister(struct ucsi *ucsi) @@ -1388,6 +1416,9 @@ void ucsi_unregister(struct ucsi *ucsi)
} }
kfree(ucsi->connector); kfree(ucsi->connector);
@ -1816,7 +1795,7 @@ index 5ef5bd0e8..3f5bd05a6 100644
EXPORT_SYMBOL_GPL(ucsi_unregister); EXPORT_SYMBOL_GPL(ucsi_unregister);
diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h
index cee666790..26572e953 100644 index cee666790907..26572e953e9c 100644
--- a/drivers/usb/typec/ucsi/ucsi.h --- a/drivers/usb/typec/ucsi/ucsi.h
+++ b/drivers/usb/typec/ucsi/ucsi.h +++ b/drivers/usb/typec/ucsi/ucsi.h
@@ -286,6 +286,8 @@ struct ucsi { @@ -286,6 +286,8 @@ struct ucsi {
@ -1830,10 +1809,10 @@ index cee666790..26572e953 100644
diff --git a/drivers/usb/typec/ucsi/ucsi_stm32g0.c b/drivers/usb/typec/ucsi/ucsi_stm32g0.c diff --git a/drivers/usb/typec/ucsi/ucsi_stm32g0.c b/drivers/usb/typec/ucsi/ucsi_stm32g0.c
new file mode 100644 new file mode 100644
index 000000000..9d7651d5c index 000000000000..a107f2eb9129
--- /dev/null --- /dev/null
+++ b/drivers/usb/typec/ucsi/ucsi_stm32g0.c +++ b/drivers/usb/typec/ucsi/ucsi_stm32g0.c
@@ -0,0 +1,801 @@ @@ -0,0 +1,770 @@
+// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+/* +/*
+ * UCSI driver for STMicroelectronics STM32G0 Type-C controller + * UCSI driver for STMicroelectronics STM32G0 Type-C controller
@ -2281,8 +2260,7 @@ index 000000000..9d7651d5c
+{ +{
+ struct ucsi_stm32g0 *g0 = ucsi_get_drvdata(ucsi); + struct ucsi_stm32g0 *g0 = ucsi_get_drvdata(ucsi);
+ struct i2c_client *client = g0->client; + struct i2c_client *client = g0->client;
+ struct power_supply *psy; + int ret;
+ int i, ret;
+ +
+ /* Request alert interrupt */ + /* Request alert interrupt */
+ ret = request_threaded_irq(client->irq, NULL, ucsi_stm32g0_irq_handler, IRQF_ONESHOT, + ret = request_threaded_irq(client->irq, NULL, ucsi_stm32g0_irq_handler, IRQF_ONESHOT,
@ -2299,27 +2277,6 @@ index 000000000..9d7651d5c
+ return ret; + return ret;
+ } + }
+ +
+ /*
+ * Below hack disables psy wakeup (enabled by default) to avoid limiting the low power
+ * mode that can be achieved on the platform. Another way is to let the userland
+ * enable or disable it with power/wakeup entries.
+ * So, unless stm32g0 wakeup has been explicitly enabled, also disable the power supply
+ * wakeup. Else, we're done here, so simply return.
+ */
+ if (device_may_wakeup(g0->dev))
+ return 0;
+
+ /*
+ * ucsi_init() runs on system_long_wq, wait for it to complete. Then num_connectors is
+ * known and psy have been registered.
+ */
+ flush_workqueue(system_long_wq);
+
+ for (i = 0; i < ucsi->cap.num_connectors; i++) {
+ psy = ucsi->connector[i].psy;
+ device_wakeup_disable(&psy->dev);
+ }
+
+ return 0; + return 0;
+} +}
+ +
@ -2486,15 +2443,6 @@ index 000000000..9d7651d5c
+ +
+ ucsi_set_drvdata(g0->ucsi, g0); + ucsi_set_drvdata(g0->ucsi, g0);
+ +
+ /*
+ * When the "wakeup-source" flag is found, I2C core marks the device as wakeup capable
+ * and enables the wakeup by default.
+ * Only stick with wakeup capable here (disable wakeup), to avoid limiting the low power
+ * mode that can be achived by default (depending on the selected power domain).
+ */
+ if (client->flags & I2C_CLIENT_WAKE)
+ device_wakeup_disable(dev);
+
+ /* STM32G0 in bootloader mode communicates at reserved address 0x51 */ + /* STM32G0 in bootloader mode communicates at reserved address 0x51 */
+ g0->i2c_bl = i2c_new_dummy_device(client->adapter, STM32G0_I2C_BL_ADDR); + g0->i2c_bl = i2c_new_dummy_device(client->adapter, STM32G0_I2C_BL_ADDR);
+ if (IS_ERR(g0->i2c_bl)) { + if (IS_ERR(g0->i2c_bl)) {
@ -2636,5 +2584,5 @@ index 000000000..9d7651d5c
+MODULE_LICENSE("Dual BSD/GPL"); +MODULE_LICENSE("Dual BSD/GPL");
+MODULE_ALIAS("platform:ucsi-stm32g0"); +MODULE_ALIAS("platform:ucsi-stm32g0");
-- --
2.25.1 2.17.1

View File

@ -1,9 +1,9 @@
From 4f71b18aeac456fac466593f3baa12e5e3f698f3 Mon Sep 17 00:00:00 2001 From b0e70738cf7a9a1c9b4e10c3aec7cea6004ed9a4 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:06:36 +0200 Date: Thu, 3 Nov 2022 16:04:20 +0100
Subject: [PATCH 17/22] ARM-5.15.24-stm32mp1-r1-RESET-RTC Subject: [PATCH 18/22] v5.15-stm32mp-r2 RESET-RTC
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../devicetree/bindings/rtc/st,stm32-rtc.yaml | 37 ++ .../devicetree/bindings/rtc/st,stm32-rtc.yaml | 37 ++
drivers/rtc/Kconfig | 1 + drivers/rtc/Kconfig | 1 +
@ -16,7 +16,7 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
create mode 100644 include/dt-bindings/rtc/rtc-stm32.h create mode 100644 include/dt-bindings/rtc/rtc-stm32.h
diff --git a/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml b/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml diff --git a/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml b/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml
index 5456604b1..d94e1d13d 100644 index 5456604b1c14..d94e1d13d908 100644
--- a/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml --- a/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml
+++ b/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml +++ b/Documentation/devicetree/bindings/rtc/st,stm32-rtc.yaml
@@ -52,6 +52,20 @@ properties: @@ -52,6 +52,20 @@ properties:
@ -98,7 +98,7 @@ index 5456604b1..d94e1d13d 100644
... ...
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index e1bc52144..57ef1efdf 100644 index e1bc5214494e..57ef1efdfc3c 100644
--- a/drivers/rtc/Kconfig --- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig
@@ -1867,6 +1867,7 @@ config RTC_DRV_R7301 @@ -1867,6 +1867,7 @@ config RTC_DRV_R7301
@ -110,7 +110,7 @@ index e1bc52144..57ef1efdf 100644
help help
If you say yes here you get support for the STM32 On-Chip If you say yes here you get support for the STM32 On-Chip
diff --git a/drivers/rtc/rtc-stm32.c b/drivers/rtc/rtc-stm32.c diff --git a/drivers/rtc/rtc-stm32.c b/drivers/rtc/rtc-stm32.c
index ac9e228b5..20896b4b4 100644 index ac9e228b56d0..20896b4b4641 100644
--- a/drivers/rtc/rtc-stm32.c --- a/drivers/rtc/rtc-stm32.c
+++ b/drivers/rtc/rtc-stm32.c +++ b/drivers/rtc/rtc-stm32.c
@@ -5,7 +5,10 @@ @@ -5,7 +5,10 @@
@ -714,7 +714,7 @@ index ac9e228b5..20896b4b4 100644
static struct platform_driver stm32_rtc_driver = { static struct platform_driver stm32_rtc_driver = {
.probe = stm32_rtc_probe, .probe = stm32_rtc_probe,
diff --git a/include/dt-bindings/reset/stm32mp1-resets.h b/include/dt-bindings/reset/stm32mp1-resets.h diff --git a/include/dt-bindings/reset/stm32mp1-resets.h b/include/dt-bindings/reset/stm32mp1-resets.h
index f3a0ed317..bdbf9e253 100644 index f3a0ed317835..bdbf9e253015 100644
--- a/include/dt-bindings/reset/stm32mp1-resets.h --- a/include/dt-bindings/reset/stm32mp1-resets.h
+++ b/include/dt-bindings/reset/stm32mp1-resets.h +++ b/include/dt-bindings/reset/stm32mp1-resets.h
@@ -107,17 +107,17 @@ @@ -107,17 +107,17 @@
@ -749,7 +749,7 @@ index f3a0ed317..bdbf9e253 100644
#endif /* _DT_BINDINGS_STM32MP1_RESET_H_ */ #endif /* _DT_BINDINGS_STM32MP1_RESET_H_ */
diff --git a/include/dt-bindings/reset/stm32mp13-resets.h b/include/dt-bindings/reset/stm32mp13-resets.h diff --git a/include/dt-bindings/reset/stm32mp13-resets.h b/include/dt-bindings/reset/stm32mp13-resets.h
new file mode 100644 new file mode 100644
index 000000000..934864e90 index 000000000000..934864e90da6
--- /dev/null --- /dev/null
+++ b/include/dt-bindings/reset/stm32mp13-resets.h +++ b/include/dt-bindings/reset/stm32mp13-resets.h
@@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
@ -855,7 +855,7 @@ index 000000000..934864e90
+#endif /* _DT_BINDINGS_STM32MP13_RESET_H_ */ +#endif /* _DT_BINDINGS_STM32MP13_RESET_H_ */
diff --git a/include/dt-bindings/rtc/rtc-stm32.h b/include/dt-bindings/rtc/rtc-stm32.h diff --git a/include/dt-bindings/rtc/rtc-stm32.h b/include/dt-bindings/rtc/rtc-stm32.h
new file mode 100644 new file mode 100644
index 000000000..2fd78c2e6 index 000000000000..2fd78c2e62d4
--- /dev/null --- /dev/null
+++ b/include/dt-bindings/rtc/rtc-stm32.h +++ b/include/dt-bindings/rtc/rtc-stm32.h
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
@ -874,5 +874,5 @@ index 000000000..2fd78c2e6
+ +
+#endif +#endif
-- --
2.25.1 2.17.1

View File

@ -1,9 +1,9 @@
From e21e9c56de8df104ae24bff08afea4907932f915 Mon Sep 17 00:00:00 2001 From ae4d172fd1f74a9adc7eed21b80dc3049a56a462 Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:07:03 +0200 Date: Thu, 3 Nov 2022 16:05:11 +0100
Subject: [PATCH 18/22] ARM-5.15.24-stm32mp1-r1-SCMI Subject: [PATCH 19/22] v5.15-stm32mp-r2 SCMI
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
drivers/firmware/arm_scmi/Makefile | 1 + drivers/firmware/arm_scmi/Makefile | 1 +
drivers/firmware/arm_scmi/clock.c | 78 +++ drivers/firmware/arm_scmi/clock.c | 78 +++
@ -15,7 +15,7 @@ Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com>
create mode 100644 drivers/firmware/arm_scmi/optee.c create mode 100644 drivers/firmware/arm_scmi/optee.c
diff --git a/drivers/firmware/arm_scmi/Makefile b/drivers/firmware/arm_scmi/Makefile diff --git a/drivers/firmware/arm_scmi/Makefile b/drivers/firmware/arm_scmi/Makefile
index 1dcf123d6..d1460cf7e 100644 index 1dcf123d64ab..d1460cf7e9de 100644
--- a/drivers/firmware/arm_scmi/Makefile --- a/drivers/firmware/arm_scmi/Makefile
+++ b/drivers/firmware/arm_scmi/Makefile +++ b/drivers/firmware/arm_scmi/Makefile
@@ -6,6 +6,7 @@ scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_MAILBOX) += mailbox.o @@ -6,6 +6,7 @@ scmi-transport-$(CONFIG_ARM_SCMI_TRANSPORT_MAILBOX) += mailbox.o
@ -27,7 +27,7 @@ index 1dcf123d6..d1460cf7e 100644
scmi-module-objs := $(scmi-bus-y) $(scmi-driver-y) $(scmi-protocols-y) \ scmi-module-objs := $(scmi-bus-y) $(scmi-driver-y) $(scmi-protocols-y) \
$(scmi-transport-y) $(scmi-transport-y)
diff --git a/drivers/firmware/arm_scmi/clock.c b/drivers/firmware/arm_scmi/clock.c diff --git a/drivers/firmware/arm_scmi/clock.c b/drivers/firmware/arm_scmi/clock.c
index 35b56c8ba..79b81cf51 100644 index 492f3a9197ec..47814d175ce7 100644
--- a/drivers/firmware/arm_scmi/clock.c --- a/drivers/firmware/arm_scmi/clock.c
+++ b/drivers/firmware/arm_scmi/clock.c +++ b/drivers/firmware/arm_scmi/clock.c
@@ -16,6 +16,8 @@ enum scmi_clock_protocol_cmd { @@ -16,6 +16,8 @@ enum scmi_clock_protocol_cmd {
@ -51,7 +51,7 @@ index 35b56c8ba..79b81cf51 100644
struct scmi_clock_set_rate { struct scmi_clock_set_rate {
__le32 flags; __le32 flags;
#define CLOCK_SET_ASYNC BIT(0) #define CLOCK_SET_ASYNC BIT(0)
@@ -214,6 +221,34 @@ scmi_clock_describe_rates_get(const struct scmi_protocol_handle *ph, u32 clk_id, @@ -215,6 +222,34 @@ scmi_clock_describe_rates_get(const struct scmi_protocol_handle *ph, u32 clk_id,
return ret; return ret;
} }
@ -86,7 +86,7 @@ index 35b56c8ba..79b81cf51 100644
static int static int
scmi_clock_rate_get(const struct scmi_protocol_handle *ph, scmi_clock_rate_get(const struct scmi_protocol_handle *ph,
u32 clk_id, u64 *value) u32 clk_id, u64 *value)
@@ -271,6 +306,47 @@ static int scmi_clock_rate_set(const struct scmi_protocol_handle *ph, @@ -272,6 +307,47 @@ static int scmi_clock_rate_set(const struct scmi_protocol_handle *ph,
return ret; return ret;
} }
@ -134,7 +134,7 @@ index 35b56c8ba..79b81cf51 100644
static int static int
scmi_clock_config_set(const struct scmi_protocol_handle *ph, u32 clk_id, scmi_clock_config_set(const struct scmi_protocol_handle *ph, u32 clk_id,
u32 config) u32 config)
@@ -330,6 +406,8 @@ static const struct scmi_clk_proto_ops clk_proto_ops = { @@ -331,6 +407,8 @@ static const struct scmi_clk_proto_ops clk_proto_ops = {
.rate_set = scmi_clock_rate_set, .rate_set = scmi_clock_rate_set,
.enable = scmi_clock_enable, .enable = scmi_clock_enable,
.disable = scmi_clock_disable, .disable = scmi_clock_disable,
@ -144,7 +144,7 @@ index 35b56c8ba..79b81cf51 100644
static int scmi_clock_protocol_init(const struct scmi_protocol_handle *ph) static int scmi_clock_protocol_init(const struct scmi_protocol_handle *ph)
diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h diff --git a/drivers/firmware/arm_scmi/common.h b/drivers/firmware/arm_scmi/common.h
index dea1bfbe1..82ff3c3a6 100644 index dea1bfbe1052..82ff3c3a6d2d 100644
--- a/drivers/firmware/arm_scmi/common.h --- a/drivers/firmware/arm_scmi/common.h
+++ b/drivers/firmware/arm_scmi/common.h +++ b/drivers/firmware/arm_scmi/common.h
@@ -421,6 +421,9 @@ extern const struct scmi_desc scmi_smc_desc; @@ -421,6 +421,9 @@ extern const struct scmi_desc scmi_smc_desc;
@ -158,10 +158,10 @@ index dea1bfbe1..82ff3c3a6 100644
void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv); void scmi_rx_callback(struct scmi_chan_info *cinfo, u32 msg_hdr, void *priv);
void scmi_free_channel(struct scmi_chan_info *cinfo, struct idr *idr, int id); void scmi_free_channel(struct scmi_chan_info *cinfo, struct idr *idr, int id);
diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c diff --git a/drivers/firmware/arm_scmi/driver.c b/drivers/firmware/arm_scmi/driver.c
index b406b3f78..7d9c5b7b0 100644 index e815b8f98739..4a5b9c2c0c53 100644
--- a/drivers/firmware/arm_scmi/driver.c --- a/drivers/firmware/arm_scmi/driver.c
+++ b/drivers/firmware/arm_scmi/driver.c +++ b/drivers/firmware/arm_scmi/driver.c
@@ -1997,6 +1997,9 @@ static const struct of_device_id scmi_of_match[] = { @@ -1998,6 +1998,9 @@ static const struct of_device_id scmi_of_match[] = {
#ifdef CONFIG_ARM_SCMI_TRANSPORT_SMC #ifdef CONFIG_ARM_SCMI_TRANSPORT_SMC
{ .compatible = "arm,scmi-smc", .data = &scmi_smc_desc}, { .compatible = "arm,scmi-smc", .data = &scmi_smc_desc},
#endif #endif
@ -173,7 +173,7 @@ index b406b3f78..7d9c5b7b0 100644
#endif #endif
diff --git a/drivers/firmware/arm_scmi/optee.c b/drivers/firmware/arm_scmi/optee.c diff --git a/drivers/firmware/arm_scmi/optee.c b/drivers/firmware/arm_scmi/optee.c
new file mode 100644 new file mode 100644
index 000000000..4ec54b3c6 index 000000000000..4ec54b3c6628
--- /dev/null --- /dev/null
+++ b/drivers/firmware/arm_scmi/optee.c +++ b/drivers/firmware/arm_scmi/optee.c
@@ -0,0 +1,848 @@ @@ -0,0 +1,848 @@
@ -1026,7 +1026,7 @@ index 000000000..4ec54b3c6
+MODULE_AUTHOR("Etienne Carriere <etienne.carriere@linaro.org>"); +MODULE_AUTHOR("Etienne Carriere <etienne.carriere@linaro.org>");
+MODULE_DESCRIPTION("OP-TEE SCMI transport driver"); +MODULE_DESCRIPTION("OP-TEE SCMI transport driver");
diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h
index 80e781c51..f0b8bc4cf 100644 index 80e781c51ddc..f0b8bc4cf83a 100644
--- a/include/linux/scmi_protocol.h --- a/include/linux/scmi_protocol.h
+++ b/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h
@@ -82,6 +82,10 @@ struct scmi_clk_proto_ops { @@ -82,6 +82,10 @@ struct scmi_clk_proto_ops {
@ -1041,5 +1041,5 @@ index 80e781c51..f0b8bc4cf 100644
/** /**
-- --
2.25.1 2.17.1

View File

@ -1,23 +1,23 @@
From a0c67a64074c33685451fff84871a846bc29d523 Mon Sep 17 00:00:00 2001 From bf84be1a6e25855048a341b6e8d86a660d6fac1a Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:07:28 +0200 Date: Thu, 3 Nov 2022 16:05:34 +0100
Subject: [PATCH 19/22] ARM-5.15.24-stm32mp1-r1-SOUND Subject: [PATCH 20/22] v5.15-stm32mp-r2 SOUND
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
sound/soc/codecs/Kconfig | 2 +- sound/soc/codecs/Kconfig | 2 +-
sound/soc/codecs/wm8994.c | 81 ++++++++++++++++++++++++++++++++--- sound/soc/codecs/wm8994.c | 81 ++++++++++++++++++++++++++++++++---
sound/soc/stm/stm32_adfsdm.c | 11 +++-- sound/soc/stm/stm32_adfsdm.c | 22 ++++++++--
sound/soc/stm/stm32_i2s.c | 4 ++ sound/soc/stm/stm32_i2s.c | 6 ++-
sound/soc/stm/stm32_sai_sub.c | 4 +- sound/soc/stm/stm32_sai_sub.c | 4 +-
sound/soc/stm/stm32_spdifrx.c | 4 ++ sound/soc/stm/stm32_spdifrx.c | 4 ++
6 files changed, 94 insertions(+), 12 deletions(-) 6 files changed, 106 insertions(+), 13 deletions(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index f12c9b942..4cc91bcfe 100644 index d59a7e99ce42..31ed450b4069 100644
--- a/sound/soc/codecs/Kconfig --- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig +++ b/sound/soc/codecs/Kconfig
@@ -1771,7 +1771,7 @@ config SND_SOC_WM8993 @@ -1774,7 +1774,7 @@ config SND_SOC_WM8993
depends on I2C depends on I2C
config SND_SOC_WM8994 config SND_SOC_WM8994
@ -27,7 +27,7 @@ index f12c9b942..4cc91bcfe 100644
config SND_SOC_WM8995 config SND_SOC_WM8995
tristate tristate
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index f117ec0c4..98e803516 100644 index f117ec0c489f..98e803516fe5 100644
--- a/sound/soc/codecs/wm8994.c --- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c +++ b/sound/soc/codecs/wm8994.c
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
@ -179,7 +179,7 @@ index f117ec0c4..98e803516 100644
snd_soc_dapm_new_controls(dapm, wm8994_lateclk_revd_widgets, snd_soc_dapm_new_controls(dapm, wm8994_lateclk_revd_widgets,
ARRAY_SIZE(wm8994_lateclk_revd_widgets)); ARRAY_SIZE(wm8994_lateclk_revd_widgets));
diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c diff --git a/sound/soc/stm/stm32_adfsdm.c b/sound/soc/stm/stm32_adfsdm.c
index e6078f50e..534f96af9 100644 index e6078f50e508..75e75cc7fa02 100644
--- a/sound/soc/stm/stm32_adfsdm.c --- a/sound/soc/stm/stm32_adfsdm.c
+++ b/sound/soc/stm/stm32_adfsdm.c +++ b/sound/soc/stm/stm32_adfsdm.c
@@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
@ -191,7 +191,32 @@ index e6078f50e..534f96af9 100644
#include <linux/iio/iio.h> #include <linux/iio/iio.h>
#include <linux/iio/consumer.h> #include <linux/iio/consumer.h>
#include <linux/iio/adc/stm32-dfsdm-adc.h> #include <linux/iio/adc/stm32-dfsdm-adc.h>
@@ -363,15 +363,20 @@ static int stm32_adfsdm_probe(struct platform_device *pdev) @@ -303,6 +303,11 @@ static int stm32_adfsdm_dummy_cb(const void *data, void *private)
return 0;
}
+static void stm32_adfsdm_cleanup(void *data)
+{
+ iio_channel_release_all_cb(data);
+}
+
static struct snd_soc_component_driver stm32_adfsdm_soc_platform = {
.open = stm32_adfsdm_pcm_open,
.close = stm32_adfsdm_pcm_close,
@@ -349,6 +354,12 @@ static int stm32_adfsdm_probe(struct platform_device *pdev)
if (IS_ERR(priv->iio_cb))
return PTR_ERR(priv->iio_cb);
+ ret = devm_add_action_or_reset(&pdev->dev, stm32_adfsdm_cleanup, priv->iio_cb);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "Unable to add action\n");
+ return ret;
+ }
+
component = devm_kzalloc(&pdev->dev, sizeof(*component), GFP_KERNEL);
if (!component)
return -ENOMEM;
@@ -363,15 +374,20 @@ static int stm32_adfsdm_probe(struct platform_device *pdev)
#endif #endif
ret = snd_soc_add_component(component, NULL, 0); ret = snd_soc_add_component(component, NULL, 0);
@ -215,7 +240,7 @@ index e6078f50e..534f96af9 100644
return 0; return 0;
diff --git a/sound/soc/stm/stm32_i2s.c b/sound/soc/stm/stm32_i2s.c diff --git a/sound/soc/stm/stm32_i2s.c b/sound/soc/stm/stm32_i2s.c
index 717f45a83..61e2c5d51 100644 index 717f45a83445..f16dd7608b7e 100644
--- a/sound/soc/stm/stm32_i2s.c --- a/sound/soc/stm/stm32_i2s.c
+++ b/sound/soc/stm/stm32_i2s.c +++ b/sound/soc/stm/stm32_i2s.c
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
@ -226,6 +251,15 @@ index 717f45a83..61e2c5d51 100644
#include <linux/regmap.h> #include <linux/regmap.h>
#include <linux/reset.h> #include <linux/reset.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
@@ -1087,7 +1088,7 @@ static int stm32_i2s_parse_dt(struct platform_device *pdev,
if (irq < 0)
return irq;
- ret = devm_request_irq(&pdev->dev, irq, stm32_i2s_isr, IRQF_ONESHOT,
+ ret = devm_request_irq(&pdev->dev, irq, stm32_i2s_isr, 0,
dev_name(&pdev->dev), i2s);
if (ret) {
dev_err(&pdev->dev, "irq request returned %d\n", ret);
@@ -1113,6 +1114,7 @@ static int stm32_i2s_remove(struct platform_device *pdev) @@ -1113,6 +1114,7 @@ static int stm32_i2s_remove(struct platform_device *pdev)
{ {
snd_dmaengine_pcm_unregister(&pdev->dev); snd_dmaengine_pcm_unregister(&pdev->dev);
@ -244,7 +278,7 @@ index 717f45a83..61e2c5d51 100644
error: error:
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c
index 9c3b8e209..95cd38a50 100644 index 9c3b8e209656..95cd38a502bb 100644
--- a/sound/soc/stm/stm32_sai_sub.c --- a/sound/soc/stm/stm32_sai_sub.c
+++ b/sound/soc/stm/stm32_sai_sub.c +++ b/sound/soc/stm/stm32_sai_sub.c
@@ -1294,7 +1294,7 @@ static struct snd_soc_dai_driver stm32_sai_playback_dai = { @@ -1294,7 +1294,7 @@ static struct snd_soc_dai_driver stm32_sai_playback_dai = {
@ -266,7 +300,7 @@ index 9c3b8e209..95cd38a50 100644
.rate_max = 192000, .rate_max = 192000,
.rates = SNDRV_PCM_RATE_CONTINUOUS, .rates = SNDRV_PCM_RATE_CONTINUOUS,
diff --git a/sound/soc/stm/stm32_spdifrx.c b/sound/soc/stm/stm32_spdifrx.c diff --git a/sound/soc/stm/stm32_spdifrx.c b/sound/soc/stm/stm32_spdifrx.c
index 48145f553..e885796ca 100644 index 48145f553588..e885796ca5f4 100644
--- a/sound/soc/stm/stm32_spdifrx.c --- a/sound/soc/stm/stm32_spdifrx.c
+++ b/sound/soc/stm/stm32_spdifrx.c +++ b/sound/soc/stm/stm32_spdifrx.c
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
@ -295,5 +329,5 @@ index 48145f553..e885796ca 100644
error: error:
-- --
2.25.1 2.17.1

View File

@ -1,20 +1,20 @@
From 334f4603a6c9a1bb69ca6b65edf385156dac578b Mon Sep 17 00:00:00 2001 From ff0775651b034096b3f72ed6ec90efc39eb8627c Mon Sep 17 00:00:00 2001
From: Christophe Priouzeau <christophe.priouzeau@foss.st.com> From: Romuald JEANNE <romuald.jeanne@st.com>
Date: Tue, 31 May 2022 12:10:24 +0200 Date: Thu, 3 Nov 2022 16:51:45 +0100
Subject: [PATCH 22/22] ARM-5.15.24-stm32mp1-r1-CONFIG Subject: [PATCH 22/22] v5.15-stm32mp-r2 CONFIG
Signed-off-by: Christophe Priouzeau <christophe.priouzeau@foss.st.com> Signed-off-by: Romuald JEANNE <romuald.jeanne@st.com>
--- ---
.../fragment-01-multiv7_cleanup.config | 408 +++++++++++++++++ .../fragment-01-multiv7_cleanup.config | 408 +++++++++++++++++
.../configs/fragment-02-multiv7_addons.config | 419 ++++++++++++++++++ .../configs/fragment-02-multiv7_addons.config | 426 ++++++++++++++++++
arch/arm/configs/multi_v7_defconfig | 1 + arch/arm/configs/multi_v7_defconfig | 1 +
3 files changed, 828 insertions(+) 3 files changed, 835 insertions(+)
create mode 100644 arch/arm/configs/fragment-01-multiv7_cleanup.config create mode 100644 arch/arm/configs/fragment-01-multiv7_cleanup.config
create mode 100644 arch/arm/configs/fragment-02-multiv7_addons.config create mode 100644 arch/arm/configs/fragment-02-multiv7_addons.config
diff --git a/arch/arm/configs/fragment-01-multiv7_cleanup.config b/arch/arm/configs/fragment-01-multiv7_cleanup.config diff --git a/arch/arm/configs/fragment-01-multiv7_cleanup.config b/arch/arm/configs/fragment-01-multiv7_cleanup.config
new file mode 100644 new file mode 100644
index 000000000..52f28a765 index 000000000000..52f28a765b25
--- /dev/null --- /dev/null
+++ b/arch/arm/configs/fragment-01-multiv7_cleanup.config +++ b/arch/arm/configs/fragment-01-multiv7_cleanup.config
@@ -0,0 +1,408 @@ @@ -0,0 +1,408 @@
@ -428,10 +428,10 @@ index 000000000..52f28a765
+# CONFIG_FRAMEBUFFER_CONSOLE is not set +# CONFIG_FRAMEBUFFER_CONSOLE is not set
diff --git a/arch/arm/configs/fragment-02-multiv7_addons.config b/arch/arm/configs/fragment-02-multiv7_addons.config diff --git a/arch/arm/configs/fragment-02-multiv7_addons.config b/arch/arm/configs/fragment-02-multiv7_addons.config
new file mode 100644 new file mode 100644
index 000000000..5ce8ee7aa index 000000000000..7b5ffd562d8a
--- /dev/null --- /dev/null
+++ b/arch/arm/configs/fragment-02-multiv7_addons.config +++ b/arch/arm/configs/fragment-02-multiv7_addons.config
@@ -0,0 +1,419 @@ @@ -0,0 +1,426 @@
+# +#
+# General setup +# General setup
+# +#
@ -851,8 +851,15 @@ index 000000000..5ce8ee7aa
+# +#
+CONFIG_SAMPLES=y +CONFIG_SAMPLES=y
+CONFIG_SAMPLE_RPMSG_CLIENT=m +CONFIG_SAMPLE_RPMSG_CLIENT=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CFB=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_OFB=m
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index 33572998d..afb97c505 100644 index 33572998dbbe..afb97c5051c9 100644
--- a/arch/arm/configs/multi_v7_defconfig --- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig
@@ -646,6 +646,7 @@ CONFIG_V4L_PLATFORM_DRIVERS=y @@ -646,6 +646,7 @@ CONFIG_V4L_PLATFORM_DRIVERS=y
@ -864,5 +871,5 @@ index 33572998d..afb97c505 100644
CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m CONFIG_VIDEO_SAMSUNG_EXYNOS4_IS=m
CONFIG_VIDEO_S5P_FIMC=m CONFIG_VIDEO_S5P_FIMC=m
-- --
2.25.1 2.17.1

View File

@ -1,7 +1,6 @@
# CONFIG_GCC_PLUGINS is not set # CONFIG_GCC_PLUGINS is not set
# Allow to load kernel modules built with different kernel version # Allow to load kernel modules built with different kernel version
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODVERSIONS=y CONFIG_MODVERSIONS=y
# Support of iks01a2 # Support of iks01a2

View File

@ -7,41 +7,41 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
include linux-stm32mp.inc include linux-stm32mp.inc
LINUX_VERSION = "5.15" LINUX_VERSION = "5.15"
LINUX_SUBVERSION = "24" LINUX_SUBVERSION = "67"
LINUX_TARNAME = "linux-${LINUX_VERSION}.${LINUX_SUBVERSION}" LINUX_TARNAME = "linux-${LINUX_VERSION}.${LINUX_SUBVERSION}"
SRC_URI = "https://cdn.kernel.org/pub/linux/kernel/v5.x/${LINUX_TARNAME}.tar.xz;name=kernel" SRC_URI = "https://cdn.kernel.org/pub/linux/kernel/v5.x/${LINUX_TARNAME}.tar.xz;name=kernel"
#SRC_URI = "https://git.kernel.org/torvalds/t/linux-${LINUX_VERSION}-${LINUX_SUBVERSION}.tar.gz;name=kernel" #SRC_URI = "https://git.kernel.org/torvalds/t/linux-${LINUX_VERSION}-${LINUX_SUBVERSION}.tar.gz;name=kernel"
SRC_URI[kernel.sha256sum] = "f496eb03c88731540d483837f919c083148875a7b400468237f0217b5e5ca97f" SRC_URI[kernel.sha256sum] = "da47d9a80b694548835ccb553b6eb1a1f3f5d5cddd9e2bd6f4886b99ca14f940"
SRC_URI += " \ SRC_URI += " \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0001-ARM-5.15.24-stm32mp1-r1-MACHINE.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0001-v5.15-stm32mp-r2-MACHINE.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0002-ARM-5.15.24-stm32mp1-r1-CLOCK.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0002-v5.15-stm32mp-r2-CLOCK.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0003-ARM-5.15.24-stm32mp1-r1-CPUFREQ.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0003-v5.15-stm32mp-r2-CPUFREQ.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0004-ARM-5.15.24-stm32mp1-r1-CRYPTO.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0004-v5.15-stm32mp-r2-CPUIDLE-POWER.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0005-ARM-5.15.24-stm32mp1-r1-DMA.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0005-v5.15-stm32mp-r2-CRYPTO.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0006-ARM-5.15.24-stm32mp1-r1-DRM.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0006-v5.15-stm32mp-r2-DMA.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0007-ARM-5.15.24-stm32mp1-r1-HWSPINLOCK.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0007-v5.15-stm32mp-r2-DRM.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0008-ARM-5.15.24-stm32mp1-r1-I2C-IIO-IRQCHIP.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0008-v5.15-stm32mp-r2-HWSPINLOCK.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0009-ARM-5.15.24-stm32mp1-r1-REMOTEPROC-RPMSG.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0009-v5.15-stm32mp-r2-I2C-IIO-IRQCHIP.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0010-ARM-5.15.24-stm32mp1-r1-MISC-MEDIA-SOC-THERMAL.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0010-v5.15-stm32mp-r2-REMOTEPROC-RPMSG.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0011-ARM-5.15.24-stm32mp1-r1-MFD.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0011-v5.15-stm32mp-r2-MISC-MEDIA-SOC-THERMAL.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0012-ARM-5.15.24-stm32mp1-r1-MMC.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0012-v5.15-stm32mp-r2-MFD.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0013-ARM-5.15.24-stm32mp1-r1-NET-TTY.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0013-v5.15-stm32mp-r2-MMC.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0014-ARM-5.15.24-stm32mp1-r1-PERF.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0014-v5.15-stm32mp-r2-NET-TTY.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0015-ARM-5.15.24-stm32mp1-r1-PHY-USB.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0015-v5.15-stm32mp-r2-PERF.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0016-ARM-5.15.24-stm32mp1-r1-PINCTRL-REGULATOR-SPI.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0016-v5.15-stm32mp-r2-PHY-USB.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0017-ARM-5.15.24-stm32mp1-r1-RESET-RTC.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0017-v5.15-stm32mp-r2-PINCTRL-REGULATOR-SPI.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0018-ARM-5.15.24-stm32mp1-r1-SCMI.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0018-v5.15-stm32mp-r2-RESET-RTC.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0019-ARM-5.15.24-stm32mp1-r1-SOUND.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0019-v5.15-stm32mp-r2-SCMI.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0020-ARM-5.15.24-stm32mp1-r1-CPUIDLE-POWER.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0020-v5.15-stm32mp-r2-SOUND.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0021-ARM-5.15.24-stm32mp1-r1-DEVICETREE.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0021-v5.15-stm32mp-r2-DEVICETREE.patch \
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0022-ARM-5.15.24-stm32mp1-r1-CONFIG.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0022-v5.15-stm32mp-r2-CONFIG.patch \
" "
LINUX_TARGET = "stm32mp" LINUX_TARGET = "stm32mp"
LINUX_RELEASE = "r1" LINUX_RELEASE = "r2"
PV = "${LINUX_VERSION}.${LINUX_SUBVERSION}-${LINUX_TARGET}-${LINUX_RELEASE}" PV = "${LINUX_VERSION}.${LINUX_SUBVERSION}-${LINUX_TARGET}-${LINUX_RELEASE}"
@ -59,7 +59,7 @@ S = "${WORKDIR}/linux-${LINUX_VERSION}.${LINUX_SUBVERSION}"
BBCLASSEXTEND = "devupstream:target" BBCLASSEXTEND = "devupstream:target"
SRC_URI:class-devupstream = "git://github.com/STMicroelectronics/linux.git;protocol=https;branch=${ARCHIVER_ST_BRANCH}" SRC_URI:class-devupstream = "git://github.com/STMicroelectronics/linux.git;protocol=https;branch=${ARCHIVER_ST_BRANCH}"
SRCREV:class-devupstream = "0ea7234e7642a404115908c4688a050cb6cc2503" SRCREV:class-devupstream = "661e4b11da679e4e1f4de088279282f6fbbe528b"
# --------------------------------- # ---------------------------------
# Configure default preference to manage dynamic selection between tarball and github # Configure default preference to manage dynamic selection between tarball and github