Module Name: src Committed By: skrll Date: Thu Dec 26 11:09:11 UTC 2019
Modified Files: src/sys/arch/arm/broadcom: bcm2835_intr.c bcm2835reg.h Log Message: Use PIC_IRQBASE_ALLOC for all pic_add calls and track/use each cpu irqbase To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/broadcom/bcm2835_intr.c cvs rdiff -u -r1.27 -r1.28 src/sys/arch/arm/broadcom/bcm2835reg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/broadcom/bcm2835_intr.c diff -u src/sys/arch/arm/broadcom/bcm2835_intr.c:1.28 src/sys/arch/arm/broadcom/bcm2835_intr.c:1.29 --- src/sys/arch/arm/broadcom/bcm2835_intr.c:1.28 Wed Dec 25 10:49:29 2019 +++ src/sys/arch/arm/broadcom/bcm2835_intr.c Thu Dec 26 11:09:11 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_intr.c,v 1.28 2019/12/25 10:49:29 skrll Exp $ */ +/* $NetBSD: bcm2835_intr.c,v 1.29 2019/12/26 11:09:11 skrll Exp $ */ /*- * Copyright (c) 2012, 2015, 2019 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.28 2019/12/25 10:49:29 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_intr.c,v 1.29 2019/12/26 11:09:11 skrll Exp $"); #define _INTR_PRIVATE @@ -99,7 +99,10 @@ static int bcm2835_icu_match(device_t, static void bcm2835_icu_attach(device_t, device_t, void *); static int bcm2835_int_base; -static int bcm2836mp_int_base; +static int bcm2836mp_int_base[BCM2836_NCPUS]; + +#define BCM2835_INT_BASE bcm2835_int_base +#define BCM2836_INT_BASECPUN(n) bcm2836mp_int_base[(n)] static void bcm2835_set_priority(struct pic_softc *pic, int ipl) @@ -710,9 +713,9 @@ bcm2836mp_pic_find_pending_irqs(struct p BCM2836_LOCAL_INTC_IRQPENDINGN(cpuid)); lpending &= ~BCM2836_INTBIT_GPUPENDING; - if (lpending & BCM2836MP_ALL_IRQS) { - ipl |= pic_mark_pending_sources(pic, 0 /* BCM2836_INT_LOCALBASE */, - lpending & BCM2836MP_ALL_IRQS); + const uint32_t allirqs = lpending & BCM2836MP_ALL_IRQS; + if (allirqs) { + ipl |= pic_mark_pending_sources(pic, 0, allirqs); } return ipl; @@ -830,11 +833,7 @@ bcm2836mp_intr_init(void *priv, struct c snprintf(suffix, sizeof(suffix), "#%lu", cpuid); strlcat(pic->pic_name, suffix, sizeof(pic->pic_name)); #endif - if (cpuid == 0) { - bcm2836mp_int_base = pic_add(pic, PIC_IRQBASE_ALLOC); - } else { - pic_add(pic, BCM2836_INT_BASECPUN(cpuid)); - } + bcm2836mp_int_base[cpuid] = pic_add(pic, PIC_IRQBASE_ALLOC); #if defined(MULTIPROCESSOR) intr_establish(BCM2836_INT_MAILBOX0_CPUN(cpuid), IPL_HIGH, Index: src/sys/arch/arm/broadcom/bcm2835reg.h diff -u src/sys/arch/arm/broadcom/bcm2835reg.h:1.27 src/sys/arch/arm/broadcom/bcm2835reg.h:1.28 --- src/sys/arch/arm/broadcom/bcm2835reg.h:1.27 Thu Dec 26 08:27:43 2019 +++ src/sys/arch/arm/broadcom/bcm2835reg.h Thu Dec 26 11:09:11 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835reg.h,v 1.27 2019/12/26 08:27:43 skrll Exp $ */ +/* $NetBSD: bcm2835reg.h,v 1.28 2019/12/26 11:09:11 skrll Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -139,14 +139,9 @@ #define BCM2835_INTC_ENABLEBASE (BCM2835_INTC_BASE + 0x10) #define BCM2835_INTC_DISABLEBASE (BCM2835_INTC_BASE + 0x1c) -#define BCM2835_INT_BASE bcm2835_int_base - #define BCM2836_NCPUS 4 #define BCM2836_NIRQPERCPU 32 -#define BCM2836_INT_LOCALBASE bcm2836mp_int_base -#define BCM2836_INT_BASECPUN(n) (BCM2836_INT_LOCALBASE + ((n) * BCM2836_NIRQPERCPU)) - #define BCM2836_INT_CNTPSIRQ 0 #define BCM2836_INT_CNTPNSIRQ 1 #define BCM2836_INT_CNTHPIRQ 2