 50324b949b
			
		
	
	50324b949b
	
	
	
		
			
			All patches automatically rebased. Build system: x86_64 Build-tested: ramips/tplink_archer-a6-v3 Run-tested: ramips/tplink_archer-a6-v3 Signed-off-by: John Audia <therealgraysky@proton.me>
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From e67f325e9cd67562b761e884680c0fec03a6f404 Mon Sep 17 00:00:00 2001
 | |
| From: Matthew Hagan <mnhagan88@gmail.com>
 | |
| Date: Tue, 8 Jun 2021 19:59:06 +0100
 | |
| Subject: net: stmmac: explicitly deassert GMAC_AHB_RESET
 | |
| 
 | |
| 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.
 | |
| 
 | |
| v2 changes:
 | |
|  - remove NULL condition check for stmmac_ahb_rst in stmmac_main.c
 | |
|  - unwrap dev_err() message in stmmac_main.c
 | |
|  - add PTR_ERR() around plat->stmmac_ahb_rst in stmmac_platform.c
 | |
| 
 | |
| v3 changes:
 | |
|  - add error pointer to dev_err() output
 | |
|  - add reset_control_assert(stmmac_ahb_rst) in stmmac_dvr_remove
 | |
|  - revert PTR_ERR() around plat->stmmac_ahb_rst since this is performed
 | |
|    on the returned value of ret by the calling function
 | |
| 
 | |
| Signed-off-by: Matthew Hagan <mnhagan88@gmail.com>
 | |
| Signed-off-by: David S. Miller <davem@davemloft.net>
 | |
| ---
 | |
|  drivers/net/ethernet/stmicro/stmmac/stmmac_main.c     | 5 +++++
 | |
|  drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 6 ++++++
 | |
|  include/linux/stmmac.h                                | 1 +
 | |
|  3 files changed, 12 insertions(+)
 | |
| 
 | |
| --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
 | |
| +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
 | |
| @@ -5046,6 +5046,10 @@ int stmmac_dvr_probe(struct device *devi
 | |
|  			reset_control_reset(priv->plat->stmmac_rst);
 | |
|  	}
 | |
|  
 | |
| +	ret = reset_control_deassert(priv->plat->stmmac_ahb_rst);
 | |
| +	if (ret == -ENOTSUPP)
 | |
| +		dev_err(priv->device, "unable to bring out of ahb reset\n");
 | |
| +
 | |
|  	/* Init MAC and get the capabilities */
 | |
|  	ret = stmmac_hw_init(priv);
 | |
|  	if (ret)
 | |
| @@ -5260,6 +5264,7 @@ int stmmac_dvr_remove(struct device *dev
 | |
|  	phylink_destroy(priv->phylink);
 | |
|  	if (priv->plat->stmmac_rst)
 | |
|  		reset_control_assert(priv->plat->stmmac_rst);
 | |
| +	reset_control_assert(priv->plat->stmmac_ahb_rst);
 | |
|  	pm_runtime_put(dev);
 | |
|  	pm_runtime_disable(dev);
 | |
|  	if (priv->hw->pcs != STMMAC_PCS_TBI &&
 | |
| --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
 | |
| +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
 | |
| @@ -616,6 +616,12 @@ stmmac_probe_config_dt(struct platform_d
 | |
|  		plat->stmmac_rst = NULL;
 | |
|  	}
 | |
|  
 | |
| +	plat->stmmac_ahb_rst = devm_reset_control_get_optional_shared(
 | |
| +							&pdev->dev, "ahb");
 | |
| +	if (IS_ERR(plat->stmmac_ahb_rst))
 | |
| +		if (PTR_ERR(plat->stmmac_ahb_rst) == -EPROBE_DEFER)
 | |
| +			goto error_hw_init;
 | |
| +
 | |
|  	return plat;
 | |
|  
 | |
|  error_hw_init:
 | |
| --- a/include/linux/stmmac.h
 | |
| +++ b/include/linux/stmmac.h
 | |
| @@ -192,6 +192,7 @@ struct plat_stmmacenet_data {
 | |
|  	unsigned int clk_ref_rate;
 | |
|  	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;
 |