0f7de49fa3
Old bootloader (same ones which have DT disabled) don't perform any PCIe initialization. The consequence is a freeze during PCIe bring-up on these old u-boot. Same kernel with a newer bootloaders works fine as they contain the corresponding PCIe init code. In this change, we'll add the missing init and make sure the kernel doesn't rely on some preexisting init to get PCIe to work. That includes the following changes: *GPIOs: set function & drive strength *Clocks: add init code for aux & ref clocks *PCIe driver: additional init of the hardware controller Tested 3.18 and 4.1 on an AP148 with bootloader branch 0.0.1 Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org> SVN-Revision: 46557
80 lines
2.3 KiB
Diff
80 lines
2.3 KiB
Diff
--- a/arch/arm/boot/dts/qcom-ipq8064.dtsi
|
|
+++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi
|
|
@@ -359,15 +359,21 @@
|
|
|
|
clocks = <&gcc PCIE_A_CLK>,
|
|
<&gcc PCIE_H_CLK>,
|
|
- <&gcc PCIE_PHY_CLK>;
|
|
- clock-names = "core", "iface", "phy";
|
|
+ <&gcc PCIE_PHY_CLK>,
|
|
+ <&gcc PCIE_AUX_CLK>,
|
|
+ <&gcc PCIE_ALT_REF_CLK>;
|
|
+ clock-names = "core", "iface", "phy", "aux", "ref";
|
|
+
|
|
+ assigned-clocks = <&gcc PCIE_ALT_REF_CLK>;
|
|
+ assigned-clock-rates = <100000000>;
|
|
|
|
resets = <&gcc PCIE_ACLK_RESET>,
|
|
<&gcc PCIE_HCLK_RESET>,
|
|
<&gcc PCIE_POR_RESET>,
|
|
<&gcc PCIE_PCI_RESET>,
|
|
- <&gcc PCIE_PHY_RESET>;
|
|
- reset-names = "axi", "ahb", "por", "pci", "phy";
|
|
+ <&gcc PCIE_PHY_RESET>,
|
|
+ <&gcc PCIE_EXT_RESET>;
|
|
+ reset-names = "axi", "ahb", "por", "pci", "phy", "ext";
|
|
|
|
status = "disabled";
|
|
};
|
|
@@ -400,15 +406,21 @@
|
|
|
|
clocks = <&gcc PCIE_1_A_CLK>,
|
|
<&gcc PCIE_1_H_CLK>,
|
|
- <&gcc PCIE_1_PHY_CLK>;
|
|
- clock-names = "core", "iface", "phy";
|
|
+ <&gcc PCIE_1_PHY_CLK>,
|
|
+ <&gcc PCIE_1_AUX_CLK>,
|
|
+ <&gcc PCIE_1_ALT_REF_CLK>;
|
|
+ clock-names = "core", "iface", "phy", "aux", "ref";
|
|
+
|
|
+ assigned-clocks = <&gcc PCIE_1_ALT_REF_CLK>;
|
|
+ assigned-clock-rates = <100000000>;
|
|
|
|
resets = <&gcc PCIE_1_ACLK_RESET>,
|
|
<&gcc PCIE_1_HCLK_RESET>,
|
|
<&gcc PCIE_1_POR_RESET>,
|
|
<&gcc PCIE_1_PCI_RESET>,
|
|
- <&gcc PCIE_1_PHY_RESET>;
|
|
- reset-names = "axi", "ahb", "por", "pci", "phy";
|
|
+ <&gcc PCIE_1_PHY_RESET>,
|
|
+ <&gcc PCIE_1_EXT_RESET>;
|
|
+ reset-names = "axi", "ahb", "por", "pci", "phy", "ext";
|
|
|
|
status = "disabled";
|
|
};
|
|
@@ -441,15 +453,21 @@
|
|
|
|
clocks = <&gcc PCIE_2_A_CLK>,
|
|
<&gcc PCIE_2_H_CLK>,
|
|
- <&gcc PCIE_2_PHY_CLK>;
|
|
- clock-names = "core", "iface", "phy";
|
|
+ <&gcc PCIE_2_PHY_CLK>,
|
|
+ <&gcc PCIE_2_AUX_CLK>,
|
|
+ <&gcc PCIE_2_ALT_REF_CLK>;
|
|
+ clock-names = "core", "iface", "phy", "aux", "ref";
|
|
+
|
|
+ assigned-clocks = <&gcc PCIE_2_ALT_REF_CLK>;
|
|
+ assigned-clock-rates = <100000000>;
|
|
|
|
resets = <&gcc PCIE_2_ACLK_RESET>,
|
|
<&gcc PCIE_2_HCLK_RESET>,
|
|
<&gcc PCIE_2_POR_RESET>,
|
|
<&gcc PCIE_2_PCI_RESET>,
|
|
- <&gcc PCIE_2_PHY_RESET>;
|
|
- reset-names = "axi", "ahb", "por", "pci", "phy";
|
|
+ <&gcc PCIE_2_PHY_RESET>,
|
|
+ <&gcc PCIE_2_EXT_RESET>;
|
|
+ reset-names = "axi", "ahb", "por", "pci", "phy", "ext";
|
|
|
|
status = "disabled";
|
|
};
|