mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 22:09:30 +02:00
irqchip/gic-v5: Preserve ICC_CR0_EL1 state
In addition to EN, ICC_CR0_EL1 contains other fields, such as LINK and
LINK_IDLE. The driver only needs to modify EN, and must preserve the
values of all other fields when enabling or disabling the CPU
interface.
Define the missing LINK and LINK_IDLE fields, and use read-modify-write
accesses to update EN without affecting the rest of ICC_CR0_EL1.
Fixes: 7ec80fb3f0 ("irqchip/gic-v5: Add GICv5 PPI support")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Link: https://patch.msgid.link/20260907164945.714545-1-sascha.bischoff@arm.com
Closes: https://lore.kernel.org/r/20260807121703.D4B7A1F00A3A@smtp.kernel.org
This commit is contained in:
committed by
Thomas Gleixner
parent
df2908090c
commit
1017911fcc
@@ -3761,7 +3761,9 @@ Sysreg ICC_CR0_EL1 3 1 12 0 1
|
||||
Res0 63:39
|
||||
Field 38 PID
|
||||
Field 37:32 IPPT
|
||||
Res0 31:1
|
||||
Res0 31:3
|
||||
Field 2 LINK_IDLE
|
||||
Field 1 LINK
|
||||
Field 0 EN
|
||||
EndSysreg
|
||||
|
||||
|
||||
@@ -974,7 +974,8 @@ static void gicv5_cpu_disable_interrupts(void)
|
||||
{
|
||||
u64 cr0;
|
||||
|
||||
cr0 = FIELD_PREP(ICC_CR0_EL1_EN, 0);
|
||||
cr0 = read_sysreg_s(SYS_ICC_CR0_EL1);
|
||||
cr0 &= ~ICC_CR0_EL1_EN_MASK;
|
||||
write_sysreg_s(cr0, SYS_ICC_CR0_EL1);
|
||||
isb();
|
||||
}
|
||||
@@ -991,7 +992,8 @@ static void gicv5_cpu_enable_interrupts(void)
|
||||
pcr = FIELD_PREP(ICC_PCR_EL1_PRIORITY, GICV5_IRQ_PRI_MI);
|
||||
write_sysreg_s(pcr, SYS_ICC_PCR_EL1);
|
||||
|
||||
cr0 = FIELD_PREP(ICC_CR0_EL1_EN, 1);
|
||||
cr0 = read_sysreg_s(SYS_ICC_CR0_EL1);
|
||||
cr0 |= ICC_CR0_EL1_EN_MASK;
|
||||
write_sysreg_s(cr0, SYS_ICC_CR0_EL1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user