Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1301821ybn; Wed, 25 Sep 2019 15:59:38 -0700 (PDT) X-Google-Smtp-Source: APXvYqwArF9FsjvVlHXY3az5lSZTd1tuYT9x6eBhiZHm/+xXMrtS7cIHJ/Yi6uFI+52CMTTYio2u X-Received: by 2002:a17:906:1cc6:: with SMTP id i6mr572265ejh.40.1569452378040; Wed, 25 Sep 2019 15:59:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569452378; cv=none; d=google.com; s=arc-20160816; b=CDUpKhJE+ti1qSO0Pf+dcCIP38XYGlp9lklAosjHuaZpaTqoocTrXra3tIcDE4R5uX Rt1NdDcGRi1eYK8+t9O7AVZ+pCye2lGD0tVVM+WPw8pD5LGUWGPIdDy6pBYsau6MULh+ W4iQlvQAyjJOeRNwdkckz8IfV9loCeiT5ZY5smnwNDj11UwQDiNCIQil7ZT/z/PC1oC7 2QCyBL+yLLervRvYnxkmrjvJRw8C6ZEwbTY4eB50PzxTIh704HeUysJx4AW0nTGbGRDn UmER2pawrl8DEbNvu8kndFLhbuixk/Qj1MiTWOcnYESusbmPj3rw0Va/9gFXKNe7tGlg GieQ== 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; bh=1vpFgfjc1JfjmMca29AjOIxb5onDGs68CI2LTY6ELTU=; b=vnFV9f7bnW8kP9I39NqDyVuTbBO0DU+drtx1YxZJbfHWqB7os4N7KjOOaYcX9yIw/j a14qE1TAUSwTRkL1VimDT+k3Tq70rxnebE0HjE5I5Ayot4sdPLd4LIV8r3pAHG2QLSWe eqTQDbdO81QXQ08zYc2iklWUQWjwOq2l6gzuqsOQpDUip5g3RE/Z9/3wR6b2VI+ThQ7L 8IQs9mFiXTNtcMRHCn9hqI57S3JN3gwDl4ea4LrqDPbR6G6X79FNj5mulT/coLiqMa0a s9yPGjdOqgUsUHYp/9HMRMWAZyIrnxmqJ6VtrnQBRge0CD+ZAbOkjDLadqZbYahHyKyR Ytyw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (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 b42si269243eda.367.2019.09.25.15.59.14; Wed, 25 Sep 2019 15:59: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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502225AbfIWS0v (ORCPT + 99 others); Mon, 23 Sep 2019 14:26:51 -0400 Received: from foss.arm.com ([217.140.110.172]:46730 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2438244AbfIWS0u (ORCPT ); Mon, 23 Sep 2019 14:26:50 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BE3AA1682; Mon, 23 Sep 2019 11:26:49 -0700 (PDT) Received: from big-swifty.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F2D6E3F694; Mon, 23 Sep 2019 11:26:46 -0700 (PDT) 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 Subject: [PATCH 06/35] irqchip/gic-v3-its: Make is_v4 use a TYPER copy Date: Mon, 23 Sep 2019 19:25:37 +0100 Message-Id: <20190923182606.32100-7-maz@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190923182606.32100-1-maz@kernel.org> References: <20190923182606.32100-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 Instead of caching the GICv4 compatibility in a discrete way, cache the TYPER register instead, which can then be used to implement the same functionnality. This will get used more extensively in subsequent patches. Signed-off-by: Marc Zyngier --- drivers/irqchip/irq-gic-v3-its.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 17b77a0b9d97..731726540efa 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -102,6 +102,7 @@ struct its_node { struct its_collection *collections; struct fwnode_handle *fwnode_handle; u64 (*get_msi_base)(struct its_device *its_dev); + u64 typer; u64 cbaser_save; u32 ctlr_save; struct list_head its_device_list; @@ -112,10 +113,11 @@ struct its_node { int numa_node; unsigned int msi_domain_flags; u32 pre_its_base; /* for Socionext Synquacer */ - bool is_v4; int vlpi_redist_offset; }; +#define is_v4(its) (!!((its)->typer & GITS_TYPER_VLPIS)) + #define ITS_ITT_ALIGN SZ_256 /* The maximum number of VPEID bits supported by VLPI commands */ @@ -1028,7 +1030,7 @@ static void its_send_vmovp(struct its_vpe *vpe) /* Emit VMOVPs */ list_for_each_entry(its, &its_nodes, entry) { - if (!its->is_v4) + if (!is_v4(its)) continue; if (!vpe->its_vm->vlpi_count[its->list_nr]) @@ -1439,7 +1441,7 @@ static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info) struct its_cmd_info *info = vcpu_info; /* Need a v4 ITS */ - if (!its_dev->its->is_v4) + if (!is_v4(its_dev->its)) return -EINVAL; /* Unmap request? */ @@ -2403,7 +2405,7 @@ static bool its_alloc_vpe_table(u32 vpe_id) list_for_each_entry(its, &its_nodes, entry) { struct its_baser *baser; - if (!its->is_v4) + if (!is_v4(its)) continue; baser = its_get_baser(its, GITS_BASER_TYPE_VCPU); @@ -2891,7 +2893,7 @@ static void its_vpe_invall(struct its_vpe *vpe) struct its_node *its; list_for_each_entry(its, &its_nodes, entry) { - if (!its->is_v4) + if (!is_v4(its)) continue; if (its_list_map && !vpe->its_vm->vlpi_count[its->list_nr]) @@ -3158,7 +3160,7 @@ static int its_vpe_irq_domain_activate(struct irq_domain *domain, vpe->col_idx = cpumask_first(cpu_online_mask); list_for_each_entry(its, &its_nodes, entry) { - if (!its->is_v4) + if (!is_v4(its)) continue; its_send_vmapp(its, vpe, true); @@ -3184,7 +3186,7 @@ static void its_vpe_irq_domain_deactivate(struct irq_domain *domain, return; list_for_each_entry(its, &its_nodes, entry) { - if (!its->is_v4) + if (!is_v4(its)) continue; its_send_vmapp(its, vpe, false); @@ -3622,12 +3624,12 @@ static int __init its_probe_one(struct resource *res, INIT_LIST_HEAD(&its->entry); INIT_LIST_HEAD(&its->its_device_list); typer = gic_read_typer(its_base + GITS_TYPER); + its->typer = typer; its->base = its_base; its->phys_base = res->start; its->ite_size = GITS_TYPER_ITT_ENTRY_SIZE(typer); its->device_ids = GITS_TYPER_DEVBITS(typer); - its->is_v4 = !!(typer & GITS_TYPER_VLPIS); - if (its->is_v4) { + if (is_v4(its)) { if (!(typer & GITS_TYPER_VMOVP)) { err = its_compute_its_list_map(res, its_base); if (err < 0) @@ -3694,7 +3696,7 @@ static int __init its_probe_one(struct resource *res, gits_write_cwriter(0, its->base + GITS_CWRITER); ctlr = readl_relaxed(its->base + GITS_CTLR); ctlr |= GITS_CTLR_ENABLE; - if (its->is_v4) + if (is_v4(its)) ctlr |= GITS_CTLR_ImDe; writel_relaxed(ctlr, its->base + GITS_CTLR); @@ -4019,7 +4021,7 @@ int __init its_init(struct fwnode_handle *handle, struct rdists *rdists, return err; list_for_each_entry(its, &its_nodes, entry) - has_v4 |= its->is_v4; + has_v4 |= is_v4(its); if (has_v4 & rdists->has_vlpis) { if (its_init_vpe_domain() || -- 2.20.1