hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/pci/controller/dwc/pcie-tegra194.c
....@@ -239,6 +239,7 @@
239239 #define EP_STATE_ENABLED 1
240240
241241 static const unsigned int pcie_gen_freq[] = {
242
+ GEN1_CORE_CLK_FREQ, /* PCI_EXP_LNKSTA_CLS == 0; undefined */
242243 GEN1_CORE_CLK_FREQ,
243244 GEN2_CORE_CLK_FREQ,
244245 GEN3_CORE_CLK_FREQ,
....@@ -470,7 +471,11 @@
470471
471472 speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) &
472473 PCI_EXP_LNKSTA_CLS;
473
- clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]);
474
+
475
+ if (speed >= ARRAY_SIZE(pcie_gen_freq))
476
+ speed = 0;
477
+
478
+ clk_set_rate(pcie->core_clk, pcie_gen_freq[speed]);
474479
475480 /* If EP doesn't advertise L1SS, just return */
476481 val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub);
....@@ -973,7 +978,11 @@
973978
974979 speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) &
975980 PCI_EXP_LNKSTA_CLS;
976
- clk_set_rate(pcie->core_clk, pcie_gen_freq[speed - 1]);
981
+
982
+ if (speed >= ARRAY_SIZE(pcie_gen_freq))
983
+ speed = 0;
984
+
985
+ clk_set_rate(pcie->core_clk, pcie_gen_freq[speed]);
977986
978987 tegra_pcie_enable_interrupts(pp);
979988