986bbba9a6
On Armada8k boards various peripherals (e.g. USB) have interrupt lines connected to on of the ICU interrupt controllers. After an interrupt is detected it triggers MSI to a given address, with a programmed value. This in turn triggers an SPI interrupt. Normally MSI vector should be allocated by ICUs parent and set during interrupt allocation. Instead of doing that we relied on the ICU being pre-configured in firmware. This worked with EDK2 and older versions of U-Boot, but in the newer ones that is no longer the case. Extend ICU msi-parents - GICP and SEI to support MSI interface and use it during interrupt allocation. This allows us to boot on Armada 7k/8k SoCs independent from the firmware configuration and successfully use modern U-Boot + device tree. For SATA interrupts we need to apply a WA previously done in firmware. We have two SATA ports connected to one controller. Each ports gets its own interrupt, but only one of them is described in dts, also ahci_generic driver expects only one irq too. Fix it by mapping both interrupts to the same MSI when one of them is allocated, which allows us to use both SATA ports. Reviewed by: mmel, mw Obtained from: Semihalf Sponsored by: Marvell Differential Revision: https://reviews.freebsd.org/D28803 |
||
---|---|---|
.. | ||
armada | ||
armada38x | ||
armadaxp | ||
a37x0_gpio.c | ||
a37x0_iic.c | ||
a37x0_iicreg.h | ||
a37x0_spi.c | ||
files.arm7 | ||
gpio.c | ||
ic.c | ||
mpic.c | ||
mv_ap806_clock.c | ||
mv_ap806_gicp.c | ||
mv_ap806_sei.c | ||
mv_armv7_machdep.c | ||
mv_common.c | ||
mv_cp110_clock.c | ||
mv_cp110_clock.h | ||
mv_cp110_icu_bus.c | ||
mv_cp110_icu.c | ||
mv_pci_ctrl.c | ||
mv_pci.c | ||
mv_spi.c | ||
mv_thermal.c | ||
mvebu_gpio.c | ||
mvebu_pinctrl.c | ||
mvreg.h | ||
mvvar.h | ||
mvwin.h | ||
rtc.c | ||
std-pj4b.mv | ||
timer.c |