History log of /netbsd-current/sys/arch/arm/cortex/gic.c
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.57 05-Oct-2023 riastradh

arm/gic: Check l_blcnt, not l_biglocks.

l_biglocks is a now-defunct temporary storage used only when
sleeping; l_blcnt is the number of kernel locks held by the lwp when
not sleeping.

Should fix arm builds.


Revision tags: netbsd-10-base bouyer-sunxi-drm-base
# 1.56 26-Jun-2022 jmcneill

build fix: remove includes of opt_gic.h


# 1.55 25-Jun-2022 jmcneill

Remove GIC_SPLFUNCS.


# 1.54 25-Jun-2022 jmcneill

pic: Update ci_cpl in pic_set_priority callback.

Not all ICs need interrupts disabled to update the priority. DAIF accesses
are not cheap, so push the update of ci_cpl from pic_set_priority to the
IC's pic_set_priority callback, and let the IC driver determine whether
or not it needs interrupts disabled.


# 1.53 03-Mar-2022 riastradh

arm: Use device_set_private for various drivers.


# 1.52 02-Jan-2022 riastradh

arm: Remove #ifdef DIAGNOSTIC now wrong after KASSERT change.

Objects in question aren't volatile here so access is flushable.


# 1.51 21-Oct-2021 skrll

Fix some conditionals to match gicv3 and add some comments to describe
what's going on.

Fixes PR port-evbarm/56420


# 1.50 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.56 26-Jun-2022 jmcneill

build fix: remove includes of opt_gic.h


# 1.55 25-Jun-2022 jmcneill

Remove GIC_SPLFUNCS.


# 1.54 25-Jun-2022 jmcneill

pic: Update ci_cpl in pic_set_priority callback.

Not all ICs need interrupts disabled to update the priority. DAIF accesses
are not cheap, so push the update of ci_cpl from pic_set_priority to the
IC's pic_set_priority callback, and let the IC driver determine whether
or not it needs interrupts disabled.


# 1.53 03-Mar-2022 riastradh

arm: Use device_set_private for various drivers.


# 1.52 02-Jan-2022 riastradh

arm: Remove #ifdef DIAGNOSTIC now wrong after KASSERT change.

Objects in question aren't volatile here so access is flushable.


# 1.51 21-Oct-2021 skrll

Fix some conditionals to match gicv3 and add some comments to describe
what's going on.

Fixes PR port-evbarm/56420


# 1.50 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.53 03-Mar-2022 riastradh

arm: Use device_set_private for various drivers.


# 1.52 02-Jan-2022 riastradh

arm: Remove #ifdef DIAGNOSTIC now wrong after KASSERT change.

Objects in question aren't volatile here so access is flushable.


# 1.51 21-Oct-2021 skrll

Fix some conditionals to match gicv3 and add some comments to describe
what's going on.

Fixes PR port-evbarm/56420


# 1.50 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.52 02-Jan-2022 riastradh

arm: Remove #ifdef DIAGNOSTIC now wrong after KASSERT change.

Objects in question aren't volatile here so access is flushable.


# 1.51 21-Oct-2021 skrll

Fix some conditionals to match gicv3 and add some comments to describe
what's going on.

Fixes PR port-evbarm/56420


# 1.50 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.51 21-Oct-2021 skrll

Fix some conditionals to match gicv3 and add some comments to describe
what's going on.

Fixes PR port-evbarm/56420


# 1.50 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.50 26-Sep-2021 jmcneill

If an SGI or PPI is established after interrupts are enabled, make sure
we unblock the source on _all_ CPUs and not just the CPU that is
establishing the interrupt.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.49 10-Aug-2021 jmcneill

Make gic_splfuncs optional and disable it by default until it has had
more testing.


# 1.48 10-Aug-2021 jmcneill

Use custom spl funcs for GIC and avoid unnecessary pmr register accesses
in splx.


Revision tags: thorpej-i2c-spi-conf2-base thorpej-futex2-base thorpej-cfargs2-base cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base thorpej-i2c-spi-conf-base thorpej-cfargs-base thorpej-futex-base
# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


# 1.46 23-Feb-2021 jmcneill

branches: 1.46.2;
If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.4; 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.47 28-Mar-2021 skrll

Only target the boot cpu for real with SPI interrupts. I tried to do
this back in 2014, but somehow I missed a spot.

This is a quick-and-dirty fix for the USB stack which expects transfer
completions to be in-order. If interrupts happen across the CPUs then
this isn't guaranteed (yet).

kern/55243 panic at usb_transfer_complete() on raspberry pi 4


Revision tags: thorpej-cfargs-base
# 1.46 23-Feb-2021 jmcneill

If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


Revision tags: thorpej-futex-base
# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.46 23-Feb-2021 jmcneill

If we are committing a deferred splhigh() to hardware, no need to continue.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


Revision tags: thorpej-futex-base
# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.45 21-Feb-2021 jmcneill

Apply PMR optimizations from gicv3


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


Revision tags: thorpej-futex-base
# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.44 09-Feb-2021 jakllsch

Avoid an extra daif read when dispatching interrupts by using
ENABLE_INTERRUPT() / DISABLE_INTERRUPT() instead of cpsie() / cpsid() macros.


Revision tags: thorpej-futex-base
# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


# 1.42 26-Sep-2020 skrll

branches: 1.42.2;
G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.43 03-Dec-2020 skrll

Provide and use a sev() macro for the sev instruction.

While here use the correct barrier to ensure completion of memory accesses
before a couple of the sev() calls.


Revision tags: thorpej-futex-base
# 1.42 26-Sep-2020 skrll

G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: netbsd-9-1-RELEASE phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.42 26-Sep-2020 skrll

G/C arm/atomic.h


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.41 27-Jul-2020 jmcneill

Remove CPU ID test in armgic_match. Perfectly normal to have GIC in
non-Cortex cores.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.40 12-Jul-2020 skrll

Avoid undefined behaviour. Detected by KUBSAN.


Revision tags: bouyer-xenpvh-base2 phil-wifi-20200421 bouyer-xenpvh-base1
# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

branches: 1.38.10;
Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.39 13-Apr-2020 jmcneill

Fix "left shift of 255 by 24 places cannot be represented in type 'int'"
warning from UBSan.


Revision tags: phil-wifi-20200411 bouyer-xenpvh-base is-mlppp-base phil-wifi-20200406 ad-namecache-base3 netbsd-9-0-RELEASE netbsd-9-0-RC2 ad-namecache-base2 ad-namecache-base1 ad-namecache-base netbsd-9-0-RC1 phil-wifi-20191119 netbsd-9-base phil-wifi-20190609 isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

branches: 1.34.2;
Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


Revision tags: isaki-audio2-base pgoyette-compat-20190127 pgoyette-compat-20190118 pgoyette-compat-1226 pgoyette-compat-1126
# 1.38 16-Nov-2018 jmcneill

Use intr_establish_xname


Revision tags: pgoyette-compat-1020 pgoyette-compat-0930
# 1.37 10-Sep-2018 jmcneill

armgic_ipi_send: use GIC interface number, not CPU index, when setting
the target(s) for an IPI.


# 1.36 10-Sep-2018 jmcneill

Update sc_mptargets atomically, as PEs will be started up in parallel w/o locking here


Revision tags: pgoyette-compat-0906 pgoyette-compat-0728
# 1.35 15-Jul-2018 jmcneill

Support pic_set_affinity and pic_get_affinity


Revision tags: phil-wifi-base pgoyette-compat-0625 pgoyette-compat-0521 pgoyette-compat-0502
# 1.34 28-Apr-2018 jakllsch

Cover all pic_maxsources lines for armgic_cpu_init_priorities() and
armgic_cpu_update_priorities().

Previously only the first 32 lines were covered, which is significantly
less than the 1000-some interrupt lines possible.

Only relevant to MULTIPROCESSOR configurations.


Revision tags: pgoyette-compat-0422 pgoyette-compat-0415 pgoyette-compat-0407
# 1.33 01-Apr-2018 ryo

Add initial support for ARMv8 (AARCH64) (by nisimura@ and ryo@)

- sys/arch/evbarm64 is gone and integrated into sys/arch/evbarm. (by skrll@)
- add support fdt. evbarm/conf/GENERIC64 fdt (bcm2837,sunxi,tegra) based generic 64bit kernel config. (by skrll@, jmcneill@)


Revision tags: pgoyette-compat-0330 pgoyette-compat-0322 pgoyette-compat-0315 pgoyette-compat-base
# 1.32 07-Feb-2018 jmcneill

branches: 1.32.2;
PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.32 07-Feb-2018 jmcneill

PR# port-evbarm/49468: Cortex GIC assertion triggered on Allwinner A80 SoC

The priority level is changed by writing to GICC_PMR with interrupts
disabled. However, interrupts are enabled/disabled downstream of the GICC
at the CPU. When raising priority level, there is a window between the time
that interrupts are disabled and the GICC_PMR register is written. If an
interrupt occurs at a previously allowed priority before GICC_PMR is
changed, the CPU will receive the signal when interrupts are re-enabled.
At this time, GICC_PMR is now the new priority level, so reads of
GICC_IAR will report a spurious IRQ.

Move the "old_ipl != IPL_HIGH" test until after we have confirmed that
there is at least one pending IRQ.


Revision tags: tls-maxphys-base-20171202 nick-nhusb-base-20170825 perseant-stdc-iso10646-base
# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.31 14-Jul-2017 skrll

KNF


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.30 29-Jun-2017 jmcneill

ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.

Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.


# 1.29 28-Jun-2017 skrll

Revert the KERNHIST for now it causes problems


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.28 22-Jun-2017 skrll

If we see GICC_IAR_IRQ_SSPURIOUS we should also stop looking for irqs


# 1.27 22-Jun-2017 skrll

Wrap long line


# 1.26 22-Jun-2017 skrll

Print the GICC_IIDR when AB_DEBUG


# 1.25 22-Jun-2017 skrll

Add 'armgichist' KERNHIST for (future) debugging.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.24 18-Jun-2017 jmcneill

Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.

This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.23 05-Jun-2017 skrll

Clean out some #if 0'ed or //'ed code


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.22 04-Jun-2017 skrll

Initialise all the SGI/PPI priorities for all CPUs to mask the interrupts


Revision tags: netbsd-8-base
# 1.21 30-May-2017 jmcneill

branches: 1.21.2;
Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.


# 1.21 30-May-2017 jmcneill

Use an FDT-based ARM_INTR_IMPL for Tegra.


Revision tags: prg-localcount2-base3 prg-localcount2-base2 prg-localcount2-base1 prg-localcount2-base pgoyette-localcount-20170426 bouyer-socketcan-base1 jdolecek-ncq-base pgoyette-localcount-20170320 nick-nhusb-base-20170204 bouyer-socketcan-base pgoyette-localcount-20170107 nick-nhusb-base-20161204 pgoyette-localcount-20161104 nick-nhusb-base-20161004 localcount-20160914 pgoyette-localcount-20160806 pgoyette-localcount-20160726 pgoyette-localcount-base nick-nhusb-base-20160907 nick-nhusb-base-20160529 nick-nhusb-base-20160422 nick-nhusb-base-20160319 nick-nhusb-base-20151226 nick-nhusb-base-20150921
# 1.20 29-Jul-2015 matt

Adjust some of IPLs of various IPIs.


Revision tags: nick-nhusb-base-20150606
# 1.19 15-Apr-2015 matt

Add separate IPI routines for IPI_AST and IPI_KPREEMPT.


# 1.18 11-Apr-2015 matt

Add a pic_cpus to the softc which specifies which cpus the pic can send
IPIs to. For GIC, initialize pic_cpus to kcpuset_running since it can handle
all the cpus.


# 1.17 09-Apr-2015 matt

All SGIs are MPSAFE so establish them as such.


Revision tags: nick-nhusb-base-20150406
# 1.16 20-Mar-2015 skrll

Trailing whitespace


# 1.15 12-Mar-2015 skrll

G/C armgic_last_priority


# 1.14 03-Mar-2015 jmcneill

in armgic_establish_irq, make sure to write the new value to GICD_ICFGRn when setting irq type (IST_LEVEL/IST_EDGE)


# 1.13 02-Mar-2015 jmcneill

sc_gic_lines is the total number of valid lines but pic_sources[] is sparse; when initializing mpsafe targets make sure to go all the way to the end (sc_pic.pic_maxsources) instead


Revision tags: nick-nhusb-base
# 1.12 29-Oct-2014 skrll

branches: 1.12.2;
Only target boot cpu for SPIs atm. Fix a couple of bugs in the now
disabled code.


# 1.11 29-Oct-2014 skrll

Sprinkle #include "opt_multiprocessor.h"


Revision tags: netbsd-7-base tls-earlyentropy-base tls-maxphys-base
# 1.10 19-May-2014 rmind

branches: 1.10.2;
Implement MI IPI interface with cross-call support.


Revision tags: yamt-pagecache-base9 rmind-smpnet-nbase rmind-smpnet-base
# 1.9 27-Apr-2014 matt

When dealing with the PMR register, only use non-secure priority values.


# 1.8 13-Apr-2014 matt

Move aprint to print sooner.


Revision tags: riastradh-xf86-video-intel-2-7-1-pre-2-21-15
# 1.7 28-Mar-2014 matt

branches: 1.7.2;
Various MP changes.


Revision tags: riastradh-drm2-base3
# 1.6 04-Mar-2014 matt

Don't byte swap the data, assume the bus_space will do it.


# 1.5 17-Dec-2013 joerg

branches: 1.5.2;
armgic_priority_to_ipl is only used in #if 0'd code, so apply that as
well.


Revision tags: riastradh-drm2-base2 riastradh-drm2-base1 riastradh-drm2-base
# 1.4 20-Jun-2013 matt

branches: 1.4.2;
Pass the offset from CBAR/PERIPHBASE in mpcore_attach_args.
Modify the list of devices to include the offset(s) from PERIPHBASE.


Revision tags: agc-symver-base yamt-pagecache-base8 yamt-pagecache-base7 yamt-pagecache-base6
# 1.3 16-Sep-2012 rmind

branches: 1.3.2; 1.3.4;
Rename kcpuset_copybits() to kcpuset_export_u32() and thus be more specific
about the interface.


# 1.2 14-Sep-2012 matt

Verify the source isn't a dummy source.


# 1.1 01-Sep-2012 matt

branches: 1.1.2;
Add Cortex-A9 support including the ARM Generic Interrupt Controller
and the A9 Global Timer / Watchdog.