Message ID | 20210723162146.5167-6-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
Series | arm: Fix a handful of M-profile bugs | expand |
On 7/23/21 6:21 AM, Peter Maydell wrote: > The VECTPENDING field in the ICSR is 9 bits wide, in bits [20:12] of > the register. We were incorrectly masking it to 8 bits, so it would > report the wrong value if the pending exception was greater than 256. > Fix the bug. > > Signed-off-by: Peter Maydell<peter.maydell@linaro.org> > --- > hw/intc/armv7m_nvic.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c index 2aba2136822..c9149a3b221 100644 --- a/hw/intc/armv7m_nvic.c +++ b/hw/intc/armv7m_nvic.c @@ -1039,7 +1039,7 @@ static uint32_t nvic_readl(NVICState *s, uint32_t offset, MemTxAttrs attrs) /* VECTACTIVE */ val = cpu->env.v7m.exception; /* VECTPENDING */ - val |= (s->vectpending & 0xff) << 12; + val |= (s->vectpending & 0x1ff) << 12; /* ISRPENDING - set if any external IRQ is pending */ if (nvic_isrpending(s)) { val |= (1 << 22);
The VECTPENDING field in the ICSR is 9 bits wide, in bits [20:12] of the register. We were incorrectly masking it to 8 bits, so it would report the wrong value if the pending exception was greater than 256. Fix the bug. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- hw/intc/armv7m_nvic.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)