mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-13 03:16:49 +07:00
9a343b9eb8
The crazy gic_arch_extn thing that Tegra uses contains multiple references to the irq field in struct irq_data, and uses this to directly poke hardware register. But irq is the *virtual* irq number, something that has nothing to do with the actual HW irq (stored in the hwirq field). And once we put the stacked domain code in action, the whole thing explodes, as these two values are *very* different: root@bacon-fat:~# cat /proc/interrupts CPU0 CPU1 16: 25801 2075 GIC 29 twd 17: 0 0 GIC 73 timer0 112: 0 0 GPIO 58 c8000600.sdhci cd 123: 0 0 GPIO 69 c8000200.sdhci cd 279: 1126 0 GIC 122 serial 281: 0 0 GIC 70 7000c000.i2c 282: 0 0 GIC 116 7000c400.i2c 283: 0 0 GIC 124 7000c500.i2c 284: 300 0 GIC 85 7000d000.i2c [...] Just replacing all instances of irq with hwirq fixes the issue. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Acked-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
||
---|---|---|
.. | ||
board-paz00.c | ||
board.h | ||
common.h | ||
cpuidle-tegra20.c | ||
cpuidle-tegra30.c | ||
cpuidle-tegra114.c | ||
cpuidle.c | ||
cpuidle.h | ||
flowctrl.c | ||
flowctrl.h | ||
headsmp.S | ||
hotplug.c | ||
io.c | ||
iomap.h | ||
irammap.h | ||
irq.c | ||
irq.h | ||
Kconfig | ||
Makefile | ||
platsmp.c | ||
pm-tegra20.c | ||
pm-tegra30.c | ||
pm.c | ||
pm.h | ||
reset-handler.S | ||
reset.c | ||
reset.h | ||
sleep-tegra20.S | ||
sleep-tegra30.S | ||
sleep.h | ||
sleep.S | ||
tegra.c |