mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 02:14:58 +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",
|
.compatible = "microchip,ksz8563",
|
||||||
.data = &ksz_switch_chips[KSZ8563]
|
.data = &ksz_switch_chips[KSZ8563]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.compatible = "microchip,ksz8567",
|
||||||
|
.data = &ksz_switch_chips[KSZ8567]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.compatible = "microchip,ksz9567",
|
.compatible = "microchip,ksz9567",
|
||||||
.data = &ksz_switch_chips[KSZ9567]
|
.data = &ksz_switch_chips[KSZ9567]
|
||||||
|
@ -1476,6 +1476,39 @@ const struct ksz_chip_data ksz_switch_chips[] = {
|
|||||||
.gbit_capable = {true, true, true},
|
.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] = {
|
[KSZ9567] = {
|
||||||
.chip_id = KSZ9567_CHIP_ID,
|
.chip_id = KSZ9567_CHIP_ID,
|
||||||
.dev_name = "KSZ9567",
|
.dev_name = "KSZ9567",
|
||||||
@ -2649,6 +2682,7 @@ static void ksz_port_teardown(struct dsa_switch *ds, int port)
|
|||||||
|
|
||||||
switch (dev->chip_id) {
|
switch (dev->chip_id) {
|
||||||
case KSZ8563_CHIP_ID:
|
case KSZ8563_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case KSZ9477_CHIP_ID:
|
case KSZ9477_CHIP_ID:
|
||||||
case KSZ9563_CHIP_ID:
|
case KSZ9563_CHIP_ID:
|
||||||
case KSZ9567_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)
|
dev->chip_id == KSZ9563_CHIP_ID)
|
||||||
proto = DSA_TAG_PROTO_KSZ9893;
|
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 == KSZ9896_CHIP_ID ||
|
||||||
dev->chip_id == KSZ9897_CHIP_ID ||
|
dev->chip_id == KSZ9897_CHIP_ID ||
|
||||||
dev->chip_id == KSZ9567_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:
|
case KSZ8830_CHIP_ID:
|
||||||
return KSZ8863_HUGE_PACKET_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN;
|
return KSZ8863_HUGE_PACKET_SIZE - VLAN_ETH_HLEN - ETH_FCS_LEN;
|
||||||
case KSZ8563_CHIP_ID:
|
case KSZ8563_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case KSZ9477_CHIP_ID:
|
case KSZ9477_CHIP_ID:
|
||||||
case KSZ9563_CHIP_ID:
|
case KSZ9563_CHIP_ID:
|
||||||
case KSZ9567_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) {
|
switch (dev->chip_id) {
|
||||||
case KSZ8563_CHIP_ID:
|
case KSZ8563_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case KSZ9477_CHIP_ID:
|
case KSZ9477_CHIP_ID:
|
||||||
case KSZ9563_CHIP_ID:
|
case KSZ9563_CHIP_ID:
|
||||||
case KSZ9567_CHIP_ID:
|
case KSZ9567_CHIP_ID:
|
||||||
@ -3183,6 +3220,7 @@ static int ksz_switch_detect(struct ksz_device *dev)
|
|||||||
case KSZ9896_CHIP_ID:
|
case KSZ9896_CHIP_ID:
|
||||||
case KSZ9897_CHIP_ID:
|
case KSZ9897_CHIP_ID:
|
||||||
case KSZ9567_CHIP_ID:
|
case KSZ9567_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case LAN9370_CHIP_ID:
|
case LAN9370_CHIP_ID:
|
||||||
case LAN9371_CHIP_ID:
|
case LAN9371_CHIP_ID:
|
||||||
case LAN9372_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) {
|
switch (dev->chip_id) {
|
||||||
case KSZ8563_CHIP_ID:
|
case KSZ8563_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case KSZ9477_CHIP_ID:
|
case KSZ9477_CHIP_ID:
|
||||||
case KSZ9563_CHIP_ID:
|
case KSZ9563_CHIP_ID:
|
||||||
case KSZ9567_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) {
|
switch (dev->chip_id) {
|
||||||
case KSZ8563_CHIP_ID:
|
case KSZ8563_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case KSZ9477_CHIP_ID:
|
case KSZ9477_CHIP_ID:
|
||||||
case KSZ9563_CHIP_ID:
|
case KSZ9563_CHIP_ID:
|
||||||
case KSZ9567_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 KSZ8794_CHIP_ID:
|
||||||
case KSZ8765_CHIP_ID:
|
case KSZ8765_CHIP_ID:
|
||||||
case KSZ8563_CHIP_ID:
|
case KSZ8563_CHIP_ID:
|
||||||
|
case KSZ8567_CHIP_ID:
|
||||||
case KSZ9477_CHIP_ID:
|
case KSZ9477_CHIP_ID:
|
||||||
case KSZ9563_CHIP_ID:
|
case KSZ9563_CHIP_ID:
|
||||||
case KSZ9567_CHIP_ID:
|
case KSZ9567_CHIP_ID:
|
||||||
|
@ -187,6 +187,7 @@ struct ksz_device {
|
|||||||
/* List of supported models */
|
/* List of supported models */
|
||||||
enum ksz_model {
|
enum ksz_model {
|
||||||
KSZ8563,
|
KSZ8563,
|
||||||
|
KSZ8567,
|
||||||
KSZ8795,
|
KSZ8795,
|
||||||
KSZ8794,
|
KSZ8794,
|
||||||
KSZ8765,
|
KSZ8765,
|
||||||
|
@ -164,6 +164,10 @@ static const struct of_device_id ksz_dt_ids[] = {
|
|||||||
.compatible = "microchip,ksz8563",
|
.compatible = "microchip,ksz8563",
|
||||||
.data = &ksz_switch_chips[KSZ8563]
|
.data = &ksz_switch_chips[KSZ8563]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.compatible = "microchip,ksz8567",
|
||||||
|
.data = &ksz_switch_chips[KSZ8567]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.compatible = "microchip,ksz9567",
|
.compatible = "microchip,ksz9567",
|
||||||
.data = &ksz_switch_chips[KSZ9567]
|
.data = &ksz_switch_chips[KSZ9567]
|
||||||
@ -204,6 +208,7 @@ static const struct spi_device_id ksz_spi_ids[] = {
|
|||||||
{ "ksz9893" },
|
{ "ksz9893" },
|
||||||
{ "ksz9563" },
|
{ "ksz9563" },
|
||||||
{ "ksz8563" },
|
{ "ksz8563" },
|
||||||
|
{ "ksz8567" },
|
||||||
{ "ksz9567" },
|
{ "ksz9567" },
|
||||||
{ "lan9370" },
|
{ "lan9370" },
|
||||||
{ "lan9371" },
|
{ "lan9371" },
|
||||||
|
@ -33,6 +33,7 @@ enum ksz_chip_id {
|
|||||||
KSZ9897_CHIP_ID = 0x00989700,
|
KSZ9897_CHIP_ID = 0x00989700,
|
||||||
KSZ9893_CHIP_ID = 0x00989300,
|
KSZ9893_CHIP_ID = 0x00989300,
|
||||||
KSZ9563_CHIP_ID = 0x00956300,
|
KSZ9563_CHIP_ID = 0x00956300,
|
||||||
|
KSZ8567_CHIP_ID = 0x00856700,
|
||||||
KSZ9567_CHIP_ID = 0x00956700,
|
KSZ9567_CHIP_ID = 0x00956700,
|
||||||
LAN9370_CHIP_ID = 0x00937000,
|
LAN9370_CHIP_ID = 0x00937000,
|
||||||
LAN9371_CHIP_ID = 0x00937100,
|
LAN9371_CHIP_ID = 0x00937100,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user