Received: by 2002:ac0:8c9a:0:0:0:0:0 with SMTP id r26csp4604822ima; Mon, 4 Feb 2019 20:58:24 -0800 (PST) X-Google-Smtp-Source: AHgI3Ia3PROcBst9YHT3IW+Ys2d6Sq7cqAjz7DNNebwcYWVLrwRL201kPMss2LfmTSC14U36OV+c X-Received: by 2002:a62:6ec8:: with SMTP id j191mr3094779pfc.198.1549342704335; Mon, 04 Feb 2019 20:58:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549342704; cv=none; d=google.com; s=arc-20160816; b=HHfj1Fr7o42PJfXC7YhR9CQWNHDZOJRVQCPWFMqE+nlNkosblmSfWUBIs1vejlTf6h /fCajfjO+la2PCVaJBcbX5Kzhl3v9M20ZUCTKJwt1+zGb1fEKLK5uJpU11c1JH3g1kq5 B2J9ZW9Ofy314MXJcwVsw1HafTowJT0j44dMsWYYpVnRvqFOhBLAKXaPq8ni69GcJLCA eJwY7PJUi9Mkot55bDOl4IlY23gl4iV4gsuzcpcbVqrZXekg4ql0JT/4gBJB2/ovLaOf aKvx4UVz3XPqM9GiwiZsuyzvZLLZwrrqgKuxcuTwFdx9ZoqR7OTvv6Ej9bLq/y213X07 ANFg== 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:dkim-signature; bh=mGL7QcC1bDOgscis3sOXPMveHiHvdLDsFx5c3yvyr38=; b=bv1m7Zp9+miD9K9RRIghj5cPBHks9kAEGUkMlZTrBeDoYFVWt1tEVhcX2mLkCkYJ9M nkBKnKs8ojmVJcJO6384t+vdY8DhRhi4Ac1KY8K29mvNibY/h4yn25/Ll9T7eJwk/UND N5eEAoAXl+aRPWHxLucNi1trliKYm4BL70hnd3Qlqna5EdMNumz1dLY99i8+6cn/Sslm CKp8rgHXIIDKDKg9CfSpC8wlQZhbg2scxB9ya9GZBYs+GHuehSV252m9hrl6nDWIKIWu +7spdVn1iPo9vfbeT4hiY3susd+1LyIFdkFQUubdZ9mBX/LN9qwSKLkRfwYqDI7fb4x1 FQmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@broadcom.com header.s=google header.b=SsMXJFnJ; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m7si2568635pfc.118.2019.02.04.20.58.08; Mon, 04 Feb 2019 20:58:24 -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=@broadcom.com header.s=google header.b=SsMXJFnJ; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=broadcom.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727572AbfBEE5v (ORCPT + 99 others); Mon, 4 Feb 2019 23:57:51 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:36430 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725947AbfBEE5u (ORCPT ); Mon, 4 Feb 2019 23:57:50 -0500 Received: by mail-pg1-f193.google.com with SMTP id n2so912663pgm.3 for ; Mon, 04 Feb 2019 20:57:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mGL7QcC1bDOgscis3sOXPMveHiHvdLDsFx5c3yvyr38=; b=SsMXJFnJkICPYuOw7nMuSdlZolJ4JyVOFLtAw3igIzPfTG/qcjJ1DE6A67180NANzu H8SHtoR/L5VHWTjL4NjUaOHWBteOM9OeP2c4DgdZ4bkPg+HZo7/CGaPk1vfjpVf8K+Jz X57LvawCWMTQgoGw1NfpmmSemkSr609sy8dBw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mGL7QcC1bDOgscis3sOXPMveHiHvdLDsFx5c3yvyr38=; b=LZxoZKmNC6uxT7iv2IdxATFIxCS3Bh7ZhOVj4y5x5/R7rYhqs4eh/VnTQ3KQB5vvif m7WZK9IZO/2F9nXAdwSvmnv9tztkD9+NGM3Trzhn50BnWByj7ZJG5sQ8MdCKj6bUqks1 YSNLKzEnaXWavVZFUNQnScGvSleGN4tkNSk8pg83xZdYWKA+XDLKSEnDBdlH+UOtgOSW uSQEVrvEHfuEYwle0ZQYW68gCmAxk5cme+kR14b3L1Csd6i3zjLDHJtzEMY65EDzd/RI X+uHVqusaZCSwEvAQPYnXT5Wn/PQQlPYJiBUADKz3My+tTPEHfujO/cNZ9eCVh4SiJGk m7ww== X-Gm-Message-State: AHQUAubXI5FwWj+qeNNLrjwajv0yMn0RPnafTsVLKy/XOUJGin0BNNmi WAQGcuqcKUbD03wI5NCEntPJIw== X-Received: by 2002:a63:2a44:: with SMTP id q65mr2628356pgq.231.1549342669385; Mon, 04 Feb 2019 20:57:49 -0800 (PST) Received: from mannams-OptiPlex-7010.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id r76sm2895164pfb.69.2019.02.04.20.57.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 04 Feb 2019 20:57:48 -0800 (PST) From: Srinath Mannam To: Bjorn Helgaas , Lorenzo Pieralisi , Ray Jui , Scott Branden Cc: bcm-kernel-feedback-list@broadcom.com, linux-pci@vger.kernel.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Srinath Mannam Subject: [PATCH v2 1/2] PCI: iproc: Add CRS check in config read Date: Tue, 5 Feb 2019 10:27:00 +0530 Message-Id: <1549342622-9929-2-git-send-email-srinath.mannam@broadcom.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1549342622-9929-1-git-send-email-srinath.mannam@broadcom.com> References: <1549342622-9929-1-git-send-email-srinath.mannam@broadcom.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the current implementation, config read output data 0xffff0001 is assumed as CRS completion. But sometimes 0xffff0001 can be a valid data. IPROC PCIe host controller has a register to show config read request status flags like SC, UR, CRS and CA. So that extra check is added to confirm the CRS using status flags before reissue config read. Signed-off-by: Srinath Mannam Reviewed-by: Ray Jui --- drivers/pci/controller/pcie-iproc.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/pci/controller/pcie-iproc.c b/drivers/pci/controller/pcie-iproc.c index c20fd6b..b882255 100644 --- a/drivers/pci/controller/pcie-iproc.c +++ b/drivers/pci/controller/pcie-iproc.c @@ -60,6 +60,10 @@ #define APB_ERR_EN_SHIFT 0 #define APB_ERR_EN BIT(APB_ERR_EN_SHIFT) +#define CFG_RD_SUCCESS 0 +#define CFG_RD_UR 1 +#define CFG_RD_CRS 2 +#define CFG_RD_CA 3 #define CFG_RETRY_STATUS 0xffff0001 #define CFG_RETRY_STATUS_TIMEOUT_US 500000 /* 500 milliseconds */ @@ -289,6 +293,9 @@ enum iproc_pcie_reg { IPROC_PCIE_IARR4, IPROC_PCIE_IMAP4, + /* config read status */ + IPROC_PCIE_CFG_RD_STATUS, + /* link status */ IPROC_PCIE_LINK_STATUS, @@ -350,6 +357,7 @@ static const u16 iproc_pcie_reg_paxb_v2[] = { [IPROC_PCIE_IMAP3] = 0xe08, [IPROC_PCIE_IARR4] = 0xe68, [IPROC_PCIE_IMAP4] = 0xe70, + [IPROC_PCIE_CFG_RD_STATUS] = 0xee0, [IPROC_PCIE_LINK_STATUS] = 0xf0c, [IPROC_PCIE_APB_ERR_EN] = 0xf40, }; @@ -474,10 +482,12 @@ static void __iomem *iproc_pcie_map_ep_cfg_reg(struct iproc_pcie *pcie, return (pcie->base + offset); } -static unsigned int iproc_pcie_cfg_retry(void __iomem *cfg_data_p) +static unsigned int iproc_pcie_cfg_retry(struct iproc_pcie *pcie, + void __iomem *cfg_data_p) { int timeout = CFG_RETRY_STATUS_TIMEOUT_US; unsigned int data; + u32 status; /* * As per PCIe spec r3.1, sec 2.3.2, CRS Software Visibility only @@ -498,6 +508,15 @@ static unsigned int iproc_pcie_cfg_retry(void __iomem *cfg_data_p) */ data = readl(cfg_data_p); while (data == CFG_RETRY_STATUS && timeout--) { + /* + * CRS state is set in CFG_RD status register + * This will handle the case where CFG_RETRY_STATUS is + * valid config data. + */ + status = iproc_pcie_read_reg(pcie, IPROC_PCIE_CFG_RD_STATUS); + if (status != CFG_RD_CRS) + return data; + udelay(1); data = readl(cfg_data_p); } @@ -576,7 +595,7 @@ static int iproc_pcie_config_read(struct pci_bus *bus, unsigned int devfn, if (!cfg_data_p) return PCIBIOS_DEVICE_NOT_FOUND; - data = iproc_pcie_cfg_retry(cfg_data_p); + data = iproc_pcie_cfg_retry(pcie, cfg_data_p); *val = data; if (size <= 2) -- 2.7.4