diff options
Diffstat (limited to 'drivers/net/dsa/rtl8365mb.c')
| -rw-r--r-- | drivers/net/dsa/rtl8365mb.c | 20 | 
1 files changed, 9 insertions, 11 deletions
| diff --git a/drivers/net/dsa/rtl8365mb.c b/drivers/net/dsa/rtl8365mb.c index 078ca4cd7160..3b729544798b 100644 --- a/drivers/net/dsa/rtl8365mb.c +++ b/drivers/net/dsa/rtl8365mb.c @@ -277,7 +277,7 @@  		(RTL8365MB_PORT_ISOLATION_REG_BASE + (_physport))  #define   RTL8365MB_PORT_ISOLATION_MASK			0x07FF -/* MSTP port state registers - indexed by tree instancrSTI (tree ine */ +/* MSTP port state registers - indexed by tree instance */  #define RTL8365MB_MSTI_CTRL_BASE			0x0A00  #define RTL8365MB_MSTI_CTRL_REG(_msti, _physport) \  		(RTL8365MB_MSTI_CTRL_BASE + ((_msti) << 1) + ((_physport) >> 3)) @@ -767,7 +767,8 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_smi *smi, int port,  	 *     0 = no delay, 1 = 2 ns delay  	 *   RX delay:  	 *     0 = no delay, 7 = maximum delay -	 *     No units are specified, but there are a total of 8 steps. +	 *     Each step is approximately 0.3 ns, so the maximum delay is about +	 *     2.1 ns.  	 *  	 * The vendor driver also states that this must be configured *before*  	 * forcing the external interface into a particular mode, which is done @@ -778,10 +779,6 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_smi *smi, int port,  	 * specified. We ignore the detail of the RGMII interface mode  	 * (RGMII_{RXID, TXID, etc.}), as this is considered to be a PHY-only  	 * property. -	 * -	 * For the RX delay, we assume that a register value of 4 corresponds to -	 * 2 ns. But this is just an educated guess, so ignore all other values -	 * to avoid too much confusion.  	 */  	if (!of_property_read_u32(dn, "tx-internal-delay-ps", &val)) {  		val = val / 1000; /* convert to ns */ @@ -794,13 +791,13 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_smi *smi, int port,  	}  	if (!of_property_read_u32(dn, "rx-internal-delay-ps", &val)) { -		val = val / 1000; /* convert to ns */ +		val = DIV_ROUND_CLOSEST(val, 300); /* convert to 0.3 ns step */ -		if (val == 0 || val == 2) -			rx_delay = val * 2; +		if (val <= 7) +			rx_delay = val;  		else  			dev_warn(smi->dev, -				 "EXT port RX delay must be 0 to 2 ns\n"); +				 "EXT port RX delay must be 0 to 2.1 ns\n");  	}  	ret = regmap_update_bits( @@ -903,7 +900,8 @@ static bool rtl8365mb_phy_mode_supported(struct dsa_switch *ds, int port,  {  	if (dsa_is_user_port(ds, port) &&  	    (interface == PHY_INTERFACE_MODE_NA || -	     interface == PHY_INTERFACE_MODE_INTERNAL)) +	     interface == PHY_INTERFACE_MODE_INTERNAL || +	     interface == PHY_INTERFACE_MODE_GMII))  		/* Internal PHY */  		return true;  	else if (dsa_is_cpu_port(ds, port) && |