Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp4926795imm; Tue, 16 Oct 2018 02:16:16 -0700 (PDT) X-Google-Smtp-Source: ACcGV62v/90BqkY6FUtJc6PGJYzjm17iSAa93ANv6Bsb0tQz/iTf6N6eUQHlV1Jaw5w/eDoF8qCp X-Received: by 2002:a63:d84a:: with SMTP id k10-v6mr19470409pgj.314.1539681376012; Tue, 16 Oct 2018 02:16:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539681375; cv=none; d=google.com; s=arc-20160816; b=DrFWEECWRlAo+YZlAnXzwlf6d3DSXTdYPvw93k0QUTfdesnlKff9afGNoXmHzpvpgt 2SMwx6d4bSMApl28hGiRLftWEdRIy5x+XHCyByiy9EaV+d+YGY2Fwm97+KyKUEu/CXZJ m21ErZB6+Vhhl6x+APktmvO5VAhsz/2vx5VOpx93SoVAyPCJSxN2Az0hahSOU5xNspqf OnMAto1GMOqSQF7CDSQq5lPaJib75Omv1IrSV3ScH3w12GWs9PgfvrpKukkLeHayJxBv WVC1Uh1PM9yhfk8mWOeU7CMoY1H2H0jcpueCgQY1jaLk8Dt/kQBGlZBxh9zcvodaDCUd hQlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=cIF05uHpnjArfYYg5z4yMn6xt4hekLOCV4ykEuavm7o=; b=DRZzbzyRVsZZULvAXakkfz47TfmKZno5/MHLuacP+z0zxjSckZxqNmz6v+T05IzweJ Iw4uqvrRPJZe0xm0hPoNcKdcquXYkK378H7R8aRquZ0PGsH0uXhreeP0S6BlqJlLQAXp 6d3yhLKcFWaaBFvp105c4V0P1rbSlKAghRO88q7WKyGeEb5r/ClMd4IXgIHjE4yOHxl1 sFx9jBR0zxCngIW7ZDA3aLpriUx2krpexhLDqLxX683jOxOiKCXU83GxkG6+D3Zx1VPs SIFtDhRVskXgs2kbAZpg6nF6whNuFvrEiiYwHYeV0GQozyksDnYRAnsCuXowF+tqDCkQ nkeg== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t11-v6si12827182plq.280.2018.10.16.02.16.00; Tue, 16 Oct 2018 02:16:15 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727212AbeJPRFA (ORCPT + 99 others); Tue, 16 Oct 2018 13:05:00 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:14082 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726083AbeJPRE7 (ORCPT ); Tue, 16 Oct 2018 13:04:59 -0400 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id AC0A3E32A711F; Tue, 16 Oct 2018 17:15:27 +0800 (CST) Received: from localhost (10.177.19.219) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.399.0; Tue, 16 Oct 2018 17:15:21 +0800 From: Yang Yingliang To: , CC: , , , Subject: [PATCH 3/4] irqchip/mbigen: add support for a MBIGEN generating SPIs Date: Tue, 16 Oct 2018 17:15:15 +0800 Message-ID: <1539681316-19300-4-git-send-email-yangyingliang@huawei.com> X-Mailer: git-send-email 1.9.5.msysgit.1 In-Reply-To: <1539681316-19300-1-git-send-email-yangyingliang@huawei.com> References: <1539681316-19300-1-git-send-email-yangyingliang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.177.19.219] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now with 5052875 ("irqchip/gic-v3: Add support for Message Based Interrupts as an MSI controller"), we can support MBIGEN to generate message based SPIs by writing GICD_SETSPIR. The first 64-pins of each MBIGEN chip is used to generate SPIs, and each MBIGEN chip has several MBIGEN nodes, every node has 128 pins for generating LPIs. The total pins are: 64(SPIs) + 128 * node_nr(LPIs). So we can translate the pin index in a unified way in mbigen_domain_translate(). Also Add TYPE and VEC registers that used by generating SPIs, the driver can access them when MBIGEN is used to generate SPIs. Signed-off-by: Yang Yingliang --- drivers/irqchip/irq-mbigen.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c index f05998f..37c1932 100644 --- a/drivers/irqchip/irq-mbigen.c +++ b/drivers/irqchip/irq-mbigen.c @@ -48,6 +48,7 @@ #define MBIGEN_NODE_OFFSET 0x1000 /* offset of vector register in mbigen node */ +#define REG_MBIGEN_SPI_VEC_OFFSET 0x500 #define REG_MBIGEN_LPI_VEC_OFFSET 0x200 /** @@ -62,6 +63,7 @@ * This register is used to configure interrupt * trigger type */ +#define REG_MBIGEN_SPI_TYPE_OFFSET 0x400 #define REG_MBIGEN_LPI_TYPE_OFFSET 0x0 /** @@ -79,6 +81,9 @@ static inline unsigned int get_mbigen_vec_reg(irq_hw_number_t hwirq) { unsigned int nid, pin; + if (hwirq < SPI_NUM_PER_MBIGEN_CHIP) + return (hwirq * 4 + REG_MBIGEN_SPI_VEC_OFFSET); + hwirq -= SPI_NUM_PER_MBIGEN_CHIP; nid = hwirq / IRQS_PER_MBIGEN_NODE + 1; pin = hwirq % IRQS_PER_MBIGEN_NODE; @@ -92,6 +97,13 @@ static inline void get_mbigen_type_reg(irq_hw_number_t hwirq, { unsigned int nid, irq_ofst, ofst; + if (hwirq < SPI_NUM_PER_MBIGEN_CHIP) { + *mask = 1 << (hwirq % 32); + ofst = hwirq / 32 * 4; + *addr = ofst + REG_MBIGEN_SPI_TYPE_OFFSET; + return; + } + hwirq -= SPI_NUM_PER_MBIGEN_CHIP; nid = hwirq / IRQS_PER_MBIGEN_NODE + 1; irq_ofst = hwirq % IRQS_PER_MBIGEN_NODE; @@ -162,6 +174,12 @@ static void mbigen_write_msg(struct msi_desc *desc, struct msi_msg *msg) u32 val; base += get_mbigen_vec_reg(d->hwirq); + + if (d->hwirq < SPI_NUM_PER_MBIGEN_CHIP) { + writel_relaxed(msg->data, base); + return; + } + val = readl_relaxed(base); val &= ~(IRQ_EVENT_ID_MASK << IRQ_EVENT_ID_SHIFT); @@ -182,8 +200,7 @@ static int mbigen_domain_translate(struct irq_domain *d, if (fwspec->param_count != 2) return -EINVAL; - if ((fwspec->param[0] > MAXIMUM_IRQ_PIN_NUM) || - (fwspec->param[0] < SPI_NUM_PER_MBIGEN_CHIP)) + if (fwspec->param[0] > MAXIMUM_IRQ_PIN_NUM) return -EINVAL; else *hwirq = fwspec->param[0]; -- 1.8.3