net: dsa: mv88e6xxx: add cap for PVT
Add flags to describe the presence of Cross-chip Port VLAN Table (PVT) related registers and simplify the setup of Global 2. Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3b4caa1b1c
commit
63ed880dea
|
@ -3221,17 +3221,17 @@ static int mv88e6xxx_g2_setup(struct mv88e6xxx_chip *chip)
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
if (mv88e6xxx_has(chip, MV88E6XXX_FLAGS_PVT)) {
|
||||||
|
/* Initialize Cross-chip Port VLAN Table to reset defaults */
|
||||||
|
err = mv88e6xxx_write(chip, REG_GLOBAL2, GLOBAL2_PVT_ADDR,
|
||||||
|
GLOBAL2_PVT_ADDR_OP_INIT_ONES);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
if (mv88e6xxx_6352_family(chip) || mv88e6xxx_6351_family(chip) ||
|
if (mv88e6xxx_6352_family(chip) || mv88e6xxx_6351_family(chip) ||
|
||||||
mv88e6xxx_6165_family(chip) || mv88e6xxx_6097_family(chip) ||
|
mv88e6xxx_6165_family(chip) || mv88e6xxx_6097_family(chip) ||
|
||||||
mv88e6xxx_6320_family(chip)) {
|
mv88e6xxx_6320_family(chip)) {
|
||||||
/* Initialise cross-chip port VLAN table to reset
|
|
||||||
* defaults.
|
|
||||||
*/
|
|
||||||
err = _mv88e6xxx_reg_write(chip, REG_GLOBAL2,
|
|
||||||
GLOBAL2_PVT_ADDR, 0x9000);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
/* Clear the priority override table. */
|
/* Clear the priority override table. */
|
||||||
for (i = 0; i < 16; i++) {
|
for (i = 0; i < 16; i++) {
|
||||||
err = _mv88e6xxx_reg_write(chip, REG_GLOBAL2,
|
err = _mv88e6xxx_reg_write(chip, REG_GLOBAL2,
|
||||||
|
|
|
@ -301,6 +301,10 @@
|
||||||
#define GLOBAL2_INGRESS_OP 0x09
|
#define GLOBAL2_INGRESS_OP 0x09
|
||||||
#define GLOBAL2_INGRESS_DATA 0x0a
|
#define GLOBAL2_INGRESS_DATA 0x0a
|
||||||
#define GLOBAL2_PVT_ADDR 0x0b
|
#define GLOBAL2_PVT_ADDR 0x0b
|
||||||
|
#define GLOBAL2_PVT_ADDR_BUSY BIT(15)
|
||||||
|
#define GLOBAL2_PVT_ADDR_OP_INIT_ONES ((0x01 << 12) | GLOBAL2_PVT_ADDR_BUSY)
|
||||||
|
#define GLOBAL2_PVT_ADDR_OP_WRITE_PVLAN ((0x03 << 12) | GLOBAL2_PVT_ADDR_BUSY)
|
||||||
|
#define GLOBAL2_PVT_ADDR_OP_READ ((0x04 << 12) | GLOBAL2_PVT_ADDR_BUSY)
|
||||||
#define GLOBAL2_PVT_DATA 0x0c
|
#define GLOBAL2_PVT_DATA 0x0c
|
||||||
#define GLOBAL2_SWITCH_MAC 0x0d
|
#define GLOBAL2_SWITCH_MAC 0x0d
|
||||||
#define GLOBAL2_ATU_STATS 0x0e
|
#define GLOBAL2_ATU_STATS 0x0e
|
||||||
|
@ -389,6 +393,8 @@ enum mv88e6xxx_cap {
|
||||||
MV88E6XXX_CAP_GLOBAL2,
|
MV88E6XXX_CAP_GLOBAL2,
|
||||||
MV88E6XXX_CAP_G2_MGMT_EN_2X, /* (0x02) MGMT Enable Register 2x */
|
MV88E6XXX_CAP_G2_MGMT_EN_2X, /* (0x02) MGMT Enable Register 2x */
|
||||||
MV88E6XXX_CAP_G2_MGMT_EN_0X, /* (0x03) MGMT Enable Register 0x */
|
MV88E6XXX_CAP_G2_MGMT_EN_0X, /* (0x03) MGMT Enable Register 0x */
|
||||||
|
MV88E6XXX_CAP_G2_PVT_ADDR, /* (0x0b) Cross Chip Port VLAN Addr */
|
||||||
|
MV88E6XXX_CAP_G2_PVT_DATA, /* (0x0c) Cross Chip Port VLAN Data */
|
||||||
MV88E6XXX_CAP_G2_SWITCH_MAC, /* (0x0d) Switch MAC/WoL/WoF */
|
MV88E6XXX_CAP_G2_SWITCH_MAC, /* (0x0d) Switch MAC/WoL/WoF */
|
||||||
|
|
||||||
/* Multi-chip Addressing Mode.
|
/* Multi-chip Addressing Mode.
|
||||||
|
@ -433,6 +439,8 @@ enum mv88e6xxx_cap {
|
||||||
#define MV88E6XXX_FLAG_GLOBAL2 BIT(MV88E6XXX_CAP_GLOBAL2)
|
#define MV88E6XXX_FLAG_GLOBAL2 BIT(MV88E6XXX_CAP_GLOBAL2)
|
||||||
#define MV88E6XXX_FLAG_G2_MGMT_EN_2X BIT(MV88E6XXX_CAP_G2_MGMT_EN_2X)
|
#define MV88E6XXX_FLAG_G2_MGMT_EN_2X BIT(MV88E6XXX_CAP_G2_MGMT_EN_2X)
|
||||||
#define MV88E6XXX_FLAG_G2_MGMT_EN_0X BIT(MV88E6XXX_CAP_G2_MGMT_EN_0X)
|
#define MV88E6XXX_FLAG_G2_MGMT_EN_0X BIT(MV88E6XXX_CAP_G2_MGMT_EN_0X)
|
||||||
|
#define MV88E6XXX_FLAG_G2_PVT_ADDR BIT(MV88E6XXX_CAP_G2_PVT_ADDR)
|
||||||
|
#define MV88E6XXX_FLAG_G2_PVT_DATA BIT(MV88E6XXX_CAP_G2_PVT_DATA)
|
||||||
#define MV88E6XXX_FLAG_G2_SWITCH_MAC BIT(MV88E6XXX_CAP_G2_SWITCH_MAC)
|
#define MV88E6XXX_FLAG_G2_SWITCH_MAC BIT(MV88E6XXX_CAP_G2_SWITCH_MAC)
|
||||||
#define MV88E6XXX_FLAG_MULTI_CHIP BIT(MV88E6XXX_CAP_MULTI_CHIP)
|
#define MV88E6XXX_FLAG_MULTI_CHIP BIT(MV88E6XXX_CAP_MULTI_CHIP)
|
||||||
#define MV88E6XXX_FLAG_PPU BIT(MV88E6XXX_CAP_PPU)
|
#define MV88E6XXX_FLAG_PPU BIT(MV88E6XXX_CAP_PPU)
|
||||||
|
@ -443,6 +451,11 @@ enum mv88e6xxx_cap {
|
||||||
#define MV88E6XXX_FLAG_TEMP_LIMIT BIT(MV88E6XXX_CAP_TEMP_LIMIT)
|
#define MV88E6XXX_FLAG_TEMP_LIMIT BIT(MV88E6XXX_CAP_TEMP_LIMIT)
|
||||||
#define MV88E6XXX_FLAG_VTU BIT(MV88E6XXX_CAP_VTU)
|
#define MV88E6XXX_FLAG_VTU BIT(MV88E6XXX_CAP_VTU)
|
||||||
|
|
||||||
|
/* Cross-chip Port VLAN Table */
|
||||||
|
#define MV88E6XXX_FLAGS_PVT \
|
||||||
|
(MV88E6XXX_FLAG_G2_PVT_ADDR | \
|
||||||
|
MV88E6XXX_FLAG_G2_PVT_DATA)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6095 \
|
#define MV88E6XXX_FLAGS_FAMILY_6095 \
|
||||||
(MV88E6XXX_FLAG_GLOBAL2 | \
|
(MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
MV88E6XXX_FLAG_G2_MGMT_EN_0X | \
|
||||||
|
@ -457,7 +470,8 @@ enum mv88e6xxx_cap {
|
||||||
MV88E6XXX_FLAG_MULTI_CHIP | \
|
MV88E6XXX_FLAG_MULTI_CHIP | \
|
||||||
MV88E6XXX_FLAG_PPU | \
|
MV88E6XXX_FLAG_PPU | \
|
||||||
MV88E6XXX_FLAG_STU | \
|
MV88E6XXX_FLAG_STU | \
|
||||||
MV88E6XXX_FLAG_VTU)
|
MV88E6XXX_FLAG_VTU | \
|
||||||
|
MV88E6XXX_FLAGS_PVT)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6165 \
|
#define MV88E6XXX_FLAGS_FAMILY_6165 \
|
||||||
(MV88E6XXX_FLAG_GLOBAL2 | \
|
(MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
|
@ -467,7 +481,8 @@ enum mv88e6xxx_cap {
|
||||||
MV88E6XXX_FLAG_MULTI_CHIP | \
|
MV88E6XXX_FLAG_MULTI_CHIP | \
|
||||||
MV88E6XXX_FLAG_STU | \
|
MV88E6XXX_FLAG_STU | \
|
||||||
MV88E6XXX_FLAG_TEMP | \
|
MV88E6XXX_FLAG_TEMP | \
|
||||||
MV88E6XXX_FLAG_VTU)
|
MV88E6XXX_FLAG_VTU | \
|
||||||
|
MV88E6XXX_FLAGS_PVT)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6185 \
|
#define MV88E6XXX_FLAGS_FAMILY_6185 \
|
||||||
(MV88E6XXX_FLAG_GLOBAL2 | \
|
(MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
|
@ -488,7 +503,8 @@ enum mv88e6xxx_cap {
|
||||||
MV88E6XXX_FLAG_SMI_PHY | \
|
MV88E6XXX_FLAG_SMI_PHY | \
|
||||||
MV88E6XXX_FLAG_TEMP | \
|
MV88E6XXX_FLAG_TEMP | \
|
||||||
MV88E6XXX_FLAG_TEMP_LIMIT | \
|
MV88E6XXX_FLAG_TEMP_LIMIT | \
|
||||||
MV88E6XXX_FLAG_VTU)
|
MV88E6XXX_FLAG_VTU | \
|
||||||
|
MV88E6XXX_FLAGS_PVT)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6351 \
|
#define MV88E6XXX_FLAGS_FAMILY_6351 \
|
||||||
(MV88E6XXX_FLAG_GLOBAL2 | \
|
(MV88E6XXX_FLAG_GLOBAL2 | \
|
||||||
|
@ -500,7 +516,8 @@ enum mv88e6xxx_cap {
|
||||||
MV88E6XXX_FLAG_SMI_PHY | \
|
MV88E6XXX_FLAG_SMI_PHY | \
|
||||||
MV88E6XXX_FLAG_STU | \
|
MV88E6XXX_FLAG_STU | \
|
||||||
MV88E6XXX_FLAG_TEMP | \
|
MV88E6XXX_FLAG_TEMP | \
|
||||||
MV88E6XXX_FLAG_VTU)
|
MV88E6XXX_FLAG_VTU | \
|
||||||
|
MV88E6XXX_FLAGS_PVT)
|
||||||
|
|
||||||
#define MV88E6XXX_FLAGS_FAMILY_6352 \
|
#define MV88E6XXX_FLAGS_FAMILY_6352 \
|
||||||
(MV88E6XXX_FLAG_EEE | \
|
(MV88E6XXX_FLAG_EEE | \
|
||||||
|
@ -515,7 +532,8 @@ enum mv88e6xxx_cap {
|
||||||
MV88E6XXX_FLAG_STU | \
|
MV88E6XXX_FLAG_STU | \
|
||||||
MV88E6XXX_FLAG_TEMP | \
|
MV88E6XXX_FLAG_TEMP | \
|
||||||
MV88E6XXX_FLAG_TEMP_LIMIT | \
|
MV88E6XXX_FLAG_TEMP_LIMIT | \
|
||||||
MV88E6XXX_FLAG_VTU)
|
MV88E6XXX_FLAG_VTU | \
|
||||||
|
MV88E6XXX_FLAGS_PVT)
|
||||||
|
|
||||||
struct mv88e6xxx_info {
|
struct mv88e6xxx_info {
|
||||||
enum mv88e6xxx_family family;
|
enum mv88e6xxx_family family;
|
||||||
|
|
Loading…
Reference in New Issue