Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp7505691imu; Mon, 3 Dec 2018 14:08:03 -0800 (PST) X-Google-Smtp-Source: AFSGD/Uq9QS5W0rpEYkF/sztnV/Ou9ZbOmzT1VnyyX9f+MloppkccvzsmMGS43flQY1pquEJZmvw X-Received: by 2002:a63:5455:: with SMTP id e21mr14825847pgm.316.1543874883732; Mon, 03 Dec 2018 14:08:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543874883; cv=none; d=google.com; s=arc-20160816; b=H/OlgE3w0Hys3rZ5XBEXCDrefjOlP0/t1cLv/tQrL2IG4VQ5u1kZyWlszeI2XoO78O nZUsNCLCOlF2zunxMLNKUCp5Rym2EyOWFSeM3yR5y9ZXHJCkqdvno7utg+fg9ybo1xWo 3D4+vRrna4jNktX6FdnJI4ZMC29seBCiyG3oPk4bbl2n35Nt5IwgdZo5zVF0IczbIg9p xu9Mf4xOyKNLP8RNJ31BNkCJ8ceROLP0kAnu0Ql4KMCgHZqmeVwxJqJrgHT474/+4Hny uVs2t49f1bjBWOpJpdAGL++rX1zefSPYtRaQtGc9vBcEIznEMCaWPPVJ/LlgQAkagdCF Ug9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=ozrttre0/4qzpwI7JZ/Pa3hM0V8dQHlNzaT0V332SxU=; b=QMXeXlB02tEijdMXOpE/Tma+FUgcM9D1Rte74Bx1aCXTXKINxmHRWr9Hoczzy+isqJ UgZzr/BKRIYNrw50a4c/9sx6Tz5PtBTSRD8ErqrCIOmal5hiq89u6JeO3Ye5clxSlwDg uxlYYTDtyd4Z3tsgHhapiBpJbPAErXdKl4auYhLQ/Al1WFbnmsDTpOfm+tXmSDtP2u72 i/oC2+6WtpJSh3bxvvF8NcrU9YwbzhsIZzWYzXc7qq+s8CdvwqDIwe4Un1MYYYWoar/w ODkA7tSfKRSxXG0Uix/xogoNMNB2tncTv0OtF0rqvYGAmSVl8swl/O6FsIQjKExKZpDW dkBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=hU7DOutP; 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 59si15680356plf.18.2018.12.03.14.07.48; Mon, 03 Dec 2018 14:08:03 -0800 (PST) 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=hU7DOutP; 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 S1725994AbeLCWHC (ORCPT + 99 others); Mon, 3 Dec 2018 17:07:02 -0500 Received: from mail.kernel.org ([198.145.29.99]:32896 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbeLCWHC (ORCPT ); Mon, 3 Dec 2018 17:07:02 -0500 Received: from localhost (unknown [69.71.4.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F35E420851; Mon, 3 Dec 2018 22:07:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543874821; bh=P+ClqifsYBB5+feA1KgYgp5Jf4neLwGqIj2CUPXxFXE=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=hU7DOutPAOrnKbkj6S1cjGVdqpBefmmg6dZhPUd4xvvlJ5MUGLXra8s58L3nEtwFO klEjdaprxndwSLRhqQAKqXbg9fq9zW4cxOj3BTK2wejgqVjH+UC6X4PfQsrnJmfU58 7RGdoNxyGmMkNHAmkiWj6DlacsbeFRS3IyLxL/0w= Date: Mon, 3 Dec 2018 16:06:59 -0600 From: Bjorn Helgaas To: "Z.q. Hou" Cc: "linux-pci@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "lorenzo.pieralisi@arm.com" , "l.subrahmanya@mobiveil.co.in" , Leo Li , "M.h. Lian" , Xiaowei Bao Subject: Re: [PATCH 2/2] PCI: mobiveil: ls_pcie_g4: add Workaround for A-011451 Message-ID: <20181203220659.GD207198@google.com> References: <20181202133303.33988-1-Zhiqiang.Hou@nxp.com> <20181202133303.33988-3-Zhiqiang.Hou@nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20181202133303.33988-3-Zhiqiang.Hou@nxp.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Dec 02, 2018 at 01:32:45PM +0000, Z.q. Hou wrote: > From: Hou Zhiqiang > > When LX2 PCIe controller is sending multiple split completions and > ACK latency expires indicating that ACK should be send at priority. > But because of large number of split completions and FC update DLLP, > the controller does not give priority to ACK transmission. This > results into ACK latency timer timeout error at the link partner and > the pending TLPs are replayed by the link partner again. > > Workaround: > 1. Reduce the ACK latency timeout value to a very small value. > 2. Restrict the number of completions from the LX2 PCIe controller > to 1, by changing the Max Read Request Size (MRRS) of link partner > to the same value as Max Packet size (MPS). > > This patch implemented part 1, the part 2 can be set by kernel parameter > 'pci=pcie_bus_perf' So you're saying that users of this controller must boot with "pci=pcie_bus_perf"? That's a little unfriendly to users. When they forget to use that parameter and some mysterious PCIe error occurs, they will not thank you. We should be able to figure this out automatically via some sort of quirk in the driver, and then do the right thing in the MPS/MRRS configuration. That would also give us a chance to make sure that when the MPS/MRRS code changes, it can be done in a way that keeps this Rev1.0 controller working. If you depend on users booting with "pci=pcie_bus_perf", there's no connection in the code, and if we change or remove that parameter, we would have no clue that you depend on it. > This ERRATA is only for LX2160A Rev1.0, and it will be fixed > in Rev2.0. > > Signed-off-by: Hou Zhiqiang > --- > .../pci/controller/mobiveil/pci-layerscape-gen4.c | 14 ++++++++++++++ > drivers/pci/controller/mobiveil/pcie-mobiveil.h | 4 ++++ > 2 files changed, 18 insertions(+) > > diff --git a/drivers/pci/controller/mobiveil/pci-layerscape-gen4.c b/drivers/pci/controller/mobiveil/pci-layerscape-gen4.c > index 1fe56532b288..ef43033e1c2a 100644 > --- a/drivers/pci/controller/mobiveil/pci-layerscape-gen4.c > +++ b/drivers/pci/controller/mobiveil/pci-layerscape-gen4.c > @@ -220,6 +220,18 @@ static const struct mobiveil_pab_ops ls_pcie_g4_pab_ops = { > .link_up = ls_pcie_g4_link_up, > }; > > +static void workaround_A011451(struct ls_pcie_g4 *pcie) > +{ > + struct mobiveil_pcie *mv_pci = pcie->pci; > + u32 val; > + > + /* Set ACK latency timeout */ > + val = csr_readl(mv_pci, GPEX_ACK_REPLAY_TO); > + val &= ~(ACK_LAT_TO_VAL_MASK << ACK_LAT_TO_VAL_SHIFT); > + val |= (4 << ACK_LAT_TO_VAL_SHIFT); > + csr_writel(mv_pci, val, GPEX_ACK_REPLAY_TO); > +} > + > static int __init ls_pcie_g4_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > @@ -259,6 +271,8 @@ static int __init ls_pcie_g4_probe(struct platform_device *pdev) > if (!ls_pcie_g4_is_bridge(pcie)) > return -ENODEV; > > + workaround_A011451(pcie); > + > return 0; > } > > diff --git a/drivers/pci/controller/mobiveil/pcie-mobiveil.h b/drivers/pci/controller/mobiveil/pcie-mobiveil.h > index ef93b41f4419..c75b7c304c46 100644 > --- a/drivers/pci/controller/mobiveil/pcie-mobiveil.h > +++ b/drivers/pci/controller/mobiveil/pcie-mobiveil.h > @@ -85,6 +85,10 @@ > #define PAB_AXI_AMAP_PEX_WIN_H(win) PAB_REG_ADDR(0x0bac, win) > #define PAB_INTP_AXI_PIO_CLASS 0x474 > > +#define GPEX_ACK_REPLAY_TO 0x438 > +#define ACK_LAT_TO_VAL_MASK 0x1fff > +#define ACK_LAT_TO_VAL_SHIFT 0 > + > #define PAB_PEX_AMAP_CTRL(win) PAB_REG_ADDR(0x4ba0, win) > #define AMAP_CTRL_EN_SHIFT 0 > #define AMAP_CTRL_TYPE_SHIFT 1 > -- > 2.17.1 >