Message ID | 1567950178-4466-7-git-send-email-narmstrong@baylibre.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | arm64: dts: meson-g12: add support for PCIe | expand |
On Sun, 08 Sep 2019 14:42:58 +0100, Neil Armstrong <narmstrong@baylibre.com> wrote: > > The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > an USB3.0 Type A connector and a M.2 Key M slot. > The PHY driving these differential lines is shared between > the USB3.0 controller and the PCIe Controller, thus only > a single controller can use it. > > The needed DT configuration when the MCU is configured to mux > the PCIe/USB3.0 differential lines to the M.2 Key M slot is > added commented and may uncommented to disable USB3.0 from the > USB Complex and enable the PCIe controller. > > Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> > --- > .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ > .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ > .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ > .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ > 4 files changed, 70 insertions(+) > > diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > index 3a6a1e0c1e32..0577b1435cbb 100644 > --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > @@ -14,3 +14,25 @@ > / { > compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; > }; > + > +/* > + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > + * an USB3.0 Type A connector and a M.2 Key M slot. > + * The PHY driving these differential lines is shared between > + * the USB3.0 controller and the PCIe Controller, thus only > + * a single controller can use it. > + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > + * to the M.2 Key M slot, uncomment the following block to disable > + * USB3.0 from the USB Complex and enable the PCIe controller. > + */ > +/* > +&pcie { > + status = "okay"; > +}; > + > +&usb { > + phys = <&usb2_phy0>, <&usb2_phy1>; > + phy-names = "usb2-phy0", "usb2-phy1"; > +}; > + */ Although you can't do much more than this here, I'd expect firmware on the machine to provide the DT that matches its configuration. Is it the way it actually works? Or is the user actually expected to edit this file? Thanks, M.
Hi Marc, Le 09/09/2019 à 18:37, Marc Zyngier a écrit : > On Sun, 08 Sep 2019 14:42:58 +0100, > Neil Armstrong <narmstrong@baylibre.com> wrote: >> >> The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >> lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >> an USB3.0 Type A connector and a M.2 Key M slot. >> The PHY driving these differential lines is shared between >> the USB3.0 controller and the PCIe Controller, thus only >> a single controller can use it. >> >> The needed DT configuration when the MCU is configured to mux >> the PCIe/USB3.0 differential lines to the M.2 Key M slot is >> added commented and may uncommented to disable USB3.0 from the >> USB Complex and enable the PCIe controller. >> >> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> >> --- >> .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ >> .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ >> .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ >> .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ >> 4 files changed, 70 insertions(+) >> >> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >> index 3a6a1e0c1e32..0577b1435cbb 100644 >> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >> @@ -14,3 +14,25 @@ >> / { >> compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; >> }; >> + >> +/* >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >> + * an USB3.0 Type A connector and a M.2 Key M slot. >> + * The PHY driving these differential lines is shared between >> + * the USB3.0 controller and the PCIe Controller, thus only >> + * a single controller can use it. >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines >> + * to the M.2 Key M slot, uncomment the following block to disable >> + * USB3.0 from the USB Complex and enable the PCIe controller. >> + */ >> +/* >> +&pcie { >> + status = "okay"; >> +}; >> + >> +&usb { >> + phys = <&usb2_phy0>, <&usb2_phy1>; >> + phy-names = "usb2-phy0", "usb2-phy1"; >> +}; >> + */ > > Although you can't do much more than this here, I'd expect firmware on > the machine to provide the DT that matches its configuration. Is it > the way it actually works? Or is the user actually expected to edit > this file? It's the plan when initial VIM3 support will be merged in u-boot mainline, and the MCU driver will be added aswell : https://patchwork.ozlabs.org/cover/1156618/ A custom board support altering the DT will be added when this patchset is merged upstream. But since these are separate projects, leaving this as commented is ugly, but necessary. Thanks, Neil > > Thanks, > > M. >
On Mon, 09 Sep 2019 18:50:42 +0100, Neil Armstrong <narmstrong@baylibre.com> wrote: > > Hi Marc, > > Le 09/09/2019 à 18:37, Marc Zyngier a écrit : > > On Sun, 08 Sep 2019 14:42:58 +0100, > > Neil Armstrong <narmstrong@baylibre.com> wrote: > >> > >> The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > >> lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > >> an USB3.0 Type A connector and a M.2 Key M slot. > >> The PHY driving these differential lines is shared between > >> the USB3.0 controller and the PCIe Controller, thus only > >> a single controller can use it. > >> > >> The needed DT configuration when the MCU is configured to mux > >> the PCIe/USB3.0 differential lines to the M.2 Key M slot is > >> added commented and may uncommented to disable USB3.0 from the > >> USB Complex and enable the PCIe controller. > >> > >> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> > >> --- > >> .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ > >> .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ > >> .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ > >> .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ > >> 4 files changed, 70 insertions(+) > >> > >> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > >> index 3a6a1e0c1e32..0577b1435cbb 100644 > >> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > >> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > >> @@ -14,3 +14,25 @@ > >> / { > >> compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; > >> }; > >> + > >> +/* > >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > >> + * an USB3.0 Type A connector and a M.2 Key M slot. > >> + * The PHY driving these differential lines is shared between > >> + * the USB3.0 controller and the PCIe Controller, thus only > >> + * a single controller can use it. > >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > >> + * to the M.2 Key M slot, uncomment the following block to disable > >> + * USB3.0 from the USB Complex and enable the PCIe controller. > >> + */ > >> +/* > >> +&pcie { > >> + status = "okay"; > >> +}; > >> + > >> +&usb { > >> + phys = <&usb2_phy0>, <&usb2_phy1>; > >> + phy-names = "usb2-phy0", "usb2-phy1"; > >> +}; > >> + */ > > > > Although you can't do much more than this here, I'd expect firmware on > > the machine to provide the DT that matches its configuration. Is it > > the way it actually works? Or is the user actually expected to edit > > this file? > > It's the plan when initial VIM3 support will be merged in u-boot mainline, > and the MCU driver will be added aswell : > https://patchwork.ozlabs.org/cover/1156618/ > A custom board support altering the DT will be added when this patchset > is merged upstream. > > But since these are separate projects, leaving this as commented is ugly, > but necessary. I agree with the unfortunate necessity. However, could you please have a comment here, indicating that the user isn't expected to change this on their own, but instead rely on the firmware/bootloader to do it accordingly? Thanks, M.
On 10/09/2019 11:12, Marc Zyngier wrote: > On Mon, 09 Sep 2019 18:50:42 +0100, > Neil Armstrong <narmstrong@baylibre.com> wrote: >> >> Hi Marc, >> >> Le 09/09/2019 à 18:37, Marc Zyngier a écrit : >>> On Sun, 08 Sep 2019 14:42:58 +0100, >>> Neil Armstrong <narmstrong@baylibre.com> wrote: >>>> >>>> The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >>>> lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >>>> an USB3.0 Type A connector and a M.2 Key M slot. >>>> The PHY driving these differential lines is shared between >>>> the USB3.0 controller and the PCIe Controller, thus only >>>> a single controller can use it. >>>> >>>> The needed DT configuration when the MCU is configured to mux >>>> the PCIe/USB3.0 differential lines to the M.2 Key M slot is >>>> added commented and may uncommented to disable USB3.0 from the >>>> USB Complex and enable the PCIe controller. >>>> >>>> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> >>>> --- >>>> .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ >>>> .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ >>>> .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ >>>> .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ >>>> 4 files changed, 70 insertions(+) >>>> >>>> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >>>> index 3a6a1e0c1e32..0577b1435cbb 100644 >>>> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >>>> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >>>> @@ -14,3 +14,25 @@ >>>> / { >>>> compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; >>>> }; >>>> + >>>> +/* >>>> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >>>> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >>>> + * an USB3.0 Type A connector and a M.2 Key M slot. >>>> + * The PHY driving these differential lines is shared between >>>> + * the USB3.0 controller and the PCIe Controller, thus only >>>> + * a single controller can use it. >>>> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines >>>> + * to the M.2 Key M slot, uncomment the following block to disable >>>> + * USB3.0 from the USB Complex and enable the PCIe controller. >>>> + */ >>>> +/* >>>> +&pcie { >>>> + status = "okay"; >>>> +}; >>>> + >>>> +&usb { >>>> + phys = <&usb2_phy0>, <&usb2_phy1>; >>>> + phy-names = "usb2-phy0", "usb2-phy1"; >>>> +}; >>>> + */ >>> >>> Although you can't do much more than this here, I'd expect firmware on >>> the machine to provide the DT that matches its configuration. Is it >>> the way it actually works? Or is the user actually expected to edit >>> this file? >> >> It's the plan when initial VIM3 support will be merged in u-boot mainline, >> and the MCU driver will be added aswell : >> https://patchwork.ozlabs.org/cover/1156618/ >> A custom board support altering the DT will be added when this patchset >> is merged upstream. >> >> But since these are separate projects, leaving this as commented is ugly, >> but necessary. > > I agree with the unfortunate necessity. However, could you please have > a comment here, indicating that the user isn't expected to change this > on their own, but instead rely on the firmware/bootloader to do it > accordingly? Yes, sure. Neil > > Thanks, > > M. >
On Sun, Sep 08, 2019 at 01:42:58PM +0000, Neil Armstrong wrote: > The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > an USB3.0 Type A connector and a M.2 Key M slot. > The PHY driving these differential lines is shared between > the USB3.0 controller and the PCIe Controller, thus only > a single controller can use it. > > The needed DT configuration when the MCU is configured to mux > the PCIe/USB3.0 differential lines to the M.2 Key M slot is > added commented and may uncommented to disable USB3.0 from the *and may be* > USB Complex and enable the PCIe controller. > > Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> > --- > .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ > .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ > .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ > .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ > 4 files changed, 70 insertions(+) > > diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > index 3a6a1e0c1e32..0577b1435cbb 100644 > --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > @@ -14,3 +14,25 @@ > / { > compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; > }; > + > +/* > + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > + * an USB3.0 Type A connector and a M.2 Key M slot. > + * The PHY driving these differential lines is shared between > + * the USB3.0 controller and the PCIe Controller, thus only > + * a single controller can use it. > + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > + * to the M.2 Key M slot, uncomment the following block to disable > + * USB3.0 from the USB Complex and enable the PCIe controller. > + */ > +/* > +&pcie { > + status = "okay"; > +}; > + > +&usb { > + phys = <&usb2_phy0>, <&usb2_phy1>; > + phy-names = "usb2-phy0", "usb2-phy1"; > +}; I assume there is no way other way to determine from the hardware which way the mux is set? Otherwise phy_g12a_usb3_pcie_xlate could determine the hardware mode, and reject the phy instance with the wrong mode. Thus resulting in either the PCI or USB to fail their probe. And avoiding the need to modify the DT on boot. Thanks, Andrew Murray > + */ > diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts > index b73deb282120..1ef5c2f04f67 100644 > --- a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts > +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts > @@ -14,3 +14,25 @@ > / { > compatible = "khadas,vim3", "amlogic,s922x", "amlogic,g12b"; > }; > + > +/* > + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > + * an USB3.0 Type A connector and a M.2 Key M slot. > + * The PHY driving these differential lines is shared between > + * the USB3.0 controller and the PCIe Controller, thus only > + * a single controller can use it. > + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > + * to the M.2 Key M slot, uncomment the following block to disable > + * USB3.0 from the USB Complex and enable the PCIe controller. > + */ > +/* > +&pcie { > + status = "okay"; > +}; > + > +&usb { > + phys = <&usb2_phy0>, <&usb2_phy1>; > + phy-names = "usb2-phy0", "usb2-phy1"; > +}; > + */ > diff --git a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi > index 8647da7d6609..eac5720dc15f 100644 > --- a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi > +++ b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi > @@ -246,6 +246,10 @@ > linux,rc-map-name = "rc-khadas"; > }; > > +&pcie { > + reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>; > +}; > + > &pwm_ef { > status = "okay"; > pinctrl-0 = <&pwm_e_pins>; > diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts > index 5233bd7cacfb..d9c7cbedce53 100644 > --- a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts > +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts > @@ -68,3 +68,25 @@ > clock-names = "clkin1"; > status = "okay"; > }; > + > +/* > + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > + * an USB3.0 Type A connector and a M.2 Key M slot. > + * The PHY driving these differential lines is shared between > + * the USB3.0 controller and the PCIe Controller, thus only > + * a single controller can use it. > + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > + * to the M.2 Key M slot, uncomment the following block to disable > + * USB3.0 from the USB Complex and enable the PCIe controller. > + */ > +/* > +&pcie { > + status = "okay"; > +}; > + > +&usb { > + phys = <&usb2_phy0>, <&usb2_phy1>; > + phy-names = "usb2-phy0", "usb2-phy1"; > +}; > + */ > -- > 2.17.1 >
On 11/09/2019 14:50, Andrew Murray wrote: > On Sun, Sep 08, 2019 at 01:42:58PM +0000, Neil Armstrong wrote: >> The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >> lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >> an USB3.0 Type A connector and a M.2 Key M slot. >> The PHY driving these differential lines is shared between >> the USB3.0 controller and the PCIe Controller, thus only >> a single controller can use it. >> >> The needed DT configuration when the MCU is configured to mux >> the PCIe/USB3.0 differential lines to the M.2 Key M slot is >> added commented and may uncommented to disable USB3.0 from the > > *and may be* > >> USB Complex and enable the PCIe controller. >> >> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> >> --- >> .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ >> .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ >> .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ >> .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ >> 4 files changed, 70 insertions(+) >> >> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >> index 3a6a1e0c1e32..0577b1435cbb 100644 >> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts >> @@ -14,3 +14,25 @@ >> / { >> compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; >> }; >> + >> +/* >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >> + * an USB3.0 Type A connector and a M.2 Key M slot. >> + * The PHY driving these differential lines is shared between >> + * the USB3.0 controller and the PCIe Controller, thus only >> + * a single controller can use it. >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines >> + * to the M.2 Key M slot, uncomment the following block to disable >> + * USB3.0 from the USB Complex and enable the PCIe controller. >> + */ >> +/* >> +&pcie { >> + status = "okay"; >> +}; >> + >> +&usb { >> + phys = <&usb2_phy0>, <&usb2_phy1>; >> + phy-names = "usb2-phy0", "usb2-phy1"; >> +}; > > I assume there is no way other way to determine from the hardware which way > the mux is set? No, it would be simpler :-/ The MUX is on-board and the MCU drives the MUX selection. You can look at the https://dl.khadas.com/Hardware/VIM3/Schematic/VIM3_V11_Sch.pdf The PCIE_EN signal is driven by the STM8S MCU. > > Otherwise phy_g12a_usb3_pcie_xlate could determine the hardware mode, and > reject the phy instance with the wrong mode. Thus resulting in either the > PCI or USB to fail their probe. And avoiding the need to modify the DT on > boot. Yep, it would have been simpler this way. Maybe a board vendor will set a gpio ? who knows, but for actual boards it's static or with 0ohm resistors, and for the VIM3 we only know by asking the MCU. Maybe we could add a fake PHY as a MCU MFD subdevice, wrapping calls to the right PHY. But for now the MCU has no upstream driver anyway. Neil > > Thanks, > > Andrew Murray > >> + */ >> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts >> index b73deb282120..1ef5c2f04f67 100644 >> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts >> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts >> @@ -14,3 +14,25 @@ >> / { >> compatible = "khadas,vim3", "amlogic,s922x", "amlogic,g12b"; >> }; >> + >> +/* >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >> + * an USB3.0 Type A connector and a M.2 Key M slot. >> + * The PHY driving these differential lines is shared between >> + * the USB3.0 controller and the PCIe Controller, thus only >> + * a single controller can use it. >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines >> + * to the M.2 Key M slot, uncomment the following block to disable >> + * USB3.0 from the USB Complex and enable the PCIe controller. >> + */ >> +/* >> +&pcie { >> + status = "okay"; >> +}; >> + >> +&usb { >> + phys = <&usb2_phy0>, <&usb2_phy1>; >> + phy-names = "usb2-phy0", "usb2-phy1"; >> +}; >> + */ >> diff --git a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi >> index 8647da7d6609..eac5720dc15f 100644 >> --- a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi >> +++ b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi >> @@ -246,6 +246,10 @@ >> linux,rc-map-name = "rc-khadas"; >> }; >> >> +&pcie { >> + reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>; >> +}; >> + >> &pwm_ef { >> status = "okay"; >> pinctrl-0 = <&pwm_e_pins>; >> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts >> index 5233bd7cacfb..d9c7cbedce53 100644 >> --- a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts >> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts >> @@ -68,3 +68,25 @@ >> clock-names = "clkin1"; >> status = "okay"; >> }; >> + >> +/* >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between >> + * an USB3.0 Type A connector and a M.2 Key M slot. >> + * The PHY driving these differential lines is shared between >> + * the USB3.0 controller and the PCIe Controller, thus only >> + * a single controller can use it. >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines >> + * to the M.2 Key M slot, uncomment the following block to disable >> + * USB3.0 from the USB Complex and enable the PCIe controller. >> + */ >> +/* >> +&pcie { >> + status = "okay"; >> +}; >> + >> +&usb { >> + phys = <&usb2_phy0>, <&usb2_phy1>; >> + phy-names = "usb2-phy0", "usb2-phy1"; >> +}; >> + */ >> -- >> 2.17.1 >>
On Wed, Sep 11, 2019 at 02:58:18PM +0200, Neil Armstrong wrote: > On 11/09/2019 14:50, Andrew Murray wrote: > > On Sun, Sep 08, 2019 at 01:42:58PM +0000, Neil Armstrong wrote: > >> The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > >> lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > >> an USB3.0 Type A connector and a M.2 Key M slot. > >> The PHY driving these differential lines is shared between > >> the USB3.0 controller and the PCIe Controller, thus only > >> a single controller can use it. > >> > >> The needed DT configuration when the MCU is configured to mux > >> the PCIe/USB3.0 differential lines to the M.2 Key M slot is > >> added commented and may uncommented to disable USB3.0 from the > > > > *and may be* > > > >> USB Complex and enable the PCIe controller. > >> > >> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> > >> --- > >> .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ > >> .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ > >> .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ > >> .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ > >> 4 files changed, 70 insertions(+) > >> > >> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > >> index 3a6a1e0c1e32..0577b1435cbb 100644 > >> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > >> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts > >> @@ -14,3 +14,25 @@ > >> / { > >> compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; > >> }; > >> + > >> +/* > >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > >> + * an USB3.0 Type A connector and a M.2 Key M slot. > >> + * The PHY driving these differential lines is shared between > >> + * the USB3.0 controller and the PCIe Controller, thus only > >> + * a single controller can use it. > >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > >> + * to the M.2 Key M slot, uncomment the following block to disable > >> + * USB3.0 from the USB Complex and enable the PCIe controller. > >> + */ > >> +/* > >> +&pcie { > >> + status = "okay"; > >> +}; > >> + > >> +&usb { > >> + phys = <&usb2_phy0>, <&usb2_phy1>; > >> + phy-names = "usb2-phy0", "usb2-phy1"; > >> +}; > > > > I assume there is no way other way to determine from the hardware which way > > the mux is set? > > No, it would be simpler :-/ The MUX is on-board and the MCU drives the MUX selection. > > You can look at the https://dl.khadas.com/Hardware/VIM3/Schematic/VIM3_V11_Sch.pdf > The PCIE_EN signal is driven by the STM8S MCU. Ah I see. > > > > > Otherwise phy_g12a_usb3_pcie_xlate could determine the hardware mode, and > > reject the phy instance with the wrong mode. Thus resulting in either the > > PCI or USB to fail their probe. And avoiding the need to modify the DT on > > boot. > > Yep, it would have been simpler this way. Maybe a board vendor will set a gpio ? > who knows, but for actual boards it's static or with 0ohm resistors, and for the > VIM3 we only know by asking the MCU. > > Maybe we could add a fake PHY as a MCU MFD subdevice, wrapping calls to the > right PHY. But for now the MCU has no upstream driver anyway. OK Thanks, Andrew Murray > > Neil > > > > > Thanks, > > > > Andrew Murray > > > >> + */ > >> diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts > >> index b73deb282120..1ef5c2f04f67 100644 > >> --- a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts > >> +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts > >> @@ -14,3 +14,25 @@ > >> / { > >> compatible = "khadas,vim3", "amlogic,s922x", "amlogic,g12b"; > >> }; > >> + > >> +/* > >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > >> + * an USB3.0 Type A connector and a M.2 Key M slot. > >> + * The PHY driving these differential lines is shared between > >> + * the USB3.0 controller and the PCIe Controller, thus only > >> + * a single controller can use it. > >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > >> + * to the M.2 Key M slot, uncomment the following block to disable > >> + * USB3.0 from the USB Complex and enable the PCIe controller. > >> + */ > >> +/* > >> +&pcie { > >> + status = "okay"; > >> +}; > >> + > >> +&usb { > >> + phys = <&usb2_phy0>, <&usb2_phy1>; > >> + phy-names = "usb2-phy0", "usb2-phy1"; > >> +}; > >> + */ > >> diff --git a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi > >> index 8647da7d6609..eac5720dc15f 100644 > >> --- a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi > >> +++ b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi > >> @@ -246,6 +246,10 @@ > >> linux,rc-map-name = "rc-khadas"; > >> }; > >> > >> +&pcie { > >> + reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>; > >> +}; > >> + > >> &pwm_ef { > >> status = "okay"; > >> pinctrl-0 = <&pwm_e_pins>; > >> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts > >> index 5233bd7cacfb..d9c7cbedce53 100644 > >> --- a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts > >> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts > >> @@ -68,3 +68,25 @@ > >> clock-names = "clkin1"; > >> status = "okay"; > >> }; > >> + > >> +/* > >> + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential > >> + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between > >> + * an USB3.0 Type A connector and a M.2 Key M slot. > >> + * The PHY driving these differential lines is shared between > >> + * the USB3.0 controller and the PCIe Controller, thus only > >> + * a single controller can use it. > >> + * If the MCU is configured to mux the PCIe/USB3.0 differential lines > >> + * to the M.2 Key M slot, uncomment the following block to disable > >> + * USB3.0 from the USB Complex and enable the PCIe controller. > >> + */ > >> +/* > >> +&pcie { > >> + status = "okay"; > >> +}; > >> + > >> +&usb { > >> + phys = <&usb2_phy0>, <&usb2_phy1>; > >> + phy-names = "usb2-phy0", "usb2-phy1"; > >> +}; > >> + */ > >> -- > >> 2.17.1 > >> >
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts index 3a6a1e0c1e32..0577b1435cbb 100644 --- a/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-a311d-khadas-vim3.dts @@ -14,3 +14,25 @@ / { compatible = "khadas,vim3", "amlogic,a311d", "amlogic,g12b"; }; + +/* + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between + * an USB3.0 Type A connector and a M.2 Key M slot. + * The PHY driving these differential lines is shared between + * the USB3.0 controller and the PCIe Controller, thus only + * a single controller can use it. + * If the MCU is configured to mux the PCIe/USB3.0 differential lines + * to the M.2 Key M slot, uncomment the following block to disable + * USB3.0 from the USB Complex and enable the PCIe controller. + */ +/* +&pcie { + status = "okay"; +}; + +&usb { + phys = <&usb2_phy0>, <&usb2_phy1>; + phy-names = "usb2-phy0", "usb2-phy1"; +}; + */ diff --git a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts index b73deb282120..1ef5c2f04f67 100644 --- a/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts +++ b/arch/arm64/boot/dts/amlogic/meson-g12b-s922x-khadas-vim3.dts @@ -14,3 +14,25 @@ / { compatible = "khadas,vim3", "amlogic,s922x", "amlogic,g12b"; }; + +/* + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between + * an USB3.0 Type A connector and a M.2 Key M slot. + * The PHY driving these differential lines is shared between + * the USB3.0 controller and the PCIe Controller, thus only + * a single controller can use it. + * If the MCU is configured to mux the PCIe/USB3.0 differential lines + * to the M.2 Key M slot, uncomment the following block to disable + * USB3.0 from the USB Complex and enable the PCIe controller. + */ +/* +&pcie { + status = "okay"; +}; + +&usb { + phys = <&usb2_phy0>, <&usb2_phy1>; + phy-names = "usb2-phy0", "usb2-phy1"; +}; + */ diff --git a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi index 8647da7d6609..eac5720dc15f 100644 --- a/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi +++ b/arch/arm64/boot/dts/amlogic/meson-khadas-vim3.dtsi @@ -246,6 +246,10 @@ linux,rc-map-name = "rc-khadas"; }; +&pcie { + reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>; +}; + &pwm_ef { status = "okay"; pinctrl-0 = <&pwm_e_pins>; diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts index 5233bd7cacfb..d9c7cbedce53 100644 --- a/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-khadas-vim3l.dts @@ -68,3 +68,25 @@ clock-names = "clkin1"; status = "okay"; }; + +/* + * The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential + * lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between + * an USB3.0 Type A connector and a M.2 Key M slot. + * The PHY driving these differential lines is shared between + * the USB3.0 controller and the PCIe Controller, thus only + * a single controller can use it. + * If the MCU is configured to mux the PCIe/USB3.0 differential lines + * to the M.2 Key M slot, uncomment the following block to disable + * USB3.0 from the USB Complex and enable the PCIe controller. + */ +/* +&pcie { + status = "okay"; +}; + +&usb { + phys = <&usb2_phy0>, <&usb2_phy1>; + phy-names = "usb2-phy0", "usb2-phy1"; +}; + */
The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between an USB3.0 Type A connector and a M.2 Key M slot. The PHY driving these differential lines is shared between the USB3.0 controller and the PCIe Controller, thus only a single controller can use it. The needed DT configuration when the MCU is configured to mux the PCIe/USB3.0 differential lines to the M.2 Key M slot is added commented and may uncommented to disable USB3.0 from the USB Complex and enable the PCIe controller. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> --- .../amlogic/meson-g12b-a311d-khadas-vim3.dts | 22 +++++++++++++++++++ .../amlogic/meson-g12b-s922x-khadas-vim3.dts | 22 +++++++++++++++++++ .../boot/dts/amlogic/meson-khadas-vim3.dtsi | 4 ++++ .../dts/amlogic/meson-sm1-khadas-vim3l.dts | 22 +++++++++++++++++++ 4 files changed, 70 insertions(+)