Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Thomas Gleixner: "The irq department provides: - a major update to the auto affinity management code, which is used by multi-queue devices - move of the microblaze irq chip driver into the common driver code so it can be shared between microblaze, powerpc and MIPS - a series of updates to the ARM GICV3 interrupt controller - the usual pile of fixes and small improvements all over the place" * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (25 commits) powerpc/virtex: Use generic xilinx irqchip driver irqchip/xilinx: Try to fall back if xlnx,kind-of-intr not provided irqchip/xilinx: Add support for parent intc irqchip/xilinx: Rename get_irq to xintc_get_irq irqchip/xilinx: Restructure and use jump label api irqchip/xilinx: Clean up print messages microblaze/irqchip: Move intc driver to irqchip ARM: virt: Select ARM_GIC_V3_ITS ARM: gic-v3-its: Add 32bit support to GICv3 ITS irqchip/gic-v3-its: Specialise readq and writeq accesses irqchip/gic-v3-its: Specialise flush_dcache operation irqchip/gic-v3-its: Narrow down Entry Size when used as a divider irqchip/gic-v3-its: Change unsigned types for AArch32 compatibility irqchip/gic-v3: Use nops macro for Cavium ThunderX erratum 23154 irqchip/gic-v3: Convert arm64 GIC accessors to {read,write}_sysreg_s genirq/msi: Drop artificial PCI dependency irqchip/bcm7038-l1: Implement irq_cpu_offline() callback genirq/affinity: Use default affinity mask for reserved vectors genirq/affinity: Take reserved vectors into account when spreading irqs PCI: Remove the irq_affinity mask from struct pci_dev ...
This commit is contained in:
@@ -703,6 +703,7 @@ config ARCH_VIRT
|
||||
select ARM_GIC
|
||||
select ARM_GIC_V2M if PCI
|
||||
select ARM_GIC_V3
|
||||
select ARM_GIC_V3_ITS if PCI
|
||||
select ARM_PSCI
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
|
||||
|
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <asm/barrier.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/cp15.h>
|
||||
|
||||
#define ICC_EOIR1 __ACCESS_CP15(c12, 0, c12, 1)
|
||||
@@ -230,19 +231,14 @@ static inline void gic_write_bpr1(u32 val)
|
||||
* AArch32, since the syndrome register doesn't provide any information for
|
||||
* them.
|
||||
* Consequently, the following IO helpers use 32bit accesses.
|
||||
*
|
||||
* There are only two registers that need 64bit accesses in this driver:
|
||||
* - GICD_IROUTERn, contain the affinity values associated to each interrupt.
|
||||
* The upper-word (aff3) will always be 0, so there is no need for a lock.
|
||||
* - GICR_TYPER is an ID register and doesn't need atomicity.
|
||||
*/
|
||||
static inline void gic_write_irouter(u64 val, volatile void __iomem *addr)
|
||||
static inline void __gic_writeq_nonatomic(u64 val, volatile void __iomem *addr)
|
||||
{
|
||||
writel_relaxed((u32)val, addr);
|
||||
writel_relaxed((u32)(val >> 32), addr + 4);
|
||||
}
|
||||
|
||||
static inline u64 gic_read_typer(const volatile void __iomem *addr)
|
||||
static inline u64 __gic_readq_nonatomic(const volatile void __iomem *addr)
|
||||
{
|
||||
u64 val;
|
||||
|
||||
@@ -251,5 +247,49 @@ static inline u64 gic_read_typer(const volatile void __iomem *addr)
|
||||
return val;
|
||||
}
|
||||
|
||||
#define gic_flush_dcache_to_poc(a,l) __cpuc_flush_dcache_area((a), (l))
|
||||
|
||||
/*
|
||||
* GICD_IROUTERn, contain the affinity values associated to each interrupt.
|
||||
* The upper-word (aff3) will always be 0, so there is no need for a lock.
|
||||
*/
|
||||
#define gic_write_irouter(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GICR_TYPER is an ID register and doesn't need atomicity.
|
||||
*/
|
||||
#define gic_read_typer(c) __gic_readq_nonatomic(c)
|
||||
|
||||
/*
|
||||
* GITS_BASER - hi and lo bits may be accessed independently.
|
||||
*/
|
||||
#define gits_read_baser(c) __gic_readq_nonatomic(c)
|
||||
#define gits_write_baser(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GICR_PENDBASER and GICR_PROPBASE are changed with LPIs disabled, so they
|
||||
* won't be being used during any updates and can be changed non-atomically
|
||||
*/
|
||||
#define gicr_read_propbaser(c) __gic_readq_nonatomic(c)
|
||||
#define gicr_write_propbaser(v, c) __gic_writeq_nonatomic(v, c)
|
||||
#define gicr_read_pendbaser(c) __gic_readq_nonatomic(c)
|
||||
#define gicr_write_pendbaser(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GITS_TYPER is an ID register and doesn't need atomicity.
|
||||
*/
|
||||
#define gits_read_typer(c) __gic_readq_nonatomic(c)
|
||||
|
||||
/*
|
||||
* GITS_CBASER - hi and lo bits may be accessed independently.
|
||||
*/
|
||||
#define gits_read_cbaser(c) __gic_readq_nonatomic(c)
|
||||
#define gits_write_cbaser(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GITS_CWRITER - hi and lo bits may be accessed independently.
|
||||
*/
|
||||
#define gits_write_cwriter(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASM_ARCH_GICV3_H */
|
||||
|
Referens i nytt ärende
Block a user