[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5fd7a56f-db12-deb3-753a-22867526d90b@linaro.org>
Date: Sat, 12 Nov 2022 10:43:14 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
To: Johan Hovold <johan+linaro@...nel.org>,
Vinod Koul <vkoul@...nel.org>
Cc: Andy Gross <agross@...nel.org>,
Bjorn Andersson <andersson@...nel.org>,
Konrad Dybcio <konrad.dybcio@...aro.org>,
linux-arm-msm@...r.kernel.org, linux-phy@...ts.infradead.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 17/22] phy: qcom-qmp-combo: merge USB and DP
configurations
On 11/11/2022 11:56, Johan Hovold wrote:
> It does not really make any sense to keep separate configuration
> structures for the USB and DP parts of the same PHY so merge them.
>
> Signed-off-by: Johan Hovold <johan+linaro@...nel.org>
> ---
> drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 182 +++++++---------------
> 1 file changed, 57 insertions(+), 125 deletions(-)
>
> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> index b27d1821116c..249912b75964 100644
> --- a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
> @@ -798,10 +798,7 @@ static const u8 qmp_dp_v5_voltage_swing_hbr_rbr[4][4] = {
>
> struct qmp_phy;
>
> -/* struct qmp_phy_cfg - per-PHY initialization config */
> struct qmp_phy_cfg {
> - /* phy-type - PCIE/UFS/USB */
> - unsigned int type;
> int lanes;
int lanes doesn't really make sense here in my opinion. It should be
usb_lanes and dp_lanes.
>
> /* Init sequence for PHY blocks - serdes, tx, rx, pcs */
> @@ -864,11 +861,6 @@ struct qmp_phy_cfg {
>
> };
>
> -struct qmp_phy_combo_cfg {
> - const struct qmp_phy_cfg *usb_cfg;
> - const struct qmp_phy_cfg *dp_cfg;
> -};
> -
> /**
> * struct qmp_phy - per-lane phy descriptor
> *
> @@ -1008,8 +1000,7 @@ static const char * const sc7180_usb3phy_reset_l[] = {
> "phy",
> };
>
> -static const struct qmp_phy_cfg sc7180_usb3phy_cfg = {
> - .type = PHY_TYPE_USB3,
> +static const struct qmp_phy_cfg sc7180_usb3dpphy_cfg = {
> .lanes = 2,
>
> .serdes_tbl = qmp_v3_usb3_serdes_tbl,
> @@ -1020,20 +1011,6 @@ static const struct qmp_phy_cfg sc7180_usb3phy_cfg = {
> .rx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_rx_tbl),
> .pcs_tbl = qmp_v3_usb3_pcs_tbl,
> .pcs_tbl_num = ARRAY_SIZE(qmp_v3_usb3_pcs_tbl),
> - .clk_list = qmp_v3_phy_clk_l,
> - .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
> - .reset_list = sc7180_usb3phy_reset_l,
> - .num_resets = ARRAY_SIZE(sc7180_usb3phy_reset_l),
> - .vreg_list = qmp_phy_vreg_l,
> - .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> - .regs = qmp_v3_usb3phy_regs_layout,
> -
> - .has_pwrdn_delay = true,
> -};
> -
> -static const struct qmp_phy_cfg sc7180_dpphy_cfg = {
> - .type = PHY_TYPE_DP,
> - .lanes = 2,
>
> .dp_serdes_tbl = qmp_v3_dp_serdes_tbl,
> .dp_serdes_tbl_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl),
> @@ -1058,15 +1035,19 @@ static const struct qmp_phy_cfg sc7180_dpphy_cfg = {
> .configure_dp_tx = qcom_qmp_v3_phy_configure_dp_tx,
> .configure_dp_phy = qcom_qmp_v3_phy_configure_dp_phy,
> .calibrate_dp_phy = qcom_qmp_v3_dp_phy_calibrate,
> -};
>
> -static const struct qmp_phy_combo_cfg sc7180_usb3dpphy_cfg = {
> - .usb_cfg = &sc7180_usb3phy_cfg,
> - .dp_cfg = &sc7180_dpphy_cfg,
> + .clk_list = qmp_v3_phy_clk_l,
> + .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
> + .reset_list = sc7180_usb3phy_reset_l,
> + .num_resets = ARRAY_SIZE(sc7180_usb3phy_reset_l),
> + .vreg_list = qmp_phy_vreg_l,
> + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> + .regs = qmp_v3_usb3phy_regs_layout,
> +
> + .has_pwrdn_delay = true,
> };
>
> -static const struct qmp_phy_cfg sdm845_usb3phy_cfg = {
> - .type = PHY_TYPE_USB3,
> +static const struct qmp_phy_cfg sdm845_usb3dpphy_cfg = {
> .lanes = 2,
>
> .serdes_tbl = qmp_v3_usb3_serdes_tbl,
> @@ -1077,25 +1058,11 @@ static const struct qmp_phy_cfg sdm845_usb3phy_cfg = {
> .rx_tbl_num = ARRAY_SIZE(qmp_v3_usb3_rx_tbl),
> .pcs_tbl = qmp_v3_usb3_pcs_tbl,
> .pcs_tbl_num = ARRAY_SIZE(qmp_v3_usb3_pcs_tbl),
> - .clk_list = qmp_v3_phy_clk_l,
> - .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
> - .reset_list = msm8996_usb3phy_reset_l,
> - .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> - .vreg_list = qmp_phy_vreg_l,
> - .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> - .regs = qmp_v3_usb3phy_regs_layout,
> -
> - .has_pwrdn_delay = true,
> -};
>
> -static const struct qmp_phy_cfg sdm845_dpphy_cfg = {
> - .type = PHY_TYPE_DP,
> - .lanes = 2,
> -
> - .serdes_tbl = qmp_v3_dp_serdes_tbl,
> - .serdes_tbl_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl),
> - .tx_tbl = qmp_v3_dp_tx_tbl,
> - .tx_tbl_num = ARRAY_SIZE(qmp_v3_dp_tx_tbl),
> + .dp_serdes_tbl = qmp_v3_dp_serdes_tbl,
> + .dp_serdes_tbl_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl),
> + .dp_tx_tbl = qmp_v3_dp_tx_tbl,
> + .dp_tx_tbl_num = ARRAY_SIZE(qmp_v3_dp_tx_tbl),
>
> .serdes_tbl_rbr = qmp_v3_dp_serdes_tbl_rbr,
> .serdes_tbl_rbr_num = ARRAY_SIZE(qmp_v3_dp_serdes_tbl_rbr),
> @@ -1115,15 +1082,18 @@ static const struct qmp_phy_cfg sdm845_dpphy_cfg = {
> .configure_dp_tx = qcom_qmp_v3_phy_configure_dp_tx,
> .configure_dp_phy = qcom_qmp_v3_phy_configure_dp_phy,
> .calibrate_dp_phy = qcom_qmp_v3_dp_phy_calibrate,
> -};
>
> -static const struct qmp_phy_combo_cfg sdm845_usb3dpphy_cfg = {
> - .usb_cfg = &sdm845_usb3phy_cfg,
> - .dp_cfg = &sdm845_dpphy_cfg,
> -};
> + .clk_list = qmp_v3_phy_clk_l,
> + .num_clks = ARRAY_SIZE(qmp_v3_phy_clk_l),
> + .reset_list = msm8996_usb3phy_reset_l,
> + .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> + .vreg_list = qmp_phy_vreg_l,
> + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> + .regs = qmp_v3_usb3phy_regs_layout,
>
> -static const struct qmp_phy_cfg sm8150_usb3phy_cfg = {
> - .type = PHY_TYPE_USB3,
> + .has_pwrdn_delay = true,
> +};
> +static const struct qmp_phy_cfg sc8180x_usb3dpphy_cfg = {
> .lanes = 2,
>
> .serdes_tbl = sm8150_usb3_serdes_tbl,
> @@ -1136,21 +1106,6 @@ static const struct qmp_phy_cfg sm8150_usb3phy_cfg = {
> .pcs_tbl_num = ARRAY_SIZE(sm8150_usb3_pcs_tbl),
> .pcs_usb_tbl = sm8150_usb3_pcs_usb_tbl,
> .pcs_usb_tbl_num = ARRAY_SIZE(sm8150_usb3_pcs_usb_tbl),
> - .clk_list = qmp_v4_phy_clk_l,
> - .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
> - .reset_list = msm8996_usb3phy_reset_l,
> - .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> - .vreg_list = qmp_phy_vreg_l,
> - .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> - .regs = qmp_v4_usb3phy_regs_layout,
> - .pcs_usb_offset = 0x300,
> -
> - .has_pwrdn_delay = true,
> -};
> -
> -static const struct qmp_phy_cfg sc8180x_dpphy_cfg = {
> - .type = PHY_TYPE_DP,
> - .lanes = 2,
>
> .dp_serdes_tbl = qmp_v4_dp_serdes_tbl,
> .dp_serdes_tbl_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl),
> @@ -1175,15 +1130,20 @@ static const struct qmp_phy_cfg sc8180x_dpphy_cfg = {
> .configure_dp_tx = qcom_qmp_v4_phy_configure_dp_tx,
> .configure_dp_phy = qcom_qmp_v4_phy_configure_dp_phy,
> .calibrate_dp_phy = qcom_qmp_v4_dp_phy_calibrate,
> -};
>
> -static const struct qmp_phy_combo_cfg sc8180x_usb3dpphy_cfg = {
> - .usb_cfg = &sm8150_usb3phy_cfg,
> - .dp_cfg = &sc8180x_dpphy_cfg,
> + .clk_list = qmp_v4_phy_clk_l,
> + .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
> + .reset_list = msm8996_usb3phy_reset_l,
> + .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> + .vreg_list = qmp_phy_vreg_l,
> + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> + .regs = qmp_v4_usb3phy_regs_layout,
> + .pcs_usb_offset = 0x300,
> +
> + .has_pwrdn_delay = true,
> };
>
> -static const struct qmp_phy_cfg sc8280xp_usb43dp_usb_cfg = {
> - .type = PHY_TYPE_USB3,
> +static const struct qmp_phy_cfg sc8280xp_usb43dpphy_cfg = {
> .lanes = 2,
>
> .serdes_tbl = sc8280xp_usb43dp_serdes_tbl,
> @@ -1194,19 +1154,6 @@ static const struct qmp_phy_cfg sc8280xp_usb43dp_usb_cfg = {
> .rx_tbl_num = ARRAY_SIZE(sc8280xp_usb43dp_rx_tbl),
> .pcs_tbl = sc8280xp_usb43dp_pcs_tbl,
> .pcs_tbl_num = ARRAY_SIZE(sc8280xp_usb43dp_pcs_tbl),
> - .clk_list = qmp_v4_phy_clk_l,
> - .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
> - .reset_list = msm8996_usb3phy_reset_l,
> - .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> - .vreg_list = qmp_phy_vreg_l,
> - .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> - .regs = qmp_v4_usb3phy_regs_layout,
> - .pcs_usb_offset = 0x300,
> -};
> -
> -static const struct qmp_phy_cfg sc8280xp_usb43dp_dp_cfg = {
> - .type = PHY_TYPE_DP,
> - .lanes = 2,
>
> .dp_serdes_tbl = qmp_v5_dp_serdes_tbl,
> .dp_serdes_tbl_num = ARRAY_SIZE(qmp_v5_dp_serdes_tbl),
> @@ -1231,15 +1178,18 @@ static const struct qmp_phy_cfg sc8280xp_usb43dp_dp_cfg = {
> .configure_dp_tx = qcom_qmp_v4_phy_configure_dp_tx,
> .configure_dp_phy = qcom_qmp_v5_phy_configure_dp_phy,
> .calibrate_dp_phy = qcom_qmp_v4_dp_phy_calibrate,
> -};
>
> -static const struct qmp_phy_combo_cfg sc8280xp_usb43dpphy_cfg = {
> - .usb_cfg = &sc8280xp_usb43dp_usb_cfg,
> - .dp_cfg = &sc8280xp_usb43dp_dp_cfg,
> + .clk_list = qmp_v4_phy_clk_l,
> + .num_clks = ARRAY_SIZE(qmp_v4_phy_clk_l),
> + .reset_list = msm8996_usb3phy_reset_l,
> + .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> + .vreg_list = qmp_phy_vreg_l,
> + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> + .regs = qmp_v4_usb3phy_regs_layout,
> + .pcs_usb_offset = 0x300,
> };
>
> -static const struct qmp_phy_cfg sm8250_usb3phy_cfg = {
> - .type = PHY_TYPE_USB3,
> +static const struct qmp_phy_cfg sm8250_usb3dpphy_cfg = {
> .lanes = 2,
>
> .serdes_tbl = sm8150_usb3_serdes_tbl,
> @@ -1252,21 +1202,6 @@ static const struct qmp_phy_cfg sm8250_usb3phy_cfg = {
> .pcs_tbl_num = ARRAY_SIZE(sm8250_usb3_pcs_tbl),
> .pcs_usb_tbl = sm8250_usb3_pcs_usb_tbl,
> .pcs_usb_tbl_num = ARRAY_SIZE(sm8250_usb3_pcs_usb_tbl),
> - .clk_list = qmp_v4_sm8250_usbphy_clk_l,
> - .num_clks = ARRAY_SIZE(qmp_v4_sm8250_usbphy_clk_l),
> - .reset_list = msm8996_usb3phy_reset_l,
> - .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> - .vreg_list = qmp_phy_vreg_l,
> - .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> - .regs = qmp_v4_usb3phy_regs_layout,
> - .pcs_usb_offset = 0x300,
> -
> - .has_pwrdn_delay = true,
> -};
> -
> -static const struct qmp_phy_cfg sm8250_dpphy_cfg = {
> - .type = PHY_TYPE_DP,
> - .lanes = 2,
>
> .dp_serdes_tbl = qmp_v4_dp_serdes_tbl,
> .dp_serdes_tbl_num = ARRAY_SIZE(qmp_v4_dp_serdes_tbl),
> @@ -1291,11 +1226,17 @@ static const struct qmp_phy_cfg sm8250_dpphy_cfg = {
> .configure_dp_tx = qcom_qmp_v4_phy_configure_dp_tx,
> .configure_dp_phy = qcom_qmp_v4_phy_configure_dp_phy,
> .calibrate_dp_phy = qcom_qmp_v4_dp_phy_calibrate,
> -};
>
> -static const struct qmp_phy_combo_cfg sm8250_usb3dpphy_cfg = {
> - .usb_cfg = &sm8250_usb3phy_cfg,
> - .dp_cfg = &sm8250_dpphy_cfg,
> + .clk_list = qmp_v4_sm8250_usbphy_clk_l,
> + .num_clks = ARRAY_SIZE(qmp_v4_sm8250_usbphy_clk_l),
> + .reset_list = msm8996_usb3phy_reset_l,
> + .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l),
> + .vreg_list = qmp_phy_vreg_l,
> + .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l),
> + .regs = qmp_v4_usb3phy_regs_layout,
> + .pcs_usb_offset = 0x300,
> +
> + .has_pwrdn_delay = true,
> };
>
> static void qmp_combo_configure_lane(void __iomem *base,
> @@ -2720,10 +2661,7 @@ static int qmp_combo_probe(struct platform_device *pdev)
> void __iomem *serdes;
> void __iomem *usb_serdes;
> void __iomem *dp_serdes = NULL;
> - const struct qmp_phy_combo_cfg *combo_cfg = NULL;
> const struct qmp_phy_cfg *cfg = NULL;
> - const struct qmp_phy_cfg *usb_cfg = NULL;
> - const struct qmp_phy_cfg *dp_cfg = NULL;
> int num, id, expected_phys;
> int ret;
>
> @@ -2734,13 +2672,10 @@ static int qmp_combo_probe(struct platform_device *pdev)
> qmp->dev = dev;
> dev_set_drvdata(dev, qmp);
>
> - combo_cfg = of_device_get_match_data(dev);
> - if (!combo_cfg)
> + cfg = of_device_get_match_data(dev);
> + if (!cfg)
> return -EINVAL;
>
> - usb_cfg = combo_cfg->usb_cfg;
> - cfg = usb_cfg; /* Setup clks and regulators */
> -
> usb_serdes = serdes = devm_platform_ioremap_resource(pdev, 0);
> if (IS_ERR(serdes))
> return PTR_ERR(serdes);
> @@ -2753,7 +2688,6 @@ static int qmp_combo_probe(struct platform_device *pdev)
> if (IS_ERR(dp_serdes))
> return PTR_ERR(dp_serdes);
>
> - dp_cfg = combo_cfg->dp_cfg;
> expected_phys = 2;
>
> mutex_init(&qmp->phy_mutex);
> @@ -2792,7 +2726,6 @@ static int qmp_combo_probe(struct platform_device *pdev)
> id = 0;
> for_each_available_child_of_node(dev->of_node, child) {
> if (of_node_name_eq(child, "dp-phy")) {
> - cfg = dp_cfg;
> serdes = dp_serdes;
>
> /* Create per-lane phy */
> @@ -2810,7 +2743,6 @@ static int qmp_combo_probe(struct platform_device *pdev)
> goto err_node_put;
> }
> } else if (of_node_name_eq(child, "usb3-phy")) {
> - cfg = usb_cfg;
> serdes = usb_serdes;
>
> /* Create per-lane phy */
--
With best wishes
Dmitry
Powered by blists - more mailing lists