Message ID | 20221104142746.350468-6-maxime.chevallier@bootlin.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: ipqess: introduce Qualcomm IPQESS driver | expand |
On 04/11/2022 10:27, Maxime Chevallier wrote: > The Qualcomm IPQ4019 includes an internal 5 ports switch, which is > connected to the CPU through the internal IPQESS Ethernet controller. > > Add support for this internal interface, which is internally connected to a > modified version of the QCA8K Ethernet switch. > > This Ethernet controller only support a specific internal interface mode > for connection to the switch. > > Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > V6->V7: > - No Changes > V5->V6: > - Removed extra blank lines > - Put the status property last > V4->V5: > - Reword the commit log > V3->V4: > - No Changes > V2->V3: > - No Changes > V1->V2: > - Added clock and resets > > arch/arm/boot/dts/qcom-ipq4019.dtsi | 44 +++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi > index b23591110bd2..5fa1af147df9 100644 > --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi > +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi > @@ -38,6 +38,7 @@ aliases { > spi1 = &blsp1_spi2; > i2c0 = &blsp1_i2c3; > i2c1 = &blsp1_i2c4; > + ethernet0 = &gmac; Hm, I have doubts about this one. Why alias is needed and why it is a property of a SoC? Not every board has Ethernet enabled, so this looks like board property. I also wonder why do you need it at all? Best regards, Krzysztof
On Fri, Nov 04, 2022 at 10:31:06AM -0400, Krzysztof Kozlowski wrote: > > diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi > > index b23591110bd2..5fa1af147df9 100644 > > --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi > > +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi > > @@ -38,6 +38,7 @@ aliases { > > spi1 = &blsp1_spi2; > > i2c0 = &blsp1_i2c3; > > i2c1 = &blsp1_i2c4; > > + ethernet0 = &gmac; > > Hm, I have doubts about this one. Why alias is needed and why it is a > property of a SoC? Not every board has Ethernet enabled, so this looks > like board property. > > I also wonder why do you need it at all? In general, Ethernet aliases are needed so that the bootloader can fix up the MAC address of each port's OF node with values it gets from the U-Boot environment or an AT24 EEPROM or something like that.
On 04/11/2022 10:32, Vladimir Oltean wrote: > On Fri, Nov 04, 2022 at 10:31:06AM -0400, Krzysztof Kozlowski wrote: >>> diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi >>> index b23591110bd2..5fa1af147df9 100644 >>> --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi >>> +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi >>> @@ -38,6 +38,7 @@ aliases { >>> spi1 = &blsp1_spi2; >>> i2c0 = &blsp1_i2c3; >>> i2c1 = &blsp1_i2c4; >>> + ethernet0 = &gmac; >> >> Hm, I have doubts about this one. Why alias is needed and why it is a >> property of a SoC? Not every board has Ethernet enabled, so this looks >> like board property. >> >> I also wonder why do you need it at all? > > In general, Ethernet aliases are needed so that the bootloader can fix > up the MAC address of each port's OF node with values it gets from the > U-Boot environment or an AT24 EEPROM or something like that. Assuming that's the case here, my other part of question remains - is this property of SoC or board? The buses (SPI, I2C) are properties of boards, even though were incorrectly put here. If the board has multiple ethernets, the final ordering is the property of the board, not SoC. I would assume that bootloader also configures the MAC address based on the board config, not per SoC... Best regards, Krzysztof
On Fri, Nov 04, 2022 at 11:08:07AM -0400, Krzysztof Kozlowski wrote: > On 04/11/2022 10:32, Vladimir Oltean wrote: > > On Fri, Nov 04, 2022 at 10:31:06AM -0400, Krzysztof Kozlowski wrote: > >>> diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi > >>> index b23591110bd2..5fa1af147df9 100644 > >>> --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi > >>> +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi > >>> @@ -38,6 +38,7 @@ aliases { > >>> spi1 = &blsp1_spi2; > >>> i2c0 = &blsp1_i2c3; > >>> i2c1 = &blsp1_i2c4; > >>> + ethernet0 = &gmac; > >> > >> Hm, I have doubts about this one. Why alias is needed and why it is a > >> property of a SoC? Not every board has Ethernet enabled, so this looks > >> like board property. > >> > >> I also wonder why do you need it at all? > > > > In general, Ethernet aliases are needed so that the bootloader can fix > > up the MAC address of each port's OF node with values it gets from the > > U-Boot environment or an AT24 EEPROM or something like that. > > Assuming that's the case here, my other part of question remains - is > this property of SoC or board? The buses (SPI, I2C) are properties of > boards, even though were incorrectly put here. If the board has multiple > ethernets, the final ordering is the property of the board, not SoC. I > would assume that bootloader also configures the MAC address based on > the board config, not per SoC... I don't disagree. On NXP LS1028A, we also have all aliases in board device trees and not in the SoC dtsi.
Hello Krzysztof, Vladimir, On Fri, 4 Nov 2022 15:40:48 +0000 Vladimir Oltean <vladimir.oltean@nxp.com> wrote: > On Fri, Nov 04, 2022 at 11:08:07AM -0400, Krzysztof Kozlowski wrote: > > On 04/11/2022 10:32, Vladimir Oltean wrote: > > > On Fri, Nov 04, 2022 at 10:31:06AM -0400, Krzysztof Kozlowski > > > wrote: > > >>> diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi > > >>> b/arch/arm/boot/dts/qcom-ipq4019.dtsi index > > >>> b23591110bd2..5fa1af147df9 100644 --- > > >>> a/arch/arm/boot/dts/qcom-ipq4019.dtsi +++ > > >>> b/arch/arm/boot/dts/qcom-ipq4019.dtsi @@ -38,6 +38,7 @@ aliases > > >>> { spi1 = &blsp1_spi2; > > >>> i2c0 = &blsp1_i2c3; > > >>> i2c1 = &blsp1_i2c4; > > >>> + ethernet0 = &gmac; > > >> > > >> Hm, I have doubts about this one. Why alias is needed and why it > > >> is a property of a SoC? Not every board has Ethernet enabled, so > > >> this looks like board property. > > >> > > >> I also wonder why do you need it at all? > > > > > > In general, Ethernet aliases are needed so that the bootloader > > > can fix up the MAC address of each port's OF node with values it > > > gets from the U-Boot environment or an AT24 EEPROM or something > > > like that. > > > > Assuming that's the case here, my other part of question remains - > > is this property of SoC or board? The buses (SPI, I2C) are > > properties of boards, even though were incorrectly put here. If the > > board has multiple ethernets, the final ordering is the property of > > the board, not SoC. I would assume that bootloader also configures > > the MAC address based on the board config, not per SoC... > > I don't disagree. On NXP LS1028A, we also have all aliases in board > device trees and not in the SoC dtsi. You're right indeed, it was put there so that it's alongside the other aliases, but it makes more sense to include it in the board file. I'll respin with the alias removed. Thanks, Maxime
On Fri, Nov 4, 2022 at 3:28 PM Maxime Chevallier <maxime.chevallier@bootlin.com> wrote: > > The Qualcomm IPQ4019 includes an internal 5 ports switch, which is > connected to the CPU through the internal IPQESS Ethernet controller. > > Add support for this internal interface, which is internally connected to a > modified version of the QCA8K Ethernet switch. > > This Ethernet controller only support a specific internal interface mode > for connection to the switch. > > Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com> > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> > --- > V6->V7: > - No Changes > V5->V6: > - Removed extra blank lines > - Put the status property last > V4->V5: > - Reword the commit log > V3->V4: > - No Changes > V2->V3: > - No Changes > V1->V2: > - Added clock and resets > > arch/arm/boot/dts/qcom-ipq4019.dtsi | 44 +++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi > index b23591110bd2..5fa1af147df9 100644 > --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi > +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi > @@ -38,6 +38,7 @@ aliases { > spi1 = &blsp1_spi2; > i2c0 = &blsp1_i2c3; > i2c1 = &blsp1_i2c4; > + ethernet0 = &gmac; > }; > > cpus { > @@ -591,6 +592,49 @@ wifi1: wifi@a800000 { > status = "disabled"; > }; > > + gmac: ethernet@c080000 { > + compatible = "qcom,ipq4019-ess-edma"; > + reg = <0xc080000 0x8000>; > + resets = <&gcc ESS_RESET>; > + reset-names = "ess"; > + clocks = <&gcc GCC_ESS_CLK>; > + clock-names = "ess"; > + interrupts = <GIC_SPI 65 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 66 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 67 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 68 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 69 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 70 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 71 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 72 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 73 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 74 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 75 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 76 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 77 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 80 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 240 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 241 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 242 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 243 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 244 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 245 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 246 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 247 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 248 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 249 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 250 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 251 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 252 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 253 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 254 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 255 IRQ_TYPE_EDGE_RISING>; > + phy-mode = "internal"; > + status = "disabled"; The fixed-link should be defined here AFAIK, otherwise it will fail probing with just internal PHY mode. Regards, Robert > + }; > + > mdio: mdio@90000 { > #address-cells = <1>; > #size-cells = <0>; > -- > 2.37.3 >
On Fri, Nov 04, 2022 at 05:42:30PM +0100, Robert Marko wrote: > > + phy-mode = "internal"; > > + status = "disabled"; > > The fixed-link should be defined here AFAIK, otherwise it will fail probing with > just internal PHY mode. It wouldn't fail to probe because it has status = "disabled" by default, and who enables that would also provide the fixed-link presumably. But if the speed of the pseudo-MAC that goes to the switch is not board specific, indeed the fixed-link belongs to the SoC dtsi.
On Fri, Nov 4, 2022 at 5:45 PM Vladimir Oltean <vladimir.oltean@nxp.com> wrote: > > On Fri, Nov 04, 2022 at 05:42:30PM +0100, Robert Marko wrote: > > > + phy-mode = "internal"; > > > + status = "disabled"; > > > > The fixed-link should be defined here AFAIK, otherwise it will fail probing with > > just internal PHY mode. > > It wouldn't fail to probe because it has status = "disabled" by default, > and who enables that would also provide the fixed-link presumably. > But if the speed of the pseudo-MAC that goes to the switch is not board > specific, indeed the fixed-link belongs to the SoC dtsi. Yes, its directly connected to the switch CPU port and its a part of the SoC, so it should be defined in the SoC DTSI as it cannot really be changed on boards. Regards, Robert
diff --git a/arch/arm/boot/dts/qcom-ipq4019.dtsi b/arch/arm/boot/dts/qcom-ipq4019.dtsi index b23591110bd2..5fa1af147df9 100644 --- a/arch/arm/boot/dts/qcom-ipq4019.dtsi +++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi @@ -38,6 +38,7 @@ aliases { spi1 = &blsp1_spi2; i2c0 = &blsp1_i2c3; i2c1 = &blsp1_i2c4; + ethernet0 = &gmac; }; cpus { @@ -591,6 +592,49 @@ wifi1: wifi@a800000 { status = "disabled"; }; + gmac: ethernet@c080000 { + compatible = "qcom,ipq4019-ess-edma"; + reg = <0xc080000 0x8000>; + resets = <&gcc ESS_RESET>; + reset-names = "ess"; + clocks = <&gcc GCC_ESS_CLK>; + clock-names = "ess"; + interrupts = <GIC_SPI 65 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 66 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 67 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 68 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 69 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 70 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 71 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 72 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 73 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 74 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 75 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 76 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 77 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 80 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 240 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 241 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 242 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 243 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 244 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 245 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 246 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 247 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 248 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 249 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 250 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 251 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 252 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 253 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 254 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 255 IRQ_TYPE_EDGE_RISING>; + phy-mode = "internal"; + status = "disabled"; + }; + mdio: mdio@90000 { #address-cells = <1>; #size-cells = <0>;