* [PATCH net-next 0/2] Add support for EN7581 to mt7530 driver @ 2024-07-30 7:46 Lorenzo Bianconi 2024-07-30 7:46 ` [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch Lorenzo Bianconi 2024-07-30 7:46 ` [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support Lorenzo Bianconi 0 siblings, 2 replies; 8+ messages in thread From: Lorenzo Bianconi @ 2024-07-30 7:46 UTC (permalink / raw) To: netdev Cc: arinc.unal, daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream Add EN7581 support to MT7530 DSA driver. Lorenzo Bianconi (2): dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch net: dsa: mt7530: Add EN7581 support .../bindings/net/dsa/mediatek,mt7530.yaml | 9 ++++- drivers/net/dsa/mt7530-mmio.c | 1 + drivers/net/dsa/mt7530.c | 38 +++++++++++++++++-- drivers/net/dsa/mt7530.h | 16 +++++--- 4 files changed, 54 insertions(+), 10 deletions(-) -- 2.45.2 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch 2024-07-30 7:46 [PATCH net-next 0/2] Add support for EN7581 to mt7530 driver Lorenzo Bianconi @ 2024-07-30 7:46 ` Lorenzo Bianconi 2024-07-30 8:57 ` Arınç ÜNAL 2024-07-30 7:46 ` [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support Lorenzo Bianconi 1 sibling, 1 reply; 8+ messages in thread From: Lorenzo Bianconi @ 2024-07-30 7:46 UTC (permalink / raw) To: netdev Cc: arinc.unal, daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream Add documentation for the built-in switch which can be found in the Airoha EN7581 SoC. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> --- .../devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml index 7e405ad96eb2..aa89bc89eb45 100644 --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml @@ -92,6 +92,10 @@ properties: Built-in switch of the MT7988 SoC const: mediatek,mt7988-switch + - description: + Built-in switch of the Airoha EN7581 SoC + const: airoha,en7581-switch + reg: maxItems: 1 @@ -284,7 +288,10 @@ allOf: - if: properties: compatible: - const: mediatek,mt7988-switch + contains: + enum: + - mediatek,mt7988-switch + - airoha,en7581-switch then: $ref: "#/$defs/mt7530-dsa-port" properties: -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch 2024-07-30 7:46 ` [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch Lorenzo Bianconi @ 2024-07-30 8:57 ` Arınç ÜNAL 2024-07-30 12:42 ` Lorenzo Bianconi 2024-07-30 20:03 ` Rob Herring 0 siblings, 2 replies; 8+ messages in thread From: Arınç ÜNAL @ 2024-07-30 8:57 UTC (permalink / raw) To: Lorenzo Bianconi, netdev Cc: daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream On 30/07/2024 10:46, Lorenzo Bianconi wrote: > Add documentation for the built-in switch which can be found in the > Airoha EN7581 SoC. > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > --- > .../devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > index 7e405ad96eb2..aa89bc89eb45 100644 > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > @@ -92,6 +92,10 @@ properties: > Built-in switch of the MT7988 SoC > const: mediatek,mt7988-switch > > + - description: > + Built-in switch of the Airoha EN7581 SoC > + const: airoha,en7581-switch > + > reg: > maxItems: 1 > > @@ -284,7 +288,10 @@ allOf: > - if: > properties: > compatible: > - const: mediatek,mt7988-switch > + contains: > + enum: > + - mediatek,mt7988-switch > + - airoha,en7581-switch The compatible string won't be more than one item. So this would be a better description: compatible: oneOf: - const: mediatek,mt7988-switch - const: airoha,en7581-switch Arınç ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch 2024-07-30 8:57 ` Arınç ÜNAL @ 2024-07-30 12:42 ` Lorenzo Bianconi 2024-07-30 20:03 ` Rob Herring 1 sibling, 0 replies; 8+ messages in thread From: Lorenzo Bianconi @ 2024-07-30 12:42 UTC (permalink / raw) To: Arınç ÜNAL Cc: netdev, daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream [-- Attachment #1: Type: text/plain, Size: 1553 bytes --] > On 30/07/2024 10:46, Lorenzo Bianconi wrote: > > Add documentation for the built-in switch which can be found in the > > Airoha EN7581 SoC. > > > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > > --- > > .../devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 9 ++++++++- > > 1 file changed, 8 insertions(+), 1 deletion(-) > > > > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > > index 7e405ad96eb2..aa89bc89eb45 100644 > > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > > @@ -92,6 +92,10 @@ properties: > > Built-in switch of the MT7988 SoC > > const: mediatek,mt7988-switch > > + - description: > > + Built-in switch of the Airoha EN7581 SoC > > + const: airoha,en7581-switch > > + > > reg: > > maxItems: 1 > > @@ -284,7 +288,10 @@ allOf: > > - if: > > properties: > > compatible: > > - const: mediatek,mt7988-switch > > + contains: > > + enum: > > + - mediatek,mt7988-switch > > + - airoha,en7581-switch > > The compatible string won't be more than one item. So this would be a > better description: > > compatible: > oneOf: > - const: mediatek,mt7988-switch > - const: airoha,en7581-switch > > Arınç ack, I will fix it in v2. Regards, Lorenzo [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch 2024-07-30 8:57 ` Arınç ÜNAL 2024-07-30 12:42 ` Lorenzo Bianconi @ 2024-07-30 20:03 ` Rob Herring 1 sibling, 0 replies; 8+ messages in thread From: Rob Herring @ 2024-07-30 20:03 UTC (permalink / raw) To: Arınç ÜNAL Cc: Lorenzo Bianconi, netdev, daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, krzk+dt, conor+dt, devicetree, upstream On Tue, Jul 30, 2024 at 11:57:36AM +0300, Arınç ÜNAL wrote: > On 30/07/2024 10:46, Lorenzo Bianconi wrote: > > Add documentation for the built-in switch which can be found in the > > Airoha EN7581 SoC. > > > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > > --- > > .../devicetree/bindings/net/dsa/mediatek,mt7530.yaml | 9 ++++++++- > > 1 file changed, 8 insertions(+), 1 deletion(-) > > > > diff --git a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > > index 7e405ad96eb2..aa89bc89eb45 100644 > > --- a/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > > +++ b/Documentation/devicetree/bindings/net/dsa/mediatek,mt7530.yaml > > @@ -92,6 +92,10 @@ properties: > > Built-in switch of the MT7988 SoC > > const: mediatek,mt7988-switch > > + - description: > > + Built-in switch of the Airoha EN7581 SoC > > + const: airoha,en7581-switch > > + > > reg: > > maxItems: 1 > > @@ -284,7 +288,10 @@ allOf: > > - if: > > properties: > > compatible: > > - const: mediatek,mt7988-switch > > + contains: > > + enum: > > + - mediatek,mt7988-switch > > + - airoha,en7581-switch > > The compatible string won't be more than one item. So this would be a > better description: > > compatible: > oneOf: > - const: mediatek,mt7988-switch > - const: airoha,en7581-switch enum, not oneOf+const ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support 2024-07-30 7:46 [PATCH net-next 0/2] Add support for EN7581 to mt7530 driver Lorenzo Bianconi 2024-07-30 7:46 ` [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch Lorenzo Bianconi @ 2024-07-30 7:46 ` Lorenzo Bianconi 2024-07-30 10:21 ` Arınç ÜNAL 1 sibling, 1 reply; 8+ messages in thread From: Lorenzo Bianconi @ 2024-07-30 7:46 UTC (permalink / raw) To: netdev Cc: arinc.unal, daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream Introduce support for the DSA built-in switch available on the EN7581 development board. EN7581 support is similar to MT7988 one except it requires to set MT7530_FORCE_MODE bit in MT753X_PMCR_P register for on cpu port. Tested-by: Benjamin Larsson <benjamin.larsson@genexis.eu> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> --- drivers/net/dsa/mt7530-mmio.c | 1 + drivers/net/dsa/mt7530.c | 38 +++++++++++++++++++++++++++++++---- drivers/net/dsa/mt7530.h | 16 ++++++++++----- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/drivers/net/dsa/mt7530-mmio.c b/drivers/net/dsa/mt7530-mmio.c index b74a230a3f13..10dc49961f15 100644 --- a/drivers/net/dsa/mt7530-mmio.c +++ b/drivers/net/dsa/mt7530-mmio.c @@ -11,6 +11,7 @@ #include "mt7530.h" static const struct of_device_id mt7988_of_match[] = { + { .compatible = "airoha,en7581-switch", .data = &mt753x_table[ID_EN7581], }, { .compatible = "mediatek,mt7988-switch", .data = &mt753x_table[ID_MT7988], }, { /* sentinel */ }, }; diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index ec18e68bf3a8..8adc4561c5b2 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -1152,7 +1152,8 @@ mt753x_cpu_port_enable(struct dsa_switch *ds, int port) * the MT7988 SoC. Trapped frames will be forwarded to the CPU port that * is affine to the inbound user port. */ - if (priv->id == ID_MT7531 || priv->id == ID_MT7988) + if (priv->id == ID_MT7531 || priv->id == ID_MT7988 || + priv->id == ID_EN7581) mt7530_set(priv, MT7531_CFC, MT7531_CPU_PMAP(BIT(port))); /* CPU port gets connected to all user ports of @@ -2207,7 +2208,7 @@ mt7530_setup_irq(struct mt7530_priv *priv) return priv->irq ? : -EINVAL; } - if (priv->id == ID_MT7988) + if (priv->id == ID_MT7988 || priv->id == ID_EN7581) priv->irq_domain = irq_domain_add_linear(np, MT7530_NUM_PHYS, &mt7988_irq_domain_ops, priv); @@ -2766,7 +2767,7 @@ static void mt7988_mac_port_get_caps(struct dsa_switch *ds, int port, { switch (port) { /* Ports which are connected to switch PHYs. There is no MII pinout. */ - case 0 ... 3: + case 0 ... 4: __set_bit(PHY_INTERFACE_MODE_INTERNAL, config->supported_interfaces); @@ -2850,6 +2851,23 @@ mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode, } } +static void +en7581_mac_config(struct dsa_switch *ds, int port, unsigned int mode, + phy_interface_t interface) +{ + /* BIT(31-27): reserved + * BIT(26): TX_CRC_EN: enable(0)/disable(1) CRC insertion + * BIT(25): RX_CRC_EN: enable(0)/disable(1) CRC insertion + * Since the bits above have a different meaning with respect to the + * one described in mt7530.h, set default values. + */ + mt7530_clear(ds->priv, MT753X_PMCR_P(port), MT7531_FORCE_MODE_MASK); + if (dsa_is_cpu_port(ds, port)) { + /* enable MT7530_FORCE_MODE on cpu port */ + mt7530_set(ds->priv, MT753X_PMCR_P(port), MT7530_FORCE_MODE); + } +} + static struct phylink_pcs * mt753x_phylink_mac_select_pcs(struct phylink_config *config, phy_interface_t interface) @@ -2880,7 +2898,8 @@ mt753x_phylink_mac_config(struct phylink_config *config, unsigned int mode, priv = ds->priv; - if ((port == 5 || port == 6) && priv->info->mac_port_config) + if ((port == 5 || port == 6 || priv->id == ID_EN7581) && + priv->info->mac_port_config) priv->info->mac_port_config(ds, port, mode, state->interface); /* Are we connected to external phy */ @@ -3220,6 +3239,17 @@ const struct mt753x_info mt753x_table[] = { .phy_write_c45 = mt7531_ind_c45_phy_write, .mac_port_get_caps = mt7988_mac_port_get_caps, }, + [ID_EN7581] = { + .id = ID_EN7581, + .pcs_ops = &mt7530_pcs_ops, + .sw_setup = mt7988_setup, + .phy_read_c22 = mt7531_ind_c22_phy_read, + .phy_write_c22 = mt7531_ind_c22_phy_write, + .phy_read_c45 = mt7531_ind_c45_phy_read, + .phy_write_c45 = mt7531_ind_c45_phy_write, + .mac_port_get_caps = mt7988_mac_port_get_caps, + .mac_port_config = en7581_mac_config, + }, }; EXPORT_SYMBOL_GPL(mt753x_table); diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h index 28592123070b..d77b898b7187 100644 --- a/drivers/net/dsa/mt7530.h +++ b/drivers/net/dsa/mt7530.h @@ -19,6 +19,7 @@ enum mt753x_id { ID_MT7621 = 1, ID_MT7531 = 2, ID_MT7988 = 3, + ID_EN7581 = 4, }; #define NUM_TRGMII_CTRL 5 @@ -64,25 +65,30 @@ enum mt753x_id { #define MT7531_CPU_PMAP(x) FIELD_PREP(MT7531_CPU_PMAP_MASK, x) #define MT753X_MIRROR_REG(id) ((id == ID_MT7531 || \ - id == ID_MT7988) ? \ + id == ID_MT7988 || \ + id == ID_EN7581) ? \ MT7531_CFC : MT753X_MFC) #define MT753X_MIRROR_EN(id) ((id == ID_MT7531 || \ - id == ID_MT7988) ? \ + id == ID_MT7988 || \ + id == ID_EN7581) ? \ MT7531_MIRROR_EN : MT7530_MIRROR_EN) #define MT753X_MIRROR_PORT_MASK(id) ((id == ID_MT7531 || \ - id == ID_MT7988) ? \ + id == ID_MT7988 || \ + id == ID_EN7581) ? \ MT7531_MIRROR_PORT_MASK : \ MT7530_MIRROR_PORT_MASK) #define MT753X_MIRROR_PORT_GET(id, val) ((id == ID_MT7531 || \ - id == ID_MT7988) ? \ + id == ID_MT7988 || \ + id == ID_EN7581) ? \ MT7531_MIRROR_PORT_GET(val) : \ MT7530_MIRROR_PORT_GET(val)) #define MT753X_MIRROR_PORT_SET(id, val) ((id == ID_MT7531 || \ - id == ID_MT7988) ? \ + id == ID_MT7988 || \ + id == ID_EN7581) ? \ MT7531_MIRROR_PORT_SET(val) : \ MT7530_MIRROR_PORT_SET(val)) -- 2.45.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support 2024-07-30 7:46 ` [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support Lorenzo Bianconi @ 2024-07-30 10:21 ` Arınç ÜNAL 2024-07-30 13:19 ` Lorenzo Bianconi 0 siblings, 1 reply; 8+ messages in thread From: Arınç ÜNAL @ 2024-07-30 10:21 UTC (permalink / raw) To: Lorenzo Bianconi, netdev Cc: daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream On 30/07/2024 10:46, Lorenzo Bianconi wrote: > Introduce support for the DSA built-in switch available on the EN7581 > development board. EN7581 support is similar to MT7988 one except > it requires to set MT7530_FORCE_MODE bit in MT753X_PMCR_P register > for on cpu port. > > Tested-by: Benjamin Larsson <benjamin.larsson@genexis.eu> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > --- > drivers/net/dsa/mt7530-mmio.c | 1 + > drivers/net/dsa/mt7530.c | 38 +++++++++++++++++++++++++++++++---- > drivers/net/dsa/mt7530.h | 16 ++++++++++----- > 3 files changed, 46 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/dsa/mt7530-mmio.c b/drivers/net/dsa/mt7530-mmio.c > index b74a230a3f13..10dc49961f15 100644 > --- a/drivers/net/dsa/mt7530-mmio.c > +++ b/drivers/net/dsa/mt7530-mmio.c > @@ -11,6 +11,7 @@ > #include "mt7530.h" > > static const struct of_device_id mt7988_of_match[] = { > + { .compatible = "airoha,en7581-switch", .data = &mt753x_table[ID_EN7581], }, > { .compatible = "mediatek,mt7988-switch", .data = &mt753x_table[ID_MT7988], }, > { /* sentinel */ }, > }; > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > index ec18e68bf3a8..8adc4561c5b2 100644 > --- a/drivers/net/dsa/mt7530.c > +++ b/drivers/net/dsa/mt7530.c > @@ -1152,7 +1152,8 @@ mt753x_cpu_port_enable(struct dsa_switch *ds, int port) > * the MT7988 SoC. Trapped frames will be forwarded to the CPU port that > * is affine to the inbound user port. > */ > - if (priv->id == ID_MT7531 || priv->id == ID_MT7988) > + if (priv->id == ID_MT7531 || priv->id == ID_MT7988 || > + priv->id == ID_EN7581) > mt7530_set(priv, MT7531_CFC, MT7531_CPU_PMAP(BIT(port))); > > /* CPU port gets connected to all user ports of > @@ -2207,7 +2208,7 @@ mt7530_setup_irq(struct mt7530_priv *priv) > return priv->irq ? : -EINVAL; > } > > - if (priv->id == ID_MT7988) > + if (priv->id == ID_MT7988 || priv->id == ID_EN7581) > priv->irq_domain = irq_domain_add_linear(np, MT7530_NUM_PHYS, > &mt7988_irq_domain_ops, > priv); > @@ -2766,7 +2767,7 @@ static void mt7988_mac_port_get_caps(struct dsa_switch *ds, int port, > { > switch (port) { > /* Ports which are connected to switch PHYs. There is no MII pinout. */ > - case 0 ... 3: > + case 0 ... 4: Please create a new function, such as en7581_mac_port_get_caps(). > __set_bit(PHY_INTERFACE_MODE_INTERNAL, > config->supported_interfaces); > > @@ -2850,6 +2851,23 @@ mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > } > } > > +static void > +en7581_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > + phy_interface_t interface) > +{ > + /* BIT(31-27): reserved > + * BIT(26): TX_CRC_EN: enable(0)/disable(1) CRC insertion > + * BIT(25): RX_CRC_EN: enable(0)/disable(1) CRC insertion > + * Since the bits above have a different meaning with respect to the > + * one described in mt7530.h, set default values. > + */ > + mt7530_clear(ds->priv, MT753X_PMCR_P(port), MT7531_FORCE_MODE_MASK); > + if (dsa_is_cpu_port(ds, port)) { > + /* enable MT7530_FORCE_MODE on cpu port */ > + mt7530_set(ds->priv, MT753X_PMCR_P(port), MT7530_FORCE_MODE); > + } > +} This seems to undo "Clear link settings and enable force mode to force link down on all ports until they're enabled later." on mt7531_setup_common() and redo it only for the CPU port. It should be so that force mode is enabled on all ports. You could position the diff below as a patch before this patch. It introduces the MT753X_FORCE_MODE() macro to choose the correct constant for the switch model. diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index ec18e68bf3a8..4915264c460f 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2438,8 +2438,10 @@ mt7530_setup(struct dsa_switch *ds) /* Clear link settings and enable force mode to force link down * on all ports until they're enabled later. */ - mt7530_rmw(priv, MT753X_PMCR_P(i), PMCR_LINK_SETTINGS_MASK | - MT7530_FORCE_MODE, MT7530_FORCE_MODE); + mt7530_rmw(priv, MT753X_PMCR_P(i), + PMCR_LINK_SETTINGS_MASK | + MT753X_FORCE_MODE(priv->id), + MT753X_FORCE_MODE(priv->id)); /* Disable forwarding by default on all ports */ mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, @@ -2550,8 +2552,10 @@ mt7531_setup_common(struct dsa_switch *ds) /* Clear link settings and enable force mode to force link down * on all ports until they're enabled later. */ - mt7530_rmw(priv, MT753X_PMCR_P(i), PMCR_LINK_SETTINGS_MASK | - MT7531_FORCE_MODE_MASK, MT7531_FORCE_MODE_MASK); + mt7530_rmw(priv, MT753X_PMCR_P(i), + PMCR_LINK_SETTINGS_MASK | + MT753X_FORCE_MODE(priv->id), + MT753X_FORCE_MODE(priv->id)); /* Disable forwarding by default on all ports */ mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h index 28592123070b..d47d1ce511ba 100644 --- a/drivers/net/dsa/mt7530.h +++ b/drivers/net/dsa/mt7530.h @@ -355,6 +355,10 @@ enum mt7530_vlan_port_acc_frm { MT7531_FORCE_MODE_TX_FC | \ MT7531_FORCE_MODE_EEE100 | \ MT7531_FORCE_MODE_EEE1G) +#define MT753X_FORCE_MODE(id) ((id == ID_MT7531 || \ + id == ID_MT7988) ? \ + MT7531_FORCE_MODE_MASK : \ + MT7530_FORCE_MODE) #define PMCR_LINK_SETTINGS_MASK (PMCR_MAC_TX_EN | PMCR_MAC_RX_EN | \ PMCR_FORCE_EEE1G | \ PMCR_FORCE_EEE100 | \ > + > static struct phylink_pcs * > mt753x_phylink_mac_select_pcs(struct phylink_config *config, > phy_interface_t interface) > @@ -2880,7 +2898,8 @@ mt753x_phylink_mac_config(struct phylink_config *config, unsigned int mode, > > priv = ds->priv; > > - if ((port == 5 || port == 6) && priv->info->mac_port_config) > + if ((port == 5 || port == 6 || priv->id == ID_EN7581) && > + priv->info->mac_port_config) > priv->info->mac_port_config(ds, port, mode, state->interface); > > /* Are we connected to external phy */ > @@ -3220,6 +3239,17 @@ const struct mt753x_info mt753x_table[] = { > .phy_write_c45 = mt7531_ind_c45_phy_write, > .mac_port_get_caps = mt7988_mac_port_get_caps, > }, > + [ID_EN7581] = { > + .id = ID_EN7581, > + .pcs_ops = &mt7530_pcs_ops, > + .sw_setup = mt7988_setup, > + .phy_read_c22 = mt7531_ind_c22_phy_read, > + .phy_write_c22 = mt7531_ind_c22_phy_write, > + .phy_read_c45 = mt7531_ind_c45_phy_read, > + .phy_write_c45 = mt7531_ind_c45_phy_write, > + .mac_port_get_caps = mt7988_mac_port_get_caps, > + .mac_port_config = en7581_mac_config, > + }, Let me lend a hand; you can apply this diff on top of this patch. diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index b18b98a53a7d..f5766d8ae360 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2768,6 +2768,28 @@ static void mt7531_mac_port_get_caps(struct dsa_switch *ds, int port, static void mt7988_mac_port_get_caps(struct dsa_switch *ds, int port, struct phylink_config *config) +{ + switch (port) { + /* Ports which are connected to switch PHYs. There is no MII pinout. */ + case 0 ... 3: + __set_bit(PHY_INTERFACE_MODE_INTERNAL, + config->supported_interfaces); + + config->mac_capabilities |= MAC_10 | MAC_100 | MAC_1000FD; + break; + + /* Port 6 is connected to SoC's XGMII MAC. There is no MII pinout. */ + case 6: + __set_bit(PHY_INTERFACE_MODE_INTERNAL, + config->supported_interfaces); + + config->mac_capabilities |= MAC_10000FD; + break; + } +} + +static void en7581_mac_port_get_caps(struct dsa_switch *ds, int port, + struct phylink_config *config) { switch (port) { /* Ports which are connected to switch PHYs. There is no MII pinout. */ @@ -2855,23 +2877,6 @@ mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode, } } -static void -en7581_mac_config(struct dsa_switch *ds, int port, unsigned int mode, - phy_interface_t interface) -{ - /* BIT(31-27): reserved - * BIT(26): TX_CRC_EN: enable(0)/disable(1) CRC insertion - * BIT(25): RX_CRC_EN: enable(0)/disable(1) CRC insertion - * Since the bits above have a different meaning with respect to the - * one described in mt7530.h, set default values. - */ - mt7530_clear(ds->priv, MT753X_PMCR_P(port), MT7531_FORCE_MODE_MASK); - if (dsa_is_cpu_port(ds, port)) { - /* enable MT7530_FORCE_MODE on cpu port */ - mt7530_set(ds->priv, MT753X_PMCR_P(port), MT7530_FORCE_MODE); - } -} - static struct phylink_pcs * mt753x_phylink_mac_select_pcs(struct phylink_config *config, phy_interface_t interface) @@ -2902,8 +2907,7 @@ mt753x_phylink_mac_config(struct phylink_config *config, unsigned int mode, priv = ds->priv; - if ((port == 5 || port == 6 || priv->id == ID_EN7581) && - priv->info->mac_port_config) + if ((port == 5 || port == 6) && priv->info->mac_port_config) priv->info->mac_port_config(ds, port, mode, state->interface); /* Are we connected to external phy */ @@ -3251,8 +3255,7 @@ const struct mt753x_info mt753x_table[] = { .phy_write_c22 = mt7531_ind_c22_phy_write, .phy_read_c45 = mt7531_ind_c45_phy_read, .phy_write_c45 = mt7531_ind_c45_phy_write, - .mac_port_get_caps = mt7988_mac_port_get_caps, - .mac_port_config = en7581_mac_config, + .mac_port_get_caps = en7581_mac_port_get_caps, }, }; EXPORT_SYMBOL_GPL(mt753x_table); I don't know this hardware so please make sure the comments on en7581_mac_port_get_caps() are correct. I didn't compile this so please make sure it works. By the way, is this supposed to be AN7581? There's EN7580 but no EN7581 on the Airoha website. https://www.airoha.com/products/y1cQz8EpjIKhbK61 Arınç ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support 2024-07-30 10:21 ` Arınç ÜNAL @ 2024-07-30 13:19 ` Lorenzo Bianconi 0 siblings, 0 replies; 8+ messages in thread From: Lorenzo Bianconi @ 2024-07-30 13:19 UTC (permalink / raw) To: Arınç ÜNAL Cc: netdev, daniel, dqfext, sean.wang, andrew, f.fainelli, olteanv, davem, edumazet, kuba, pabeni, matthias.bgg, angelogioacchino.delregno, linux-arm-kernel, linux-mediatek, lorenzo.bianconi83, robh, krzk+dt, conor+dt, devicetree, upstream [-- Attachment #1: Type: text/plain, Size: 10550 bytes --] > On 30/07/2024 10:46, Lorenzo Bianconi wrote: > > Introduce support for the DSA built-in switch available on the EN7581 > > development board. EN7581 support is similar to MT7988 one except > > it requires to set MT7530_FORCE_MODE bit in MT753X_PMCR_P register > > for on cpu port. > > > > Tested-by: Benjamin Larsson <benjamin.larsson@genexis.eu> > > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> > > --- > > drivers/net/dsa/mt7530-mmio.c | 1 + > > drivers/net/dsa/mt7530.c | 38 +++++++++++++++++++++++++++++++---- > > drivers/net/dsa/mt7530.h | 16 ++++++++++----- > > 3 files changed, 46 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/net/dsa/mt7530-mmio.c b/drivers/net/dsa/mt7530-mmio.c > > index b74a230a3f13..10dc49961f15 100644 > > --- a/drivers/net/dsa/mt7530-mmio.c > > +++ b/drivers/net/dsa/mt7530-mmio.c > > @@ -11,6 +11,7 @@ > > #include "mt7530.h" > > static const struct of_device_id mt7988_of_match[] = { > > + { .compatible = "airoha,en7581-switch", .data = &mt753x_table[ID_EN7581], }, > > { .compatible = "mediatek,mt7988-switch", .data = &mt753x_table[ID_MT7988], }, > > { /* sentinel */ }, > > }; > > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > > index ec18e68bf3a8..8adc4561c5b2 100644 > > --- a/drivers/net/dsa/mt7530.c > > +++ b/drivers/net/dsa/mt7530.c > > @@ -1152,7 +1152,8 @@ mt753x_cpu_port_enable(struct dsa_switch *ds, int port) > > * the MT7988 SoC. Trapped frames will be forwarded to the CPU port that > > * is affine to the inbound user port. > > */ > > - if (priv->id == ID_MT7531 || priv->id == ID_MT7988) > > + if (priv->id == ID_MT7531 || priv->id == ID_MT7988 || > > + priv->id == ID_EN7581) > > mt7530_set(priv, MT7531_CFC, MT7531_CPU_PMAP(BIT(port))); > > /* CPU port gets connected to all user ports of > > @@ -2207,7 +2208,7 @@ mt7530_setup_irq(struct mt7530_priv *priv) > > return priv->irq ? : -EINVAL; > > } > > - if (priv->id == ID_MT7988) > > + if (priv->id == ID_MT7988 || priv->id == ID_EN7581) > > priv->irq_domain = irq_domain_add_linear(np, MT7530_NUM_PHYS, > > &mt7988_irq_domain_ops, > > priv); > > @@ -2766,7 +2767,7 @@ static void mt7988_mac_port_get_caps(struct dsa_switch *ds, int port, > > { > > switch (port) { > > /* Ports which are connected to switch PHYs. There is no MII pinout. */ > > - case 0 ... 3: > > + case 0 ... 4: > > Please create a new function, such as en7581_mac_port_get_caps(). ack, I will do in v2. > > > __set_bit(PHY_INTERFACE_MODE_INTERNAL, > > config->supported_interfaces); > > @@ -2850,6 +2851,23 @@ mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > > } > > } > > +static void > > +en7581_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > > + phy_interface_t interface) > > +{ > > + /* BIT(31-27): reserved > > + * BIT(26): TX_CRC_EN: enable(0)/disable(1) CRC insertion > > + * BIT(25): RX_CRC_EN: enable(0)/disable(1) CRC insertion > > + * Since the bits above have a different meaning with respect to the > > + * one described in mt7530.h, set default values. > > + */ > > + mt7530_clear(ds->priv, MT753X_PMCR_P(port), MT7531_FORCE_MODE_MASK); > > + if (dsa_is_cpu_port(ds, port)) { > > + /* enable MT7530_FORCE_MODE on cpu port */ > > + mt7530_set(ds->priv, MT753X_PMCR_P(port), MT7530_FORCE_MODE); > > + } > > +} > > This seems to undo "Clear link settings and enable force mode to force link > down on all ports until they're enabled later." on mt7531_setup_common() > and redo it only for the CPU port. It should be so that force mode is > enabled on all ports. You could position the diff below as a patch before > this patch. It introduces the MT753X_FORCE_MODE() macro to choose the > correct constant for the switch model. > > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > index ec18e68bf3a8..4915264c460f 100644 > --- a/drivers/net/dsa/mt7530.c > +++ b/drivers/net/dsa/mt7530.c > @@ -2438,8 +2438,10 @@ mt7530_setup(struct dsa_switch *ds) > /* Clear link settings and enable force mode to force link down > * on all ports until they're enabled later. > */ > - mt7530_rmw(priv, MT753X_PMCR_P(i), PMCR_LINK_SETTINGS_MASK | > - MT7530_FORCE_MODE, MT7530_FORCE_MODE); > + mt7530_rmw(priv, MT753X_PMCR_P(i), > + PMCR_LINK_SETTINGS_MASK | > + MT753X_FORCE_MODE(priv->id), > + MT753X_FORCE_MODE(priv->id)); > /* Disable forwarding by default on all ports */ > mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, > @@ -2550,8 +2552,10 @@ mt7531_setup_common(struct dsa_switch *ds) > /* Clear link settings and enable force mode to force link down > * on all ports until they're enabled later. > */ > - mt7530_rmw(priv, MT753X_PMCR_P(i), PMCR_LINK_SETTINGS_MASK | > - MT7531_FORCE_MODE_MASK, MT7531_FORCE_MODE_MASK); > + mt7530_rmw(priv, MT753X_PMCR_P(i), > + PMCR_LINK_SETTINGS_MASK | > + MT753X_FORCE_MODE(priv->id), > + MT753X_FORCE_MODE(priv->id)); > /* Disable forwarding by default on all ports */ > mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, > diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h > index 28592123070b..d47d1ce511ba 100644 > --- a/drivers/net/dsa/mt7530.h > +++ b/drivers/net/dsa/mt7530.h > @@ -355,6 +355,10 @@ enum mt7530_vlan_port_acc_frm { > MT7531_FORCE_MODE_TX_FC | \ > MT7531_FORCE_MODE_EEE100 | \ > MT7531_FORCE_MODE_EEE1G) > +#define MT753X_FORCE_MODE(id) ((id == ID_MT7531 || \ > + id == ID_MT7988) ? \ > + MT7531_FORCE_MODE_MASK : \ > + MT7530_FORCE_MODE) > #define PMCR_LINK_SETTINGS_MASK (PMCR_MAC_TX_EN | PMCR_MAC_RX_EN | \ > PMCR_FORCE_EEE1G | \ > PMCR_FORCE_EEE100 | \ ack, fine. I will merge this change in v2. > > > + > > static struct phylink_pcs * > > mt753x_phylink_mac_select_pcs(struct phylink_config *config, > > phy_interface_t interface) > > @@ -2880,7 +2898,8 @@ mt753x_phylink_mac_config(struct phylink_config *config, unsigned int mode, > > priv = ds->priv; > > - if ((port == 5 || port == 6) && priv->info->mac_port_config) > > + if ((port == 5 || port == 6 || priv->id == ID_EN7581) && > > + priv->info->mac_port_config) > > priv->info->mac_port_config(ds, port, mode, state->interface); > > /* Are we connected to external phy */ > > @@ -3220,6 +3239,17 @@ const struct mt753x_info mt753x_table[] = { > > .phy_write_c45 = mt7531_ind_c45_phy_write, > > .mac_port_get_caps = mt7988_mac_port_get_caps, > > }, > > + [ID_EN7581] = { > > + .id = ID_EN7581, > > + .pcs_ops = &mt7530_pcs_ops, > > + .sw_setup = mt7988_setup, > > + .phy_read_c22 = mt7531_ind_c22_phy_read, > > + .phy_write_c22 = mt7531_ind_c22_phy_write, > > + .phy_read_c45 = mt7531_ind_c45_phy_read, > > + .phy_write_c45 = mt7531_ind_c45_phy_write, > > + .mac_port_get_caps = mt7988_mac_port_get_caps, > > + .mac_port_config = en7581_mac_config, > > + }, > > Let me lend a hand; you can apply this diff on top of this patch. Thx :) > > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > index b18b98a53a7d..f5766d8ae360 100644 > --- a/drivers/net/dsa/mt7530.c > +++ b/drivers/net/dsa/mt7530.c > @@ -2768,6 +2768,28 @@ static void mt7531_mac_port_get_caps(struct dsa_switch *ds, int port, > static void mt7988_mac_port_get_caps(struct dsa_switch *ds, int port, > struct phylink_config *config) > +{ > + switch (port) { > + /* Ports which are connected to switch PHYs. There is no MII pinout. */ > + case 0 ... 3: > + __set_bit(PHY_INTERFACE_MODE_INTERNAL, > + config->supported_interfaces); > + > + config->mac_capabilities |= MAC_10 | MAC_100 | MAC_1000FD; > + break; > + > + /* Port 6 is connected to SoC's XGMII MAC. There is no MII pinout. */ > + case 6: > + __set_bit(PHY_INTERFACE_MODE_INTERNAL, > + config->supported_interfaces); > + > + config->mac_capabilities |= MAC_10000FD; > + break; > + } > +} > + > +static void en7581_mac_port_get_caps(struct dsa_switch *ds, int port, > + struct phylink_config *config) > { > switch (port) { > /* Ports which are connected to switch PHYs. There is no MII pinout. */ > @@ -2855,23 +2877,6 @@ mt7531_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > } > } > -static void > -en7581_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > - phy_interface_t interface) > -{ > - /* BIT(31-27): reserved > - * BIT(26): TX_CRC_EN: enable(0)/disable(1) CRC insertion > - * BIT(25): RX_CRC_EN: enable(0)/disable(1) CRC insertion > - * Since the bits above have a different meaning with respect to the > - * one described in mt7530.h, set default values. > - */ > - mt7530_clear(ds->priv, MT753X_PMCR_P(port), MT7531_FORCE_MODE_MASK); > - if (dsa_is_cpu_port(ds, port)) { > - /* enable MT7530_FORCE_MODE on cpu port */ > - mt7530_set(ds->priv, MT753X_PMCR_P(port), MT7530_FORCE_MODE); > - } > -} > - > static struct phylink_pcs * > mt753x_phylink_mac_select_pcs(struct phylink_config *config, > phy_interface_t interface) > @@ -2902,8 +2907,7 @@ mt753x_phylink_mac_config(struct phylink_config *config, unsigned int mode, > priv = ds->priv; > - if ((port == 5 || port == 6 || priv->id == ID_EN7581) && > - priv->info->mac_port_config) > + if ((port == 5 || port == 6) && priv->info->mac_port_config) > priv->info->mac_port_config(ds, port, mode, state->interface); > /* Are we connected to external phy */ > @@ -3251,8 +3255,7 @@ const struct mt753x_info mt753x_table[] = { > .phy_write_c22 = mt7531_ind_c22_phy_write, > .phy_read_c45 = mt7531_ind_c45_phy_read, > .phy_write_c45 = mt7531_ind_c45_phy_write, > - .mac_port_get_caps = mt7988_mac_port_get_caps, > - .mac_port_config = en7581_mac_config, > + .mac_port_get_caps = en7581_mac_port_get_caps, > }, > }; > EXPORT_SYMBOL_GPL(mt753x_table); > > I don't know this hardware so please make sure the comments on > en7581_mac_port_get_caps() are correct. I didn't compile this so please > make sure it works. ack, I tested it and it works fine. Regards, Lorenzo > > By the way, is this supposed to be AN7581? There's EN7580 but no EN7581 on > the Airoha website. > > https://www.airoha.com/products/y1cQz8EpjIKhbK61 > > Arınç [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 228 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-07-30 20:03 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-30 7:46 [PATCH net-next 0/2] Add support for EN7581 to mt7530 driver Lorenzo Bianconi 2024-07-30 7:46 ` [PATCH net-next 1/2] dt-bindings: net: dsa: mediatek,mt7530: Add airoha,en7581-switch Lorenzo Bianconi 2024-07-30 8:57 ` Arınç ÜNAL 2024-07-30 12:42 ` Lorenzo Bianconi 2024-07-30 20:03 ` Rob Herring 2024-07-30 7:46 ` [PATCH net-next 2/2] net: dsa: mt7530: Add EN7581 support Lorenzo Bianconi 2024-07-30 10:21 ` Arınç ÜNAL 2024-07-30 13:19 ` Lorenzo Bianconi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).