On Thu, May 14, 2020 at 11:59 AM Vinod Koul <vkoul@xxxxxxxxxx> wrote: > > Driver missed initializing num_por which is por values that driver Nit: s/is/is one of the/ ? > configures to hardware. In order to get this values, add a new structure Nit: s/this/these > ethqos_emac_driver_data which holds por and num_por values and populate > that in driver probe. > > Fixes: a7c30e62d4b8 ("net: stmmac: Add driver for Qualcomm ethqos") > Reported-by: Rahul Ankushrao Kawadgave <rahulak@xxxxxxxxxxxxxxxx> > Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx> Otherwise, Reviewed-by: Amit Kucheria <amit.kucheria@xxxxxxxxxx> > --- > .../ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c > index e0a5fe83d8e0..bfc4a92f1d92 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c > @@ -75,6 +75,11 @@ struct ethqos_emac_por { > unsigned int value; > }; > > +struct ethqos_emac_driver_data { > + const struct ethqos_emac_por *por; > + unsigned int num_por; > +}; > + > struct qcom_ethqos { > struct platform_device *pdev; > void __iomem *rgmii_base; > @@ -171,6 +176,11 @@ static const struct ethqos_emac_por emac_v2_3_0_por[] = { > { .offset = RGMII_IO_MACRO_CONFIG2, .value = 0x00002060 }, > }; > > +static const struct ethqos_emac_driver_data emac_v2_3_0_data = { > + .por = emac_v2_3_0_por, > + .num_por = ARRAY_SIZE(emac_v2_3_0_por), > +}; > + > static int ethqos_dll_configure(struct qcom_ethqos *ethqos) > { > unsigned int val; > @@ -442,6 +452,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev) > struct device_node *np = pdev->dev.of_node; > struct plat_stmmacenet_data *plat_dat; > struct stmmac_resources stmmac_res; > + const struct ethqos_emac_driver_data *data; > struct qcom_ethqos *ethqos; > struct resource *res; > int ret; > @@ -471,7 +482,9 @@ static int qcom_ethqos_probe(struct platform_device *pdev) > goto err_mem; > } > > - ethqos->por = of_device_get_match_data(&pdev->dev); > + data = of_device_get_match_data(&pdev->dev); > + ethqos->por = data->por; > + ethqos->num_por = data->num_por; > > ethqos->rgmii_clk = devm_clk_get(&pdev->dev, "rgmii"); > if (IS_ERR(ethqos->rgmii_clk)) { > @@ -526,7 +539,7 @@ static int qcom_ethqos_remove(struct platform_device *pdev) > } > > static const struct of_device_id qcom_ethqos_match[] = { > - { .compatible = "qcom,qcs404-ethqos", .data = &emac_v2_3_0_por}, > + { .compatible = "qcom,qcs404-ethqos", .data = &emac_v2_3_0_data}, > { } > }; > MODULE_DEVICE_TABLE(of, qcom_ethqos_match); > -- > 2.25.4 >