Lines Matching refs:dev

22 static void ksz_cfg(struct ksz_device *dev, u32 addr, u8 bits, bool set)  in ksz_cfg()  argument
24 regmap_update_bits(ksz_regmap_8(dev), addr, bits, set ? bits : 0); in ksz_cfg()
27 static void ksz_port_cfg(struct ksz_device *dev, int port, int offset, u8 bits, in ksz_port_cfg() argument
30 regmap_update_bits(ksz_regmap_8(dev), PORT_CTRL_ADDR(port, offset), in ksz_port_cfg()
34 static void ksz9477_cfg32(struct ksz_device *dev, u32 addr, u32 bits, bool set) in ksz9477_cfg32() argument
36 regmap_update_bits(ksz_regmap_32(dev), addr, bits, set ? bits : 0); in ksz9477_cfg32()
39 static void ksz9477_port_cfg32(struct ksz_device *dev, int port, int offset, in ksz9477_port_cfg32() argument
42 regmap_update_bits(ksz_regmap_32(dev), PORT_CTRL_ADDR(port, offset), in ksz9477_port_cfg32()
46 int ksz9477_change_mtu(struct ksz_device *dev, int port, int mtu) in ksz9477_change_mtu() argument
50 if (!dsa_is_cpu_port(dev->ds, port)) in ksz9477_change_mtu()
55 return regmap_update_bits(ksz_regmap_16(dev), REG_SW_MTU__2, in ksz9477_change_mtu()
59 static int ksz9477_wait_vlan_ctrl_ready(struct ksz_device *dev) in ksz9477_wait_vlan_ctrl_ready() argument
63 return regmap_read_poll_timeout(ksz_regmap_8(dev), REG_SW_VLAN_CTRL, in ksz9477_wait_vlan_ctrl_ready()
67 static int ksz9477_get_vlan_table(struct ksz_device *dev, u16 vid, in ksz9477_get_vlan_table() argument
72 mutex_lock(&dev->vlan_mutex); in ksz9477_get_vlan_table()
74 ksz_write16(dev, REG_SW_VLAN_ENTRY_INDEX__2, vid & VLAN_INDEX_M); in ksz9477_get_vlan_table()
75 ksz_write8(dev, REG_SW_VLAN_CTRL, VLAN_READ | VLAN_START); in ksz9477_get_vlan_table()
78 ret = ksz9477_wait_vlan_ctrl_ready(dev); in ksz9477_get_vlan_table()
80 dev_dbg(dev->dev, "Failed to read vlan table\n"); in ksz9477_get_vlan_table()
84 ksz_read32(dev, REG_SW_VLAN_ENTRY__4, &vlan_table[0]); in ksz9477_get_vlan_table()
85 ksz_read32(dev, REG_SW_VLAN_ENTRY_UNTAG__4, &vlan_table[1]); in ksz9477_get_vlan_table()
86 ksz_read32(dev, REG_SW_VLAN_ENTRY_PORTS__4, &vlan_table[2]); in ksz9477_get_vlan_table()
88 ksz_write8(dev, REG_SW_VLAN_CTRL, 0); in ksz9477_get_vlan_table()
91 mutex_unlock(&dev->vlan_mutex); in ksz9477_get_vlan_table()
96 static int ksz9477_set_vlan_table(struct ksz_device *dev, u16 vid, in ksz9477_set_vlan_table() argument
101 mutex_lock(&dev->vlan_mutex); in ksz9477_set_vlan_table()
103 ksz_write32(dev, REG_SW_VLAN_ENTRY__4, vlan_table[0]); in ksz9477_set_vlan_table()
104 ksz_write32(dev, REG_SW_VLAN_ENTRY_UNTAG__4, vlan_table[1]); in ksz9477_set_vlan_table()
105 ksz_write32(dev, REG_SW_VLAN_ENTRY_PORTS__4, vlan_table[2]); in ksz9477_set_vlan_table()
107 ksz_write16(dev, REG_SW_VLAN_ENTRY_INDEX__2, vid & VLAN_INDEX_M); in ksz9477_set_vlan_table()
108 ksz_write8(dev, REG_SW_VLAN_CTRL, VLAN_START | VLAN_WRITE); in ksz9477_set_vlan_table()
111 ret = ksz9477_wait_vlan_ctrl_ready(dev); in ksz9477_set_vlan_table()
113 dev_dbg(dev->dev, "Failed to write vlan table\n"); in ksz9477_set_vlan_table()
117 ksz_write8(dev, REG_SW_VLAN_CTRL, 0); in ksz9477_set_vlan_table()
120 dev->vlan_cache[vid].table[0] = vlan_table[0]; in ksz9477_set_vlan_table()
121 dev->vlan_cache[vid].table[1] = vlan_table[1]; in ksz9477_set_vlan_table()
122 dev->vlan_cache[vid].table[2] = vlan_table[2]; in ksz9477_set_vlan_table()
125 mutex_unlock(&dev->vlan_mutex); in ksz9477_set_vlan_table()
130 static void ksz9477_read_table(struct ksz_device *dev, u32 *table) in ksz9477_read_table() argument
132 ksz_read32(dev, REG_SW_ALU_VAL_A, &table[0]); in ksz9477_read_table()
133 ksz_read32(dev, REG_SW_ALU_VAL_B, &table[1]); in ksz9477_read_table()
134 ksz_read32(dev, REG_SW_ALU_VAL_C, &table[2]); in ksz9477_read_table()
135 ksz_read32(dev, REG_SW_ALU_VAL_D, &table[3]); in ksz9477_read_table()
138 static void ksz9477_write_table(struct ksz_device *dev, u32 *table) in ksz9477_write_table() argument
140 ksz_write32(dev, REG_SW_ALU_VAL_A, table[0]); in ksz9477_write_table()
141 ksz_write32(dev, REG_SW_ALU_VAL_B, table[1]); in ksz9477_write_table()
142 ksz_write32(dev, REG_SW_ALU_VAL_C, table[2]); in ksz9477_write_table()
143 ksz_write32(dev, REG_SW_ALU_VAL_D, table[3]); in ksz9477_write_table()
146 static int ksz9477_wait_alu_ready(struct ksz_device *dev) in ksz9477_wait_alu_ready() argument
150 return regmap_read_poll_timeout(ksz_regmap_32(dev), REG_SW_ALU_CTRL__4, in ksz9477_wait_alu_ready()
154 static int ksz9477_wait_alu_sta_ready(struct ksz_device *dev) in ksz9477_wait_alu_sta_ready() argument
158 return regmap_read_poll_timeout(ksz_regmap_32(dev), in ksz9477_wait_alu_sta_ready()
164 int ksz9477_reset_switch(struct ksz_device *dev) in ksz9477_reset_switch() argument
170 ksz_cfg(dev, REG_SW_OPERATION, SW_RESET, true); in ksz9477_reset_switch()
173 regmap_update_bits(ksz_regmap_8(dev), REG_SW_GLOBAL_SERIAL_CTRL_0, in ksz9477_reset_switch()
177 ksz_write8(dev, REG_SW_LUE_CTRL_1, in ksz9477_reset_switch()
181 ksz_write32(dev, REG_SW_INT_MASK__4, SWITCH_INT_MASK); in ksz9477_reset_switch()
182 ksz_write32(dev, REG_SW_PORT_INT_MASK__4, 0x7F); in ksz9477_reset_switch()
183 ksz_read32(dev, REG_SW_PORT_INT_STATUS__4, &data32); in ksz9477_reset_switch()
186 if (dev->chip_id == KSZ9893_CHIP_ID || in ksz9477_reset_switch()
187 dev->chip_id == KSZ8563_CHIP_ID || in ksz9477_reset_switch()
188 dev->chip_id == KSZ9563_CHIP_ID) in ksz9477_reset_switch()
192 if (dev->synclko_disable) in ksz9477_reset_switch()
194 else if (dev->synclko_125) in ksz9477_reset_switch()
196 ksz_write8(dev, REG_SW_GLOBAL_OUTPUT_CTRL__1, data8); in ksz9477_reset_switch()
201 void ksz9477_r_mib_cnt(struct ksz_device *dev, int port, u16 addr, u64 *cnt) in ksz9477_r_mib_cnt() argument
203 struct ksz_port *p = &dev->ports[port]; in ksz9477_r_mib_cnt()
212 ksz_pwrite32(dev, port, REG_PORT_MIB_CTRL_STAT__4, data); in ksz9477_r_mib_cnt()
214 ret = regmap_read_poll_timeout(ksz_regmap_32(dev), in ksz9477_r_mib_cnt()
219 dev_dbg(dev->dev, "Failed to get MIB\n"); in ksz9477_r_mib_cnt()
224 ksz_pread32(dev, port, REG_PORT_MIB_DATA, &data); in ksz9477_r_mib_cnt()
228 void ksz9477_r_mib_pkt(struct ksz_device *dev, int port, u16 addr, in ksz9477_r_mib_pkt() argument
231 addr = dev->info->mib_names[addr].index; in ksz9477_r_mib_pkt()
232 ksz9477_r_mib_cnt(dev, port, addr, cnt); in ksz9477_r_mib_pkt()
235 void ksz9477_freeze_mib(struct ksz_device *dev, int port, bool freeze) in ksz9477_freeze_mib() argument
238 struct ksz_port *p = &dev->ports[port]; in ksz9477_freeze_mib()
242 ksz_pwrite32(dev, port, REG_PORT_MIB_CTRL_STAT__4, val); in ksz9477_freeze_mib()
249 void ksz9477_port_init_cnt(struct ksz_device *dev, int port) in ksz9477_port_init_cnt() argument
251 struct ksz_port_mib *mib = &dev->ports[port].mib; in ksz9477_port_init_cnt()
255 ksz_pwrite32(dev, port, REG_PORT_MIB_CTRL_STAT__4, in ksz9477_port_init_cnt()
257 ksz_write8(dev, REG_SW_MAC_CTRL_6, SW_MIB_COUNTER_FLUSH); in ksz9477_port_init_cnt()
258 ksz_pwrite32(dev, port, REG_PORT_MIB_CTRL_STAT__4, 0); in ksz9477_port_init_cnt()
262 static void ksz9477_r_phy_quirks(struct ksz_device *dev, u16 addr, u16 reg, in ksz9477_r_phy_quirks() argument
268 if (dev->chip_id == KSZ8563_CHIP_ID && reg == MII_BMSR) in ksz9477_r_phy_quirks()
272 int ksz9477_r_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 *data) in ksz9477_r_phy() argument
283 if (!dev->info->internal_phy[addr]) { in ksz9477_r_phy()
284 struct ksz_port *p = &dev->ports[addr]; in ksz9477_r_phy()
316 ret = ksz_pread16(dev, addr, 0x100 + (reg << 1), &val); in ksz9477_r_phy()
320 ksz9477_r_phy_quirks(dev, addr, reg, &val); in ksz9477_r_phy()
328 int ksz9477_w_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 val) in ksz9477_w_phy() argument
333 if (!dev->info->internal_phy[addr]) in ksz9477_w_phy()
337 return ksz_pwrite16(dev, addr, 0x100 + (reg << 1), val); in ksz9477_w_phy()
350 return ksz_prmw32(dev, addr, 0x100 + (reg << 1), mask, val32); in ksz9477_w_phy()
353 void ksz9477_cfg_port_member(struct ksz_device *dev, int port, u8 member) in ksz9477_cfg_port_member() argument
355 ksz_pwrite32(dev, port, REG_PORT_VLAN_MEMBERSHIP__4, member); in ksz9477_cfg_port_member()
358 void ksz9477_flush_dyn_mac_table(struct ksz_device *dev, int port) in ksz9477_flush_dyn_mac_table() argument
360 const u16 *regs = dev->info->regs; in ksz9477_flush_dyn_mac_table()
363 regmap_update_bits(ksz_regmap_8(dev), REG_SW_LUE_CTRL_2, in ksz9477_flush_dyn_mac_table()
367 if (port < dev->info->port_cnt) { in ksz9477_flush_dyn_mac_table()
369 ksz_pread8(dev, port, regs[P_STP_CTRL], &data); in ksz9477_flush_dyn_mac_table()
371 ksz_pwrite8(dev, port, regs[P_STP_CTRL], in ksz9477_flush_dyn_mac_table()
373 ksz_cfg(dev, S_FLUSH_TABLE_CTRL, SW_FLUSH_DYN_MAC_TABLE, true); in ksz9477_flush_dyn_mac_table()
374 ksz_pwrite8(dev, port, regs[P_STP_CTRL], data); in ksz9477_flush_dyn_mac_table()
377 ksz_cfg(dev, S_FLUSH_TABLE_CTRL, SW_FLUSH_STP_TABLE, true); in ksz9477_flush_dyn_mac_table()
381 int ksz9477_port_vlan_filtering(struct ksz_device *dev, int port, in ksz9477_port_vlan_filtering() argument
385 ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL, in ksz9477_port_vlan_filtering()
387 ksz_cfg(dev, REG_SW_LUE_CTRL_0, SW_VLAN_ENABLE, true); in ksz9477_port_vlan_filtering()
389 ksz_cfg(dev, REG_SW_LUE_CTRL_0, SW_VLAN_ENABLE, false); in ksz9477_port_vlan_filtering()
390 ksz_port_cfg(dev, port, REG_PORT_LUE_CTRL, in ksz9477_port_vlan_filtering()
397 int ksz9477_port_vlan_add(struct ksz_device *dev, int port, in ksz9477_port_vlan_add() argument
405 err = ksz9477_get_vlan_table(dev, vlan->vid, vlan_table); in ksz9477_port_vlan_add()
416 vlan_table[1] &= ~(BIT(dev->cpu_port)); in ksz9477_port_vlan_add()
418 vlan_table[2] |= BIT(port) | BIT(dev->cpu_port); in ksz9477_port_vlan_add()
420 err = ksz9477_set_vlan_table(dev, vlan->vid, vlan_table); in ksz9477_port_vlan_add()
428 ksz_pwrite16(dev, port, REG_PORT_DEFAULT_VID, vlan->vid); in ksz9477_port_vlan_add()
433 int ksz9477_port_vlan_del(struct ksz_device *dev, int port, in ksz9477_port_vlan_del() argument
440 ksz_pread16(dev, port, REG_PORT_DEFAULT_VID, &pvid); in ksz9477_port_vlan_del()
443 if (ksz9477_get_vlan_table(dev, vlan->vid, vlan_table)) { in ksz9477_port_vlan_del()
444 dev_dbg(dev->dev, "Failed to get vlan table\n"); in ksz9477_port_vlan_del()
456 if (ksz9477_set_vlan_table(dev, vlan->vid, vlan_table)) { in ksz9477_port_vlan_del()
457 dev_dbg(dev->dev, "Failed to set vlan table\n"); in ksz9477_port_vlan_del()
461 ksz_pwrite16(dev, port, REG_PORT_DEFAULT_VID, pvid); in ksz9477_port_vlan_del()
466 int ksz9477_fdb_add(struct ksz_device *dev, int port, in ksz9477_fdb_add() argument
473 mutex_lock(&dev->alu_mutex); in ksz9477_fdb_add()
478 ksz_write32(dev, REG_SW_ALU_INDEX_0, data); in ksz9477_fdb_add()
482 ksz_write32(dev, REG_SW_ALU_INDEX_1, data); in ksz9477_fdb_add()
485 ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_READ | ALU_START); in ksz9477_fdb_add()
488 ret = ksz9477_wait_alu_ready(dev); in ksz9477_fdb_add()
490 dev_dbg(dev->dev, "Failed to read ALU\n"); in ksz9477_fdb_add()
495 ksz9477_read_table(dev, alu_table); in ksz9477_fdb_add()
507 ksz9477_write_table(dev, alu_table); in ksz9477_fdb_add()
509 ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_WRITE | ALU_START); in ksz9477_fdb_add()
512 ret = ksz9477_wait_alu_ready(dev); in ksz9477_fdb_add()
514 dev_dbg(dev->dev, "Failed to write ALU\n"); in ksz9477_fdb_add()
517 mutex_unlock(&dev->alu_mutex); in ksz9477_fdb_add()
522 int ksz9477_fdb_del(struct ksz_device *dev, int port, in ksz9477_fdb_del() argument
529 mutex_lock(&dev->alu_mutex); in ksz9477_fdb_del()
534 ksz_write32(dev, REG_SW_ALU_INDEX_0, data); in ksz9477_fdb_del()
538 ksz_write32(dev, REG_SW_ALU_INDEX_1, data); in ksz9477_fdb_del()
541 ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_READ | ALU_START); in ksz9477_fdb_del()
544 ret = ksz9477_wait_alu_ready(dev); in ksz9477_fdb_del()
546 dev_dbg(dev->dev, "Failed to read ALU\n"); in ksz9477_fdb_del()
550 ksz_read32(dev, REG_SW_ALU_VAL_A, &alu_table[0]); in ksz9477_fdb_del()
552 ksz_read32(dev, REG_SW_ALU_VAL_B, &alu_table[1]); in ksz9477_fdb_del()
553 ksz_read32(dev, REG_SW_ALU_VAL_C, &alu_table[2]); in ksz9477_fdb_del()
554 ksz_read32(dev, REG_SW_ALU_VAL_D, &alu_table[3]); in ksz9477_fdb_del()
573 ksz9477_write_table(dev, alu_table); in ksz9477_fdb_del()
575 ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_WRITE | ALU_START); in ksz9477_fdb_del()
578 ret = ksz9477_wait_alu_ready(dev); in ksz9477_fdb_del()
580 dev_dbg(dev->dev, "Failed to write ALU\n"); in ksz9477_fdb_del()
583 mutex_unlock(&dev->alu_mutex); in ksz9477_fdb_del()
611 int ksz9477_fdb_dump(struct ksz_device *dev, int port, in ksz9477_fdb_dump() argument
620 mutex_lock(&dev->alu_mutex); in ksz9477_fdb_dump()
623 ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_START | ALU_SEARCH); in ksz9477_fdb_dump()
628 ksz_read32(dev, REG_SW_ALU_CTRL__4, &ksz_data); in ksz9477_fdb_dump()
635 dev_dbg(dev->dev, "Failed to search ALU\n"); in ksz9477_fdb_dump()
644 ksz9477_read_table(dev, alu_table); in ksz9477_fdb_dump()
658 ksz_write32(dev, REG_SW_ALU_CTRL__4, 0); in ksz9477_fdb_dump()
660 mutex_unlock(&dev->alu_mutex); in ksz9477_fdb_dump()
665 int ksz9477_mdb_add(struct ksz_device *dev, int port, in ksz9477_mdb_add() argument
676 shifts = dev->info->shifts; in ksz9477_mdb_add()
677 masks = dev->info->masks; in ksz9477_mdb_add()
683 mutex_lock(&dev->alu_mutex); in ksz9477_mdb_add()
685 for (index = 0; index < dev->info->num_statics; index++) { in ksz9477_mdb_add()
689 ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); in ksz9477_mdb_add()
692 err = ksz9477_wait_alu_sta_ready(dev); in ksz9477_mdb_add()
694 dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); in ksz9477_mdb_add()
699 ksz9477_read_table(dev, static_table); in ksz9477_mdb_add()
716 if (index == dev->info->num_statics) { in ksz9477_mdb_add()
730 ksz9477_write_table(dev, static_table); in ksz9477_mdb_add()
733 ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); in ksz9477_mdb_add()
736 if (ksz9477_wait_alu_sta_ready(dev)) in ksz9477_mdb_add()
737 dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); in ksz9477_mdb_add()
740 mutex_unlock(&dev->alu_mutex); in ksz9477_mdb_add()
744 int ksz9477_mdb_del(struct ksz_device *dev, int port, in ksz9477_mdb_del() argument
755 shifts = dev->info->shifts; in ksz9477_mdb_del()
756 masks = dev->info->masks; in ksz9477_mdb_del()
762 mutex_lock(&dev->alu_mutex); in ksz9477_mdb_del()
764 for (index = 0; index < dev->info->num_statics; index++) { in ksz9477_mdb_del()
768 ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); in ksz9477_mdb_del()
771 ret = ksz9477_wait_alu_sta_ready(dev); in ksz9477_mdb_del()
773 dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); in ksz9477_mdb_del()
778 ksz9477_read_table(dev, static_table); in ksz9477_mdb_del()
793 if (index == dev->info->num_statics) in ksz9477_mdb_del()
807 ksz9477_write_table(dev, static_table); in ksz9477_mdb_del()
810 ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); in ksz9477_mdb_del()
813 ret = ksz9477_wait_alu_sta_ready(dev); in ksz9477_mdb_del()
815 dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); in ksz9477_mdb_del()
818 mutex_unlock(&dev->alu_mutex); in ksz9477_mdb_del()
823 int ksz9477_port_mirror_add(struct ksz_device *dev, int port, in ksz9477_port_mirror_add() argument
834 for (p = 0; p < dev->info->port_cnt; p++) { in ksz9477_port_mirror_add()
839 ksz_pread8(dev, p, P_MIRROR_CTRL, &data); in ksz9477_port_mirror_add()
849 ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_RX, true); in ksz9477_port_mirror_add()
851 ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_TX, true); in ksz9477_port_mirror_add()
854 ksz_port_cfg(dev, mirror->to_local_port, P_MIRROR_CTRL, in ksz9477_port_mirror_add()
857 ksz_cfg(dev, S_MIRROR_CTRL, SW_MIRROR_RX_TX, false); in ksz9477_port_mirror_add()
862 void ksz9477_port_mirror_del(struct ksz_device *dev, int port, in ksz9477_port_mirror_del() argument
870 ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_RX, false); in ksz9477_port_mirror_del()
872 ksz_port_cfg(dev, port, P_MIRROR_CTRL, PORT_MIRROR_TX, false); in ksz9477_port_mirror_del()
876 for (p = 0; p < dev->info->port_cnt; p++) { in ksz9477_port_mirror_del()
877 ksz_pread8(dev, p, P_MIRROR_CTRL, &data); in ksz9477_port_mirror_del()
887 ksz_port_cfg(dev, mirror->to_local_port, P_MIRROR_CTRL, in ksz9477_port_mirror_del()
891 static phy_interface_t ksz9477_get_interface(struct ksz_device *dev, int port) in ksz9477_get_interface() argument
896 if (dev->info->internal_phy[port]) in ksz9477_get_interface()
899 gbit = ksz_get_gbit(dev, port); in ksz9477_get_interface()
901 interface = ksz_get_xmii(dev, port, gbit); in ksz9477_get_interface()
906 void ksz9477_get_caps(struct ksz_device *dev, int port, in ksz9477_get_caps() argument
912 if (dev->info->gbit_capable[port]) in ksz9477_get_caps()
916 int ksz9477_set_ageing_time(struct ksz_device *dev, unsigned int msecs) in ksz9477_set_ageing_time() argument
925 ret = ksz_write8(dev, REG_SW_LUE_CTRL_3, value); in ksz9477_set_ageing_time()
931 ret = ksz_read8(dev, REG_SW_LUE_CTRL_0, &value); in ksz9477_set_ageing_time()
938 return ksz_write8(dev, REG_SW_LUE_CTRL_0, value); in ksz9477_set_ageing_time()
941 void ksz9477_port_queue_split(struct ksz_device *dev, int port) in ksz9477_port_queue_split() argument
945 if (dev->info->num_tx_queues == 8) in ksz9477_port_queue_split()
947 else if (dev->info->num_tx_queues == 4) in ksz9477_port_queue_split()
949 else if (dev->info->num_tx_queues == 2) in ksz9477_port_queue_split()
954 ksz_prmw8(dev, port, REG_PORT_CTRL_0, PORT_QUEUE_SPLIT_MASK, data); in ksz9477_port_queue_split()
957 void ksz9477_port_setup(struct ksz_device *dev, int port, bool cpu_port) in ksz9477_port_setup() argument
959 struct dsa_switch *ds = dev->ds; in ksz9477_port_setup()
965 ksz_port_cfg(dev, port, REG_PORT_CTRL_0, PORT_TAIL_TAG_ENABLE, in ksz9477_port_setup()
968 ksz9477_port_queue_split(dev, port); in ksz9477_port_setup()
970 ksz_port_cfg(dev, port, REG_PORT_CTRL_0, PORT_MAC_LOOPBACK, false); in ksz9477_port_setup()
973 ksz_port_cfg(dev, port, REG_PORT_MAC_CTRL_1, PORT_BACK_PRESSURE, true); in ksz9477_port_setup()
976 ksz_port_cfg(dev, port, P_BCAST_STORM_CTRL, PORT_BROADCAST_STORM, true); in ksz9477_port_setup()
979 ksz_port_cfg(dev, port, P_PRIO_CTRL, PORT_DIFFSERV_PRIO_ENABLE, false); in ksz9477_port_setup()
982 ksz_port_cfg(dev, port, REG_PORT_MRI_MAC_CTRL, PORT_USER_PRIO_CEILING, in ksz9477_port_setup()
984 ksz9477_port_cfg32(dev, port, REG_PORT_MTI_QUEUE_CTRL_0__4, in ksz9477_port_setup()
988 ksz_port_cfg(dev, port, P_PRIO_CTRL, PORT_802_1P_PRIO_ENABLE, true); in ksz9477_port_setup()
991 ksz_port_cfg(dev, port, REG_PORT_CTRL_0, in ksz9477_port_setup()
993 !dev->info->internal_phy[port]); in ksz9477_port_setup()
1000 ksz9477_cfg_port_member(dev, port, member); in ksz9477_port_setup()
1003 if (dev->info->internal_phy[port]) in ksz9477_port_setup()
1004 ksz_pread16(dev, port, REG_PORT_PHY_INT_ENABLE, &data16); in ksz9477_port_setup()
1009 struct ksz_device *dev = ds->priv; in ksz9477_config_cpu_port() local
1013 for (i = 0; i < dev->info->port_cnt; i++) { in ksz9477_config_cpu_port()
1015 (dev->info->cpu_ports & (1 << i))) { in ksz9477_config_cpu_port()
1020 dev->cpu_port = i; in ksz9477_config_cpu_port()
1021 p = &dev->ports[i]; in ksz9477_config_cpu_port()
1027 interface = ksz9477_get_interface(dev, i); in ksz9477_config_cpu_port()
1029 if (dev->compat_interface) { in ksz9477_config_cpu_port()
1030 dev_warn(dev->dev, in ksz9477_config_cpu_port()
1034 p->interface = dev->compat_interface; in ksz9477_config_cpu_port()
1046 dev_info(dev->dev, in ksz9477_config_cpu_port()
1054 ksz9477_port_setup(dev, i, true); in ksz9477_config_cpu_port()
1058 for (i = 0; i < dev->info->port_cnt; i++) { in ksz9477_config_cpu_port()
1059 if (i == dev->cpu_port) in ksz9477_config_cpu_port()
1065 int ksz9477_enable_stp_addr(struct ksz_device *dev) in ksz9477_enable_stp_addr() argument
1071 masks = dev->info->masks; in ksz9477_enable_stp_addr()
1074 ksz_cfg(dev, REG_SW_LUE_CTRL_0, SW_RESV_MCAST_ENABLE, true); in ksz9477_enable_stp_addr()
1077 ret = ksz_write32(dev, REG_SW_ALU_VAL_B, in ksz9477_enable_stp_addr()
1078 ALU_V_OVERRIDE | BIT(dev->cpu_port)); in ksz9477_enable_stp_addr()
1084 ret = ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); in ksz9477_enable_stp_addr()
1089 ret = ksz9477_wait_alu_sta_ready(dev); in ksz9477_enable_stp_addr()
1091 dev_err(dev->dev, "Failed to update Reserved Multicast table\n"); in ksz9477_enable_stp_addr()
1100 struct ksz_device *dev = ds->priv; in ksz9477_setup() local
1106 ksz9477_cfg32(dev, REG_SW_QM_CTRL__4, UNICAST_VLAN_BOUNDARY, in ksz9477_setup()
1110 ksz_cfg(dev, REG_SW_MAC_CTRL_0, SW_CHECK_LENGTH, false); in ksz9477_setup()
1113 ksz_cfg(dev, REG_SW_MAC_CTRL_1, SW_JUMBO_PACKET, true); in ksz9477_setup()
1116 ksz_cfg(dev, REG_SW_MAC_CTRL_1, SW_BACK_PRESSURE, in ksz9477_setup()
1120 ret = regmap_update_bits(ksz_regmap_16(dev), REG_SW_MTU__2, REG_SW_MTU_MASK, in ksz9477_setup()
1126 ksz_cfg(dev, REG_SW_MAC_CTRL_5, SW_OUT_RATE_LIMIT_QUEUE_BASED, true); in ksz9477_setup()
1129 ksz_cfg(dev, REG_SW_MAC_CTRL_6, SW_MIB_COUNTER_FREEZE, true); in ksz9477_setup()
1139 int ksz9477_tc_cbs_set_cinc(struct ksz_device *dev, int port, u32 val) in ksz9477_tc_cbs_set_cinc() argument
1143 return ksz_pwrite16(dev, port, REG_PORT_MTI_CREDIT_INCREMENT, val); in ksz9477_tc_cbs_set_cinc()
1146 int ksz9477_switch_init(struct ksz_device *dev) in ksz9477_switch_init() argument
1151 dev->port_mask = (1 << dev->info->port_cnt) - 1; in ksz9477_switch_init()
1154 ret = ksz_read8(dev, REG_SW_GLOBAL_SERIAL_CTRL_0, &data8); in ksz9477_switch_init()
1159 ret = ksz_write8(dev, REG_SW_GLOBAL_SERIAL_CTRL_0, data8); in ksz9477_switch_init()
1166 void ksz9477_switch_exit(struct ksz_device *dev) in ksz9477_switch_exit() argument
1168 ksz9477_reset_switch(dev); in ksz9477_switch_exit()