History

PCI: mediatek: Add controller support for MT7629

MT7629 is an ARM platform SoC which has the same PCIe IP as MT7622. The HW default value of its PCI host controller Device ID is invalid, fix it to match the hardware implementation.

Jianjun Wang committed 7 years ago

Commit 0cccd421 parent f4c737d2 files · +19 −0Browse files

Unified · Split

2 files
  1. drivers/pci/controller/pcie-mediatek.c +18 −0
  2. include/linux/pci_ids.h +1 −0
drivers/pci/controller/pcie-mediatek.c+18−0
@@ -73,6 +73,7 @@ · 72 unmodified lines
7373 #define PCIE_MSI_VECTOR 0x0c0
7474
7575 #define PCIE_CONF_VEND_ID 0x100
76+#define PCIE_CONF_DEVICE_ID 0x102
7677 #define PCIE_CONF_CLASS_ID 0x106
7778
7879 #define PCIE_INT_MASK 0x420
@@ -141,12 +142,16 @@ struct mtk_pcie_port; · 62 unmodified lines
141142 /**
142143 * struct mtk_pcie_soc - differentiate between host generations
143144 * @need_fix_class_id: whether this host's class ID needed to be fixed or not
145+ * @need_fix_device_id: whether this host's device ID needed to be fixed or not
146+ * @device_id: device ID which this host need to be fixed
144147 * @ops: pointer to configuration access functions
145148 * @startup: pointer to controller setting functions
146149 * @setup_irq: pointer to initialize IRQ functions
147150 */
148151 struct mtk_pcie_soc {
149152 bool need_fix_class_id;
153+ bool need_fix_device_id;
154+ unsigned int device_id;
150155 struct pci_ops *ops;
151156 int (*startup)(struct mtk_pcie_port *port);
152157 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) · 543 unmodified lines
696701 writew(val, port->base + PCIE_CONF_CLASS_ID);
697702 }
698703
704+ if (soc->need_fix_device_id)
705+ writew(soc->device_id, port->base + PCIE_CONF_DEVICE_ID);
706+
699707 /* 100ms timeout value should be enough for Gen1/2 training */
700708 err = readl_poll_timeout(port->base + PCIE_LINK_STATUS_V2, val,
701709 !!(val & PCIE_PORT_LINKUP_V2), 20,
@@ -1216,11 +1224,21 @@ static const struct mtk_pcie_soc mtk_pcie_soc_mt7622 = { · 514 unmodified lines
12161224 .setup_irq = mtk_pcie_setup_irq,
12171225 };
12181226
1227+static const struct mtk_pcie_soc mtk_pcie_soc_mt7629 = {
1228+ .need_fix_class_id = true,
1229+ .need_fix_device_id = true,
1230+ .device_id = PCI_DEVICE_ID_MEDIATEK_7629,
1231+ .ops = &mtk_pcie_ops_v2,
1232+ .startup = mtk_pcie_startup_port_v2,
1233+ .setup_irq = mtk_pcie_setup_irq,
1234+};
1235+
12191236 static const struct of_device_id mtk_pcie_ids[] = {
12201237 { .compatible = "mediatek,mt2701-pcie", .data = &mtk_pcie_soc_v1 },
12211238 { .compatible = "mediatek,mt7623-pcie", .data = &mtk_pcie_soc_v1 },
12221239 { .compatible = "mediatek,mt2712-pcie", .data = &mtk_pcie_soc_mt2712 },
12231240 { .compatible = "mediatek,mt7622-pcie", .data = &mtk_pcie_soc_mt7622 },
1241+ { .compatible = "mediatek,mt7629-pcie", .data = &mtk_pcie_soc_mt7629 },
12241242 {},
12251243 };
12261244
include/linux/pci_ids.h+1−0
@@ -2132,6 +2132,7 @@ · 2131 unmodified lines
21322132 #define PCI_VENDOR_ID_MYRICOM 0x14c1
21332133
21342134 #define PCI_VENDOR_ID_MEDIATEK 0x14c3
2135+#define PCI_DEVICE_ID_MEDIATEK_7629 0x7629
21352136
21362137 #define PCI_VENDOR_ID_TITAN 0x14D2
21372138 #define PCI_DEVICE_ID_TITAN_010L 0x8001

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t