mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2024-12-28 16:53:49 +00:00
net: dsa: Add KSZ8567 switch support
This commit introduces support for the KSZ8567, a robust 7-port Ethernet switch. The KSZ8567 features two RGMII/MII/RMII interfaces, each capable of gigabit speeds, complemented by five 10/100 Mbps MAC/PHYs. Signed-off-by: Philippe Schenker <philippe.schenker@impulsing.ch> Acked-by: Arun Ramadoss <arun.ramadoss@microchip.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Link: https://lore.kernel.org/r/20240130083419.135763-2-dev@pschenker.ch Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
5f8066d457
commit
3723b56d6f
@ -103,6 +103,10 @@ static const struct of_device_id ksz9477_dt_ids[] = {
|
||||
.compatible = "microchip,ksz8563",
|
||||
.data = &ksz_switch_chips[KSZ8563]
|
||||
},
|
||||
{
|
||||
.compatible = "microchip,ksz8567",
|
||||
.data = &ksz_switch_chips[KSZ8567]
|
||||
},
|
||||
{
|
||||
.compatible = "microchip,ksz9567",
|
||||
.data = &ksz_switch_chips[KSZ9567]
|
||||
|
@ -1476,6 +1476,39 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
||||
.gbit_capable = {true, true, true},
|
||||
},
|
||||
|
||||
[KSZ8567] = {
|
||||
.chip_id = KSZ8567_CHIP_ID,
|
||||
.dev_name = "KSZ8567",
|
||||
.num_vlans = 4096,
|
||||
.num_alus = 4096,
|
||||
.num_statics = 16,
|
||||
.cpu_ports = 0x7F, /* can be configured as cpu port */
|
||||
.port_cnt = 7, /* total port count */
|
||||
.port_nirqs = 3,
|
||||
.num_tx_queues = 4,
|
||||
.tc_cbs_supported = true,
|
||||
.tc_ets_supported = true,
|
||||
.ops = &ksz9477_dev_ops,
|
||||
.mib_names = ksz9477_mib_names,
|
||||
.mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
|
||||
.reg_mib_cnt = MIB_COUNTER_NUM,
|
||||
.regs = ksz9477_regs,
|
||||
.masks = ksz9477_masks,
|
||||
.shifts = ksz9477_shifts,
|
||||
.xmii_ctrl0 = ksz9477_xmii_ctrl0,
|
||||
.xmii_ctrl1 = ksz9477_xmii_ctrl1,
|
||||
.supports_mii = {false, false, false, false,
|
||||
false, true, true},
|
||||
.supports_rmii = {false, false, false, false,
|
||||
false, true, true},
|
||||
.supports_rgmii = {false, false, false, false,
|
||||
false, true, true},
|
||||
.internal_phy = {true, true, true, true,
|
||||
true, false, false},
|
||||
.gbit_capable = {false, false, false, false, false,
|
||||
true, true},
|
||||
},
|
||||
|
||||
[KSZ9567] = {
|
||||
.chip_id = KSZ9567_CHIP_ID,
|
||||
.dev_name = "KSZ9567",
|
||||
@ -2649,6 +2682,7 @@ static void ksz_port_teardown(struct dsa_switch *ds, int port)
|
||||
|
||||
switch (dev->chip_id) {
|
||||
case KSZ8563_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case KSZ9477_CHIP_ID:
|
||||
case KSZ9563_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
@ -2705,7 +2739,8 @@ static enum dsa_tag_protocol ksz_get_tag_protocol(struct dsa_switch *ds,
|
||||
dev->chip_id == KSZ9563_CHIP_ID)
|
||||
proto = DSA_TAG_PROTO_KSZ9893;
|
||||
|
||||
if (dev->chip_id == KSZ9477_CHIP_ID ||
|
||||
if (dev->chip_id == KSZ8567_CHIP_ID ||
|
||||
dev->chip_id == KSZ9477_CHIP_ID ||
|
||||
dev->chip_id == KSZ9896_CHIP_ID ||
|
||||
dev->chip_id == KSZ9897_CHIP_ID ||
|
||||
dev->chip_id == KSZ9567_CHIP_ID)
|
||||
@ -2813,6 +2848,7 @@ static int ksz_max_mtu(struct dsa_switch *ds, int port)
|
||||
case KSZ8830_CHIP_ID:
|
||||
return KSZ8863_HUGE_PACKET_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN;
|
||||
case KSZ8563_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case KSZ9477_CHIP_ID:
|
||||
case KSZ9563_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
@ -2839,6 +2875,7 @@ static int ksz_validate_eee(struct dsa_switch *ds, int port)
|
||||
|
||||
switch (dev->chip_id) {
|
||||
case KSZ8563_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case KSZ9477_CHIP_ID:
|
||||
case KSZ9563_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
@ -3183,6 +3220,7 @@ static int ksz_switch_detect(struct ksz_device *dev)
|
||||
case KSZ9896_CHIP_ID:
|
||||
case KSZ9897_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case LAN9370_CHIP_ID:
|
||||
case LAN9371_CHIP_ID:
|
||||
case LAN9372_CHIP_ID:
|
||||
@ -3220,6 +3258,7 @@ static int ksz_cls_flower_add(struct dsa_switch *ds, int port,
|
||||
|
||||
switch (dev->chip_id) {
|
||||
case KSZ8563_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case KSZ9477_CHIP_ID:
|
||||
case KSZ9563_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
@ -3239,6 +3278,7 @@ static int ksz_cls_flower_del(struct dsa_switch *ds, int port,
|
||||
|
||||
switch (dev->chip_id) {
|
||||
case KSZ8563_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case KSZ9477_CHIP_ID:
|
||||
case KSZ9563_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
@ -4142,6 +4182,7 @@ static int ksz_parse_drive_strength(struct ksz_device *dev)
|
||||
case KSZ8794_CHIP_ID:
|
||||
case KSZ8765_CHIP_ID:
|
||||
case KSZ8563_CHIP_ID:
|
||||
case KSZ8567_CHIP_ID:
|
||||
case KSZ9477_CHIP_ID:
|
||||
case KSZ9563_CHIP_ID:
|
||||
case KSZ9567_CHIP_ID:
|
||||
|
@ -187,6 +187,7 @@ struct ksz_device {
|
||||
/* List of supported models */
|
||||
enum ksz_model {
|
||||
KSZ8563,
|
||||
KSZ8567,
|
||||
KSZ8795,
|
||||
KSZ8794,
|
||||
KSZ8765,
|
||||
|
@ -164,6 +164,10 @@ static const struct of_device_id ksz_dt_ids[] = {
|
||||
.compatible = "microchip,ksz8563",
|
||||
.data = &ksz_switch_chips[KSZ8563]
|
||||
},
|
||||
{
|
||||
.compatible = "microchip,ksz8567",
|
||||
.data = &ksz_switch_chips[KSZ8567]
|
||||
},
|
||||
{
|
||||
.compatible = "microchip,ksz9567",
|
||||
.data = &ksz_switch_chips[KSZ9567]
|
||||
@ -204,6 +208,7 @@ static const struct spi_device_id ksz_spi_ids[] = {
|
||||
{ "ksz9893" },
|
||||
{ "ksz9563" },
|
||||
{ "ksz8563" },
|
||||
{ "ksz8567" },
|
||||
{ "ksz9567" },
|
||||
{ "lan9370" },
|
||||
{ "lan9371" },
|
||||
|
@ -33,6 +33,7 @@ enum ksz_chip_id {
|
||||
KSZ9897_CHIP_ID = 0x00989700,
|
||||
KSZ9893_CHIP_ID = 0x00989300,
|
||||
KSZ9563_CHIP_ID = 0x00956300,
|
||||
KSZ8567_CHIP_ID = 0x00856700,
|
||||
KSZ9567_CHIP_ID = 0x00956700,
|
||||
LAN9370_CHIP_ID = 0x00937000,
|
||||
LAN9371_CHIP_ID = 0x00937100,
|
||||
|
Loading…
Reference in New Issue
Block a user