Commit 6ed54e17 authored by Marc Zyngier's avatar Marc Zyngier

Merge branch irq/misc-6.2 into irq/irqchip-next

* irq/misc-6.2:
  : .
  : Random minor fixes and improvments:
  :
  : - More Loongson fixes after the Loongarch merge
  :
  : - Error handling fixes for wpcm450, GIC...
  :
  : - BE detection for a FSL controller
  :
  : - Declare the Sifive PLIC as wake-up agnostic
  :
  : - Simplify fishing out the device data for the ST irqchip
  :
  : - Mark some data structures as __initconst in the apple-aic driver
  :
  : - Switch over from strtobool to kstrtobool
  :
  : - COMPILET_TEST fixes
  :
  : - and the mandatory "repeated word" commit...
  : .
  irqchip/ls-extirq: Fix endianness detection
  irqchip/gic: Use kstrtobool() instead of strtobool()
  irqchip/sifive-plic: Support wake IRQs
  irqchip/loongson-liointc: Fix improper error handling in liointc_init()
  irqchip/sl28cpld: Replace irqchip mask_invert with unmask_base
  irqchip/wpcm450: Fix memory leak in wpcm450_aic_of_init()
  irqchip/st: Use device_get_match_data() to simplify the code
  irqchip/al-fic: Drop obsolete dependency on COMPILE_TEST
  irqchip: gic-pm: Use pm_runtime_resume_and_get() in gic_probe()
  irqchip/mips-gic: Drop repeated word in comment
  irqchip/apple-aic: Mark aic_info structs __initconst
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parents 4363c852 3ae977d0
...@@ -86,7 +86,7 @@ config ALPINE_MSI ...@@ -86,7 +86,7 @@ config ALPINE_MSI
config AL_FIC config AL_FIC
bool "Amazon's Annapurna Labs Fabric Interrupt Controller" bool "Amazon's Annapurna Labs Fabric Interrupt Controller"
depends on OF || COMPILE_TEST depends on OF
select GENERIC_IRQ_CHIP select GENERIC_IRQ_CHIP
select IRQ_DOMAIN select IRQ_DOMAIN
help help
......
...@@ -248,14 +248,14 @@ struct aic_info { ...@@ -248,14 +248,14 @@ struct aic_info {
bool fast_ipi; bool fast_ipi;
}; };
static const struct aic_info aic1_info = { static const struct aic_info aic1_info __initconst = {
.version = 1, .version = 1,
.event = AIC_EVENT, .event = AIC_EVENT,
.target_cpu = AIC_TARGET_CPU, .target_cpu = AIC_TARGET_CPU,
}; };
static const struct aic_info aic1_fipi_info = { static const struct aic_info aic1_fipi_info __initconst = {
.version = 1, .version = 1,
.event = AIC_EVENT, .event = AIC_EVENT,
...@@ -264,7 +264,7 @@ static const struct aic_info aic1_fipi_info = { ...@@ -264,7 +264,7 @@ static const struct aic_info aic1_fipi_info = {
.fast_ipi = true, .fast_ipi = true,
}; };
static const struct aic_info aic2_info = { static const struct aic_info aic2_info __initconst = {
.version = 2, .version = 2,
.irq_cfg = AIC2_IRQ_CFG, .irq_cfg = AIC2_IRQ_CFG,
......
...@@ -102,7 +102,7 @@ static int gic_probe(struct platform_device *pdev) ...@@ -102,7 +102,7 @@ static int gic_probe(struct platform_device *pdev)
pm_runtime_enable(dev); pm_runtime_enable(dev);
ret = pm_runtime_get_sync(dev); ret = pm_runtime_resume_and_get(dev);
if (ret < 0) if (ret < 0)
goto rpm_disable; goto rpm_disable;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irqdomain.h> #include <linux/irqdomain.h>
#include <linux/kstrtox.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_address.h> #include <linux/of_address.h>
#include <linux/of_irq.h> #include <linux/of_irq.h>
...@@ -1171,7 +1172,7 @@ static bool gicv3_nolpi; ...@@ -1171,7 +1172,7 @@ static bool gicv3_nolpi;
static int __init gicv3_nolpi_cfg(char *buf) static int __init gicv3_nolpi_cfg(char *buf)
{ {
return strtobool(buf, &gicv3_nolpi); return kstrtobool(buf, &gicv3_nolpi);
} }
early_param("irqchip.gicv3_nolpi", gicv3_nolpi_cfg); early_param("irqchip.gicv3_nolpi", gicv3_nolpi_cfg);
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/kstrtox.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/list.h> #include <linux/list.h>
...@@ -1332,7 +1333,7 @@ static bool gicv2_force_probe; ...@@ -1332,7 +1333,7 @@ static bool gicv2_force_probe;
static int __init gicv2_force_probe_cfg(char *buf) static int __init gicv2_force_probe_cfg(char *buf)
{ {
return strtobool(buf, &gicv2_force_probe); return kstrtobool(buf, &gicv2_force_probe);
} }
early_param("irqchip.gicv2_force_probe", gicv2_force_probe_cfg); early_param("irqchip.gicv2_force_probe", gicv2_force_probe_cfg);
......
...@@ -212,10 +212,13 @@ static int liointc_init(phys_addr_t addr, unsigned long size, int revision, ...@@ -212,10 +212,13 @@ static int liointc_init(phys_addr_t addr, unsigned long size, int revision,
"reg-names", core_reg_names[i]); "reg-names", core_reg_names[i]);
if (index < 0) if (index < 0)
goto out_iounmap; continue;
priv->core_isr[i] = of_iomap(node, index); priv->core_isr[i] = of_iomap(node, index);
} }
if (!priv->core_isr[0])
goto out_iounmap;
} }
/* Setup IRQ domain */ /* Setup IRQ domain */
......
...@@ -203,7 +203,7 @@ ls_extirq_of_init(struct device_node *node, struct device_node *parent) ...@@ -203,7 +203,7 @@ ls_extirq_of_init(struct device_node *node, struct device_node *parent)
if (ret) if (ret)
goto err_parse_map; goto err_parse_map;
priv->big_endian = of_device_is_big_endian(parent); priv->big_endian = of_device_is_big_endian(node->parent);
priv->is_ls1021a_or_ls1043a = of_device_is_compatible(node, "fsl,ls1021a-extirq") || priv->is_ls1021a_or_ls1043a = of_device_is_compatible(node, "fsl,ls1021a-extirq") ||
of_device_is_compatible(node, "fsl,ls1043a-extirq"); of_device_is_compatible(node, "fsl,ls1043a-extirq");
raw_spin_lock_init(&priv->lock); raw_spin_lock_init(&priv->lock);
......
...@@ -494,7 +494,7 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq, ...@@ -494,7 +494,7 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int virq,
map = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin; map = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin;
/* /*
* If adding support for more per-cpu interrupts, keep the the * If adding support for more per-cpu interrupts, keep the
* array in gic_all_vpes_irq_cpu_online() in sync. * array in gic_all_vpes_irq_cpu_online() in sync.
*/ */
switch (intr) { switch (intr) {
......
...@@ -187,7 +187,8 @@ static struct irq_chip plic_edge_chip = { ...@@ -187,7 +187,8 @@ static struct irq_chip plic_edge_chip = {
.irq_set_affinity = plic_set_affinity, .irq_set_affinity = plic_set_affinity,
#endif #endif
.irq_set_type = plic_irq_set_type, .irq_set_type = plic_irq_set_type,
.flags = IRQCHIP_AFFINITY_PRE_STARTUP, .flags = IRQCHIP_SKIP_SET_WAKE |
IRQCHIP_AFFINITY_PRE_STARTUP,
}; };
static struct irq_chip plic_chip = { static struct irq_chip plic_chip = {
...@@ -201,7 +202,8 @@ static struct irq_chip plic_chip = { ...@@ -201,7 +202,8 @@ static struct irq_chip plic_chip = {
.irq_set_affinity = plic_set_affinity, .irq_set_affinity = plic_set_affinity,
#endif #endif
.irq_set_type = plic_irq_set_type, .irq_set_type = plic_irq_set_type,
.flags = IRQCHIP_AFFINITY_PRE_STARTUP, .flags = IRQCHIP_SKIP_SET_WAKE |
IRQCHIP_AFFINITY_PRE_STARTUP,
}; };
static int plic_irq_set_type(struct irq_data *d, unsigned int type) static int plic_irq_set_type(struct irq_data *d, unsigned int type)
......
...@@ -65,8 +65,7 @@ static int sl28cpld_intc_probe(struct platform_device *pdev) ...@@ -65,8 +65,7 @@ static int sl28cpld_intc_probe(struct platform_device *pdev)
irqchip->chip.num_irqs = ARRAY_SIZE(sl28cpld_irqs); irqchip->chip.num_irqs = ARRAY_SIZE(sl28cpld_irqs);
irqchip->chip.num_regs = 1; irqchip->chip.num_regs = 1;
irqchip->chip.status_base = base + INTC_IP; irqchip->chip.status_base = base + INTC_IP;
irqchip->chip.mask_base = base + INTC_IE; irqchip->chip.unmask_base = base + INTC_IE;
irqchip->chip.mask_invert = true;
irqchip->chip.ack_base = base + INTC_IP; irqchip->chip.ack_base = base + INTC_IP;
return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev), return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(dev),
......
...@@ -153,18 +153,13 @@ static int st_irq_syscfg_enable(struct platform_device *pdev) ...@@ -153,18 +153,13 @@ static int st_irq_syscfg_enable(struct platform_device *pdev)
static int st_irq_syscfg_probe(struct platform_device *pdev) static int st_irq_syscfg_probe(struct platform_device *pdev)
{ {
struct device_node *np = pdev->dev.of_node; struct device_node *np = pdev->dev.of_node;
const struct of_device_id *match;
struct st_irq_syscfg *ddata; struct st_irq_syscfg *ddata;
ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL);
if (!ddata) if (!ddata)
return -ENOMEM; return -ENOMEM;
match = of_match_device(st_irq_syscfg_match, &pdev->dev); ddata->syscfg = (unsigned int) device_get_match_data(&pdev->dev);
if (!match)
return -ENODEV;
ddata->syscfg = (unsigned int)match->data;
ddata->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg"); ddata->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg");
if (IS_ERR(ddata->regmap)) { if (IS_ERR(ddata->regmap)) {
......
...@@ -146,6 +146,7 @@ static int __init wpcm450_aic_of_init(struct device_node *node, ...@@ -146,6 +146,7 @@ static int __init wpcm450_aic_of_init(struct device_node *node,
aic->regs = of_iomap(node, 0); aic->regs = of_iomap(node, 0);
if (!aic->regs) { if (!aic->regs) {
pr_err("Failed to map WPCM450 AIC registers\n"); pr_err("Failed to map WPCM450 AIC registers\n");
kfree(aic);
return -ENOMEM; return -ENOMEM;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment