diff mbox

[v2,05/18] target-arm: Add ARMCPU fields for GIC CPU i/f config

Message ID 1483977924-14522-6-git-send-email-peter.maydell@linaro.org
State Superseded
Headers show

Commit Message

Peter Maydell Jan. 9, 2017, 4:05 p.m. UTC
Add fields to the ARMCPU structure to allow CPU classes to
specify the configurable aspects of their GIC CPU interface.
In particular, the virtualization support allows different
values for number of list registers, priority bits and
preemption bits.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 target/arm/cpu.h   | 5 +++++
 target/arm/cpu64.c | 6 ++++++
 2 files changed, 11 insertions(+)

-- 
2.7.4

Comments

Alistair Francis Jan. 17, 2017, 10:12 p.m. UTC | #1
On Mon, Jan 9, 2017 at 8:05 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
> Add fields to the ARMCPU structure to allow CPU classes to

> specify the configurable aspects of their GIC CPU interface.

> In particular, the virtualization support allows different

> values for number of list registers, priority bits and

> preemption bits.

>

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Acked-by: Alistair Francis <alistair.francis@xilinx.com>


Thanks,

Alistair

> ---

>  target/arm/cpu.h   | 5 +++++

>  target/arm/cpu64.c | 6 ++++++

>  2 files changed, 11 insertions(+)

>

> diff --git a/target/arm/cpu.h b/target/arm/cpu.h

> index 764b511..28c5d8f 100644

> --- a/target/arm/cpu.h

> +++ b/target/arm/cpu.h

> @@ -659,6 +659,11 @@ struct ARMCPU {

>      uint32_t dcz_blocksize;

>      uint64_t rvbar;

>

> +    /* Configurable aspects of GIC cpu interface (which is part of the CPU) */

> +    int gic_num_lrs; /* number of list registers */

> +    int gic_vpribits; /* number of virtual priority bits */

> +    int gic_vprebits; /* number of virtual preemption bits */

> +

>      ARMELChangeHook *el_change_hook;

>      void *el_change_hook_opaque;

>  };

> diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c

> index 549cb1e..73c7f31 100644

> --- a/target/arm/cpu64.c

> +++ b/target/arm/cpu64.c

> @@ -147,6 +147,9 @@ static void aarch64_a57_initfn(Object *obj)

>      cpu->ccsidr[1] = 0x201fe012; /* 48KB L1 icache */

>      cpu->ccsidr[2] = 0x70ffe07a; /* 2048KB L2 cache */

>      cpu->dcz_blocksize = 4; /* 64 bytes */

> +    cpu->gic_num_lrs = 4;

> +    cpu->gic_vpribits = 5;

> +    cpu->gic_vprebits = 5;

>      define_arm_cp_regs(cpu, cortex_a57_a53_cp_reginfo);

>  }

>

> @@ -201,6 +204,9 @@ static void aarch64_a53_initfn(Object *obj)

>      cpu->ccsidr[1] = 0x201fe00a; /* 32KB L1 icache */

>      cpu->ccsidr[2] = 0x707fe07a; /* 1024KB L2 cache */

>      cpu->dcz_blocksize = 4; /* 64 bytes */

> +    cpu->gic_num_lrs = 4;

> +    cpu->gic_vpribits = 5;

> +    cpu->gic_vprebits = 5;

>      define_arm_cp_regs(cpu, cortex_a57_a53_cp_reginfo);

>  }

>

> --

> 2.7.4

>

>
diff mbox

Patch

diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 764b511..28c5d8f 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -659,6 +659,11 @@  struct ARMCPU {
     uint32_t dcz_blocksize;
     uint64_t rvbar;
 
+    /* Configurable aspects of GIC cpu interface (which is part of the CPU) */
+    int gic_num_lrs; /* number of list registers */
+    int gic_vpribits; /* number of virtual priority bits */
+    int gic_vprebits; /* number of virtual preemption bits */
+
     ARMELChangeHook *el_change_hook;
     void *el_change_hook_opaque;
 };
diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c
index 549cb1e..73c7f31 100644
--- a/target/arm/cpu64.c
+++ b/target/arm/cpu64.c
@@ -147,6 +147,9 @@  static void aarch64_a57_initfn(Object *obj)
     cpu->ccsidr[1] = 0x201fe012; /* 48KB L1 icache */
     cpu->ccsidr[2] = 0x70ffe07a; /* 2048KB L2 cache */
     cpu->dcz_blocksize = 4; /* 64 bytes */
+    cpu->gic_num_lrs = 4;
+    cpu->gic_vpribits = 5;
+    cpu->gic_vprebits = 5;
     define_arm_cp_regs(cpu, cortex_a57_a53_cp_reginfo);
 }
 
@@ -201,6 +204,9 @@  static void aarch64_a53_initfn(Object *obj)
     cpu->ccsidr[1] = 0x201fe00a; /* 32KB L1 icache */
     cpu->ccsidr[2] = 0x707fe07a; /* 1024KB L2 cache */
     cpu->dcz_blocksize = 4; /* 64 bytes */
+    cpu->gic_num_lrs = 4;
+    cpu->gic_vpribits = 5;
+    cpu->gic_vprebits = 5;
     define_arm_cp_regs(cpu, cortex_a57_a53_cp_reginfo);
 }