forked from Minki/linux
net: dsa: mv88e6xxx: add flags for FID registers
Add flags to describe the presence of Global 1 ATU FID register (0x01) and VTU FID register (0x02), instead of checking families. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9fe850fb21
commit
6dc10bbc46
@ -565,16 +565,6 @@ static unsigned int mv88e6xxx_num_databases(struct mv88e6xxx_chip *chip)
|
|||||||
return chip->info->num_databases;
|
return chip->info->num_databases;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool mv88e6xxx_has_fid_reg(struct mv88e6xxx_chip *chip)
|
|
||||||
{
|
|
||||||
/* Does the device have dedicated FID registers for ATU and VTU ops? */
|
|
||||||
if (mv88e6xxx_6097_family(chip) || mv88e6xxx_6165_family(chip) ||
|
|
||||||
mv88e6xxx_6351_family(chip) || mv88e6xxx_6352_family(chip))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* We expect the switch to perform auto negotiation if there is a real
|
/* We expect the switch to perform auto negotiation if there is a real
|
||||||
* phy. However, in the case of a fixed link phy, we force the port
|
* phy. However, in the case of a fixed link phy, we force the port
|
||||||
* settings from the fixed link settings.
|
* settings from the fixed link settings.
|
||||||
@ -978,7 +968,7 @@ static int _mv88e6xxx_atu_cmd(struct mv88e6xxx_chip *chip, u16 fid, u16 cmd)
|
|||||||
u16 val;
|
u16 val;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (mv88e6xxx_has_fid_reg(chip)) {
|
if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_G1_ATU_FID)) {
|
||||||
err = mv88e6xxx_g1_write(chip, GLOBAL_ATU_FID, fid);
|
err = mv88e6xxx_g1_write(chip, GLOBAL_ATU_FID, fid);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -1386,7 +1376,7 @@ static int _mv88e6xxx_vtu_getnext(struct mv88e6xxx_chip *chip,
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
if (mv88e6xxx_has_fid_reg(chip)) {
|
if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_G1_VTU_FID)) {
|
||||||
err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_FID, &val);
|
err = mv88e6xxx_g1_read(chip, GLOBAL_VTU_FID, &val);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@ -1498,7 +1488,7 @@ static int _mv88e6xxx_vtu_loadpurge(struct mv88e6xxx_chip *chip,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mv88e6xxx_has_fid_reg(chip)) {
|
if (mv88e6xxx_has(chip, MV88E6XXX_FLAG_G1_VTU_FID)) {
|
||||||
reg = entry->fid & GLOBAL_VTU_FID_MASK;
|
reg = entry->fid & GLOBAL_VTU_FID_MASK;
|
||||||
err = mv88e6xxx_g1_write(chip, GLOBAL_VTU_FID, reg);
|
err = mv88e6xxx_g1_write(chip, GLOBAL_VTU_FID, reg);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -170,8 +170,8 @@
|
|||||||
#define GLOBAL_MAC_01 0x01
|
#define GLOBAL_MAC_01 0x01
|
||||||
#define GLOBAL_MAC_23 0x02
|
#define GLOBAL_MAC_23 0x02
|
||||||
#define GLOBAL_MAC_45 0x03
|
#define GLOBAL_MAC_45 0x03
|
||||||
#define GLOBAL_ATU_FID 0x01 /* 6097 6165 6351 6352 */
|
#define GLOBAL_ATU_FID 0x01
|
||||||
#define GLOBAL_VTU_FID 0x02 /* 6097 6165 6351 6352 */
|
#define GLOBAL_VTU_FID 0x02
|
||||||
#define GLOBAL_VTU_FID_MASK 0xfff
|
#define GLOBAL_VTU_FID_MASK 0xfff
|
||||||
#define GLOBAL_VTU_SID 0x03 /* 6097 6165 6351 6352 */
|
#define GLOBAL_VTU_SID 0x03 /* 6097 6165 6351 6352 */
|
||||||
#define GLOBAL_VTU_SID_MASK 0x3f
|
#define GLOBAL_VTU_SID_MASK 0x3f
|
||||||
@ -408,6 +408,11 @@ enum mv88e6xxx_cap {
|
|||||||
*/
|
*/
|
||||||
MV88E6XXX_CAP_SERDES,
|
MV88E6XXX_CAP_SERDES,
|
||||||
|
|
||||||
|
/* Switch Global (1) Registers.
|
||||||
|
*/
|
||||||
|
MV88E6XXX_CAP_G1_ATU_FID, /* (0x01) ATU FID Register */
|
||||||
|
MV88E6XXX_CAP_G1_VTU_FID, /* (0x02) VTU FID Register */
|
||||||
|
|
||||||
/* Switch Global 2 Registers.
|
/* Switch Global 2 Registers.
|
||||||
* The device contains a second set of global 16-bit registers.
|
* The device contains a second set of global 16-bit registers.
|
||||||
*/
|
*/
|
||||||
@ -460,6 +465,9 @@ enum mv88e6xxx_cap {
|
|||||||
|
|
||||||
#define MV88E6XXX_FLAG_SERDES BIT_ULL(MV88E6XXX_CAP_SERDES)
|
#define MV88E6XXX_FLAG_SERDES BIT_ULL(MV88E6XXX_CAP_SERDES)
|
||||||
|
|
||||||
|
#define MV88E6XXX_FLAG_G1_ATU_FID BIT_ULL(MV88E6XXX_CAP_G1_ATU_FID)
|
||||||
|
#define MV88E6XXX_FLAG_G1_VTU_FID BIT_ULL(MV88E6XXX_CAP_G1_VTU_FID)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAG_GLOBAL2 BIT_ULL(MV88E6XXX_CAP_GLOBAL2)
|
#define MV88E6XXX_FLAG_GLOBAL2 BIT_ULL(MV88E6XXX_CAP_GLOBAL2)
|
||||||
#define MV88E6XXX_FLAG_G2_MGMT_EN_2X BIT_ULL(MV88E6XXX_CAP_G2_MGMT_EN_2X)
|
#define MV88E6XXX_FLAG_G2_MGMT_EN_2X BIT_ULL(MV88E6XXX_CAP_G2_MGMT_EN_2X)
|
||||||
#define MV88E6XXX_FLAG_G2_MGMT_EN_0X BIT_ULL(MV88E6XXX_CAP_G2_MGMT_EN_0X)
|
#define MV88E6XXX_FLAG_G2_MGMT_EN_0X BIT_ULL(MV88E6XXX_CAP_G2_MGMT_EN_0X)
|
||||||
@ -519,7 +527,9 @@ enum mv88e6xxx_cap {
|
|||||||
MV88E6XXX_FLAGS_MULTI_CHIP)
|
MV88E6XXX_FLAGS_MULTI_CHIP)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6097 \
|
#define MV88E6XXX_FLAGS_FAMILY_6097 \
|
||||||
(MV88E6XXX_FLAG_GLOBAL2 | \
|
(MV88E6XXX_FLAG_G1_ATU_FID | \
|
||||||
|
MV88E6XXX_FLAG_G1_VTU_FID | \
|
||||||
|
MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
||||||
MV88E6XXX_FLAG_G2_POT | \
|
MV88E6XXX_FLAG_G2_POT | \
|
||||||
@ -531,7 +541,9 @@ enum mv88e6xxx_cap {
|
|||||||
MV88E6XXX_FLAGS_PVT)
|
MV88E6XXX_FLAGS_PVT)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6165 \
|
#define MV88E6XXX_FLAGS_FAMILY_6165 \
|
||||||
(MV88E6XXX_FLAG_GLOBAL2 | \
|
(MV88E6XXX_FLAG_G1_ATU_FID | \
|
||||||
|
MV88E6XXX_FLAG_G1_VTU_FID | \
|
||||||
|
MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
||||||
MV88E6XXX_FLAG_G2_SWITCH_MAC | \
|
MV88E6XXX_FLAG_G2_SWITCH_MAC | \
|
||||||
@ -570,6 +582,8 @@ enum mv88e6xxx_cap {
|
|||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6351 \
|
#define MV88E6XXX_FLAGS_FAMILY_6351 \
|
||||||
(MV88E6XXX_FLAG_EDSA | \
|
(MV88E6XXX_FLAG_EDSA | \
|
||||||
|
MV88E6XXX_FLAG_G1_ATU_FID | \
|
||||||
|
MV88E6XXX_FLAG_G1_VTU_FID | \
|
||||||
MV88E6XXX_FLAG_GLOBAL2 | \
|
MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
||||||
@ -587,6 +601,8 @@ enum mv88e6xxx_cap {
|
|||||||
#define MV88E6XXX_FLAGS_FAMILY_6352 \
|
#define MV88E6XXX_FLAGS_FAMILY_6352 \
|
||||||
(MV88E6XXX_FLAG_EDSA | \
|
(MV88E6XXX_FLAG_EDSA | \
|
||||||
MV88E6XXX_FLAG_EEE | \
|
MV88E6XXX_FLAG_EEE | \
|
||||||
|
MV88E6XXX_FLAG_G1_ATU_FID | \
|
||||||
|
MV88E6XXX_FLAG_G1_VTU_FID | \
|
||||||
MV88E6XXX_FLAG_GLOBAL2 | \
|
MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_2X | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
||||||
|
Loading…
Reference in New Issue
Block a user