 7ace30aeb6
			
		
	
	7ace30aeb6
	
	
	
		
			
			Backport upstream code split patch for qca8k needed for ipq40xx target to correctly implement a DSA driver. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 533c64bca62a8654f00698bc893f639013e38c7b Mon Sep 17 00:00:00 2001
 | |
| From: Christian Marangi <ansuelsmth@gmail.com>
 | |
| Date: Wed, 27 Jul 2022 13:35:11 +0200
 | |
| Subject: [PATCH 02/14] net: dsa: qca8k: make mib autocast feature optional
 | |
| 
 | |
| Some switch may not support mib autocast feature and require the legacy
 | |
| way of reading the regs directly.
 | |
| Make the mib autocast feature optional and permit to declare support for
 | |
| it using match_data struct in a dedicated qca8k_info_ops struct.
 | |
| 
 | |
| Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
 | |
| Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
 | |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 | |
| ---
 | |
|  drivers/net/dsa/qca/qca8k.c | 11 +++++++++--
 | |
|  drivers/net/dsa/qca/qca8k.h |  5 +++++
 | |
|  2 files changed, 14 insertions(+), 2 deletions(-)
 | |
| 
 | |
| --- a/drivers/net/dsa/qca/qca8k.c
 | |
| +++ b/drivers/net/dsa/qca/qca8k.c
 | |
| @@ -2254,8 +2254,8 @@ qca8k_get_ethtool_stats(struct dsa_switc
 | |
|  	u32 hi = 0;
 | |
|  	int ret;
 | |
|  
 | |
| -	if (priv->mgmt_master &&
 | |
| -	    qca8k_get_ethtool_stats_eth(ds, port, data) > 0)
 | |
| +	if (priv->mgmt_master && priv->info->ops->autocast_mib &&
 | |
| +	    priv->info->ops->autocast_mib(ds, port, data) > 0)
 | |
|  		return;
 | |
|  
 | |
|  	for (i = 0; i < priv->info->mib_count; i++) {
 | |
| @@ -3187,20 +3187,27 @@ static int qca8k_resume(struct device *d
 | |
|  static SIMPLE_DEV_PM_OPS(qca8k_pm_ops,
 | |
|  			 qca8k_suspend, qca8k_resume);
 | |
|  
 | |
| +static const struct qca8k_info_ops qca8xxx_ops = {
 | |
| +	.autocast_mib = qca8k_get_ethtool_stats_eth,
 | |
| +};
 | |
| +
 | |
|  static const struct qca8k_match_data qca8327 = {
 | |
|  	.id = QCA8K_ID_QCA8327,
 | |
|  	.reduced_package = true,
 | |
|  	.mib_count = QCA8K_QCA832X_MIB_COUNT,
 | |
| +	.ops = &qca8xxx_ops,
 | |
|  };
 | |
|  
 | |
|  static const struct qca8k_match_data qca8328 = {
 | |
|  	.id = QCA8K_ID_QCA8327,
 | |
|  	.mib_count = QCA8K_QCA832X_MIB_COUNT,
 | |
| +	.ops = &qca8xxx_ops,
 | |
|  };
 | |
|  
 | |
|  static const struct qca8k_match_data qca833x = {
 | |
|  	.id = QCA8K_ID_QCA8337,
 | |
|  	.mib_count = QCA8K_QCA833X_MIB_COUNT,
 | |
| +	.ops = &qca8xxx_ops,
 | |
|  };
 | |
|  
 | |
|  static const struct of_device_id qca8k_of_match[] = {
 | |
| --- a/drivers/net/dsa/qca/qca8k.h
 | |
| +++ b/drivers/net/dsa/qca/qca8k.h
 | |
| @@ -324,10 +324,15 @@ enum qca8k_mid_cmd {
 | |
|  	QCA8K_MIB_CAST = 3,
 | |
|  };
 | |
|  
 | |
| +struct qca8k_info_ops {
 | |
| +	int (*autocast_mib)(struct dsa_switch *ds, int port, u64 *data);
 | |
| +};
 | |
| +
 | |
|  struct qca8k_match_data {
 | |
|  	u8 id;
 | |
|  	bool reduced_package;
 | |
|  	u8 mib_count;
 | |
| +	const struct qca8k_info_ops *ops;
 | |
|  };
 | |
|  
 | |
|  enum {
 |