.. | .. |
---|
239 | 239 | #define EP_STATE_ENABLED 1 |
---|
240 | 240 | |
---|
241 | 241 | static const unsigned int pcie_gen_freq[] = { |
---|
| 242 | + GEN1_CORE_CLK_FREQ, /* PCI_EXP_LNKSTA_CLS == 0; undefined */ |
---|
242 | 243 | GEN1_CORE_CLK_FREQ, |
---|
243 | 244 | GEN2_CORE_CLK_FREQ, |
---|
244 | 245 | GEN3_CORE_CLK_FREQ, |
---|
.. | .. |
---|
470 | 471 | |
---|
471 | 472 | speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & |
---|
472 | 473 | 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]); |
---|
474 | 479 | |
---|
475 | 480 | /* If EP doesn't advertise L1SS, just return */ |
---|
476 | 481 | val = dw_pcie_readl_dbi(pci, pcie->cfg_link_cap_l1sub); |
---|
.. | .. |
---|
973 | 978 | |
---|
974 | 979 | speed = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_LNKSTA) & |
---|
975 | 980 | 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]); |
---|
977 | 986 | |
---|
978 | 987 | tegra_pcie_enable_interrupts(pp); |
---|
979 | 988 | |
---|