[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