| From foo@baz Sat 16 May 2020 02:04:40 PM CEST |
| From: Vinod Koul <vkoul@kernel.org> |
| Date: Thu, 14 May 2020 11:58:36 +0530 |
| Subject: net: stmmac: fix num_por initialization |
| |
| From: Vinod Koul <vkoul@kernel.org> |
| |
| [ Upstream commit fd4a5177382230d39e0d95632d98103fb2938383 ] |
| |
| Driver missed initializing num_por which is one of the por values that |
| driver configures to hardware. In order to get these values, add a new |
| structure 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@qti.qualcomm.com> |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Reviewed-by: Amit Kucheria <amit.kucheria@linaro.org> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c | 17 ++++++++++++++-- |
| 1 file changed, 15 insertions(+), 2 deletions(-) |
| |
| --- 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 |
| { .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 plat |
| 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 plat |
| 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 pla |
| } |
| |
| 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); |