Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1936189ybg; Sun, 27 Oct 2019 07:45:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqx3ILeMQbokda0SThG8eAa1NF1wzcyOicS1GAd41EVU8BiaCQsXjiGLBJSLawlSykOEmueU X-Received: by 2002:a50:fa03:: with SMTP id b3mr5185501edq.173.1572187543652; Sun, 27 Oct 2019 07:45:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572187543; cv=none; d=google.com; s=arc-20160816; b=aHJgYy9enHTR9aB9gqUz3QFlqHQ38zcpACfYKI0DfoRv200DeuPaxxxqYnXlbajE4c PjCWDDSJihDVFkh8ZF4PdsF3mDQlOhaRqQEr/Bcixf2Kp+en/TgpafRjOq84Cx/2YGPQ ZF9EosLgr3GjA2AZeEf2AZmx68e9GGxfhliiiySTl47PpN/7wHxKc1qxHhgSQ2VEZczG npL8AiMkbAp7Yy8nLdZEtSELsslY5OCPikJNM2M++DYoWLFJGTJ6P3rMsZKx0KXoI3bw HbRUHRW3aP9iYKpCB0zY3UqkZgxoXVqOwRO7UvGGbMDJTHbwM/2QAvZ6Sbux5qOcw3hB iAiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=tDBzPFgDnbITsmFspUE3pdOP6j9xevL3j82Z33zYZYw=; b=oCYf+HI5dNojwDmhNDBe1L06OlMXqU2KQYrZ2fZKTqFSNSepNbZeQP7j/QLPL1l39p BKvdCOP6NcqgHFIqTcz066M0b+BmU3ZvXMmpAUuG7+fFPvipZPjtPE9C/bChxa57ovRb GAjMFesQ+dnIwvY9+SF/XrR14pGura5rpwvp4hOvlOO8gtjzNxT/X2J6aqoDh919IfI7 8mTKV+4ooVmK7Lxt2L6xIUPMF8n/xH3n7iIoBEic2oVrBZdpJCV9pIFArDsxrkRgjJSc d34NmhcCeCaE7yh4FuYLrBCWlLyqAl7+3/p8egT96O9kLunwm7g1DKF0rcpU3cXnBFu/ ig+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VPW71Mfw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g6si2604561edk.210.2019.10.27.07.45.20; Sun, 27 Oct 2019 07:45:43 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=VPW71Mfw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727228AbfJ0OoE (ORCPT + 99 others); Sun, 27 Oct 2019 10:44:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:37190 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727195AbfJ0On4 (ORCPT ); Sun, 27 Oct 2019 10:43:56 -0400 Received: from localhost.localdomain (82-132-239-15.dab.02.net [82.132.239.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2B2F7214AF; Sun, 27 Oct 2019 14:43:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572187435; bh=CA+V3kafszvCceUU78xM+0W20S+ptHDqrXrmDcJtEwY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VPW71MfwQJvuMjNgpQR+ACqb6XGn2ae4zV+y4YRW5iiAi5NX8kgmg4DYzwwTvZTx1 1bW89oezeoNk0kPywF5wV8svGegI48vOyPU4LaGG+Mv3vbFrULE63CZdiO5EqQTFnt bSHTYSa8dy8DDhcl+pHDn6c9SiIjDYOgkZ0QFXYo= From: Marc Zyngier To: kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org Cc: Eric Auger , James Morse , Julien Thierry , Suzuki K Poulose , Thomas Gleixner , Jason Cooper , Lorenzo Pieralisi , Andrew Murray , Zenghui Yu , Jayachandran C , Robert Richter Subject: [PATCH v2 08/36] irqchip/gic-v3: Detect GICv4.1 supporting RVPEID Date: Sun, 27 Oct 2019 14:42:06 +0000 Message-Id: <20191027144234.8395-9-maz@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191027144234.8395-1-maz@kernel.org> References: <20191027144234.8395-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org GICv4.1 supports the RVPEID ("Residency per vPE ID"), which allows for a much efficient way of making virtual CPUs resident (to allow direct injection of interrupts). The functionnality needs to be discovered on each and every redistributor in the system, and disabled if the settings are inconsistent. Signed-off-by: Marc Zyngier --- drivers/irqchip/irq-gic-v3.c | 21 ++++++++++++++++++--- include/linux/irqchip/arm-gic-v3.h | 2 ++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index 1edc99335a94..4f20caf9bc88 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -849,8 +849,21 @@ static int __gic_update_rdist_properties(struct redist_region *region, void __iomem *ptr) { u64 typer = gic_read_typer(ptr + GICR_TYPER); + gic_data.rdists.has_vlpis &= !!(typer & GICR_TYPER_VLPIS); - gic_data.rdists.has_direct_lpi &= !!(typer & GICR_TYPER_DirectLPIS); + + /* RVPEID implies some form of DirectLPI, no matter what the doc says... :-/ */ + gic_data.rdists.has_rvpeid &= !!(typer & GICR_TYPER_RVPEID); + gic_data.rdists.has_direct_lpi &= (!!(typer & GICR_TYPER_DirectLPIS) | + gic_data.rdists.has_rvpeid); + + /* Detect non-sensical configurations */ + if (WARN_ON_ONCE(gic_data.rdists.has_rvpeid && !gic_data.rdists.has_vlpis)) { + gic_data.rdists.has_direct_lpi = false; + gic_data.rdists.has_vlpis = false; + gic_data.rdists.has_rvpeid = false; + } + gic_data.ppi_nr = min(GICR_TYPER_NR_PPIS(typer), gic_data.ppi_nr); return 1; @@ -863,9 +876,10 @@ static void gic_update_rdist_properties(void) if (WARN_ON(gic_data.ppi_nr == UINT_MAX)) gic_data.ppi_nr = 0; pr_info("%d PPIs implemented\n", gic_data.ppi_nr); - pr_info("%sVLPI support, %sdirect LPI support\n", + pr_info("%sVLPI support, %sdirect LPI support, %sRVPEID support\n", !gic_data.rdists.has_vlpis ? "no " : "", - !gic_data.rdists.has_direct_lpi ? "no " : ""); + !gic_data.rdists.has_direct_lpi ? "no " : "", + !gic_data.rdists.has_rvpeid ? "no " : ""); } /* Check whether it's single security state view */ @@ -1546,6 +1560,7 @@ static int __init gic_init_bases(void __iomem *dist_base, &gic_data); irq_domain_update_bus_token(gic_data.domain, DOMAIN_BUS_WIRED); gic_data.rdists.rdist = alloc_percpu(typeof(*gic_data.rdists.rdist)); + gic_data.rdists.has_rvpeid = true; gic_data.rdists.has_vlpis = true; gic_data.rdists.has_direct_lpi = true; diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h index b6514e8893bf..c98f34296599 100644 --- a/include/linux/irqchip/arm-gic-v3.h +++ b/include/linux/irqchip/arm-gic-v3.h @@ -234,6 +234,7 @@ #define GICR_TYPER_VLPIS (1U << 1) #define GICR_TYPER_DirectLPIS (1U << 3) #define GICR_TYPER_LAST (1U << 4) +#define GICR_TYPER_RVPEID (1U << 7) #define GIC_V3_REDIST_SIZE 0x20000 @@ -613,6 +614,7 @@ struct rdists { u64 flags; u32 gicd_typer; bool has_vlpis; + bool has_rvpeid; bool has_direct_lpi; }; -- 2.20.1