Re: [PATCH 1/3] net: stmmac: explicitly deassert GMAC_AHB_RESET

From: Matthew Hagan
Date: Sun Jun 06 2021 - 05:38:27 EST


On 06/06/2021 04:24, Bjorn Andersson wrote:

> On Sat 05 Jun 12:35 CDT 2021, Matthew Hagan wrote:
>
>> We are currently assuming that GMAC_AHB_RESET will already be deasserted
>> by the bootloader. However if this has not been done, probing of the GMAC
>> will fail. To remedy this we must ensure GMAC_AHB_RESET has been deasserted
>> prior to probing.
>>
> Sounds good, just some small style comments below.
>
>> Signed-off-by: Matthew Hagan <mnhagan88@xxxxxxxxx>
>> ---
>> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 7 +++++++
>> drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 7 +++++++
>> include/linux/stmmac.h | 1 +
>> 3 files changed, 15 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> index 6d41dd6f9f7a..1e28058b65a8 100644
>> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
>> @@ -6840,6 +6840,13 @@ int stmmac_dvr_probe(struct device *device,
>> reset_control_reset(priv->plat->stmmac_rst);
>> }
>>
>> + if (priv->plat->stmmac_ahb_rst) {
> You don't need this conditional, stmmac_ahb_rst will be NULL if not
> specified and you can reset_control_deassert(NULL) without any problems.
>
>> + ret = reset_control_deassert(priv->plat->stmmac_ahb_rst);
>> + if (ret == -ENOTSUPP)
>> + dev_err(priv->device,
>> + "unable to bring out of ahb reset\n");
> No need to wrap this line.
>
>> + }
>> +
>> /* Init MAC and get the capabilities */
>> ret = stmmac_hw_init(priv);
>> if (ret)
>> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
>> index 97a1fedcc9ac..d8ae58bdbbe3 100644
>> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
>> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
>> @@ -600,6 +600,13 @@ stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
>> goto error_hw_init;
>> }
>>
>> + plat->stmmac_ahb_rst = devm_reset_control_get_optional_shared(
>> + &pdev->dev, "ahb");
>> + if (IS_ERR(plat->stmmac_ahb_rst)) {
>> + ret = plat->stmmac_ahb_rst;
> You need a PTR_ERR() around the plat->stmmac_ahb_rst.
>
> Regards,
> Bjorn
>
>> + goto error_hw_init;
>> + }
>> +
>> return plat;
>>
>> error_hw_init:
>> diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
>> index e55a4807e3ea..9b6a64f3e3dc 100644
>> --- a/include/linux/stmmac.h
>> +++ b/include/linux/stmmac.h
>> @@ -239,6 +239,7 @@ struct plat_stmmacenet_data {
>> unsigned int mult_fact_100ns;
>> s32 ptp_max_adj;
>> struct reset_control *stmmac_rst;
>> + struct reset_control *stmmac_ahb_rst;
>> struct stmmac_axi *axi;
>> int has_gmac4;
>> bool has_sun8i;
>> --
>> 2.26.3
>>
>>
Thanks for the review. Will submit a v2 shortly.

Matthew