diff options
Diffstat (limited to 'drivers/pci/controller/dwc/pci-imx6.c')
-rw-r--r-- | drivers/pci/controller/dwc/pci-imx6.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c index 2cbef2d7c207..bd02760257e5 100644 --- a/drivers/pci/controller/dwc/pci-imx6.c +++ b/drivers/pci/controller/dwc/pci-imx6.c | |||
@@ -67,6 +67,7 @@ struct imx6_pcie { | |||
67 | #define PHY_PLL_LOCK_WAIT_USLEEP_MAX 200 | 67 | #define PHY_PLL_LOCK_WAIT_USLEEP_MAX 200 |
68 | 68 | ||
69 | /* PCIe Root Complex registers (memory-mapped) */ | 69 | /* PCIe Root Complex registers (memory-mapped) */ |
70 | #define PCIE_RC_IMX6_MSI_CAP 0x50 | ||
70 | #define PCIE_RC_LCR 0x7c | 71 | #define PCIE_RC_LCR 0x7c |
71 | #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1 0x1 | 72 | #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN1 0x1 |
72 | #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2 0x2 | 73 | #define PCIE_RC_LCR_MAX_LINK_SPEEDS_GEN2 0x2 |
@@ -848,6 +849,7 @@ static int imx6_pcie_probe(struct platform_device *pdev) | |||
848 | struct resource *dbi_base; | 849 | struct resource *dbi_base; |
849 | struct device_node *node = dev->of_node; | 850 | struct device_node *node = dev->of_node; |
850 | int ret; | 851 | int ret; |
852 | u16 val; | ||
851 | 853 | ||
852 | imx6_pcie = devm_kzalloc(dev, sizeof(*imx6_pcie), GFP_KERNEL); | 854 | imx6_pcie = devm_kzalloc(dev, sizeof(*imx6_pcie), GFP_KERNEL); |
853 | if (!imx6_pcie) | 855 | if (!imx6_pcie) |
@@ -989,6 +991,14 @@ static int imx6_pcie_probe(struct platform_device *pdev) | |||
989 | if (ret < 0) | 991 | if (ret < 0) |
990 | return ret; | 992 | return ret; |
991 | 993 | ||
994 | if (pci_msi_enabled()) { | ||
995 | val = dw_pcie_readw_dbi(pci, PCIE_RC_IMX6_MSI_CAP + | ||
996 | PCI_MSI_FLAGS); | ||
997 | val |= PCI_MSI_FLAGS_ENABLE; | ||
998 | dw_pcie_writew_dbi(pci, PCIE_RC_IMX6_MSI_CAP + PCI_MSI_FLAGS, | ||
999 | val); | ||
1000 | } | ||
1001 | |||
992 | return 0; | 1002 | return 0; |
993 | } | 1003 | } |
994 | 1004 | ||