 590aa0ca51
			
		
	
	590aa0ca51
	
	
	
		
			
			Manually rebase: pending-5.15/330-MIPS-kexec-Accept-command-line-parameters-from-users.patch ath79/patches-5.15/910-unaligned_access_hacks.patch All other patches automatically rebased Build system: x86_64 Build-tested: bcm2711/RPi4B Run-tested: bcm2711/RPi4B Signed-off-by: John Audia <therealgraysky@proton.me>
		
			
				
	
	
		
			150 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 21bd64bd717dedac96f53b668144cbe37d3c12d4 Mon Sep 17 00:00:00 2001
 | |
| From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
 | |
| Date: Tue, 30 Nov 2021 13:09:55 +0000
 | |
| Subject: [PATCH] net: dsa: consolidate phylink creation
 | |
| MIME-Version: 1.0
 | |
| Content-Type: text/plain; charset=UTF-8
 | |
| Content-Transfer-Encoding: 8bit
 | |
| 
 | |
| The code in port.c and slave.c creating the phylink instance is very
 | |
| similar - let's consolidate this into a single function.
 | |
| 
 | |
| Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
 | |
| Reviewed-by: Marek Behún <kabel@kernel.org>
 | |
| Reviewed-by: Andrew Lunn <andrew@lunn.ch>
 | |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 | |
| ---
 | |
|  net/dsa/dsa_priv.h |  2 +-
 | |
|  net/dsa/port.c     | 44 ++++++++++++++++++++++++++++----------------
 | |
|  net/dsa/slave.c    | 19 +++----------------
 | |
|  3 files changed, 32 insertions(+), 33 deletions(-)
 | |
| 
 | |
| --- a/net/dsa/dsa_priv.h
 | |
| +++ b/net/dsa/dsa_priv.h
 | |
| @@ -261,13 +261,13 @@ int dsa_port_mrp_add_ring_role(const str
 | |
|  			       const struct switchdev_obj_ring_role_mrp *mrp);
 | |
|  int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
 | |
|  			       const struct switchdev_obj_ring_role_mrp *mrp);
 | |
| +int dsa_port_phylink_create(struct dsa_port *dp);
 | |
|  int dsa_port_link_register_of(struct dsa_port *dp);
 | |
|  void dsa_port_link_unregister_of(struct dsa_port *dp);
 | |
|  int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr);
 | |
|  void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr);
 | |
|  int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast);
 | |
|  void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast);
 | |
| -extern const struct phylink_mac_ops dsa_port_phylink_mac_ops;
 | |
|  
 | |
|  static inline bool dsa_port_offloads_bridge_port(struct dsa_port *dp,
 | |
|  						 const struct net_device *dev)
 | |
| --- a/net/dsa/port.c
 | |
| +++ b/net/dsa/port.c
 | |
| @@ -1092,7 +1092,7 @@ static void dsa_port_phylink_mac_link_up
 | |
|  				     speed, duplex, tx_pause, rx_pause);
 | |
|  }
 | |
|  
 | |
| -const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
 | |
| +static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
 | |
|  	.validate = dsa_port_phylink_validate,
 | |
|  	.mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
 | |
|  	.mac_config = dsa_port_phylink_mac_config,
 | |
| @@ -1101,6 +1101,30 @@ const struct phylink_mac_ops dsa_port_ph
 | |
|  	.mac_link_up = dsa_port_phylink_mac_link_up,
 | |
|  };
 | |
|  
 | |
| +int dsa_port_phylink_create(struct dsa_port *dp)
 | |
| +{
 | |
| +	struct dsa_switch *ds = dp->ds;
 | |
| +	phy_interface_t mode;
 | |
| +	int err;
 | |
| +
 | |
| +	err = of_get_phy_mode(dp->dn, &mode);
 | |
| +	if (err)
 | |
| +		mode = PHY_INTERFACE_MODE_NA;
 | |
| +
 | |
| +	if (ds->ops->phylink_get_interfaces)
 | |
| +		ds->ops->phylink_get_interfaces(ds, dp->index,
 | |
| +					dp->pl_config.supported_interfaces);
 | |
| +
 | |
| +	dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
 | |
| +				mode, &dsa_port_phylink_mac_ops);
 | |
| +	if (IS_ERR(dp->pl)) {
 | |
| +		pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
 | |
| +		return PTR_ERR(dp->pl);
 | |
| +	}
 | |
| +
 | |
| +	return 0;
 | |
| +}
 | |
| +
 | |
|  static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable)
 | |
|  {
 | |
|  	struct dsa_switch *ds = dp->ds;
 | |
| @@ -1177,27 +1201,15 @@ static int dsa_port_phylink_register(str
 | |
|  {
 | |
|  	struct dsa_switch *ds = dp->ds;
 | |
|  	struct device_node *port_dn = dp->dn;
 | |
| -	phy_interface_t mode;
 | |
|  	int err;
 | |
|  
 | |
| -	err = of_get_phy_mode(port_dn, &mode);
 | |
| -	if (err)
 | |
| -		mode = PHY_INTERFACE_MODE_NA;
 | |
| -
 | |
|  	dp->pl_config.dev = ds->dev;
 | |
|  	dp->pl_config.type = PHYLINK_DEV;
 | |
|  	dp->pl_config.pcs_poll = ds->pcs_poll;
 | |
|  
 | |
| -	if (ds->ops->phylink_get_interfaces)
 | |
| -		ds->ops->phylink_get_interfaces(ds, dp->index,
 | |
| -					dp->pl_config.supported_interfaces);
 | |
| -
 | |
| -	dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn),
 | |
| -				mode, &dsa_port_phylink_mac_ops);
 | |
| -	if (IS_ERR(dp->pl)) {
 | |
| -		pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
 | |
| -		return PTR_ERR(dp->pl);
 | |
| -	}
 | |
| +	err = dsa_port_phylink_create(dp);
 | |
| +	if (err)
 | |
| +		return err;
 | |
|  
 | |
|  	err = phylink_of_phy_connect(dp->pl, port_dn, 0);
 | |
|  	if (err && err != -ENODEV) {
 | |
| --- a/net/dsa/slave.c
 | |
| +++ b/net/dsa/slave.c
 | |
| @@ -1817,14 +1817,9 @@ static int dsa_slave_phy_setup(struct ne
 | |
|  	struct dsa_port *dp = dsa_slave_to_port(slave_dev);
 | |
|  	struct device_node *port_dn = dp->dn;
 | |
|  	struct dsa_switch *ds = dp->ds;
 | |
| -	phy_interface_t mode;
 | |
|  	u32 phy_flags = 0;
 | |
|  	int ret;
 | |
|  
 | |
| -	ret = of_get_phy_mode(port_dn, &mode);
 | |
| -	if (ret)
 | |
| -		mode = PHY_INTERFACE_MODE_NA;
 | |
| -
 | |
|  	dp->pl_config.dev = &slave_dev->dev;
 | |
|  	dp->pl_config.type = PHYLINK_NETDEV;
 | |
|  
 | |
| @@ -1837,17 +1832,9 @@ static int dsa_slave_phy_setup(struct ne
 | |
|  		dp->pl_config.poll_fixed_state = true;
 | |
|  	}
 | |
|  
 | |
| -	if (ds->ops->phylink_get_interfaces)
 | |
| -		ds->ops->phylink_get_interfaces(ds, dp->index,
 | |
| -					dp->pl_config.supported_interfaces);
 | |
| -
 | |
| -	dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn), mode,
 | |
| -				&dsa_port_phylink_mac_ops);
 | |
| -	if (IS_ERR(dp->pl)) {
 | |
| -		netdev_err(slave_dev,
 | |
| -			   "error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
 | |
| -		return PTR_ERR(dp->pl);
 | |
| -	}
 | |
| +	ret = dsa_port_phylink_create(dp);
 | |
| +	if (ret)
 | |
| +		return ret;
 | |
|  
 | |
|  	if (ds->ops->get_phy_flags)
 | |
|  		phy_flags = ds->ops->get_phy_flags(ds, dp->index);
 |