devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4
@ 2019-11-11 19:49 Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 1/7] net: bcmgenet: Avoid touching non-existent interrupt Stefan Wahren
                   ` (7 more replies)
  0 siblings, 8 replies; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

Raspberry Pi 4 uses the broadcom genet chip in version five.
This chip has a dma controller integrated. Up to now the maximal
burst size was hard-coded to 0x10. But it turns out that Raspberry Pi 4
does only work with the smaller maximal burst size of 0x8.

Additionally the patch series has some IRQ retrieval improvements and
adds support for a missing PHY mode.

This series based on Matthias Brugger's V1 series [1].

[1] - https://patchwork.kernel.org/cover/11186193/

Changes in V5:
- address Doug's comment

Changes in V4:
- rebased on current net-next
- remove RGMII_ID support
- remove fixes tag from patch 1
- add Florian's suggestions to patch 5

Changes in V3:
- introduce SoC-specific compatibles for GENET (incl. dt-binding)
- use platform_get_irq_optional for optional IRQ
- remove Fixes tag from IRQ error handling change
- move most of MDIO stuff to bcm2711.dtsi

Changes in V2:
- add 2 fixes for IRQ retrieval
- add support for missing PHY modes
- declare PHY mode RGMII RXID based on the default settings
- add alias to allow firmware append the MAC address

Stefan Wahren (7):
  net: bcmgenet: Avoid touching non-existent interrupt
  net: bcmgenet: Fix error handling on IRQ retrieval
  dt-bindings: net: bcmgenet: Add BCM2711 support
  net: bcmgenet: Add BCM2711 support
  net: bcmgenet: Refactor register access in bcmgenet_mii_config
  net: bcmgenet: Add RGMII_RXID support
  ARM: dts: bcm2711-rpi-4: Enable GENET support

 .../devicetree/bindings/net/brcm,bcmgenet.txt      |  2 +-
 arch/arm/boot/dts/bcm2711-rpi-4-b.dts              | 17 +++++
 arch/arm/boot/dts/bcm2711.dtsi                     | 26 ++++++++
 drivers/net/ethernet/broadcom/genet/bcmgenet.c     | 74 ++++++++++++++++++----
 drivers/net/ethernet/broadcom/genet/bcmgenet.h     |  1 +
 drivers/net/ethernet/broadcom/genet/bcmmii.c       | 47 +++++++-------
 6 files changed, 130 insertions(+), 37 deletions(-)

--
2.7.4


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 1/7] net: bcmgenet: Avoid touching non-existent interrupt
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 2/7] net: bcmgenet: Fix error handling on IRQ retrieval Stefan Wahren
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

As platform_get_irq() now prints an error when the interrupt does not
exist, we are getting a confusing error message in case the optional
WOL IRQ is not defined:

  bcmgenet fd58000.ethernet: IRQ index 2 not found

Fix this by using the platform_get_irq_optional().

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 3504f77..575f162 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3459,7 +3459,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
 	priv = netdev_priv(dev);
 	priv->irq0 = platform_get_irq(pdev, 0);
 	priv->irq1 = platform_get_irq(pdev, 1);
-	priv->wol_irq = platform_get_irq(pdev, 2);
+	priv->wol_irq = platform_get_irq_optional(pdev, 2);
 	if (!priv->irq0 || !priv->irq1) {
 		dev_err(&pdev->dev, "can't find IRQs\n");
 		err = -EINVAL;
--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 2/7] net: bcmgenet: Fix error handling on IRQ retrieval
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 1/7] net: bcmgenet: Avoid touching non-existent interrupt Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 3/7] dt-bindings: net: bcmgenet: Add BCM2711 support Stefan Wahren
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

This fixes the error handling for the mandatory IRQs. There is no need
for the error message anymore, this is now handled by platform_get_irq.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 575f162..ee4d8ef 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -3458,13 +3458,16 @@ static int bcmgenet_probe(struct platform_device *pdev)

 	priv = netdev_priv(dev);
 	priv->irq0 = platform_get_irq(pdev, 0);
+	if (priv->irq0 < 0) {
+		err = priv->irq0;
+		goto err;
+	}
 	priv->irq1 = platform_get_irq(pdev, 1);
-	priv->wol_irq = platform_get_irq_optional(pdev, 2);
-	if (!priv->irq0 || !priv->irq1) {
-		dev_err(&pdev->dev, "can't find IRQs\n");
-		err = -EINVAL;
+	if (priv->irq1 < 0) {
+		err = priv->irq1;
 		goto err;
 	}
+	priv->wol_irq = platform_get_irq_optional(pdev, 2);

 	if (dn)
 		macaddr = of_get_mac_address(dn);
--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 3/7] dt-bindings: net: bcmgenet: Add BCM2711 support
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 1/7] net: bcmgenet: Avoid touching non-existent interrupt Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 2/7] net: bcmgenet: Fix error handling on IRQ retrieval Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-12 19:28   ` Rob Herring
  2019-11-11 19:49 ` [PATCH V5 net-next 4/7] " Stefan Wahren
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

The BCM2711 has some modifications to the GENET v5. So add this SoC
specific compatible.

Suggested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 Documentation/devicetree/bindings/net/brcm,bcmgenet.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt b/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
index 3956af1..33a0d67 100644
--- a/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
+++ b/Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
@@ -2,7 +2,7 @@

 Required properties:
 - compatible: should contain one of "brcm,genet-v1", "brcm,genet-v2",
-  "brcm,genet-v3", "brcm,genet-v4", "brcm,genet-v5".
+  "brcm,genet-v3", "brcm,genet-v4", "brcm,genet-v5", "brcm,bcm2711-genet-v5".
 - reg: address and length of the register set for the device
 - interrupts and/or interrupts-extended: must be two cells, the first cell
   is the general purpose interrupt line, while the second cell is the
--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 4/7] net: bcmgenet: Add BCM2711 support
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
                   ` (2 preceding siblings ...)
  2019-11-11 19:49 ` [PATCH V5 net-next 3/7] dt-bindings: net: bcmgenet: Add BCM2711 support Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 5/7] net: bcmgenet: Refactor register access in bcmgenet_mii_config Stefan Wahren
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

The BCM2711 needs a different maximum DMA burst length. If not set
accordingly a timeout in the transmit queue happens and no package
can be sent. So use the new compatible to derive this value.

Until now the GENET HW version was used as the platform identifier.
This doesn't work with SoC-specific modifications, so introduce a proper
platform data structure.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Matthias Brugger <mbrugger@suse.com>
---
 drivers/net/ethernet/broadcom/genet/bcmgenet.c | 63 ++++++++++++++++++++++----
 drivers/net/ethernet/broadcom/genet/bcmgenet.h |  1 +
 2 files changed, 54 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index ee4d8ef..120fa05 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -2576,7 +2576,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv)
 	}

 	/* Init rDma */
-	bcmgenet_rdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
+	bcmgenet_rdma_writel(priv, priv->dma_max_burst_length,
+			     DMA_SCB_BURST_SIZE);

 	/* Initialize Rx queues */
 	ret = bcmgenet_init_rx_queues(priv->dev);
@@ -2589,7 +2590,8 @@ static int bcmgenet_init_dma(struct bcmgenet_priv *priv)
 	}

 	/* Init tDma */
-	bcmgenet_tdma_writel(priv, DMA_MAX_BURST_LENGTH, DMA_SCB_BURST_SIZE);
+	bcmgenet_tdma_writel(priv, priv->dma_max_burst_length,
+			     DMA_SCB_BURST_SIZE);

 	/* Initialize Tx queues */
 	bcmgenet_init_tx_queues(priv->dev);
@@ -3420,12 +3422,48 @@ static void bcmgenet_set_hw_params(struct bcmgenet_priv *priv)
 		params->words_per_bd);
 }

+struct bcmgenet_plat_data {
+	enum bcmgenet_version version;
+	u32 dma_max_burst_length;
+};
+
+static const struct bcmgenet_plat_data v1_plat_data = {
+	.version = GENET_V1,
+	.dma_max_burst_length = DMA_MAX_BURST_LENGTH,
+};
+
+static const struct bcmgenet_plat_data v2_plat_data = {
+	.version = GENET_V2,
+	.dma_max_burst_length = DMA_MAX_BURST_LENGTH,
+};
+
+static const struct bcmgenet_plat_data v3_plat_data = {
+	.version = GENET_V3,
+	.dma_max_burst_length = DMA_MAX_BURST_LENGTH,
+};
+
+static const struct bcmgenet_plat_data v4_plat_data = {
+	.version = GENET_V4,
+	.dma_max_burst_length = DMA_MAX_BURST_LENGTH,
+};
+
+static const struct bcmgenet_plat_data v5_plat_data = {
+	.version = GENET_V5,
+	.dma_max_burst_length = DMA_MAX_BURST_LENGTH,
+};
+
+static const struct bcmgenet_plat_data bcm2711_plat_data = {
+	.version = GENET_V5,
+	.dma_max_burst_length = 0x08,
+};
+
 static const struct of_device_id bcmgenet_match[] = {
-	{ .compatible = "brcm,genet-v1", .data = (void *)GENET_V1 },
-	{ .compatible = "brcm,genet-v2", .data = (void *)GENET_V2 },
-	{ .compatible = "brcm,genet-v3", .data = (void *)GENET_V3 },
-	{ .compatible = "brcm,genet-v4", .data = (void *)GENET_V4 },
-	{ .compatible = "brcm,genet-v5", .data = (void *)GENET_V5 },
+	{ .compatible = "brcm,genet-v1", .data = &v1_plat_data },
+	{ .compatible = "brcm,genet-v2", .data = &v2_plat_data },
+	{ .compatible = "brcm,genet-v3", .data = &v3_plat_data },
+	{ .compatible = "brcm,genet-v4", .data = &v4_plat_data },
+	{ .compatible = "brcm,genet-v5", .data = &v5_plat_data },
+	{ .compatible = "brcm,bcm2711-genet-v5", .data = &bcm2711_plat_data },
 	{ },
 };
 MODULE_DEVICE_TABLE(of, bcmgenet_match);
@@ -3435,6 +3473,7 @@ static int bcmgenet_probe(struct platform_device *pdev)
 	struct bcmgenet_platform_data *pd = pdev->dev.platform_data;
 	struct device_node *dn = pdev->dev.of_node;
 	const struct of_device_id *of_id = NULL;
+	const struct bcmgenet_plat_data *pdata;
 	struct bcmgenet_priv *priv;
 	struct net_device *dev;
 	const void *macaddr;
@@ -3516,10 +3555,14 @@ static int bcmgenet_probe(struct platform_device *pdev)

 	priv->dev = dev;
 	priv->pdev = pdev;
-	if (of_id)
-		priv->version = (enum bcmgenet_version)of_id->data;
-	else
+	if (of_id) {
+		pdata = of_id->data;
+		priv->version = pdata->version;
+		priv->dma_max_burst_length = pdata->dma_max_burst_length;
+	} else {
 		priv->version = pd->genet_version;
+		priv->dma_max_burst_length = DMA_MAX_BURST_LENGTH;
+	}

 	priv->clk = devm_clk_get(&priv->pdev->dev, "enet");
 	if (IS_ERR(priv->clk)) {
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
index dbc69d8..a565919 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
@@ -664,6 +664,7 @@ struct bcmgenet_priv {
 	bool crc_fwd_en;

 	unsigned int dma_rx_chk_bit;
+	u32 dma_max_burst_length;

 	u32 msg_enable;

--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 5/7] net: bcmgenet: Refactor register access in bcmgenet_mii_config
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
                   ` (3 preceding siblings ...)
  2019-11-11 19:49 ` [PATCH V5 net-next 4/7] " Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 6/7] net: bcmgenet: Add RGMII_RXID support Stefan Wahren
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

The register access in bcmgenet_mii_config() is a little bit opaque and
not easy to extend. In preparation for the missing RGMII PHY modes
move all the phy name assignments into the switch statement and the
register access to the end of the function. This make the code easier
to read and extend.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
---
 drivers/net/ethernet/broadcom/genet/bcmmii.c | 42 +++++++++++++---------------
 1 file changed, 20 insertions(+), 22 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index 6f291ee..021ce9e 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -213,11 +213,10 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
 		udelay(2);
 	}

-	priv->ext_phy = !priv->internal_phy &&
-			(priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
-
 	switch (priv->phy_interface) {
 	case PHY_INTERFACE_MODE_INTERNAL:
+		phy_name = "internal PHY";
+		/* fall through */
 	case PHY_INTERFACE_MODE_MOCA:
 		/* Irrespective of the actually configured PHY speed (100 or
 		 * 1000) GENETv4 only has an internal GPHY so we will just end
@@ -229,11 +228,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
 		else
 			port_ctrl = PORT_MODE_INT_EPHY;

-		bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
-
-		if (priv->internal_phy) {
-			phy_name = "internal PHY";
-		} else if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) {
+		if (!phy_name) {
 			phy_name = "MoCA";
 			bcmgenet_moca_phy_setup(priv);
 		}
@@ -242,11 +237,7 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
 	case PHY_INTERFACE_MODE_MII:
 		phy_name = "external MII";
 		phy_set_max_speed(phydev, SPEED_100);
-		bcmgenet_sys_writel(priv,
-				    PORT_MODE_EXT_EPHY, SYS_PORT_CTRL);
-		/* Restore the MII PHY after isolation */
-		if (bmcr >= 0)
-			phy_write(phydev, MII_BMCR, bmcr);
+		port_ctrl = PORT_MODE_EXT_EPHY;
 		break;

 	case PHY_INTERFACE_MODE_REVMII:
@@ -261,31 +252,38 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
 			port_ctrl = PORT_MODE_EXT_RVMII_50;
 		else
 			port_ctrl = PORT_MODE_EXT_RVMII_25;
-		bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
 		break;

 	case PHY_INTERFACE_MODE_RGMII:
 		/* RGMII_NO_ID: TXC transitions at the same time as TXD
 		 *		(requires PCB or receiver-side delay)
-		 * RGMII:	Add 2ns delay on TXC (90 degree shift)
 		 *
 		 * ID is implicitly disabled for 100Mbps (RG)MII operation.
 		 */
+		phy_name = "external RGMII (no delay)";
 		id_mode_dis = BIT(16);
-		/* fall through */
+		port_ctrl = PORT_MODE_EXT_GPHY;
+		break;
+
 	case PHY_INTERFACE_MODE_RGMII_TXID:
-		if (id_mode_dis)
-			phy_name = "external RGMII (no delay)";
-		else
-			phy_name = "external RGMII (TX delay)";
-		bcmgenet_sys_writel(priv,
-				    PORT_MODE_EXT_GPHY, SYS_PORT_CTRL);
+		/* RGMII_TXID:	Add 2ns delay on TXC (90 degree shift) */
+		phy_name = "external RGMII (TX delay)";
+		port_ctrl = PORT_MODE_EXT_GPHY;
 		break;
 	default:
 		dev_err(kdev, "unknown phy mode: %d\n", priv->phy_interface);
 		return -EINVAL;
 	}

+	bcmgenet_sys_writel(priv, port_ctrl, SYS_PORT_CTRL);
+
+	/* Restore the MII PHY after isolation */
+	if (bmcr >= 0)
+		phy_write(phydev, MII_BMCR, bmcr);
+
+	priv->ext_phy = !priv->internal_phy &&
+			(priv->phy_interface != PHY_INTERFACE_MODE_MOCA);
+
 	/* This is an external PHY (xMII), so we need to enable the RGMII
 	 * block for the interface to work
 	 */
--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 6/7] net: bcmgenet: Add RGMII_RXID support
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
                   ` (4 preceding siblings ...)
  2019-11-11 19:49 ` [PATCH V5 net-next 5/7] net: bcmgenet: Refactor register access in bcmgenet_mii_config Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-11 19:49 ` [PATCH V5 net-next 7/7] ARM: dts: bcm2711-rpi-4: Enable GENET support Stefan Wahren
  2019-11-13  3:35 ` [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 David Miller
  7 siblings, 0 replies; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

This adds the missing support for the PHY mode RGMII_RXID.
It's necessary for the Raspberry Pi 4.

Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/ethernet/broadcom/genet/bcmmii.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index 021ce9e..6392a25 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -270,6 +270,11 @@ int bcmgenet_mii_config(struct net_device *dev, bool init)
 		phy_name = "external RGMII (TX delay)";
 		port_ctrl = PORT_MODE_EXT_GPHY;
 		break;
+
+	case PHY_INTERFACE_MODE_RGMII_RXID:
+		phy_name = "external RGMII (RX delay)";
+		port_ctrl = PORT_MODE_EXT_GPHY;
+		break;
 	default:
 		dev_err(kdev, "unknown phy mode: %d\n", priv->phy_interface);
 		return -EINVAL;
--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH V5 net-next 7/7] ARM: dts: bcm2711-rpi-4: Enable GENET support
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
                   ` (5 preceding siblings ...)
  2019-11-11 19:49 ` [PATCH V5 net-next 6/7] net: bcmgenet: Add RGMII_RXID support Stefan Wahren
@ 2019-11-11 19:49 ` Stefan Wahren
  2019-11-14 20:35   ` Florian Fainelli
  2019-11-13  3:35 ` [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 David Miller
  7 siblings, 1 reply; 13+ messages in thread
From: Stefan Wahren @ 2019-11-11 19:49 UTC (permalink / raw)
  To: Matthias Brugger, Matthias Brugger, David S . Miller,
	Rob Herring, Florian Fainelli
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	bcm-kernel-feedback-list, linux-arm-kernel, devicetree,
	Stefan Wahren

This enables the Gigabit Ethernet support on the Raspberry Pi 4.
The defined PHY mode is equivalent to the default register settings
in the downstream tree.

Signed-off-by: Matthias Brugger <mbrugger@suse.com>
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 17 +++++++++++++++++
 arch/arm/boot/dts/bcm2711.dtsi        | 26 ++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
index cccc1cc..1b5a835 100644
--- a/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
+++ b/arch/arm/boot/dts/bcm2711-rpi-4-b.dts
@@ -19,6 +19,10 @@
 		reg = <0 0 0>;
 	};

+	aliases {
+		ethernet0 = &genet;
+	};
+
 	leds {
 		act {
 			gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
@@ -97,6 +101,19 @@
 	status = "okay";
 };

+&genet {
+	phy-handle = <&phy1>;
+	phy-mode = "rgmii-rxid";
+	status = "okay";
+};
+
+&genet_mdio {
+	phy1: ethernet-phy@1 {
+		/* No PHY interrupt */
+		reg = <0x1>;
+	};
+};
+
 /* uart0 communicates with the BT module */
 &uart0 {
 	pinctrl-names = "default";
diff --git a/arch/arm/boot/dts/bcm2711.dtsi b/arch/arm/boot/dts/bcm2711.dtsi
index ac83dac..a571223 100644
--- a/arch/arm/boot/dts/bcm2711.dtsi
+++ b/arch/arm/boot/dts/bcm2711.dtsi
@@ -305,6 +305,32 @@
 			cpu-release-addr = <0x0 0x000000f0>;
 		};
 	};
+
+	scb {
+		compatible = "simple-bus";
+		#address-cells = <2>;
+		#size-cells = <1>;
+
+		ranges = <0x0 0x7c000000  0x0 0xfc000000  0x03800000>;
+
+		genet: ethernet@7d580000 {
+			compatible = "brcm,bcm2711-genet-v5";
+			reg = <0x0 0x7d580000 0x10000>;
+			#address-cells = <0x1>;
+			#size-cells = <0x1>;
+			interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>;
+			status = "disabled";
+
+			genet_mdio: mdio@e14 {
+				compatible = "brcm,genet-mdio-v5";
+				reg = <0xe14 0x8>;
+				reg-names = "mdio";
+				#address-cells = <0x0>;
+				#size-cells = <0x1>;
+			};
+		};
+	};
 };

 &clk_osc {
--
2.7.4


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 net-next 3/7] dt-bindings: net: bcmgenet: Add BCM2711 support
  2019-11-11 19:49 ` [PATCH V5 net-next 3/7] dt-bindings: net: bcmgenet: Add BCM2711 support Stefan Wahren
@ 2019-11-12 19:28   ` Rob Herring
  0 siblings, 0 replies; 13+ messages in thread
From: Rob Herring @ 2019-11-12 19:28 UTC (permalink / raw)
  To: Stefan Wahren
  Cc: Matthias Brugger, Matthias Brugger, David S . Miller,
	Florian Fainelli, Eric Anholt, Nicolas Saenz Julienne,
	Doug Berger, netdev, bcm-kernel-feedback-list, linux-arm-kernel,
	devicetree, Stefan Wahren

On Mon, 11 Nov 2019 20:49:22 +0100, Stefan Wahren wrote:
> 
> The BCM2711 has some modifications to the GENET v5. So add this SoC
> specific compatible.
> 
> Suggested-by: Florian Fainelli <f.fainelli@gmail.com>
> Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> ---
>  Documentation/devicetree/bindings/net/brcm,bcmgenet.txt | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 

Acked-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4
  2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
                   ` (6 preceding siblings ...)
  2019-11-11 19:49 ` [PATCH V5 net-next 7/7] ARM: dts: bcm2711-rpi-4: Enable GENET support Stefan Wahren
@ 2019-11-13  3:35 ` David Miller
  2019-11-13  3:56   ` Florian Fainelli
  7 siblings, 1 reply; 13+ messages in thread
From: David Miller @ 2019-11-13  3:35 UTC (permalink / raw)
  To: wahrenst
  Cc: matthias.bgg, mbrugger, robh+dt, f.fainelli, eric,
	nsaenzjulienne, opendmb, netdev, bcm-kernel-feedback-list,
	linux-arm-kernel, devicetree

From: Stefan Wahren <wahrenst@gmx.net>
Date: Mon, 11 Nov 2019 20:49:19 +0100

> Raspberry Pi 4 uses the broadcom genet chip in version five.
> This chip has a dma controller integrated. Up to now the maximal
> burst size was hard-coded to 0x10. But it turns out that Raspberry Pi 4
> does only work with the smaller maximal burst size of 0x8.
> 
> Additionally the patch series has some IRQ retrieval improvements and
> adds support for a missing PHY mode.
> 
> This series based on Matthias Brugger's V1 series [1].
> 
> [1] - https://patchwork.kernel.org/cover/11186193/

What tree should this be applied to?  Patch #7 does not apply to net-next.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4
  2019-11-13  3:35 ` [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 David Miller
@ 2019-11-13  3:56   ` Florian Fainelli
  2019-11-13  4:06     ` David Miller
  0 siblings, 1 reply; 13+ messages in thread
From: Florian Fainelli @ 2019-11-13  3:56 UTC (permalink / raw)
  To: David Miller, wahrenst
  Cc: matthias.bgg, mbrugger, robh+dt, f.fainelli, eric,
	nsaenzjulienne, opendmb, netdev, bcm-kernel-feedback-list,
	linux-arm-kernel, devicetree



On 11/12/2019 7:35 PM, David Miller wrote:
> From: Stefan Wahren <wahrenst@gmx.net>
> Date: Mon, 11 Nov 2019 20:49:19 +0100
> 
>> Raspberry Pi 4 uses the broadcom genet chip in version five.
>> This chip has a dma controller integrated. Up to now the maximal
>> burst size was hard-coded to 0x10. But it turns out that Raspberry Pi 4
>> does only work with the smaller maximal burst size of 0x8.
>>
>> Additionally the patch series has some IRQ retrieval improvements and
>> adds support for a missing PHY mode.
>>
>> This series based on Matthias Brugger's V1 series [1].
>>
>> [1] - https://patchwork.kernel.org/cover/11186193/
> 
> What tree should this be applied to?  Patch #7 does not apply to net-next.

Do you mind taking 1-6 and I take patch 7 through the Broadcom ARM SoC tree?
-- 
Florian

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4
  2019-11-13  3:56   ` Florian Fainelli
@ 2019-11-13  4:06     ` David Miller
  0 siblings, 0 replies; 13+ messages in thread
From: David Miller @ 2019-11-13  4:06 UTC (permalink / raw)
  To: f.fainelli
  Cc: wahrenst, matthias.bgg, mbrugger, robh+dt, eric, nsaenzjulienne,
	opendmb, netdev, bcm-kernel-feedback-list, linux-arm-kernel,
	devicetree

From: Florian Fainelli <f.fainelli@gmail.com>
Date: Tue, 12 Nov 2019 19:56:36 -0800

> 
> 
> On 11/12/2019 7:35 PM, David Miller wrote:
>> From: Stefan Wahren <wahrenst@gmx.net>
>> Date: Mon, 11 Nov 2019 20:49:19 +0100
>> 
>>> Raspberry Pi 4 uses the broadcom genet chip in version five.
>>> This chip has a dma controller integrated. Up to now the maximal
>>> burst size was hard-coded to 0x10. But it turns out that Raspberry Pi 4
>>> does only work with the smaller maximal burst size of 0x8.
>>>
>>> Additionally the patch series has some IRQ retrieval improvements and
>>> adds support for a missing PHY mode.
>>>
>>> This series based on Matthias Brugger's V1 series [1].
>>>
>>> [1] - https://patchwork.kernel.org/cover/11186193/
>> 
>> What tree should this be applied to?  Patch #7 does not apply to net-next.
> 
> Do you mind taking 1-6 and I take patch 7 through the Broadcom ARM SoC tree?

Sure, I'll do that right now, thanks!

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH V5 net-next 7/7] ARM: dts: bcm2711-rpi-4: Enable GENET support
  2019-11-11 19:49 ` [PATCH V5 net-next 7/7] ARM: dts: bcm2711-rpi-4: Enable GENET support Stefan Wahren
@ 2019-11-14 20:35   ` Florian Fainelli
  0 siblings, 0 replies; 13+ messages in thread
From: Florian Fainelli @ 2019-11-14 20:35 UTC (permalink / raw)
  To: bcm-kernel-feedback-list, Stefan Wahren, Matthias Brugger,
	Matthias Brugger, David S . Miller, Rob Herring
  Cc: Eric Anholt, Nicolas Saenz Julienne, Doug Berger, netdev,
	linux-arm-kernel, devicetree

On Mon, 11 Nov 2019 20:49:26 +0100, Stefan Wahren <wahrenst@gmx.net> wrote:
> This enables the Gigabit Ethernet support on the Raspberry Pi 4.
> The defined PHY mode is equivalent to the default register settings
> in the downstream tree.
> 
> Signed-off-by: Matthias Brugger <mbrugger@suse.com>
> Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> ---

Applied to devicetree/next, thanks!
--
Florian

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2019-11-14 20:36 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-11 19:49 [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 Stefan Wahren
2019-11-11 19:49 ` [PATCH V5 net-next 1/7] net: bcmgenet: Avoid touching non-existent interrupt Stefan Wahren
2019-11-11 19:49 ` [PATCH V5 net-next 2/7] net: bcmgenet: Fix error handling on IRQ retrieval Stefan Wahren
2019-11-11 19:49 ` [PATCH V5 net-next 3/7] dt-bindings: net: bcmgenet: Add BCM2711 support Stefan Wahren
2019-11-12 19:28   ` Rob Herring
2019-11-11 19:49 ` [PATCH V5 net-next 4/7] " Stefan Wahren
2019-11-11 19:49 ` [PATCH V5 net-next 5/7] net: bcmgenet: Refactor register access in bcmgenet_mii_config Stefan Wahren
2019-11-11 19:49 ` [PATCH V5 net-next 6/7] net: bcmgenet: Add RGMII_RXID support Stefan Wahren
2019-11-11 19:49 ` [PATCH V5 net-next 7/7] ARM: dts: bcm2711-rpi-4: Enable GENET support Stefan Wahren
2019-11-14 20:35   ` Florian Fainelli
2019-11-13  3:35 ` [PATCH V5 net-next 0/7] ARM: Enable GENET support for RPi 4 David Miller
2019-11-13  3:56   ` Florian Fainelli
2019-11-13  4:06     ` David Miller

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).