ravb: Separate handling of irq enable/disable regs into feature
authorPhil Edworthy <phil.edworthy@renesas.com>
Thu, 12 May 2022 11:47:19 +0000 (12:47 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 16 May 2022 09:14:27 +0000 (10:14 +0100)
Currently, when the HW has a single interrupt, the driver uses the
GIC, TIC, RIC0 registers to enable and disable interrupts.
When the HW has multiple interrupts, it uses the GIE, GID, TIE, TID,
RIE0, RID0 registers.

However, other devices, e.g. RZ/V2M, have multiple irqs and only have
the GIC, TIC, RIC0 registers.
Therefore, split this into a separate feature.

Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/renesas/ravb.h
drivers/net/ethernet/renesas/ravb_main.c
drivers/net/ethernet/renesas/ravb_ptp.c

index 08062d73df10c48a1b5b47ff9f77e2ac011b64fc..bb82efd222c74cf0ede09a77356e99633436f8f3 100644 (file)
@@ -1027,6 +1027,7 @@ struct ravb_hw_info {
        unsigned tx_counters:1;         /* E-MAC has TX counters */
        unsigned carrier_counters:1;    /* E-MAC has carrier counters */
        unsigned multi_irqs:1;          /* AVB-DMAC and E-MAC has multiple irqs */
+       unsigned irq_en_dis:1;          /* Has separate irq enable and disable regs */
        unsigned gptp:1;                /* AVB-DMAC has gPTP support */
        unsigned ccc_gac:1;             /* AVB-DMAC has gPTP support active in config mode */
        unsigned nc_queues:1;           /* AVB-DMAC has RX and TX NC queues */
index 525d66f71f02e93547d808aa60e70265e855bc2a..e22c0e6ed0f3959db0a7e5570067b5fbb807328c 100644 (file)
@@ -1124,7 +1124,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 (!info->multi_irqs) {
+                       if (!info->irq_en_dis) {
                                ravb_write(ndev, ric0 & ~BIT(q), RIC0);
                                ravb_write(ndev, tic & ~BIT(q), TIC);
                        } else {
@@ -1306,7 +1306,7 @@ static int ravb_poll(struct napi_struct *napi, int budget)
 
        /* Re-enable RX/TX interrupts */
        spin_lock_irqsave(&priv->lock, flags);
-       if (!info->multi_irqs) {
+       if (!info->irq_en_dis) {
                ravb_modify(ndev, RIC0, mask, mask);
                ravb_modify(ndev, TIC,  mask, mask);
        } else {
@@ -2410,6 +2410,7 @@ static const struct ravb_hw_info ravb_gen3_hw_info = {
        .internal_delay = 1,
        .tx_counters = 1,
        .multi_irqs = 1,
+       .irq_en_dis = 1,
        .ccc_gac = 1,
        .nc_queues = 1,
        .magic_pkt = 1,
index c099656dd75b6ff7d8246b23a3ef01a27d597663..87c4306d66ecc329082893eda9de127224cf6db6 100644 (file)
@@ -198,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 (!info->multi_irqs)
+       if (!info->irq_en_dis)
                ravb_modify(ndev, GIC, GIC_PTCE, on ? GIC_PTCE : 0);
        else if (on)
                ravb_write(ndev, GIE_PTCS, GIE);
@@ -254,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 (!info->multi_irqs)
+                       if (!info->irq_en_dis)
                                ravb_modify(ndev, GIC, GIC_PTME, GIC_PTME);
                        else
                                ravb_write(ndev, GIE_PTMS0, GIE);
@@ -266,7 +266,7 @@ static int ravb_ptp_perout(struct ptp_clock_info *ptp,
                perout->period = 0;
 
                /* Mask interrupt */
-               if (!info->multi_irqs)
+               if (!info->irq_en_dis)
                        ravb_modify(ndev, GIC, GIC_PTME, 0);
                else
                        ravb_write(ndev, GID_PTMD0, GID);