Skip to content

Commit df2d85d

Browse files
author
Marc Zyngier
committed
Merge branch irq/misc-6.3 into irq/irqchip-next
* irq/misc-6.3: : . : - Cleanup Kconfig dependencies for LS_SCFG_MSI : : - Improve save/restore for the loongson-liointc irqchip : : - Correctly initialise status and enable registers for one : of the ASpeed controllers : . irqchip/ls-scfg-msi: Simplify Kconfig dependencies irqchip/loongson-liointc: Save/restore int_edge/int_pol registers during S3/S4 irqchip/aspeed-scu-ic: Correctly initialise status and enable registers Signed-off-by: Marc Zyngier <[email protected]>
2 parents 5f61c69 + 9c1a7bf commit df2d85d

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

drivers/irqchip/Kconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ config LS_EXTIRQ
389389

390390
config LS_SCFG_MSI
391391
def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE
392-
depends on PCI && PCI_MSI
392+
depends on PCI_MSI
393393

394394
config PARTITION_PERCPU
395395
bool

drivers/irqchip/irq-aspeed-scu-ic.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717

1818
#define ASPEED_SCU_IC_REG 0x018
1919
#define ASPEED_SCU_IC_SHIFT 0
20-
#define ASPEED_SCU_IC_ENABLE GENMASK(6, ASPEED_SCU_IC_SHIFT)
20+
#define ASPEED_SCU_IC_ENABLE GENMASK(15, ASPEED_SCU_IC_SHIFT)
2121
#define ASPEED_SCU_IC_NUM_IRQS 7
22+
#define ASPEED_SCU_IC_STATUS GENMASK(28, 16)
2223
#define ASPEED_SCU_IC_STATUS_SHIFT 16
2324

2425
#define ASPEED_AST2600_SCU_IC0_REG 0x560
@@ -155,6 +156,8 @@ static int aspeed_scu_ic_of_init_common(struct aspeed_scu_ic *scu_ic,
155156
rc = PTR_ERR(scu_ic->scu);
156157
goto err;
157158
}
159+
regmap_write_bits(scu_ic->scu, scu_ic->reg, ASPEED_SCU_IC_STATUS, ASPEED_SCU_IC_STATUS);
160+
regmap_write_bits(scu_ic->scu, scu_ic->reg, ASPEED_SCU_IC_ENABLE, 0);
158161

159162
irq = irq_of_parse_and_map(node, 0);
160163
if (!irq) {

drivers/irqchip/irq-loongson-liointc.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ struct liointc_priv {
5555
struct liointc_handler_data handler[LIOINTC_NUM_PARENT];
5656
void __iomem *core_isr[LIOINTC_NUM_CORES];
5757
u8 map_cache[LIOINTC_CHIP_IRQ];
58+
u32 int_pol;
59+
u32 int_edge;
5860
bool has_lpc_irq_errata;
5961
};
6062

@@ -138,6 +140,14 @@ static int liointc_set_type(struct irq_data *data, unsigned int type)
138140
return 0;
139141
}
140142

143+
static void liointc_suspend(struct irq_chip_generic *gc)
144+
{
145+
struct liointc_priv *priv = gc->private;
146+
147+
priv->int_pol = readl(gc->reg_base + LIOINTC_REG_INTC_POL);
148+
priv->int_edge = readl(gc->reg_base + LIOINTC_REG_INTC_EDGE);
149+
}
150+
141151
static void liointc_resume(struct irq_chip_generic *gc)
142152
{
143153
struct liointc_priv *priv = gc->private;
@@ -150,6 +160,8 @@ static void liointc_resume(struct irq_chip_generic *gc)
150160
/* Restore map cache */
151161
for (i = 0; i < LIOINTC_CHIP_IRQ; i++)
152162
writeb(priv->map_cache[i], gc->reg_base + i);
163+
writel(priv->int_pol, gc->reg_base + LIOINTC_REG_INTC_POL);
164+
writel(priv->int_edge, gc->reg_base + LIOINTC_REG_INTC_EDGE);
153165
/* Restore mask cache */
154166
writel(gc->mask_cache, gc->reg_base + LIOINTC_REG_INTC_ENABLE);
155167
irq_gc_unlock_irqrestore(gc, flags);
@@ -269,6 +281,7 @@ static int liointc_init(phys_addr_t addr, unsigned long size, int revision,
269281
gc->private = priv;
270282
gc->reg_base = base;
271283
gc->domain = domain;
284+
gc->suspend = liointc_suspend;
272285
gc->resume = liointc_resume;
273286

274287
ct = gc->chip_types;

0 commit comments

Comments
 (0)