linux-renesas-soc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support
@ 2021-08-18 19:07 Biju Das
  2021-08-18 19:07 ` [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private Biju Das
                   ` (9 more replies)
  0 siblings, 10 replies; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	Yang Yingliang, netdev, linux-renesas-soc, Chris Paterson,
	Biju Das, Prabhakar Mahadev Lad

The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC are
similar to the R-Car Ethernet AVB IP.

The Gigabit Ethernet IP consists of Ethernet controller (E-MAC), Internal
TCP/IP Offload Engine (TOE)  and Dedicated Direct memory access controller
(DMAC).

With a few changes in the driver we can support both IPs.

Currently a runtime decision based on the chip type is used to distinguish
the HW differences between the SoC families.

This patch series is in preparation for supporting the RZ/G2L SoC by
replacing driver data chip type with struct ravb_hw_info by moving chip
type to it and also adding gstrings_stats, gstrings_size, net_hw_features,
net_features, aligned_tx, stats_len, max_rx_len variables to
it. This patch also adds the feature bit for {RX, TX} clock internal
delays and TX counters HW features found on R-Car Gen3 to struct
ravb_hw_info.

This patch series is based on net-next.
v2->v3:
 * Removed num_gstat_queue variable from struct ravb_hw_info.
 * started using unsigned int for num_tx_desc variable in struct ravb_private
 * split the patch 'Add struct ravb_hw_info to driver data' into two
 * Renamed skb_sz to max_rx_len and tx_drop_cntrs to tx_counters
   and also updated the comments.
v1->v2:
 * Replaced driver data chip type with struct ravb_hw_info
 * Added gstrings_stats, gstrings_size, net_hw_features, net_features,
   num_gstat_queue, num_tx_desc, stats_len, skb_sz to struct ravb_hw_info
 * Added internal_delay and tx_drop_cntrs hw feature bit to struct ravb_hw_info

RFC->V1
  * Incorporated feedback from Andrew, Sergei, Geert and Prabhakar
  * https://patchwork.kernel.org/project/linux-renesas-soc/list/?series=515525


Biju Das (9):
  ravb: Use unsigned int for num_tx_desc variable in struct ravb_private
  ravb: Add struct ravb_hw_info to driver data
  ravb: Add aligned_tx to struct ravb_hw_info
  ravb: Add max_rx_len to struct ravb_hw_info
  ravb: Add stats_len to struct ravb_hw_info
  ravb: Add gstrings_stats and gstrings_size to struct ravb_hw_info
  ravb: Add net_features and net_hw_features to struct ravb_hw_info
  ravb: Add internal delay hw feature to struct ravb_hw_info
  ravb: Add tx_counters to struct ravb_hw_info

 drivers/net/ethernet/renesas/ravb.h      |  19 +++-
 drivers/net/ethernet/renesas/ravb_main.c | 112 ++++++++++++++---------
 2 files changed, 89 insertions(+), 42 deletions(-)

-- 
2.17.1


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

* [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-19 15:26   ` Sergey Shtylyov
  2021-08-18 19:07 ` [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data Biju Das
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

The number of TX descriptors per packet is an unsigned value and
the variable for holding this information should be unsigned.

This patch replaces the data type of num_tx_desc variable in struct
ravb_private from 'int' to 'unsigned int'.
This patch also updates the data type of local variables to unsigned int,
where the local variables are evaluated using num_tx_desc.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
v3:- new patch
ref:- https://patchwork.kernel.org/project/linux-renesas-soc/patch/20210802102654.5996-2-biju.das.jz@bp.renesas.com/
---
 drivers/net/ethernet/renesas/ravb.h      |  2 +-
 drivers/net/ethernet/renesas/ravb_main.c | 28 ++++++++++++------------
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 80e62ca2e3d3..85ece16134c9 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -1039,7 +1039,7 @@ struct ravb_private {
 	unsigned rxcidm:1;		/* RX Clock Internal Delay Mode */
 	unsigned txcidm:1;		/* TX Clock Internal Delay Mode */
 	unsigned rgmii_override:1;	/* Deprecated rgmii-*id behavior */
-	int num_tx_desc;		/* TX descriptors per packet */
+	unsigned int num_tx_desc;	/* TX descriptors per packet */
 };
 
 static inline u32 ravb_read(struct net_device *ndev, enum ravb_reg reg)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 62b0605f02ff..94eb9136752d 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -177,10 +177,10 @@ static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
 	struct net_device_stats *stats = &priv->stats[q];
-	int num_tx_desc = priv->num_tx_desc;
+	unsigned int num_tx_desc = priv->num_tx_desc;
 	struct ravb_tx_desc *desc;
+	unsigned int entry;
 	int free_num = 0;
-	int entry;
 	u32 size;
 
 	for (; priv->cur_tx[q] - priv->dirty_tx[q] > 0; priv->dirty_tx[q]++) {
@@ -220,9 +220,9 @@ static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only)
 static void ravb_ring_free(struct net_device *ndev, int q)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
-	int num_tx_desc = priv->num_tx_desc;
-	int ring_size;
-	int i;
+	unsigned int num_tx_desc = priv->num_tx_desc;
+	unsigned int ring_size;
+	unsigned int i;
 
 	if (priv->rx_ring[q]) {
 		for (i = 0; i < priv->num_rx_ring[q]; i++) {
@@ -275,15 +275,15 @@ static void ravb_ring_free(struct net_device *ndev, int q)
 static void ravb_ring_format(struct net_device *ndev, int q)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
-	int num_tx_desc = priv->num_tx_desc;
+	unsigned int num_tx_desc = priv->num_tx_desc;
 	struct ravb_ex_rx_desc *rx_desc;
 	struct ravb_tx_desc *tx_desc;
 	struct ravb_desc *desc;
-	int rx_ring_size = sizeof(*rx_desc) * priv->num_rx_ring[q];
-	int tx_ring_size = sizeof(*tx_desc) * priv->num_tx_ring[q] *
-			   num_tx_desc;
+	unsigned int rx_ring_size = sizeof(*rx_desc) * priv->num_rx_ring[q];
+	unsigned int tx_ring_size = sizeof(*tx_desc) * priv->num_tx_ring[q] *
+				    num_tx_desc;
 	dma_addr_t dma_addr;
-	int i;
+	unsigned int i;
 
 	priv->cur_rx[q] = 0;
 	priv->cur_tx[q] = 0;
@@ -339,10 +339,10 @@ static void ravb_ring_format(struct net_device *ndev, int q)
 static int ravb_ring_init(struct net_device *ndev, int q)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
-	int num_tx_desc = priv->num_tx_desc;
+	unsigned int num_tx_desc = priv->num_tx_desc;
+	unsigned int ring_size;
 	struct sk_buff *skb;
-	int ring_size;
-	int i;
+	unsigned int i;
 
 	/* Allocate RX and TX skb rings */
 	priv->rx_skb[q] = kcalloc(priv->num_rx_ring[q],
@@ -1488,7 +1488,7 @@ static void ravb_tx_timeout_work(struct work_struct *work)
 static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
-	int num_tx_desc = priv->num_tx_desc;
+	unsigned int num_tx_desc = priv->num_tx_desc;
 	u16 q = skb_get_queue_mapping(skb);
 	struct ravb_tstamp_skb *ts_skb;
 	struct ravb_tx_desc *desc;
-- 
2.17.1


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

* [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
  2021-08-18 19:07 ` [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-19 16:19   ` Sergey Shtylyov
  2021-08-18 19:07 ` [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info Biju Das
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC are
similar to the R-Car Ethernet AVB IP. With a few changes in the driver we
can support both IPs.

This patch adds the struct ravb_hw_info to hold hw features, driver data
and function pointers to support both the IPs. It also replaces the driver
data chip type with struct ravb_hw_info by moving chip type to it.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
v2->v3:
 * Retained Rb tag from Andrew, since there is no functionality change
   apart from just splitting the patch into 2. Also updated the commit
   description.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      |  6 ++++
 drivers/net/ethernet/renesas/ravb_main.c | 35 +++++++++++++++---------
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 85ece16134c9..6ff0b2626708 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -988,6 +988,10 @@ enum ravb_chip_id {
 	RCAR_GEN3,
 };
 
+struct ravb_hw_info {
+	enum ravb_chip_id chip_id;
+};
+
 struct ravb_private {
 	struct net_device *ndev;
 	struct platform_device *pdev;
@@ -1040,6 +1044,8 @@ struct ravb_private {
 	unsigned txcidm:1;		/* TX Clock Internal Delay Mode */
 	unsigned rgmii_override:1;	/* Deprecated rgmii-*id behavior */
 	unsigned int num_tx_desc;	/* TX descriptors per packet */
+
+	const struct ravb_hw_info *info;
 };
 
 static inline u32 ravb_read(struct net_device *ndev, enum ravb_reg reg)
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 94eb9136752d..b6554e5e13af 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1924,12 +1924,20 @@ static int ravb_mdio_release(struct ravb_private *priv)
 	return 0;
 }
 
+static const struct ravb_hw_info ravb_gen3_hw_info = {
+	.chip_id = RCAR_GEN3,
+};
+
+static const struct ravb_hw_info ravb_gen2_hw_info = {
+	.chip_id = RCAR_GEN2,
+};
+
 static const struct of_device_id ravb_match_table[] = {
-	{ .compatible = "renesas,etheravb-r8a7790", .data = (void *)RCAR_GEN2 },
-	{ .compatible = "renesas,etheravb-r8a7794", .data = (void *)RCAR_GEN2 },
-	{ .compatible = "renesas,etheravb-rcar-gen2", .data = (void *)RCAR_GEN2 },
-	{ .compatible = "renesas,etheravb-r8a7795", .data = (void *)RCAR_GEN3 },
-	{ .compatible = "renesas,etheravb-rcar-gen3", .data = (void *)RCAR_GEN3 },
+	{ .compatible = "renesas,etheravb-r8a7790", .data = &ravb_gen2_hw_info },
+	{ .compatible = "renesas,etheravb-r8a7794", .data = &ravb_gen2_hw_info },
+	{ .compatible = "renesas,etheravb-rcar-gen2", .data = &ravb_gen2_hw_info },
+	{ .compatible = "renesas,etheravb-r8a7795", .data = &ravb_gen3_hw_info },
+	{ .compatible = "renesas,etheravb-rcar-gen3", .data = &ravb_gen3_hw_info },
 	{ }
 };
 MODULE_DEVICE_TABLE(of, ravb_match_table);
@@ -2023,8 +2031,8 @@ static void ravb_set_delay_mode(struct net_device *ndev)
 static int ravb_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
+	const struct ravb_hw_info *info;
 	struct ravb_private *priv;
-	enum ravb_chip_id chip_id;
 	struct net_device *ndev;
 	int error, irq, q;
 	struct resource *res;
@@ -2047,9 +2055,9 @@ static int ravb_probe(struct platform_device *pdev)
 	pm_runtime_enable(&pdev->dev);
 	pm_runtime_get_sync(&pdev->dev);
 
-	chip_id = (enum ravb_chip_id)of_device_get_match_data(&pdev->dev);
+	info = of_device_get_match_data(&pdev->dev);
 
-	if (chip_id == RCAR_GEN3)
+	if (info->chip_id == RCAR_GEN3)
 		irq = platform_get_irq_byname(pdev, "ch22");
 	else
 		irq = platform_get_irq(pdev, 0);
@@ -2062,6 +2070,7 @@ static int ravb_probe(struct platform_device *pdev)
 	SET_NETDEV_DEV(ndev, &pdev->dev);
 
 	priv = netdev_priv(ndev);
+	priv->info = info;
 	priv->ndev = ndev;
 	priv->pdev = pdev;
 	priv->num_tx_ring[RAVB_BE] = BE_TX_RING_SIZE;
@@ -2088,7 +2097,7 @@ static int ravb_probe(struct platform_device *pdev)
 	priv->avb_link_active_low =
 		of_property_read_bool(np, "renesas,ether-link-active-low");
 
-	if (chip_id == RCAR_GEN3) {
+	if (info->chip_id == RCAR_GEN3) {
 		irq = platform_get_irq_byname(pdev, "ch24");
 		if (irq < 0) {
 			error = irq;
@@ -2113,7 +2122,7 @@ static int ravb_probe(struct platform_device *pdev)
 		}
 	}
 
-	priv->chip_id = chip_id;
+	priv->chip_id = info->chip_id;
 
 	priv->clk = devm_clk_get(&pdev->dev, NULL);
 	if (IS_ERR(priv->clk)) {
@@ -2131,7 +2140,7 @@ static int ravb_probe(struct platform_device *pdev)
 	ndev->max_mtu = 2048 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN);
 	ndev->min_mtu = ETH_MIN_MTU;
 
-	priv->num_tx_desc = chip_id == RCAR_GEN2 ?
+	priv->num_tx_desc = info->chip_id == RCAR_GEN2 ?
 		NUM_TX_DESC_GEN2 : NUM_TX_DESC_GEN3;
 
 	/* Set function */
@@ -2173,7 +2182,7 @@ static int ravb_probe(struct platform_device *pdev)
 	INIT_LIST_HEAD(&priv->ts_skb_list);
 
 	/* Initialise PTP Clock driver */
-	if (chip_id != RCAR_GEN2)
+	if (info->chip_id != RCAR_GEN2)
 		ravb_ptp_init(ndev, pdev);
 
 	/* Debug message level */
@@ -2221,7 +2230,7 @@ static int ravb_probe(struct platform_device *pdev)
 			  priv->desc_bat_dma);
 
 	/* Stop PTP Clock driver */
-	if (chip_id != RCAR_GEN2)
+	if (info->chip_id != RCAR_GEN2)
 		ravb_ptp_stop(ndev);
 out_disable_refclk:
 	clk_disable_unprepare(priv->refclk);
-- 
2.17.1


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

* [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
  2021-08-18 19:07 ` [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private Biju Das
  2021-08-18 19:07 ` [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-19 15:41   ` Sergei Shtylyov
                     ` (2 more replies)
  2021-08-18 19:07 ` [PATCH net-next v3 4/9] ravb: Add max_rx_len " Biju Das
                   ` (6 subsequent siblings)
  9 siblings, 3 replies; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

R-Car Gen2 needs a 4byte aligned address for the transmission buffer,
whereas R-Car Gen3 doesn't have any such restriction.

Add aligned_tx to struct ravb_hw_info to select the driver to choose
between aligned and unaligned tx buffers.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
v3:
 * New patch
---
 drivers/net/ethernet/renesas/ravb.h      | 1 +
 drivers/net/ethernet/renesas/ravb_main.c | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 6ff0b2626708..4f71e5699ca1 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -990,6 +990,7 @@ enum ravb_chip_id {
 
 struct ravb_hw_info {
 	enum ravb_chip_id chip_id;
+	unsigned aligned_tx: 1;
 };
 
 struct ravb_private {
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index b6554e5e13af..dbccf2cd89b2 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1930,6 +1930,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
 	.chip_id = RCAR_GEN2,
+	.aligned_tx = 1,
 };
 
 static const struct of_device_id ravb_match_table[] = {
@@ -2140,7 +2141,7 @@ static int ravb_probe(struct platform_device *pdev)
 	ndev->max_mtu = 2048 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN);
 	ndev->min_mtu = ETH_MIN_MTU;
 
-	priv->num_tx_desc = info->chip_id == RCAR_GEN2 ?
+	priv->num_tx_desc = info->aligned_tx ?
 		NUM_TX_DESC_GEN2 : NUM_TX_DESC_GEN3;
 
 	/* Set function */
-- 
2.17.1


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

* [PATCH net-next v3 4/9] ravb: Add max_rx_len to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (2 preceding siblings ...)
  2021-08-18 19:07 ` [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-19 16:29   ` Sergey Shtylyov
  2021-08-18 19:07 ` [PATCH net-next v3 5/9] ravb: Add stats_len " Biju Das
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

The maximum descriptor size that can be specified on the reception side for
R-Car is 2048 bytes, whereas for RZ/G2L it is 8096.

Add the max_rx_len variable to struct ravb_hw_info for allocating different
RX skb buffer sizes for R-Car and RZ/G2L using the netdev_alloc_skb
function.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
v3:
 * Retained Rb tag from Andrew, since the change is just renaming
   the variable from skb_sz to max_rx_len.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      |  1 +
 drivers/net/ethernet/renesas/ravb_main.c | 10 ++++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 4f71e5699ca1..976242ed6f7a 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -990,6 +990,7 @@ enum ravb_chip_id {
 
 struct ravb_hw_info {
 	enum ravb_chip_id chip_id;
+	size_t max_rx_len;
 	unsigned aligned_tx: 1;
 };
 
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index dbccf2cd89b2..d9bb5a261d40 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -339,6 +339,7 @@ static void ravb_ring_format(struct net_device *ndev, int q)
 static int ravb_ring_init(struct net_device *ndev, int q)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	unsigned int num_tx_desc = priv->num_tx_desc;
 	unsigned int ring_size;
 	struct sk_buff *skb;
@@ -353,7 +354,7 @@ static int ravb_ring_init(struct net_device *ndev, int q)
 		goto error;
 
 	for (i = 0; i < priv->num_rx_ring[q]; i++) {
-		skb = netdev_alloc_skb(ndev, RX_BUF_SZ + RAVB_ALIGN - 1);
+		skb = netdev_alloc_skb(ndev, info->max_rx_len);
 		if (!skb)
 			goto error;
 		ravb_set_buffer_align(skb);
@@ -535,6 +536,7 @@ static void ravb_rx_csum(struct sk_buff *skb)
 static bool ravb_rx(struct net_device *ndev, int *quota, int q)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	int entry = priv->cur_rx[q] % priv->num_rx_ring[q];
 	int boguscnt = (priv->dirty_rx[q] + priv->num_rx_ring[q]) -
 			priv->cur_rx[q];
@@ -619,9 +621,7 @@ static bool ravb_rx(struct net_device *ndev, int *quota, int q)
 		desc->ds_cc = cpu_to_le16(RX_BUF_SZ);
 
 		if (!priv->rx_skb[q][entry]) {
-			skb = netdev_alloc_skb(ndev,
-					       RX_BUF_SZ +
-					       RAVB_ALIGN - 1);
+			skb = netdev_alloc_skb(ndev, info->max_rx_len);
 			if (!skb)
 				break;	/* Better luck next round. */
 			ravb_set_buffer_align(skb);
@@ -1926,10 +1926,12 @@ static int ravb_mdio_release(struct ravb_private *priv)
 
 static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.chip_id = RCAR_GEN3,
+	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
 	.chip_id = RCAR_GEN2,
+	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 	.aligned_tx = 1,
 };
 
-- 
2.17.1


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

* [PATCH net-next v3 5/9] ravb: Add stats_len to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (3 preceding siblings ...)
  2021-08-18 19:07 ` [PATCH net-next v3 4/9] ravb: Add max_rx_len " Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-19 16:42   ` Sergey Shtylyov
  2021-08-18 19:07 ` [PATCH net-next v3 6/9] ravb: Add gstrings_stats and gstrings_size " Biju Das
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

R-Car provides 30 device stats, whereas RZ/G2L provides only 15. In
addition, RZ/G2L has stats "rx_queue_0_csum_offload_errors" instead of
"rx_queue_0_missed_errors".

Replace RAVB_STATS_LEN macro with a structure variable stats_len to
struct ravb_hw_info, to support subsequent SoCs without any code changes
to the ravb_get_sset_count function.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com>
---
v2->v3:
 * No change.Added Rb tag from Sergei.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      | 1 +
 drivers/net/ethernet/renesas/ravb_main.c | 9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 976242ed6f7a..cec0c062d9bb 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -990,6 +990,7 @@ enum ravb_chip_id {
 
 struct ravb_hw_info {
 	enum ravb_chip_id chip_id;
+	int stats_len;
 	size_t max_rx_len;
 	unsigned aligned_tx: 1;
 };
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index d9bb5a261d40..1fb03d04d9b4 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1133,13 +1133,14 @@ static const char ravb_gstrings_stats[][ETH_GSTRING_LEN] = {
 	"rx_queue_1_over_errors",
 };
 
-#define RAVB_STATS_LEN	ARRAY_SIZE(ravb_gstrings_stats)
-
 static int ravb_get_sset_count(struct net_device *netdev, int sset)
 {
+	struct ravb_private *priv = netdev_priv(netdev);
+	const struct ravb_hw_info *info = priv->info;
+
 	switch (sset) {
 	case ETH_SS_STATS:
-		return RAVB_STATS_LEN;
+		return info->stats_len;
 	default:
 		return -EOPNOTSUPP;
 	}
@@ -1926,11 +1927,13 @@ static int ravb_mdio_release(struct ravb_private *priv)
 
 static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.chip_id = RCAR_GEN3,
+	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
 	.chip_id = RCAR_GEN2,
+	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 	.aligned_tx = 1,
 };
-- 
2.17.1


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

* [PATCH net-next v3 6/9] ravb: Add gstrings_stats and gstrings_size to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (4 preceding siblings ...)
  2021-08-18 19:07 ` [PATCH net-next v3 5/9] ravb: Add stats_len " Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-18 19:07 ` [PATCH net-next v3 7/9] ravb: Add net_features and net_hw_features " Biju Das
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

The device stats strings for R-Car and RZ/G2L are different.

R-Car provides 30 device stats, whereas RZ/G2L provides only 15. In
addition, RZ/G2L has stats "rx_queue_0_csum_offload_errors" instead of
"rx_queue_0_missed_errors".

Add structure variables gstrings_stats and gstrings_size to struct
ravb_hw_info, so that subsequent SoCs can be added without any code
changes in the ravb_get_strings function.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com>
---
v2->v3:
 * No change
 * Added Rb tag from Andrew and Sergei.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      | 2 ++
 drivers/net/ethernet/renesas/ravb_main.c | 9 ++++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index cec0c062d9bb..69256d7c5ee7 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -989,6 +989,8 @@ enum ravb_chip_id {
 };
 
 struct ravb_hw_info {
+	const char (*gstrings_stats)[ETH_GSTRING_LEN];
+	size_t gstrings_size;
 	enum ravb_chip_id chip_id;
 	int stats_len;
 	size_t max_rx_len;
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 1fb03d04d9b4..48d24cd4e71d 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1177,9 +1177,12 @@ static void ravb_get_ethtool_stats(struct net_device *ndev,
 
 static void ravb_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
 {
+	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
+
 	switch (stringset) {
 	case ETH_SS_STATS:
-		memcpy(data, ravb_gstrings_stats, sizeof(ravb_gstrings_stats));
+		memcpy(data, info->gstrings_stats, info->gstrings_size);
 		break;
 	}
 }
@@ -1926,12 +1929,16 @@ static int ravb_mdio_release(struct ravb_private *priv)
 }
 
 static const struct ravb_hw_info ravb_gen3_hw_info = {
+	.gstrings_stats = ravb_gstrings_stats,
+	.gstrings_size = sizeof(ravb_gstrings_stats),
 	.chip_id = RCAR_GEN3,
 	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
+	.gstrings_stats = ravb_gstrings_stats,
+	.gstrings_size = sizeof(ravb_gstrings_stats),
 	.chip_id = RCAR_GEN2,
 	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
-- 
2.17.1


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

* [PATCH net-next v3 7/9] ravb: Add net_features and net_hw_features to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (5 preceding siblings ...)
  2021-08-18 19:07 ` [PATCH net-next v3 6/9] ravb: Add gstrings_stats and gstrings_size " Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-18 19:07 ` [PATCH net-next v3 8/9] ravb: Add internal delay hw feature " Biju Das
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

On R-Car the checksum calculation on RX frames is done by the E-MAC
module, whereas on RZ/G2L it is done by the TOE.

TOE calculates the checksum of received frames from E-MAC and outputs it to
DMAC. TOE also calculates the checksum of transmission frames from DMAC and
outputs it E-MAC.

Add net_features and net_hw_features to struct ravb_hw_info, to support
subsequent SoCs without any code changes in the ravb_probe function.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com>
---
v2->v3:
 * No Change
 * Added Rb tag from Andrew and Sergei.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      |  2 ++
 drivers/net/ethernet/renesas/ravb_main.c | 12 ++++++++----
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 69256d7c5ee7..85eb3c69ac32 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -991,6 +991,8 @@ enum ravb_chip_id {
 struct ravb_hw_info {
 	const char (*gstrings_stats)[ETH_GSTRING_LEN];
 	size_t gstrings_size;
+	netdev_features_t net_hw_features;
+	netdev_features_t net_features;
 	enum ravb_chip_id chip_id;
 	int stats_len;
 	size_t max_rx_len;
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 48d24cd4e71d..6b209ad19de7 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1931,6 +1931,8 @@ static int ravb_mdio_release(struct ravb_private *priv)
 static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.gstrings_stats = ravb_gstrings_stats,
 	.gstrings_size = sizeof(ravb_gstrings_stats),
+	.net_hw_features = NETIF_F_RXCSUM,
+	.net_features = NETIF_F_RXCSUM,
 	.chip_id = RCAR_GEN3,
 	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
@@ -1939,6 +1941,8 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
 static const struct ravb_hw_info ravb_gen2_hw_info = {
 	.gstrings_stats = ravb_gstrings_stats,
 	.gstrings_size = sizeof(ravb_gstrings_stats),
+	.net_hw_features = NETIF_F_RXCSUM,
+	.net_features = NETIF_F_RXCSUM,
 	.chip_id = RCAR_GEN2,
 	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
@@ -2062,14 +2066,14 @@ static int ravb_probe(struct platform_device *pdev)
 	if (!ndev)
 		return -ENOMEM;
 
-	ndev->features = NETIF_F_RXCSUM;
-	ndev->hw_features = NETIF_F_RXCSUM;
+	info = of_device_get_match_data(&pdev->dev);
+
+	ndev->features = info->net_features;
+	ndev->hw_features = info->net_hw_features;
 
 	pm_runtime_enable(&pdev->dev);
 	pm_runtime_get_sync(&pdev->dev);
 
-	info = of_device_get_match_data(&pdev->dev);
-
 	if (info->chip_id == RCAR_GEN3)
 		irq = platform_get_irq_byname(pdev, "ch22");
 	else
-- 
2.17.1


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

* [PATCH net-next v3 8/9] ravb: Add internal delay hw feature to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (6 preceding siblings ...)
  2021-08-18 19:07 ` [PATCH net-next v3 7/9] ravb: Add net_features and net_hw_features " Biju Das
@ 2021-08-18 19:07 ` Biju Das
  2021-08-18 19:08 ` [PATCH net-next v3 9/9] ravb: Add tx_counters " Biju Das
  2021-08-19 11:10 ` [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support patchwork-bot+netdevbpf
  9 siblings, 0 replies; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:07 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

R-Car Gen3 supports TX and RX clock internal delay modes, whereas R-Car
Gen2 and RZ/G2L do not support it.
Add an internal_delay hw feature bit to struct ravb_hw_info to enable this
only for R-Car Gen3.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com>
---
v2->v3:
 * No change. Only comments updated
 * Added Rb tag from Andrew and Sergei.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      | 3 +++
 drivers/net/ethernet/renesas/ravb_main.c | 6 ++++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 85eb3c69ac32..65a13ad458e6 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -997,6 +997,9 @@ struct ravb_hw_info {
 	int stats_len;
 	size_t max_rx_len;
 	unsigned aligned_tx: 1;
+
+	/* hardware features */
+	unsigned internal_delay:1;	/* AVB-DMAC has internal delays */
 };
 
 struct ravb_private {
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 6b209ad19de7..2fe4b9231523 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1936,6 +1936,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.chip_id = RCAR_GEN3,
 	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
+	.internal_delay = 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
@@ -2175,7 +2176,7 @@ static int ravb_probe(struct platform_device *pdev)
 	/* Request GTI loading */
 	ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI);
 
-	if (priv->chip_id != RCAR_GEN2) {
+	if (info->internal_delay) {
 		ravb_parse_delay_mode(np, ndev);
 		ravb_set_delay_mode(ndev);
 	}
@@ -2348,6 +2349,7 @@ static int __maybe_unused ravb_resume(struct device *dev)
 {
 	struct net_device *ndev = dev_get_drvdata(dev);
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	int ret = 0;
 
 	/* If WoL is enabled set reset mode to rearm the WoL logic */
@@ -2370,7 +2372,7 @@ static int __maybe_unused ravb_resume(struct device *dev)
 	/* Request GTI loading */
 	ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI);
 
-	if (priv->chip_id != RCAR_GEN2)
+	if (info->internal_delay)
 		ravb_set_delay_mode(ndev);
 
 	/* Restore descriptor base address table */
-- 
2.17.1


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

* [PATCH net-next v3 9/9] ravb: Add tx_counters to struct ravb_hw_info
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (7 preceding siblings ...)
  2021-08-18 19:07 ` [PATCH net-next v3 8/9] ravb: Add internal delay hw feature " Biju Das
@ 2021-08-18 19:08 ` Biju Das
  2021-08-19 16:57   ` Sergey Shtylyov
  2021-08-19 11:10 ` [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support patchwork-bot+netdevbpf
  9 siblings, 1 reply; 24+ messages in thread
From: Biju Das @ 2021-08-18 19:08 UTC (permalink / raw)
  To: David S. Miller, Jakub Kicinski
  Cc: Biju Das, Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov,
	Adam Ford, Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda,
	netdev, linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

The register for retrieving TX counters is present only on R-Car Gen3
and RZ/G2L; it is not present on R-Car Gen2.

Add the tx_counters hw feature bit to struct ravb_hw_info, to enable this
feature specifically for R-Car Gen3 now and later extend it to RZ/G2L.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
---
v2->v3:
 * Retained Rb tag from Andrew, since change is just renaming the variable
   and comment update.
v2:
 * Incorporated Andrew and Sergei's review comments for making it smaller patch
   and provided detailed description.
---
 drivers/net/ethernet/renesas/ravb.h      | 1 +
 drivers/net/ethernet/renesas/ravb_main.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index 65a13ad458e6..37ad0f8aaf3c 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -1000,6 +1000,7 @@ struct ravb_hw_info {
 
 	/* hardware features */
 	unsigned internal_delay:1;	/* AVB-DMAC has internal delays */
+	unsigned tx_counters:1;		/* E-MAC has TX counters */
 };
 
 struct ravb_private {
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 2fe4b9231523..02842b980a7f 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1632,13 +1632,14 @@ static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb,
 static struct net_device_stats *ravb_get_stats(struct net_device *ndev)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	struct net_device_stats *nstats, *stats0, *stats1;
 
 	nstats = &ndev->stats;
 	stats0 = &priv->stats[RAVB_BE];
 	stats1 = &priv->stats[RAVB_NC];
 
-	if (priv->chip_id == RCAR_GEN3) {
+	if (info->tx_counters) {
 		nstats->tx_dropped += ravb_read(ndev, TROCR);
 		ravb_write(ndev, 0, TROCR);	/* (write clear) */
 	}
@@ -1937,6 +1938,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.stats_len = ARRAY_SIZE(ravb_gstrings_stats),
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 	.internal_delay = 1,
+	.tx_counters = 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
-- 
2.17.1


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

* Re: [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support
  2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
                   ` (8 preceding siblings ...)
  2021-08-18 19:08 ` [PATCH net-next v3 9/9] ravb: Add tx_counters " Biju Das
@ 2021-08-19 11:10 ` patchwork-bot+netdevbpf
  2021-08-19 15:08   ` Sergey Shtylyov
  9 siblings, 1 reply; 24+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-08-19 11:10 UTC (permalink / raw)
  To: Biju Das
  Cc: davem, kuba, sergei.shtylyov, geert+renesas, s.shtylyov,
	aford173, andrew, ashiduka, yoshihiro.shimoda.uh, yangyingliang,
	netdev, linux-renesas-soc, Chris.Paterson2, biju.das,
	prabhakar.mahadev-lad.rj

Hello:

This series was applied to netdev/net-next.git (refs/heads/master):

On Wed, 18 Aug 2021 20:07:51 +0100 you wrote:
> The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC are
> similar to the R-Car Ethernet AVB IP.
> 
> The Gigabit Ethernet IP consists of Ethernet controller (E-MAC), Internal
> TCP/IP Offload Engine (TOE)  and Dedicated Direct memory access controller
> (DMAC).
> 
> [...]

Here is the summary with links:
  - [net-next,v3,1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private
    https://git.kernel.org/netdev/net-next/c/cb537b241725
  - [net-next,v3,2/9] ravb: Add struct ravb_hw_info to driver data
    https://git.kernel.org/netdev/net-next/c/ebb091461a9e
  - [net-next,v3,3/9] ravb: Add aligned_tx to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/68ca3c923213
  - [net-next,v3,4/9] ravb: Add max_rx_len to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/cb01c672c2a7
  - [net-next,v3,5/9] ravb: Add stats_len to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/25154301fc2b
  - [net-next,v3,6/9] ravb: Add gstrings_stats and gstrings_size to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/896a818e0e1d
  - [net-next,v3,7/9] ravb: Add net_features and net_hw_features to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/8912ed25daf6
  - [net-next,v3,8/9] ravb: Add internal delay hw feature to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/8bc4caa0abaf
  - [net-next,v3,9/9] ravb: Add tx_counters to struct ravb_hw_info
    https://git.kernel.org/netdev/net-next/c/0b81d6731167

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

* Re: [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support
  2021-08-19 11:10 ` [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support patchwork-bot+netdevbpf
@ 2021-08-19 15:08   ` Sergey Shtylyov
  2021-08-19 15:29     ` Andrew Lunn
  0 siblings, 1 reply; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 15:08 UTC (permalink / raw)
  To: patchwork-bot+netdevbpf, Biju Das
  Cc: davem, kuba, sergei.shtylyov, geert+renesas, s.shtylyov,
	aford173, andrew, ashiduka, yoshihiro.shimoda.uh, yangyingliang,
	netdev, linux-renesas-soc, Chris.Paterson2, biju.das,
	prabhakar.mahadev-lad.rj

On 8/19/21 2:10 PM, patchwork-bot+netdevbpf@kernel.org wrote:

[...]
> This series was applied to netdev/net-next.git (refs/heads/master):
> 
> On Wed, 18 Aug 2021 20:07:51 +0100 you wrote:
>> The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC are
>> similar to the R-Car Ethernet AVB IP.
>>
>> The Gigabit Ethernet IP consists of Ethernet controller (E-MAC), Internal
>> TCP/IP Offload Engine (TOE)  and Dedicated Direct memory access controller
>> (DMAC).
>>
>> [...]
> 
> Here is the summary with links:
>   - [net-next,v3,1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private
>     https://git.kernel.org/netdev/net-next/c/cb537b241725
>   - [net-next,v3,2/9] ravb: Add struct ravb_hw_info to driver data
>     https://git.kernel.org/netdev/net-next/c/ebb091461a9e
>   - [net-next,v3,3/9] ravb: Add aligned_tx to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/68ca3c923213
>   - [net-next,v3,4/9] ravb: Add max_rx_len to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/cb01c672c2a7
>   - [net-next,v3,5/9] ravb: Add stats_len to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/25154301fc2b
>   - [net-next,v3,6/9] ravb: Add gstrings_stats and gstrings_size to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/896a818e0e1d
>   - [net-next,v3,7/9] ravb: Add net_features and net_hw_features to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/8912ed25daf6
>   - [net-next,v3,8/9] ravb: Add internal delay hw feature to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/8bc4caa0abaf
>   - [net-next,v3,9/9] ravb: Add tx_counters to struct ravb_hw_info
>     https://git.kernel.org/netdev/net-next/c/0b81d6731167
> 
> You are awesome, thank you!

   Are we in such a haste? I was just going to review these patches today...

MBR, Sergey

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

* Re: [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private
  2021-08-18 19:07 ` [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private Biju Das
@ 2021-08-19 15:26   ` Sergey Shtylyov
  0 siblings, 0 replies; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 15:26 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Geert Uytterhoeven, Sergey Shtylyov, Adam Ford, Andrew Lunn,
	Yuusuke Ashizuka, Yoshihiro Shimoda, netdev, linux-renesas-soc,
	Chris Paterson, Biju Das, Prabhakar Mahadev Lad

On 8/18/21 10:07 PM, Biju Das wrote:

> The number of TX descriptors per packet is an unsigned value and
> the variable for holding this information should be unsigned.
> 
> This patch replaces the data type of num_tx_desc variable in struct
> ravb_private from 'int' to 'unsigned int'.
> This patch also updates the data type of local variables to unsigned int,
> where the local variables are evaluated using num_tx_desc.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* Re: [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support
  2021-08-19 15:08   ` Sergey Shtylyov
@ 2021-08-19 15:29     ` Andrew Lunn
  0 siblings, 0 replies; 24+ messages in thread
From: Andrew Lunn @ 2021-08-19 15:29 UTC (permalink / raw)
  To: Sergey Shtylyov
  Cc: patchwork-bot+netdevbpf, Biju Das, davem, kuba, sergei.shtylyov,
	geert+renesas, s.shtylyov, aford173, ashiduka,
	yoshihiro.shimoda.uh, yangyingliang, netdev, linux-renesas-soc,
	Chris.Paterson2, biju.das, prabhakar.mahadev-lad.rj

> Are we in such a haste? I was just going to review these patches
> today...

I guess the thinking is, fixup patches can always be applied after the
fact. But i agree, i really liked the 3 day wait time for patches to
be merged, it gave a reasonable amount of time for reviews, without
slowing down development work. The current 1 day or less does seem
counter productive, i expect there are less reviews happening as a
result, lower quality code, more bugs...

	Andrew

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

* Re: [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info
  2021-08-18 19:07 ` [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info Biju Das
@ 2021-08-19 15:41   ` Sergei Shtylyov
  2021-08-19 15:43   ` Sergey Shtylyov
  2021-08-23  9:14   ` Geert Uytterhoeven
  2 siblings, 0 replies; 24+ messages in thread
From: Sergei Shtylyov @ 2021-08-19 15:41 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Geert Uytterhoeven, Sergey Shtylyov, Adam Ford, Andrew Lunn,
	Yuusuke Ashizuka, Yoshihiro Shimoda, netdev, linux-renesas-soc,
	Chris Paterson, Biju Das, Prabhakar Mahadev Lad

On 8/18/21 10:07 PM, Biju Das wrote:

> R-Car Gen2 needs a 4byte aligned address for the transmission buffer,
> whereas R-Car Gen3 doesn't have any such restriction.
> 
> Add aligned_tx to struct ravb_hw_info to select the driver to choose
> between aligned and unaligned tx buffers.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
> v3:
>  * New patch

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* Re: [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info
  2021-08-18 19:07 ` [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info Biju Das
  2021-08-19 15:41   ` Sergei Shtylyov
@ 2021-08-19 15:43   ` Sergey Shtylyov
  2021-08-23  9:14   ` Geert Uytterhoeven
  2 siblings, 0 replies; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 15:43 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Geert Uytterhoeven, Sergey Shtylyov, Adam Ford, Andrew Lunn,
	Yuusuke Ashizuka, Yoshihiro Shimoda, netdev, linux-renesas-soc,
	Chris Paterson, Biju Das, Prabhakar Mahadev Lad

(Resending from the proper email.)

On 8/18/21 10:07 PM, Biju Das wrote:

> R-Car Gen2 needs a 4byte aligned address for the transmission buffer,
> whereas R-Car Gen3 doesn't have any such restriction.
> 
> Add aligned_tx to struct ravb_hw_info to select the driver to choose
> between aligned and unaligned tx buffers.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> ---
> v3:
>  * New patch

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* Re: [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data
  2021-08-18 19:07 ` [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data Biju Das
@ 2021-08-19 16:19   ` Sergey Shtylyov
  2021-08-19 17:33     ` Biju Das
  0 siblings, 1 reply; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 16:19 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov, Adam Ford,
	Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda, netdev,
	linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

On 8/18/21 10:07 PM, Biju Das wrote:

> The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC are
> similar to the R-Car Ethernet AVB IP. With a few changes in the driver we
> can support both IPs.
> 
> This patch adds the struct ravb_hw_info to hold hw features, driver data
> and function pointers to support both the IPs. It also replaces the driver
> data chip type with struct ravb_hw_info by moving chip type to it.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> ---
> v2->v3:
>  * Retained Rb tag from Andrew, since there is no functionality change
>    apart from just splitting the patch into 2. Also updated the commit
>    description.
> v2:
>  * Incorporated Andrew and Sergei's review comments for making it smaller patch
>    and provided detailed description.

[...]
>  static inline u32 ravb_read(struct net_device *ndev, enum ravb_reg reg)
> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
> index 94eb9136752d..b6554e5e13af 100644
> --- a/drivers/net/ethernet/renesas/ravb_main.c
> +++ b/drivers/net/ethernet/renesas/ravb_main.c
[...]
> @@ -2113,7 +2122,7 @@ static int ravb_probe(struct platform_device *pdev)
>  		}
>  	}
>  
> -	priv->chip_id = chip_id;
> +	priv->chip_id = info->chip_id;

   Do we still need priv->chip_id?

>  	priv->clk = devm_clk_get(&pdev->dev, NULL);
>  	if (IS_ERR(priv->clk)) {
[...]

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* Re: [PATCH net-next v3 4/9] ravb: Add max_rx_len to struct ravb_hw_info
  2021-08-18 19:07 ` [PATCH net-next v3 4/9] ravb: Add max_rx_len " Biju Das
@ 2021-08-19 16:29   ` Sergey Shtylyov
  0 siblings, 0 replies; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 16:29 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Geert Uytterhoeven, Sergey Shtylyov, Adam Ford, Andrew Lunn,
	Yuusuke Ashizuka, Yoshihiro Shimoda, netdev, linux-renesas-soc,
	Chris Paterson, Biju Das, Prabhakar Mahadev Lad

On 8/18/21 10:07 PM, Biju Das wrote:

> The maximum descriptor size that can be specified on the reception side for
> R-Car is 2048 bytes, whereas for RZ/G2L it is 8096.
> 
> Add the max_rx_len variable to struct ravb_hw_info for allocating different
> RX skb buffer sizes for R-Car and RZ/G2L using the netdev_alloc_skb
> function.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
[...]

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* Re: [PATCH net-next v3 5/9] ravb: Add stats_len to struct ravb_hw_info
  2021-08-18 19:07 ` [PATCH net-next v3 5/9] ravb: Add stats_len " Biju Das
@ 2021-08-19 16:42   ` Sergey Shtylyov
  0 siblings, 0 replies; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 16:42 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Geert Uytterhoeven, Sergey Shtylyov, Adam Ford, Andrew Lunn,
	Yuusuke Ashizuka, Yoshihiro Shimoda, netdev, linux-renesas-soc,
	Chris Paterson, Biju Das, Prabhakar Mahadev Lad

On 8/18/21 10:07 PM, Biju Das wrote:

> R-Car provides 30 device stats, whereas RZ/G2L provides only 15. In
> addition, RZ/G2L has stats "rx_queue_0_csum_offload_errors" instead of
> "rx_queue_0_missed_errors".
> 
> Replace RAVB_STATS_LEN macro with a structure variable stats_len to

    Structure field, maybe? :-)

> struct ravb_hw_info, to support subsequent SoCs without any code changes
> to the ravb_get_sset_count function.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com>
[...]

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* Re: [PATCH net-next v3 9/9] ravb: Add tx_counters to struct ravb_hw_info
  2021-08-18 19:08 ` [PATCH net-next v3 9/9] ravb: Add tx_counters " Biju Das
@ 2021-08-19 16:57   ` Sergey Shtylyov
  0 siblings, 0 replies; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-19 16:57 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov, Adam Ford,
	Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda, netdev,
	linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

On 8/18/21 10:08 PM, Biju Das wrote:

> The register for retrieving TX counters is present only on R-Car Gen3
> and RZ/G2L; it is not present on R-Car Gen2.
> 
> Add the tx_counters hw feature bit to struct ravb_hw_info, to enable this
> feature specifically for R-Car Gen3 now and later extend it to RZ/G2L.
> 
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> ---
> v2->v3:
>  * Retained Rb tag from Andrew, since change is just renaming the variable
>    and comment update.
> v2:
>  * Incorporated Andrew and Sergei's review comments for making it smaller patch
>    and provided detailed description.
[...]

Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>

[...]

MBR, Sergey

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

* RE: [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data
  2021-08-19 16:19   ` Sergey Shtylyov
@ 2021-08-19 17:33     ` Biju Das
  2021-08-20 18:15       ` Sergey Shtylyov
  0 siblings, 1 reply; 24+ messages in thread
From: Biju Das @ 2021-08-19 17:33 UTC (permalink / raw)
  To: Sergey Shtylyov, David S. Miller, Jakub Kicinski
  Cc: Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov, Adam Ford,
	Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda, netdev,
	linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

Hi Sergei,

> Subject: Re: [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to
> driver data
> 
> On 8/18/21 10:07 PM, Biju Das wrote:
> 
> > The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC
> > are similar to the R-Car Ethernet AVB IP. With a few changes in the
> > driver we can support both IPs.
> >
> > This patch adds the struct ravb_hw_info to hold hw features, driver
> > data and function pointers to support both the IPs. It also replaces
> > the driver data chip type with struct ravb_hw_info by moving chip type
> to it.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> > Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> > ---
> > v2->v3:
> >  * Retained Rb tag from Andrew, since there is no functionality change
> >    apart from just splitting the patch into 2. Also updated the commit
> >    description.
> > v2:
> >  * Incorporated Andrew and Sergei's review comments for making it
> smaller patch
> >    and provided detailed description.
> 
> [...]
> >  static inline u32 ravb_read(struct net_device *ndev, enum ravb_reg
> > reg) diff --git a/drivers/net/ethernet/renesas/ravb_main.c
> > b/drivers/net/ethernet/renesas/ravb_main.c
> > index 94eb9136752d..b6554e5e13af 100644
> > --- a/drivers/net/ethernet/renesas/ravb_main.c
> > +++ b/drivers/net/ethernet/renesas/ravb_main.c
> [...]
> > @@ -2113,7 +2122,7 @@ static int ravb_probe(struct platform_device
> *pdev)
> >  		}
> >  	}
> >
> > -	priv->chip_id = chip_id;
> > +	priv->chip_id = info->chip_id;
> 
>    Do we still need priv->chip_id?

The patch currently merged is preparation patch, subsequent patch will replace
all the chip_id in ravb_main with hardware features and driver features.
After that both priv->chip_id and info_chipid is not required for ravb_main.c

However ptp driver[1] still uses it, by adding a feature bit we can replace
that as well. So going forward, there won't be any priv->chip_id or info->chip_id.

Does it makes sense?

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/ethernet/renesas/ravb_ptp.c?h=v5.14-rc6#n200

Regards,
Biju

> 
> >  	priv->clk = devm_clk_get(&pdev->dev, NULL);
> >  	if (IS_ERR(priv->clk)) {
> [...]
> 
> Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
> 
> [...]
> 
> MBR, Sergey

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

* Re: [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data
  2021-08-19 17:33     ` Biju Das
@ 2021-08-20 18:15       ` Sergey Shtylyov
  0 siblings, 0 replies; 24+ messages in thread
From: Sergey Shtylyov @ 2021-08-20 18:15 UTC (permalink / raw)
  To: Biju Das, David S. Miller, Jakub Kicinski
  Cc: Sergei Shtylyov, Geert Uytterhoeven, Sergey Shtylyov, Adam Ford,
	Andrew Lunn, Yuusuke Ashizuka, Yoshihiro Shimoda, netdev,
	linux-renesas-soc, Chris Paterson, Biju Das,
	Prabhakar Mahadev Lad

On 8/19/21 8:33 PM, Biju Das wrote:

[...]
>>> The DMAC and EMAC blocks of Gigabit Ethernet IP found on RZ/G2L SoC
>>> are similar to the R-Car Ethernet AVB IP. With a few changes in the
>>> driver we can support both IPs.
>>>
>>> This patch adds the struct ravb_hw_info to hold hw features, driver
>>> data and function pointers to support both the IPs. It also replaces
>>> the driver data chip type with struct ravb_hw_info by moving chip type
>> to it.
>>>
>>> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
>>> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
>>> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
[...]
>>> reg) diff --git a/drivers/net/ethernet/renesas/ravb_main.c
>>> b/drivers/net/ethernet/renesas/ravb_main.c
>>> index 94eb9136752d..b6554e5e13af 100644
>>> --- a/drivers/net/ethernet/renesas/ravb_main.c
>>> +++ b/drivers/net/ethernet/renesas/ravb_main.c
>> [...]
>>> @@ -2113,7 +2122,7 @@ static int ravb_probe(struct platform_device
>> *pdev)
>>>  		}
>>>  	}
>>>
>>> -	priv->chip_id = chip_id;
>>> +	priv->chip_id = info->chip_id;
>>
>>    Do we still need priv->chip_id?
> 
> The patch currently merged is preparation patch, subsequent patch will replace
> all the chip_id in ravb_main with hardware features and driver features.
> After that both priv->chip_id and info_chipid is not required for ravb_main.c
> 
> However ptp driver[1] still uses it, by adding a feature bit we can replace
> that as well. So going forward, there won't be any priv->chip_id or info->chip_id.
> 
> Does it makes sense?
> 
> [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/ethernet/renesas/ravb_ptp.c?h=v5.14-rc6#n200

   OK, seems sane, go ahead. :-)

> Regards,
> Biju

MBR, Sergey

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

* Re: [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info
  2021-08-18 19:07 ` [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info Biju Das
  2021-08-19 15:41   ` Sergei Shtylyov
  2021-08-19 15:43   ` Sergey Shtylyov
@ 2021-08-23  9:14   ` Geert Uytterhoeven
  2021-08-23  9:26     ` Biju Das
  2 siblings, 1 reply; 24+ messages in thread
From: Geert Uytterhoeven @ 2021-08-23  9:14 UTC (permalink / raw)
  To: Biju Das
  Cc: David S. Miller, Jakub Kicinski, Sergei Shtylyov,
	Sergey Shtylyov, Adam Ford, Andrew Lunn, Yuusuke Ashizuka,
	Yoshihiro Shimoda, netdev, Linux-Renesas, Chris Paterson,
	Biju Das, Prabhakar Mahadev Lad

Hi Biju,

On Wed, Aug 18, 2021 at 9:08 PM Biju Das <biju.das.jz@bp.renesas.com> wrote:
> R-Car Gen2 needs a 4byte aligned address for the transmission buffer,
> whereas R-Car Gen3 doesn't have any such restriction.
>
> Add aligned_tx to struct ravb_hw_info to select the driver to choose
> between aligned and unaligned tx buffers.
>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

Thanks for your patch, which is now commit 68ca3c923213b908 ("ravb:
Add aligned_tx to struct ravb_hw_info") in net-next.

> --- a/drivers/net/ethernet/renesas/ravb.h
> +++ b/drivers/net/ethernet/renesas/ravb.h
> @@ -990,6 +990,7 @@ enum ravb_chip_id {
>
>  struct ravb_hw_info {
>         enum ravb_chip_id chip_id;
> +       unsigned aligned_tx: 1;
>  };
>
>  struct ravb_private {
> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
> index b6554e5e13af..dbccf2cd89b2 100644
> --- a/drivers/net/ethernet/renesas/ravb_main.c
> +++ b/drivers/net/ethernet/renesas/ravb_main.c
> @@ -1930,6 +1930,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
>
>  static const struct ravb_hw_info ravb_gen2_hw_info = {
>         .chip_id = RCAR_GEN2,
> +       .aligned_tx = 1,
>  };
>
>  static const struct of_device_id ravb_match_table[] = {
> @@ -2140,7 +2141,7 @@ static int ravb_probe(struct platform_device *pdev)
>         ndev->max_mtu = 2048 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN);
>         ndev->min_mtu = ETH_MIN_MTU;
>
> -       priv->num_tx_desc = info->chip_id == RCAR_GEN2 ?
> +       priv->num_tx_desc = info->aligned_tx ?
>                 NUM_TX_DESC_GEN2 : NUM_TX_DESC_GEN3;

At first look, this change does not seem to match the patch description.
Upon a deeper look, it is correct, as num_tx_desc is also used to
control alignment.

But now NUM_TX_DESC_GEN[23] no longer match their use.
Perhaps they should be renamed, or replaced by hardcoded values,
with a comment?

    /*
     * FIXME: Explain the relationship between alignment and number of buffers
     */
    priv->num_tx_desc = info->aligned_tx ? 2 : 1;

>
>         /* Set function */

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* RE: [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info
  2021-08-23  9:14   ` Geert Uytterhoeven
@ 2021-08-23  9:26     ` Biju Das
  0 siblings, 0 replies; 24+ messages in thread
From: Biju Das @ 2021-08-23  9:26 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: David S. Miller, Jakub Kicinski, Sergei Shtylyov,
	Sergey Shtylyov, Adam Ford, Andrew Lunn, Yuusuke Ashizuka,
	Yoshihiro Shimoda, netdev, Linux-Renesas, Chris Paterson,
	Biju Das, Prabhakar Mahadev Lad

Hi Geert,

Thanks for the feedback

> Subject: Re: [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct
> ravb_hw_info
> 
> Hi Biju,
> 
> On Wed, Aug 18, 2021 at 9:08 PM Biju Das <biju.das.jz@bp.renesas.com>
> wrote:
> > R-Car Gen2 needs a 4byte aligned address for the transmission buffer,
> > whereas R-Car Gen3 doesn't have any such restriction.
> >
> > Add aligned_tx to struct ravb_hw_info to select the driver to choose
> > between aligned and unaligned tx buffers.
> >
> > Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> > Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
> 
> Thanks for your patch, which is now commit 68ca3c923213b908 ("ravb:
> Add aligned_tx to struct ravb_hw_info") in net-next.
> 
> > --- a/drivers/net/ethernet/renesas/ravb.h
> > +++ b/drivers/net/ethernet/renesas/ravb.h
> > @@ -990,6 +990,7 @@ enum ravb_chip_id {
> >
> >  struct ravb_hw_info {
> >         enum ravb_chip_id chip_id;
> > +       unsigned aligned_tx: 1;
> >  };
> >
> >  struct ravb_private {
> > diff --git a/drivers/net/ethernet/renesas/ravb_main.c
> > b/drivers/net/ethernet/renesas/ravb_main.c
> > index b6554e5e13af..dbccf2cd89b2 100644
> > --- a/drivers/net/ethernet/renesas/ravb_main.c
> > +++ b/drivers/net/ethernet/renesas/ravb_main.c
> > @@ -1930,6 +1930,7 @@ static const struct ravb_hw_info
> > ravb_gen3_hw_info = {
> >
> >  static const struct ravb_hw_info ravb_gen2_hw_info = {
> >         .chip_id = RCAR_GEN2,
> > +       .aligned_tx = 1,
> >  };
> >
> >  static const struct of_device_id ravb_match_table[] = { @@ -2140,7
> > +2141,7 @@ static int ravb_probe(struct platform_device *pdev)
> >         ndev->max_mtu = 2048 - (ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN);
> >         ndev->min_mtu = ETH_MIN_MTU;
> >
> > -       priv->num_tx_desc = info->chip_id == RCAR_GEN2 ?
> > +       priv->num_tx_desc = info->aligned_tx ?
> >                 NUM_TX_DESC_GEN2 : NUM_TX_DESC_GEN3;
> 
> At first look, this change does not seem to match the patch description.
> Upon a deeper look, it is correct, as num_tx_desc is also used to control
> alignment.

This changes introduced by the commit [1], where it used num_tx_desc related to 4byte alignment restriction.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/net/ethernet/renesas/ravb_main.c?h=v5.14-rc7&id=f543305da9b5a5efaf6fa61606e8bbc8977f406d


> 
> But now NUM_TX_DESC_GEN[23] no longer match their use.
> Perhaps they should be renamed, or replaced by hardcoded values, with a
> comment?

OK, will replace this macros with hardcoded values with a comment.

Regards,
Biju


> 
>     /*
>      * FIXME: Explain the relationship between alignment and number of
> buffers
>      */
>     priv->num_tx_desc = info->aligned_tx ? 2 : 1;
> 
> >
> >         /* Set function */
> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-
> m68k.org
> 
> In personal conversations with technical people, I call myself a hacker.
> But when I'm talking to journalists I just say "programmer" or something
> like that.
>                                 -- Linus Torvalds

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

end of thread, other threads:[~2021-08-23  9:27 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-18 19:07 [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support Biju Das
2021-08-18 19:07 ` [PATCH net-next v3 1/9] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private Biju Das
2021-08-19 15:26   ` Sergey Shtylyov
2021-08-18 19:07 ` [PATCH net-next v3 2/9] ravb: Add struct ravb_hw_info to driver data Biju Das
2021-08-19 16:19   ` Sergey Shtylyov
2021-08-19 17:33     ` Biju Das
2021-08-20 18:15       ` Sergey Shtylyov
2021-08-18 19:07 ` [PATCH net-next v3 3/9] ravb: Add aligned_tx to struct ravb_hw_info Biju Das
2021-08-19 15:41   ` Sergei Shtylyov
2021-08-19 15:43   ` Sergey Shtylyov
2021-08-23  9:14   ` Geert Uytterhoeven
2021-08-23  9:26     ` Biju Das
2021-08-18 19:07 ` [PATCH net-next v3 4/9] ravb: Add max_rx_len " Biju Das
2021-08-19 16:29   ` Sergey Shtylyov
2021-08-18 19:07 ` [PATCH net-next v3 5/9] ravb: Add stats_len " Biju Das
2021-08-19 16:42   ` Sergey Shtylyov
2021-08-18 19:07 ` [PATCH net-next v3 6/9] ravb: Add gstrings_stats and gstrings_size " Biju Das
2021-08-18 19:07 ` [PATCH net-next v3 7/9] ravb: Add net_features and net_hw_features " Biju Das
2021-08-18 19:07 ` [PATCH net-next v3 8/9] ravb: Add internal delay hw feature " Biju Das
2021-08-18 19:08 ` [PATCH net-next v3 9/9] ravb: Add tx_counters " Biju Das
2021-08-19 16:57   ` Sergey Shtylyov
2021-08-19 11:10 ` [PATCH net-next v3 0/9] Add Gigabit Ethernet driver support patchwork-bot+netdevbpf
2021-08-19 15:08   ` Sergey Shtylyov
2021-08-19 15:29     ` Andrew Lunn

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