[PATCH v5 2/8] arm64: dts: mediatek: mt7981b: Add PCIe and USB support

Rob Herring robh at kernel.org
Fri Jan 16 08:02:51 PST 2026


On Tue, Dec 23, 2025 at 6:38 AM Sjoerd Simons <sjoerd at collabora.com> wrote:
>
> Add device tree nodes for PCIe controller and USB3 XHCI host
> controller on MT7981B SoC. Both controllers share the USB3 PHY
> which can be configured for either USB3 or PCIe operation.
>
> The USB3 XHCI controller supports USB 2.0 and USB 3.0 SuperSpeed
> operation. The PCIe controller is compatible with PCIe Gen2
> specifications.
>
> Also add the topmisc syscon node required for USB/PCIe PHY
> multiplexing.
>
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno at collabora.com>
> Signed-off-by: Sjoerd Simons <sjoerd at collabora.com>
> ---
> V1 -> V2: Keep xhci reg and phys properties in single lines
> ---
>  arch/arm64/boot/dts/mediatek/mt7981b.dtsi | 80 +++++++++++++++++++++++++++++++
>  1 file changed, 80 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt7981b.dtsi b/arch/arm64/boot/dts/mediatek/mt7981b.dtsi
> index 416096b80770..d3f37413413e 100644
> --- a/arch/arm64/boot/dts/mediatek/mt7981b.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt7981b.dtsi
> @@ -2,6 +2,7 @@
>
>  #include <dt-bindings/clock/mediatek,mt7981-clk.h>
>  #include <dt-bindings/interrupt-controller/arm-gic.h>
> +#include <dt-bindings/phy/phy.h>
>  #include <dt-bindings/reset/mt7986-resets.h>
>
>  / {
> @@ -223,6 +224,55 @@ auxadc: adc at 1100d000 {
>                         status = "disabled";
>                 };
>
> +               xhci: usb at 11200000 {
> +                       compatible = "mediatek,mt7986-xhci", "mediatek,mtk-xhci";
> +                       reg = <0 0x11200000 0 0x2e00>, <0 0x11203e00 0 0x0100>;
> +                       reg-names = "mac", "ippc";
> +                       clocks = <&infracfg CLK_INFRA_IUSB_SYS_CK>,
> +                                <&infracfg CLK_INFRA_IUSB_CK>,
> +                                <&infracfg CLK_INFRA_IUSB_133_CK>,
> +                                <&infracfg CLK_INFRA_IUSB_66M_CK>,
> +                                <&topckgen CLK_TOP_U2U3_XHCI_SEL>;
> +                       clock-names = "sys_ck", "ref_ck", "mcu_ck", "dma_ck", "xhci_ck";
> +                       interrupts = <GIC_SPI 173 IRQ_TYPE_LEVEL_HIGH>;
> +                       phys = <&u2port0 PHY_TYPE_USB2>, <&u3port0 PHY_TYPE_USB3>;
> +                       status = "disabled";
> +               };
> +
> +               pcie: pcie at 11280000 {
> +                       compatible = "mediatek,mt7981-pcie",
> +                                    "mediatek,mt8192-pcie";
> +                       reg = <0 0x11280000 0 0x4000>;
> +                       reg-names = "pcie-mac";
> +                       ranges = <0x82000000 0 0x20000000
> +                                 0x0 0x20000000 0 0x10000000>;
> +                       bus-range = <0x00 0xff>;
> +                       clocks = <&infracfg CLK_INFRA_IPCIE_CK>,
> +                                <&infracfg CLK_INFRA_IPCIE_PIPE_CK>,
> +                                <&infracfg CLK_INFRA_IPCIER_CK>,
> +                                <&infracfg CLK_INFRA_IPCIEB_CK>;
> +                       clock-names = "pl_250m", "tl_26m", "peri_26m", "top_133m";
> +                       device_type = "pci";
> +                       phys = <&u3port0 PHY_TYPE_PCIE>;
> +                       phy-names = "pcie-phy";
> +                       interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
> +                       interrupt-map-mask = <0 0 0 7>;
> +                       interrupt-map = <0 0 0 1 &pcie_intc 0>,
> +                                       <0 0 0 2 &pcie_intc 1>,
> +                                       <0 0 0 3 &pcie_intc 2>,
> +                                       <0 0 0 4 &pcie_intc 3>;
> +                       #address-cells = <3>;
> +                       #interrupt-cells = <1>;
> +                       #size-cells = <2>;
> +                       status = "disabled";
> +
> +                       pcie_intc: interrupt-controller {
> +                               interrupt-controller;
> +                               #address-cells = <0>;
> +                               #interrupt-cells = <1>;
> +                       };
> +               };
> +
>                 pio: pinctrl at 11d00000 {
>                         compatible = "mediatek,mt7981-pinctrl";
>                         reg = <0 0x11d00000 0 0x1000>,
> @@ -252,6 +302,36 @@ mux {
>                         };
>                 };
>
> +               topmisc: topmisc at 11d10000 {
> +                       compatible = "mediatek,mt7981-topmisc", "syscon";
> +                       reg = <0 0x11d10000 0 0x10000>;
> +                       #clock-cells = <1>;

This is now a warning as the syscon.yaml binding this compatible is
defined in doesn't allow #clock-cells.

Rob



More information about the linux-arm-kernel mailing list