Author: andrew
Date: Tue Dec  6 13:55:19 2016
New Revision: 309618
URL: https://svnweb.freebsd.org/changeset/base/309618

Log:
  Move the common bit manipulation macros from the GICv3 header to the
  common GIC header file.
  
  Obtained from:        ABT Systems Ltd
  Sponsored by: The FreeBSD Foundation

Modified:
  head/sys/arm/arm/gic.c
  head/sys/arm/arm/gic_common.h
  head/sys/arm64/arm64/gic_v3.c
  head/sys/arm64/arm64/gic_v3_reg.h
  head/sys/arm64/arm64/gicv3_its.c

Modified: head/sys/arm/arm/gic.c
==============================================================================
--- head/sys/arm/arm/gic.c      Tue Dec  6 13:46:12 2016        (r309617)
+++ head/sys/arm/arm/gic.c      Tue Dec  6 13:55:19 2016        (r309618)
@@ -171,14 +171,14 @@ static inline void
 gic_irq_unmask(struct arm_gic_softc *sc, u_int irq)
 {
 
-       gic_d_write_4(sc, GICD_ISENABLER(irq), (1UL << (irq & 0x1F)));
+       gic_d_write_4(sc, GICD_ISENABLER(irq), GICD_I_MASK(irq));
 }
 
 static inline void
 gic_irq_mask(struct arm_gic_softc *sc, u_int irq)
 {
 
-       gic_d_write_4(sc, GICD_ICENABLER(irq), (1UL << (irq & 0x1F)));
+       gic_d_write_4(sc, GICD_ICENABLER(irq), GICD_I_MASK(irq));
 }
 #endif
 
@@ -274,9 +274,9 @@ arm_gic_init_secondary(device_t dev)
        /*
         * Activate the timer interrupts: virtual, secure, and non-secure.
         */
-       gic_d_write_4(sc, GICD_ISENABLER(27), (1UL << (27 & 0x1F)));
-       gic_d_write_4(sc, GICD_ISENABLER(29), (1UL << (29 & 0x1F)));
-       gic_d_write_4(sc, GICD_ISENABLER(30), (1UL << (30 & 0x1F)));
+       gic_d_write_4(sc, GICD_ISENABLER(27), GICD_I_MASK(27));
+       gic_d_write_4(sc, GICD_ISENABLER(29), GICD_I_MASK(29));
+       gic_d_write_4(sc, GICD_ISENABLER(30), GICD_I_MASK(30));
 }
 #endif /* INTRNG */
 #endif /* SMP */
@@ -447,7 +447,7 @@ arm_gic_attach(device_t dev)
 
        /* Get the number of interrupts */
        sc->typer = gic_d_read_4(sc, GICD_TYPER);
-       nirqs = 32 * ((sc->typer & 0x1f) + 1);
+       nirqs = GICD_TYPER_I_NUM(sc->typer);
 
 #ifdef INTRNG
        if (arm_gic_register_isrcs(sc, nirqs)) {

Modified: head/sys/arm/arm/gic_common.h
==============================================================================
--- head/sys/arm/arm/gic_common.h       Tue Dec  6 13:46:12 2016        
(r309617)
+++ head/sys/arm/arm/gic_common.h       Tue Dec  6 13:55:19 2016        
(r309618)
@@ -35,6 +35,7 @@
 /* Common register values */
 #define        GICD_CTLR               0x0000                          /* v1 
ICDDCR */
 #define        GICD_TYPER              0x0004                          /* v1 
ICDICTR */
+#define         GICD_TYPER_I_NUM(n)    ((((n) & 0x1F) + 1) * 32)
 #define        GICD_IIDR               0x0008                          /* v1 
ICDIIDR */
 #define         GICD_IIDR_PROD_SHIFT   24
 #define         GICD_IIDR_PROD_MASK    0xff000000
@@ -54,13 +55,17 @@
     (((x) & GICD_IIDR_IMPL_MASK) >> GICD_IIDR_IMPL_SHIFT)
 #define        GICD_IGROUPR(n)         (0x0080 + (((n) >> 5) * 4))     /* v1 
ICDISER */
 #define        GICD_ISENABLER(n)       (0x0100 + (((n) >> 5) * 4))     /* v1 
ICDISER */
+#define         GICD_I_MASK(n)         (1ul << ((n) & 0x1f))
+#define         GICD_I_PER_ISENABLERn  32
 #define        GICD_ICENABLER(n)       (0x0180 + (((n) >> 5) * 4))     /* v1 
ICDICER */
 #define        GICD_ISPENDR(n)         (0x0200 + (((n) >> 5) * 4))     /* v1 
ICDISPR */
 #define        GICD_ICPENDR(n)         (0x0280 + (((n) >> 5) * 4))     /* v1 
ICDICPR */
 #define        GICD_ICACTIVER(n)       (0x0380 + (((n) >> 5) * 4))     /* v1 
ICDABR */
 #define        GICD_IPRIORITYR(n)      (0x0400 + (((n) >> 2) * 4))     /* v1 
ICDIPR */
+#define         GICD_I_PER_IPRIORITYn  4
 #define        GICD_ITARGETSR(n)       (0x0800 + (((n) >> 2) * 4))     /* v1 
ICDIPTR */
 #define        GICD_ICFGR(n)           (0x0C00 + (((n) >> 4) * 4))     /* v1 
ICDICFR */
+#define         GICD_I_PER_ICFGRn      16
 /* First bit is a polarity bit (0 - low, 1 - high) */
 #define         GICD_ICFGR_POL_LOW     (0 << 0)
 #define         GICD_ICFGR_POL_HIGH    (1 << 0)

Modified: head/sys/arm64/arm64/gic_v3.c
==============================================================================
--- head/sys/arm64/arm64/gic_v3.c       Tue Dec  6 13:46:12 2016        
(r309617)
+++ head/sys/arm64/arm64/gic_v3.c       Tue Dec  6 13:55:19 2016        
(r309618)
@@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$");
 
 #include "pic_if.h"
 
+#include <arm/arm/gic_common.h>
 #include "gic_v3_reg.h"
 #include "gic_v3_var.h"
 

Modified: head/sys/arm64/arm64/gic_v3_reg.h
==============================================================================
--- head/sys/arm64/arm64/gic_v3_reg.h   Tue Dec  6 13:46:12 2016        
(r309617)
+++ head/sys/arm64/arm64/gic_v3_reg.h   Tue Dec  6 13:55:19 2016        
(r309618)
@@ -59,36 +59,13 @@
 /*
  * Registers (v2/v3)
  */
-#define        GICD_CTLR               (0x0000)
-#define        GICD_CTLR_G1            (1 << 0)
-#define        GICD_CTLR_G1A           (1 << 1)
-#define        GICD_CTLR_ARE_NS        (1 << 4)
-#define        GICD_CTLR_RWP           (1 << 31)
-
-#define        GICD_TYPER              (0x0004)
-#define                GICD_TYPER_IDBITS(n)    ((((n) >> 19) & 0x1F) + 1)
-#define                GICD_TYPER_I_NUM(n)     ((((n) & 0x1F) + 1) * 32)
-
-#define        GICD_ISENABLER(n)       (0x0100 + (((n) >> 5) * 4))
-#define                GICD_I_PER_ISENABLERn   (32)
-
-#define        GICD_ICENABLER(n)       (0x0180 + (((n) >> 5) * 4))
-#define        GICD_IPRIORITYR(n)      (0x0400 + (((n) >> 2) * 4))
-#define                GICD_I_PER_IPRIORITYn   (4)
-
-#define        GICD_I_MASK(n)          (1 << ((n) % 32))
-
-#define        GICD_ICFGR(n)           (0x0C00 + (((n) >> 4) * 4))
-/* First bit is a polarity bit (0 - low, 1 - high) */
-#define                GICD_ICFGR_POL_LOW      (0 << 0)
-#define                GICD_ICFGR_POL_HIGH     (1 << 0)
-#define                GICD_ICFGR_POL_MASK     (0x1)
-/* Second bit is a trigger bit (0 - level, 1 - edge) */
-#define                GICD_ICFGR_TRIG_LVL     (0 << 1)
-#define                GICD_ICFGR_TRIG_EDGE    (1 << 1)
-#define                GICD_ICFGR_TRIG_MASK    (0x2)
-
-#define                GICD_I_PER_ICFGRn       (16)
+/* GICD_CTLR */
+#define         GICD_CTLR_G1           (1 << 0)
+#define         GICD_CTLR_G1A          (1 << 1)
+#define         GICD_CTLR_ARE_NS       (1 << 4)
+#define         GICD_CTLR_RWP          (1 << 31)
+/* GICD_TYPER */
+#define         GICD_TYPER_IDBITS(n)   ((((n) >> 19) & 0x1F) + 1)
 
 /*
  * Registers (v3)

Modified: head/sys/arm64/arm64/gicv3_its.c
==============================================================================
--- head/sys/arm64/arm64/gicv3_its.c    Tue Dec  6 13:46:12 2016        
(r309617)
+++ head/sys/arm64/arm64/gicv3_its.c    Tue Dec  6 13:55:19 2016        
(r309618)
@@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$");
 #include <machine/bus.h>
 #include <machine/intr.h>
 
+#include <arm/arm/gic_common.h>
 #include <arm64/arm64/gic_v3_reg.h>
 #include <arm64/arm64/gic_v3_var.h>
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to