From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Andrey Safonov Date: Sat, 16 Dec 2023 22:46:35 +0300 Subject: rk3399 PCIE PHY reset on probe Signed-off-by: Andrey Safonov --- drivers/phy/rockchip/phy-rockchip-pcie.c | 16 ++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/phy/rockchip/phy-rockchip-pcie.c b/drivers/phy/rockchip/phy-rockchip-pcie.c index 111111111111..222222222222 100644 --- a/drivers/phy/rockchip/phy-rockchip-pcie.c +++ b/drivers/phy/rockchip/phy-rockchip-pcie.c @@ -343,6 +343,20 @@ static const struct of_device_id rockchip_pcie_phy_dt_ids[] = { MODULE_DEVICE_TABLE(of, rockchip_pcie_phy_dt_ids); +static void rockchip_pcie_phy_reset(struct rockchip_pcie_phy *rk_phy) +{ + int i; + + for (i = 0; i < PHY_MAX_LANE_NUM; i++) + regmap_write(rk_phy->reg_base, + rk_phy->phy_data->pcie_laneoff, + HIWORD_UPDATE(PHY_LANE_IDLE_OFF, + PHY_LANE_IDLE_MASK, + PHY_LANE_IDLE_A_SHIFT + i)); + + reset_control_assert(rk_phy->phy_rst); +} + static int rockchip_pcie_phy_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -391,6 +405,8 @@ static int rockchip_pcie_phy_probe(struct platform_device *pdev) phy_num = (phy_num == 0) ? 1 : PHY_MAX_LANE_NUM; dev_dbg(dev, "phy number is %d\n", phy_num); + rockchip_pcie_phy_reset(rk_phy); + for (i = 0; i < phy_num; i++) { rk_phy->phys[i].phy = devm_phy_create(dev, dev->of_node, &ops); if (IS_ERR(rk_phy->phys[i].phy)) { -- Armbian