Lines Matching full:sparx5

2 /* Microchip Sparx5 Switch driver
24 static u64 sparx5_mirror_port_get(struct sparx5 *sparx5, u32 idx) in sparx5_mirror_port_get() argument
28 val = spx5_rd(sparx5, ANA_AC_PROBE_PORT_CFG(idx)); in sparx5_mirror_port_get()
30 if (is_sparx5(sparx5)) in sparx5_mirror_port_get()
31 val |= (u64)spx5_rd(sparx5, ANA_AC_PROBE_PORT_CFG1(idx)) << 32; in sparx5_mirror_port_get()
37 static void sparx5_mirror_port_add(struct sparx5 *sparx5, u32 idx, u32 portno) in sparx5_mirror_port_add() argument
45 return spx5_rmw(val, val, sparx5, ANA_AC_PROBE_PORT_CFG(idx)); in sparx5_mirror_port_add()
47 return spx5_rmw(val, val, sparx5, ANA_AC_PROBE_PORT_CFG1(idx)); in sparx5_mirror_port_add()
51 static void sparx5_mirror_port_del(struct sparx5 *sparx5, u32 idx, u32 portno) in sparx5_mirror_port_del() argument
59 return spx5_rmw(0, val, sparx5, ANA_AC_PROBE_PORT_CFG(idx)); in sparx5_mirror_port_del()
61 return spx5_rmw(0, val, sparx5, ANA_AC_PROBE_PORT_CFG1(idx)); in sparx5_mirror_port_del()
65 static bool sparx5_mirror_contains(struct sparx5 *sparx5, u32 idx, u32 portno) in sparx5_mirror_contains() argument
67 return (sparx5_mirror_port_get(sparx5, idx) & BIT_ULL(portno)) != 0; in sparx5_mirror_contains()
71 static bool sparx5_mirror_is_empty(struct sparx5 *sparx5, u32 idx) in sparx5_mirror_is_empty() argument
73 return sparx5_mirror_port_get(sparx5, idx) == 0; in sparx5_mirror_is_empty()
77 static u32 sparx5_mirror_dir_get(struct sparx5 *sparx5, u32 idx) in sparx5_mirror_dir_get() argument
79 u32 val = spx5_rd(sparx5, ANA_AC_PROBE_CFG(idx)); in sparx5_mirror_dir_get()
85 static void sparx5_mirror_dir_set(struct sparx5 *sparx5, u32 idx, u32 dir) in sparx5_mirror_dir_set() argument
88 ANA_AC_PROBE_CFG_PROBE_DIRECTION, sparx5, in sparx5_mirror_dir_set()
93 static void sparx5_mirror_monitor_set(struct sparx5 *sparx5, u32 idx, in sparx5_mirror_monitor_set() argument
97 QFWD_FRAME_COPY_CFG_FRMC_PORT_VAL, sparx5, in sparx5_mirror_monitor_set()
102 static u32 sparx5_mirror_monitor_get(struct sparx5 *sparx5, u32 idx) in sparx5_mirror_monitor_get() argument
104 u32 val = spx5_rd(sparx5, in sparx5_mirror_monitor_get()
111 static bool sparx5_mirror_has_monitor(struct sparx5 *sparx5, u32 idx, in sparx5_mirror_has_monitor() argument
114 return sparx5_mirror_monitor_get(sparx5, idx) == portno; in sparx5_mirror_has_monitor()
121 struct sparx5 *sparx5 = sport->sparx5; in sparx5_mirror_get() local
126 if (sparx5_mirror_has_monitor(sparx5, i, sport->portno)) in sparx5_mirror_get()
133 if (sparx5_mirror_dir_get(sparx5, i) == dir && in sparx5_mirror_get()
134 sparx5_mirror_has_monitor(sparx5, i, mport->portno)) { in sparx5_mirror_get()
142 if (sparx5_mirror_is_empty(sparx5, i)) { in sparx5_mirror_get()
155 struct sparx5 *sparx5; in sparx5_mirror_add() local
162 sparx5 = sport->sparx5; in sparx5_mirror_add()
171 if (sparx5_mirror_contains(sparx5, mirror_idx, sport->portno)) in sparx5_mirror_add()
175 sparx5_mirror_port_add(sparx5, mirror_idx, sport->portno); in sparx5_mirror_add()
178 sparx5_mirror_dir_set(sparx5, mirror_idx, dir); in sparx5_mirror_add()
181 sparx5_mirror_monitor_set(sparx5, mirror_idx, mport->portno); in sparx5_mirror_add()
191 struct sparx5 *sparx5 = port->sparx5; in sparx5_mirror_del() local
194 sparx5_mirror_port_del(sparx5, mirror_idx, port->portno); in sparx5_mirror_del()
195 if (!sparx5_mirror_is_empty(sparx5, mirror_idx)) in sparx5_mirror_del()
198 sparx5_mirror_dir_set(sparx5, mirror_idx, SPX5_MIRROR_DISABLED); in sparx5_mirror_del()
200 sparx5_mirror_monitor_set(sparx5, in sparx5_mirror_del()
202 sparx5->data->consts->n_ports); in sparx5_mirror_del()