From patchwork Fri Mar 9 15:11:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andre Przywara X-Patchwork-Id: 131153 Delivered-To: patch@linaro.org Received: by 10.80.194.209 with SMTP id u17csp1135683edf; Fri, 9 Mar 2018 07:14:14 -0800 (PST) X-Google-Smtp-Source: AG47ELusAym2P2NxjtYTjGf2rnmL/abu73wu5zbu6tU3FIWGECUidI1YvIWtckpU3QkHEw3vKLQ4 X-Received: by 10.107.22.1 with SMTP id 1mr37326141iow.238.1520608454343; Fri, 09 Mar 2018 07:14:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520608454; cv=none; d=google.com; s=arc-20160816; b=Annm5HeW8os2HzLMoCBotlwxw0yLhcrUsiG25T2n44l+AHUdSt4+IstbKfgkqhCTZ1 IQA/VcPDYkeEpx/oQqm3KNKDVldCjygMJELeUR/i95eerlltOMX3T+xtzLqqPYz7hc1y PoN9cJ/b28RqvkeX9vs5wWyWh/zkhwDFZV9JG+G7sTahZHmkK3fo7v3QaKaITt9IdNPC M+jRLwXPXxXA8NsgDAiao69hUHHapZ4IkpzvNQNxRceV1DCGd2fzNjRAa2m8PcIEo+16 ExtQpQnRt/ylgQK5lCB9jcD+vDes/6aJxjaqhIslmIBCw/J86zFrCAP3eufbYB95bPjR eudw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:cc:references:in-reply-to:message-id:date:to :from:dkim-signature:arc-authentication-results; bh=LuyJTS6dtSiOSQ0q+X2GYS0kUWPy32A7Vc79YxdQjTk=; b=QEoVv2uQwQC/dccQbx9R580+OR2T2ZrSO+8NCqlm3tHmJWCCVQ2IB7kQAwaxP8qy0N gIs1++7kqNWesjPZxii3orrt4Xattn9DqJGKe4hIMC0xqn01ojPvjrV/eN9NAtR9yuRR otTvkAmyzMD1uZH/Glj7KYpbpk9xDrNcqUD1MPwQtcZLjNwiGnrSPt7Q1uRDhBaAFb8M RERIO7VHegxIA7GPDEzwZFBv3ByDlTQcuoFTaFykEfuYjwPik+dgFD4Zg2vVofJHu2ik Hz+0gjnXK7XxJ+uvbP7azZDMfkmi3w4RSI4bqRIv8XMyjBOcSsHV6P70gS85nUnW8mkI j+XA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=dRdReT7G; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id 71si991772ion.319.2018.03.09.07.14.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Mar 2018 07:14:14 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=dRdReT7G; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1euJge-00063c-Be; Fri, 09 Mar 2018 15:12:00 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1euJgd-00061H-C8 for xen-devel@lists.xenproject.org; Fri, 09 Mar 2018 15:11:59 +0000 X-Inumbo-ID: 0a7a7a78-23ac-11e8-ba59-bc764e045a96 Received: from mail-wm0-x242.google.com (unknown [2a00:1450:400c:c09::242]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id 0a7a7a78-23ac-11e8-ba59-bc764e045a96; Fri, 09 Mar 2018 16:10:45 +0100 (CET) Received: by mail-wm0-x242.google.com with SMTP id z9so4470548wmb.3 for ; Fri, 09 Mar 2018 07:11:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=fYNAZuF6OT34lLDnmZmiYEzIKkPz34i7OrqWEXV6Jv8=; b=dRdReT7GYLdP3Ddn5zEFoa8R7+Z6F95BHCjriyeAIAdalVZ17qWK1sbE3FCCsT7FQR KeOsHpNiNdNNGJNDDGCbAXPQH+mJ/+2haD5PwNyc13tbYKtXlQev1XNE8elz9gBQKU1b xJxZ1VwBkDeMVXBAZaqvLIcTezEhzCSnvM5rI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fYNAZuF6OT34lLDnmZmiYEzIKkPz34i7OrqWEXV6Jv8=; b=amUOdYu/q6n8wAA/QkM8LdubKbRRw8wwaxJCknPaGNSAdLXf5a4N46AKhKuim26U0l 4u2f8hw1TKBAjoMa5QKzwY7hUIrPm8ILWpHFNSjpKMIGXITsbiS1G67QoKPmEhKQ0xE3 QGb7uigv1aIYkXSl+QSgzDOesqDdJmR5/BZchUlaMJ+9CPkPE5maHurP8FnU48zO1diH E94Mk1g6sfz8CSP7J+vaf9uRArGsaxCoAuSJJUeCIRLwhmeT/ki1z0j931Hqk7lQRG4x SKQ9ZM0ihJofKlvIYCRRxxmcpF4HyNrpNqHTHm//8KQnEy28hLUbJ912Aib6oUX3nPbw YsZA== X-Gm-Message-State: AElRT7EXSir7Lzdfl+Okndp5ebt7zFrDVjwZ+oTEIIa6+SVQPs6azTGm Q/2e0wumVZKYxoRb4rso9Gc6Bw== X-Received: by 10.28.111.198 with SMTP id c67mr2283881wmi.83.1520608316601; Fri, 09 Mar 2018 07:11:56 -0800 (PST) Received: from e104803-lin.lan (mail.andrep.de. [217.160.17.100]) by smtp.gmail.com with ESMTPSA id 1sm1721198wmj.35.2018.03.09.07.11.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 09 Mar 2018 07:11:56 -0800 (PST) From: Andre Przywara To: Stefano Stabellini , Julien Grall Date: Fri, 9 Mar 2018 15:11:29 +0000 Message-Id: <20180309151133.31371-14-andre.przywara@linaro.org> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180309151133.31371-1-andre.przywara@linaro.org> References: <20180309151133.31371-1-andre.przywara@linaro.org> Cc: xen-devel@lists.xenproject.org Subject: [Xen-devel] [PATCH 13/17] ARM: GICv3: rename HYP interface definitions to use ICH_ prefix X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" On a GICv3 in non-compat mode the hypervisor interface is always accessed via system registers. Those register names have a "ICH_" prefix in the manual, to differentiate them from the MMIO registers. Also those registers are mostly 64-bit (compared to the 32-bit GICv2 registers) and use different bit assignments. To make this obvious and to avoid clashes with double definitions using the same names for actually different bits, lets change all GICv3 hypervisor interface registers to use the "ICH_" prefix from the manual. This renames the definitions in gic_v3_defs.h and their usage in gic-v3.c and is needed to allow co-existence of the GICv2 and GICv3 definitions in the same file. Signed-off-by: Andre Przywara Acked-by: Julien Grall --- xen/arch/arm/gic-v3.c | 48 +++++++++++++++++++------------------- xen/include/asm-arm/gic_v3_defs.h | 49 +++++++++++++++++++-------------------- 2 files changed, 48 insertions(+), 49 deletions(-) diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 4acdd0ad91..8b41704cf1 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -828,14 +828,14 @@ static void gicv3_hyp_init(void) uint32_t vtr; vtr = READ_SYSREG32(ICH_VTR_EL2); - gicv3_info.nr_lrs = (vtr & GICH_VTR_NRLRGS) + 1; - gicv3.nr_priorities = ((vtr >> GICH_VTR_PRIBITS_SHIFT) & - GICH_VTR_PRIBITS_MASK) + 1; + gicv3_info.nr_lrs = (vtr & ICH_VTR_NRLRGS) + 1; + gicv3.nr_priorities = ((vtr >> ICH_VTR_PRIBITS_SHIFT) & + ICH_VTR_PRIBITS_MASK) + 1; if ( !((gicv3.nr_priorities > 4) && (gicv3.nr_priorities < 8)) ) panic("GICv3: Invalid number of priority bits\n"); - WRITE_SYSREG32(GICH_VMCR_EOI | GICH_VMCR_VENG1, ICH_VMCR_EL2); + WRITE_SYSREG32(ICH_VMCR_EOI | ICH_VMCR_VENG1, ICH_VMCR_EL2); WRITE_SYSREG32(GICH_HCR_EN, ICH_HCR_EL2); } @@ -974,21 +974,21 @@ static void gicv3_update_lr(int lr, unsigned int virq, uint8_t priority, BUG_ON(lr >= gicv3_info.nr_lrs); BUG_ON(lr < 0); - val = (((uint64_t)state & 0x3) << GICH_LR_STATE_SHIFT); + val = (((uint64_t)state & 0x3) << ICH_LR_STATE_SHIFT); /* * When the guest is GICv3, all guest IRQs are Group 1, as Group0 * would result in a FIQ in the guest, which it wouldn't expect */ if ( current->domain->arch.vgic.version == GIC_V3 ) - val |= GICH_LR_GRP1; + val |= ICH_LR_GRP1; - val |= (uint64_t)priority << GICH_LR_PRIORITY_SHIFT; - val |= ((uint64_t)virq & GICH_LR_VIRTUAL_MASK) << GICH_LR_VIRTUAL_SHIFT; + val |= (uint64_t)priority << ICH_LR_PRIORITY_SHIFT; + val |= ((uint64_t)virq & ICH_LR_VIRTUAL_MASK) << ICH_LR_VIRTUAL_SHIFT; if ( hw_irq != INVALID_IRQ ) - val |= GICH_LR_HW | (((uint64_t)hw_irq & GICH_LR_PHYSICAL_MASK) - << GICH_LR_PHYSICAL_SHIFT); + val |= ICH_LR_HW | (((uint64_t)hw_irq & ICH_LR_PHYSICAL_MASK) + << ICH_LR_PHYSICAL_SHIFT); gicv3_ich_write_lr(lr, val); } @@ -1004,25 +1004,25 @@ static void gicv3_read_lr(int lr, struct gic_lr *lr_reg) lrv = gicv3_ich_read_lr(lr); - lr_reg->pirq = (lrv >> GICH_LR_PHYSICAL_SHIFT) & GICH_LR_PHYSICAL_MASK; - lr_reg->virq = (lrv >> GICH_LR_VIRTUAL_SHIFT) & GICH_LR_VIRTUAL_MASK; + lr_reg->pirq = (lrv >> ICH_LR_PHYSICAL_SHIFT) & ICH_LR_PHYSICAL_MASK; + lr_reg->virq = (lrv >> ICH_LR_VIRTUAL_SHIFT) & ICH_LR_VIRTUAL_MASK; - lr_reg->priority = (lrv >> GICH_LR_PRIORITY_SHIFT) & GICH_LR_PRIORITY_MASK; - lr_reg->state = (lrv >> GICH_LR_STATE_SHIFT) & GICH_LR_STATE_MASK; - lr_reg->hw_status = (lrv >> GICH_LR_HW_SHIFT) & GICH_LR_HW_MASK; - lr_reg->grp = (lrv >> GICH_LR_GRP_SHIFT) & GICH_LR_GRP_MASK; + lr_reg->priority = (lrv >> ICH_LR_PRIORITY_SHIFT) & ICH_LR_PRIORITY_MASK; + lr_reg->state = (lrv >> ICH_LR_STATE_SHIFT) & ICH_LR_STATE_MASK; + lr_reg->hw_status = (lrv >> ICH_LR_HW_SHIFT) & ICH_LR_HW_MASK; + lr_reg->grp = (lrv >> ICH_LR_GRP_SHIFT) & ICH_LR_GRP_MASK; } static void gicv3_write_lr(int lr_reg, const struct gic_lr *lr) { uint64_t lrv = 0; - lrv = ( ((u64)(lr->pirq & GICH_LR_PHYSICAL_MASK) << GICH_LR_PHYSICAL_SHIFT)| - ((u64)(lr->virq & GICH_LR_VIRTUAL_MASK) << GICH_LR_VIRTUAL_SHIFT) | - ((u64)(lr->priority & GICH_LR_PRIORITY_MASK) << GICH_LR_PRIORITY_SHIFT)| - ((u64)(lr->state & GICH_LR_STATE_MASK) << GICH_LR_STATE_SHIFT) | - ((u64)(lr->hw_status & GICH_LR_HW_MASK) << GICH_LR_HW_SHIFT) | - ((u64)(lr->grp & GICH_LR_GRP_MASK) << GICH_LR_GRP_SHIFT) ); + lrv = ( ((u64)(lr->pirq & ICH_LR_PHYSICAL_MASK) << ICH_LR_PHYSICAL_SHIFT)| + ((u64)(lr->virq & ICH_LR_VIRTUAL_MASK) << ICH_LR_VIRTUAL_SHIFT) | + ((u64)(lr->priority & ICH_LR_PRIORITY_MASK) << ICH_LR_PRIORITY_SHIFT)| + ((u64)(lr->state & ICH_LR_STATE_MASK) << ICH_LR_STATE_SHIFT) | + ((u64)(lr->hw_status & ICH_LR_HW_MASK) << ICH_LR_HW_SHIFT) | + ((u64)(lr->grp & ICH_LR_GRP_MASK) << ICH_LR_GRP_SHIFT) ); gicv3_ich_write_lr(lr_reg, lrv); } @@ -1041,8 +1041,8 @@ static void gicv3_hcr_status(uint32_t flag, bool status) static unsigned int gicv3_read_vmcr_priority(void) { - return ((READ_SYSREG32(ICH_VMCR_EL2) >> GICH_VMCR_PRIORITY_SHIFT) & - GICH_VMCR_PRIORITY_MASK); + return ((READ_SYSREG32(ICH_VMCR_EL2) >> ICH_VMCR_PRIORITY_SHIFT) & + ICH_VMCR_PRIORITY_MASK); } /* Only support reading GRP1 APRn registers */ diff --git a/xen/include/asm-arm/gic_v3_defs.h b/xen/include/asm-arm/gic_v3_defs.h index bb34d17eca..ccb72cf0f1 100644 --- a/xen/include/asm-arm/gic_v3_defs.h +++ b/xen/include/asm-arm/gic_v3_defs.h @@ -160,31 +160,30 @@ #define LPI_PROP_RES1 (1 << 1) #define LPI_PROP_ENABLED (1 << 0) -#define GICH_VMCR_EOI (1 << 9) -#define GICH_VMCR_VENG1 (1 << 1) - -#define GICH_LR_VIRTUAL_MASK 0xffff -#define GICH_LR_VIRTUAL_SHIFT 0 -#define GICH_LR_PHYSICAL_MASK 0x3ff -#define GICH_LR_PHYSICAL_SHIFT 32 -#define GICH_LR_STATE_MASK 0x3 -#define GICH_LR_STATE_SHIFT 62 -#define GICH_LR_PRIORITY_MASK 0xff -#define GICH_LR_PRIORITY_SHIFT 48 -#define GICH_LR_HW_MASK 0x1 -#define GICH_LR_HW_SHIFT 61 -#define GICH_LR_GRP_MASK 0x1 -#define GICH_LR_GRP_SHIFT 60 -#define GICH_LR_MAINTENANCE_IRQ (1UL<<41) -#define GICH_LR_GRP1 (1UL<<60) -#define GICH_LR_HW (1UL<<61) - -#define GICH_VTR_NRLRGS 0x3f -#define GICH_VTR_PRIBITS_MASK 0x7 -#define GICH_VTR_PRIBITS_SHIFT 29 - -#define GICH_VMCR_PRIORITY_MASK 0xff -#define GICH_VMCR_PRIORITY_SHIFT 24 +#define ICH_VMCR_EOI (1 << 9) +#define ICH_VMCR_VENG1 (1 << 1) +#define ICH_VMCR_PRIORITY_MASK 0xff +#define ICH_VMCR_PRIORITY_SHIFT 24 + +#define ICH_LR_VIRTUAL_MASK 0xffff +#define ICH_LR_VIRTUAL_SHIFT 0 +#define ICH_LR_PHYSICAL_MASK 0x3ff +#define ICH_LR_PHYSICAL_SHIFT 32 +#define ICH_LR_STATE_MASK 0x3 +#define ICH_LR_STATE_SHIFT 62 +#define ICH_LR_PRIORITY_MASK 0xff +#define ICH_LR_PRIORITY_SHIFT 48 +#define ICH_LR_HW_MASK 0x1 +#define ICH_LR_HW_SHIFT 61 +#define ICH_LR_GRP_MASK 0x1 +#define ICH_LR_GRP_SHIFT 60 +#define ICH_LR_MAINTENANCE_IRQ (1UL<<41) +#define ICH_LR_GRP1 (1UL<<60) +#define ICH_LR_HW (1UL<<61) + +#define ICH_VTR_NRLRGS 0x3f +#define ICH_VTR_PRIBITS_MASK 0x7 +#define ICH_VTR_PRIBITS_SHIFT 29 #define ICH_SGI_IRQMODE_SHIFT 40 #define ICH_SGI_IRQMODE_MASK 0x1