mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 21:58:04 +00:00
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 {
|