[PATCH v2 3/7] phy: rockchip: snps-pcie3: Refactor to use a phy_init ops
Kever Yang
kever.yang at rock-chips.com
Wed Sep 27 04:46:26 CEST 2023
On 2023/8/3 03:04, Jonas Karlman wrote:
> Add a phy_init ops in preparation for upcoming support of a RK3588
> variant in the driver.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
> v2:
> - No change
>
> .../phy/rockchip/phy-rockchip-snps-pcie3.c | 40 +++++++++++++++----
> 1 file changed, 32 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c b/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c
> index 3053543a3329..b76b5386bef0 100644
> --- a/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c
> +++ b/drivers/phy/rockchip/phy-rockchip-snps-pcie3.c
> @@ -35,8 +35,32 @@ struct rockchip_p3phy_priv {
> struct clk_bulk clks;
> };
>
> +struct rockchip_p3phy_ops {
> + int (*phy_init)(struct phy *phy);
> +};
> +
> +static int rockchip_p3phy_rk3568_init(struct phy *phy)
> +{
> + struct rockchip_p3phy_priv *priv = dev_get_priv(phy->dev);
> +
> + /* Deassert PCIe PMA output clamp mode */
> + regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9,
> + (0x1 << 15) | (0x1 << 31));
> +
> + reset_deassert(&priv->p30phy);
> + udelay(1);
> +
> + return 0;
> +}
> +
> +static const struct rockchip_p3phy_ops rk3568_ops = {
> + .phy_init = rockchip_p3phy_rk3568_init,
> +};
> +
> static int rochchip_p3phy_init(struct phy *phy)
> {
> + struct rockchip_p3phy_ops *ops =
> + (struct rockchip_p3phy_ops *)dev_get_driver_data(phy->dev);
> struct rockchip_p3phy_priv *priv = dev_get_priv(phy->dev);
> int ret;
>
> @@ -47,14 +71,11 @@ static int rochchip_p3phy_init(struct phy *phy)
> reset_assert(&priv->p30phy);
> udelay(1);
>
> - /* Deassert PCIe PMA output clamp mode */
> - regmap_write(priv->phy_grf, GRF_PCIE30PHY_CON9,
> - (0x1 << 15) | (0x1 << 31));
> -
> - reset_deassert(&priv->p30phy);
> - udelay(1);
> + ret = ops->phy_init(phy);
> + if (ret)
> + clk_disable_bulk(&priv->clks);
>
> - return 0;
> + return ret;
> }
>
> static int rochchip_p3phy_exit(struct phy *phy)
> @@ -103,7 +124,10 @@ static struct phy_ops rochchip_p3phy_ops = {
> };
>
> static const struct udevice_id rockchip_p3phy_of_match[] = {
> - { .compatible = "rockchip,rk3568-pcie3-phy" },
> + {
> + .compatible = "rockchip,rk3568-pcie3-phy",
> + .data = (ulong)&rk3568_ops,
> + },
> { },
> };
>
More information about the U-Boot
mailing list