Skip to content

Commit 6f10624

Browse files
committed
Merge branch 'net-phy-make-phy_package-a-separate-module'
Heiner Kallweit says: ==================== net: phy: make phy_package a separate module Only a handful of PHY drivers needs the PHY package functionality, therefore make it a separate module which is built only if needed. ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents 883af78 + 7d57386 commit 6f10624

File tree

7 files changed

+91
-72
lines changed

7 files changed

+91
-72
lines changed

drivers/net/phy/Kconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ if PHYLIB
2525
config SWPHY
2626
bool
2727

28+
config PHY_PACKAGE
29+
tristate
30+
2831
config LED_TRIGGER_PHY
2932
bool "Support LED triggers for tracking link state"
3033
depends on LEDS_TRIGGERS
@@ -157,6 +160,7 @@ config BCM54140_PHY
157160
tristate "Broadcom BCM54140 PHY"
158161
depends on HWMON || HWMON=n
159162
select BCM_NET_PHYLIB
163+
select PHY_PACKAGE
160164
help
161165
Support the Broadcom BCM54140 Quad SGMII/QSGMII PHY.
162166

@@ -292,6 +296,7 @@ source "drivers/net/phy/mediatek/Kconfig"
292296
config MICREL_PHY
293297
tristate "Micrel PHYs"
294298
depends on PTP_1588_CLOCK_OPTIONAL
299+
select PHY_PACKAGE
295300
help
296301
Supports the KSZ9021, VSC8201, KS8001 PHYs.
297302

@@ -323,6 +328,7 @@ config MICROSEMI_PHY
323328
depends on MACSEC || MACSEC=n
324329
depends on PTP_1588_CLOCK_OPTIONAL || !NETWORK_PHY_TIMESTAMPING
325330
select CRYPTO_LIB_AES if MACSEC
331+
select PHY_PACKAGE
326332
help
327333
Currently supports VSC8514, VSC8530, VSC8531, VSC8540 and VSC8541 PHYs
328334

drivers/net/phy/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
libphy-y := phy.o phy-c45.o phy-core.o phy_device.o \
55
linkmode.o phy_link_topology.o \
6-
phy_package.o phy_caps.o mdio_bus_provider.o
6+
phy_caps.o mdio_bus_provider.o
77
mdio-bus-y += mdio_bus.o mdio_device.o
88

99
ifdef CONFIG_PHYLIB
@@ -19,6 +19,7 @@ obj-$(CONFIG_MDIO_BUS) += mdio-bus.o
1919
obj-$(CONFIG_PHYLINK) += phylink.o
2020
obj-$(CONFIG_PHYLIB) += libphy.o
2121
obj-$(CONFIG_PHYLIB) += mdio_devres.o
22+
obj-$(CONFIG_PHY_PACKAGE) += phy_package.o
2223

2324
obj-$(CONFIG_NETWORK_PHY_TIMESTAMPING) += mii_timestamper.o
2425

drivers/net/phy/mediatek/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ config MEDIATEK_GE_SOC_PHY
2727
depends on ARCH_AIROHA || (ARCH_MEDIATEK && NVMEM_MTK_EFUSE) || \
2828
COMPILE_TEST
2929
select MTK_NET_PHYLIB
30+
select PHY_PACKAGE
3031
help
3132
Supports MediaTek SoC built-in Gigabit Ethernet PHYs.
3233

drivers/net/phy/phy-core.c

Lines changed: 6 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -375,8 +375,8 @@ static void mmd_phy_indirect(struct mii_bus *bus, int phy_addr, int devad,
375375
devad | MII_MMD_CTRL_NOINCR);
376376
}
377377

378-
static int mmd_phy_read(struct mii_bus *bus, int phy_addr, bool is_c45,
379-
int devad, u32 regnum)
378+
int mmd_phy_read(struct mii_bus *bus, int phy_addr, bool is_c45,
379+
int devad, u32 regnum)
380380
{
381381
if (is_c45)
382382
return __mdiobus_c45_read(bus, phy_addr, devad, regnum);
@@ -385,9 +385,10 @@ static int mmd_phy_read(struct mii_bus *bus, int phy_addr, bool is_c45,
385385
/* Read the content of the MMD's selected register */
386386
return __mdiobus_read(bus, phy_addr, MII_MMD_DATA);
387387
}
388+
EXPORT_SYMBOL_GPL(mmd_phy_read);
388389

389-
static int mmd_phy_write(struct mii_bus *bus, int phy_addr, bool is_c45,
390-
int devad, u32 regnum, u16 val)
390+
int mmd_phy_write(struct mii_bus *bus, int phy_addr, bool is_c45,
391+
int devad, u32 regnum, u16 val)
391392
{
392393
if (is_c45)
393394
return __mdiobus_c45_write(bus, phy_addr, devad, regnum, val);
@@ -396,6 +397,7 @@ static int mmd_phy_write(struct mii_bus *bus, int phy_addr, bool is_c45,
396397
/* Write the data into MMD's selected register */
397398
return __mdiobus_write(bus, phy_addr, MII_MMD_DATA, val);
398399
}
400+
EXPORT_SYMBOL_GPL(mmd_phy_write);
399401

400402
/**
401403
* __phy_read_mmd - Convenience function for reading a register
@@ -485,71 +487,6 @@ int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val)
485487
}
486488
EXPORT_SYMBOL(phy_write_mmd);
487489

488-
/**
489-
* __phy_package_read_mmd - read MMD reg relative to PHY package base addr
490-
* @phydev: The phy_device struct
491-
* @addr_offset: The offset to be added to PHY package base_addr
492-
* @devad: The MMD to read from
493-
* @regnum: The register on the MMD to read
494-
*
495-
* Convenience helper for reading a register of an MMD on a given PHY
496-
* using the PHY package base address. The base address is added to
497-
* the addr_offset value.
498-
*
499-
* Same calling rules as for __phy_read();
500-
*
501-
* NOTE: It's assumed that the entire PHY package is either C22 or C45.
502-
*/
503-
int __phy_package_read_mmd(struct phy_device *phydev,
504-
unsigned int addr_offset, int devad,
505-
u32 regnum)
506-
{
507-
int addr = phy_package_address(phydev, addr_offset);
508-
509-
if (addr < 0)
510-
return addr;
511-
512-
if (regnum > (u16)~0 || devad > 32)
513-
return -EINVAL;
514-
515-
return mmd_phy_read(phydev->mdio.bus, addr, phydev->is_c45, devad,
516-
regnum);
517-
}
518-
EXPORT_SYMBOL(__phy_package_read_mmd);
519-
520-
/**
521-
* __phy_package_write_mmd - write MMD reg relative to PHY package base addr
522-
* @phydev: The phy_device struct
523-
* @addr_offset: The offset to be added to PHY package base_addr
524-
* @devad: The MMD to write to
525-
* @regnum: The register on the MMD to write
526-
* @val: value to write to @regnum
527-
*
528-
* Convenience helper for writing a register of an MMD on a given PHY
529-
* using the PHY package base address. The base address is added to
530-
* the addr_offset value.
531-
*
532-
* Same calling rules as for __phy_write();
533-
*
534-
* NOTE: It's assumed that the entire PHY package is either C22 or C45.
535-
*/
536-
int __phy_package_write_mmd(struct phy_device *phydev,
537-
unsigned int addr_offset, int devad,
538-
u32 regnum, u16 val)
539-
{
540-
int addr = phy_package_address(phydev, addr_offset);
541-
542-
if (addr < 0)
543-
return addr;
544-
545-
if (regnum > (u16)~0 || devad > 32)
546-
return -EINVAL;
547-
548-
return mmd_phy_write(phydev->mdio.bus, addr, phydev->is_c45, devad,
549-
regnum, val);
550-
}
551-
EXPORT_SYMBOL(__phy_package_write_mmd);
552-
553490
/**
554491
* phy_modify_changed - Function for modifying a PHY register
555492
* @phydev: the phy_device struct

drivers/net/phy/phy_package.c

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ void *phy_package_get_priv(struct phy_device *phydev)
5252
}
5353
EXPORT_SYMBOL_GPL(phy_package_get_priv);
5454

55-
int phy_package_address(struct phy_device *phydev, unsigned int addr_offset)
55+
static int phy_package_address(struct phy_device *phydev,
56+
unsigned int addr_offset)
5657
{
5758
struct phy_package_shared *shared = phydev->shared;
5859
u8 base_addr = shared->base_addr;
@@ -90,6 +91,71 @@ int __phy_package_write(struct phy_device *phydev, unsigned int addr_offset,
9091
}
9192
EXPORT_SYMBOL_GPL(__phy_package_write);
9293

94+
/**
95+
* __phy_package_read_mmd - read MMD reg relative to PHY package base addr
96+
* @phydev: The phy_device struct
97+
* @addr_offset: The offset to be added to PHY package base_addr
98+
* @devad: The MMD to read from
99+
* @regnum: The register on the MMD to read
100+
*
101+
* Convenience helper for reading a register of an MMD on a given PHY
102+
* using the PHY package base address. The base address is added to
103+
* the addr_offset value.
104+
*
105+
* Same calling rules as for __phy_read();
106+
*
107+
* NOTE: It's assumed that the entire PHY package is either C22 or C45.
108+
*/
109+
int __phy_package_read_mmd(struct phy_device *phydev,
110+
unsigned int addr_offset, int devad,
111+
u32 regnum)
112+
{
113+
int addr = phy_package_address(phydev, addr_offset);
114+
115+
if (addr < 0)
116+
return addr;
117+
118+
if (regnum > (u16)~0 || devad > 32)
119+
return -EINVAL;
120+
121+
return mmd_phy_read(phydev->mdio.bus, addr, phydev->is_c45, devad,
122+
regnum);
123+
}
124+
EXPORT_SYMBOL(__phy_package_read_mmd);
125+
126+
/**
127+
* __phy_package_write_mmd - write MMD reg relative to PHY package base addr
128+
* @phydev: The phy_device struct
129+
* @addr_offset: The offset to be added to PHY package base_addr
130+
* @devad: The MMD to write to
131+
* @regnum: The register on the MMD to write
132+
* @val: value to write to @regnum
133+
*
134+
* Convenience helper for writing a register of an MMD on a given PHY
135+
* using the PHY package base address. The base address is added to
136+
* the addr_offset value.
137+
*
138+
* Same calling rules as for __phy_write();
139+
*
140+
* NOTE: It's assumed that the entire PHY package is either C22 or C45.
141+
*/
142+
int __phy_package_write_mmd(struct phy_device *phydev,
143+
unsigned int addr_offset, int devad,
144+
u32 regnum, u16 val)
145+
{
146+
int addr = phy_package_address(phydev, addr_offset);
147+
148+
if (addr < 0)
149+
return addr;
150+
151+
if (regnum > (u16)~0 || devad > 32)
152+
return -EINVAL;
153+
154+
return mmd_phy_write(phydev->mdio.bus, addr, phydev->is_c45, devad,
155+
regnum, val);
156+
}
157+
EXPORT_SYMBOL(__phy_package_write_mmd);
158+
93159
static bool __phy_package_set_once(struct phy_device *phydev, unsigned int b)
94160
{
95161
struct phy_package_shared *shared = phydev->shared;
@@ -348,3 +414,6 @@ int devm_of_phy_package_join(struct device *dev, struct phy_device *phydev,
348414
return ret;
349415
}
350416
EXPORT_SYMBOL_GPL(devm_of_phy_package_join);
417+
418+
MODULE_DESCRIPTION("PHY package support");
419+
MODULE_LICENSE("GPL");

drivers/net/phy/phylib-internal.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#define __PHYLIB_INTERNAL_H
88

99
struct phy_device;
10+
struct mii_bus;
1011

1112
/*
1213
* phy_supported_speeds - return all speeds currently supported by a PHY device
@@ -20,7 +21,10 @@ void of_set_phy_timing_role(struct phy_device *phydev);
2021
int phy_speed_down_core(struct phy_device *phydev);
2122
void phy_check_downshift(struct phy_device *phydev);
2223

23-
int phy_package_address(struct phy_device *phydev, unsigned int addr_offset);
24+
int mmd_phy_read(struct mii_bus *bus, int phy_addr, bool is_c45,
25+
int devad, u32 regnum);
26+
int mmd_phy_write(struct mii_bus *bus, int phy_addr, bool is_c45,
27+
int devad, u32 regnum, u16 val);
2428

2529
int genphy_c45_read_eee_adv(struct phy_device *phydev, unsigned long *adv);
2630

drivers/net/phy/qcom/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ config QCA808X_PHY
2424
config QCA807X_PHY
2525
tristate "Qualcomm QCA807x PHYs"
2626
select QCOM_NET_PHYLIB
27+
select PHY_PACKAGE
2728
depends on OF_MDIO
2829
help
2930
Currently supports the Qualcomm QCA8072, QCA8075 and the PSGMII

0 commit comments

Comments
 (0)