All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
To: cip-dev@lists.cip-project.org,
	Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>,
	Pavel Machek <pavel@denx.de>
Cc: Biju Das <biju.das.jz@bp.renesas.com>
Subject: [PATCH 5.10.y-cip 20/61] ravb: Add multi_irq to struct ravb_hw_info
Date: Mon, 10 Jan 2022 12:22:50 +0000	[thread overview]
Message-ID: <20220110122331.24114-21-prabhakar.mahadev-lad.rj@bp.renesas.com> (raw)
In-Reply-To: <20220110122331.24114-1-prabhakar.mahadev-lad.rj@bp.renesas.com>

From: Biju Das <biju.das.jz@bp.renesas.com>

commit 6de19fa0e9f7d8d1033810df1e53ae5b0c7b0d65 upstream.

R-Car Gen3 supports separate interrupts for E-MAC and DMA queues,
whereas R-Car Gen2 and RZ/G2L have a single interrupt instead.

Add a multi_irq 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>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
---
 drivers/net/ethernet/renesas/ravb.h      |  1 +
 drivers/net/ethernet/renesas/ravb_main.c | 22 ++++++++++++++--------
 drivers/net/ethernet/renesas/ravb_ptp.c  |  8 +++++---
 3 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb.h b/drivers/net/ethernet/renesas/ravb.h
index a0e19a45b2a0..a74bd63ba3be 100644
--- a/drivers/net/ethernet/renesas/ravb.h
+++ b/drivers/net/ethernet/renesas/ravb.h
@@ -998,6 +998,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 */
+	unsigned multi_irqs:1;		/* AVB-DMAC and E-MAC has multiple irqs */
 };
 
 struct ravb_private {
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index a8007c5cdd35..5e41c2b04083 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -425,6 +425,7 @@ static void ravb_emac_init(struct net_device *ndev)
 static int ravb_dmac_init(struct net_device *ndev)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	int error;
 
 	/* Set CONFIG mode */
@@ -456,7 +457,7 @@ static int ravb_dmac_init(struct net_device *ndev)
 	ravb_write(ndev, TCCR_TFEN, TCCR);
 
 	/* Interrupt init: */
-	if (priv->chip_id == RCAR_GEN3) {
+	if (info->multi_irqs) {
 		/* Clear DIL.DPLx */
 		ravb_write(ndev, 0, DIL);
 		/* Set queue specific interrupt */
@@ -756,6 +757,7 @@ static void ravb_error_interrupt(struct net_device *ndev)
 static bool ravb_queue_interrupt(struct net_device *ndev, int q)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	u32 ris0 = ravb_read(ndev, RIS0);
 	u32 ric0 = ravb_read(ndev, RIC0);
 	u32 tis  = ravb_read(ndev, TIS);
@@ -764,7 +766,7 @@ static bool ravb_queue_interrupt(struct net_device *ndev, int q)
 	if (((ris0 & ric0) & BIT(q)) || ((tis  & tic)  & BIT(q))) {
 		if (napi_schedule_prep(&priv->napi[q])) {
 			/* Mask RX and TX interrupts */
-			if (priv->chip_id == RCAR_GEN2) {
+			if (!info->multi_irqs) {
 				ravb_write(ndev, ric0 & ~BIT(q), RIC0);
 				ravb_write(ndev, tic & ~BIT(q), TIC);
 			} else {
@@ -907,6 +909,7 @@ static int ravb_poll(struct napi_struct *napi, int budget)
 {
 	struct net_device *ndev = napi->dev;
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	unsigned long flags;
 	int q = napi - priv->napi;
 	int mask = BIT(q);
@@ -930,7 +933,7 @@ static int ravb_poll(struct napi_struct *napi, int budget)
 
 	/* Re-enable RX/TX interrupts */
 	spin_lock_irqsave(&priv->lock, flags);
-	if (priv->chip_id == RCAR_GEN2) {
+	if (!info->multi_irqs) {
 		ravb_modify(ndev, RIC0, mask, mask);
 		ravb_modify(ndev, TIC,  mask, mask);
 	} else {
@@ -1336,6 +1339,7 @@ static inline int ravb_hook_irq(unsigned int irq, irq_handler_t handler,
 static int ravb_open(struct net_device *ndev)
 {
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	struct platform_device *pdev = priv->pdev;
 	struct device *dev = &pdev->dev;
 	int error;
@@ -1343,7 +1347,7 @@ static int ravb_open(struct net_device *ndev)
 	napi_enable(&priv->napi[RAVB_BE]);
 	napi_enable(&priv->napi[RAVB_NC]);
 
-	if (priv->chip_id == RCAR_GEN2) {
+	if (!info->multi_irqs) {
 		error = request_irq(ndev->irq, ravb_interrupt, IRQF_SHARED,
 				    ndev->name, ndev);
 		if (error) {
@@ -1401,7 +1405,7 @@ static int ravb_open(struct net_device *ndev)
 	if (priv->chip_id == RCAR_GEN2)
 		ravb_ptp_stop(ndev);
 out_free_irq_nc_tx:
-	if (priv->chip_id == RCAR_GEN2)
+	if (!info->multi_irqs)
 		goto out_free_irq;
 	free_irq(priv->tx_irqs[RAVB_NC], ndev);
 out_free_irq_nc_rx:
@@ -1678,6 +1682,7 @@ static int ravb_close(struct net_device *ndev)
 {
 	struct device_node *np = ndev->dev.parent->of_node;
 	struct ravb_private *priv = netdev_priv(ndev);
+	const struct ravb_hw_info *info = priv->info;
 	struct ravb_tstamp_skb *ts_skb, *ts_skb2;
 
 	netif_tx_stop_all_queues(ndev);
@@ -1711,7 +1716,7 @@ static int ravb_close(struct net_device *ndev)
 			of_phy_deregister_fixed_link(np);
 	}
 
-	if (priv->chip_id != RCAR_GEN2) {
+	if (info->multi_irqs) {
 		free_irq(priv->tx_irqs[RAVB_NC], ndev);
 		free_irq(priv->rx_irqs[RAVB_NC], ndev);
 		free_irq(priv->tx_irqs[RAVB_BE], ndev);
@@ -1937,6 +1942,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
 	.max_rx_len = RX_BUF_SZ + RAVB_ALIGN - 1,
 	.internal_delay = 1,
 	.tx_counters = 1,
+	.multi_irqs = 1,
 };
 
 static const struct ravb_hw_info ravb_gen2_hw_info = {
@@ -2075,7 +2081,7 @@ static int ravb_probe(struct platform_device *pdev)
 	pm_runtime_enable(&pdev->dev);
 	pm_runtime_get_sync(&pdev->dev);
 
-	if (info->chip_id == RCAR_GEN3)
+	if (info->multi_irqs)
 		irq = platform_get_irq_byname(pdev, "ch22");
 	else
 		irq = platform_get_irq(pdev, 0);
@@ -2115,7 +2121,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 (info->chip_id == RCAR_GEN3) {
+	if (info->multi_irqs) {
 		irq = platform_get_irq_byname(pdev, "ch24");
 		if (irq < 0) {
 			error = irq;
diff --git a/drivers/net/ethernet/renesas/ravb_ptp.c b/drivers/net/ethernet/renesas/ravb_ptp.c
index 6984bd5b7da9..c099656dd75b 100644
--- a/drivers/net/ethernet/renesas/ravb_ptp.c
+++ b/drivers/net/ethernet/renesas/ravb_ptp.c
@@ -179,6 +179,7 @@ static int ravb_ptp_extts(struct ptp_clock_info *ptp,
 {
 	struct ravb_private *priv = container_of(ptp, struct ravb_private,
 						 ptp.info);
+	const struct ravb_hw_info *info = priv->info;
 	struct net_device *ndev = priv->ndev;
 	unsigned long flags;
 
@@ -197,7 +198,7 @@ static int ravb_ptp_extts(struct ptp_clock_info *ptp,
 	priv->ptp.extts[req->index] = on;
 
 	spin_lock_irqsave(&priv->lock, flags);
-	if (priv->chip_id == RCAR_GEN2)
+	if (!info->multi_irqs)
 		ravb_modify(ndev, GIC, GIC_PTCE, on ? GIC_PTCE : 0);
 	else if (on)
 		ravb_write(ndev, GIE_PTCS, GIE);
@@ -213,6 +214,7 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
 {
 	struct ravb_private *priv = container_of(ptp, struct ravb_private,
 						 ptp.info);
+	const struct ravb_hw_info *info = priv->info;
 	struct net_device *ndev = priv->ndev;
 	struct ravb_ptp_perout *perout;
 	unsigned long flags;
@@ -252,7 +254,7 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
 		error = ravb_ptp_update_compare(priv, (u32)start_ns);
 		if (!error) {
 			/* Unmask interrupt */
-			if (priv->chip_id == RCAR_GEN2)
+			if (!info->multi_irqs)
 				ravb_modify(ndev, GIC, GIC_PTME, GIC_PTME);
 			else
 				ravb_write(ndev, GIE_PTMS0, GIE);
@@ -264,7 +266,7 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
 		perout->period = 0;
 
 		/* Mask interrupt */
-		if (priv->chip_id == RCAR_GEN2)
+		if (!info->multi_irqs)
 			ravb_modify(ndev, GIC, GIC_PTME, 0);
 		else
 			ravb_write(ndev, GID_PTMD0, GID);
-- 
2.17.1



  parent reply	other threads:[~2022-01-10 12:24 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-10 12:22 [PATCH 5.10.y-cip 00/61] Add Ethernet support to RZ/G2L Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 01/61] dt-bindings: net: renesas,etheravb: Add additional clocks Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 02/61] dt-bindings: net: renesas,etheravb: Fix optional second clock name Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 03/61] dt-bindings: net: renesas,etheravb: Document Gigabit Ethernet IP Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 04/61] dt-bindings: net: renesas,etheravb: Drop "int_" prefix and "_n" suffix from interrupt names Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 05/61] net: ethernet: ravb: Enable optional refclk Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 06/61] net: ethernet: ravb: Fix release of refclk Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 07/61] net: ethernet: ravb: Use devm_platform_get_and_ioremap_resource() Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 08/61] ravb: Fix a typo in comment Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 09/61] ravb: Remove checks for unsupported internal delay modes Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 10/61] ravb: Use unsigned int for num_tx_desc variable in struct ravb_private Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 11/61] ravb: Add struct ravb_hw_info to driver data Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 12/61] ravb: Add aligned_tx to struct ravb_hw_info Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 13/61] ravb: Add max_rx_len " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 14/61] ravb: Add stats_len " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 15/61] ravb: Add gstrings_stats and gstrings_size " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 16/61] ravb: Add net_features and net_hw_features " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 17/61] ravb: Add internal delay hw feature " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 18/61] ravb: Add tx_counters " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 19/61] ravb: Remove the macros NUM_TX_DESC_GEN[23] Lad Prabhakar
2022-01-10 12:22 ` Lad Prabhakar [this message]
2022-01-10 12:22 ` [PATCH 5.10.y-cip 21/61] ravb: Add no_ptp_cfg_active to struct ravb_hw_info Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 22/61] ravb: Add ptp_cfg_active " Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 23/61] ravb: Factorise ravb_ring_free function Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 24/61] ravb: Factorise ravb_ring_format function Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 25/61] ravb: Factorise ravb_ring_init function Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 26/61] ravb: Factorise ravb_rx function Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 27/61] ravb: Factorise ravb_adjust_link function Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 28/61] ravb: Factorise ravb_set_features Lad Prabhakar
2022-01-10 12:22 ` [PATCH 5.10.y-cip 29/61] ravb: Factorise ravb_dmac_init function Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 30/61] ravb: Factorise ravb_emac_init function Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 31/61] ravb: Add reset support Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 32/61] ravb: Rename "ravb_set_features_rx_csum" function to "ravb_set_features_rcar" Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 33/61] ravb: Rename "no_ptp_cfg_active" and "ptp_cfg_active" variables Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 34/61] ravb: Add nc_queue to struct ravb_hw_info Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 35/61] ravb: Add support for RZ/G2L SoC Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 36/61] ravb: Initialize GbEthernet DMAC Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 37/61] ravb: remove APSR_DM Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 38/61] ravb: Exclude gPTP feature support for RZ/G2L Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 39/61] ravb: Add tsrq to struct ravb_hw_info Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 40/61] ravb: Add magic_pkt " Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 41/61] ravb: Add half_duplex " Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 42/61] ravb: update "undocumented" annotations Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 43/61] ravb: Remove extra TAB Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 44/61] ravb: Initialize GbEthernet E-MAC Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 45/61] ravb: Add rx_max_buf_size to struct ravb_hw_info Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 46/61] ravb: Use ALIGN macro for max_rx_len Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 47/61] ravb: Fillup ravb_alloc_rx_desc_gbeth() stub Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 48/61] ravb: Fillup ravb_rx_ring_free_gbeth() stub Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 49/61] ravb: Fillup ravb_rx_ring_format_gbeth() stub Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 50/61] ravb: Fillup ravb_rx_gbeth() stub Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 51/61] ravb: Add carrier_counters to struct ravb_hw_info Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 52/61] ravb: Add support to retrieve stats for GbEthernet Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 53/61] ravb: Rename "tsrq" variable Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 54/61] ravb: Optimize ravb_emac_init_gbeth function Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 55/61] ravb: Rename "nc_queue" feature bit Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 56/61] ravb: Update ravb_emac_init_gbeth() Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 57/61] ravb: Fix typo AVB->DMAC Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 58/61] clk: renesas: r9a07g044: Add ethernet clock sources Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 59/61] clk: renesas: r9a07g044: Add GbEthernet clock/reset Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 60/61] arm64: dts: renesas: r9a07g044: Add GbEthernet nodes Lad Prabhakar
2022-01-10 12:23 ` [PATCH 5.10.y-cip 61/61] arm64: dts: renesas: rzg2l-smarc-som: Enable Ethernet Lad Prabhakar
2022-01-11 11:54 ` [cip-dev] [PATCH 5.10.y-cip 00/61] Add Ethernet support to RZ/G2L Pavel Machek
     [not found] ` <16C93537A1693B9B.28404@lists.cip-project.org>
2022-01-12  9:45   ` Pavel Machek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220110122331.24114-21-prabhakar.mahadev-lad.rj@bp.renesas.com \
    --to=prabhakar.mahadev-lad.rj@bp.renesas.com \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=cip-dev@lists.cip-project.org \
    --cc=nobuhiro1.iwamatsu@toshiba.co.jp \
    --cc=pavel@denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.