Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: lan966x: add the basic lan966x driver

This patch adds basic SwitchDev driver framework for lan966x. It
includes only the IO range mapping and probing of the switch.

Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Horatiu Vultur and committed by
David S. Miller
db8bcaad 642fcf53

+1207
+1
drivers/net/ethernet/microchip/Kconfig
··· 55 55 To compile this driver as a module, choose M here. The module will be 56 56 called lan743x. 57 57 58 + source "drivers/net/ethernet/microchip/lan966x/Kconfig" 58 59 source "drivers/net/ethernet/microchip/sparx5/Kconfig" 59 60 60 61 endif # NET_VENDOR_MICROCHIP
+1
drivers/net/ethernet/microchip/Makefile
··· 9 9 10 10 lan743x-objs := lan743x_main.o lan743x_ethtool.o lan743x_ptp.o 11 11 12 + obj-$(CONFIG_LAN966X_SWITCH) += lan966x/ 12 13 obj-$(CONFIG_SPARX5_SWITCH) += sparx5/
+7
drivers/net/ethernet/microchip/lan966x/Kconfig
··· 1 + config LAN966X_SWITCH 2 + tristate "Lan966x switch driver" 3 + depends on HAS_IOMEM 4 + depends on OF 5 + select PHYLINK 6 + help 7 + This driver supports the Lan966x network switch device.
+8
drivers/net/ethernet/microchip/lan966x/Makefile
··· 1 + # SPDX-License-Identifier: GPL-2.0-only 2 + # 3 + # Makefile for the Microchip Lan966x network device drivers. 4 + # 5 + 6 + obj-$(CONFIG_LAN966X_SWITCH) += lan966x-switch.o 7 + 8 + lan966x-switch-objs := lan966x_main.o
+357
drivers/net/ethernet/microchip/lan966x/lan966x_main.c
··· 1 + // SPDX-License-Identifier: GPL-2.0+ 2 + 3 + #include <linux/module.h> 4 + #include <linux/if_bridge.h> 5 + #include <linux/iopoll.h> 6 + #include <linux/of_platform.h> 7 + #include <linux/of_net.h> 8 + #include <linux/reset.h> 9 + 10 + #include "lan966x_main.h" 11 + 12 + #define READL_SLEEP_US 10 13 + #define READL_TIMEOUT_US 100000000 14 + 15 + #define IO_RANGES 2 16 + 17 + static const struct of_device_id lan966x_match[] = { 18 + { .compatible = "microchip,lan966x-switch" }, 19 + { } 20 + }; 21 + MODULE_DEVICE_TABLE(of, lan966x_match); 22 + 23 + struct lan966x_main_io_resource { 24 + enum lan966x_target id; 25 + phys_addr_t offset; 26 + int range; 27 + }; 28 + 29 + static const struct lan966x_main_io_resource lan966x_main_iomap[] = { 30 + { TARGET_CPU, 0xc0000, 0 }, /* 0xe00c0000 */ 31 + { TARGET_ORG, 0, 1 }, /* 0xe2000000 */ 32 + { TARGET_GCB, 0x4000, 1 }, /* 0xe2004000 */ 33 + { TARGET_QS, 0x8000, 1 }, /* 0xe2008000 */ 34 + { TARGET_CHIP_TOP, 0x10000, 1 }, /* 0xe2010000 */ 35 + { TARGET_REW, 0x14000, 1 }, /* 0xe2014000 */ 36 + { TARGET_SYS, 0x28000, 1 }, /* 0xe2028000 */ 37 + { TARGET_DEV, 0x34000, 1 }, /* 0xe2034000 */ 38 + { TARGET_DEV + 1, 0x38000, 1 }, /* 0xe2038000 */ 39 + { TARGET_DEV + 2, 0x3c000, 1 }, /* 0xe203c000 */ 40 + { TARGET_DEV + 3, 0x40000, 1 }, /* 0xe2040000 */ 41 + { TARGET_DEV + 4, 0x44000, 1 }, /* 0xe2044000 */ 42 + { TARGET_DEV + 5, 0x48000, 1 }, /* 0xe2048000 */ 43 + { TARGET_DEV + 6, 0x4c000, 1 }, /* 0xe204c000 */ 44 + { TARGET_DEV + 7, 0x50000, 1 }, /* 0xe2050000 */ 45 + { TARGET_QSYS, 0x100000, 1 }, /* 0xe2100000 */ 46 + { TARGET_AFI, 0x120000, 1 }, /* 0xe2120000 */ 47 + { TARGET_ANA, 0x140000, 1 }, /* 0xe2140000 */ 48 + }; 49 + 50 + static int lan966x_create_targets(struct platform_device *pdev, 51 + struct lan966x *lan966x) 52 + { 53 + struct resource *iores[IO_RANGES]; 54 + void __iomem *begin[IO_RANGES]; 55 + int idx; 56 + 57 + /* Initially map the entire range and after that update each target to 58 + * point inside the region at the correct offset. It is possible that 59 + * other devices access the same region so don't add any checks about 60 + * this. 61 + */ 62 + for (idx = 0; idx < IO_RANGES; idx++) { 63 + iores[idx] = platform_get_resource(pdev, IORESOURCE_MEM, 64 + idx); 65 + if (!iores[idx]) { 66 + dev_err(&pdev->dev, "Invalid resource\n"); 67 + return -EINVAL; 68 + } 69 + 70 + begin[idx] = devm_ioremap(&pdev->dev, 71 + iores[idx]->start, 72 + resource_size(iores[idx])); 73 + if (IS_ERR(begin[idx])) { 74 + dev_err(&pdev->dev, "Unable to get registers: %s\n", 75 + iores[idx]->name); 76 + return PTR_ERR(begin[idx]); 77 + } 78 + } 79 + 80 + for (idx = 0; idx < ARRAY_SIZE(lan966x_main_iomap); idx++) { 81 + const struct lan966x_main_io_resource *iomap = 82 + &lan966x_main_iomap[idx]; 83 + 84 + lan966x->regs[iomap->id] = begin[iomap->range] + iomap->offset; 85 + } 86 + 87 + return 0; 88 + } 89 + 90 + static int lan966x_probe_port(struct lan966x *lan966x, u32 p, 91 + phy_interface_t phy_mode) 92 + { 93 + struct lan966x_port *port; 94 + 95 + if (p >= lan966x->num_phys_ports) 96 + return -EINVAL; 97 + 98 + port = devm_kzalloc(lan966x->dev, sizeof(*port), GFP_KERNEL); 99 + if (!port) 100 + return -ENOMEM; 101 + 102 + port->lan966x = lan966x; 103 + port->chip_port = p; 104 + port->pvid = PORT_PVID; 105 + lan966x->ports[p] = port; 106 + 107 + return 0; 108 + } 109 + 110 + static void lan966x_init(struct lan966x *lan966x) 111 + { 112 + u32 p, i; 113 + 114 + /* Flush queues */ 115 + lan_wr(lan_rd(lan966x, QS_XTR_FLUSH) | 116 + GENMASK(1, 0), 117 + lan966x, QS_XTR_FLUSH); 118 + 119 + /* Allow to drain */ 120 + mdelay(1); 121 + 122 + /* All Queues normal */ 123 + lan_wr(lan_rd(lan966x, QS_XTR_FLUSH) & 124 + ~(GENMASK(1, 0)), 125 + lan966x, QS_XTR_FLUSH); 126 + 127 + /* Set MAC age time to default value, the entry is aged after 128 + * 2 * AGE_PERIOD 129 + */ 130 + lan_wr(ANA_AUTOAGE_AGE_PERIOD_SET(BR_DEFAULT_AGEING_TIME / 2 / HZ), 131 + lan966x, ANA_AUTOAGE); 132 + 133 + /* Disable learning for frames discarded by VLAN ingress filtering */ 134 + lan_rmw(ANA_ADVLEARN_VLAN_CHK_SET(1), 135 + ANA_ADVLEARN_VLAN_CHK, 136 + lan966x, ANA_ADVLEARN); 137 + 138 + /* Setup frame ageing - "2 sec" - The unit is 6.5 us on lan966x */ 139 + lan_wr(SYS_FRM_AGING_AGE_TX_ENA_SET(1) | 140 + (20000000 / 65), 141 + lan966x, SYS_FRM_AGING); 142 + 143 + /* Map the 8 CPU extraction queues to CPU port */ 144 + lan_wr(0, lan966x, QSYS_CPU_GROUP_MAP); 145 + 146 + /* Do byte-swap and expect status after last data word 147 + * Extraction: Mode: manual extraction) | Byte_swap 148 + */ 149 + lan_wr(QS_XTR_GRP_CFG_MODE_SET(1) | 150 + QS_XTR_GRP_CFG_BYTE_SWAP_SET(1), 151 + lan966x, QS_XTR_GRP_CFG(0)); 152 + 153 + /* Injection: Mode: manual injection | Byte_swap */ 154 + lan_wr(QS_INJ_GRP_CFG_MODE_SET(1) | 155 + QS_INJ_GRP_CFG_BYTE_SWAP_SET(1), 156 + lan966x, QS_INJ_GRP_CFG(0)); 157 + 158 + lan_rmw(QS_INJ_CTRL_GAP_SIZE_SET(0), 159 + QS_INJ_CTRL_GAP_SIZE, 160 + lan966x, QS_INJ_CTRL(0)); 161 + 162 + /* Enable IFH insertion/parsing on CPU ports */ 163 + lan_wr(SYS_PORT_MODE_INCL_INJ_HDR_SET(1) | 164 + SYS_PORT_MODE_INCL_XTR_HDR_SET(1), 165 + lan966x, SYS_PORT_MODE(CPU_PORT)); 166 + 167 + /* Setup flooding PGIDs */ 168 + lan_wr(ANA_FLOODING_IPMC_FLD_MC4_DATA_SET(PGID_MCIPV4) | 169 + ANA_FLOODING_IPMC_FLD_MC4_CTRL_SET(PGID_MC) | 170 + ANA_FLOODING_IPMC_FLD_MC6_DATA_SET(PGID_MC) | 171 + ANA_FLOODING_IPMC_FLD_MC6_CTRL_SET(PGID_MC), 172 + lan966x, ANA_FLOODING_IPMC); 173 + 174 + /* There are 8 priorities */ 175 + for (i = 0; i < 8; ++i) 176 + lan_rmw(ANA_FLOODING_FLD_MULTICAST_SET(PGID_MC) | 177 + ANA_FLOODING_FLD_BROADCAST_SET(PGID_BC), 178 + ANA_FLOODING_FLD_MULTICAST | 179 + ANA_FLOODING_FLD_BROADCAST, 180 + lan966x, ANA_FLOODING(i)); 181 + 182 + for (i = 0; i < PGID_ENTRIES; ++i) 183 + /* Set all the entries to obey VLAN_VLAN */ 184 + lan_rmw(ANA_PGID_CFG_OBEY_VLAN_SET(1), 185 + ANA_PGID_CFG_OBEY_VLAN, 186 + lan966x, ANA_PGID_CFG(i)); 187 + 188 + for (p = 0; p < lan966x->num_phys_ports; p++) { 189 + /* Disable bridging by default */ 190 + lan_rmw(ANA_PGID_PGID_SET(0x0), 191 + ANA_PGID_PGID, 192 + lan966x, ANA_PGID(p + PGID_SRC)); 193 + 194 + /* Do not forward BPDU frames to the front ports and copy them 195 + * to CPU 196 + */ 197 + lan_wr(0xffff, lan966x, ANA_CPU_FWD_BPDU_CFG(p)); 198 + } 199 + 200 + /* Set source buffer size for each priority and each port to 1500 bytes */ 201 + for (i = 0; i <= QSYS_Q_RSRV; ++i) { 202 + lan_wr(1500 / 64, lan966x, QSYS_RES_CFG(i)); 203 + lan_wr(1500 / 64, lan966x, QSYS_RES_CFG(512 + i)); 204 + } 205 + 206 + /* Enable switching to/from cpu port */ 207 + lan_wr(QSYS_SW_PORT_MODE_PORT_ENA_SET(1) | 208 + QSYS_SW_PORT_MODE_SCH_NEXT_CFG_SET(1) | 209 + QSYS_SW_PORT_MODE_INGRESS_DROP_MODE_SET(1), 210 + lan966x, QSYS_SW_PORT_MODE(CPU_PORT)); 211 + 212 + /* Configure and enable the CPU port */ 213 + lan_rmw(ANA_PGID_PGID_SET(0), 214 + ANA_PGID_PGID, 215 + lan966x, ANA_PGID(CPU_PORT)); 216 + lan_rmw(ANA_PGID_PGID_SET(BIT(CPU_PORT)), 217 + ANA_PGID_PGID, 218 + lan966x, ANA_PGID(PGID_CPU)); 219 + 220 + /* Multicast to all other ports */ 221 + lan_rmw(GENMASK(lan966x->num_phys_ports - 1, 0), 222 + ANA_PGID_PGID, 223 + lan966x, ANA_PGID(PGID_MC)); 224 + 225 + /* This will be controlled by mrouter ports */ 226 + lan_rmw(GENMASK(lan966x->num_phys_ports - 1, 0), 227 + ANA_PGID_PGID, 228 + lan966x, ANA_PGID(PGID_MCIPV4)); 229 + 230 + /* Broadcast to the CPU port and to other ports */ 231 + lan_rmw(ANA_PGID_PGID_SET(BIT(CPU_PORT) | GENMASK(lan966x->num_phys_ports - 1, 0)), 232 + ANA_PGID_PGID, 233 + lan966x, ANA_PGID(PGID_BC)); 234 + 235 + lan_wr(REW_PORT_CFG_NO_REWRITE_SET(1), 236 + lan966x, REW_PORT_CFG(CPU_PORT)); 237 + 238 + lan_rmw(ANA_ANAINTR_INTR_ENA_SET(1), 239 + ANA_ANAINTR_INTR_ENA, 240 + lan966x, ANA_ANAINTR); 241 + } 242 + 243 + static int lan966x_ram_init(struct lan966x *lan966x) 244 + { 245 + return lan_rd(lan966x, SYS_RAM_INIT); 246 + } 247 + 248 + static int lan966x_reset_switch(struct lan966x *lan966x) 249 + { 250 + struct reset_control *switch_reset, *phy_reset; 251 + int val = 0; 252 + int ret; 253 + 254 + switch_reset = devm_reset_control_get_shared(lan966x->dev, "switch"); 255 + if (IS_ERR(switch_reset)) 256 + return dev_err_probe(lan966x->dev, PTR_ERR(switch_reset), 257 + "Could not obtain switch reset"); 258 + 259 + phy_reset = devm_reset_control_get_shared(lan966x->dev, "phy"); 260 + if (IS_ERR(phy_reset)) 261 + return dev_err_probe(lan966x->dev, PTR_ERR(phy_reset), 262 + "Could not obtain phy reset\n"); 263 + 264 + reset_control_reset(switch_reset); 265 + reset_control_reset(phy_reset); 266 + 267 + lan_wr(SYS_RESET_CFG_CORE_ENA_SET(0), lan966x, SYS_RESET_CFG); 268 + lan_wr(SYS_RAM_INIT_RAM_INIT_SET(1), lan966x, SYS_RAM_INIT); 269 + ret = readx_poll_timeout(lan966x_ram_init, lan966x, 270 + val, (val & BIT(1)) == 0, READL_SLEEP_US, 271 + READL_TIMEOUT_US); 272 + if (ret) 273 + return ret; 274 + 275 + lan_wr(SYS_RESET_CFG_CORE_ENA_SET(1), lan966x, SYS_RESET_CFG); 276 + 277 + return 0; 278 + } 279 + 280 + static int lan966x_probe(struct platform_device *pdev) 281 + { 282 + struct fwnode_handle *ports, *portnp; 283 + struct lan966x *lan966x; 284 + int err, i; 285 + 286 + lan966x = devm_kzalloc(&pdev->dev, sizeof(*lan966x), GFP_KERNEL); 287 + if (!lan966x) 288 + return -ENOMEM; 289 + 290 + platform_set_drvdata(pdev, lan966x); 291 + lan966x->dev = &pdev->dev; 292 + 293 + ports = device_get_named_child_node(&pdev->dev, "ethernet-ports"); 294 + if (!ports) 295 + return dev_err_probe(&pdev->dev, -ENODEV, 296 + "no ethernet-ports child found\n"); 297 + 298 + err = lan966x_create_targets(pdev, lan966x); 299 + if (err) 300 + return dev_err_probe(&pdev->dev, err, 301 + "Failed to create targets"); 302 + 303 + err = lan966x_reset_switch(lan966x); 304 + if (err) 305 + return dev_err_probe(&pdev->dev, err, "Reset failed"); 306 + 307 + i = 0; 308 + fwnode_for_each_available_child_node(ports, portnp) 309 + ++i; 310 + 311 + lan966x->num_phys_ports = i; 312 + lan966x->ports = devm_kcalloc(&pdev->dev, lan966x->num_phys_ports, 313 + sizeof(struct lan966x_port *), 314 + GFP_KERNEL); 315 + if (!lan966x->ports) 316 + return -ENOMEM; 317 + 318 + /* There QS system has 32KB of memory */ 319 + lan966x->shared_queue_sz = LAN966X_BUFFER_MEMORY; 320 + 321 + /* init switch */ 322 + lan966x_init(lan966x); 323 + 324 + /* go over the child nodes */ 325 + fwnode_for_each_available_child_node(ports, portnp) { 326 + phy_interface_t phy_mode; 327 + u32 p; 328 + 329 + if (fwnode_property_read_u32(portnp, "reg", &p)) 330 + continue; 331 + 332 + phy_mode = fwnode_get_phy_mode(portnp); 333 + err = lan966x_probe_port(lan966x, p, phy_mode); 334 + if (err) 335 + goto cleanup_ports; 336 + } 337 + 338 + return 0; 339 + 340 + cleanup_ports: 341 + fwnode_handle_put(portnp); 342 + 343 + return err; 344 + } 345 + 346 + static struct platform_driver lan966x_driver = { 347 + .probe = lan966x_probe, 348 + .driver = { 349 + .name = "lan966x-switch", 350 + .of_match_table = lan966x_match, 351 + }, 352 + }; 353 + module_platform_driver(lan966x_driver); 354 + 355 + MODULE_DESCRIPTION("Microchip LAN966X switch driver"); 356 + MODULE_AUTHOR("Horatiu Vultur <horatiu.vultur@microchip.com>"); 357 + MODULE_LICENSE("Dual MIT/GPL");
+103
drivers/net/ethernet/microchip/lan966x/lan966x_main.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ */ 2 + 3 + #ifndef __LAN966X_MAIN_H__ 4 + #define __LAN966X_MAIN_H__ 5 + 6 + #include "lan966x_regs.h" 7 + 8 + #define LAN966X_BUFFER_CELL_SZ 64 9 + #define LAN966X_BUFFER_MEMORY (160 * 1024) 10 + #define LAN966X_BUFFER_MIN_SZ 60 11 + 12 + #define PGID_AGGR 64 13 + #define PGID_SRC 80 14 + #define PGID_ENTRIES 89 15 + 16 + #define PORT_PVID 0 17 + 18 + /* Reserved amount for (SRC, PRIO) at index 8*SRC + PRIO */ 19 + #define QSYS_Q_RSRV 95 20 + 21 + /* Reserved PGIDs */ 22 + #define PGID_CPU (PGID_AGGR - 6) 23 + #define PGID_UC (PGID_AGGR - 5) 24 + #define PGID_BC (PGID_AGGR - 4) 25 + #define PGID_MC (PGID_AGGR - 3) 26 + #define PGID_MCIPV4 (PGID_AGGR - 2) 27 + #define PGID_MCIPV6 (PGID_AGGR - 1) 28 + 29 + #define LAN966X_SPEED_NONE 0 30 + #define LAN966X_SPEED_1000 1 31 + #define LAN966X_SPEED_100 2 32 + #define LAN966X_SPEED_10 3 33 + 34 + #define CPU_PORT 8 35 + 36 + struct lan966x_port; 37 + 38 + struct lan966x { 39 + struct device *dev; 40 + 41 + u8 num_phys_ports; 42 + struct lan966x_port **ports; 43 + 44 + void __iomem *regs[NUM_TARGETS]; 45 + 46 + int shared_queue_sz; 47 + }; 48 + 49 + struct lan966x_port { 50 + struct lan966x *lan966x; 51 + 52 + u8 chip_port; 53 + u16 pvid; 54 + }; 55 + 56 + static inline void __iomem *lan_addr(void __iomem *base[], 57 + int id, int tinst, int tcnt, 58 + int gbase, int ginst, 59 + int gcnt, int gwidth, 60 + int raddr, int rinst, 61 + int rcnt, int rwidth) 62 + { 63 + WARN_ON((tinst) >= tcnt); 64 + WARN_ON((ginst) >= gcnt); 65 + WARN_ON((rinst) >= rcnt); 66 + return base[id + (tinst)] + 67 + gbase + ((ginst) * gwidth) + 68 + raddr + ((rinst) * rwidth); 69 + } 70 + 71 + static inline u32 lan_rd(struct lan966x *lan966x, int id, int tinst, int tcnt, 72 + int gbase, int ginst, int gcnt, int gwidth, 73 + int raddr, int rinst, int rcnt, int rwidth) 74 + { 75 + return readl(lan_addr(lan966x->regs, id, tinst, tcnt, gbase, ginst, 76 + gcnt, gwidth, raddr, rinst, rcnt, rwidth)); 77 + } 78 + 79 + static inline void lan_wr(u32 val, struct lan966x *lan966x, 80 + int id, int tinst, int tcnt, 81 + int gbase, int ginst, int gcnt, int gwidth, 82 + int raddr, int rinst, int rcnt, int rwidth) 83 + { 84 + writel(val, lan_addr(lan966x->regs, id, tinst, tcnt, 85 + gbase, ginst, gcnt, gwidth, 86 + raddr, rinst, rcnt, rwidth)); 87 + } 88 + 89 + static inline void lan_rmw(u32 val, u32 mask, struct lan966x *lan966x, 90 + int id, int tinst, int tcnt, 91 + int gbase, int ginst, int gcnt, int gwidth, 92 + int raddr, int rinst, int rcnt, int rwidth) 93 + { 94 + u32 nval; 95 + 96 + nval = readl(lan_addr(lan966x->regs, id, tinst, tcnt, gbase, ginst, 97 + gcnt, gwidth, raddr, rinst, rcnt, rwidth)); 98 + nval = (nval & ~mask) | (val & mask); 99 + writel(nval, lan_addr(lan966x->regs, id, tinst, tcnt, gbase, ginst, 100 + gcnt, gwidth, raddr, rinst, rcnt, rwidth)); 101 + } 102 + 103 + #endif /* __LAN966X_MAIN_H__ */
+730
drivers/net/ethernet/microchip/lan966x/lan966x_regs.h
··· 1 + /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */ 2 + 3 + /* This file is autogenerated by cml-utils 2021-10-10 13:25:08 +0200. 4 + * Commit ID: 26db2002924973d36a30b369c94f025a678fe9ea (dirty) 5 + */ 6 + 7 + #ifndef _LAN966X_REGS_H_ 8 + #define _LAN966X_REGS_H_ 9 + 10 + #include <linux/bitfield.h> 11 + #include <linux/types.h> 12 + #include <linux/bug.h> 13 + 14 + enum lan966x_target { 15 + TARGET_AFI = 2, 16 + TARGET_ANA = 3, 17 + TARGET_CHIP_TOP = 5, 18 + TARGET_CPU = 6, 19 + TARGET_DEV = 13, 20 + TARGET_GCB = 27, 21 + TARGET_ORG = 36, 22 + TARGET_QS = 42, 23 + TARGET_QSYS = 46, 24 + TARGET_REW = 47, 25 + TARGET_SYS = 52, 26 + NUM_TARGETS = 66 27 + }; 28 + 29 + #define __REG(...) __VA_ARGS__ 30 + 31 + /* AFI:PORT_TBL:PORT_FRM_OUT */ 32 + #define AFI_PORT_FRM_OUT(g) __REG(TARGET_AFI, 0, 1, 98816, g, 10, 8, 0, 0, 1, 4) 33 + 34 + #define AFI_PORT_FRM_OUT_FRM_OUT_CNT GENMASK(26, 16) 35 + #define AFI_PORT_FRM_OUT_FRM_OUT_CNT_SET(x)\ 36 + FIELD_PREP(AFI_PORT_FRM_OUT_FRM_OUT_CNT, x) 37 + #define AFI_PORT_FRM_OUT_FRM_OUT_CNT_GET(x)\ 38 + FIELD_GET(AFI_PORT_FRM_OUT_FRM_OUT_CNT, x) 39 + 40 + /* AFI:PORT_TBL:PORT_CFG */ 41 + #define AFI_PORT_CFG(g) __REG(TARGET_AFI, 0, 1, 98816, g, 10, 8, 4, 0, 1, 4) 42 + 43 + #define AFI_PORT_CFG_FC_SKIP_TTI_INJ BIT(16) 44 + #define AFI_PORT_CFG_FC_SKIP_TTI_INJ_SET(x)\ 45 + FIELD_PREP(AFI_PORT_CFG_FC_SKIP_TTI_INJ, x) 46 + #define AFI_PORT_CFG_FC_SKIP_TTI_INJ_GET(x)\ 47 + FIELD_GET(AFI_PORT_CFG_FC_SKIP_TTI_INJ, x) 48 + 49 + #define AFI_PORT_CFG_FRM_OUT_MAX GENMASK(9, 0) 50 + #define AFI_PORT_CFG_FRM_OUT_MAX_SET(x)\ 51 + FIELD_PREP(AFI_PORT_CFG_FRM_OUT_MAX, x) 52 + #define AFI_PORT_CFG_FRM_OUT_MAX_GET(x)\ 53 + FIELD_GET(AFI_PORT_CFG_FRM_OUT_MAX, x) 54 + 55 + /* ANA:ANA:ADVLEARN */ 56 + #define ANA_ADVLEARN __REG(TARGET_ANA, 0, 1, 29824, 0, 1, 244, 0, 0, 1, 4) 57 + 58 + #define ANA_ADVLEARN_VLAN_CHK BIT(0) 59 + #define ANA_ADVLEARN_VLAN_CHK_SET(x)\ 60 + FIELD_PREP(ANA_ADVLEARN_VLAN_CHK, x) 61 + #define ANA_ADVLEARN_VLAN_CHK_GET(x)\ 62 + FIELD_GET(ANA_ADVLEARN_VLAN_CHK, x) 63 + 64 + /* ANA:ANA:ANAINTR */ 65 + #define ANA_ANAINTR __REG(TARGET_ANA, 0, 1, 29824, 0, 1, 244, 16, 0, 1, 4) 66 + 67 + #define ANA_ANAINTR_INTR BIT(1) 68 + #define ANA_ANAINTR_INTR_SET(x)\ 69 + FIELD_PREP(ANA_ANAINTR_INTR, x) 70 + #define ANA_ANAINTR_INTR_GET(x)\ 71 + FIELD_GET(ANA_ANAINTR_INTR, x) 72 + 73 + #define ANA_ANAINTR_INTR_ENA BIT(0) 74 + #define ANA_ANAINTR_INTR_ENA_SET(x)\ 75 + FIELD_PREP(ANA_ANAINTR_INTR_ENA, x) 76 + #define ANA_ANAINTR_INTR_ENA_GET(x)\ 77 + FIELD_GET(ANA_ANAINTR_INTR_ENA, x) 78 + 79 + /* ANA:ANA:AUTOAGE */ 80 + #define ANA_AUTOAGE __REG(TARGET_ANA, 0, 1, 29824, 0, 1, 244, 44, 0, 1, 4) 81 + 82 + #define ANA_AUTOAGE_AGE_PERIOD GENMASK(20, 1) 83 + #define ANA_AUTOAGE_AGE_PERIOD_SET(x)\ 84 + FIELD_PREP(ANA_AUTOAGE_AGE_PERIOD, x) 85 + #define ANA_AUTOAGE_AGE_PERIOD_GET(x)\ 86 + FIELD_GET(ANA_AUTOAGE_AGE_PERIOD, x) 87 + 88 + /* ANA:ANA:FLOODING */ 89 + #define ANA_FLOODING(r) __REG(TARGET_ANA, 0, 1, 29824, 0, 1, 244, 68, r, 8, 4) 90 + 91 + #define ANA_FLOODING_FLD_BROADCAST GENMASK(11, 6) 92 + #define ANA_FLOODING_FLD_BROADCAST_SET(x)\ 93 + FIELD_PREP(ANA_FLOODING_FLD_BROADCAST, x) 94 + #define ANA_FLOODING_FLD_BROADCAST_GET(x)\ 95 + FIELD_GET(ANA_FLOODING_FLD_BROADCAST, x) 96 + 97 + #define ANA_FLOODING_FLD_MULTICAST GENMASK(5, 0) 98 + #define ANA_FLOODING_FLD_MULTICAST_SET(x)\ 99 + FIELD_PREP(ANA_FLOODING_FLD_MULTICAST, x) 100 + #define ANA_FLOODING_FLD_MULTICAST_GET(x)\ 101 + FIELD_GET(ANA_FLOODING_FLD_MULTICAST, x) 102 + 103 + /* ANA:ANA:FLOODING_IPMC */ 104 + #define ANA_FLOODING_IPMC __REG(TARGET_ANA, 0, 1, 29824, 0, 1, 244, 100, 0, 1, 4) 105 + 106 + #define ANA_FLOODING_IPMC_FLD_MC4_CTRL GENMASK(23, 18) 107 + #define ANA_FLOODING_IPMC_FLD_MC4_CTRL_SET(x)\ 108 + FIELD_PREP(ANA_FLOODING_IPMC_FLD_MC4_CTRL, x) 109 + #define ANA_FLOODING_IPMC_FLD_MC4_CTRL_GET(x)\ 110 + FIELD_GET(ANA_FLOODING_IPMC_FLD_MC4_CTRL, x) 111 + 112 + #define ANA_FLOODING_IPMC_FLD_MC4_DATA GENMASK(17, 12) 113 + #define ANA_FLOODING_IPMC_FLD_MC4_DATA_SET(x)\ 114 + FIELD_PREP(ANA_FLOODING_IPMC_FLD_MC4_DATA, x) 115 + #define ANA_FLOODING_IPMC_FLD_MC4_DATA_GET(x)\ 116 + FIELD_GET(ANA_FLOODING_IPMC_FLD_MC4_DATA, x) 117 + 118 + #define ANA_FLOODING_IPMC_FLD_MC6_CTRL GENMASK(11, 6) 119 + #define ANA_FLOODING_IPMC_FLD_MC6_CTRL_SET(x)\ 120 + FIELD_PREP(ANA_FLOODING_IPMC_FLD_MC6_CTRL, x) 121 + #define ANA_FLOODING_IPMC_FLD_MC6_CTRL_GET(x)\ 122 + FIELD_GET(ANA_FLOODING_IPMC_FLD_MC6_CTRL, x) 123 + 124 + #define ANA_FLOODING_IPMC_FLD_MC6_DATA GENMASK(5, 0) 125 + #define ANA_FLOODING_IPMC_FLD_MC6_DATA_SET(x)\ 126 + FIELD_PREP(ANA_FLOODING_IPMC_FLD_MC6_DATA, x) 127 + #define ANA_FLOODING_IPMC_FLD_MC6_DATA_GET(x)\ 128 + FIELD_GET(ANA_FLOODING_IPMC_FLD_MC6_DATA, x) 129 + 130 + /* ANA:PGID:PGID */ 131 + #define ANA_PGID(g) __REG(TARGET_ANA, 0, 1, 27648, g, 89, 8, 0, 0, 1, 4) 132 + 133 + #define ANA_PGID_PGID GENMASK(8, 0) 134 + #define ANA_PGID_PGID_SET(x)\ 135 + FIELD_PREP(ANA_PGID_PGID, x) 136 + #define ANA_PGID_PGID_GET(x)\ 137 + FIELD_GET(ANA_PGID_PGID, x) 138 + 139 + /* ANA:PGID:PGID_CFG */ 140 + #define ANA_PGID_CFG(g) __REG(TARGET_ANA, 0, 1, 27648, g, 89, 8, 4, 0, 1, 4) 141 + 142 + #define ANA_PGID_CFG_OBEY_VLAN BIT(0) 143 + #define ANA_PGID_CFG_OBEY_VLAN_SET(x)\ 144 + FIELD_PREP(ANA_PGID_CFG_OBEY_VLAN, x) 145 + #define ANA_PGID_CFG_OBEY_VLAN_GET(x)\ 146 + FIELD_GET(ANA_PGID_CFG_OBEY_VLAN, x) 147 + 148 + /* ANA:ANA_TABLES:MACHDATA */ 149 + #define ANA_MACHDATA __REG(TARGET_ANA, 0, 1, 27520, 0, 1, 128, 40, 0, 1, 4) 150 + 151 + /* ANA:ANA_TABLES:MACLDATA */ 152 + #define ANA_MACLDATA __REG(TARGET_ANA, 0, 1, 27520, 0, 1, 128, 44, 0, 1, 4) 153 + 154 + /* ANA:ANA_TABLES:MACACCESS */ 155 + #define ANA_MACACCESS __REG(TARGET_ANA, 0, 1, 27520, 0, 1, 128, 48, 0, 1, 4) 156 + 157 + #define ANA_MACACCESS_CHANGE2SW BIT(17) 158 + #define ANA_MACACCESS_CHANGE2SW_SET(x)\ 159 + FIELD_PREP(ANA_MACACCESS_CHANGE2SW, x) 160 + #define ANA_MACACCESS_CHANGE2SW_GET(x)\ 161 + FIELD_GET(ANA_MACACCESS_CHANGE2SW, x) 162 + 163 + #define ANA_MACACCESS_VALID BIT(12) 164 + #define ANA_MACACCESS_VALID_SET(x)\ 165 + FIELD_PREP(ANA_MACACCESS_VALID, x) 166 + #define ANA_MACACCESS_VALID_GET(x)\ 167 + FIELD_GET(ANA_MACACCESS_VALID, x) 168 + 169 + #define ANA_MACACCESS_ENTRYTYPE GENMASK(11, 10) 170 + #define ANA_MACACCESS_ENTRYTYPE_SET(x)\ 171 + FIELD_PREP(ANA_MACACCESS_ENTRYTYPE, x) 172 + #define ANA_MACACCESS_ENTRYTYPE_GET(x)\ 173 + FIELD_GET(ANA_MACACCESS_ENTRYTYPE, x) 174 + 175 + #define ANA_MACACCESS_DEST_IDX GENMASK(9, 4) 176 + #define ANA_MACACCESS_DEST_IDX_SET(x)\ 177 + FIELD_PREP(ANA_MACACCESS_DEST_IDX, x) 178 + #define ANA_MACACCESS_DEST_IDX_GET(x)\ 179 + FIELD_GET(ANA_MACACCESS_DEST_IDX, x) 180 + 181 + #define ANA_MACACCESS_MAC_TABLE_CMD GENMASK(3, 0) 182 + #define ANA_MACACCESS_MAC_TABLE_CMD_SET(x)\ 183 + FIELD_PREP(ANA_MACACCESS_MAC_TABLE_CMD, x) 184 + #define ANA_MACACCESS_MAC_TABLE_CMD_GET(x)\ 185 + FIELD_GET(ANA_MACACCESS_MAC_TABLE_CMD, x) 186 + 187 + /* ANA:PORT:CPU_FWD_CFG */ 188 + #define ANA_CPU_FWD_CFG(g) __REG(TARGET_ANA, 0, 1, 28672, g, 9, 128, 96, 0, 1, 4) 189 + 190 + #define ANA_CPU_FWD_CFG_SRC_COPY_ENA BIT(3) 191 + #define ANA_CPU_FWD_CFG_SRC_COPY_ENA_SET(x)\ 192 + FIELD_PREP(ANA_CPU_FWD_CFG_SRC_COPY_ENA, x) 193 + #define ANA_CPU_FWD_CFG_SRC_COPY_ENA_GET(x)\ 194 + FIELD_GET(ANA_CPU_FWD_CFG_SRC_COPY_ENA, x) 195 + 196 + /* ANA:PORT:CPU_FWD_BPDU_CFG */ 197 + #define ANA_CPU_FWD_BPDU_CFG(g) __REG(TARGET_ANA, 0, 1, 28672, g, 9, 128, 100, 0, 1, 4) 198 + 199 + /* ANA:PORT:PORT_CFG */ 200 + #define ANA_PORT_CFG(g) __REG(TARGET_ANA, 0, 1, 28672, g, 9, 128, 112, 0, 1, 4) 201 + 202 + #define ANA_PORT_CFG_LEARNAUTO BIT(6) 203 + #define ANA_PORT_CFG_LEARNAUTO_SET(x)\ 204 + FIELD_PREP(ANA_PORT_CFG_LEARNAUTO, x) 205 + #define ANA_PORT_CFG_LEARNAUTO_GET(x)\ 206 + FIELD_GET(ANA_PORT_CFG_LEARNAUTO, x) 207 + 208 + #define ANA_PORT_CFG_LEARN_ENA BIT(5) 209 + #define ANA_PORT_CFG_LEARN_ENA_SET(x)\ 210 + FIELD_PREP(ANA_PORT_CFG_LEARN_ENA, x) 211 + #define ANA_PORT_CFG_LEARN_ENA_GET(x)\ 212 + FIELD_GET(ANA_PORT_CFG_LEARN_ENA, x) 213 + 214 + #define ANA_PORT_CFG_RECV_ENA BIT(4) 215 + #define ANA_PORT_CFG_RECV_ENA_SET(x)\ 216 + FIELD_PREP(ANA_PORT_CFG_RECV_ENA, x) 217 + #define ANA_PORT_CFG_RECV_ENA_GET(x)\ 218 + FIELD_GET(ANA_PORT_CFG_RECV_ENA, x) 219 + 220 + #define ANA_PORT_CFG_PORTID_VAL GENMASK(3, 0) 221 + #define ANA_PORT_CFG_PORTID_VAL_SET(x)\ 222 + FIELD_PREP(ANA_PORT_CFG_PORTID_VAL, x) 223 + #define ANA_PORT_CFG_PORTID_VAL_GET(x)\ 224 + FIELD_GET(ANA_PORT_CFG_PORTID_VAL, x) 225 + 226 + /* ANA:PFC:PFC_CFG */ 227 + #define ANA_PFC_CFG(g) __REG(TARGET_ANA, 0, 1, 30720, g, 8, 64, 0, 0, 1, 4) 228 + 229 + #define ANA_PFC_CFG_FC_LINK_SPEED GENMASK(1, 0) 230 + #define ANA_PFC_CFG_FC_LINK_SPEED_SET(x)\ 231 + FIELD_PREP(ANA_PFC_CFG_FC_LINK_SPEED, x) 232 + #define ANA_PFC_CFG_FC_LINK_SPEED_GET(x)\ 233 + FIELD_GET(ANA_PFC_CFG_FC_LINK_SPEED, x) 234 + 235 + /* CHIP_TOP:CUPHY_CFG:CUPHY_PORT_CFG */ 236 + #define CHIP_TOP_CUPHY_PORT_CFG(r) __REG(TARGET_CHIP_TOP, 0, 1, 16, 0, 1, 20, 8, r, 2, 4) 237 + 238 + #define CHIP_TOP_CUPHY_PORT_CFG_GTX_CLK_ENA BIT(0) 239 + #define CHIP_TOP_CUPHY_PORT_CFG_GTX_CLK_ENA_SET(x)\ 240 + FIELD_PREP(CHIP_TOP_CUPHY_PORT_CFG_GTX_CLK_ENA, x) 241 + #define CHIP_TOP_CUPHY_PORT_CFG_GTX_CLK_ENA_GET(x)\ 242 + FIELD_GET(CHIP_TOP_CUPHY_PORT_CFG_GTX_CLK_ENA, x) 243 + 244 + /* DEV:PORT_MODE:CLOCK_CFG */ 245 + #define DEV_CLOCK_CFG(t) __REG(TARGET_DEV, t, 8, 0, 0, 1, 28, 0, 0, 1, 4) 246 + 247 + #define DEV_CLOCK_CFG_MAC_TX_RST BIT(7) 248 + #define DEV_CLOCK_CFG_MAC_TX_RST_SET(x)\ 249 + FIELD_PREP(DEV_CLOCK_CFG_MAC_TX_RST, x) 250 + #define DEV_CLOCK_CFG_MAC_TX_RST_GET(x)\ 251 + FIELD_GET(DEV_CLOCK_CFG_MAC_TX_RST, x) 252 + 253 + #define DEV_CLOCK_CFG_MAC_RX_RST BIT(6) 254 + #define DEV_CLOCK_CFG_MAC_RX_RST_SET(x)\ 255 + FIELD_PREP(DEV_CLOCK_CFG_MAC_RX_RST, x) 256 + #define DEV_CLOCK_CFG_MAC_RX_RST_GET(x)\ 257 + FIELD_GET(DEV_CLOCK_CFG_MAC_RX_RST, x) 258 + 259 + #define DEV_CLOCK_CFG_PCS_TX_RST BIT(5) 260 + #define DEV_CLOCK_CFG_PCS_TX_RST_SET(x)\ 261 + FIELD_PREP(DEV_CLOCK_CFG_PCS_TX_RST, x) 262 + #define DEV_CLOCK_CFG_PCS_TX_RST_GET(x)\ 263 + FIELD_GET(DEV_CLOCK_CFG_PCS_TX_RST, x) 264 + 265 + #define DEV_CLOCK_CFG_PCS_RX_RST BIT(4) 266 + #define DEV_CLOCK_CFG_PCS_RX_RST_SET(x)\ 267 + FIELD_PREP(DEV_CLOCK_CFG_PCS_RX_RST, x) 268 + #define DEV_CLOCK_CFG_PCS_RX_RST_GET(x)\ 269 + FIELD_GET(DEV_CLOCK_CFG_PCS_RX_RST, x) 270 + 271 + #define DEV_CLOCK_CFG_PORT_RST BIT(3) 272 + #define DEV_CLOCK_CFG_PORT_RST_SET(x)\ 273 + FIELD_PREP(DEV_CLOCK_CFG_PORT_RST, x) 274 + #define DEV_CLOCK_CFG_PORT_RST_GET(x)\ 275 + FIELD_GET(DEV_CLOCK_CFG_PORT_RST, x) 276 + 277 + #define DEV_CLOCK_CFG_LINK_SPEED GENMASK(1, 0) 278 + #define DEV_CLOCK_CFG_LINK_SPEED_SET(x)\ 279 + FIELD_PREP(DEV_CLOCK_CFG_LINK_SPEED, x) 280 + #define DEV_CLOCK_CFG_LINK_SPEED_GET(x)\ 281 + FIELD_GET(DEV_CLOCK_CFG_LINK_SPEED, x) 282 + 283 + /* DEV:MAC_CFG_STATUS:MAC_ENA_CFG */ 284 + #define DEV_MAC_ENA_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 0, 0, 1, 4) 285 + 286 + #define DEV_MAC_ENA_CFG_RX_ENA BIT(4) 287 + #define DEV_MAC_ENA_CFG_RX_ENA_SET(x)\ 288 + FIELD_PREP(DEV_MAC_ENA_CFG_RX_ENA, x) 289 + #define DEV_MAC_ENA_CFG_RX_ENA_GET(x)\ 290 + FIELD_GET(DEV_MAC_ENA_CFG_RX_ENA, x) 291 + 292 + #define DEV_MAC_ENA_CFG_TX_ENA BIT(0) 293 + #define DEV_MAC_ENA_CFG_TX_ENA_SET(x)\ 294 + FIELD_PREP(DEV_MAC_ENA_CFG_TX_ENA, x) 295 + #define DEV_MAC_ENA_CFG_TX_ENA_GET(x)\ 296 + FIELD_GET(DEV_MAC_ENA_CFG_TX_ENA, x) 297 + 298 + /* DEV:MAC_CFG_STATUS:MAC_MODE_CFG */ 299 + #define DEV_MAC_MODE_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 4, 0, 1, 4) 300 + 301 + #define DEV_MAC_MODE_CFG_GIGA_MODE_ENA BIT(4) 302 + #define DEV_MAC_MODE_CFG_GIGA_MODE_ENA_SET(x)\ 303 + FIELD_PREP(DEV_MAC_MODE_CFG_GIGA_MODE_ENA, x) 304 + #define DEV_MAC_MODE_CFG_GIGA_MODE_ENA_GET(x)\ 305 + FIELD_GET(DEV_MAC_MODE_CFG_GIGA_MODE_ENA, x) 306 + 307 + /* DEV:MAC_CFG_STATUS:MAC_MAXLEN_CFG */ 308 + #define DEV_MAC_MAXLEN_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 8, 0, 1, 4) 309 + 310 + #define DEV_MAC_MAXLEN_CFG_MAX_LEN GENMASK(15, 0) 311 + #define DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(x)\ 312 + FIELD_PREP(DEV_MAC_MAXLEN_CFG_MAX_LEN, x) 313 + #define DEV_MAC_MAXLEN_CFG_MAX_LEN_GET(x)\ 314 + FIELD_GET(DEV_MAC_MAXLEN_CFG_MAX_LEN, x) 315 + 316 + /* DEV:MAC_CFG_STATUS:MAC_IFG_CFG */ 317 + #define DEV_MAC_IFG_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 20, 0, 1, 4) 318 + 319 + #define DEV_MAC_IFG_CFG_TX_IFG GENMASK(12, 8) 320 + #define DEV_MAC_IFG_CFG_TX_IFG_SET(x)\ 321 + FIELD_PREP(DEV_MAC_IFG_CFG_TX_IFG, x) 322 + #define DEV_MAC_IFG_CFG_TX_IFG_GET(x)\ 323 + FIELD_GET(DEV_MAC_IFG_CFG_TX_IFG, x) 324 + 325 + #define DEV_MAC_IFG_CFG_RX_IFG2 GENMASK(7, 4) 326 + #define DEV_MAC_IFG_CFG_RX_IFG2_SET(x)\ 327 + FIELD_PREP(DEV_MAC_IFG_CFG_RX_IFG2, x) 328 + #define DEV_MAC_IFG_CFG_RX_IFG2_GET(x)\ 329 + FIELD_GET(DEV_MAC_IFG_CFG_RX_IFG2, x) 330 + 331 + #define DEV_MAC_IFG_CFG_RX_IFG1 GENMASK(3, 0) 332 + #define DEV_MAC_IFG_CFG_RX_IFG1_SET(x)\ 333 + FIELD_PREP(DEV_MAC_IFG_CFG_RX_IFG1, x) 334 + #define DEV_MAC_IFG_CFG_RX_IFG1_GET(x)\ 335 + FIELD_GET(DEV_MAC_IFG_CFG_RX_IFG1, x) 336 + 337 + /* DEV:MAC_CFG_STATUS:MAC_HDX_CFG */ 338 + #define DEV_MAC_HDX_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 24, 0, 1, 4) 339 + 340 + #define DEV_MAC_HDX_CFG_SEED GENMASK(23, 16) 341 + #define DEV_MAC_HDX_CFG_SEED_SET(x)\ 342 + FIELD_PREP(DEV_MAC_HDX_CFG_SEED, x) 343 + #define DEV_MAC_HDX_CFG_SEED_GET(x)\ 344 + FIELD_GET(DEV_MAC_HDX_CFG_SEED, x) 345 + 346 + #define DEV_MAC_HDX_CFG_SEED_LOAD BIT(12) 347 + #define DEV_MAC_HDX_CFG_SEED_LOAD_SET(x)\ 348 + FIELD_PREP(DEV_MAC_HDX_CFG_SEED_LOAD, x) 349 + #define DEV_MAC_HDX_CFG_SEED_LOAD_GET(x)\ 350 + FIELD_GET(DEV_MAC_HDX_CFG_SEED_LOAD, x) 351 + 352 + /* DEV:MAC_CFG_STATUS:MAC_FC_MAC_LOW_CFG */ 353 + #define DEV_FC_MAC_LOW_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 32, 0, 1, 4) 354 + 355 + /* DEV:MAC_CFG_STATUS:MAC_FC_MAC_HIGH_CFG */ 356 + #define DEV_FC_MAC_HIGH_CFG(t) __REG(TARGET_DEV, t, 8, 28, 0, 1, 44, 36, 0, 1, 4) 357 + 358 + /* DEV:PCS1G_CFG_STATUS:PCS1G_CFG */ 359 + #define DEV_PCS1G_CFG(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 0, 0, 1, 4) 360 + 361 + #define DEV_PCS1G_CFG_PCS_ENA BIT(0) 362 + #define DEV_PCS1G_CFG_PCS_ENA_SET(x)\ 363 + FIELD_PREP(DEV_PCS1G_CFG_PCS_ENA, x) 364 + #define DEV_PCS1G_CFG_PCS_ENA_GET(x)\ 365 + FIELD_GET(DEV_PCS1G_CFG_PCS_ENA, x) 366 + 367 + /* DEV:PCS1G_CFG_STATUS:PCS1G_MODE_CFG */ 368 + #define DEV_PCS1G_MODE_CFG(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 4, 0, 1, 4) 369 + 370 + #define DEV_PCS1G_MODE_CFG_SGMII_MODE_ENA BIT(0) 371 + #define DEV_PCS1G_MODE_CFG_SGMII_MODE_ENA_SET(x)\ 372 + FIELD_PREP(DEV_PCS1G_MODE_CFG_SGMII_MODE_ENA, x) 373 + #define DEV_PCS1G_MODE_CFG_SGMII_MODE_ENA_GET(x)\ 374 + FIELD_GET(DEV_PCS1G_MODE_CFG_SGMII_MODE_ENA, x) 375 + 376 + /* DEV:PCS1G_CFG_STATUS:PCS1G_SD_CFG */ 377 + #define DEV_PCS1G_SD_CFG(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 8, 0, 1, 4) 378 + 379 + #define DEV_PCS1G_SD_CFG_SD_ENA BIT(0) 380 + #define DEV_PCS1G_SD_CFG_SD_ENA_SET(x)\ 381 + FIELD_PREP(DEV_PCS1G_SD_CFG_SD_ENA, x) 382 + #define DEV_PCS1G_SD_CFG_SD_ENA_GET(x)\ 383 + FIELD_GET(DEV_PCS1G_SD_CFG_SD_ENA, x) 384 + 385 + /* DEV:PCS1G_CFG_STATUS:PCS1G_ANEG_CFG */ 386 + #define DEV_PCS1G_ANEG_CFG(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 12, 0, 1, 4) 387 + 388 + #define DEV_PCS1G_ANEG_CFG_ADV_ABILITY GENMASK(31, 16) 389 + #define DEV_PCS1G_ANEG_CFG_ADV_ABILITY_SET(x)\ 390 + FIELD_PREP(DEV_PCS1G_ANEG_CFG_ADV_ABILITY, x) 391 + #define DEV_PCS1G_ANEG_CFG_ADV_ABILITY_GET(x)\ 392 + FIELD_GET(DEV_PCS1G_ANEG_CFG_ADV_ABILITY, x) 393 + 394 + #define DEV_PCS1G_ANEG_CFG_SW_RESOLVE_ENA BIT(8) 395 + #define DEV_PCS1G_ANEG_CFG_SW_RESOLVE_ENA_SET(x)\ 396 + FIELD_PREP(DEV_PCS1G_ANEG_CFG_SW_RESOLVE_ENA, x) 397 + #define DEV_PCS1G_ANEG_CFG_SW_RESOLVE_ENA_GET(x)\ 398 + FIELD_GET(DEV_PCS1G_ANEG_CFG_SW_RESOLVE_ENA, x) 399 + 400 + #define DEV_PCS1G_ANEG_CFG_RESTART_ONE_SHOT BIT(1) 401 + #define DEV_PCS1G_ANEG_CFG_RESTART_ONE_SHOT_SET(x)\ 402 + FIELD_PREP(DEV_PCS1G_ANEG_CFG_RESTART_ONE_SHOT, x) 403 + #define DEV_PCS1G_ANEG_CFG_RESTART_ONE_SHOT_GET(x)\ 404 + FIELD_GET(DEV_PCS1G_ANEG_CFG_RESTART_ONE_SHOT, x) 405 + 406 + #define DEV_PCS1G_ANEG_CFG_ENA BIT(0) 407 + #define DEV_PCS1G_ANEG_CFG_ENA_SET(x)\ 408 + FIELD_PREP(DEV_PCS1G_ANEG_CFG_ENA, x) 409 + #define DEV_PCS1G_ANEG_CFG_ENA_GET(x)\ 410 + FIELD_GET(DEV_PCS1G_ANEG_CFG_ENA, x) 411 + 412 + /* DEV:PCS1G_CFG_STATUS:PCS1G_ANEG_STATUS */ 413 + #define DEV_PCS1G_ANEG_STATUS(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 32, 0, 1, 4) 414 + 415 + #define DEV_PCS1G_ANEG_STATUS_LP_ADV GENMASK(31, 16) 416 + #define DEV_PCS1G_ANEG_STATUS_LP_ADV_SET(x)\ 417 + FIELD_PREP(DEV_PCS1G_ANEG_STATUS_LP_ADV, x) 418 + #define DEV_PCS1G_ANEG_STATUS_LP_ADV_GET(x)\ 419 + FIELD_GET(DEV_PCS1G_ANEG_STATUS_LP_ADV, x) 420 + 421 + #define DEV_PCS1G_ANEG_STATUS_ANEG_COMPLETE BIT(0) 422 + #define DEV_PCS1G_ANEG_STATUS_ANEG_COMPLETE_SET(x)\ 423 + FIELD_PREP(DEV_PCS1G_ANEG_STATUS_ANEG_COMPLETE, x) 424 + #define DEV_PCS1G_ANEG_STATUS_ANEG_COMPLETE_GET(x)\ 425 + FIELD_GET(DEV_PCS1G_ANEG_STATUS_ANEG_COMPLETE, x) 426 + 427 + /* DEV:PCS1G_CFG_STATUS:PCS1G_LINK_STATUS */ 428 + #define DEV_PCS1G_LINK_STATUS(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 40, 0, 1, 4) 429 + 430 + #define DEV_PCS1G_LINK_STATUS_LINK_STATUS BIT(4) 431 + #define DEV_PCS1G_LINK_STATUS_LINK_STATUS_SET(x)\ 432 + FIELD_PREP(DEV_PCS1G_LINK_STATUS_LINK_STATUS, x) 433 + #define DEV_PCS1G_LINK_STATUS_LINK_STATUS_GET(x)\ 434 + FIELD_GET(DEV_PCS1G_LINK_STATUS_LINK_STATUS, x) 435 + 436 + #define DEV_PCS1G_LINK_STATUS_SYNC_STATUS BIT(0) 437 + #define DEV_PCS1G_LINK_STATUS_SYNC_STATUS_SET(x)\ 438 + FIELD_PREP(DEV_PCS1G_LINK_STATUS_SYNC_STATUS, x) 439 + #define DEV_PCS1G_LINK_STATUS_SYNC_STATUS_GET(x)\ 440 + FIELD_GET(DEV_PCS1G_LINK_STATUS_SYNC_STATUS, x) 441 + 442 + /* DEV:PCS1G_CFG_STATUS:PCS1G_STICKY */ 443 + #define DEV_PCS1G_STICKY(t) __REG(TARGET_DEV, t, 8, 72, 0, 1, 68, 48, 0, 1, 4) 444 + 445 + #define DEV_PCS1G_STICKY_LINK_DOWN_STICKY BIT(4) 446 + #define DEV_PCS1G_STICKY_LINK_DOWN_STICKY_SET(x)\ 447 + FIELD_PREP(DEV_PCS1G_STICKY_LINK_DOWN_STICKY, x) 448 + #define DEV_PCS1G_STICKY_LINK_DOWN_STICKY_GET(x)\ 449 + FIELD_GET(DEV_PCS1G_STICKY_LINK_DOWN_STICKY, x) 450 + 451 + /* DEVCPU_QS:XTR:XTR_GRP_CFG */ 452 + #define QS_XTR_GRP_CFG(r) __REG(TARGET_QS, 0, 1, 0, 0, 1, 36, 0, r, 2, 4) 453 + 454 + #define QS_XTR_GRP_CFG_MODE GENMASK(3, 2) 455 + #define QS_XTR_GRP_CFG_MODE_SET(x)\ 456 + FIELD_PREP(QS_XTR_GRP_CFG_MODE, x) 457 + #define QS_XTR_GRP_CFG_MODE_GET(x)\ 458 + FIELD_GET(QS_XTR_GRP_CFG_MODE, x) 459 + 460 + #define QS_XTR_GRP_CFG_BYTE_SWAP BIT(0) 461 + #define QS_XTR_GRP_CFG_BYTE_SWAP_SET(x)\ 462 + FIELD_PREP(QS_XTR_GRP_CFG_BYTE_SWAP, x) 463 + #define QS_XTR_GRP_CFG_BYTE_SWAP_GET(x)\ 464 + FIELD_GET(QS_XTR_GRP_CFG_BYTE_SWAP, x) 465 + 466 + /* DEVCPU_QS:XTR:XTR_RD */ 467 + #define QS_XTR_RD(r) __REG(TARGET_QS, 0, 1, 0, 0, 1, 36, 8, r, 2, 4) 468 + 469 + /* DEVCPU_QS:XTR:XTR_FLUSH */ 470 + #define QS_XTR_FLUSH __REG(TARGET_QS, 0, 1, 0, 0, 1, 36, 24, 0, 1, 4) 471 + 472 + /* DEVCPU_QS:XTR:XTR_DATA_PRESENT */ 473 + #define QS_XTR_DATA_PRESENT __REG(TARGET_QS, 0, 1, 0, 0, 1, 36, 28, 0, 1, 4) 474 + 475 + /* DEVCPU_QS:INJ:INJ_GRP_CFG */ 476 + #define QS_INJ_GRP_CFG(r) __REG(TARGET_QS, 0, 1, 36, 0, 1, 40, 0, r, 2, 4) 477 + 478 + #define QS_INJ_GRP_CFG_MODE GENMASK(3, 2) 479 + #define QS_INJ_GRP_CFG_MODE_SET(x)\ 480 + FIELD_PREP(QS_INJ_GRP_CFG_MODE, x) 481 + #define QS_INJ_GRP_CFG_MODE_GET(x)\ 482 + FIELD_GET(QS_INJ_GRP_CFG_MODE, x) 483 + 484 + #define QS_INJ_GRP_CFG_BYTE_SWAP BIT(0) 485 + #define QS_INJ_GRP_CFG_BYTE_SWAP_SET(x)\ 486 + FIELD_PREP(QS_INJ_GRP_CFG_BYTE_SWAP, x) 487 + #define QS_INJ_GRP_CFG_BYTE_SWAP_GET(x)\ 488 + FIELD_GET(QS_INJ_GRP_CFG_BYTE_SWAP, x) 489 + 490 + /* DEVCPU_QS:INJ:INJ_WR */ 491 + #define QS_INJ_WR(r) __REG(TARGET_QS, 0, 1, 36, 0, 1, 40, 8, r, 2, 4) 492 + 493 + /* DEVCPU_QS:INJ:INJ_CTRL */ 494 + #define QS_INJ_CTRL(r) __REG(TARGET_QS, 0, 1, 36, 0, 1, 40, 16, r, 2, 4) 495 + 496 + #define QS_INJ_CTRL_GAP_SIZE GENMASK(24, 21) 497 + #define QS_INJ_CTRL_GAP_SIZE_SET(x)\ 498 + FIELD_PREP(QS_INJ_CTRL_GAP_SIZE, x) 499 + #define QS_INJ_CTRL_GAP_SIZE_GET(x)\ 500 + FIELD_GET(QS_INJ_CTRL_GAP_SIZE, x) 501 + 502 + #define QS_INJ_CTRL_EOF BIT(19) 503 + #define QS_INJ_CTRL_EOF_SET(x)\ 504 + FIELD_PREP(QS_INJ_CTRL_EOF, x) 505 + #define QS_INJ_CTRL_EOF_GET(x)\ 506 + FIELD_GET(QS_INJ_CTRL_EOF, x) 507 + 508 + #define QS_INJ_CTRL_SOF BIT(18) 509 + #define QS_INJ_CTRL_SOF_SET(x)\ 510 + FIELD_PREP(QS_INJ_CTRL_SOF, x) 511 + #define QS_INJ_CTRL_SOF_GET(x)\ 512 + FIELD_GET(QS_INJ_CTRL_SOF, x) 513 + 514 + #define QS_INJ_CTRL_VLD_BYTES GENMASK(17, 16) 515 + #define QS_INJ_CTRL_VLD_BYTES_SET(x)\ 516 + FIELD_PREP(QS_INJ_CTRL_VLD_BYTES, x) 517 + #define QS_INJ_CTRL_VLD_BYTES_GET(x)\ 518 + FIELD_GET(QS_INJ_CTRL_VLD_BYTES, x) 519 + 520 + /* DEVCPU_QS:INJ:INJ_STATUS */ 521 + #define QS_INJ_STATUS __REG(TARGET_QS, 0, 1, 36, 0, 1, 40, 24, 0, 1, 4) 522 + 523 + #define QS_INJ_STATUS_WMARK_REACHED GENMASK(5, 4) 524 + #define QS_INJ_STATUS_WMARK_REACHED_SET(x)\ 525 + FIELD_PREP(QS_INJ_STATUS_WMARK_REACHED, x) 526 + #define QS_INJ_STATUS_WMARK_REACHED_GET(x)\ 527 + FIELD_GET(QS_INJ_STATUS_WMARK_REACHED, x) 528 + 529 + #define QS_INJ_STATUS_FIFO_RDY GENMASK(3, 2) 530 + #define QS_INJ_STATUS_FIFO_RDY_SET(x)\ 531 + FIELD_PREP(QS_INJ_STATUS_FIFO_RDY, x) 532 + #define QS_INJ_STATUS_FIFO_RDY_GET(x)\ 533 + FIELD_GET(QS_INJ_STATUS_FIFO_RDY, x) 534 + 535 + /* QSYS:SYSTEM:PORT_MODE */ 536 + #define QSYS_PORT_MODE(r) __REG(TARGET_QSYS, 0, 1, 28008, 0, 1, 216, 0, r, 10, 4) 537 + 538 + #define QSYS_PORT_MODE_DEQUEUE_DIS BIT(1) 539 + #define QSYS_PORT_MODE_DEQUEUE_DIS_SET(x)\ 540 + FIELD_PREP(QSYS_PORT_MODE_DEQUEUE_DIS, x) 541 + #define QSYS_PORT_MODE_DEQUEUE_DIS_GET(x)\ 542 + FIELD_GET(QSYS_PORT_MODE_DEQUEUE_DIS, x) 543 + 544 + /* QSYS:SYSTEM:SWITCH_PORT_MODE */ 545 + #define QSYS_SW_PORT_MODE(r) __REG(TARGET_QSYS, 0, 1, 28008, 0, 1, 216, 80, r, 9, 4) 546 + 547 + #define QSYS_SW_PORT_MODE_PORT_ENA BIT(18) 548 + #define QSYS_SW_PORT_MODE_PORT_ENA_SET(x)\ 549 + FIELD_PREP(QSYS_SW_PORT_MODE_PORT_ENA, x) 550 + #define QSYS_SW_PORT_MODE_PORT_ENA_GET(x)\ 551 + FIELD_GET(QSYS_SW_PORT_MODE_PORT_ENA, x) 552 + 553 + #define QSYS_SW_PORT_MODE_SCH_NEXT_CFG GENMASK(16, 14) 554 + #define QSYS_SW_PORT_MODE_SCH_NEXT_CFG_SET(x)\ 555 + FIELD_PREP(QSYS_SW_PORT_MODE_SCH_NEXT_CFG, x) 556 + #define QSYS_SW_PORT_MODE_SCH_NEXT_CFG_GET(x)\ 557 + FIELD_GET(QSYS_SW_PORT_MODE_SCH_NEXT_CFG, x) 558 + 559 + #define QSYS_SW_PORT_MODE_INGRESS_DROP_MODE BIT(12) 560 + #define QSYS_SW_PORT_MODE_INGRESS_DROP_MODE_SET(x)\ 561 + FIELD_PREP(QSYS_SW_PORT_MODE_INGRESS_DROP_MODE, x) 562 + #define QSYS_SW_PORT_MODE_INGRESS_DROP_MODE_GET(x)\ 563 + FIELD_GET(QSYS_SW_PORT_MODE_INGRESS_DROP_MODE, x) 564 + 565 + #define QSYS_SW_PORT_MODE_TX_PFC_ENA GENMASK(11, 4) 566 + #define QSYS_SW_PORT_MODE_TX_PFC_ENA_SET(x)\ 567 + FIELD_PREP(QSYS_SW_PORT_MODE_TX_PFC_ENA, x) 568 + #define QSYS_SW_PORT_MODE_TX_PFC_ENA_GET(x)\ 569 + FIELD_GET(QSYS_SW_PORT_MODE_TX_PFC_ENA, x) 570 + 571 + #define QSYS_SW_PORT_MODE_AGING_MODE GENMASK(1, 0) 572 + #define QSYS_SW_PORT_MODE_AGING_MODE_SET(x)\ 573 + FIELD_PREP(QSYS_SW_PORT_MODE_AGING_MODE, x) 574 + #define QSYS_SW_PORT_MODE_AGING_MODE_GET(x)\ 575 + FIELD_GET(QSYS_SW_PORT_MODE_AGING_MODE, x) 576 + 577 + /* QSYS:SYSTEM:SW_STATUS */ 578 + #define QSYS_SW_STATUS(r) __REG(TARGET_QSYS, 0, 1, 28008, 0, 1, 216, 164, r, 9, 4) 579 + 580 + #define QSYS_SW_STATUS_EQ_AVAIL GENMASK(7, 0) 581 + #define QSYS_SW_STATUS_EQ_AVAIL_SET(x)\ 582 + FIELD_PREP(QSYS_SW_STATUS_EQ_AVAIL, x) 583 + #define QSYS_SW_STATUS_EQ_AVAIL_GET(x)\ 584 + FIELD_GET(QSYS_SW_STATUS_EQ_AVAIL, x) 585 + 586 + /* QSYS:SYSTEM:CPU_GROUP_MAP */ 587 + #define QSYS_CPU_GROUP_MAP __REG(TARGET_QSYS, 0, 1, 28008, 0, 1, 216, 204, 0, 1, 4) 588 + 589 + /* QSYS:RES_CTRL:RES_CFG */ 590 + #define QSYS_RES_CFG(g) __REG(TARGET_QSYS, 0, 1, 32768, g, 1024, 8, 0, 0, 1, 4) 591 + 592 + /* REW:PORT:PORT_CFG */ 593 + #define REW_PORT_CFG(g) __REG(TARGET_REW, 0, 1, 0, g, 10, 128, 8, 0, 1, 4) 594 + 595 + #define REW_PORT_CFG_NO_REWRITE BIT(0) 596 + #define REW_PORT_CFG_NO_REWRITE_SET(x)\ 597 + FIELD_PREP(REW_PORT_CFG_NO_REWRITE, x) 598 + #define REW_PORT_CFG_NO_REWRITE_GET(x)\ 599 + FIELD_GET(REW_PORT_CFG_NO_REWRITE, x) 600 + 601 + /* SYS:SYSTEM:RESET_CFG */ 602 + #define SYS_RESET_CFG __REG(TARGET_SYS, 0, 1, 4128, 0, 1, 168, 0, 0, 1, 4) 603 + 604 + #define SYS_RESET_CFG_CORE_ENA BIT(0) 605 + #define SYS_RESET_CFG_CORE_ENA_SET(x)\ 606 + FIELD_PREP(SYS_RESET_CFG_CORE_ENA, x) 607 + #define SYS_RESET_CFG_CORE_ENA_GET(x)\ 608 + FIELD_GET(SYS_RESET_CFG_CORE_ENA, x) 609 + 610 + /* SYS:SYSTEM:PORT_MODE */ 611 + #define SYS_PORT_MODE(r) __REG(TARGET_SYS, 0, 1, 4128, 0, 1, 168, 44, r, 10, 4) 612 + 613 + #define SYS_PORT_MODE_INCL_INJ_HDR GENMASK(5, 4) 614 + #define SYS_PORT_MODE_INCL_INJ_HDR_SET(x)\ 615 + FIELD_PREP(SYS_PORT_MODE_INCL_INJ_HDR, x) 616 + #define SYS_PORT_MODE_INCL_INJ_HDR_GET(x)\ 617 + FIELD_GET(SYS_PORT_MODE_INCL_INJ_HDR, x) 618 + 619 + #define SYS_PORT_MODE_INCL_XTR_HDR GENMASK(3, 2) 620 + #define SYS_PORT_MODE_INCL_XTR_HDR_SET(x)\ 621 + FIELD_PREP(SYS_PORT_MODE_INCL_XTR_HDR, x) 622 + #define SYS_PORT_MODE_INCL_XTR_HDR_GET(x)\ 623 + FIELD_GET(SYS_PORT_MODE_INCL_XTR_HDR, x) 624 + 625 + /* SYS:SYSTEM:FRONT_PORT_MODE */ 626 + #define SYS_FRONT_PORT_MODE(r) __REG(TARGET_SYS, 0, 1, 4128, 0, 1, 168, 84, r, 8, 4) 627 + 628 + #define SYS_FRONT_PORT_MODE_HDX_MODE BIT(1) 629 + #define SYS_FRONT_PORT_MODE_HDX_MODE_SET(x)\ 630 + FIELD_PREP(SYS_FRONT_PORT_MODE_HDX_MODE, x) 631 + #define SYS_FRONT_PORT_MODE_HDX_MODE_GET(x)\ 632 + FIELD_GET(SYS_FRONT_PORT_MODE_HDX_MODE, x) 633 + 634 + /* SYS:SYSTEM:FRM_AGING */ 635 + #define SYS_FRM_AGING __REG(TARGET_SYS, 0, 1, 4128, 0, 1, 168, 116, 0, 1, 4) 636 + 637 + #define SYS_FRM_AGING_AGE_TX_ENA BIT(20) 638 + #define SYS_FRM_AGING_AGE_TX_ENA_SET(x)\ 639 + FIELD_PREP(SYS_FRM_AGING_AGE_TX_ENA, x) 640 + #define SYS_FRM_AGING_AGE_TX_ENA_GET(x)\ 641 + FIELD_GET(SYS_FRM_AGING_AGE_TX_ENA, x) 642 + 643 + /* SYS:SYSTEM:STAT_CFG */ 644 + #define SYS_STAT_CFG __REG(TARGET_SYS, 0, 1, 4128, 0, 1, 168, 120, 0, 1, 4) 645 + 646 + #define SYS_STAT_CFG_STAT_VIEW GENMASK(9, 0) 647 + #define SYS_STAT_CFG_STAT_VIEW_SET(x)\ 648 + FIELD_PREP(SYS_STAT_CFG_STAT_VIEW, x) 649 + #define SYS_STAT_CFG_STAT_VIEW_GET(x)\ 650 + FIELD_GET(SYS_STAT_CFG_STAT_VIEW, x) 651 + 652 + /* SYS:PAUSE_CFG:PAUSE_CFG */ 653 + #define SYS_PAUSE_CFG(r) __REG(TARGET_SYS, 0, 1, 4296, 0, 1, 112, 0, r, 9, 4) 654 + 655 + #define SYS_PAUSE_CFG_PAUSE_START GENMASK(18, 10) 656 + #define SYS_PAUSE_CFG_PAUSE_START_SET(x)\ 657 + FIELD_PREP(SYS_PAUSE_CFG_PAUSE_START, x) 658 + #define SYS_PAUSE_CFG_PAUSE_START_GET(x)\ 659 + FIELD_GET(SYS_PAUSE_CFG_PAUSE_START, x) 660 + 661 + #define SYS_PAUSE_CFG_PAUSE_STOP GENMASK(9, 1) 662 + #define SYS_PAUSE_CFG_PAUSE_STOP_SET(x)\ 663 + FIELD_PREP(SYS_PAUSE_CFG_PAUSE_STOP, x) 664 + #define SYS_PAUSE_CFG_PAUSE_STOP_GET(x)\ 665 + FIELD_GET(SYS_PAUSE_CFG_PAUSE_STOP, x) 666 + 667 + #define SYS_PAUSE_CFG_PAUSE_ENA BIT(0) 668 + #define SYS_PAUSE_CFG_PAUSE_ENA_SET(x)\ 669 + FIELD_PREP(SYS_PAUSE_CFG_PAUSE_ENA, x) 670 + #define SYS_PAUSE_CFG_PAUSE_ENA_GET(x)\ 671 + FIELD_GET(SYS_PAUSE_CFG_PAUSE_ENA, x) 672 + 673 + /* SYS:PAUSE_CFG:ATOP */ 674 + #define SYS_ATOP(r) __REG(TARGET_SYS, 0, 1, 4296, 0, 1, 112, 40, r, 9, 4) 675 + 676 + /* SYS:PAUSE_CFG:ATOP_TOT_CFG */ 677 + #define SYS_ATOP_TOT_CFG __REG(TARGET_SYS, 0, 1, 4296, 0, 1, 112, 76, 0, 1, 4) 678 + 679 + /* SYS:PAUSE_CFG:MAC_FC_CFG */ 680 + #define SYS_MAC_FC_CFG(r) __REG(TARGET_SYS, 0, 1, 4296, 0, 1, 112, 80, r, 8, 4) 681 + 682 + #define SYS_MAC_FC_CFG_FC_LINK_SPEED GENMASK(27, 26) 683 + #define SYS_MAC_FC_CFG_FC_LINK_SPEED_SET(x)\ 684 + FIELD_PREP(SYS_MAC_FC_CFG_FC_LINK_SPEED, x) 685 + #define SYS_MAC_FC_CFG_FC_LINK_SPEED_GET(x)\ 686 + FIELD_GET(SYS_MAC_FC_CFG_FC_LINK_SPEED, x) 687 + 688 + #define SYS_MAC_FC_CFG_FC_LATENCY_CFG GENMASK(25, 20) 689 + #define SYS_MAC_FC_CFG_FC_LATENCY_CFG_SET(x)\ 690 + FIELD_PREP(SYS_MAC_FC_CFG_FC_LATENCY_CFG, x) 691 + #define SYS_MAC_FC_CFG_FC_LATENCY_CFG_GET(x)\ 692 + FIELD_GET(SYS_MAC_FC_CFG_FC_LATENCY_CFG, x) 693 + 694 + #define SYS_MAC_FC_CFG_ZERO_PAUSE_ENA BIT(18) 695 + #define SYS_MAC_FC_CFG_ZERO_PAUSE_ENA_SET(x)\ 696 + FIELD_PREP(SYS_MAC_FC_CFG_ZERO_PAUSE_ENA, x) 697 + #define SYS_MAC_FC_CFG_ZERO_PAUSE_ENA_GET(x)\ 698 + FIELD_GET(SYS_MAC_FC_CFG_ZERO_PAUSE_ENA, x) 699 + 700 + #define SYS_MAC_FC_CFG_TX_FC_ENA BIT(17) 701 + #define SYS_MAC_FC_CFG_TX_FC_ENA_SET(x)\ 702 + FIELD_PREP(SYS_MAC_FC_CFG_TX_FC_ENA, x) 703 + #define SYS_MAC_FC_CFG_TX_FC_ENA_GET(x)\ 704 + FIELD_GET(SYS_MAC_FC_CFG_TX_FC_ENA, x) 705 + 706 + #define SYS_MAC_FC_CFG_RX_FC_ENA BIT(16) 707 + #define SYS_MAC_FC_CFG_RX_FC_ENA_SET(x)\ 708 + FIELD_PREP(SYS_MAC_FC_CFG_RX_FC_ENA, x) 709 + #define SYS_MAC_FC_CFG_RX_FC_ENA_GET(x)\ 710 + FIELD_GET(SYS_MAC_FC_CFG_RX_FC_ENA, x) 711 + 712 + #define SYS_MAC_FC_CFG_PAUSE_VAL_CFG GENMASK(15, 0) 713 + #define SYS_MAC_FC_CFG_PAUSE_VAL_CFG_SET(x)\ 714 + FIELD_PREP(SYS_MAC_FC_CFG_PAUSE_VAL_CFG, x) 715 + #define SYS_MAC_FC_CFG_PAUSE_VAL_CFG_GET(x)\ 716 + FIELD_GET(SYS_MAC_FC_CFG_PAUSE_VAL_CFG, x) 717 + 718 + /* SYS:STAT:CNT */ 719 + #define SYS_CNT(g) __REG(TARGET_SYS, 0, 1, 0, g, 896, 4, 0, 0, 1, 4) 720 + 721 + /* SYS:RAM_CTRL:RAM_INIT */ 722 + #define SYS_RAM_INIT __REG(TARGET_SYS, 0, 1, 4432, 0, 1, 4, 0, 0, 1, 4) 723 + 724 + #define SYS_RAM_INIT_RAM_INIT BIT(1) 725 + #define SYS_RAM_INIT_RAM_INIT_SET(x)\ 726 + FIELD_PREP(SYS_RAM_INIT_RAM_INIT, x) 727 + #define SYS_RAM_INIT_RAM_INIT_GET(x)\ 728 + FIELD_GET(SYS_RAM_INIT_RAM_INIT, x) 729 + 730 + #endif /* _LAN966X_REGS_H_ */