From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E71EC43215 for ; Fri, 29 Nov 2019 13:23:03 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C6DD421721 for ; Fri, 29 Nov 2019 13:23:02 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="PcTq3I04"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=nvidia.com header.i=@nvidia.com header.b="Q1QlqQj9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C6DD421721 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nvidia.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=V0IY/agr6mA2ZDvKMK0MF1f6FFSZ5pWb1GtbvG+uy0A=; b=PcTq3I04+BO7rGzo5qsvFw0jF Hvv/UpYftUv6knNILGt9/PGeUlqaBkR9WehgEFUG4maBLtPGMOdQD6ArrfbpvHThSMCDY8NKimOen WSp06Kj699Q84UTey+7kvQhVxqcY13glCtEQFcHxMijuweJlEfd5M7YiLeLWzs2ETMdFpO1nFkOx2 l2cxQqXcNJZhtcvN+N6prt5qZZxJBQDUnaQe8uhQcruzIm0MdzNF7kc0GN34MEj/Wz48E8ezcMwdH aFPOe+wB6xACFjmIF6f3ZiMg6DR2TvbN8u5Q07wW7yWzcHK8gDjcndZMlYfouXJDKmUtOdkQ6vOxB SRuLWpTTA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iagEe-0003Z2-8Q; Fri, 29 Nov 2019 13:23:00 +0000 Received: from hqemgate14.nvidia.com ([216.228.121.143]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iagEb-0003Yc-1v for linux-arm-kernel@lists.infradead.org; Fri, 29 Nov 2019 13:22:58 +0000 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqemgate14.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Fri, 29 Nov 2019 05:22:58 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Fri, 29 Nov 2019 05:22:54 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Fri, 29 Nov 2019 05:22:54 -0800 Received: from [10.25.75.74] (10.124.1.5) by HQMAIL107.nvidia.com (172.20.187.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 29 Nov 2019 13:22:50 +0000 Subject: Re: [PATCH 3/6] PCI: tegra: Add support for PCIe endpoint mode in Tegra194 To: Bjorn Helgaas References: <20191126213718.GA185422@google.com> X-Nvconfidentiality: public From: Vidya Sagar Message-ID: <7298f15d-1745-e5c9-2d08-1235a27244ae@nvidia.com> Date: Fri, 29 Nov 2019 18:52:47 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20191126213718.GA185422@google.com> X-Originating-IP: [10.124.1.5] X-ClientProxiedBy: HQMAIL111.nvidia.com (172.20.187.18) To HQMAIL107.nvidia.com (172.20.187.13) Content-Language: en-US DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1575033778; bh=7gO/CXj0wvWwogWev3Z+fNC4tNy+uDv47vsz0nrrl5w=; h=X-PGP-Universal:Subject:To:CC:References:X-Nvconfidentiality:From: Message-ID:Date:User-Agent:MIME-Version:In-Reply-To: X-Originating-IP:X-ClientProxiedBy:Content-Type:Content-Language: Content-Transfer-Encoding; b=Q1QlqQj9jsPpnd6pf7C27/BelCW4RWZRzBi2KaiDdVgmQRtcmInnvBKkDE6Iq/jDa 3eEtcoGbjwFqH0XNmV+7oElfREV+vkp/uQUYaFN8MjIiVD/X1ZjwDEQWOShO+R+Krd s0ELF/Yf578H0G6uMulK4hnMAXda5t1DwKz4j+AyJA5/sbYgIY6KVH82ppVtNN3ybN MfmKAM5lE7RX5Q85hZMaus6bD4MIEM+bTbL5jSUereIJm5FxCXk9FLvlqSi6B8mzHc KblxQObo77nRmb3bfFCnDhQUKusMgt67Q1Qdqvaia3kHhyOEpzmxYR5NVWzR0n67XT YH7xjnMHHJ/JA== X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191129_052257_117472_57665F75 X-CRM114-Status: GOOD ( 14.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, lorenzo.pieralisi@arm.com, mmaddireddy@nvidia.com, kthota@nvidia.com, gustavo.pimentel@synopsys.com, linux-kernel@vger.kernel.org, robh+dt@kernel.org, kishon@ti.com, thierry.reding@gmail.com, linux-pci@vger.kernel.org, linux-tegra@vger.kernel.org, andrew.murray@arm.com, jonathanh@nvidia.com, linux-arm-kernel@lists.infradead.org, sagar.tv@gmail.com Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 11/27/2019 3:07 AM, Bjorn Helgaas wrote: > On Fri, Nov 22, 2019 at 04:15:02PM +0530, Vidya Sagar wrote: >> Add support for the endpoint mode of Synopsys DesignWare core based >> dual mode PCIe controllers present in Tegra194 SoC. > >> +static irqreturn_t tegra_pcie_ep_irq_handler(struct tegra_pcie_dw *pcie) >> +{ >> + struct dw_pcie_ep *ep = &pcie->pci.ep; >> + u32 val, tmp; >> + >> + val = appl_readl(pcie, APPL_INTR_STATUS_L0); >> + if (val & APPL_INTR_STATUS_L0_LINK_STATE_INT) { >> + val = appl_readl(pcie, APPL_INTR_STATUS_L1_0_0); >> + appl_writel(pcie, val, APPL_INTR_STATUS_L1_0_0); >> + if (val & APPL_INTR_STATUS_L1_0_0_HOT_RESET_DONE) { >> + /* clear any stale PEX_RST interrupt */ >> + if (!kfifo_put(&pcie->event_fifo, EP_HOT_RST_DONE)) { >> + dev_err(pcie->dev, "EVENT FIFO is full\n"); >> + return IRQ_HANDLED; >> + } >> + wake_up(&pcie->wq); >> + } >> + if (val & APPL_INTR_STATUS_L1_0_0_RDLH_LINK_UP_CHGED) { >> + tmp = appl_readl(pcie, APPL_LINK_STATUS); >> + if (tmp & APPL_LINK_STATUS_RDLH_LINK_UP) { >> + dev_info(pcie->dev, "Link is up with Host\n"); >> + dw_pcie_ep_linkup(ep); >> + } >> + } >> + } else if (val & APPL_INTR_STATUS_L0_PCI_CMD_EN_INT) { > > Is it really the case that only one of > APPL_INTR_STATUS_L0_LINK_STATE_INT and > APPL_INTR_STATUS_L0_PCI_CMD_EN_INT can be set? Not really. > > If it's possible that both could be set, maybe this should be > something like this? > > int spurious = 1; > > if (val & APPL_INTR_STATUS_L0_LINK_STATE_INT) { > ... > spurious = 0; > } > if (val & APPL_INTR_STATUS_L0_PCI_CMD_EN_INT) { > ... > spurious = 0; > } > > if (spurious) { > dev_warn(...) > } I'll take care of this in the next patch series. > >> + val = appl_readl(pcie, APPL_INTR_STATUS_L1_15); >> + appl_writel(pcie, val, APPL_INTR_STATUS_L1_15); >> + if (val & APPL_INTR_STATUS_L1_15_CFG_BME_CHGED) { >> + if (!kfifo_put(&pcie->event_fifo, EP_BME_CHANGE)) { >> + dev_err(pcie->dev, "EVENT FIFO is full\n"); >> + return IRQ_HANDLED; >> + } >> + wake_up(&pcie->wq); >> + } >> + } else { >> + dev_warn(pcie->dev, "Random interrupt (STATUS = 0x%08X)\n", >> + val); >> + appl_writel(pcie, val, APPL_INTR_STATUS_L0); >> + } >> + >> + return IRQ_HANDLED; >> +} > >> +static int tegra_pcie_ep_work_thread(void *p) >> +{ >> + struct tegra_pcie_dw *pcie = (struct tegra_pcie_dw *)p; >> + u32 event; >> + >> + while (true) { >> + wait_event_interruptible(pcie->wq, >> + !kfifo_is_empty(&pcie->event_fifo)); >> + >> + if (kthread_should_stop()) >> + break; >> + >> + if (!kfifo_get(&pcie->event_fifo, &event)) { >> + dev_warn(pcie->dev, "EVENT FIFO is empty\n"); >> + continue; >> + } >> + >> + switch (event) { >> + case EP_PEX_RST_DEASSERT: >> + dev_info(pcie->dev, "EVENT: EP_PEX_RST_DEASSERT\n"); >> + pex_ep_event_pex_rst_deassert(pcie); >> + break; >> + >> + case EP_PEX_RST_ASSERT: >> + dev_info(pcie->dev, "EVENT: EP_PEX_RST_ASSERT\n"); >> + pex_ep_event_pex_rst_assert(pcie); >> + break; >> + >> + case EP_HOT_RST_DONE: >> + dev_info(pcie->dev, "EVENT: EP_HOT_RST_DONE\n"); >> + pex_ep_event_hot_rst_done(pcie); >> + break; >> + >> + case EP_BME_CHANGE: >> + dev_info(pcie->dev, "EVENT: EP_BME_CHANGE\n"); >> + pex_ep_event_bme_change(pcie); >> + break; >> + >> + case EP_EVENT_EXIT: >> + dev_info(pcie->dev, "EVENT: EP_EVENT_EXIT\n"); >> + return 0; >> + >> + default: >> + dev_warn(pcie->dev, "Invalid PCIe EP event\n"); > > Maybe include the invalid event value in the message? I'll take care of this in the next patch series > >> + break; >> + } >> + } >> + >> + return 0; >> +} _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel