From patchwork Fri May 31 14:33:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 165546 Delivered-To: patch@linaro.org Received: by 2002:a92:9e1a:0:0:0:0:0 with SMTP id q26csp836863ili; Fri, 31 May 2019 07:33:50 -0700 (PDT) X-Google-Smtp-Source: APXvYqybIQSeLwG7R4mGmcAkmLQywXgTP5+cJ8rOVgtr8Gm2SF3GrZssh6eg89Epj2Lvx8bemQMr X-Received: by 2002:a17:90a:808a:: with SMTP id c10mr9522515pjn.67.1559313230644; Fri, 31 May 2019 07:33:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559313230; cv=none; d=google.com; s=arc-20160816; b=t7Vd3eO4CNSZbAFnKaCPWL4db2SntJCSwifS8AofSBN8pW31Or62ugz6R/Q5GqlbPF cBmuCTfXST1jnYuakeo0FAk8lrrDCnHjrEXd2EzT81k7ND1XL/teP1gbqMlkQCYX6kST 8TOERal+XLugQAhGRrlOToxKC5ze8E5sQF9ILzjJw4OljM4FmFPnV2LieNXmmHA64adn EUjyWxJnHSMLljiMH2vPXO5UhZkOnC8ZrgvSARlrUj9waDonTS4fROvp0nj73ThGaAP9 8FqJnlKk6BEh9oSgKjrCJucU4AqzpRvsT+HBcLUEKHiBkkrCvDN6bDbEceSiya5sAaRj bMFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=wLVwOfX6MkL3qpvTbtWHf0oV4SAFGmNdb3XO/qmDxqA=; b=eSEjxzxv2R4q2WRjw5yxpbycI+erociRquxJVNBanYwRD1sa5rOI3g7BDyN+Y9nvU4 QZJjBbuJGrJjNKXBCxsvHOWqSDuTwFPL9Ron+vFQqkwHgy+gCUdbPoygkhNeyau0Rj5h F+nYKO+5bdDT99ctETRY5ANtQHmjmHRhg9ai+hBUeLWiZw1uGvXc8lIDr8PHDmU8YnRK R5PDJ/R6h5MrRBKchfYs/eOpFGqK6Mi+nvkDwPrlchqd8I1rSBrKLEMXLNeJAQ068pTN 7uzn5RgVCbNPvVsPgymml7hPrAF+s0OYKAOQRbHaYIvTRvjufximIJfIDsxYGhwMoaMw +TrQ== 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 m1si6508622pld.236.2019.05.31.07.33.48; Fri, 31 May 2019 07:33:50 -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 S1726874AbfEaOdq (ORCPT + 30 others); Fri, 31 May 2019 10:33:46 -0400 Received: from foss.arm.com ([217.140.101.70]:52484 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726823AbfEaOdo (ORCPT ); Fri, 31 May 2019 10:33:44 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9AE08341; Fri, 31 May 2019 07:33:44 -0700 (PDT) Received: from usa.arm.com (e107155-lin.cambridge.arm.com [10.1.196.42]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id CE21A3F5AF; Fri, 31 May 2019 07:33:42 -0700 (PDT) From: Sudeep Holla To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Jassi Brar , Arnd Bergmann Cc: Sudeep Holla , Bjorn Andersson , Rob Herring , Mark Brown , Cristian Marussi , Jassi Brar Subject: [PATCH 4/6] mailbox: arm_mhu: migrate to threaded irq handler Date: Fri, 31 May 2019 15:33:18 +0100 Message-Id: <20190531143320.8895-5-sudeep.holla@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190531143320.8895-1-sudeep.holla@arm.com> References: <20190531143320.8895-1-sudeep.holla@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation to introduce support for doorbells which require the interrupt handlers to be threaded, this patch moves the existing interrupt handler to threaded handler. Also it moves out the registering and freeing of the handlers from the mailbox startup and shutdown methods. This also is required to support doorbells. Cc: Jassi Brar Signed-off-by: Sudeep Holla --- drivers/mailbox/arm_mhu.c | 46 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 24 deletions(-) -- 2.17.1 diff --git a/drivers/mailbox/arm_mhu.c b/drivers/mailbox/arm_mhu.c index 747cab1090ff..98838d5ae108 100644 --- a/drivers/mailbox/arm_mhu.c +++ b/drivers/mailbox/arm_mhu.c @@ -84,33 +84,16 @@ static int mhu_startup(struct mbox_chan *chan) { struct mhu_link *mlink = chan->con_priv; u32 val; - int ret; val = readl_relaxed(mlink->tx_reg + INTR_STAT_OFS); writel_relaxed(val, mlink->tx_reg + INTR_CLR_OFS); - ret = request_irq(mlink->irq, mhu_rx_interrupt, - IRQF_SHARED, "mhu_link", chan); - if (ret) { - dev_err(chan->mbox->dev, - "Unable to acquire IRQ %d\n", mlink->irq); - return ret; - } - return 0; } -static void mhu_shutdown(struct mbox_chan *chan) -{ - struct mhu_link *mlink = chan->con_priv; - - free_irq(mlink->irq, chan); -} - static const struct mbox_chan_ops mhu_ops = { .send_data = mhu_send_data, .startup = mhu_startup, - .shutdown = mhu_shutdown, .last_tx_done = mhu_last_tx_done, }; @@ -132,13 +115,6 @@ static int mhu_probe(struct amba_device *adev, const struct amba_id *id) return PTR_ERR(mhu->base); } - for (i = 0; i < MHU_CHANS; i++) { - mhu->chan[i].con_priv = &mhu->mlink[i]; - mhu->mlink[i].irq = adev->irq[i]; - mhu->mlink[i].rx_reg = mhu->base + mhu_reg[i]; - mhu->mlink[i].tx_reg = mhu->mlink[i].rx_reg + TX_REG_OFFSET; - } - mhu->mbox.dev = dev; mhu->mbox.chans = &mhu->chan[0]; mhu->mbox.num_chans = MHU_CHANS; @@ -155,6 +131,28 @@ static int mhu_probe(struct amba_device *adev, const struct amba_id *id) return err; } + for (i = 0; i < MHU_CHANS; i++) { + int irq = mhu->mlink[i].irq = adev->irq[i]; + + if (irq <= 0) { + dev_dbg(dev, "No IRQ found for Channel %d\n", i); + continue; + } + + mhu->chan[i].con_priv = &mhu->mlink[i]; + mhu->mlink[i].rx_reg = mhu->base + mhu_reg[i]; + mhu->mlink[i].tx_reg = mhu->mlink[i].rx_reg + TX_REG_OFFSET; + + err = devm_request_threaded_irq(dev, irq, NULL, + mhu_rx_interrupt, IRQF_ONESHOT, + "mhu_link", &mhu->chan[i]); + if (err) { + dev_err(dev, "Can't claim IRQ %d\n", irq); + mbox_controller_unregister(&mhu->mbox); + return err; + } + } + dev_info(dev, "ARM MHU Mailbox registered\n"); return 0; }