qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/9] armv7m: Implement reading and writing of PR


From: Alex Bennée
Subject: Re: [Qemu-devel] [PATCH 2/9] armv7m: Implement reading and writing of PRIGROUP
Date: Tue, 14 Feb 2017 17:08:59 +0000
User-agent: mu4e 0.9.19; emacs 25.2.3

Peter Maydell <address@hidden> writes:

> Add a state field for the v7M PRIGROUP register and implent
> reading and writing it. The current NVIC doesn't honour
> the values written, but the new version will.
>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
>  hw/intc/armv7m_nvic.c | 14 ++++++++------
>  1 file changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
> index 09975f3..ce22001 100644
> --- a/hw/intc/armv7m_nvic.c
> +++ b/hw/intc/armv7m_nvic.c
> @@ -24,6 +24,9 @@
>  typedef struct NVICState {
>      GICState gic;
>      ARMCPU *cpu;
> +
> +    uint32_t prigroup;

It might be worth mentioning the field resets to 0b000 here.
Nevertheless:

Reviewed-by: Alex Bennée <address@hidden>

> +
>      struct {
>          uint32_t control;
>          uint32_t reload;
> @@ -223,7 +226,7 @@ static uint32_t nvic_readl(NVICState *s, uint32_t offset)
>      case 0xd08: /* Vector Table Offset.  */
>          return cpu->env.v7m.vecbase;
>      case 0xd0c: /* Application Interrupt/Reset Control.  */
> -        return 0xfa050000;
> +        return 0xfa050000 | (s->prigroup << 8);
>      case 0xd10: /* System Control.  */
>          /* TODO: Implement SLEEPONEXIT.  */
>          return 0;
> @@ -362,9 +365,7 @@ static void nvic_writel(NVICState *s, uint32_t offset, 
> uint32_t value)
>              if (value & 1) {
>                  qemu_log_mask(LOG_UNIMP, "AIRCR system reset 
> unimplemented\n");
>              }
> -            if (value & 0x700) {
> -                qemu_log_mask(LOG_UNIMP, "PRIGROUP unimplemented\n");
> -            }
> +            s->prigroup = extract32(value, 8, 3);
>          }
>          break;
>      case 0xd10: /* System Control.  */
> @@ -483,13 +484,14 @@ static const MemoryRegionOps nvic_sysreg_ops = {
>
>  static const VMStateDescription vmstate_nvic = {
>      .name = "armv7m_nvic",
> -    .version_id = 1,
> -    .minimum_version_id = 1,
> +    .version_id = 2,
> +    .minimum_version_id = 2,
>      .fields = (VMStateField[]) {
>          VMSTATE_UINT32(systick.control, NVICState),
>          VMSTATE_UINT32(systick.reload, NVICState),
>          VMSTATE_INT64(systick.tick, NVICState),
>          VMSTATE_TIMER_PTR(systick.timer, NVICState),
> +        VMSTATE_UINT32(prigroup, NVICState),
>          VMSTATE_END_OF_LIST()
>      }
>  };


--
Alex Bennée



reply via email to

[Prev in Thread] Current Thread [Next in Thread]