-
-
Save Ansuel/9524fb1b431a64d60af821a6396e0af1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From a083dfc11eb45637ffd57813cc47d0fc6b2b9766 Mon Sep 17 00:00:00 2001 | |
From: Christian Marangi <ansuelsmth@gmail.com> | |
Date: Sat, 11 May 2024 16:18:27 +0200 | |
Subject: [PATCH] HACK | |
--- | |
drivers/net/dsa/qca/qca8k-8xxx.c | 58 ++++++++++++++++++++++++++------ | |
1 file changed, 47 insertions(+), 11 deletions(-) | |
--- a/drivers/net/dsa/qca/qca8k-8xxx.c | |
+++ b/drivers/net/dsa/qca/qca8k-8xxx.c | |
@@ -508,9 +508,27 @@ qca8k_bulk_read(void *ctx, const void *r | |
struct qca8k_priv *priv = ctx; | |
u32 reg = *(u16 *)reg_buf; | |
- if (priv->mgmt_master && | |
- !qca8k_read_eth(priv, reg, val_buf, val_len)) | |
+ if (priv->mgmt_master) { | |
+ u32 *val_buf2; | |
+ | |
+ qca8k_read_eth(priv, reg, val_buf, val_len); | |
+ | |
+ val_buf2 = kmalloc(val_len, GFP_KERNEL); | |
+ for (i = 0; i < count; i++, reg += sizeof(u32)) { | |
+ ret = qca8k_read_mii(priv, reg, val_buf2 + i); | |
+ if (ret < 0) | |
+ return ret; | |
+ } | |
+ | |
+ reg = *(u16 *)reg_buf; | |
+ for (i = 0; i < count; i++, reg += sizeof(u32)) | |
+ if (val_buf[i] != val_buf2[i]) | |
+ pr_info("REG %x read diff MGMT_ETH: %x MII: %x\n", reg, val_buf[i], val_buf2[i]); | |
+ | |
+ kfree(val_buf2); | |
+ | |
return 0; | |
+ } | |
/* loop count times and increment reg of 4 */ | |
for (i = 0; i < count; i++, reg += sizeof(u32)) { | |
@@ -531,9 +549,27 @@ qca8k_bulk_gather_write(void *ctx, const | |
u32 reg = *(u16 *)reg_buf; | |
u32 *val = (u32 *)val_buf; | |
- if (priv->mgmt_master && | |
- !qca8k_write_eth(priv, reg, val, val_len)) | |
+ if (priv->mgmt_master) { | |
+ u32 *val_buf2; | |
+ | |
+ qca8k_write_eth(priv, reg, val, val_len); | |
+ | |
+ val_buf2 = kmalloc(val_len, GFP_KERNEL); | |
+ for (i = 0; i < count; i++, reg += sizeof(u32)) { | |
+ ret = qca8k_read_mii(priv, reg, val_buf2 + i); | |
+ if (ret < 0) | |
+ return ret; | |
+ } | |
+ | |
+ reg = *(u16 *)reg_buf; | |
+ for (i = 0; i < count; i++, reg += sizeof(u32)) | |
+ if (val_buf[i] != val_buf2[i]) | |
+ pr_info("REG %x write diff MGMT_ETH: %x MII: %x\n", reg, val_buf[i], val_buf2[i]); | |
+ | |
+ kfree(val_buf2); | |
+ | |
return 0; | |
+ } | |
/* loop count times, increment reg of 4 and increment val ptr to | |
* the next value | |
@@ -900,10 +936,10 @@ qca8k_internal_mdio_write(struct mii_bus | |
struct qca8k_priv *priv = slave_bus->priv; | |
int ret; | |
- /* Use mdio Ethernet when available, fallback to legacy one on error */ | |
- ret = qca8k_phy_eth_command(priv, false, phy, regnum, data); | |
- if (!ret) | |
- return 0; | |
+ // /* Use mdio Ethernet when available, fallback to legacy one on error */ | |
+ // ret = qca8k_phy_eth_command(priv, false, phy, regnum, data); | |
+ // if (!ret) | |
+ // return 0; | |
return qca8k_mdio_write(priv, phy, regnum, data); | |
} | |
@@ -915,9 +951,9 @@ qca8k_internal_mdio_read(struct mii_bus | |
int ret; | |
/* Use mdio Ethernet when available, fallback to legacy one on error */ | |
- ret = qca8k_phy_eth_command(priv, true, phy, regnum, 0); | |
- if (ret >= 0) | |
- return ret; | |
+ // ret = qca8k_phy_eth_command(priv, true, phy, regnum, 0); | |
+ // if (ret >= 0) | |
+ // return ret; | |
ret = qca8k_mdio_read(priv, phy, regnum); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment