Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp2987143ybd; Fri, 28 Jun 2019 00:37:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqzePKWp1P2XlQ4nRgWKfiv6qKaGCv+Kccy0t8VmK1s+LmZb1WxvqkiAmyaHknZx+Mc1FtVb X-Received: by 2002:a63:2b91:: with SMTP id r139mr8002738pgr.309.1561707447357; Fri, 28 Jun 2019 00:37:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561707447; cv=none; d=google.com; s=arc-20160816; b=DcD/x/OI/CHxEy67we4/0AIJzHM+IB1d3RG4v/SqMKhsgvIhtOq6BEAwOndeCZh/FH DtNGxyr+u9XDURduI7RBoZyVq/SMXgYTNQuNsc3HBUWjEMDajErBDLtf++RaqDsWvufA SqPbD42p2UGBbZYm3FHkm7wmI0apLkbpFxGAgIW2NxEd8WO4sBhA6KI1AK8cLpd18X6w +qZnWDU/Ss27TCHzwQIE4BRtco8qAvvykhPj7nUdccElKcYFA4kbIjp37QJ3T1s/3Eav MxspAdhy/Z3AbrQLqJmHWmANHWX2nbjm7Dxbj+WGvVkZqSk3luhhtJ/3uMWPmBCL1ZRa 1U/Q== 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=iRlkjfrxqbrAEgTazQ/CNYz9oZbpPMKrAh7O6kFXn4w=; b=DWIXm7jL5kJ0mxV8uPkr2ejQSW46CnnNZZs42Vd+QcVs3nmbdnoVO9FATQm4t63ILB Rk5rPbyhvJogNkYAlLRz2K9t4vKmMbG8hR7i6EVAqZh48rPcry88EKKf3kbdT7Rcr5Ua AOb6CmTMdd5P+Zliv3sj3Z4uzTvXhcZFkyuoXD3LMltjPWEhIOC6LjKx+IBteEcLIITb 9aarKblZH05AoNpQu9fotd2Joqf2IaGVhYOJObIXI6xA50Qf5a3Rcoz7zp0grjaz+z3W gPy6w+SrUZx/nKe2Ez1oNbAuPpZ6CK//SXOzmDJ6BAIL4qS0xBg8zFy6uUENa58w4jwL eNZQ== 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 x22si1445285pln.150.2019.06.28.00.37.10; Fri, 28 Jun 2019 00:37:27 -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 S1726657AbfF1Hfa (ORCPT + 99 others); Fri, 28 Jun 2019 03:35:30 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:31242 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726463AbfF1Hf2 (ORCPT ); Fri, 28 Jun 2019 03:35:28 -0400 X-UUID: 4171d408b6704aee9ef5500fff449928-20190628 X-UUID: 4171d408b6704aee9ef5500fff449928-20190628 Received: from mtkcas09.mediatek.inc [(172.21.101.178)] by mailgw01.mediatek.com (envelope-from ) (mhqrelay.mediatek.com ESMTP with TLS) with ESMTP id 217366862; Fri, 28 Jun 2019 15:35:14 +0800 Received: from mtkcas09.mediatek.inc (172.21.101.178) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 28 Jun 2019 15:35:13 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas09.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1395.4 via Frontend Transport; Fri, 28 Jun 2019 15:35:12 +0800 From: Jianjun Wang To: Ryder Lee , Bjorn Helgaas , Rob Herring , Lorenzo Pieralisi CC: Mark Rutland , Matthias Brugger , , , , , , , Subject: [v2,2/2] PCI: mediatek: Add controller support for MT7629 Date: Fri, 28 Jun 2019 15:34:25 +0800 Message-ID: <20190628073425.25165-3-jianjun.wang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20190628073425.25165-1-jianjun.wang@mediatek.com> References: <20190628073425.25165-1-jianjun.wang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: 91FA08810E71FD46B88CAD112DFCA01B16B5ED1478AE18F4B91DC42D229A45642000:8 X-MTK: N Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org MT7629 is an ARM platform SoC which has the same PCIe IP with MT7622. The HW default value of its Device ID is invalid, fix its Device ID to match the hardware implementation. Acked-by: Ryder Lee Signed-off-by: Jianjun Wang --- drivers/pci/controller/pcie-mediatek.c | 18 ++++++++++++++++++ include/linux/pci_ids.h | 1 + 2 files changed, 19 insertions(+) diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c index 80601e1b939e..e5e6740b635d 100644 --- a/drivers/pci/controller/pcie-mediatek.c +++ b/drivers/pci/controller/pcie-mediatek.c @@ -73,6 +73,7 @@ #define PCIE_MSI_VECTOR 0x0c0 #define PCIE_CONF_VEND_ID 0x100 +#define PCIE_CONF_DEVICE_ID 0x102 #define PCIE_CONF_CLASS_ID 0x106 #define PCIE_INT_MASK 0x420 @@ -141,12 +142,16 @@ struct mtk_pcie_port; /** * struct mtk_pcie_soc - differentiate between host generations * @need_fix_class_id: whether this host's class ID needed to be fixed or not + * @need_fix_device_id: whether this host's Device ID needed to be fixed or not + * @device_id: Device ID which this host need to be fixed * @ops: pointer to configuration access functions * @startup: pointer to controller setting functions * @setup_irq: pointer to initialize IRQ functions */ struct mtk_pcie_soc { bool need_fix_class_id; + bool need_fix_device_id; + unsigned int device_id; struct pci_ops *ops; int (*startup)(struct mtk_pcie_port *port); int (*setup_irq)(struct mtk_pcie_port *port, struct device_node *node); @@ -696,6 +701,9 @@ static int mtk_pcie_startup_port_v2(struct mtk_pcie_port *port) writew(val, port->base + PCIE_CONF_CLASS_ID); } + if (soc->need_fix_device_id) + writew(soc->device_id, port->base + PCIE_CONF_DEVICE_ID); + /* 100ms timeout value should be enough for Gen1/2 training */ err = readl_poll_timeout(port->base + PCIE_LINK_STATUS_V2, val, !!(val & PCIE_PORT_LINKUP_V2), 20, @@ -1216,11 +1224,21 @@ static const struct mtk_pcie_soc mtk_pcie_soc_mt7622 = { .setup_irq = mtk_pcie_setup_irq, }; +static const struct mtk_pcie_soc mtk_pcie_soc_mt7629 = { + .need_fix_class_id = true, + .need_fix_device_id = true, + .device_id = PCI_DEVICE_ID_MEDIATEK_7629, + .ops = &mtk_pcie_ops_v2, + .startup = mtk_pcie_startup_port_v2, + .setup_irq = mtk_pcie_setup_irq, +}; + static const struct of_device_id mtk_pcie_ids[] = { { .compatible = "mediatek,mt2701-pcie", .data = &mtk_pcie_soc_v1 }, { .compatible = "mediatek,mt7623-pcie", .data = &mtk_pcie_soc_v1 }, { .compatible = "mediatek,mt2712-pcie", .data = &mtk_pcie_soc_mt2712 }, { .compatible = "mediatek,mt7622-pcie", .data = &mtk_pcie_soc_mt7622 }, + { .compatible = "mediatek,mt7629-pcie", .data = &mtk_pcie_soc_mt7629 }, {}, }; diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 70e86148cb1e..aa32962759b2 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2131,6 +2131,7 @@ #define PCI_VENDOR_ID_MYRICOM 0x14c1 #define PCI_VENDOR_ID_MEDIATEK 0x14c3 +#define PCI_DEVICE_ID_MEDIATEK_7629 0x7629 #define PCI_VENDOR_ID_TITAN 0x14D2 #define PCI_DEVICE_ID_TITAN_010L 0x8001 -- 2.18.0