Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1936129ybg; Sun, 27 Oct 2019 07:45:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqwGU22eZgoeeetBSE3muj2GzMFPAtfgm9GQoYuUxhPyNOarxn3fpUUd81H01VZrqKZ0kjuS X-Received: by 2002:a05:6402:1acd:: with SMTP id ba13mr14365314edb.141.1572187538832; Sun, 27 Oct 2019 07:45:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572187538; cv=none; d=google.com; s=arc-20160816; b=VUaa5tb3+kRYZqwEkz5OpwjRzlyx6FD4Rq8GU6Sn7yqeZmkKeoW3P9y2Gv3VSpcHmY hp0dpjiuUzevQUgiO5qAus56TaLT5LHec0ownKFD4MAkOYd/OweECQzwlCl+sgjA3W/i pYnW9FHl4bZI1j+Bv1ZNrOXqhKOu+6kbWFli2WoargPcN5FzuA4jjCLcdL43n+Ofc3cu vD6mgrT8kJ593W4cfKhO+5j4K7r7lxD4jho8jwj/I44INsD6BbvmCDqcw2z4pFMz0NJY hTPSN1z4C+4EbhZCOK9fx6hdnPUoMx33FocfJglpotl2NaMuFgBMihtSHhAtgu5pQ2vg d3LA== 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=Txotmv8BLL1kJftajemyIx3YR/4+HKu/01DIKztssMQ=; b=NvhEGawoKcBegeRB9nWRynXps/Pfg3bBcEXHdueoNxE3B7/vPizFcQmz2Qn6vuOHhN 7CQmi+Kv4mt7CoaxXan+RtuwJA/t7J4MKJihEmV5RazbBi5IpiKzcGLriJaDwUFrQVyn THE7cZF/ivz5h+5Os46V9vj464vqwaIvhAhb/Ow1I0xnf6LpI/e4TzGbCMalQiCbOvED r91mygL1f7jKSBPv4KI7C6xPWu2xQpwNQ0uZpvDcJF1gatTNhFQgRwDBURFRfaxyfgmX K9F2tkyP5kVRKQvMIa3JlHP7OcFaT51w3GY6Hi5oievO3BeRglz8/W+cHloutcA5uZk4 l34w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="Kn6A/Uiv"; 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 ob24si4616366ejb.295.2019.10.27.07.45.15; Sun, 27 Oct 2019 07:45:38 -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="Kn6A/Uiv"; 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 S1727240AbfJ0OoF (ORCPT + 99 others); Sun, 27 Oct 2019 10:44:05 -0400 Received: from mail.kernel.org ([198.145.29.99]:37320 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727169AbfJ0OoE (ORCPT ); Sun, 27 Oct 2019 10:44:04 -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 991B521E6F; Sun, 27 Oct 2019 14:43:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572187443; bh=Ni6NIHsMM/HWqSCNNX1TVuua4AhngVWRe0mb0ZXGDjs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Kn6A/UivDt4oNDEH6S8BSpk+Lk4ziwCkDgHX9qJHspn9GwDM2TdAaIyf2rRLQH+Xv BsDY7s6O0IpmYtRJhsbugIGIjm+MnHVDke7Fau7BhTrdrl9PevZsF7kRh2pi7beS0c l28gY0hwKhbMzLP/y8sdmedB3W4eXAYinq2aaHto= 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 09/36] irqchip/gic-v3: Add GICv4.1 VPEID size discovery Date: Sun, 27 Oct 2019 14:42:07 +0000 Message-Id: <20191027144234.8395-10-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 While GICv4.0 mandates 16 bit worth of VPEIDs, GICv4.1 allows smaller implementations to be built. Add the required glue to dynamically compute the limit. Signed-off-by: Marc Zyngier --- drivers/irqchip/irq-gic-v3-its.c | 11 ++++++++++- drivers/irqchip/irq-gic-v3.c | 3 +++ include/linux/irqchip/arm-gic-v3.h | 5 +++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 94c9c2e9f917..40912b3fb0e1 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -121,7 +121,16 @@ struct its_node { #define ITS_ITT_ALIGN SZ_256 /* The maximum number of VPEID bits supported by VLPI commands */ -#define ITS_MAX_VPEID_BITS (16) +#define ITS_MAX_VPEID_BITS \ + ({ \ + int nvpeid = 16; \ + if (gic_rdists->has_rvpeid && \ + gic_rdists->gicd_typer2 & GICD_TYPER2_VIL) \ + nvpeid = 1 + (gic_rdists->gicd_typer2 & \ + GICD_TYPER2_VID); \ + \ + nvpeid; \ + }) #define ITS_MAX_VPEID (1 << (ITS_MAX_VPEID_BITS)) /* Convert page order to size in bytes */ diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index 4f20caf9bc88..50538709bd49 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -1556,6 +1556,9 @@ static int __init gic_init_bases(void __iomem *dist_base, pr_info("%d SPIs implemented\n", GIC_LINE_NR - 32); pr_info("%d Extended SPIs implemented\n", GIC_ESPI_NR); + + gic_data.rdists.gicd_typer2 = readl_relaxed(gic_data.dist_base + GICD_TYPER2); + gic_data.domain = irq_domain_create_tree(handle, &gic_irq_domain_ops, &gic_data); irq_domain_update_bus_token(gic_data.domain, DOMAIN_BUS_WIRED); diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h index c98f34296599..8c6be56da7e9 100644 --- a/include/linux/irqchip/arm-gic-v3.h +++ b/include/linux/irqchip/arm-gic-v3.h @@ -13,6 +13,7 @@ #define GICD_CTLR 0x0000 #define GICD_TYPER 0x0004 #define GICD_IIDR 0x0008 +#define GICD_TYPER2 0x000C #define GICD_STATUSR 0x0010 #define GICD_SETSPI_NSR 0x0040 #define GICD_CLRSPI_NSR 0x0048 @@ -89,6 +90,9 @@ #define GICD_TYPER_ESPIS(typer) \ (((typer) & GICD_TYPER_ESPI) ? GICD_TYPER_SPIS((typer) >> 27) : 0) +#define GICD_TYPER2_VIL (1U << 7) +#define GICD_TYPER2_VID GENMASK(4, 0) + #define GICD_IROUTER_SPI_MODE_ONE (0U << 31) #define GICD_IROUTER_SPI_MODE_ANY (1U << 31) @@ -613,6 +617,7 @@ struct rdists { void *prop_table_va; u64 flags; u32 gicd_typer; + u32 gicd_typer2; bool has_vlpis; bool has_rvpeid; bool has_direct_lpi; -- 2.20.1