123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- From 6fb760972c49490b03f3db2ad64cf30bdd28c54a Mon Sep 17 00:00:00 2001
- From: Christian Marangi <[email protected]>
- Date: Mon, 29 Jan 2024 15:15:20 +0100
- Subject: [PATCH 2/5] net: phy: qcom: create and move functions to shared
- library
- Create and move functions to shared library in preparation for qca83xx
- PHY Family to be detached from at803x driver.
- Only the shared defines are moved to the shared qcom.h header.
- Signed-off-by: Christian Marangi <[email protected]>
- Reviewed-by: Andrew Lunn <[email protected]>
- Link: https://lore.kernel.org/r/[email protected]
- Signed-off-by: Jakub Kicinski <[email protected]>
- ---
- drivers/net/phy/qcom/Kconfig | 4 ++
- drivers/net/phy/qcom/Makefile | 1 +
- drivers/net/phy/qcom/at803x.c | 69 +----------------------------
- drivers/net/phy/qcom/qcom-phy-lib.c | 53 ++++++++++++++++++++++
- drivers/net/phy/qcom/qcom.h | 34 ++++++++++++++
- 5 files changed, 94 insertions(+), 67 deletions(-)
- create mode 100644 drivers/net/phy/qcom/qcom-phy-lib.c
- create mode 100644 drivers/net/phy/qcom/qcom.h
- --- a/drivers/net/phy/qcom/Kconfig
- +++ b/drivers/net/phy/qcom/Kconfig
- @@ -1,6 +1,10 @@
- # SPDX-License-Identifier: GPL-2.0-only
- +config QCOM_NET_PHYLIB
- + tristate
- +
- config AT803X_PHY
- tristate "Qualcomm Atheros AR803X PHYs and QCA833x PHYs"
- + select QCOM_NET_PHYLIB
- depends on REGULATOR
- help
- Currently supports the AR8030, AR8031, AR8033, AR8035 and internal
- --- a/drivers/net/phy/qcom/Makefile
- +++ b/drivers/net/phy/qcom/Makefile
- @@ -1,2 +1,3 @@
- # SPDX-License-Identifier: GPL-2.0
- +obj-$(CONFIG_QCOM_NET_PHYLIB) += qcom-phy-lib.o
- obj-$(CONFIG_AT803X_PHY) += at803x.o
- --- a/drivers/net/phy/qcom/at803x.c
- +++ b/drivers/net/phy/qcom/at803x.c
- @@ -22,6 +22,8 @@
- #include <linux/sfp.h>
- #include <dt-bindings/net/qca-ar803x.h>
-
- +#include "qcom.h"
- +
- #define AT803X_SPECIFIC_FUNCTION_CONTROL 0x10
- #define AT803X_SFC_ASSERT_CRS BIT(11)
- #define AT803X_SFC_FORCE_LINK BIT(10)
- @@ -84,9 +86,6 @@
- #define AT803X_REG_CHIP_CONFIG 0x1f
- #define AT803X_BT_BX_REG_SEL 0x8000
-
- -#define AT803X_DEBUG_ADDR 0x1D
- -#define AT803X_DEBUG_DATA 0x1E
- -
- #define AT803X_MODE_CFG_MASK 0x0F
- #define AT803X_MODE_CFG_BASET_RGMII 0x00
- #define AT803X_MODE_CFG_BASET_SGMII 0x01
- @@ -103,19 +102,6 @@
- #define AT803X_PSSR 0x11 /*PHY-Specific Status Register*/
- #define AT803X_PSSR_MR_AN_COMPLETE 0x0200
-
- -#define AT803X_DEBUG_ANALOG_TEST_CTRL 0x00
- -#define QCA8327_DEBUG_MANU_CTRL_EN BIT(2)
- -#define QCA8337_DEBUG_MANU_CTRL_EN GENMASK(3, 2)
- -#define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15)
- -
- -#define AT803X_DEBUG_SYSTEM_CTRL_MODE 0x05
- -#define AT803X_DEBUG_TX_CLK_DLY_EN BIT(8)
- -
- -#define AT803X_DEBUG_REG_HIB_CTRL 0x0b
- -#define AT803X_DEBUG_HIB_CTRL_SEL_RST_80U BIT(10)
- -#define AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE BIT(13)
- -#define AT803X_DEBUG_HIB_CTRL_PS_HIB_EN BIT(15)
- -
- #define AT803X_DEBUG_REG_3C 0x3C
-
- #define AT803X_DEBUG_REG_GREEN 0x3D
- @@ -393,18 +379,6 @@ MODULE_DESCRIPTION("Qualcomm Atheros AR8
- MODULE_AUTHOR("Matus Ujhelyi");
- MODULE_LICENSE("GPL");
-
- -enum stat_access_type {
- - PHY,
- - MMD
- -};
- -
- -struct at803x_hw_stat {
- - const char *string;
- - u8 reg;
- - u32 mask;
- - enum stat_access_type access_type;
- -};
- -
- static struct at803x_hw_stat qca83xx_hw_stats[] = {
- { "phy_idle_errors", 0xa, GENMASK(7, 0), PHY},
- { "phy_receive_errors", 0x15, GENMASK(15, 0), PHY},
- @@ -439,45 +413,6 @@ struct at803x_context {
- u16 led_control;
- };
-
- -static int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
- -{
- - int ret;
- -
- - ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
- - if (ret < 0)
- - return ret;
- -
- - return phy_write(phydev, AT803X_DEBUG_DATA, data);
- -}
- -
- -static int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
- -{
- - int ret;
- -
- - ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
- - if (ret < 0)
- - return ret;
- -
- - return phy_read(phydev, AT803X_DEBUG_DATA);
- -}
- -
- -static int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
- - u16 clear, u16 set)
- -{
- - u16 val;
- - int ret;
- -
- - ret = at803x_debug_reg_read(phydev, reg);
- - if (ret < 0)
- - return ret;
- -
- - val = ret & 0xffff;
- - val &= ~clear;
- - val |= set;
- -
- - return phy_write(phydev, AT803X_DEBUG_DATA, val);
- -}
- -
- static int at803x_write_page(struct phy_device *phydev, int page)
- {
- int mask;
- --- /dev/null
- +++ b/drivers/net/phy/qcom/qcom-phy-lib.c
- @@ -0,0 +1,53 @@
- +// SPDX-License-Identifier: GPL-2.0
- +
- +#include <linux/phy.h>
- +#include <linux/module.h>
- +
- +#include "qcom.h"
- +
- +MODULE_DESCRIPTION("Qualcomm PHY driver Common Functions");
- +MODULE_AUTHOR("Matus Ujhelyi");
- +MODULE_AUTHOR("Christian Marangi <[email protected]>");
- +MODULE_LICENSE("GPL");
- +
- +int at803x_debug_reg_read(struct phy_device *phydev, u16 reg)
- +{
- + int ret;
- +
- + ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
- + if (ret < 0)
- + return ret;
- +
- + return phy_read(phydev, AT803X_DEBUG_DATA);
- +}
- +EXPORT_SYMBOL_GPL(at803x_debug_reg_read);
- +
- +int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
- + u16 clear, u16 set)
- +{
- + u16 val;
- + int ret;
- +
- + ret = at803x_debug_reg_read(phydev, reg);
- + if (ret < 0)
- + return ret;
- +
- + val = ret & 0xffff;
- + val &= ~clear;
- + val |= set;
- +
- + return phy_write(phydev, AT803X_DEBUG_DATA, val);
- +}
- +EXPORT_SYMBOL_GPL(at803x_debug_reg_mask);
- +
- +int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data)
- +{
- + int ret;
- +
- + ret = phy_write(phydev, AT803X_DEBUG_ADDR, reg);
- + if (ret < 0)
- + return ret;
- +
- + return phy_write(phydev, AT803X_DEBUG_DATA, data);
- +}
- +EXPORT_SYMBOL_GPL(at803x_debug_reg_write);
- --- /dev/null
- +++ b/drivers/net/phy/qcom/qcom.h
- @@ -0,0 +1,34 @@
- +/* SPDX-License-Identifier: GPL-2.0 */
- +
- +#define AT803X_DEBUG_ADDR 0x1D
- +#define AT803X_DEBUG_DATA 0x1E
- +
- +#define AT803X_DEBUG_ANALOG_TEST_CTRL 0x00
- +#define QCA8327_DEBUG_MANU_CTRL_EN BIT(2)
- +#define QCA8337_DEBUG_MANU_CTRL_EN GENMASK(3, 2)
- +#define AT803X_DEBUG_RX_CLK_DLY_EN BIT(15)
- +
- +#define AT803X_DEBUG_SYSTEM_CTRL_MODE 0x05
- +#define AT803X_DEBUG_TX_CLK_DLY_EN BIT(8)
- +
- +#define AT803X_DEBUG_REG_HIB_CTRL 0x0b
- +#define AT803X_DEBUG_HIB_CTRL_SEL_RST_80U BIT(10)
- +#define AT803X_DEBUG_HIB_CTRL_EN_ANY_CHANGE BIT(13)
- +#define AT803X_DEBUG_HIB_CTRL_PS_HIB_EN BIT(15)
- +
- +enum stat_access_type {
- + PHY,
- + MMD
- +};
- +
- +struct at803x_hw_stat {
- + const char *string;
- + u8 reg;
- + u32 mask;
- + enum stat_access_type access_type;
- +};
- +
- +int at803x_debug_reg_read(struct phy_device *phydev, u16 reg);
- +int at803x_debug_reg_mask(struct phy_device *phydev, u16 reg,
- + u16 clear, u16 set);
- +int at803x_debug_reg_write(struct phy_device *phydev, u16 reg, u16 data);
|