diff options
Diffstat (limited to 'drivers/net/dsa/microchip/ksz_common.c')
-rw-r--r-- | drivers/net/dsa/microchip/ksz_common.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c index 4de9d90a4bb3..56cd6d365352 100644 --- a/drivers/net/dsa/microchip/ksz_common.c +++ b/drivers/net/dsa/microchip/ksz_common.c | |||
@@ -805,12 +805,11 @@ static void convert_alu(struct alu_struct *alu, u32 *alu_table) | |||
805 | } | 805 | } |
806 | 806 | ||
807 | static int ksz_port_fdb_dump(struct dsa_switch *ds, int port, | 807 | static int ksz_port_fdb_dump(struct dsa_switch *ds, int port, |
808 | struct switchdev_obj_port_fdb *fdb, | 808 | dsa_fdb_dump_cb_t *cb, void *data) |
809 | switchdev_obj_dump_cb_t *cb) | ||
810 | { | 809 | { |
811 | struct ksz_device *dev = ds->priv; | 810 | struct ksz_device *dev = ds->priv; |
812 | int ret = 0; | 811 | int ret = 0; |
813 | u32 data; | 812 | u32 ksz_data; |
814 | u32 alu_table[4]; | 813 | u32 alu_table[4]; |
815 | struct alu_struct alu; | 814 | struct alu_struct alu; |
816 | int timeout; | 815 | int timeout; |
@@ -823,8 +822,8 @@ static int ksz_port_fdb_dump(struct dsa_switch *ds, int port, | |||
823 | do { | 822 | do { |
824 | timeout = 1000; | 823 | timeout = 1000; |
825 | do { | 824 | do { |
826 | ksz_read32(dev, REG_SW_ALU_CTRL__4, &data); | 825 | ksz_read32(dev, REG_SW_ALU_CTRL__4, &ksz_data); |
827 | if ((data & ALU_VALID) || !(data & ALU_START)) | 826 | if ((ksz_data & ALU_VALID) || !(ksz_data & ALU_START)) |
828 | break; | 827 | break; |
829 | usleep_range(1, 10); | 828 | usleep_range(1, 10); |
830 | } while (timeout-- > 0); | 829 | } while (timeout-- > 0); |
@@ -841,18 +840,11 @@ static int ksz_port_fdb_dump(struct dsa_switch *ds, int port, | |||
841 | convert_alu(&alu, alu_table); | 840 | convert_alu(&alu, alu_table); |
842 | 841 | ||
843 | if (alu.port_forward & BIT(port)) { | 842 | if (alu.port_forward & BIT(port)) { |
844 | fdb->vid = alu.fid; | 843 | ret = cb(alu.mac, alu.fid, alu.is_static, data); |
845 | if (alu.is_static) | ||
846 | fdb->ndm_state = NUD_NOARP; | ||
847 | else | ||
848 | fdb->ndm_state = NUD_REACHABLE; | ||
849 | ether_addr_copy(fdb->addr, alu.mac); | ||
850 | |||
851 | ret = cb(&fdb->obj); | ||
852 | if (ret) | 844 | if (ret) |
853 | goto exit; | 845 | goto exit; |
854 | } | 846 | } |
855 | } while (data & ALU_START); | 847 | } while (ksz_data & ALU_START); |
856 | 848 | ||
857 | exit: | 849 | exit: |
858 | 850 | ||