version 1.32.2.3, 2018/07/28 04:37:27 |
version 1.32.2.4, 2018/09/30 01:45:37 |
Line 43 __KERNEL_RCSID(0, "$NetBSD$"); |
|
Line 43 __KERNEL_RCSID(0, "$NetBSD$"); |
|
#include <sys/evcnt.h> |
#include <sys/evcnt.h> |
#include <sys/intr.h> |
#include <sys/intr.h> |
#include <sys/proc.h> |
#include <sys/proc.h> |
|
#include <sys/atomic.h> |
|
|
#include <arm/armreg.h> |
#include <arm/armreg.h> |
#include <arm/atomic.h> |
#include <arm/atomic.h> |
Line 514 armgic_cpu_init(struct pic_softc *pic, s |
|
Line 515 armgic_cpu_init(struct pic_softc *pic, s |
|
{ |
{ |
struct armgic_softc * const sc = PICTOSOFTC(pic); |
struct armgic_softc * const sc = PICTOSOFTC(pic); |
sc->sc_target[cpu_index(ci)] = gicd_find_targets(sc); |
sc->sc_target[cpu_index(ci)] = gicd_find_targets(sc); |
sc->sc_mptargets |= sc->sc_target[cpu_index(ci)]; |
atomic_or_32(&sc->sc_mptargets, sc->sc_target[cpu_index(ci)]); |
KASSERTMSG(ci->ci_cpl == IPL_HIGH, "ipl %d not IPL_HIGH", ci->ci_cpl); |
KASSERTMSG(ci->ci_cpl == IPL_HIGH, "ipl %d not IPL_HIGH", ci->ci_cpl); |
armgic_cpu_init_priorities(sc); |
armgic_cpu_init_priorities(sc); |
if (!CPU_IS_PRIMARY(ci)) { |
if (!CPU_IS_PRIMARY(ci)) { |
Line 546 armgic_ipi_send(struct pic_softc *pic, c |
|
Line 547 armgic_ipi_send(struct pic_softc *pic, c |
|
|
|
uint32_t sgir = __SHIFTIN(ARMGIC_SGI_IPIBASE + ipi, GICD_SGIR_SGIINTID); |
uint32_t sgir = __SHIFTIN(ARMGIC_SGI_IPIBASE + ipi, GICD_SGIR_SGIINTID); |
if (kcp != NULL) { |
if (kcp != NULL) { |
uint32_t targets; |
uint32_t targets_val = 0; |
kcpuset_export_u32(kcp, &targets, sizeof(targets)); |
for (int n = 0; n < MAXCPUS; n++) { |
sgir |= __SHIFTIN(targets, GICD_SGIR_TargetList); |
if (kcpuset_isset(kcp, n)) |
|
targets_val |= sc->sc_target[n]; |
|
} |
|
sgir |= __SHIFTIN(targets_val, GICD_SGIR_TargetList); |
sgir |= GICD_SGIR_TargetListFilter_List; |
sgir |= GICD_SGIR_TargetListFilter_List; |
} else { |
} else { |
if (ncpu == 1) |
if (ncpu == 1) |