[PATCH v2] arm64: dts: amlogic: Make mmc host controller interrupts level-sensitive

Jerome Brunet jbrunet at baylibre.com
Fri Jan 27 00:52:34 PST 2023


On Thu 26 Jan 2023 at 15:03, Heiner Kallweit <hkallweit1 at gmail.com> wrote:

> The usage of edge-triggered interrupts lead to lost interrupts under load,
> see [0]. This was confirmed to be fixed by using level-triggered
> interrupts.
> The report was about SDIO. However, as the host controller is the same
> for SD and MMC, apply the change to all mmc controller instances.
>
> [0] https://www.spinics.net/lists/linux-mmc/msg73991.html
>
> Fixes: 1499218c80c9 ("arm64: dts: move common G12A & G12B modes to meson-g12-common.dtsi")
> Reported-by: Peter Suti <peter.suti at streamunlimited.com>
> Tested-by: Peter Suti <peter.suti at streamunlimited.com>
> Cc: stable at vger.kernel.org
> Signed-off-by: Heiner Kallweit <hkallweit1 at gmail.com>

On the vim3:
Tested-by: Jerome Brunet <jbrunet at baylibre.com>

Thanks a lot for this !

> ---
> v2:
> - apply the fix also to meson-axg
> - apply the fix to all host controller instances
> ---
>  arch/arm64/boot/dts/amlogic/meson-axg.dtsi        | 4 ++--
>  arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 6 +++---
>  arch/arm64/boot/dts/amlogic/meson-gx.dtsi         | 6 +++---
>  3 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
> index ed895fb32..a6a3095de 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
> @@ -1886,7 +1886,7 @@ apb: bus at ffe00000 {
>  			sd_emmc_b: mmc at 5000 {
>  				compatible = "amlogic,meson-axg-mmc";
>  				reg = <0x0 0x5000 0x0 0x800>;
> -				interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;
> +				interrupts = <GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH>;
>  				status = "disabled";
>  				clocks = <&clkc CLKID_SD_EMMC_B>,
>  					<&clkc CLKID_SD_EMMC_B_CLK0>,
> @@ -1898,7 +1898,7 @@ sd_emmc_b: mmc at 5000 {
>  			sd_emmc_c: mmc at 7000 {
>  				compatible = "amlogic,meson-axg-mmc";
>  				reg = <0x0 0x7000 0x0 0x800>;
> -				interrupts = <GIC_SPI 218 IRQ_TYPE_EDGE_RISING>;
> +				interrupts = <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>;
>  				status = "disabled";
>  				clocks = <&clkc CLKID_SD_EMMC_C>,
>  					<&clkc CLKID_SD_EMMC_C_CLK0>,
> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
> index 6d7272b2c..13fdaba21 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
> @@ -2324,7 +2324,7 @@ uart_A: serial at 24000 {
>  		sd_emmc_a: mmc at ffe03000 {
>  			compatible = "amlogic,meson-axg-mmc";
>  			reg = <0x0 0xffe03000 0x0 0x800>;
> -			interrupts = <GIC_SPI 189 IRQ_TYPE_EDGE_RISING>;
> +			interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
>  			status = "disabled";
>  			clocks = <&clkc CLKID_SD_EMMC_A>,
>  				 <&clkc CLKID_SD_EMMC_A_CLK0>,
> @@ -2336,7 +2336,7 @@ sd_emmc_a: mmc at ffe03000 {
>  		sd_emmc_b: mmc at ffe05000 {
>  			compatible = "amlogic,meson-axg-mmc";
>  			reg = <0x0 0xffe05000 0x0 0x800>;
> -			interrupts = <GIC_SPI 190 IRQ_TYPE_EDGE_RISING>;
> +			interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
>  			status = "disabled";
>  			clocks = <&clkc CLKID_SD_EMMC_B>,
>  				 <&clkc CLKID_SD_EMMC_B_CLK0>,
> @@ -2348,7 +2348,7 @@ sd_emmc_b: mmc at ffe05000 {
>  		sd_emmc_c: mmc at ffe07000 {
>  			compatible = "amlogic,meson-axg-mmc";
>  			reg = <0x0 0xffe07000 0x0 0x800>;
> -			interrupts = <GIC_SPI 191 IRQ_TYPE_EDGE_RISING>;
> +			interrupts = <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>;
>  			status = "disabled";
>  			clocks = <&clkc CLKID_SD_EMMC_C>,
>  				 <&clkc CLKID_SD_EMMC_C_CLK0>,
> diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
> index e3c12e0be..5eed15035 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
> +++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
> @@ -603,21 +603,21 @@ apb: apb at d0000000 {
>  			sd_emmc_a: mmc at 70000 {
>  				compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
>  				reg = <0x0 0x70000 0x0 0x800>;
> -				interrupts = <GIC_SPI 216 IRQ_TYPE_EDGE_RISING>;
> +				interrupts = <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH>;
>  				status = "disabled";
>  			};
>  
>  			sd_emmc_b: mmc at 72000 {
>  				compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
>  				reg = <0x0 0x72000 0x0 0x800>;
> -				interrupts = <GIC_SPI 217 IRQ_TYPE_EDGE_RISING>;
> +				interrupts = <GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH>;
>  				status = "disabled";
>  			};
>  
>  			sd_emmc_c: mmc at 74000 {
>  				compatible = "amlogic,meson-gx-mmc", "amlogic,meson-gxbb-mmc";
>  				reg = <0x0 0x74000 0x0 0x800>;
> -				interrupts = <GIC_SPI 218 IRQ_TYPE_EDGE_RISING>;
> +				interrupts = <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>;
>  				status = "disabled";
>  			};
>  		};




More information about the linux-amlogic mailing list