]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: dsa: microchip: determine number of port irq based on switch type
authorArun Ramadoss <arun.ramadoss@microchip.com>
Thu, 22 Sep 2022 07:10:23 +0000 (12:40 +0530)
committerJakub Kicinski <kuba@kernel.org>
Mon, 26 Sep 2022 19:41:05 +0000 (12:41 -0700)
Currently the number of port irqs is hard coded for the lan937x switch
as 6. In order to make the generic interrupt handler for ksz switches,
number of port irq supported by the switch is added to the
ksz_chip_data. It is 4 for ksz9477, 2 for ksz9897 and 3 for ksz9567.

Signed-off-by: Arun Ramadoss <arun.ramadoss@microchip.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz_common.c
drivers/net/dsa/microchip/ksz_common.h
drivers/net/dsa/microchip/lan937x_main.c

index fcaa71f66322d4a4b64f93e19bd43bf28d76032f..07283279c578b0ffd1869080438c9a35dd7922dc 100644 (file)
@@ -1168,6 +1168,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 16,
                .cpu_ports = 0x7F,      /* can be configured as cpu port */
                .port_cnt = 7,          /* total physical port count */
+               .port_nirqs = 4,
                .ops = &ksz9477_dev_ops,
                .phy_errata_9477 = true,
                .mib_names = ksz9477_mib_names,
@@ -1199,6 +1200,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 16,
                .cpu_ports = 0x3F,      /* can be configured as cpu port */
                .port_cnt = 6,          /* total physical port count */
+               .port_nirqs = 2,
                .ops = &ksz9477_dev_ops,
                .phy_errata_9477 = true,
                .mib_names = ksz9477_mib_names,
@@ -1230,6 +1232,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 16,
                .cpu_ports = 0x7F,      /* can be configured as cpu port */
                .port_cnt = 7,          /* total physical port count */
+               .port_nirqs = 2,
                .ops = &ksz9477_dev_ops,
                .phy_errata_9477 = true,
                .mib_names = ksz9477_mib_names,
@@ -1259,6 +1262,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 16,
                .cpu_ports = 0x07,      /* can be configured as cpu port */
                .port_cnt = 3,          /* total port count */
+               .port_nirqs = 2,
                .ops = &ksz9477_dev_ops,
                .mib_names = ksz9477_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
@@ -1283,6 +1287,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 16,
                .cpu_ports = 0x7F,      /* can be configured as cpu port */
                .port_cnt = 7,          /* total physical port count */
+               .port_nirqs = 3,
                .ops = &ksz9477_dev_ops,
                .phy_errata_9477 = true,
                .mib_names = ksz9477_mib_names,
@@ -1312,6 +1317,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 256,
                .cpu_ports = 0x10,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total physical port count */
+               .port_nirqs = 6,
                .ops = &lan937x_dev_ops,
                .mib_names = ksz9477_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
@@ -1335,6 +1341,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 256,
                .cpu_ports = 0x30,      /* can be configured as cpu port */
                .port_cnt = 6,          /* total physical port count */
+               .port_nirqs = 6,
                .ops = &lan937x_dev_ops,
                .mib_names = ksz9477_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
@@ -1358,6 +1365,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 256,
                .cpu_ports = 0x30,      /* can be configured as cpu port */
                .port_cnt = 8,          /* total physical port count */
+               .port_nirqs = 6,
                .ops = &lan937x_dev_ops,
                .mib_names = ksz9477_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
@@ -1385,6 +1393,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 256,
                .cpu_ports = 0x38,      /* can be configured as cpu port */
                .port_cnt = 5,          /* total physical port count */
+               .port_nirqs = 6,
                .ops = &lan937x_dev_ops,
                .mib_names = ksz9477_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
@@ -1412,6 +1421,7 @@ const struct ksz_chip_data ksz_switch_chips[] = {
                .num_statics = 256,
                .cpu_ports = 0x30,      /* can be configured as cpu port */
                .port_cnt = 8,          /* total physical port count */
+               .port_nirqs = 6,
                .ops = &lan937x_dev_ops,
                .mib_names = ksz9477_mib_names,
                .mib_cnt = ARRAY_SIZE(ksz9477_mib_names),
index 6203dcd8c8f73d42a9dd683e7ad80b8d9e1200e9..baa1e1bc1b7c25a248ec09146fa662ba6941165a 100644 (file)
@@ -45,6 +45,7 @@ struct ksz_chip_data {
        int num_statics;
        int cpu_ports;
        int port_cnt;
+       u8 port_nirqs;
        const struct ksz_dev_ops *ops;
        bool phy_errata_9477;
        bool ksz87xx_eee_link_erratum;
index cefe8517629a0fb58e6a10eade2e25b172e72198..fd5114a09463940ca873a695f66be73a9188153f 100644 (file)
@@ -20,8 +20,6 @@
 #include "ksz_common.h"
 #include "lan937x.h"
 
-#define LAN937x_PNIRQS 6
-
 static int lan937x_cfg(struct ksz_device *dev, u32 addr, u8 bits, bool set)
 {
        return regmap_update_bits(dev->regmap[0], addr, bits, set ? bits : 0);
@@ -695,7 +693,7 @@ static int lan937x_pirq_setup(struct ksz_device *dev, u8 p)
        int ret, irq;
        int irq_num;
 
-       port->pirq.nirqs = LAN937x_PNIRQS;
+       port->pirq.nirqs = dev->info->port_nirqs;
        port->pirq.domain = irq_domain_add_simple(dev->dev->of_node,
                                                  port->pirq.nirqs, 0,
                                                  &lan937x_pirq_domain_ops,