Skip to content

Commit f51bdc2

Browse files
KAZUMIZUdavem330
authored andcommitted
ravb: Add dma queue interrupt support
This patch supports the following interrupts. - One interrupt for multiple (timestamp, error, gPTP) - One interrupt for emac - Four interrupts for dma queue (best effort rx/tx, network control rx/tx) This patch improve efficiency of the interrupt handler by adding the interrupt handler corresponding to each interrupt source described above. Additionally, it reduces the number of times of the access to EthernetAVB IF. Also this patch prevent this driver depends on the whim of a boot loader. [[email protected]: define bit names of registers] [[email protected]: add comment for gen3 only registers] [[email protected]: fix coding style] [[email protected]: update changelog] [[email protected]: gen3: fix initialization of interrupts] [[email protected]: gen3: fix clearing interrupts] [[email protected]: gen3: add helper function for request_irq()] [[email protected]: gen3: remove IRQF_SHARED flag for request_irq()] [[email protected]: revert ravb_close() and ravb_ptp_stop()] [[email protected]: avoid calling free_irq() to non-hooked interrupts] [[email protected]: make NC/BE interrupt handler a function] [[email protected]: make timestamp interrupt handler a function] [[email protected]: timestamp interrupt is handled in multiple interrupt handler instead of dma queue interrupt handler] Signed-off-by: Kazuya Mizuguchi <[email protected]> Signed-off-by: Yoshihiro Kaneko <[email protected]> Acked-by: Sergei Shtylyov <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9d2355b commit f51bdc2

File tree

3 files changed

+439
-48
lines changed

3 files changed

+439
-48
lines changed

drivers/net/ethernet/renesas/ravb.h

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ enum ravb_reg {
157157
TIC = 0x0378,
158158
TIS = 0x037C,
159159
ISS = 0x0380,
160+
CIE = 0x0384, /* R-Car Gen3 only */
160161
GCCR = 0x0390,
161162
GMTT = 0x0394,
162163
GPTC = 0x0398,
@@ -170,6 +171,15 @@ enum ravb_reg {
170171
GCT0 = 0x03B8,
171172
GCT1 = 0x03BC,
172173
GCT2 = 0x03C0,
174+
GIE = 0x03CC, /* R-Car Gen3 only */
175+
GID = 0x03D0, /* R-Car Gen3 only */
176+
DIL = 0x0440, /* R-Car Gen3 only */
177+
RIE0 = 0x0460, /* R-Car Gen3 only */
178+
RID0 = 0x0464, /* R-Car Gen3 only */
179+
RIE2 = 0x0470, /* R-Car Gen3 only */
180+
RID2 = 0x0474, /* R-Car Gen3 only */
181+
TIE = 0x0478, /* R-Car Gen3 only */
182+
TID = 0x047c, /* R-Car Gen3 only */
173183

174184
/* E-MAC registers */
175185
ECMR = 0x0500,
@@ -556,6 +566,16 @@ enum ISS_BIT {
556566
ISS_DPS15 = 0x80000000,
557567
};
558568

569+
/* CIE (R-Car Gen3 only) */
570+
enum CIE_BIT {
571+
CIE_CRIE = 0x00000001,
572+
CIE_CTIE = 0x00000100,
573+
CIE_RQFM = 0x00010000,
574+
CIE_CL0M = 0x00020000,
575+
CIE_RFWL = 0x00040000,
576+
CIE_RFFL = 0x00080000,
577+
};
578+
559579
/* GCCR */
560580
enum GCCR_BIT {
561581
GCCR_TCR = 0x00000003,
@@ -592,6 +612,188 @@ enum GIS_BIT {
592612
GIS_PTMF = 0x00000004,
593613
};
594614

615+
/* GIE (R-Car Gen3 only) */
616+
enum GIE_BIT {
617+
GIE_PTCS = 0x00000001,
618+
GIE_PTOS = 0x00000002,
619+
GIE_PTMS0 = 0x00000004,
620+
GIE_PTMS1 = 0x00000008,
621+
GIE_PTMS2 = 0x00000010,
622+
GIE_PTMS3 = 0x00000020,
623+
GIE_PTMS4 = 0x00000040,
624+
GIE_PTMS5 = 0x00000080,
625+
GIE_PTMS6 = 0x00000100,
626+
GIE_PTMS7 = 0x00000200,
627+
GIE_ATCS0 = 0x00010000,
628+
GIE_ATCS1 = 0x00020000,
629+
GIE_ATCS2 = 0x00040000,
630+
GIE_ATCS3 = 0x00080000,
631+
GIE_ATCS4 = 0x00100000,
632+
GIE_ATCS5 = 0x00200000,
633+
GIE_ATCS6 = 0x00400000,
634+
GIE_ATCS7 = 0x00800000,
635+
GIE_ATCS8 = 0x01000000,
636+
GIE_ATCS9 = 0x02000000,
637+
GIE_ATCS10 = 0x04000000,
638+
GIE_ATCS11 = 0x08000000,
639+
GIE_ATCS12 = 0x10000000,
640+
GIE_ATCS13 = 0x20000000,
641+
GIE_ATCS14 = 0x40000000,
642+
GIE_ATCS15 = 0x80000000,
643+
};
644+
645+
/* GID (R-Car Gen3 only) */
646+
enum GID_BIT {
647+
GID_PTCD = 0x00000001,
648+
GID_PTOD = 0x00000002,
649+
GID_PTMD0 = 0x00000004,
650+
GID_PTMD1 = 0x00000008,
651+
GID_PTMD2 = 0x00000010,
652+
GID_PTMD3 = 0x00000020,
653+
GID_PTMD4 = 0x00000040,
654+
GID_PTMD5 = 0x00000080,
655+
GID_PTMD6 = 0x00000100,
656+
GID_PTMD7 = 0x00000200,
657+
GID_ATCD0 = 0x00010000,
658+
GID_ATCD1 = 0x00020000,
659+
GID_ATCD2 = 0x00040000,
660+
GID_ATCD3 = 0x00080000,
661+
GID_ATCD4 = 0x00100000,
662+
GID_ATCD5 = 0x00200000,
663+
GID_ATCD6 = 0x00400000,
664+
GID_ATCD7 = 0x00800000,
665+
GID_ATCD8 = 0x01000000,
666+
GID_ATCD9 = 0x02000000,
667+
GID_ATCD10 = 0x04000000,
668+
GID_ATCD11 = 0x08000000,
669+
GID_ATCD12 = 0x10000000,
670+
GID_ATCD13 = 0x20000000,
671+
GID_ATCD14 = 0x40000000,
672+
GID_ATCD15 = 0x80000000,
673+
};
674+
675+
/* RIE0 (R-Car Gen3 only) */
676+
enum RIE0_BIT {
677+
RIE0_FRS0 = 0x00000001,
678+
RIE0_FRS1 = 0x00000002,
679+
RIE0_FRS2 = 0x00000004,
680+
RIE0_FRS3 = 0x00000008,
681+
RIE0_FRS4 = 0x00000010,
682+
RIE0_FRS5 = 0x00000020,
683+
RIE0_FRS6 = 0x00000040,
684+
RIE0_FRS7 = 0x00000080,
685+
RIE0_FRS8 = 0x00000100,
686+
RIE0_FRS9 = 0x00000200,
687+
RIE0_FRS10 = 0x00000400,
688+
RIE0_FRS11 = 0x00000800,
689+
RIE0_FRS12 = 0x00001000,
690+
RIE0_FRS13 = 0x00002000,
691+
RIE0_FRS14 = 0x00004000,
692+
RIE0_FRS15 = 0x00008000,
693+
RIE0_FRS16 = 0x00010000,
694+
RIE0_FRS17 = 0x00020000,
695+
};
696+
697+
/* RID0 (R-Car Gen3 only) */
698+
enum RID0_BIT {
699+
RID0_FRD0 = 0x00000001,
700+
RID0_FRD1 = 0x00000002,
701+
RID0_FRD2 = 0x00000004,
702+
RID0_FRD3 = 0x00000008,
703+
RID0_FRD4 = 0x00000010,
704+
RID0_FRD5 = 0x00000020,
705+
RID0_FRD6 = 0x00000040,
706+
RID0_FRD7 = 0x00000080,
707+
RID0_FRD8 = 0x00000100,
708+
RID0_FRD9 = 0x00000200,
709+
RID0_FRD10 = 0x00000400,
710+
RID0_FRD11 = 0x00000800,
711+
RID0_FRD12 = 0x00001000,
712+
RID0_FRD13 = 0x00002000,
713+
RID0_FRD14 = 0x00004000,
714+
RID0_FRD15 = 0x00008000,
715+
RID0_FRD16 = 0x00010000,
716+
RID0_FRD17 = 0x00020000,
717+
};
718+
719+
/* RIE2 (R-Car Gen3 only) */
720+
enum RIE2_BIT {
721+
RIE2_QFS0 = 0x00000001,
722+
RIE2_QFS1 = 0x00000002,
723+
RIE2_QFS2 = 0x00000004,
724+
RIE2_QFS3 = 0x00000008,
725+
RIE2_QFS4 = 0x00000010,
726+
RIE2_QFS5 = 0x00000020,
727+
RIE2_QFS6 = 0x00000040,
728+
RIE2_QFS7 = 0x00000080,
729+
RIE2_QFS8 = 0x00000100,
730+
RIE2_QFS9 = 0x00000200,
731+
RIE2_QFS10 = 0x00000400,
732+
RIE2_QFS11 = 0x00000800,
733+
RIE2_QFS12 = 0x00001000,
734+
RIE2_QFS13 = 0x00002000,
735+
RIE2_QFS14 = 0x00004000,
736+
RIE2_QFS15 = 0x00008000,
737+
RIE2_QFS16 = 0x00010000,
738+
RIE2_QFS17 = 0x00020000,
739+
RIE2_RFFS = 0x80000000,
740+
};
741+
742+
/* RID2 (R-Car Gen3 only) */
743+
enum RID2_BIT {
744+
RID2_QFD0 = 0x00000001,
745+
RID2_QFD1 = 0x00000002,
746+
RID2_QFD2 = 0x00000004,
747+
RID2_QFD3 = 0x00000008,
748+
RID2_QFD4 = 0x00000010,
749+
RID2_QFD5 = 0x00000020,
750+
RID2_QFD6 = 0x00000040,
751+
RID2_QFD7 = 0x00000080,
752+
RID2_QFD8 = 0x00000100,
753+
RID2_QFD9 = 0x00000200,
754+
RID2_QFD10 = 0x00000400,
755+
RID2_QFD11 = 0x00000800,
756+
RID2_QFD12 = 0x00001000,
757+
RID2_QFD13 = 0x00002000,
758+
RID2_QFD14 = 0x00004000,
759+
RID2_QFD15 = 0x00008000,
760+
RID2_QFD16 = 0x00010000,
761+
RID2_QFD17 = 0x00020000,
762+
RID2_RFFD = 0x80000000,
763+
};
764+
765+
/* TIE (R-Car Gen3 only) */
766+
enum TIE_BIT {
767+
TIE_FTS0 = 0x00000001,
768+
TIE_FTS1 = 0x00000002,
769+
TIE_FTS2 = 0x00000004,
770+
TIE_FTS3 = 0x00000008,
771+
TIE_TFUS = 0x00000100,
772+
TIE_TFWS = 0x00000200,
773+
TIE_MFUS = 0x00000400,
774+
TIE_MFWS = 0x00000800,
775+
TIE_TDPS0 = 0x00010000,
776+
TIE_TDPS1 = 0x00020000,
777+
TIE_TDPS2 = 0x00040000,
778+
TIE_TDPS3 = 0x00080000,
779+
};
780+
781+
/* TID (R-Car Gen3 only) */
782+
enum TID_BIT {
783+
TID_FTD0 = 0x00000001,
784+
TID_FTD1 = 0x00000002,
785+
TID_FTD2 = 0x00000004,
786+
TID_FTD3 = 0x00000008,
787+
TID_TFUD = 0x00000100,
788+
TID_TFWD = 0x00000200,
789+
TID_MFUD = 0x00000400,
790+
TID_MFWD = 0x00000800,
791+
TID_TDPD0 = 0x00010000,
792+
TID_TDPD1 = 0x00020000,
793+
TID_TDPD2 = 0x00040000,
794+
TID_TDPD3 = 0x00080000,
795+
};
796+
595797
/* ECMR */
596798
enum ECMR_BIT {
597799
ECMR_PRM = 0x00000001,
@@ -817,6 +1019,8 @@ struct ravb_private {
8171019
int duplex;
8181020
int emac_irq;
8191021
enum ravb_chip_id chip_id;
1022+
int rx_irqs[NUM_RX_QUEUE];
1023+
int tx_irqs[NUM_TX_QUEUE];
8201024

8211025
unsigned no_avb_link:1;
8221026
unsigned avb_link_active_low:1;

0 commit comments

Comments
 (0)