layerscape: add patches-5.4
[openwrt/staging/wigyori.git] / target / linux / layerscape / patches-5.4 / 302-dts-0018-arm64-dts-ls104x-use-a-pseudo-bus-to-constrain-usb-d.patch
diff --git a/target/linux/layerscape/patches-5.4/302-dts-0018-arm64-dts-ls104x-use-a-pseudo-bus-to-constrain-usb-d.patch b/target/linux/layerscape/patches-5.4/302-dts-0018-arm64-dts-ls104x-use-a-pseudo-bus-to-constrain-usb-d.patch
new file mode 100644 (file)
index 0000000..ef610cb
--- /dev/null
@@ -0,0 +1,193 @@
+From a6a86473350c7dcbae61afa1e926941d76ca17ed Mon Sep 17 00:00:00 2001
+From: Laurentiu Tudor <laurentiu.tudor@nxp.com>
+Date: Thu, 20 Sep 2018 13:46:54 +0300
+Subject: [PATCH] arm64: dts: ls104x: use a pseudo-bus to constrain usb dma
+ size
+
+Wrap the usb controllers in an intermediate simple-bus and use it to
+constrain the dma address size of these usb controllers to the 40 bits
+that they generate toward the interconnect.
+This is required because the SoC uses 48 bits address sizes and this
+mismatch would lead to smmu context faults because the usb generates
+40-bit addresses while the smmu page tables are populated with 48-bit
+wide addresses.
+
+Suggested-by: Robin Murphy <robin.murphy@arm.com>
+Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
+---
+ arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi | 82 ++++++++++++++------------
+ arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi | 76 +++++++++++++-----------
+ 2 files changed, 87 insertions(+), 71 deletions(-)
+
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1043a.dtsi
+@@ -726,43 +726,51 @@
+                                <&clockgen 4 0>;
+               };
+-              usb0: usb3@2f00000 {
+-                      compatible = "snps,dwc3";
+-                      reg = <0x0 0x2f00000 0x0 0x10000>;
+-                      interrupts = <0 60 0x4>;
+-                      dr_mode = "host";
+-                      snps,quirk-frame-length-adjustment = <0x20>;
+-                      snps,dis_rxdet_inp3_quirk;
+-                      usb3-lpm-capable;
+-                      snps,dis-u1u2-when-u3-quirk;
+-                      snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+-                      configure-gfladj;
+-              };
++              usb_aux_bus: usb_aux_bus {
++                      #address-cells = <2>;
++                      #size-cells = <2>;
++                      compatible = "simple-bus";
++                      ranges;
++                      dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x00000000>;
+-              usb1: usb3@3000000 {
+-                      compatible = "snps,dwc3";
+-                      reg = <0x0 0x3000000 0x0 0x10000>;
+-                      interrupts = <0 61 0x4>;
+-                      dr_mode = "host";
+-                      snps,quirk-frame-length-adjustment = <0x20>;
+-                      snps,dis_rxdet_inp3_quirk;
+-                      usb3-lpm-capable;
+-                      snps,dis-u1u2-when-u3-quirk;
+-                      snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+-                      configure-gfladj;
+-              };
++                      usb0: usb3@2f00000 {
++                              compatible = "snps,dwc3";
++                              reg = <0x0 0x2f00000 0x0 0x10000>;
++                              interrupts = <0 60 0x4>;
++                              dr_mode = "host";
++                              snps,quirk-frame-length-adjustment = <0x20>;
++                              snps,dis_rxdet_inp3_quirk;
++                              usb3-lpm-capable;
++                              snps,dis-u1u2-when-u3-quirk;
++                              snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
++                              configure-gfladj;
++                      };
++
++                      usb1: usb3@3000000 {
++                              compatible = "snps,dwc3";
++                              reg = <0x0 0x3000000 0x0 0x10000>;
++                              interrupts = <0 61 0x4>;
++                              dr_mode = "host";
++                              snps,quirk-frame-length-adjustment = <0x20>;
++                              snps,dis_rxdet_inp3_quirk;
++                              usb3-lpm-capable;
++                              snps,dis-u1u2-when-u3-quirk;
++                              snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
++                              configure-gfladj;
++                      };
+-              usb2: usb3@3100000 {
+-                      compatible = "snps,dwc3";
+-                      reg = <0x0 0x3100000 0x0 0x10000>;
+-                      interrupts = <0 63 0x4>;
+-                      dr_mode = "host";
+-                      snps,quirk-frame-length-adjustment = <0x20>;
+-                      snps,dis_rxdet_inp3_quirk;
+-                      usb3-lpm-capable;
+-                      snps,dis-u1u2-when-u3-quirk;
+-                      snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+-                      configure-gfladj;
++                      usb2: usb3@3100000 {
++                              compatible = "snps,dwc3";
++                              reg = <0x0 0x3100000 0x0 0x10000>;
++                              interrupts = <0 63 0x4>;
++                              dr_mode = "host";
++                              snps,quirk-frame-length-adjustment = <0x20>;
++                              snps,dis_rxdet_inp3_quirk;
++                              usb3-lpm-capable;
++                              snps,dis-u1u2-when-u3-quirk;
++                              snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
++                              configure-gfladj;
++                      };
+               };
+               sata: sata@3200000 {
+--- a/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
++++ b/arch/arm64/boot/dts/freescale/fsl-ls1046a.dtsi
+@@ -624,40 +624,48 @@
+                                <&clockgen 4 1>;
+               };
+-              usb0: usb@2f00000 {
+-                      compatible = "snps,dwc3";
+-                      reg = <0x0 0x2f00000 0x0 0x10000>;
+-                      interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
+-                      dr_mode = "host";
+-                      snps,quirk-frame-length-adjustment = <0x20>;
+-                      snps,dis_rxdet_inp3_quirk;
+-                      snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+-                      usb3-lpm-capable;
+-                      snps,dis-u1u2-when-u3-quirk;
+-              };
++              usb_aux_bus: usb_aux_bus {
++                      #address-cells = <2>;
++                      #size-cells = <2>;
++                      compatible = "simple-bus";
++                      ranges;
++                      dma-ranges = <0x0 0x0 0x0 0x0 0x100 0x00000000>;
+-              usb1: usb@3000000 {
+-                      compatible = "snps,dwc3";
+-                      reg = <0x0 0x3000000 0x0 0x10000>;
+-                      interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
+-                      dr_mode = "host";
+-                      snps,quirk-frame-length-adjustment = <0x20>;
+-                      snps,dis_rxdet_inp3_quirk;
+-                      snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+-                      usb3-lpm-capable;
+-                      snps,dis-u1u2-when-u3-quirk;
+-              };
++                      usb0: usb@2f00000 {
++                              compatible = "snps,dwc3";
++                              reg = <0x0 0x2f00000 0x0 0x10000>;
++                              interrupts = <GIC_SPI 60 IRQ_TYPE_LEVEL_HIGH>;
++                              dr_mode = "host";
++                              snps,quirk-frame-length-adjustment = <0x20>;
++                              snps,dis_rxdet_inp3_quirk;
++                              snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
++                              usb3-lpm-capable;
++                              snps,dis-u1u2-when-u3-quirk;
++                      };
++
++                      usb1: usb@3000000 {
++                              compatible = "snps,dwc3";
++                              reg = <0x0 0x3000000 0x0 0x10000>;
++                              interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
++                              dr_mode = "host";
++                              snps,quirk-frame-length-adjustment = <0x20>;
++                              snps,dis_rxdet_inp3_quirk;
++                              snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
++                              usb3-lpm-capable;
++                              snps,dis-u1u2-when-u3-quirk;
++                      };
+-              usb2: usb@3100000 {
+-                      compatible = "snps,dwc3";
+-                      reg = <0x0 0x3100000 0x0 0x10000>;
+-                      interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
+-                      dr_mode = "host";
+-                      snps,quirk-frame-length-adjustment = <0x20>;
+-                      snps,dis_rxdet_inp3_quirk;
+-                      snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
+-                      usb3-lpm-capable;
+-                      snps,dis-u1u2-when-u3-quirk;
++                      usb2: usb@3100000 {
++                              compatible = "snps,dwc3";
++                              reg = <0x0 0x3100000 0x0 0x10000>;
++                              interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
++                              dr_mode = "host";
++                              snps,quirk-frame-length-adjustment = <0x20>;
++                              snps,dis_rxdet_inp3_quirk;
++                              snps,incr-burst-type-adjustment = <1>, <4>, <8>, <16>;
++                              usb3-lpm-capable;
++                              snps,dis-u1u2-when-u3-quirk;
++                      };
+               };
+               sata: sata@3200000 {