|
125 | 125 |
|
126 | 126 | #define MAX_NUM_PHY_RESETS 3
|
127 | 127 |
|
| 128 | +#define PCIE_MTK_RESET_TIME_US 10 |
| 129 | + |
128 | 130 | /* Time in ms needed to complete PCIe reset on EN7581 SoC */
|
129 | 131 | #define PCIE_EN7581_RESET_TIME_MS 100
|
130 | 132 |
|
@@ -913,9 +915,14 @@ static int mtk_pcie_en7581_power_up(struct mtk_gen3_pcie *pcie)
|
913 | 915 | u32 val;
|
914 | 916 |
|
915 | 917 | /*
|
916 |
| - * Wait for the time needed to complete the bulk assert in |
917 |
| - * mtk_pcie_setup for EN7581 SoC. |
| 918 | + * The controller may have been left out of reset by the bootloader |
| 919 | + * so make sure that we get a clean start by asserting resets here. |
918 | 920 | */
|
| 921 | + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, |
| 922 | + pcie->phy_resets); |
| 923 | + reset_control_assert(pcie->mac_reset); |
| 924 | + |
| 925 | + /* Wait for the time needed to complete the reset lines assert. */ |
919 | 926 | mdelay(PCIE_EN7581_RESET_TIME_MS);
|
920 | 927 |
|
921 | 928 | err = phy_init(pcie->phy);
|
@@ -982,6 +989,15 @@ static int mtk_pcie_power_up(struct mtk_gen3_pcie *pcie)
|
982 | 989 | struct device *dev = pcie->dev;
|
983 | 990 | int err;
|
984 | 991 |
|
| 992 | + /* |
| 993 | + * The controller may have been left out of reset by the bootloader |
| 994 | + * so make sure that we get a clean start by asserting resets here. |
| 995 | + */ |
| 996 | + reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, |
| 997 | + pcie->phy_resets); |
| 998 | + reset_control_assert(pcie->mac_reset); |
| 999 | + usleep_range(PCIE_MTK_RESET_TIME_US, 2 * PCIE_MTK_RESET_TIME_US); |
| 1000 | + |
985 | 1001 | /* PHY power on and enable pipe clock */
|
986 | 1002 | err = reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
|
987 | 1003 | if (err) {
|
@@ -1066,14 +1082,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
|
1066 | 1082 | * counter since the bulk is shared.
|
1067 | 1083 | */
|
1068 | 1084 | reset_control_bulk_deassert(pcie->soc->phy_resets.num_resets, pcie->phy_resets);
|
1069 |
| - /* |
1070 |
| - * The controller may have been left out of reset by the bootloader |
1071 |
| - * so make sure that we get a clean start by asserting resets here. |
1072 |
| - */ |
1073 |
| - reset_control_bulk_assert(pcie->soc->phy_resets.num_resets, pcie->phy_resets); |
1074 |
| - |
1075 |
| - reset_control_assert(pcie->mac_reset); |
1076 |
| - usleep_range(10, 20); |
1077 | 1085 |
|
1078 | 1086 | /* Don't touch the hardware registers before power up */
|
1079 | 1087 | err = pcie->soc->power_up(pcie);
|
|
0 commit comments