From patchwork Fri Apr 8 14:15:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 558805 Delivered-To: patch@linaro.org Received: by 2002:a05:7000:6886:0:0:0:0 with SMTP id m6csp363143map; Fri, 8 Apr 2022 07:17:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyHMG3jk2oJDtgy/sy2KFN6yXYRMHCVb1Rz8mZPEpNzPSFasXms0rxYCe2j5tHy0AeLOmji X-Received: by 2002:a81:b51:0:b0:2eb:c585:1622 with SMTP id 78-20020a810b51000000b002ebc5851622mr7477330ywl.288.1649427467762; Fri, 08 Apr 2022 07:17:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1649427467; cv=none; d=google.com; s=arc-20160816; b=JDOyhvzS+lyBjmzuYJAvGIaaGQBQjFuQMy59v40cwXYZfpraFwky8W5jz+JTy5DmUV vmF6Bn/MlD77kv/SctQViWDHNDjjQv2UwXpXtb7z8c0UfhMUc/qhMAeaJFsMGVjLGDxj u4oDRL1ZaSY4H/+nhbvrnL8Ko4Org7RUEzU7zChYlgkPecgTnBPfNdwianN5xEXrNNaA uHj/EPLgDI/H3q8HYUYkO+eZ1S9p92zHBHvYz8rBZbM6sQ7h6e8oPwbIpLgelrVxc1Nk 5rLOB2yrb5Q6ZZ2muWd5BI0wiWsqjMN1tipg/3waZv9wI2ezBjxLBrAcXdLXPwYo14JJ r2+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=UgfSynmK+XRGptalQdPXQzCZuxEoEEBnalXv3aPbwZY=; b=VYH/HHOsKtnpU0xW82OfhxhLrORlEL4QtdabYteBhilxgbix9xEx6kg6K8KJB+tsFr BmA4p4QJOWMFfYsYhM6Ev8MWdxzBIMO+V4BiUxFW0Kxqkatf5GeVM+Ff8xs6+brBvSBW FyVd4+ASO5tsr3b+bcjasGP+OaQ+7MJLoD3YuKjzB1EwyJYZHtg0x4VMr7HrNGVOtkIR 6o32VvbYaYHG+dtUJ9M2Z6F1MadA3KTdeNU32oiEtTDyUTEukN37+9i3I9mQkgy33xUD ANDY4bnE89BPlaZ1GrTNwYq8Exbs7GM7doTrI1YlqqyLOlGC1c056rMYql5Qv7nLHaY6 MBcw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=gQzwbiEh; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id x14-20020a056902050e00b0063e09e24be5si509478ybs.347.2022.04.08.07.17.47 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 08 Apr 2022 07:17:47 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=gQzwbiEh; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:36972 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ncpQp-0007sZ-8W for patch@linaro.org; Fri, 08 Apr 2022 10:17:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41990) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ncpP9-0006id-My for qemu-devel@nongnu.org; Fri, 08 Apr 2022 10:16:04 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]:35805) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ncpP6-0002EY-Nx for qemu-devel@nongnu.org; Fri, 08 Apr 2022 10:16:03 -0400 Received: by mail-wr1-x42c.google.com with SMTP id w21so13099140wra.2 for ; Fri, 08 Apr 2022 07:15:59 -0700 (PDT) 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 :mime-version:content-transfer-encoding; bh=UgfSynmK+XRGptalQdPXQzCZuxEoEEBnalXv3aPbwZY=; b=gQzwbiEhxW2ctyavl5c2Va78Jbm8JD+zZBWO5BvXZpyN7n5UeVTCN6iGyfh6ZcxscR R707bFNIfpI4DCeMb2grDRd2KovU4U+mWnkpE/UezN+o9ITLPNRTxlELEvyw5BPsN494 P7RuJ1eUGiRYimWg/PfojWZwuAKEX/fHyL7X4bM78RZWWnCCy2gVWXM+RdgEh3qcnBXP CBudLoypJCrEi/5rF6aKcXfzQI9m0sRf5bJXwVnhbxFhytFKN0ASQCD3PZuiSIF1gtcY rs92+KI/MckIZepJaGsINmHoYg8pNAvjBzcEIghCMadGuhTqr5QxBeDu/jFb4hk4P6kr fF4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UgfSynmK+XRGptalQdPXQzCZuxEoEEBnalXv3aPbwZY=; b=oaw2K2CPIsN0evTMTgBFu5ET93uIPEnTX2f1yyfhOzq0WYkvasCEQjeLY4oMADkejm KTtAfHXKKdmKsr/jrnimhk95Dgz3gu7cjuUfzc0Qit2Rn/JwEfebioiwlAExltgztqwD rTj96Hr2mU5mabQzz7vvuGv7n07T5el9/d8fKGZGYZ794hB0Pu2qawcWtYvTEwpYL5XJ G7OlVq4aYzx3Fw4ANgKRWLkiqTdfB7F1lz1UGob3045lJIeEm47JGD+C35V1gJEScTEn xWpXi3DDnFyPWnBQFZuXaTl6HcA/w2dm7GZuFv4VUp4rm9PxkycoEC9oSkoePxWqBAWE cXFA== X-Gm-Message-State: AOAM531B9IJxSMxeFdAIOhBWjYYR9T4uJInTqdHJgzsuozvx7p1D5a6r EnPoHbFeXJxKUCEj+2/Tp0/CTg== X-Received: by 2002:adf:ce83:0:b0:206:c45:62bd with SMTP id r3-20020adfce83000000b002060c4562bdmr14264723wrn.97.1649427358275; Fri, 08 Apr 2022 07:15:58 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id i3-20020adffc03000000b0020616ee90dbsm11498849wrr.42.2022.04.08.07.15.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Apr 2022 07:15:57 -0700 (PDT) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Subject: [PATCH 04/41] hw/intc/arm_gicv3: Report correct PIDR0 values for ID registers Date: Fri, 8 Apr 2022 15:15:13 +0100 Message-Id: <20220408141550.1271295-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220408141550.1271295-1-peter.maydell@linaro.org> References: <20220408141550.1271295-1-peter.maydell@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::42c; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Marc Zyngier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" We use the common function gicv3_idreg() to supply the CoreSight ID register values for the GICv3 for the copies of these ID registers in the distributor, redistributor and ITS register frames. This isn't quite correct, because while most of the register values are the same, the PIDR0 value should vary to indicate which of these three frames it is. (You can see this and also the correct values of these PIDR0 registers by looking at the GIC-600 or GIC-700 TRMs, for example.) Make gicv3_idreg() take an extra argument for the PIDR0 value. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- hw/intc/gicv3_internal.h | 15 +++++++++++++-- hw/intc/arm_gicv3_dist.c | 2 +- hw/intc/arm_gicv3_its.c | 2 +- hw/intc/arm_gicv3_redist.c | 2 +- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hw/intc/gicv3_internal.h b/hw/intc/gicv3_internal.h index 2bf1baef047..dec413f7cfa 100644 --- a/hw/intc/gicv3_internal.h +++ b/hw/intc/gicv3_internal.h @@ -555,7 +555,12 @@ static inline uint32_t gicv3_iidr(void) return 0x43b; } -static inline uint32_t gicv3_idreg(int regoffset) +/* CoreSight PIDR0 values for ARM GICv3 implementations */ +#define GICV3_PIDR0_DIST 0x92 +#define GICV3_PIDR0_REDIST 0x93 +#define GICV3_PIDR0_ITS 0x94 + +static inline uint32_t gicv3_idreg(int regoffset, uint8_t pidr0) { /* Return the value of the CoreSight ID register at the specified * offset from the first ID register (as found in the distributor @@ -565,7 +570,13 @@ static inline uint32_t gicv3_idreg(int regoffset) static const uint8_t gicd_ids[] = { 0x44, 0x00, 0x00, 0x00, 0x92, 0xB4, 0x3B, 0x00, 0x0D, 0xF0, 0x05, 0xB1 }; - return gicd_ids[regoffset / 4]; + + regoffset /= 4; + + if (regoffset == 4) { + return pidr0; + } + return gicd_ids[regoffset]; } /** diff --git a/hw/intc/arm_gicv3_dist.c b/hw/intc/arm_gicv3_dist.c index 28d913b2114..7f6275363ea 100644 --- a/hw/intc/arm_gicv3_dist.c +++ b/hw/intc/arm_gicv3_dist.c @@ -557,7 +557,7 @@ static bool gicd_readl(GICv3State *s, hwaddr offset, } case GICD_IDREGS ... GICD_IDREGS + 0x2f: /* ID registers */ - *data = gicv3_idreg(offset - GICD_IDREGS); + *data = gicv3_idreg(offset - GICD_IDREGS, GICV3_PIDR0_DIST); return true; case GICD_SGIR: /* WO registers, return unknown value */ diff --git a/hw/intc/arm_gicv3_its.c b/hw/intc/arm_gicv3_its.c index 44914f25780..f8467b61ec5 100644 --- a/hw/intc/arm_gicv3_its.c +++ b/hw/intc/arm_gicv3_its.c @@ -1161,7 +1161,7 @@ static bool its_readl(GICv3ITSState *s, hwaddr offset, break; case GITS_IDREGS ... GITS_IDREGS + 0x2f: /* ID registers */ - *data = gicv3_idreg(offset - GITS_IDREGS); + *data = gicv3_idreg(offset - GITS_IDREGS, GICV3_PIDR0_ITS); break; case GITS_TYPER: *data = extract64(s->typer, 0, 32); diff --git a/hw/intc/arm_gicv3_redist.c b/hw/intc/arm_gicv3_redist.c index 412a04f59cf..dc9729e8395 100644 --- a/hw/intc/arm_gicv3_redist.c +++ b/hw/intc/arm_gicv3_redist.c @@ -234,7 +234,7 @@ static MemTxResult gicr_readl(GICv3CPUState *cs, hwaddr offset, *data = cs->gicr_nsacr; return MEMTX_OK; case GICR_IDREGS ... GICR_IDREGS + 0x2f: - *data = gicv3_idreg(offset - GICR_IDREGS); + *data = gicv3_idreg(offset - GICR_IDREGS, GICV3_PIDR0_REDIST); return MEMTX_OK; default: return MEMTX_ERROR;