You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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 interrupt subsystem delivers this time:
- Refactoring of the GIC-V3 driver to prepare for the GIC-V4 support
- Initial GIC-V4 support
- Consolidation of the FSL MSI support
- Utilize the effective affinity interface in various ARM irqchip
drivers
- Yet another interrupt chip driver (UniPhier AIDET)
- Bulk conversion of the irq chip driver to use %pOF
- The usual small fixes and improvements all over the place"
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (77 commits)
irqchip/ls-scfg-msi: Add MSI affinity support
irqchip/ls-scfg-msi: Add LS1043a v1.1 MSI support
irqchip/ls-scfg-msi: Add LS1046a MSI support
arm64: dts: ls1046a: Add MSI dts node
arm64: dts: ls1043a: Share all MSIs
arm: dts: ls1021a: Share all MSIs
arm64: dts: ls1043a: Fix typo of MSI compatible string
arm: dts: ls1021a: Fix typo of MSI compatible string
irqchip/ls-scfg-msi: Fix typo of MSI compatible strings
irqchip/irq-bcm7120-l2: Use correct I/O accessors for irq_fwd_mask
irqchip/mmp: Make mmp_intc_conf const
irqchip/gic: Make irq_chip const
irqchip/gic-v3: Advertise GICv4 support to KVM
irqchip/gic-v4: Enable low-level GICv4 operations
irqchip/gic-v4: Add some basic documentation
irqchip/gic-v4: Add VLPI configuration interface
irqchip/gic-v4: Add VPE command interface
irqchip/gic-v4: Add per-VM VPE domain creation
irqchip/gic-v3-its: Set implementation defined bit to enable VLPIs
irqchip/gic-v3-its: Allow doorbell interrupts to be injected/cleared
...
This commit is contained in:
@@ -4,8 +4,10 @@ Required properties:
|
||||
|
||||
- compatible: should be "fsl,<soc-name>-msi" to identify
|
||||
Layerscape PCIe MSI controller block such as:
|
||||
"fsl,1s1021a-msi"
|
||||
"fsl,1s1043a-msi"
|
||||
"fsl,ls1021a-msi"
|
||||
"fsl,ls1043a-msi"
|
||||
"fsl,ls1046a-msi"
|
||||
"fsl,ls1043a-v1.1-msi"
|
||||
- msi-controller: indicates that this is a PCIe MSI controller node
|
||||
- reg: physical base address of the controller and length of memory mapped.
|
||||
- interrupts: an interrupt to the parent interrupt controller.
|
||||
@@ -23,7 +25,7 @@ MSI controller node
|
||||
Examples:
|
||||
|
||||
msi1: msi-controller@1571000 {
|
||||
compatible = "fsl,1s1043a-msi";
|
||||
compatible = "fsl,ls1043a-msi";
|
||||
reg = <0x0 0x1571000 0x0 0x8>,
|
||||
msi-controller;
|
||||
interrupts = <0 116 0x4>;
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
UniPhier AIDET
|
||||
|
||||
UniPhier AIDET (ARM Interrupt Detector) is an add-on block for ARM GIC (Generic
|
||||
Interrupt Controller). GIC itself can handle only high level and rising edge
|
||||
interrupts. The AIDET provides logic inverter to support low level and falling
|
||||
edge interrupts.
|
||||
|
||||
Required properties:
|
||||
- compatible: Should be one of the following:
|
||||
"socionext,uniphier-ld4-aidet" - for LD4 SoC
|
||||
"socionext,uniphier-pro4-aidet" - for Pro4 SoC
|
||||
"socionext,uniphier-sld8-aidet" - for sLD8 SoC
|
||||
"socionext,uniphier-pro5-aidet" - for Pro5 SoC
|
||||
"socionext,uniphier-pxs2-aidet" - for PXs2/LD6b SoC
|
||||
"socionext,uniphier-ld11-aidet" - for LD11 SoC
|
||||
"socionext,uniphier-ld20-aidet" - for LD20 SoC
|
||||
"socionext,uniphier-pxs3-aidet" - for PXs3 SoC
|
||||
- reg: Specifies offset and length of the register set for the device.
|
||||
- interrupt-controller: Identifies the node as an interrupt controller
|
||||
- #interrupt-cells : Specifies the number of cells needed to encode an interrupt
|
||||
source. The value should be 2. The first cell defines the interrupt number
|
||||
(corresponds to the SPI interrupt number of GIC). The second cell specifies
|
||||
the trigger type as defined in interrupts.txt in this directory.
|
||||
|
||||
Example:
|
||||
|
||||
aidet: aidet@5fc20000 {
|
||||
compatible = "socionext,uniphier-pro4-aidet";
|
||||
reg = <0x5fc20000 0x200>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
};
|
||||
@@ -312,6 +312,7 @@ IRQ
|
||||
devm_irq_alloc_descs_from()
|
||||
devm_irq_alloc_generic_chip()
|
||||
devm_irq_setup_generic_chip()
|
||||
devm_irq_sim_init()
|
||||
|
||||
LED
|
||||
devm_led_classdev_register()
|
||||
|
||||
@@ -1993,6 +1993,7 @@ F: arch/arm64/boot/dts/socionext/
|
||||
F: drivers/bus/uniphier-system-bus.c
|
||||
F: drivers/clk/uniphier/
|
||||
F: drivers/i2c/busses/i2c-uniphier*
|
||||
F: drivers/irqchip/irq-uniphier-aidet.c
|
||||
F: drivers/pinctrl/uniphier/
|
||||
F: drivers/reset/reset-uniphier.c
|
||||
F: drivers/tty/serial/8250/8250_uniphier.c
|
||||
|
||||
@@ -129,14 +129,14 @@
|
||||
};
|
||||
|
||||
msi1: msi-controller@1570e00 {
|
||||
compatible = "fsl,1s1021a-msi";
|
||||
compatible = "fsl,ls1021a-msi";
|
||||
reg = <0x0 0x1570e00 0x0 0x8>;
|
||||
msi-controller;
|
||||
interrupts = <GIC_SPI 179 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
msi2: msi-controller@1570e08 {
|
||||
compatible = "fsl,1s1021a-msi";
|
||||
compatible = "fsl,ls1021a-msi";
|
||||
reg = <0x0 0x1570e08 0x0 0x8>;
|
||||
msi-controller;
|
||||
interrupts = <GIC_SPI 180 IRQ_TYPE_LEVEL_HIGH>;
|
||||
@@ -699,7 +699,7 @@
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x40 0x00010000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x40 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
msi-parent = <&msi1>;
|
||||
msi-parent = <&msi1>, <&msi2>;
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0000 0 0 1 &gic GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -722,7 +722,7 @@
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x48 0x00010000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x48 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
msi-parent = <&msi2>;
|
||||
msi-parent = <&msi1>, <&msi2>;
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0000 0 0 1 &gic GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>,
|
||||
|
||||
@@ -275,6 +275,12 @@ static inline u64 __gic_readq_nonatomic(const volatile void __iomem *addr)
|
||||
#define gicr_read_pendbaser(c) __gic_readq_nonatomic(c)
|
||||
#define gicr_write_pendbaser(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GICR_xLPIR - only the lower bits are significant
|
||||
*/
|
||||
#define gic_read_lpir(c) readl_relaxed(c)
|
||||
#define gic_write_lpir(v, c) writel_relaxed(lower_32_bits(v), c)
|
||||
|
||||
/*
|
||||
* GITS_TYPER is an ID register and doesn't need atomicity.
|
||||
*/
|
||||
@@ -291,5 +297,33 @@ static inline u64 __gic_readq_nonatomic(const volatile void __iomem *addr)
|
||||
*/
|
||||
#define gits_write_cwriter(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GITS_VPROPBASER - hi and lo bits may be accessed independently.
|
||||
*/
|
||||
#define gits_write_vpropbaser(v, c) __gic_writeq_nonatomic(v, c)
|
||||
|
||||
/*
|
||||
* GITS_VPENDBASER - the Valid bit must be cleared before changing
|
||||
* anything else.
|
||||
*/
|
||||
static inline void gits_write_vpendbaser(u64 val, void * __iomem addr)
|
||||
{
|
||||
u32 tmp;
|
||||
|
||||
tmp = readl_relaxed(addr + 4);
|
||||
if (tmp & (GICR_VPENDBASER_Valid >> 32)) {
|
||||
tmp &= ~(GICR_VPENDBASER_Valid >> 32);
|
||||
writel_relaxed(tmp, addr + 4);
|
||||
}
|
||||
|
||||
/*
|
||||
* Use the fact that __gic_writeq_nonatomic writes the second
|
||||
* half of the 64bit quantity after the first.
|
||||
*/
|
||||
__gic_writeq_nonatomic(val, addr);
|
||||
}
|
||||
|
||||
#define gits_read_vpendbaser(c) __gic_readq_nonatomic(c)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
#endif /* !__ASM_ARCH_GICV3_H */
|
||||
|
||||
@@ -39,6 +39,7 @@ config ARCH_HIP04
|
||||
select HAVE_ARM_ARCH_TIMER
|
||||
select MCPM if SMP
|
||||
select MCPM_QUAD_CLUSTER if SMP
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
help
|
||||
Support for Hisilicon HiP04 SoC family
|
||||
|
||||
|
||||
@@ -653,21 +653,21 @@
|
||||
};
|
||||
|
||||
msi1: msi-controller1@1571000 {
|
||||
compatible = "fsl,1s1043a-msi";
|
||||
compatible = "fsl,ls1043a-msi";
|
||||
reg = <0x0 0x1571000 0x0 0x8>;
|
||||
msi-controller;
|
||||
interrupts = <0 116 0x4>;
|
||||
};
|
||||
|
||||
msi2: msi-controller2@1572000 {
|
||||
compatible = "fsl,1s1043a-msi";
|
||||
compatible = "fsl,ls1043a-msi";
|
||||
reg = <0x0 0x1572000 0x0 0x8>;
|
||||
msi-controller;
|
||||
interrupts = <0 126 0x4>;
|
||||
};
|
||||
|
||||
msi3: msi-controller3@1573000 {
|
||||
compatible = "fsl,1s1043a-msi";
|
||||
compatible = "fsl,ls1043a-msi";
|
||||
reg = <0x0 0x1573000 0x0 0x8>;
|
||||
msi-controller;
|
||||
interrupts = <0 160 0x4>;
|
||||
@@ -689,7 +689,7 @@
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x40 0x00010000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x40 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
msi-parent = <&msi1>;
|
||||
msi-parent = <&msi1>, <&msi2>, <&msi3>;
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0000 0 0 1 &gic 0 110 0x4>,
|
||||
@@ -714,7 +714,7 @@
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x48 0x00010000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x48 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
msi-parent = <&msi2>;
|
||||
msi-parent = <&msi1>, <&msi2>, <&msi3>;
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0000 0 0 1 &gic 0 120 0x4>,
|
||||
@@ -739,7 +739,7 @@
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x50 0x00010000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x50 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
msi-parent = <&msi3>;
|
||||
msi-parent = <&msi1>, <&msi2>, <&msi3>;
|
||||
#interrupt-cells = <1>;
|
||||
interrupt-map-mask = <0 0 0 7>;
|
||||
interrupt-map = <0000 0 0 1 &gic 0 154 0x4>,
|
||||
|
||||
@@ -630,6 +630,37 @@
|
||||
interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
};
|
||||
|
||||
msi1: msi-controller@1580000 {
|
||||
compatible = "fsl,ls1046a-msi";
|
||||
msi-controller;
|
||||
reg = <0x0 0x1580000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
msi2: msi-controller@1590000 {
|
||||
compatible = "fsl,ls1046a-msi";
|
||||
msi-controller;
|
||||
reg = <0x0 0x1590000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
msi3: msi-controller@15a0000 {
|
||||
compatible = "fsl,ls1046a-msi";
|
||||
msi-controller;
|
||||
reg = <0x0 0x15a0000 0x0 0x10000>;
|
||||
interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 155 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 156 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
reserved-memory {
|
||||
|
||||
@@ -116,6 +116,8 @@ static inline void gic_write_bpr1(u32 val)
|
||||
|
||||
#define gic_read_typer(c) readq_relaxed(c)
|
||||
#define gic_write_irouter(v, c) writeq_relaxed(v, c)
|
||||
#define gic_read_lpir(c) readq_relaxed(c)
|
||||
#define gic_write_lpir(v, c) writeq_relaxed(v, c)
|
||||
|
||||
#define gic_flush_dcache_to_poc(a,l) __flush_dcache_area((a), (l))
|
||||
|
||||
@@ -133,5 +135,10 @@ static inline void gic_write_bpr1(u32 val)
|
||||
#define gicr_write_pendbaser(v, c) writeq_relaxed(v, c)
|
||||
#define gicr_read_pendbaser(c) readq_relaxed(c)
|
||||
|
||||
#define gits_write_vpropbaser(v, c) writeq_relaxed(v, c)
|
||||
|
||||
#define gits_write_vpendbaser(v, c) writeq_relaxed(v, c)
|
||||
#define gits_read_vpendbaser(c) readq_relaxed(c)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* __ASM_ARCH_GICV3_H */
|
||||
|
||||
@@ -26,6 +26,7 @@ config METAG
|
||||
select HAVE_SYSCALL_TRACEPOINTS
|
||||
select HAVE_UNDERSCORE_SYMBOL_PREFIX
|
||||
select IRQ_DOMAIN
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
select MODULES_USE_ELF_RELA
|
||||
select OF
|
||||
select OF_EARLY_FLATTREE
|
||||
|
||||
@@ -7,6 +7,7 @@ config ARM_GIC
|
||||
select IRQ_DOMAIN
|
||||
select IRQ_DOMAIN_HIERARCHY
|
||||
select MULTI_IRQ_HANDLER
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config ARM_GIC_PM
|
||||
bool
|
||||
@@ -34,6 +35,7 @@ config ARM_GIC_V3
|
||||
select MULTI_IRQ_HANDLER
|
||||
select IRQ_DOMAIN_HIERARCHY
|
||||
select PARTITION_PERCPU
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config ARM_GIC_V3_ITS
|
||||
bool
|
||||
@@ -64,6 +66,7 @@ config ARMADA_370_XP_IRQ
|
||||
bool
|
||||
select GENERIC_IRQ_CHIP
|
||||
select PCI_MSI if PCI
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config ALPINE_MSI
|
||||
bool
|
||||
@@ -93,11 +96,13 @@ config BCM6345_L1_IRQ
|
||||
bool
|
||||
select GENERIC_IRQ_CHIP
|
||||
select IRQ_DOMAIN
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config BCM7038_L1_IRQ
|
||||
bool
|
||||
select GENERIC_IRQ_CHIP
|
||||
select IRQ_DOMAIN
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config BCM7120_L2_IRQ
|
||||
bool
|
||||
@@ -136,6 +141,7 @@ config IRQ_MIPS_CPU
|
||||
select GENERIC_IRQ_IPI if SYS_SUPPORTS_MULTITHREADING
|
||||
select IRQ_DOMAIN
|
||||
select IRQ_DOMAIN_HIERARCHY if GENERIC_IRQ_IPI
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config CLPS711X_IRQCHIP
|
||||
bool
|
||||
@@ -217,6 +223,7 @@ config VERSATILE_FPGA_IRQ_NR
|
||||
config XTENSA_MX
|
||||
bool
|
||||
select IRQ_DOMAIN
|
||||
select GENERIC_IRQ_EFFECTIVE_AFF_MASK
|
||||
|
||||
config XILINX_INTC
|
||||
bool
|
||||
@@ -306,3 +313,11 @@ config QCOM_IRQ_COMBINER
|
||||
help
|
||||
Say yes here to add support for the IRQ combiner devices embedded
|
||||
in Qualcomm Technologies chips.
|
||||
|
||||
config IRQ_UNIPHIER_AIDET
|
||||
bool "UniPhier AIDET support" if COMPILE_TEST
|
||||
depends on ARCH_UNIPHIER || COMPILE_TEST
|
||||
default ARCH_UNIPHIER
|
||||
select IRQ_DOMAIN_HIERARCHY
|
||||
help
|
||||
Support for the UniPhier AIDET (ARM Interrupt Detector).
|
||||
|
||||
@@ -28,7 +28,7 @@ obj-$(CONFIG_ARM_GIC_PM) += irq-gic-pm.o
|
||||
obj-$(CONFIG_ARCH_REALVIEW) += irq-gic-realview.o
|
||||
obj-$(CONFIG_ARM_GIC_V2M) += irq-gic-v2m.o
|
||||
obj-$(CONFIG_ARM_GIC_V3) += irq-gic-v3.o irq-gic-common.o
|
||||
obj-$(CONFIG_ARM_GIC_V3_ITS) += irq-gic-v3-its.o irq-gic-v3-its-pci-msi.o irq-gic-v3-its-platform-msi.o
|
||||
obj-$(CONFIG_ARM_GIC_V3_ITS) += irq-gic-v3-its.o irq-gic-v3-its-pci-msi.o irq-gic-v3-its-platform-msi.o irq-gic-v4.o
|
||||
obj-$(CONFIG_PARTITION_PERCPU) += irq-partition-percpu.o
|
||||
obj-$(CONFIG_HISILICON_IRQ_MBIGEN) += irq-mbigen.o
|
||||
obj-$(CONFIG_ARM_NVIC) += irq-nvic.o
|
||||
@@ -78,3 +78,4 @@ obj-$(CONFIG_EZNPS_GIC) += irq-eznps.o
|
||||
obj-$(CONFIG_ARCH_ASPEED) += irq-aspeed-vic.o irq-aspeed-i2c-ic.o
|
||||
obj-$(CONFIG_STM32_EXTI) += irq-stm32-exti.o
|
||||
obj-$(CONFIG_QCOM_IRQ_COMBINER) += qcom-irq-combiner.o
|
||||
obj-$(CONFIG_IRQ_UNIPHIER_AIDET) += irq-uniphier-aidet.o
|
||||
|
||||
@@ -203,7 +203,7 @@ static struct irq_chip armada_370_xp_msi_irq_chip = {
|
||||
|
||||
static struct msi_domain_info armada_370_xp_msi_domain_info = {
|
||||
.flags = (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
|
||||
MSI_FLAG_MULTI_PCI_MSI),
|
||||
MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX),
|
||||
.chip = &armada_370_xp_msi_irq_chip,
|
||||
};
|
||||
|
||||
@@ -330,6 +330,8 @@ static int armada_xp_set_affinity(struct irq_data *d,
|
||||
writel(reg, main_int_base + ARMADA_370_XP_INT_SOURCE_CTL(hwirq));
|
||||
raw_spin_unlock(&irq_controller_lock);
|
||||
|
||||
irq_data_update_effective_affinity(d, cpumask_of(cpu));
|
||||
|
||||
return IRQ_SET_MASK_OK;
|
||||
}
|
||||
#endif
|
||||
@@ -363,6 +365,7 @@ static int armada_370_xp_mpic_irq_map(struct irq_domain *h,
|
||||
} else {
|
||||
irq_set_chip_and_handler(virq, &armada_370_xp_irq_chip,
|
||||
handle_level_irq);
|
||||
irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
|
||||
}
|
||||
irq_set_probe(virq);
|
||||
|
||||
|
||||
@@ -147,13 +147,12 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
|
||||
base = of_iomap(node, 0);
|
||||
if (!base)
|
||||
panic("%s: unable to map IC registers\n",
|
||||
node->full_name);
|
||||
panic("%pOF: unable to map IC registers\n", node);
|
||||
|
||||
intc.domain = irq_domain_add_linear(node, MAKE_HWIRQ(NR_BANKS, 0),
|
||||
&armctrl_ops, NULL);
|
||||
if (!intc.domain)
|
||||
panic("%s: unable to create IRQ domain\n", node->full_name);
|
||||
panic("%pOF: unable to create IRQ domain\n", node);
|
||||
|
||||
for (b = 0; b < NR_BANKS; b++) {
|
||||
intc.pending[b] = base + reg_pending[b];
|
||||
@@ -173,8 +172,8 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
int parent_irq = irq_of_parse_and_map(node, 0);
|
||||
|
||||
if (!parent_irq) {
|
||||
panic("%s: unable to get parent interrupt.\n",
|
||||
node->full_name);
|
||||
panic("%pOF: unable to get parent interrupt.\n",
|
||||
node);
|
||||
}
|
||||
irq_set_chained_handler(parent_irq, bcm2836_chained_handle_irq);
|
||||
} else {
|
||||
|
||||
@@ -282,8 +282,7 @@ static int __init bcm2836_arm_irqchip_l1_intc_of_init(struct device_node *node,
|
||||
{
|
||||
intc.base = of_iomap(node, 0);
|
||||
if (!intc.base) {
|
||||
panic("%s: unable to map local interrupt registers\n",
|
||||
node->full_name);
|
||||
panic("%pOF: unable to map local interrupt registers\n", node);
|
||||
}
|
||||
|
||||
bcm2835_init_local_timer_frequency();
|
||||
@@ -292,7 +291,7 @@ static int __init bcm2836_arm_irqchip_l1_intc_of_init(struct device_node *node,
|
||||
&bcm2836_arm_irqchip_intc_ops,
|
||||
NULL);
|
||||
if (!intc.domain)
|
||||
panic("%s: unable to create IRQ domain\n", node->full_name);
|
||||
panic("%pOF: unable to create IRQ domain\n", node);
|
||||
|
||||
bcm2836_arm_irqchip_register_irq(LOCAL_IRQ_CNTPSIRQ,
|
||||
&bcm2836_arm_irqchip_timer);
|
||||
|
||||
@@ -231,6 +231,8 @@ static int bcm6345_l1_set_affinity(struct irq_data *d,
|
||||
}
|
||||
raw_spin_unlock_irqrestore(&intc->lock, flags);
|
||||
|
||||
irq_data_update_effective_affinity(d, cpumask_of(new_cpu));
|
||||
|
||||
return IRQ_SET_MASK_OK_NOCOPY;
|
||||
}
|
||||
|
||||
@@ -291,6 +293,7 @@ static int bcm6345_l1_map(struct irq_domain *d, unsigned int virq,
|
||||
irq_set_chip_and_handler(virq,
|
||||
&bcm6345_l1_irq_chip, handle_percpu_irq);
|
||||
irq_set_chip_data(virq, d->host_data);
|
||||
irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -212,6 +212,8 @@ static int bcm7038_l1_set_affinity(struct irq_data *d,
|
||||
__bcm7038_l1_unmask(d, first_cpu);
|
||||
|
||||
raw_spin_unlock_irqrestore(&intc->lock, flags);
|
||||
irq_data_update_effective_affinity(d, cpumask_of(first_cpu));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -299,6 +301,7 @@ static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
|
||||
{
|
||||
irq_set_chip_and_handler(virq, &bcm7038_l1_irq_chip, handle_level_irq);
|
||||
irq_set_chip_data(virq, d->host_data);
|
||||
irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -250,12 +250,6 @@ static int __init bcm7120_l2_intc_probe(struct device_node *dn,
|
||||
if (ret < 0)
|
||||
goto out_free_l1_data;
|
||||
|
||||
for (idx = 0; idx < data->n_words; idx++) {
|
||||
__raw_writel(data->irq_fwd_mask[idx],
|
||||
data->pair_base[idx] +
|
||||
data->en_offset[idx]);
|
||||
}
|
||||
|
||||
for (irq = 0; irq < data->num_parent_irqs; irq++) {
|
||||
ret = bcm7120_l2_intc_init_one(dn, data, irq, valid_mask);
|
||||
if (ret)
|
||||
@@ -297,6 +291,10 @@ static int __init bcm7120_l2_intc_probe(struct device_node *dn,
|
||||
gc->reg_base = data->pair_base[idx];
|
||||
ct->regs.mask = data->en_offset[idx];
|
||||
|
||||
/* gc->reg_base is defined and so is gc->writel */
|
||||
irq_reg_writel(gc, data->irq_fwd_mask[idx],
|
||||
data->en_offset[idx]);
|
||||
|
||||
ct->chip.irq_mask = irq_gc_mask_clr_bit;
|
||||
ct->chip.irq_unmask = irq_gc_mask_set_bit;
|
||||
ct->chip.irq_ack = irq_gc_noop;
|
||||
|
||||
@@ -341,13 +341,13 @@ static int __init irqcrossbar_init(struct device_node *node,
|
||||
int err;
|
||||
|
||||
if (!parent) {
|
||||
pr_err("%s: no parent, giving up\n", node->full_name);
|
||||
pr_err("%pOF: no parent, giving up\n", node);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
parent_domain = irq_find_host(parent);
|
||||
if (!parent_domain) {
|
||||
pr_err("%s: unable to obtain parent domain\n", node->full_name);
|
||||
pr_err("%pOF: unable to obtain parent domain\n", node);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
@@ -360,7 +360,7 @@ static int __init irqcrossbar_init(struct device_node *node,
|
||||
node, &crossbar_domain_ops,
|
||||
NULL);
|
||||
if (!domain) {
|
||||
pr_err("%s: failed to allocated domain\n", node->full_name);
|
||||
pr_err("%pOF: failed to allocated domain\n", node);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user