mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-12-06 20:54:00 -05:00
Add a new microchipsw target aimed add supporting Microchip switch SoC-s. Start by supporting LAN969x SoC-s as the first subtarget. Signed-off-by: Robert Marko <robert.marko@sartura.hr>
212 lines
8.7 KiB
Diff
212 lines
8.7 KiB
Diff
From 49fbe4bb20903f595b1c22b51aa6a9d3bf0ed5de Mon Sep 17 00:00:00 2001
|
|
From: Daniel Machon <daniel.machon@microchip.com>
|
|
Date: Fri, 20 Dec 2024 14:48:46 +0100
|
|
Subject: [PATCH 74/82] net: lan969x: add RGMII registers
|
|
|
|
Configuration of RGMII is done by configuring the GPIO and clock
|
|
settings in the HSIOWRAP target, and configuring the RGMII port devices
|
|
in the DEVRGMII target. Both targets contain registers replicated for
|
|
the number of RGMII port devices, which is two.
|
|
|
|
Add said targets and register macros required to configure RGMII.
|
|
|
|
Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com>
|
|
Reviewed-by: Horatiu Vultur <horatiu.vultur@microchip.com>
|
|
Tested-by: Robert Marko <robert.marko@sartura.hr>
|
|
Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
|
|
Link: https://patch.msgid.link/20241220-sparx5-lan969x-switch-driver-4-v5-7-fa8ba5dff732@microchip.com
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
.../microchip/sparx5/lan969x/lan969x.c | 3 +
|
|
.../microchip/sparx5/sparx5_main_regs.h | 145 ++++++++++++++++++
|
|
2 files changed, 148 insertions(+)
|
|
|
|
--- a/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
|
|
+++ b/drivers/net/ethernet/microchip/sparx5/lan969x/lan969x.c
|
|
@@ -90,9 +90,12 @@ static const struct sparx5_main_io_resou
|
|
{ TARGET_DEV2G5 + 27, 0x30d8000, 1 }, /* 0xe30d8000 */
|
|
{ TARGET_DEV10G + 9, 0x30dc000, 1 }, /* 0xe30dc000 */
|
|
{ TARGET_PCS10G_BR + 9, 0x30e0000, 1 }, /* 0xe30e0000 */
|
|
+ { TARGET_DEVRGMII, 0x30e4000, 1 }, /* 0xe30e4000 */
|
|
+ { TARGET_DEVRGMII + 1, 0x30e8000, 1 }, /* 0xe30e8000 */
|
|
{ TARGET_DSM, 0x30ec000, 1 }, /* 0xe30ec000 */
|
|
{ TARGET_PORT_CONF, 0x30f0000, 1 }, /* 0xe30f0000 */
|
|
{ TARGET_ASM, 0x3200000, 1 }, /* 0xe3200000 */
|
|
+ { TARGET_HSIO_WRAP, 0x3408000, 1 }, /* 0xe3408000 */
|
|
};
|
|
|
|
static struct sparx5_sdlb_group lan969x_sdlb_groups[LAN969X_SDLB_GRP_CNT] = {
|
|
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_main_regs.h
|
|
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_main_regs.h
|
|
@@ -37,6 +37,7 @@ enum sparx5_target {
|
|
TARGET_FDMA = 117,
|
|
TARGET_GCB = 118,
|
|
TARGET_HSCH = 119,
|
|
+ TARGET_HSIO_WRAP = 120,
|
|
TARGET_LRN = 122,
|
|
TARGET_PCEP = 129,
|
|
TARGET_PCS10G_BR = 132,
|
|
@@ -54,6 +55,7 @@ enum sparx5_target {
|
|
TARGET_VCAP_SUPER = 326,
|
|
TARGET_VOP = 327,
|
|
TARGET_XQS = 331,
|
|
+ TARGET_DEVRGMII = 392,
|
|
NUM_TARGETS = 517
|
|
};
|
|
|
|
@@ -5367,6 +5369,69 @@ extern const struct sparx5_regs *regs;
|
|
#define HSCH_TAS_STATEMACHINE_CFG_REVISIT_DLY_GET(x)\
|
|
FIELD_GET(HSCH_TAS_STATEMACHINE_CFG_REVISIT_DLY, x)
|
|
|
|
+/* LAN969X ONLY */
|
|
+/* HSIOWRAP:XMII_CFG:XMII_CFG */
|
|
+#define HSIO_WRAP_XMII_CFG(g) \
|
|
+ __REG(TARGET_HSIO_WRAP, 0, 1, 116, g, 2, 20, 0, 0, 1, 4)
|
|
+
|
|
+#define HSIO_WRAP_XMII_CFG_GPIO_XMII_CFG GENMASK(2, 1)
|
|
+#define HSIO_WRAP_XMII_CFG_GPIO_XMII_CFG_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_XMII_CFG_GPIO_XMII_CFG, x)
|
|
+#define HSIO_WRAP_XMII_CFG_GPIO_XMII_CFG_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_XMII_CFG_GPIO_XMII_CFG, x)
|
|
+
|
|
+/* LAN969X ONLY */
|
|
+/* HSIOWRAP:XMII_CFG:RGMII_CFG */
|
|
+#define HSIO_WRAP_RGMII_CFG(g) \
|
|
+ __REG(TARGET_HSIO_WRAP, 0, 1, 116, g, 2, 20, 4, 0, 1, 4)
|
|
+
|
|
+#define HSIO_WRAP_RGMII_CFG_TX_CLK_CFG GENMASK(4, 2)
|
|
+#define HSIO_WRAP_RGMII_CFG_TX_CLK_CFG_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_RGMII_CFG_TX_CLK_CFG, x)
|
|
+#define HSIO_WRAP_RGMII_CFG_TX_CLK_CFG_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_RGMII_CFG_TX_CLK_CFG, x)
|
|
+
|
|
+#define HSIO_WRAP_RGMII_CFG_RGMII_TX_RST BIT(1)
|
|
+#define HSIO_WRAP_RGMII_CFG_RGMII_TX_RST_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_RGMII_CFG_RGMII_TX_RST, x)
|
|
+#define HSIO_WRAP_RGMII_CFG_RGMII_TX_RST_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_RGMII_CFG_RGMII_TX_RST, x)
|
|
+
|
|
+#define HSIO_WRAP_RGMII_CFG_RGMII_RX_RST BIT(0)
|
|
+#define HSIO_WRAP_RGMII_CFG_RGMII_RX_RST_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_RGMII_CFG_RGMII_RX_RST, x)
|
|
+#define HSIO_WRAP_RGMII_CFG_RGMII_RX_RST_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_RGMII_CFG_RGMII_RX_RST, x)
|
|
+
|
|
+/* LAN969X ONLY */
|
|
+/* HSIOWRAP:XMII_CFG:DLL_CFG */
|
|
+#define HSIO_WRAP_DLL_CFG(g, r) \
|
|
+ __REG(TARGET_HSIO_WRAP, 0, 1, 116, g, 2, 20, 12, r, 2, 4)
|
|
+
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_ENA BIT(19)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_ENA_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_DLL_CFG_DLL_ENA, x)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_ENA_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_DLL_CFG_DLL_ENA, x)
|
|
+
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_CLK_ENA BIT(18)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_CLK_ENA_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_DLL_CFG_DLL_CLK_ENA, x)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_CLK_ENA_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_DLL_CFG_DLL_CLK_ENA, x)
|
|
+
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_CLK_SEL GENMASK(17, 15)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_CLK_SEL_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_DLL_CFG_DLL_CLK_SEL, x)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_CLK_SEL_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_DLL_CFG_DLL_CLK_SEL, x)
|
|
+
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_RST BIT(0)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_RST_SET(x)\
|
|
+ FIELD_PREP(HSIO_WRAP_DLL_CFG_DLL_RST, x)
|
|
+#define HSIO_WRAP_DLL_CFG_DLL_RST_GET(x)\
|
|
+ FIELD_GET(HSIO_WRAP_DLL_CFG_DLL_RST, x)
|
|
+
|
|
/* LRN:COMMON:COMMON_ACCESS_CTRL */
|
|
#define LRN_COMMON_ACCESS_CTRL \
|
|
__REG(TARGET_LRN, 0, 1, 0, 0, 1, 72, 0, 0, 1, 4)
|
|
@@ -8110,4 +8175,84 @@ extern const struct sparx5_regs *regs;
|
|
#define XQS_CNT(g) \
|
|
__REG(TARGET_XQS, 0, 1, 0, g, 1024, 4, 0, 0, 1, 4)
|
|
|
|
+/* LAN969X ONLY */
|
|
+/* DEV1G:DEV_CFG_STATUS:DEV_RST_CTRL */
|
|
+#define DEVRGMII_DEV_RST_CTRL(t) \
|
|
+ __REG(TARGET_DEVRGMII, t, 2, 0, 0, 1, 36, 0, 0, 1, 4)
|
|
+
|
|
+#define DEVRGMII_DEV_RST_CTRL_SPEED_SEL GENMASK(22, 20)
|
|
+#define DEVRGMII_DEV_RST_CTRL_SPEED_SEL_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_DEV_RST_CTRL_SPEED_SEL, x)
|
|
+#define DEVRGMII_DEV_RST_CTRL_SPEED_SEL_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_DEV_RST_CTRL_SPEED_SEL, x)
|
|
+
|
|
+/* LAN969X ONLY */
|
|
+/* DEV1G:MAC_CFG_STATUS:MAC_ENA_CFG */
|
|
+#define DEVRGMII_MAC_ENA_CFG(t) \
|
|
+ __REG(TARGET_DEVRGMII, t, 2, 36, 0, 1, 36, 0, 0, 1, 4)
|
|
+
|
|
+#define DEVRGMII_MAC_ENA_CFG_RX_ENA BIT(4)
|
|
+#define DEVRGMII_MAC_ENA_CFG_RX_ENA_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_ENA_CFG_RX_ENA, x)
|
|
+#define DEVRGMII_MAC_ENA_CFG_RX_ENA_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_ENA_CFG_RX_ENA, x)
|
|
+
|
|
+#define DEVRGMII_MAC_ENA_CFG_TX_ENA BIT(0)
|
|
+#define DEVRGMII_MAC_ENA_CFG_TX_ENA_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_ENA_CFG_TX_ENA, x)
|
|
+#define DEVRGMII_MAC_ENA_CFG_TX_ENA_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_ENA_CFG_TX_ENA, x)
|
|
+
|
|
+/* LAN969X ONLY */
|
|
+/* DEV1G:MAC_CFG_STATUS:MAC_TAGS_CFG */
|
|
+#define DEVRGMII_MAC_TAGS_CFG(t) \
|
|
+ __REG(TARGET_DEVRGMII, t, 2, 36, 0, 1, 36, 12, 0, 1, 4)
|
|
+
|
|
+#define DEVRGMII_MAC_TAGS_CFG_TAG_ID GENMASK(31, 16)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_TAG_ID_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_TAGS_CFG_TAG_ID, x)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_TAG_ID_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_TAGS_CFG_TAG_ID, x)
|
|
+
|
|
+#define DEVRGMII_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA BIT(3)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA, x)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA, x)
|
|
+
|
|
+#define DEVRGMII_MAC_TAGS_CFG_PB_ENA GENMASK(2, 1)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_PB_ENA_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_TAGS_CFG_PB_ENA, x)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_PB_ENA_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_TAGS_CFG_PB_ENA, x)
|
|
+
|
|
+#define DEVRGMII_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_VLAN_AWR_ENA_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_TAGS_CFG_VLAN_AWR_ENA, x)
|
|
+#define DEVRGMII_MAC_TAGS_CFG_VLAN_AWR_ENA_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_TAGS_CFG_VLAN_AWR_ENA, x)
|
|
+
|
|
+/* LAN969X ONLY */
|
|
+/* DEV1G:MAC_CFG_STATUS:MAC_IFG_CFG */
|
|
+#define DEVRGMII_MAC_IFG_CFG(t) \
|
|
+ __REG(TARGET_DEVRGMII, t, 2, 36, 0, 1, 36, 24, 0, 1, 4)
|
|
+
|
|
+#define DEVRGMII_MAC_IFG_CFG_TX_IFG GENMASK(12, 8)
|
|
+#define DEVRGMII_MAC_IFG_CFG_TX_IFG_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_IFG_CFG_TX_IFG, x)
|
|
+#define DEVRGMII_MAC_IFG_CFG_TX_IFG_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_IFG_CFG_TX_IFG, x)
|
|
+
|
|
+#define DEVRGMII_MAC_IFG_CFG_RX_IFG2 GENMASK(7, 4)
|
|
+#define DEVRGMII_MAC_IFG_CFG_RX_IFG2_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_IFG_CFG_RX_IFG2, x)
|
|
+#define DEVRGMII_MAC_IFG_CFG_RX_IFG2_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_IFG_CFG_RX_IFG2, x)
|
|
+
|
|
+#define DEVRGMII_MAC_IFG_CFG_RX_IFG1 GENMASK(3, 0)
|
|
+#define DEVRGMII_MAC_IFG_CFG_RX_IFG1_SET(x)\
|
|
+ FIELD_PREP(DEVRGMII_MAC_IFG_CFG_RX_IFG1, x)
|
|
+#define DEVRGMII_MAC_IFG_CFG_RX_IFG1_GET(x)\
|
|
+ FIELD_GET(DEVRGMII_MAC_IFG_CFG_RX_IFG1, x)
|
|
+
|
|
#endif /* _SPARX5_MAIN_REGS_H_ */
|