net: phy: qcom: qca807x: Support PHY counter

Within the QCA807X PHY operation's config_init() function, enable CRC
checking for received and transmitted frames and configure counter to
clear after being read to support counter recording. Additionally, add
support for PHY counter operations.

Signed-off-by: Luo Jie <quic_luoj@quicinc.com>
Link: https://patch.msgid.link/20250715-qcom_phy_counter-v3-3-8b0e460a527b@quicinc.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Luo Jie 2025-07-15 19:02:28 +08:00 committed by Jakub Kicinski
parent 3370e33a1c
commit d98f43b84a

View File

@ -124,6 +124,7 @@ struct qca807x_priv {
bool dac_full_amplitude;
bool dac_full_bias_current;
bool dac_disable_bias_current_tweak;
struct qcom_phy_hw_stats hw_stats;
};
static int qca807x_cable_test_start(struct phy_device *phydev)
@ -768,6 +769,10 @@ static int qca807x_config_init(struct phy_device *phydev)
return ret;
}
ret = qcom_phy_counter_config(phydev);
if (ret)
return ret;
control_dac = phy_read_mmd(phydev, MDIO_MMD_AN,
QCA807X_MMD7_1000BASE_T_POWER_SAVE_PER_CABLE_LENGTH);
control_dac &= ~QCA807X_CONTROL_DAC_MASK;
@ -782,6 +787,22 @@ static int qca807x_config_init(struct phy_device *phydev)
control_dac);
}
static int qca807x_update_stats(struct phy_device *phydev)
{
struct qca807x_priv *priv = phydev->priv;
return qcom_phy_update_stats(phydev, &priv->hw_stats);
}
static void qca807x_get_phy_stats(struct phy_device *phydev,
struct ethtool_eth_phy_stats *eth_stats,
struct ethtool_phy_stats *stats)
{
struct qca807x_priv *priv = phydev->priv;
qcom_phy_get_stats(stats, priv->hw_stats);
}
static struct phy_driver qca807x_drivers[] = {
{
PHY_ID_MATCH_EXACT(PHY_ID_QCA8072),
@ -800,6 +821,8 @@ static struct phy_driver qca807x_drivers[] = {
.suspend = genphy_suspend,
.cable_test_start = qca807x_cable_test_start,
.cable_test_get_status = qca808x_cable_test_get_status,
.update_stats = qca807x_update_stats,
.get_phy_stats = qca807x_get_phy_stats,
},
{
PHY_ID_MATCH_EXACT(PHY_ID_QCA8075),
@ -823,6 +846,8 @@ static struct phy_driver qca807x_drivers[] = {
.led_hw_is_supported = qca807x_led_hw_is_supported,
.led_hw_control_set = qca807x_led_hw_control_set,
.led_hw_control_get = qca807x_led_hw_control_get,
.update_stats = qca807x_update_stats,
.get_phy_stats = qca807x_get_phy_stats,
},
};
module_phy_driver(qca807x_drivers);