Even if obvious for the writer, a commit log is always welcome. This one
could state that it prepares for reuse on arm64 but will not work yet.

On 2017-07-20 11:19, 'Nikhil Devshatwar' via Jailhouse wrote:
> Signed-off-by: Nikhil Devshatwar <nikhil...@ti.com>
> ---
>  hypervisor/arch/arm-common/Kbuild               |   1 +
>  hypervisor/arch/arm-common/gic-v3.c             | 456 
> ++++++++++++++++++++++++
>  hypervisor/arch/arm-common/include/asm/gic_v3.h | 269 ++++++++++++++
>  hypervisor/arch/arm/Kbuild                      |   1 -
>  hypervisor/arch/arm/gic-v3.c                    | 456 
> ------------------------
>  hypervisor/arch/arm/include/asm/gic_v3.h        | 269 --------------
>  6 files changed, 726 insertions(+), 726 deletions(-)
>  create mode 100644 hypervisor/arch/arm-common/gic-v3.c
>  create mode 100644 hypervisor/arch/arm-common/include/asm/gic_v3.h
>  delete mode 100644 hypervisor/arch/arm/gic-v3.c
>  delete mode 100644 hypervisor/arch/arm/include/asm/gic_v3.h
> 

...

> --- /dev/null
> +++ b/hypervisor/arch/arm-common/include/asm/gic_v3.h
> @@ -0,0 +1,269 @@
> +/*
> + * Jailhouse, a Linux-based partitioning hypervisor
> + *
> + * Copyright (c) ARM Limited, 2014
> + *
> + * Authors:
> + *  Jean-Philippe Brucker <jean-philippe.bruc...@arm.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2.  See
> + * the COPYING file in the top-level directory.
> + */
> +
> +#ifndef _JAILHOUSE_ASM_GIC_V3_H
> +#define _JAILHOUSE_ASM_GIC_V3_H
> +
> +#include <asm/sysregs.h>
> +
> +#define GICD_SIZE            0x10000
> +#define GICR_SIZE            0x100000
> +
> +#define GICD_CIDR0           0xfff0
> +#define GICD_CIDR1           0xfff4
> +#define GICD_CIDR2           0xfff8
> +#define GICD_CIDR3           0xfffc
> +
> +#define GICD_PIDR0           0xffe0
> +#define GICD_PIDR1           0xffe4
> +#define GICD_PIDR2           0xffe8
> +#define GICD_PIDR3           0xffec
> +#define GICD_PIDR4           0xffd0
> +#define GICD_PIDR5           0xffd4
> +#define GICD_PIDR6           0xffd8
> +#define GICD_PIDR7           0xffdc
> +
> +#define GICR_CTLR            GICD_CTLR
> +#define GICR_TYPER           0x0008
> +#define GICR_WAKER           0x0014
> +#define GICR_CIDR0           GICD_CIDR0
> +#define GICR_CIDR1           GICD_CIDR1
> +#define GICR_CIDR2           GICD_CIDR2
> +#define GICR_CIDR3           GICD_CIDR3
> +#define GICR_PIDR0           GICD_PIDR0
> +#define GICR_PIDR1           GICD_PIDR1
> +#define GICR_PIDR2           GICD_PIDR2
> +#define GICR_PIDR3           GICD_PIDR3
> +#define GICR_PIDR4           GICD_PIDR4
> +#define GICR_PIDR5           GICD_PIDR5
> +#define GICR_PIDR6           GICD_PIDR6
> +#define GICR_PIDR7           GICD_PIDR7
> +
> +#define GICR_SGI_BASE                0x10000
> +#define GICR_IGROUPR         GICD_IGROUPR
> +#define GICR_ISENABLER               GICD_ISENABLER
> +#define GICR_ICENABLER               GICD_ICENABLER
> +#define GICR_ISACTIVER               GICD_ISACTIVER
> +#define GICR_ICACTIVER               GICD_ICACTIVER
> +#define GICR_IPRIORITY               GICD_IPRIORITY
> +
> +#define GICR_TYPER_Last              (1 << 4)
> +#define GICR_PIDR2_ARCH              GICD_PIDR2_ARCH
> +
> +#define ICC_IAR1_EL1         SYSREG_32(0, c12, c12, 0)
> +#define ICC_EOIR1_EL1                SYSREG_32(0, c12, c12, 1)
> +#define ICC_HPPIR1_EL1               SYSREG_32(0, c12, c12, 2)
> +#define ICC_BPR1_EL1         SYSREG_32(0, c12, c12, 3)
> +#define ICC_DIR_EL1          SYSREG_32(0, c12, c11, 1)
> +#define ICC_PMR_EL1          SYSREG_32(0, c4, c6, 0)
> +#define ICC_RPR_EL1          SYSREG_32(0, c12, c11, 3)
> +#define ICC_CTLR_EL1         SYSREG_32(0, c12, c12, 4)
> +#define ICC_SRE_EL1          SYSREG_32(0, c12, c12, 5)
> +#define ICC_SRE_EL2          SYSREG_32(4, c12, c9, 5)
> +#define ICC_IGRPEN1_EL1              SYSREG_32(0, c12, c12, 7)
> +#define ICC_SGI1R_EL1                SYSREG_64(0, c12)
> +#define ICC_AP1R0_EL1                SYSREG_32(0, c12, c9, 0)
> +#define ICC_AP1R1_EL1                SYSREG_32(0, c12, c9, 1)
> +#define ICC_AP1R2_EL1                SYSREG_32(0, c12, c9, 2)
> +#define ICC_AP1R3_EL1                SYSREG_32(0, c12, c9, 3)
> +
> +#define ICH_HCR_EL2          SYSREG_32(4, c12, c11, 0)
> +#define ICH_VTR_EL2          SYSREG_32(4, c12, c11, 1)
> +#define ICH_MISR_EL2         SYSREG_32(4, c12, c11, 2)
> +#define ICH_EISR_EL2         SYSREG_32(4, c12, c11, 3)
> +#define ICH_ELSR_EL2         SYSREG_32(4, c12, c11, 5)
> +#define ICH_VMCR_EL2         SYSREG_32(4, c12, c11, 7)
> +#define ICH_AP1R0_EL2                SYSREG_32(4, c12, c9, 0)
> +#define ICH_AP1R1_EL2                SYSREG_32(4, c12, c9, 1)
> +#define ICH_AP1R2_EL2                SYSREG_32(4, c12, c9, 2)
> +#define ICH_AP1R3_EL2                SYSREG_32(4, c12, c9, 3)
> +
> +/* Different on AArch32 and AArch64... */
> +#define __ICH_LR0(x)         SYSREG_32(4, c12, c12, x)
> +#define __ICH_LR8(x)         SYSREG_32(4, c12, c13, x)
> +#define __ICH_LRC0(x)                SYSREG_32(4, c12, c14, x)
> +#define __ICH_LRC8(x)                SYSREG_32(4, c12, c15, x)
> +
> +#define ICH_LR0                      __ICH_LR0(0)
> +#define ICH_LR1                      __ICH_LR0(1)
> +#define ICH_LR2                      __ICH_LR0(2)
> +#define ICH_LR3                      __ICH_LR0(3)
> +#define ICH_LR4                      __ICH_LR0(4)
> +#define ICH_LR5                      __ICH_LR0(5)
> +#define ICH_LR6                      __ICH_LR0(6)
> +#define ICH_LR7                      __ICH_LR0(7)
> +#define ICH_LR8                      __ICH_LR8(0)
> +#define ICH_LR9                      __ICH_LR8(1)
> +#define ICH_LR10             __ICH_LR8(2)
> +#define ICH_LR11             __ICH_LR8(3)
> +#define ICH_LR12             __ICH_LR8(4)
> +#define ICH_LR13             __ICH_LR8(5)
> +#define ICH_LR14             __ICH_LR8(6)
> +#define ICH_LR15             __ICH_LR8(7)
> +#define ICH_LRC0             __ICH_LRC0(0)
> +#define ICH_LRC1             __ICH_LRC0(1)
> +#define ICH_LRC2             __ICH_LRC0(2)
> +#define ICH_LRC3             __ICH_LRC0(3)
> +#define ICH_LRC4             __ICH_LRC0(4)
> +#define ICH_LRC5             __ICH_LRC0(5)
> +#define ICH_LRC6             __ICH_LRC0(6)
> +#define ICH_LRC7             __ICH_LRC0(7)
> +#define ICH_LRC8             __ICH_LRC8(0)
> +#define ICH_LRC9             __ICH_LRC8(1)
> +#define ICH_LRC10            __ICH_LRC8(2)
> +#define ICH_LRC11            __ICH_LRC8(3)
> +#define ICH_LRC12            __ICH_LRC8(4)
> +#define ICH_LRC13            __ICH_LRC8(5)
> +#define ICH_LRC14            __ICH_LRC8(6)
> +#define ICH_LRC15            __ICH_LRC8(7)
> +
> +#define ICC_CTLR_EOImode     0x2
> +#define ICC_PMR_MASK         0xff
> +#define ICC_PMR_DEFAULT              0xf0
> +#define ICC_IGRPEN1_EN               0x1
> +
> +#define ICC_SGIR_AFF3_SHIFT  48
> +#define ICC_SGIR_AFF2_SHIFT  32
> +#define ICC_SGIR_AFF1_SHIFT  16
> +#define ICC_SGIR_TARGET_MASK 0xffff
> +#define ICC_SGIR_IRQN_SHIFT  24
> +#define ICC_SGIR_ROUTING_BIT (1ULL << 40)
> +
> +#define ICH_HCR_EN           (1 << 0)
> +#define ICH_HCR_UIE          (1 << 1)
> +#define ICH_HCR_LRENPIE              (1 << 2)
> +#define ICH_HCR_NPIE         (1 << 3)
> +#define ICH_HCR_VGRP0EIE     (1 << 4)
> +#define ICH_HCR_VGRP0DIE     (1 << 5)
> +#define ICH_HCR_VGRP1EIE     (1 << 6)
> +#define ICH_HCR_VGRP1DIE     (1 << 7)
> +#define ICH_HCR_VARE         (1 << 9)
> +#define ICH_HCR_TC           (1 << 10)
> +#define ICH_HCR_TALL0                (1 << 11)
> +#define ICH_HCR_TALL1                (1 << 12)
> +#define ICH_HCR_TSEI         (1 << 13)
> +#define ICH_HCR_EOICount     (0x1f << 27)
> +
> +#define ICH_MISR_EOI         (1 << 0)
> +#define ICH_MISR_U           (1 << 1)
> +#define ICH_MISR_LRENP               (1 << 2)
> +#define ICH_MISR_NP          (1 << 3)
> +#define ICH_MISR_VGRP0E              (1 << 4)
> +#define ICH_MISR_VGRP0D              (1 << 5)
> +#define ICH_MISR_VGRP1E              (1 << 6)
> +#define ICH_MISR_VGRP1D              (1 << 7)
> +
> +#define ICH_VMCR_VENG0               (1 << 0)
> +#define ICH_VMCR_VENG1               (1 << 1)
> +#define ICH_VMCR_VACKCTL     (1 << 2)
> +#define ICH_VMCR_VFIQEN              (1 << 3)
> +#define ICH_VMCR_VCBPR               (1 << 4)
> +#define ICH_VMCR_VEOIM               (1 << 9)
> +#define ICH_VMCR_VBPR1_SHIFT 18
> +#define ICH_VMCR_VBPR0_SHIFT 21
> +#define ICH_VMCR_VPMR_SHIFT  24
> +
> +/* List registers upper bits */
> +#define ICH_LR_INVALID               (0x0ULL << 62)
> +#define ICH_LR_PENDING               (0x1ULL << 62)
> +#define ICH_LR_ACTIVE                (0x2ULL << 62)
> +#define ICH_LR_PENDACTIVE    (0x3ULL << 62)
> +#define ICH_LR_HW_BIT                (0x1ULL << 61)
> +#define ICH_LR_GROUP_BIT     (0x1ULL << 60)
> +#define ICH_LR_PRIORITY_SHIFT        48
> +#define ICH_LR_SGI_EOI               (0x1ULL << 41)
> +#define ICH_LR_PHYS_ID_SHIFT 32
> +
> +#ifndef __ASSEMBLY__
> +
> +#include <jailhouse/types.h>
> +
> +static inline u64 gic_read_lr(unsigned int n)
> +{
> +     u32 lr, lrc;
> +
> +     switch (n) {
> +#define __READ_LR(n)                                 \
> +     case n:                                         \
> +             arm_read_sysreg(ICH_LR##n, lr);         \
> +             arm_read_sysreg(ICH_LRC##n, lrc);       \
> +             break;
> +
> +     __READ_LR(0)
> +     __READ_LR(1)
> +     __READ_LR(2)
> +     __READ_LR(3)
> +     __READ_LR(4)
> +     __READ_LR(5)
> +     __READ_LR(6)
> +     __READ_LR(7)
> +     __READ_LR(8)
> +     __READ_LR(9)
> +     __READ_LR(10)
> +     __READ_LR(11)
> +     __READ_LR(12)
> +     __READ_LR(13)
> +     __READ_LR(14)
> +     __READ_LR(15)
> +#undef __READ_LR
> +
> +     default:
> +             return (u64)(-1);
> +     }
> +
> +     return (u64)lrc << 32 | lr;
> +}
> +
> +static inline void gic_write_lr(unsigned int n, u64 val)
> +{
> +     u32 lr = (u32)val;
> +     u32 lrc = val >> 32;
> +
> +     switch (n) {
> +#define __WRITE_LR(n)                                        \
> +     case n:                                         \
> +             arm_write_sysreg(ICH_LR##n, lr);        \
> +             arm_write_sysreg(ICH_LRC##n, lrc);      \
> +             break;
> +
> +     __WRITE_LR(0)
> +     __WRITE_LR(1)
> +     __WRITE_LR(2)
> +     __WRITE_LR(3)
> +     __WRITE_LR(4)
> +     __WRITE_LR(5)
> +     __WRITE_LR(6)
> +     __WRITE_LR(7)
> +     __WRITE_LR(8)
> +     __WRITE_LR(9)
> +     __WRITE_LR(10)
> +     __WRITE_LR(11)
> +     __WRITE_LR(12)
> +     __WRITE_LR(13)
> +     __WRITE_LR(14)
> +     __WRITE_LR(15)
> +#undef __WRITE_LR
> +     }
> +}

These two ICH_LR accessors need to stay arch-specific. Please make sure
they are pulled from an arm or arm64 header, respectively.

Jan

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jailhouse-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to