* [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits)
@ 2023-04-11 20:20 Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 1/3] clk: qcom: gcc-sc8280xp: Add EMAC GDSCs Andrew Halaney
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Andrew Halaney @ 2023-04-11 20:20 UTC (permalink / raw)
To: linux-kernel
Cc: agross, andersson, konrad.dybcio, robh+dt, krzysztof.kozlowski+dt,
mturquette, sboyd, richardcochran, linux-arm-msm, devicetree,
linux-clk, netdev, bmasney, echanude, ncai, jsuraj, hisunil,
Andrew Halaney
This is a forward port / upstream refactor of code delivered
downstream by Qualcomm over at [0] to enable the DWMAC5 based
implementation called EMAC3 on the sa8540p-ride dev board.
From what I can tell with the board schematic in hand,
as well as the code delivered, the main changes needed are:
1. A new address space layout for dwmac5/EMAC3 MTL/DMA regs
2. A new programming sequence required for the EMAC3 base platforms
This series addresses the devicetree and clock changes to support this
hardware bringup.
As requested[1], it has been split up by compile deps / maintainer tree.
The associated v4 of the netdev specific changes can be found at [2].
Together, they result in the ethernet controller working for
both controllers on this platform.
[0] https://git.codelinaro.org/clo/la/kernel/ark-5.14/-/commit/510235ad02d7f0df478146fb00d7a4ba74821b17
[1] https://lore.kernel.org/netdev/20230320202802.4e7dc54c@kernel.org/
[2] https://lore.kernel.org/netdev/20230411200409.455355-1-ahalaney@redhat.com/T/#t
v3: https://lore.kernel.org/netdev/20230331215804.783439-1-ahalaney@redhat.com/T/#m2f267485d215903494d9572507417793e600b2bf
v2: https://lore.kernel.org/netdev/20230320221617.236323-1-ahalaney@redhat.com/
v1: https://lore.kernel.org/netdev/20230313165620.128463-1-ahalaney@redhat.com/
Thanks,
Andrew
Andrew Halaney (3):
clk: qcom: gcc-sc8280xp: Add EMAC GDSCs
arm64: dts: qcom: sc8280xp: Add ethernet nodes
arm64: dts: qcom: sa8540p-ride: Add ethernet nodes
arch/arm64/boot/dts/qcom/sa8540p-ride.dts | 180 ++++++++++++++++++
arch/arm64/boot/dts/qcom/sc8280xp.dtsi | 59 ++++++
drivers/clk/qcom/gcc-sc8280xp.c | 18 ++
include/dt-bindings/clock/qcom,gcc-sc8280xp.h | 2 +
4 files changed, 259 insertions(+)
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v4 1/3] clk: qcom: gcc-sc8280xp: Add EMAC GDSCs
2023-04-11 20:20 [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Andrew Halaney
@ 2023-04-11 20:20 ` Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 2/3] arm64: dts: qcom: sc8280xp: Add ethernet nodes Andrew Halaney
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Andrew Halaney @ 2023-04-11 20:20 UTC (permalink / raw)
To: linux-kernel
Cc: agross, andersson, konrad.dybcio, robh+dt, krzysztof.kozlowski+dt,
mturquette, sboyd, richardcochran, linux-arm-msm, devicetree,
linux-clk, netdev, bmasney, echanude, ncai, jsuraj, hisunil,
Andrew Halaney
Add the EMAC GDSCs to allow the EMAC hardware to be enabled.
Acked-by: Stephen Boyd <sboyd@kernel.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
---
Changes since v3:
* None
Changes since v2:
* Add Konrad's Reviewed-by
Changes since v1:
* Add Stephen's Acked-by
* Explicitly tested on x13s laptop with no noticeable side effect (Konrad)
drivers/clk/qcom/gcc-sc8280xp.c | 18 ++++++++++++++++++
include/dt-bindings/clock/qcom,gcc-sc8280xp.h | 2 ++
2 files changed, 20 insertions(+)
diff --git a/drivers/clk/qcom/gcc-sc8280xp.c b/drivers/clk/qcom/gcc-sc8280xp.c
index b3198784e1c3..04a99dbaa57e 100644
--- a/drivers/clk/qcom/gcc-sc8280xp.c
+++ b/drivers/clk/qcom/gcc-sc8280xp.c
@@ -6873,6 +6873,22 @@ static struct gdsc usb30_sec_gdsc = {
.pwrsts = PWRSTS_RET_ON,
};
+static struct gdsc emac_0_gdsc = {
+ .gdscr = 0xaa004,
+ .pd = {
+ .name = "emac_0_gdsc",
+ },
+ .pwrsts = PWRSTS_OFF_ON,
+};
+
+static struct gdsc emac_1_gdsc = {
+ .gdscr = 0xba004,
+ .pd = {
+ .name = "emac_1_gdsc",
+ },
+ .pwrsts = PWRSTS_OFF_ON,
+};
+
static struct clk_regmap *gcc_sc8280xp_clocks[] = {
[GCC_AGGRE_NOC_PCIE0_TUNNEL_AXI_CLK] = &gcc_aggre_noc_pcie0_tunnel_axi_clk.clkr,
[GCC_AGGRE_NOC_PCIE1_TUNNEL_AXI_CLK] = &gcc_aggre_noc_pcie1_tunnel_axi_clk.clkr,
@@ -7351,6 +7367,8 @@ static struct gdsc *gcc_sc8280xp_gdscs[] = {
[USB30_MP_GDSC] = &usb30_mp_gdsc,
[USB30_PRIM_GDSC] = &usb30_prim_gdsc,
[USB30_SEC_GDSC] = &usb30_sec_gdsc,
+ [EMAC_0_GDSC] = &emac_0_gdsc,
+ [EMAC_1_GDSC] = &emac_1_gdsc,
};
static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
diff --git a/include/dt-bindings/clock/qcom,gcc-sc8280xp.h b/include/dt-bindings/clock/qcom,gcc-sc8280xp.h
index cb2fb638825c..721105ea4fad 100644
--- a/include/dt-bindings/clock/qcom,gcc-sc8280xp.h
+++ b/include/dt-bindings/clock/qcom,gcc-sc8280xp.h
@@ -492,5 +492,7 @@
#define USB30_MP_GDSC 9
#define USB30_PRIM_GDSC 10
#define USB30_SEC_GDSC 11
+#define EMAC_0_GDSC 12
+#define EMAC_1_GDSC 13
#endif
--
2.39.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v4 2/3] arm64: dts: qcom: sc8280xp: Add ethernet nodes
2023-04-11 20:20 [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 1/3] clk: qcom: gcc-sc8280xp: Add EMAC GDSCs Andrew Halaney
@ 2023-04-11 20:20 ` Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 3/3] arm64: dts: qcom: sa8540p-ride: " Andrew Halaney
2023-04-12 15:25 ` [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Brian Masney
3 siblings, 0 replies; 5+ messages in thread
From: Andrew Halaney @ 2023-04-11 20:20 UTC (permalink / raw)
To: linux-kernel
Cc: agross, andersson, konrad.dybcio, robh+dt, krzysztof.kozlowski+dt,
mturquette, sboyd, richardcochran, linux-arm-msm, devicetree,
linux-clk, netdev, bmasney, echanude, ncai, jsuraj, hisunil,
Andrew Halaney
This platform has 2 MACs integrated in it, go ahead and describe them.
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
---
Changes since v3:
* Order soc node via unit address (Konrad)
* Add Reviewed-by (Konrad)
Changes since v2:
* Fix spacing (Konrad)
Changes since v1:
* None
arch/arm64/boot/dts/qcom/sc8280xp.dtsi | 59 ++++++++++++++++++++++++++
1 file changed, 59 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sc8280xp.dtsi b/arch/arm64/boot/dts/qcom/sc8280xp.dtsi
index 42bfa9fa5b96..fdac7f0b05ee 100644
--- a/arch/arm64/boot/dts/qcom/sc8280xp.dtsi
+++ b/arch/arm64/boot/dts/qcom/sc8280xp.dtsi
@@ -761,6 +761,35 @@ soc: soc@0 {
ranges = <0 0 0 0 0x10 0>;
dma-ranges = <0 0 0 0 0x10 0>;
+ ethernet0: ethernet@20000 {
+ compatible = "qcom,sc8280xp-ethqos";
+ reg = <0x0 0x00020000 0x0 0x10000>,
+ <0x0 0x00036000 0x0 0x100>;
+ reg-names = "stmmaceth", "rgmii";
+
+ clocks = <&gcc GCC_EMAC0_AXI_CLK>,
+ <&gcc GCC_EMAC0_SLV_AHB_CLK>,
+ <&gcc GCC_EMAC0_PTP_CLK>,
+ <&gcc GCC_EMAC0_RGMII_CLK>;
+ clock-names = "stmmaceth",
+ "pclk",
+ "ptp_ref",
+ "rgmii";
+
+ interrupts = <GIC_SPI 946 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 936 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq", "eth_lpi";
+ iommus = <&apps_smmu 0x4c0 0xf>;
+ power-domains = <&gcc EMAC_0_GDSC>;
+
+ snps,tso;
+ snps,pbl = <32>;
+ rx-fifo-depth = <4096>;
+ tx-fifo-depth = <4096>;
+
+ status = "disabled";
+ };
+
gcc: clock-controller@100000 {
compatible = "qcom,gcc-sc8280xp";
reg = <0x0 0x00100000 0x0 0x1f0000>;
@@ -4681,6 +4710,36 @@ dispcc1: clock-controller@22100000 {
status = "disabled";
};
+
+ ethernet1: ethernet@23000000 {
+ compatible = "qcom,sc8280xp-ethqos";
+ reg = <0x0 0x23000000 0x0 0x10000>,
+ <0x0 0x23016000 0x0 0x100>;
+ reg-names = "stmmaceth", "rgmii";
+
+ clocks = <&gcc GCC_EMAC1_AXI_CLK>,
+ <&gcc GCC_EMAC1_SLV_AHB_CLK>,
+ <&gcc GCC_EMAC1_PTP_CLK>,
+ <&gcc GCC_EMAC1_RGMII_CLK>;
+ clock-names = "stmmaceth",
+ "pclk",
+ "ptp_ref",
+ "rgmii";
+
+ interrupts = <GIC_SPI 929 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 919 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "macirq", "eth_lpi";
+
+ iommus = <&apps_smmu 0x40 0xf>;
+ power-domains = <&gcc EMAC_1_GDSC>;
+
+ snps,tso;
+ snps,pbl = <32>;
+ rx-fifo-depth = <4096>;
+ tx-fifo-depth = <4096>;
+
+ status = "disabled";
+ };
};
sound: sound {
--
2.39.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v4 3/3] arm64: dts: qcom: sa8540p-ride: Add ethernet nodes
2023-04-11 20:20 [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 1/3] clk: qcom: gcc-sc8280xp: Add EMAC GDSCs Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 2/3] arm64: dts: qcom: sc8280xp: Add ethernet nodes Andrew Halaney
@ 2023-04-11 20:20 ` Andrew Halaney
2023-04-12 15:25 ` [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Brian Masney
3 siblings, 0 replies; 5+ messages in thread
From: Andrew Halaney @ 2023-04-11 20:20 UTC (permalink / raw)
To: linux-kernel
Cc: agross, andersson, konrad.dybcio, robh+dt, krzysztof.kozlowski+dt,
mturquette, sboyd, richardcochran, linux-arm-msm, devicetree,
linux-clk, netdev, bmasney, echanude, ncai, jsuraj, hisunil,
Andrew Halaney
Enable both the MACs found on the board.
ethernet0 and ethernet1 both ultimately go to a series of on board
switches which aren't managed by this processor.
ethernet0 is connected to a Marvell 88EA1512 phy via RGMII. That goes to
the series of switches via SGMII on the "media" side of the phy.
RGMII_SGMII mode is enabled via devicetree register descriptions.
The switch on the "media" side has auto-negotiation disabled, so
configuration from userspace similar to:
ethtool -s eth0 autoneg off speed 1000 duplex full
is necessary to get traffic flowing on that interface.
ethernet1 is in a mac2mac/fixed-link configuration going to the same
series of switches directly via RGMII.
Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
---
Changes since v3:
* Compatible goes first in node (Krzysztof)
Changes since v1 and v2:
* None
arch/arm64/boot/dts/qcom/sa8540p-ride.dts | 180 ++++++++++++++++++++++
1 file changed, 180 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sa8540p-ride.dts b/arch/arm64/boot/dts/qcom/sa8540p-ride.dts
index 40db5aa0803c..caad955969bc 100644
--- a/arch/arm64/boot/dts/qcom/sa8540p-ride.dts
+++ b/arch/arm64/boot/dts/qcom/sa8540p-ride.dts
@@ -28,6 +28,65 @@ aliases {
chosen {
stdout-path = "serial0:115200n8";
};
+
+ mtl_rx_setup: rx-queues-config {
+ snps,rx-queues-to-use = <1>;
+ snps,rx-sched-sp;
+
+ queue0 {
+ snps,dcb-algorithm;
+ snps,map-to-dma-channel = <0x0>;
+ snps,route-up;
+ snps,priority = <0x1>;
+ };
+
+ queue1 {
+ snps,dcb-algorithm;
+ snps,map-to-dma-channel = <0x1>;
+ snps,route-ptp;
+ };
+
+ queue2 {
+ snps,avb-algorithm;
+ snps,map-to-dma-channel = <0x2>;
+ snps,route-avcp;
+ };
+
+ queue3 {
+ snps,avb-algorithm;
+ snps,map-to-dma-channel = <0x3>;
+ snps,priority = <0xc>;
+ };
+ };
+
+ mtl_tx_setup: tx-queues-config {
+ snps,tx-queues-to-use = <1>;
+ snps,tx-sched-sp;
+
+ queue0 {
+ snps,dcb-algorithm;
+ };
+
+ queue1 {
+ snps,dcb-algorithm;
+ };
+
+ queue2 {
+ snps,avb-algorithm;
+ snps,send_slope = <0x1000>;
+ snps,idle_slope = <0x1000>;
+ snps,high_credit = <0x3e800>;
+ snps,low_credit = <0xffc18000>;
+ };
+
+ queue3 {
+ snps,avb-algorithm;
+ snps,send_slope = <0x1000>;
+ snps,idle_slope = <0x1000>;
+ snps,high_credit = <0x3e800>;
+ snps,low_credit = <0xffc18000>;
+ };
+ };
};
&apps_rsc {
@@ -151,6 +210,67 @@ vreg_l8g: ldo8 {
};
};
+ðernet0 {
+ snps,mtl-rx-config = <&mtl_rx_setup>;
+ snps,mtl-tx-config = <&mtl_tx_setup>;
+
+ max-speed = <1000>;
+ phy-handle = <&rgmii_phy>;
+ phy-mode = "rgmii-txid";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <ðernet0_default>;
+
+ status = "okay";
+
+ mdio {
+ compatible = "snps,dwmac-mdio";
+ #address-cells = <0x1>;
+ #size-cells = <0x0>;
+
+ /* Marvell 88EA1512 */
+ rgmii_phy: phy@8 {
+ reg = <0x8>;
+
+ interrupt-parent = <&tlmm>;
+ interrupts-extended = <&tlmm 127 IRQ_TYPE_EDGE_FALLING>;
+
+ reset-gpios = <&pmm8540c_gpios 1 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <11000>;
+ reset-deassert-us = <70000>;
+
+ device_type = "ethernet-phy";
+
+ /* Set to RGMII_SGMII mode and soft reset. Turn off auto-negotiation
+ * from userspace to talk to the switch on the SGMII side of things
+ */
+ marvell,reg-init =
+ /* Set MODE[2:0] to RGMII_SGMII */
+ <0x12 0x14 0xfff8 0x4>,
+ /* Soft reset required after changing MODE[2:0] */
+ <0x12 0x14 0x7fff 0x8000>;
+ };
+ };
+};
+
+ðernet1 {
+ snps,mtl-rx-config = <&mtl_rx_setup>;
+ snps,mtl-tx-config = <&mtl_tx_setup>;
+
+ max-speed = <1000>;
+ phy-mode = "rgmii-txid";
+
+ pinctrl-names = "default";
+ pinctrl-0 = <ðernet1_default>;
+
+ status = "okay";
+
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
+};
+
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c0_default>;
@@ -316,6 +436,66 @@ &xo_board_clk {
/* PINCTRL */
&tlmm {
+ ethernet0_default: ethernet0-default-state {
+ mdc-pins {
+ pins = "gpio175";
+ function = "rgmii_0";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ mdio-pins {
+ pins = "gpio176";
+ function = "rgmii_0";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ rgmii-tx-pins {
+ pins = "gpio183", "gpio184", "gpio185", "gpio186", "gpio187", "gpio188";
+ function = "rgmii_0";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ rgmii-rx-pins {
+ pins = "gpio177", "gpio178", "gpio179", "gpio180", "gpio181", "gpio182";
+ function = "rgmii_0";
+ drive-strength = <16>;
+ bias-disable;
+ };
+ };
+
+ ethernet1_default: ethernet1-default-state {
+ mdc-pins {
+ pins = "gpio97";
+ function = "rgmii_1";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ mdio-pins {
+ pins = "gpio98";
+ function = "rgmii_1";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ rgmii-tx-pins {
+ pins = "gpio105", "gpio106", "gpio107", "gpio108", "gpio109", "gpio110";
+ function = "rgmii_1";
+ drive-strength = <16>;
+ bias-pull-up;
+ };
+
+ rgmii-rx-pins {
+ pins = "gpio99", "gpio100", "gpio101", "gpio102", "gpio103", "gpio104";
+ function = "rgmii_1";
+ drive-strength = <16>;
+ bias-disable;
+ };
+ };
+
i2c0_default: i2c0-default-state {
/* To USB7002T-I/KDXVA0 USB hub (SIP1 only) */
pins = "gpio135", "gpio136";
--
2.39.2
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits)
2023-04-11 20:20 [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Andrew Halaney
` (2 preceding siblings ...)
2023-04-11 20:20 ` [PATCH v4 3/3] arm64: dts: qcom: sa8540p-ride: " Andrew Halaney
@ 2023-04-12 15:25 ` Brian Masney
3 siblings, 0 replies; 5+ messages in thread
From: Brian Masney @ 2023-04-12 15:25 UTC (permalink / raw)
To: Andrew Halaney
Cc: linux-kernel, agross, andersson, konrad.dybcio, robh+dt,
krzysztof.kozlowski+dt, mturquette, sboyd, richardcochran,
linux-arm-msm, devicetree, linux-clk, netdev, echanude, ncai,
jsuraj, hisunil
On Tue, Apr 11, 2023 at 03:20:06PM -0500, Andrew Halaney wrote:
> This is a forward port / upstream refactor of code delivered
> downstream by Qualcomm over at [0] to enable the DWMAC5 based
> implementation called EMAC3 on the sa8540p-ride dev board.
>
> From what I can tell with the board schematic in hand,
> as well as the code delivered, the main changes needed are:
>
> 1. A new address space layout for dwmac5/EMAC3 MTL/DMA regs
> 2. A new programming sequence required for the EMAC3 base platforms
>
> This series addresses the devicetree and clock changes to support this
> hardware bringup.
>
> As requested[1], it has been split up by compile deps / maintainer tree.
> The associated v4 of the netdev specific changes can be found at [2].
> Together, they result in the ethernet controller working for
> both controllers on this platform.
Looks good to me!
Tested-by: Brian Masney <bmasney@redhat.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-04-12 15:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-11 20:20 [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 1/3] clk: qcom: gcc-sc8280xp: Add EMAC GDSCs Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 2/3] arm64: dts: qcom: sc8280xp: Add ethernet nodes Andrew Halaney
2023-04-11 20:20 ` [PATCH v4 3/3] arm64: dts: qcom: sa8540p-ride: " Andrew Halaney
2023-04-12 15:25 ` [PATCH v4 0/3] Add EMAC3 support for sa8540p-ride (devicetree/clk bits) Brian Masney
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.