mirror of
https://github.com/torvalds/linux.git
synced 2026-10-29 21:06:02 +01:00
net: ethernet: oa_tc6: Add read_mms/write_mms register access functions
The Open Alliance TC6 standard defines multiple memory maps for the MAC-PHY's register space. These are used to separate standard, vendor and PHY MMD specific registers. Define register access functions that allow the caller to specify the MMS. Signed-off-by: Ciprian Regus <ciprian.regus@analog.com> Link: https://patch.msgid.link/20260708-adin1140-driver-v5-7-4aca7b51a58b@analog.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
31bc75f17c
commit
6ad2501794
|
|
@ -62,6 +62,8 @@
|
|||
#define STATUS0_RESETC_POLL_DELAY 1000
|
||||
#define STATUS0_RESETC_POLL_TIMEOUT 1000000
|
||||
|
||||
#define OA_TC6_REG_MMS_MASK GENMASK(19, 16)
|
||||
|
||||
/* Internal structure for MAC-PHY drivers */
|
||||
struct oa_tc6 {
|
||||
struct net_device *netdev;
|
||||
|
|
@ -343,6 +345,27 @@ int oa_tc6_read_register(struct oa_tc6 *tc6, u32 address, u32 *value)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(oa_tc6_read_register);
|
||||
|
||||
/**
|
||||
* oa_tc6_read_register_mms - function for reading a MAC-PHY register in a
|
||||
* specified memory map.
|
||||
* @tc6: oa_tc6 struct.
|
||||
* @mms: Memory map selector for the register.
|
||||
* @address: register address of the MAC-PHY to be read.
|
||||
* @value: value read from the @address register address of the MAC-PHY.
|
||||
*
|
||||
* Return: 0 on success or a negative error code on failure.
|
||||
*/
|
||||
int oa_tc6_read_register_mms(struct oa_tc6 *tc6, u8 mms, u16 address,
|
||||
u32 *value)
|
||||
{
|
||||
u32 mms_reg;
|
||||
|
||||
mms_reg = FIELD_PREP(OA_TC6_REG_MMS_MASK, mms) | address;
|
||||
|
||||
return oa_tc6_read_registers(tc6, mms_reg, value, 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(oa_tc6_read_register_mms);
|
||||
|
||||
/**
|
||||
* oa_tc6_write_registers - function for writing multiple consecutive registers.
|
||||
* @tc6: oa_tc6 struct.
|
||||
|
|
@ -387,6 +410,27 @@ int oa_tc6_write_register(struct oa_tc6 *tc6, u32 address, u32 value)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(oa_tc6_write_register);
|
||||
|
||||
/**
|
||||
* oa_tc6_write_register_mms - function for writing a MAC-PHY register in a
|
||||
* specified memory map.
|
||||
* @tc6: oa_tc6 struct.
|
||||
* @mms: Memory map selector for the register.
|
||||
* @address: register address of the MAC-PHY to be written.
|
||||
* @value: value to be written in the @address register address of the MAC-PHY.
|
||||
*
|
||||
* Return: 0 on success or a negative error code on failure.
|
||||
*/
|
||||
int oa_tc6_write_register_mms(struct oa_tc6 *tc6, u8 mms, u16 address,
|
||||
u32 value)
|
||||
{
|
||||
u32 mms_reg;
|
||||
|
||||
mms_reg = FIELD_PREP(OA_TC6_REG_MMS_MASK, mms) | address;
|
||||
|
||||
return oa_tc6_write_registers(tc6, mms_reg, &value, 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(oa_tc6_write_register_mms);
|
||||
|
||||
static int oa_tc6_check_phy_reg_direct_access_capability(struct oa_tc6 *tc6)
|
||||
{
|
||||
u32 regval;
|
||||
|
|
|
|||
|
|
@ -74,9 +74,13 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev,
|
|||
struct oa_tc6_quirks *quirks);
|
||||
void oa_tc6_exit(struct oa_tc6 *tc6);
|
||||
int oa_tc6_write_register(struct oa_tc6 *tc6, u32 address, u32 value);
|
||||
int oa_tc6_write_register_mms(struct oa_tc6 *tc6, u8 mms, u16 address,
|
||||
u32 value);
|
||||
int oa_tc6_write_registers(struct oa_tc6 *tc6, u32 address, u32 value[],
|
||||
u8 length);
|
||||
int oa_tc6_read_register(struct oa_tc6 *tc6, u32 address, u32 *value);
|
||||
int oa_tc6_read_register_mms(struct oa_tc6 *tc6, u8 mms, u16 address,
|
||||
u32 *value);
|
||||
int oa_tc6_read_registers(struct oa_tc6 *tc6, u32 address, u32 value[],
|
||||
u8 length);
|
||||
netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user