Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1938218ybg; Sun, 27 Oct 2019 07:48:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqxiul3W1NZMHiA05l6I5gVno9JUUsNNZnCD9ZRobjGvXA1H4PBqg1SXwmrwiT36VMFwafZN X-Received: by 2002:aa7:d582:: with SMTP id r2mr8307722edq.193.1572187706888; Sun, 27 Oct 2019 07:48:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572187706; cv=none; d=google.com; s=arc-20160816; b=bJd1WLNZE5G1SebJUVO/5MHykVnxWGWJpy1OWzdD9ZZsCbaQnv7tD4Rej8KvEMuIo/ h8Ybw0bYJ/Gw7mpoGmJQbcmoVuLOEbmEt9QJmxK7WFMZK7eQBx7KaD9UGitNIblCmPip DqhbuyBs9ufmA4GWItmWXlqxNFu8P0nCcmkPAcDFUQLDeKrwFEYWHBNf1c910kz82zLx pDglVeaDb9Sd91XObDF+sHtNPLCuDusL/BdoKg45W9AYlqAF5OC1RftywXzWP0BiadhF fRTMekv8f4AFdJJfUqLJVxf9IR9k9o6qLcwdAGBQ+J/kdUkFu9rf9U/9loOKlVYVz3BV AvxQ== 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=00GWJ+zl+2bRPwO+W+JqVAVZe/E8AosFgnAZYYGMwx4=; b=kdK1fxqEnlG2NQE11q5c0nQ+Thcofy8WMJTY+/6wN/j3R7YPe1WAl1f6hZsUjvDNcS 31jSBpL2JaYfALLyp/ECThr/LFF8Idnuc6eO4x/qXPq4N0n98f888PQCYfTlOOxccE6V qViu2qBOGrTK1pD2vA8LP3Qw90ZAPpbE7GjbkgZRDRAPe5aom6+VGRUHtID7fjz1IwaC WP7oOtc3bF7QTTitQ3twy1ichSMph5/pDYoWeeNhsDSYQjGGZqKobXu2Wbqs79nz2bS5 IUQLUixdauoses5ePP7E+le9/fFsrPgyi3HdmbMjYqEPHN5NB/6yEhfqLHCkSV3Ho+jV ysWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=TD9ZKXzn; 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 c11si3627956edb.425.2019.10.27.07.48.03; Sun, 27 Oct 2019 07:48:26 -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=TD9ZKXzn; 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 S1727322AbfJ0Oon (ORCPT + 99 others); Sun, 27 Oct 2019 10:44:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:37832 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726944AbfJ0Oon (ORCPT ); Sun, 27 Oct 2019 10:44:43 -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 A0DF4214AF; Sun, 27 Oct 2019 14:44:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572187482; bh=hs2nwn07oy+s0UfoqrxrS6DXQmYU6agBSrXljPfGE/w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TD9ZKXznkULRWZ9s7Jeyh1O8qBOcFm+euTuml9VcPsnqJnw2JEcGhXR0Bi8nM1Eq4 1sWZsKscuWv8c44r76xkEUAzOf27H45+xkyfYbCZsmYXDHSwVUmZilY/bj6n1wFk22 rJRzLv1/o9MAZZr878TjhIiXMexfYxi6Vrque9zw= 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 15/36] irqchip/gic-v4.1: Plumb skeletal VPE irqchip Date: Sun, 27 Oct 2019 14:42:13 +0000 Message-Id: <20191027144234.8395-16-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 Just like for GICv4.0, each VPE has its own doorbell interrupt, and thus an irqchip that manages them. Since the doorbell management is quite different on GICv4.1, let's introduce an almost empty irqchip the will get populated over the next new patches. Signed-off-by: Marc Zyngier --- drivers/irqchip/irq-gic-v3-its.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index b5a122093a46..dcc7227af5f1 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -3408,6 +3408,32 @@ static struct irq_chip its_vpe_irq_chip = { .irq_set_vcpu_affinity = its_vpe_set_vcpu_affinity, }; +static int its_vpe_4_1_set_vcpu_affinity(struct irq_data *d, void *vcpu_info) +{ + struct its_cmd_info *info = vcpu_info; + + switch (info->cmd_type) { + case SCHEDULE_VPE: + return 0; + + case DESCHEDULE_VPE: + return 0; + + case INVALL_VPE: + return 0; + + default: + return -EINVAL; + } +} + +static struct irq_chip its_vpe_4_1_irq_chip = { + .name = "GICv4.1-vpe", + .irq_eoi = irq_chip_eoi_parent, + .irq_set_affinity = its_vpe_set_affinity, + .irq_set_vcpu_affinity = its_vpe_4_1_set_vcpu_affinity, +}; + static int its_vpe_id_alloc(void) { return ida_simple_get(&its_vpeid_ida, 0, ITS_MAX_VPEID, GFP_KERNEL); @@ -3488,6 +3514,7 @@ static void its_vpe_irq_domain_free(struct irq_domain *domain, static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs, void *args) { + struct irq_chip *irqchip = &its_vpe_irq_chip; struct its_vm *vm = args; unsigned long *bitmap; struct page *vprop_page; @@ -3515,6 +3542,9 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq vm->nr_db_lpis = nr_ids; vm->vprop_page = vprop_page; + if (gic_rdists->has_rvpeid) + irqchip = &its_vpe_4_1_irq_chip; + for (i = 0; i < nr_irqs; i++) { vm->vpes[i]->vpe_db_lpi = base + i; err = its_vpe_init(vm->vpes[i]); @@ -3525,7 +3555,7 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *domain, unsigned int virq if (err) break; irq_domain_set_hwirq_and_chip(domain, virq + i, i, - &its_vpe_irq_chip, vm->vpes[i]); + irqchip, vm->vpes[i]); set_bit(i, bitmap); } -- 2.20.1