ocelot 74 arch/mips/generic/board-ocelot.c MIPS_MACHINE(ocelot) = { ocelot 50 drivers/net/ethernet/mscc/ocelot.c static inline u32 ocelot_mact_read_macaccess(struct ocelot *ocelot) ocelot 52 drivers/net/ethernet/mscc/ocelot.c return ocelot_read(ocelot, ANA_TABLES_MACACCESS); ocelot 55 drivers/net/ethernet/mscc/ocelot.c static inline int ocelot_mact_wait_for_completion(struct ocelot *ocelot) ocelot 60 drivers/net/ethernet/mscc/ocelot.c ocelot, val, ocelot 66 drivers/net/ethernet/mscc/ocelot.c static void ocelot_mact_select(struct ocelot *ocelot, ocelot 83 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, macl, ANA_TABLES_MACLDATA); ocelot 84 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, mach, ANA_TABLES_MACHDATA); ocelot 88 drivers/net/ethernet/mscc/ocelot.c static int ocelot_mact_learn(struct ocelot *ocelot, int port, ocelot 93 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_select(ocelot, mac, vid); ocelot 96 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_TABLES_MACACCESS_VALID | ocelot 102 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_wait_for_completion(ocelot); ocelot 105 drivers/net/ethernet/mscc/ocelot.c static int ocelot_mact_forget(struct ocelot *ocelot, ocelot 109 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_select(ocelot, mac, vid); ocelot 112 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ocelot 116 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_wait_for_completion(ocelot); ocelot 119 drivers/net/ethernet/mscc/ocelot.c static void ocelot_mact_init(struct ocelot *ocelot) ocelot 125 drivers/net/ethernet/mscc/ocelot.c ocelot_rmw(ocelot, 0, ocelot 132 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, MACACCESS_CMD_INIT, ANA_TABLES_MACACCESS); ocelot 135 drivers/net/ethernet/mscc/ocelot.c static void ocelot_vcap_enable(struct ocelot *ocelot, struct ocelot_port *port) ocelot 137 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, ANA_PORT_VCAP_S2_CFG_S2_ENA | ocelot 142 drivers/net/ethernet/mscc/ocelot.c static inline u32 ocelot_vlant_read_vlanaccess(struct ocelot *ocelot) ocelot 144 drivers/net/ethernet/mscc/ocelot.c return ocelot_read(ocelot, ANA_TABLES_VLANACCESS); ocelot 147 drivers/net/ethernet/mscc/ocelot.c static inline int ocelot_vlant_wait_for_completion(struct ocelot *ocelot) ocelot 152 drivers/net/ethernet/mscc/ocelot.c ocelot, ocelot 159 drivers/net/ethernet/mscc/ocelot.c static int ocelot_vlant_set_mask(struct ocelot *ocelot, u16 vid, u32 mask) ocelot 162 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_TABLES_VLANTIDX_V_INDEX(vid), ocelot 165 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_TABLES_VLANACCESS_VLAN_PORT_MASK(mask) | ocelot 169 drivers/net/ethernet/mscc/ocelot.c return ocelot_vlant_wait_for_completion(ocelot); ocelot 175 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 180 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read(ocelot, ANA_VLANMASK); ocelot 185 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, val, ANA_VLANMASK); ocelot 188 drivers/net/ethernet/mscc/ocelot.c static void ocelot_vlan_port_apply(struct ocelot *ocelot, ocelot 200 drivers/net/ethernet/mscc/ocelot.c ocelot_rmw_gix(ocelot, val, ocelot 215 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, val, ANA_PORT_DROP_CFG, port->chip_port); ocelot 228 drivers/net/ethernet/mscc/ocelot.c ocelot_rmw_gix(ocelot, val, ocelot 236 drivers/net/ethernet/mscc/ocelot.c ocelot_rmw_gix(ocelot, val, ocelot 246 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 250 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_learn(ocelot, PGID_CPU, dev->dev_addr, vid, ocelot 254 drivers/net/ethernet/mscc/ocelot.c ocelot->vlan_mask[vid] |= BIT(port->chip_port); ocelot 255 drivers/net/ethernet/mscc/ocelot.c ret = ocelot_vlant_set_mask(ocelot, vid, ocelot->vlan_mask[vid]); ocelot 266 drivers/net/ethernet/mscc/ocelot.c dev_err(ocelot->dev, ocelot 274 drivers/net/ethernet/mscc/ocelot.c ocelot_vlan_port_apply(ocelot, port); ocelot 282 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 293 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_forget(ocelot, dev->dev_addr, vid); ocelot 296 drivers/net/ethernet/mscc/ocelot.c ocelot->vlan_mask[vid] &= ~BIT(port->chip_port); ocelot 297 drivers/net/ethernet/mscc/ocelot.c ret = ocelot_vlant_set_mask(ocelot, vid, ocelot->vlan_mask[vid]); ocelot 309 drivers/net/ethernet/mscc/ocelot.c ocelot_vlan_port_apply(ocelot, port); ocelot 314 drivers/net/ethernet/mscc/ocelot.c static void ocelot_vlan_init(struct ocelot *ocelot) ocelot 319 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_TABLES_VLANACCESS_CMD_INIT, ocelot 321 drivers/net/ethernet/mscc/ocelot.c ocelot_vlant_wait_for_completion(ocelot); ocelot 325 drivers/net/ethernet/mscc/ocelot.c ocelot->vlan_mask[vid] = 0; ocelot 326 drivers/net/ethernet/mscc/ocelot.c ocelot_vlant_set_mask(ocelot, vid, ocelot->vlan_mask[vid]); ocelot 333 drivers/net/ethernet/mscc/ocelot.c ocelot->vlan_mask[0] = GENMASK(ocelot->num_phys_ports - 1, 0); ocelot 334 drivers/net/ethernet/mscc/ocelot.c ocelot_vlant_set_mask(ocelot, 0, ocelot->vlan_mask[0]); ocelot 337 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, ANA_PORT_VLAN_CFG_VLAN_VID(0) | ocelot 340 drivers/net/ethernet/mscc/ocelot.c ANA_PORT_VLAN_CFG, ocelot->num_phys_ports); ocelot 345 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, GENMASK(9, 0), ANA_VLANMASK); ocelot 347 drivers/net/ethernet/mscc/ocelot.c for (port = 0; port < ocelot->num_phys_ports; port++) { ocelot 348 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, 0, REW_PORT_VLAN_CFG, port); ocelot 349 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, 0, REW_TAG_CFG, port); ocelot 368 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 453 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, ANA_PFC_PFC_CFG_FC_LINK_SPEED(speed), ocelot 460 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, SYS_PAUSE_CFG_PAUSE_ENA | ocelot 465 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, QSYS_SWITCH_PORT_MODE_INGRESS_DROP_MODE | ocelot 471 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, SYS_MAC_FC_CFG_PAUSE_VAL_CFG(0xffff) | ocelot 477 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, ANA_POL_FLOWC, p); ocelot 480 drivers/net/ethernet/mscc/ocelot.c atop_wm = (ocelot->shared_queue_sz - 9 * VLAN_ETH_FRAME_LEN) / OCELOT_BUFFER_CELL_SZ; ocelot 481 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ocelot_wm_enc(9 * VLAN_ETH_FRAME_LEN), ocelot 483 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ocelot_wm_enc(atop_wm), SYS_ATOP_TOT_CFG); ocelot 489 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 495 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, ANA_PORT_PORT_CFG_LEARNAUTO | ocelot 532 drivers/net/ethernet/mscc/ocelot.c ocelot_rmw_rix(port->ocelot, 0, QSYS_SWITCH_PORT_MODE_PORT_ENA, ocelot 561 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 567 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read(ocelot, QS_INJ_STATUS); ocelot 572 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, QS_INJ_CTRL_GAP_SIZE(1) | ocelot 580 drivers/net/ethernet/mscc/ocelot.c if (ocelot->ptp && shinfo->tx_flags & SKBTX_HW_TSTAMP) { ocelot 589 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, (__force u32)cpu_to_be32(ifh[i]), ocelot 595 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ((u32 *)skb->data)[i], QS_INJ_WR, grp); ocelot 600 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, QS_INJ_WR, grp); ocelot 605 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, QS_INJ_CTRL_GAP_SIZE(1) | ocelot 611 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, QS_INJ_WR, grp); ocelot 617 drivers/net/ethernet/mscc/ocelot.c if (ocelot->ptp && shinfo->tx_flags & SKBTX_HW_TSTAMP && ocelot 641 drivers/net/ethernet/mscc/ocelot.c void ocelot_get_hwtimestamp(struct ocelot *ocelot, struct timespec64 *ts) ocelot 646 drivers/net/ethernet/mscc/ocelot.c spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); ocelot 649 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 653 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 654 drivers/net/ethernet/mscc/ocelot.c ts->tv_sec = ocelot_read_rix(ocelot, PTP_PIN_TOD_SEC_LSB, TOD_ACC_PIN); ocelot 657 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read(ocelot, SYS_PTP_TXSTAMP); ocelot 664 drivers/net/ethernet/mscc/ocelot.c spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); ocelot 672 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_forget(port->ocelot, addr, port->pvid); ocelot 679 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_learn(port->ocelot, PGID_CPU, addr, port->pvid, ocelot 686 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 694 drivers/net/ethernet/mscc/ocelot.c val = GENMASK(ocelot->num_phys_ports - 1, 0); ocelot 695 drivers/net/ethernet/mscc/ocelot.c for (i = ocelot->num_phys_ports + 1; i < PGID_CPU; i++) ocelot 696 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, ANA_PGID_PGID, i); ocelot 717 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 721 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_learn(ocelot, PGID_CPU, addr->sa_data, port->pvid, ocelot 724 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_forget(ocelot, dev->dev_addr, port->pvid); ocelot 734 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 737 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port->chip_port), ocelot 741 drivers/net/ethernet/mscc/ocelot.c stats->rx_bytes = ocelot_read(ocelot, SYS_COUNT_RX_OCTETS); ocelot 742 drivers/net/ethernet/mscc/ocelot.c stats->rx_packets = ocelot_read(ocelot, SYS_COUNT_RX_SHORTS) + ocelot 743 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_FRAGMENTS) + ocelot 744 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_JABBERS) + ocelot 745 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_LONGS) + ocelot 746 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_64) + ocelot 747 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_65_127) + ocelot 748 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_128_255) + ocelot 749 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_256_1023) + ocelot 750 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_1024_1526) + ocelot 751 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_RX_1527_MAX); ocelot 752 drivers/net/ethernet/mscc/ocelot.c stats->multicast = ocelot_read(ocelot, SYS_COUNT_RX_MULTICAST); ocelot 756 drivers/net/ethernet/mscc/ocelot.c stats->tx_bytes = ocelot_read(ocelot, SYS_COUNT_TX_OCTETS); ocelot 757 drivers/net/ethernet/mscc/ocelot.c stats->tx_packets = ocelot_read(ocelot, SYS_COUNT_TX_64) + ocelot 758 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_TX_65_127) + ocelot 759 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_TX_128_511) + ocelot 760 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_TX_512_1023) + ocelot 761 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_TX_1024_1526) + ocelot 762 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_TX_1527_MAX); ocelot 763 drivers/net/ethernet/mscc/ocelot.c stats->tx_dropped = ocelot_read(ocelot, SYS_COUNT_TX_DROPS) + ocelot 764 drivers/net/ethernet/mscc/ocelot.c ocelot_read(ocelot, SYS_COUNT_TX_AGING); ocelot 765 drivers/net/ethernet/mscc/ocelot.c stats->collisions = ocelot_read(ocelot, SYS_COUNT_TX_COLLISION); ocelot 774 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 790 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_learn(ocelot, port->chip_port, addr, vid, ocelot 799 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 801 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_forget(ocelot, addr, vid); ocelot 856 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 861 drivers/net/ethernet/mscc/ocelot.c ocelot_field_write(ocelot, ANA_TABLES_MACTINDX_M_INDEX, row); ocelot 862 drivers/net/ethernet/mscc/ocelot.c ocelot_field_write(ocelot, ANA_TABLES_MACTINDX_BUCKET, col); ocelot 865 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ocelot 869 drivers/net/ethernet/mscc/ocelot.c if (ocelot_mact_wait_for_completion(ocelot)) ocelot 873 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read(ocelot, ANA_TABLES_MACACCESS); ocelot 885 drivers/net/ethernet/mscc/ocelot.c macl = ocelot_read(ocelot, ANA_TABLES_MACLDATA); ocelot 886 drivers/net/ethernet/mscc/ocelot.c mach = ocelot_read(ocelot, ANA_TABLES_MACHDATA); ocelot 976 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 978 drivers/net/ethernet/mscc/ocelot.c ppid->id_len = sizeof(ocelot->base_mac); ocelot 979 drivers/net/ethernet/mscc/ocelot.c memcpy(&ppid->id, &ocelot->base_mac, ppid->id_len); ocelot 986 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 988 drivers/net/ethernet/mscc/ocelot.c return copy_to_user(ifr->ifr_data, &ocelot->hwtstamp_config, ocelot 989 drivers/net/ethernet/mscc/ocelot.c sizeof(ocelot->hwtstamp_config)) ? -EFAULT : 0; ocelot 994 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1022 drivers/net/ethernet/mscc/ocelot.c mutex_lock(&ocelot->ptp_lock); ocelot 1045 drivers/net/ethernet/mscc/ocelot.c mutex_unlock(&ocelot->ptp_lock); ocelot 1050 drivers/net/ethernet/mscc/ocelot.c memcpy(&ocelot->hwtstamp_config, &cfg, sizeof(cfg)); ocelot 1051 drivers/net/ethernet/mscc/ocelot.c mutex_unlock(&ocelot->ptp_lock); ocelot 1059 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1062 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->ptp) ocelot 1097 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1103 drivers/net/ethernet/mscc/ocelot.c for (i = 0; i < ocelot->num_stats; i++) ocelot 1104 drivers/net/ethernet/mscc/ocelot.c memcpy(data + i * ETH_GSTRING_LEN, ocelot->stats_layout[i].name, ocelot 1108 drivers/net/ethernet/mscc/ocelot.c static void ocelot_update_stats(struct ocelot *ocelot) ocelot 1112 drivers/net/ethernet/mscc/ocelot.c mutex_lock(&ocelot->stats_lock); ocelot 1114 drivers/net/ethernet/mscc/ocelot.c for (i = 0; i < ocelot->num_phys_ports; i++) { ocelot 1116 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(i), SYS_STAT_CFG); ocelot 1118 drivers/net/ethernet/mscc/ocelot.c for (j = 0; j < ocelot->num_stats; j++) { ocelot 1120 drivers/net/ethernet/mscc/ocelot.c unsigned int idx = i * ocelot->num_stats + j; ocelot 1122 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, SYS_COUNT_RX_OCTETS, ocelot 1123 drivers/net/ethernet/mscc/ocelot.c ocelot->stats_layout[j].offset); ocelot 1125 drivers/net/ethernet/mscc/ocelot.c if (val < (ocelot->stats[idx] & U32_MAX)) ocelot 1126 drivers/net/ethernet/mscc/ocelot.c ocelot->stats[idx] += (u64)1 << 32; ocelot 1128 drivers/net/ethernet/mscc/ocelot.c ocelot->stats[idx] = (ocelot->stats[idx] & ocelot 1133 drivers/net/ethernet/mscc/ocelot.c mutex_unlock(&ocelot->stats_lock); ocelot 1139 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = container_of(del_work, struct ocelot, ocelot 1142 drivers/net/ethernet/mscc/ocelot.c ocelot_update_stats(ocelot); ocelot 1144 drivers/net/ethernet/mscc/ocelot.c queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work, ocelot 1152 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1156 drivers/net/ethernet/mscc/ocelot.c ocelot_update_stats(ocelot); ocelot 1159 drivers/net/ethernet/mscc/ocelot.c for (i = 0; i < ocelot->num_stats; i++) ocelot 1160 drivers/net/ethernet/mscc/ocelot.c *data++ = ocelot->stats[port->chip_port * ocelot->num_stats + i]; ocelot 1166 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1170 drivers/net/ethernet/mscc/ocelot.c return ocelot->num_stats; ocelot 1177 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1179 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->ptp) ocelot 1182 drivers/net/ethernet/mscc/ocelot.c info->phc_index = ocelot->ptp_clock ? ocelot 1183 drivers/net/ethernet/mscc/ocelot.c ptp_clock_index(ocelot->ptp_clock) : -1; ocelot 1210 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1217 drivers/net/ethernet/mscc/ocelot.c if (!(BIT(ocelot_port->chip_port) & ocelot->bridge_mask)) ocelot 1220 drivers/net/ethernet/mscc/ocelot.c port_cfg = ocelot_read_gix(ocelot, ANA_PORT_PORT_CFG, ocelot 1225 drivers/net/ethernet/mscc/ocelot.c ocelot->bridge_fwd_mask |= BIT(ocelot_port->chip_port); ocelot 1233 drivers/net/ethernet/mscc/ocelot.c ocelot->bridge_fwd_mask &= ~BIT(ocelot_port->chip_port); ocelot 1237 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, port_cfg, ANA_PORT_PORT_CFG, ocelot 1243 drivers/net/ethernet/mscc/ocelot.c for (port = 0; port < ocelot->num_phys_ports; port++) { ocelot 1244 drivers/net/ethernet/mscc/ocelot.c if (ocelot->bridge_fwd_mask & BIT(port)) { ocelot 1245 drivers/net/ethernet/mscc/ocelot.c unsigned long mask = ocelot->bridge_fwd_mask & ~BIT(port); ocelot 1247 drivers/net/ethernet/mscc/ocelot.c for (i = 0; i < ocelot->num_phys_ports; i++) { ocelot 1248 drivers/net/ethernet/mscc/ocelot.c unsigned long bond_mask = ocelot->lags[i]; ocelot 1259 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ocelot 1260 drivers/net/ethernet/mscc/ocelot.c BIT(ocelot->num_phys_ports) | mask, ocelot 1266 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ocelot 1267 drivers/net/ethernet/mscc/ocelot.c BIT(ocelot->num_phys_ports), ocelot 1278 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1282 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_AUTOAGE_AGE_PERIOD(ageing_time / 2), ocelot 1288 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1289 drivers/net/ethernet/mscc/ocelot.c u32 val = ocelot_read_gix(ocelot, ANA_PORT_CPU_FWD_CFG, ocelot 1301 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, val, ANA_PORT_CPU_FWD_CFG, port->chip_port); ocelot 1321 drivers/net/ethernet/mscc/ocelot.c ocelot_vlan_port_apply(ocelot_port->ocelot, ocelot_port); ocelot 1368 drivers/net/ethernet/mscc/ocelot.c static struct ocelot_multicast *ocelot_multicast_get(struct ocelot *ocelot, ocelot 1374 drivers/net/ethernet/mscc/ocelot.c list_for_each_entry(mc, &ocelot->multicast, list) { ocelot 1387 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1396 drivers/net/ethernet/mscc/ocelot.c mc = ocelot_multicast_get(ocelot, mdb->addr, vid); ocelot 1398 drivers/net/ethernet/mscc/ocelot.c mc = devm_kzalloc(ocelot->dev, sizeof(*mc), GFP_KERNEL); ocelot 1405 drivers/net/ethernet/mscc/ocelot.c list_add_tail(&mc->list, &ocelot->multicast); ocelot 1415 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_forget(ocelot, addr, vid); ocelot 1422 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_learn(ocelot, 0, addr, vid, ENTRYTYPE_MACv4); ocelot 1429 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = port->ocelot; ocelot 1437 drivers/net/ethernet/mscc/ocelot.c mc = ocelot_multicast_get(ocelot, mdb->addr, vid); ocelot 1445 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_forget(ocelot, addr, vid); ocelot 1450 drivers/net/ethernet/mscc/ocelot.c devm_kfree(ocelot->dev, mc); ocelot 1457 drivers/net/ethernet/mscc/ocelot.c return ocelot_mact_learn(ocelot, 0, addr, vid, ENTRYTYPE_MACv4); ocelot 1507 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1509 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->bridge_mask) { ocelot 1510 drivers/net/ethernet/mscc/ocelot.c ocelot->hw_bridge_dev = bridge; ocelot 1512 drivers/net/ethernet/mscc/ocelot.c if (ocelot->hw_bridge_dev != bridge) ocelot 1518 drivers/net/ethernet/mscc/ocelot.c ocelot->bridge_mask |= BIT(ocelot_port->chip_port); ocelot 1526 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1528 drivers/net/ethernet/mscc/ocelot.c ocelot->bridge_mask &= ~BIT(ocelot_port->chip_port); ocelot 1530 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->bridge_mask) ocelot 1531 drivers/net/ethernet/mscc/ocelot.c ocelot->hw_bridge_dev = NULL; ocelot 1539 drivers/net/ethernet/mscc/ocelot.c static void ocelot_set_aggr_pgids(struct ocelot *ocelot) ocelot 1544 drivers/net/ethernet/mscc/ocelot.c for (port = 0; port < ocelot->num_phys_ports; port++) ocelot 1545 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, BIT(port), ANA_PGID_PGID, port); ocelot 1548 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, GENMASK(ocelot->num_phys_ports - 1, 0), ocelot 1552 drivers/net/ethernet/mscc/ocelot.c for (lag = 0; lag < ocelot->num_phys_ports; lag++) { ocelot 1557 drivers/net/ethernet/mscc/ocelot.c bond_mask = ocelot->lags[lag]; ocelot 1561 drivers/net/ethernet/mscc/ocelot.c for_each_set_bit(port, &bond_mask, ocelot->num_phys_ports) { ocelot 1563 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, bond_mask, ocelot 1572 drivers/net/ethernet/mscc/ocelot.c ac = ocelot_read_rix(ocelot, ANA_PGID_PGID, i); ocelot 1575 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ac, ANA_PGID_PGID, i); ocelot 1580 drivers/net/ethernet/mscc/ocelot.c static void ocelot_setup_lag(struct ocelot *ocelot, int lag) ocelot 1582 drivers/net/ethernet/mscc/ocelot.c unsigned long bond_mask = ocelot->lags[lag]; ocelot 1585 drivers/net/ethernet/mscc/ocelot.c for_each_set_bit(p, &bond_mask, ocelot->num_phys_ports) { ocelot 1586 drivers/net/ethernet/mscc/ocelot.c u32 port_cfg = ocelot_read_gix(ocelot, ANA_PORT_PORT_CFG, p); ocelot 1591 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, port_cfg | ocelot 1600 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1621 drivers/net/ethernet/mscc/ocelot.c ocelot->lags[p] = bond_mask; ocelot 1625 drivers/net/ethernet/mscc/ocelot.c ocelot->lags[lp] = 0; ocelot 1629 drivers/net/ethernet/mscc/ocelot.c ocelot->lags[lp] |= BIT(p); ocelot 1632 drivers/net/ethernet/mscc/ocelot.c ocelot_setup_lag(ocelot, lag); ocelot 1633 drivers/net/ethernet/mscc/ocelot.c ocelot_set_aggr_pgids(ocelot); ocelot 1641 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = ocelot_port->ocelot; ocelot 1647 drivers/net/ethernet/mscc/ocelot.c for (i = 0; i < ocelot->num_phys_ports; i++) ocelot 1648 drivers/net/ethernet/mscc/ocelot.c ocelot->lags[i] &= ~BIT(ocelot_port->chip_port); ocelot 1653 drivers/net/ethernet/mscc/ocelot.c if (ocelot->lags[p]) { ocelot 1654 drivers/net/ethernet/mscc/ocelot.c int n = __ffs(ocelot->lags[p]); ocelot 1656 drivers/net/ethernet/mscc/ocelot.c ocelot->lags[n] = ocelot->lags[p]; ocelot 1657 drivers/net/ethernet/mscc/ocelot.c ocelot->lags[p] = 0; ocelot 1659 drivers/net/ethernet/mscc/ocelot.c ocelot_setup_lag(ocelot, n); ocelot 1662 drivers/net/ethernet/mscc/ocelot.c port_cfg = ocelot_read_gix(ocelot, ANA_PORT_PORT_CFG, p); ocelot 1664 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, port_cfg | ANA_PORT_PORT_CFG_PORTID_VAL(p), ocelot 1667 drivers/net/ethernet/mscc/ocelot.c ocelot_set_aggr_pgids(ocelot); ocelot 1693 drivers/net/ethernet/mscc/ocelot.c ocelot_vlan_port_apply(ocelot_port->ocelot, ocelot 1816 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = container_of(ptp, struct ocelot, ptp_info); ocelot 1822 drivers/net/ethernet/mscc/ocelot.c spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); ocelot 1824 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1827 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1829 drivers/net/ethernet/mscc/ocelot.c s = ocelot_read_rix(ocelot, PTP_PIN_TOD_SEC_MSB, TOD_ACC_PIN) & 0xffff; ocelot 1831 drivers/net/ethernet/mscc/ocelot.c s += ocelot_read_rix(ocelot, PTP_PIN_TOD_SEC_LSB, TOD_ACC_PIN); ocelot 1832 drivers/net/ethernet/mscc/ocelot.c ns = ocelot_read_rix(ocelot, PTP_PIN_TOD_NSEC, TOD_ACC_PIN); ocelot 1834 drivers/net/ethernet/mscc/ocelot.c spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); ocelot 1851 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = container_of(ptp, struct ocelot, ptp_info); ocelot 1855 drivers/net/ethernet/mscc/ocelot.c spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); ocelot 1857 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1861 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1863 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, lower_32_bits(ts->tv_sec), PTP_PIN_TOD_SEC_LSB, ocelot 1865 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, upper_32_bits(ts->tv_sec), PTP_PIN_TOD_SEC_MSB, ocelot 1867 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ts->tv_nsec, PTP_PIN_TOD_NSEC, TOD_ACC_PIN); ocelot 1869 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1873 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1875 drivers/net/ethernet/mscc/ocelot.c spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); ocelot 1882 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = container_of(ptp, struct ocelot, ptp_info); ocelot 1886 drivers/net/ethernet/mscc/ocelot.c spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); ocelot 1888 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1892 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1894 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, PTP_PIN_TOD_SEC_LSB, TOD_ACC_PIN); ocelot 1895 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, PTP_PIN_TOD_SEC_MSB, TOD_ACC_PIN); ocelot 1896 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, delta, PTP_PIN_TOD_NSEC, TOD_ACC_PIN); ocelot 1898 drivers/net/ethernet/mscc/ocelot.c val = ocelot_read_rix(ocelot, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1902 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, PTP_PIN_CFG, TOD_ACC_PIN); ocelot 1904 drivers/net/ethernet/mscc/ocelot.c spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); ocelot 1922 drivers/net/ethernet/mscc/ocelot.c struct ocelot *ocelot = container_of(ptp, struct ocelot, ptp_info); ocelot 1927 drivers/net/ethernet/mscc/ocelot.c spin_lock_irqsave(&ocelot->ptp_clock_lock, flags); ocelot 1951 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, unit | adj, PTP_CLK_CFG_ADJ_FREQ); ocelot 1952 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, PTP_CFG_CLK_ADJ_CFG_ENA | direction, ocelot 1955 drivers/net/ethernet/mscc/ocelot.c spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); ocelot 1959 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, 0, PTP_CLK_CFG_ADJ_CFG); ocelot 1961 drivers/net/ethernet/mscc/ocelot.c spin_unlock_irqrestore(&ocelot->ptp_clock_lock, flags); ocelot 1980 drivers/net/ethernet/mscc/ocelot.c static int ocelot_init_timestamp(struct ocelot *ocelot) ocelot 1984 drivers/net/ethernet/mscc/ocelot.c ocelot->ptp_info = ocelot_ptp_clock_info; ocelot 1985 drivers/net/ethernet/mscc/ocelot.c ptp_clock = ptp_clock_register(&ocelot->ptp_info, ocelot->dev); ocelot 1992 drivers/net/ethernet/mscc/ocelot.c ocelot->ptp_clock = ptp_clock; ocelot 1994 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, SYS_PTP_CFG_PTP_STAMP_WID(30), SYS_PTP_CFG); ocelot 1995 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, 0xffffffff, ANA_TABLES_PTP_ID_LOW); ocelot 1996 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, 0xffffffff, ANA_TABLES_PTP_ID_HIGH); ocelot 1998 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, PTP_CFG_MISC_PTP_EN, PTP_CFG_MISC); ocelot 2003 drivers/net/ethernet/mscc/ocelot.c ocelot->hwtstamp_config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; ocelot 2008 drivers/net/ethernet/mscc/ocelot.c int ocelot_probe_port(struct ocelot *ocelot, u8 port, ocelot 2019 drivers/net/ethernet/mscc/ocelot.c SET_NETDEV_DEV(dev, ocelot->dev); ocelot 2022 drivers/net/ethernet/mscc/ocelot.c ocelot_port->ocelot = ocelot; ocelot 2026 drivers/net/ethernet/mscc/ocelot.c ocelot->ports[port] = ocelot_port; ocelot 2035 drivers/net/ethernet/mscc/ocelot.c memcpy(dev->dev_addr, ocelot->base_mac, ETH_ALEN); ocelot 2037 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_learn(ocelot, PGID_CPU, dev->dev_addr, ocelot_port->pvid, ocelot 2044 drivers/net/ethernet/mscc/ocelot.c dev_err(ocelot->dev, "register_netdev failed\n"); ocelot 2049 drivers/net/ethernet/mscc/ocelot.c ocelot_vlan_port_apply(ocelot, ocelot_port); ocelot 2052 drivers/net/ethernet/mscc/ocelot.c ocelot_vcap_enable(ocelot, ocelot_port); ocelot 2062 drivers/net/ethernet/mscc/ocelot.c int ocelot_init(struct ocelot *ocelot) ocelot 2065 drivers/net/ethernet/mscc/ocelot.c int i, ret, cpu = ocelot->num_phys_ports; ocelot 2068 drivers/net/ethernet/mscc/ocelot.c ocelot->lags = devm_kcalloc(ocelot->dev, ocelot->num_phys_ports, ocelot 2070 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->lags) ocelot 2073 drivers/net/ethernet/mscc/ocelot.c ocelot->stats = devm_kcalloc(ocelot->dev, ocelot 2074 drivers/net/ethernet/mscc/ocelot.c ocelot->num_phys_ports * ocelot->num_stats, ocelot 2076 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->stats) ocelot 2079 drivers/net/ethernet/mscc/ocelot.c mutex_init(&ocelot->stats_lock); ocelot 2080 drivers/net/ethernet/mscc/ocelot.c mutex_init(&ocelot->ptp_lock); ocelot 2081 drivers/net/ethernet/mscc/ocelot.c spin_lock_init(&ocelot->ptp_clock_lock); ocelot 2083 drivers/net/ethernet/mscc/ocelot.c dev_name(ocelot->dev)); ocelot 2084 drivers/net/ethernet/mscc/ocelot.c ocelot->stats_queue = create_singlethread_workqueue(queue_name); ocelot 2085 drivers/net/ethernet/mscc/ocelot.c if (!ocelot->stats_queue) ocelot 2088 drivers/net/ethernet/mscc/ocelot.c ocelot_mact_init(ocelot); ocelot 2089 drivers/net/ethernet/mscc/ocelot.c ocelot_vlan_init(ocelot); ocelot 2090 drivers/net/ethernet/mscc/ocelot.c ocelot_ace_init(ocelot); ocelot 2092 drivers/net/ethernet/mscc/ocelot.c for (port = 0; port < ocelot->num_phys_ports; port++) { ocelot 2094 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port) | ocelot 2100 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ETH_P_8021AD, SYS_VLAN_ETYPE_CFG); ocelot 2103 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_AGGR_CFG_AC_SMAC_ENA | ocelot 2111 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ocelot 2116 drivers/net/ethernet/mscc/ocelot.c regmap_field_write(ocelot->regfields[ANA_ADVLEARN_VLAN_CHK], 1); ocelot 2119 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, SYS_FRM_AGING_AGE_TX_ENA | ocelot 2123 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ANA_FLOODING_FLD_MULTICAST(PGID_MC) | ocelot 2127 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_FLOODING_IPMC_FLD_MC6_DATA(PGID_MCIPV6) | ocelot 2133 drivers/net/ethernet/mscc/ocelot.c for (port = 0; port < ocelot->num_phys_ports; port++) { ocelot 2135 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, BIT(port), ANA_PGID_PGID, port); ocelot 2137 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, ocelot 2142 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, ANA_PGID_PGID, PGID_SRC + port); ocelot 2146 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, ANA_PGID_PGID, cpu); ocelot 2147 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, BIT(cpu), ANA_PGID_PGID, PGID_CPU); ocelot 2148 drivers/net/ethernet/mscc/ocelot.c ocelot_write_gix(ocelot, ANA_PORT_PORT_CFG_RECV_ENA | ocelot 2153 drivers/net/ethernet/mscc/ocelot.c for (i = ocelot->num_phys_ports + 1; i < PGID_CPU; i++) { ocelot 2154 drivers/net/ethernet/mscc/ocelot.c u32 val = ANA_PGID_PGID_PGID(GENMASK(ocelot->num_phys_ports - 1, 0)); ocelot 2156 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, val, ANA_PGID_PGID, i); ocelot 2158 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ocelot 2159 drivers/net/ethernet/mscc/ocelot.c ANA_PGID_PGID_PGID(GENMASK(ocelot->num_phys_ports, 0)), ocelot 2161 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, ANA_PGID_PGID, PGID_MCIPV4); ocelot 2162 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, 0, ANA_PGID_PGID, PGID_MCIPV6); ocelot 2165 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, QSYS_SWITCH_PORT_MODE_INGRESS_DROP_MODE | ocelot 2169 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, SYS_PORT_MODE_INCL_XTR_HDR(1) | ocelot 2174 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, QS_INJ_GRP_CFG_BYTE_SWAP | ocelot 2176 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, QS_XTR_GRP_CFG_BYTE_SWAP | ocelot 2178 drivers/net/ethernet/mscc/ocelot.c ocelot_write(ocelot, ANA_CPUQ_CFG_CPUQ_MIRROR(2) | ocelot 2188 drivers/net/ethernet/mscc/ocelot.c ocelot_write_rix(ocelot, ANA_CPUQ_8021_CFG_CPUQ_GARP_VAL(6) | ocelot 2192 drivers/net/ethernet/mscc/ocelot.c INIT_DELAYED_WORK(&ocelot->stats_work, ocelot_check_stats_work); ocelot 2193 drivers/net/ethernet/mscc/ocelot.c queue_delayed_work(ocelot->stats_queue, &ocelot->stats_work, ocelot 2196 drivers/net/ethernet/mscc/ocelot.c if (ocelot->ptp) { ocelot 2197 drivers/net/ethernet/mscc/ocelot.c ret = ocelot_init_timestamp(ocelot); ocelot 2199 drivers/net/ethernet/mscc/ocelot.c dev_err(ocelot->dev, ocelot 2209 drivers/net/ethernet/mscc/ocelot.c void ocelot_deinit(struct ocelot *ocelot) ocelot 2216 drivers/net/ethernet/mscc/ocelot.c cancel_delayed_work(&ocelot->stats_work); ocelot 2217 drivers/net/ethernet/mscc/ocelot.c destroy_workqueue(ocelot->stats_queue); ocelot 2218 drivers/net/ethernet/mscc/ocelot.c mutex_destroy(&ocelot->stats_lock); ocelot 2220 drivers/net/ethernet/mscc/ocelot.c if (ocelot->ptp_clock) ocelot 2221 drivers/net/ethernet/mscc/ocelot.c ptp_clock_unregister(ocelot->ptp_clock); ocelot 2223 drivers/net/ethernet/mscc/ocelot.c for (i = 0; i < ocelot->num_phys_ports; i++) { ocelot 2224 drivers/net/ethernet/mscc/ocelot.c port = ocelot->ports[i]; ocelot 483 drivers/net/ethernet/mscc/ocelot.h struct ocelot *ocelot; ocelot 514 drivers/net/ethernet/mscc/ocelot.h u32 __ocelot_read_ix(struct ocelot *ocelot, u32 reg, u32 offset); ocelot 515 drivers/net/ethernet/mscc/ocelot.h #define ocelot_read_ix(ocelot, reg, gi, ri) __ocelot_read_ix(ocelot, reg, reg##_GSZ * (gi) + reg##_RSZ * (ri)) ocelot 516 drivers/net/ethernet/mscc/ocelot.h #define ocelot_read_gix(ocelot, reg, gi) __ocelot_read_ix(ocelot, reg, reg##_GSZ * (gi)) ocelot 517 drivers/net/ethernet/mscc/ocelot.h #define ocelot_read_rix(ocelot, reg, ri) __ocelot_read_ix(ocelot, reg, reg##_RSZ * (ri)) ocelot 518 drivers/net/ethernet/mscc/ocelot.h #define ocelot_read(ocelot, reg) __ocelot_read_ix(ocelot, reg, 0) ocelot 520 drivers/net/ethernet/mscc/ocelot.h void __ocelot_write_ix(struct ocelot *ocelot, u32 val, u32 reg, u32 offset); ocelot 521 drivers/net/ethernet/mscc/ocelot.h #define ocelot_write_ix(ocelot, val, reg, gi, ri) __ocelot_write_ix(ocelot, val, reg, reg##_GSZ * (gi) + reg##_RSZ * (ri)) ocelot 522 drivers/net/ethernet/mscc/ocelot.h #define ocelot_write_gix(ocelot, val, reg, gi) __ocelot_write_ix(ocelot, val, reg, reg##_GSZ * (gi)) ocelot 523 drivers/net/ethernet/mscc/ocelot.h #define ocelot_write_rix(ocelot, val, reg, ri) __ocelot_write_ix(ocelot, val, reg, reg##_RSZ * (ri)) ocelot 524 drivers/net/ethernet/mscc/ocelot.h #define ocelot_write(ocelot, val, reg) __ocelot_write_ix(ocelot, val, reg, 0) ocelot 526 drivers/net/ethernet/mscc/ocelot.h void __ocelot_rmw_ix(struct ocelot *ocelot, u32 val, u32 mask, u32 reg, ocelot 528 drivers/net/ethernet/mscc/ocelot.h #define ocelot_rmw_ix(ocelot, val, m, reg, gi, ri) __ocelot_rmw_ix(ocelot, val, m, reg, reg##_GSZ * (gi) + reg##_RSZ * (ri)) ocelot 529 drivers/net/ethernet/mscc/ocelot.h #define ocelot_rmw_gix(ocelot, val, m, reg, gi) __ocelot_rmw_ix(ocelot, val, m, reg, reg##_GSZ * (gi)) ocelot 530 drivers/net/ethernet/mscc/ocelot.h #define ocelot_rmw_rix(ocelot, val, m, reg, ri) __ocelot_rmw_ix(ocelot, val, m, reg, reg##_RSZ * (ri)) ocelot 531 drivers/net/ethernet/mscc/ocelot.h #define ocelot_rmw(ocelot, val, m, reg) __ocelot_rmw_ix(ocelot, val, m, reg, 0) ocelot 536 drivers/net/ethernet/mscc/ocelot.h int ocelot_regfields_init(struct ocelot *ocelot, ocelot 538 drivers/net/ethernet/mscc/ocelot.h struct regmap *ocelot_io_platform_init(struct ocelot *ocelot, ocelot 542 drivers/net/ethernet/mscc/ocelot.h #define ocelot_field_write(ocelot, reg, val) regmap_field_write((ocelot)->regfields[(reg)], (val)) ocelot 543 drivers/net/ethernet/mscc/ocelot.h #define ocelot_field_read(ocelot, reg, val) regmap_field_read((ocelot)->regfields[(reg)], (val)) ocelot 545 drivers/net/ethernet/mscc/ocelot.h int ocelot_init(struct ocelot *ocelot); ocelot 546 drivers/net/ethernet/mscc/ocelot.h void ocelot_deinit(struct ocelot *ocelot); ocelot 547 drivers/net/ethernet/mscc/ocelot.h int ocelot_chip_init(struct ocelot *ocelot); ocelot 548 drivers/net/ethernet/mscc/ocelot.h int ocelot_probe_port(struct ocelot *ocelot, u8 port, ocelot 557 drivers/net/ethernet/mscc/ocelot.h void ocelot_get_hwtimestamp(struct ocelot *ocelot, struct timespec64 *ts); ocelot 98 drivers/net/ethernet/mscc/ocelot_ace.c static u32 vcap_s2_read_update_ctrl(struct ocelot *oc) ocelot 103 drivers/net/ethernet/mscc/ocelot_ace.c static void vcap_cmd(struct ocelot *oc, u16 ix, int cmd, int sel) ocelot 128 drivers/net/ethernet/mscc/ocelot_ace.c static void vcap_row_cmd(struct ocelot *oc, u32 row, int cmd, int sel) ocelot 133 drivers/net/ethernet/mscc/ocelot_ace.c static void vcap_entry2cache(struct ocelot *oc, struct vcap_data *data) ocelot 144 drivers/net/ethernet/mscc/ocelot_ace.c static void vcap_cache2entry(struct ocelot *oc, struct vcap_data *data) ocelot 156 drivers/net/ethernet/mscc/ocelot_ace.c static void vcap_action2cache(struct ocelot *oc, struct vcap_data *data) ocelot 174 drivers/net/ethernet/mscc/ocelot_ace.c static void vcap_cache2action(struct ocelot *oc, struct vcap_data *data) ocelot 329 drivers/net/ethernet/mscc/ocelot_ace.c static void is2_entry_set(struct ocelot *ocelot, int ix, ocelot 342 drivers/net/ethernet/mscc/ocelot_ace.c vcap_row_cmd(ocelot, row, VCAP_CMD_READ, VCAP_SEL_ALL); ocelot 343 drivers/net/ethernet/mscc/ocelot_ace.c vcap_cache2entry(ocelot, &data); ocelot 344 drivers/net/ethernet/mscc/ocelot_ace.c vcap_cache2action(ocelot, &data); ocelot 572 drivers/net/ethernet/mscc/ocelot_ace.c vcap_entry2cache(ocelot, &data); ocelot 573 drivers/net/ethernet/mscc/ocelot_ace.c vcap_action2cache(ocelot, &data); ocelot 574 drivers/net/ethernet/mscc/ocelot_ace.c vcap_row_cmd(ocelot, row, VCAP_CMD_WRITE, VCAP_SEL_ALL); ocelot 579 drivers/net/ethernet/mscc/ocelot_ace.c struct ocelot *op = rule->port->ocelot; ocelot 658 drivers/net/ethernet/mscc/ocelot_ace.c is2_entry_set(rule->port->ocelot, i, ace); ocelot 662 drivers/net/ethernet/mscc/ocelot_ace.c is2_entry_set(rule->port->ocelot, index, rule); ocelot 700 drivers/net/ethernet/mscc/ocelot_ace.c is2_entry_set(rule->port->ocelot, i, ace); ocelot 704 drivers/net/ethernet/mscc/ocelot_ace.c is2_entry_set(rule->port->ocelot, acl_block->count, &del_ace); ocelot 720 drivers/net/ethernet/mscc/ocelot_ace.c is2_entry_set(rule->port->ocelot, index, tmp); ocelot 725 drivers/net/ethernet/mscc/ocelot_ace.c static struct ocelot_acl_block *ocelot_acl_block_create(struct ocelot *ocelot) ocelot 735 drivers/net/ethernet/mscc/ocelot_ace.c block->ocelot = ocelot; ocelot 745 drivers/net/ethernet/mscc/ocelot_ace.c int ocelot_ace_init(struct ocelot *ocelot) ocelot 750 drivers/net/ethernet/mscc/ocelot_ace.c vcap_entry2cache(ocelot, &data); ocelot 751 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write(ocelot, vcap_is2.entry_count, S2_CORE_MV_CFG); ocelot 752 drivers/net/ethernet/mscc/ocelot_ace.c vcap_cmd(ocelot, 0, VCAP_CMD_INITIALIZE, VCAP_SEL_ENTRY); ocelot 754 drivers/net/ethernet/mscc/ocelot_ace.c vcap_action2cache(ocelot, &data); ocelot 755 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write(ocelot, vcap_is2.action_count, S2_CORE_MV_CFG); ocelot 756 drivers/net/ethernet/mscc/ocelot_ace.c vcap_cmd(ocelot, 0, VCAP_CMD_INITIALIZE, ocelot 763 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write_gix(ocelot, 0x299, ANA_POL_MODE_CFG, ocelot 765 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write_gix(ocelot, 0x1, ANA_POL_PIR_CFG, ocelot 767 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write_gix(ocelot, 0x3fffff, ANA_POL_PIR_STATE, ocelot 769 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write_gix(ocelot, 0x0, ANA_POL_CIR_CFG, ocelot 771 drivers/net/ethernet/mscc/ocelot_ace.c ocelot_write_gix(ocelot, 0x3fffff, ANA_POL_CIR_STATE, ocelot 774 drivers/net/ethernet/mscc/ocelot_ace.c acl_block = ocelot_acl_block_create(ocelot); ocelot 216 drivers/net/ethernet/mscc/ocelot_ace.h struct ocelot *ocelot; ocelot 224 drivers/net/ethernet/mscc/ocelot_ace.h int ocelot_ace_init(struct ocelot *ocelot); ocelot 44 drivers/net/ethernet/mscc/ocelot_board.c static int ocelot_rx_frame_word(struct ocelot *ocelot, u8 grp, bool ifh, ocelot 50 drivers/net/ethernet/mscc/ocelot_board.c val = ocelot_read_rix(ocelot, QS_XTR_RD, grp); ocelot 56 drivers/net/ethernet/mscc/ocelot_board.c val = ocelot_read_rix(ocelot, QS_XTR_RD, grp); ocelot 69 drivers/net/ethernet/mscc/ocelot_board.c val = ocelot_read_rix(ocelot, QS_XTR_RD, grp); ocelot 71 drivers/net/ethernet/mscc/ocelot_board.c *rval = ocelot_read_rix(ocelot, QS_XTR_RD, grp); ocelot 77 drivers/net/ethernet/mscc/ocelot_board.c *rval = ocelot_read_rix(ocelot, QS_XTR_RD, grp); ocelot 89 drivers/net/ethernet/mscc/ocelot_board.c struct ocelot *ocelot = arg; ocelot 93 drivers/net/ethernet/mscc/ocelot_board.c if (!(ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp))) ocelot 107 drivers/net/ethernet/mscc/ocelot_board.c err = ocelot_rx_frame_word(ocelot, grp, true, &ifh[i]); ocelot 125 drivers/net/ethernet/mscc/ocelot_board.c dev = ocelot->ports[info.port]->dev; ocelot 139 drivers/net/ethernet/mscc/ocelot_board.c sz = ocelot_rx_frame_word(ocelot, grp, false, &val); ocelot 145 drivers/net/ethernet/mscc/ocelot_board.c sz = ocelot_rx_frame_word(ocelot, grp, false, &val); ocelot 159 drivers/net/ethernet/mscc/ocelot_board.c if (ocelot->ptp) { ocelot 160 drivers/net/ethernet/mscc/ocelot_board.c ocelot_ptp_gettime64(&ocelot->ptp_info, &ts); ocelot 178 drivers/net/ethernet/mscc/ocelot_board.c if (ocelot->bridge_mask & BIT(info.port)) ocelot 185 drivers/net/ethernet/mscc/ocelot_board.c } while (ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp)); ocelot 188 drivers/net/ethernet/mscc/ocelot_board.c while (ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp)) ocelot 189 drivers/net/ethernet/mscc/ocelot_board.c ocelot_read_rix(ocelot, QS_XTR_RD, grp); ocelot 197 drivers/net/ethernet/mscc/ocelot_board.c struct ocelot *ocelot = arg; ocelot 208 drivers/net/ethernet/mscc/ocelot_board.c val = ocelot_read(ocelot, SYS_PTP_STATUS); ocelot 221 drivers/net/ethernet/mscc/ocelot_board.c port = ocelot->ports[txport]; ocelot 235 drivers/net/ethernet/mscc/ocelot_board.c ocelot_write(ocelot, SYS_PTP_NXT_PTP_NXT, SYS_PTP_NXT); ocelot 241 drivers/net/ethernet/mscc/ocelot_board.c ocelot_get_hwtimestamp(ocelot, &ts); ocelot 265 drivers/net/ethernet/mscc/ocelot_board.c struct ocelot *ocelot; ocelot 287 drivers/net/ethernet/mscc/ocelot_board.c ocelot = devm_kzalloc(&pdev->dev, sizeof(*ocelot), GFP_KERNEL); ocelot 288 drivers/net/ethernet/mscc/ocelot_board.c if (!ocelot) ocelot 291 drivers/net/ethernet/mscc/ocelot_board.c platform_set_drvdata(pdev, ocelot); ocelot 292 drivers/net/ethernet/mscc/ocelot_board.c ocelot->dev = &pdev->dev; ocelot 297 drivers/net/ethernet/mscc/ocelot_board.c target = ocelot_io_platform_init(ocelot, pdev, res[i].name); ocelot 300 drivers/net/ethernet/mscc/ocelot_board.c ocelot->targets[res[i].id] = NULL; ocelot 307 drivers/net/ethernet/mscc/ocelot_board.c ocelot->targets[res[i].id] = target; ocelot 316 drivers/net/ethernet/mscc/ocelot_board.c ocelot->targets[HSIO] = hsio; ocelot 318 drivers/net/ethernet/mscc/ocelot_board.c err = ocelot_chip_init(ocelot); ocelot 328 drivers/net/ethernet/mscc/ocelot_board.c "frame extraction", ocelot); ocelot 333 drivers/net/ethernet/mscc/ocelot_board.c if (irq_ptp_rdy > 0 && ocelot->targets[PTP]) { ocelot 337 drivers/net/ethernet/mscc/ocelot_board.c ocelot); ocelot 342 drivers/net/ethernet/mscc/ocelot_board.c ocelot->ptp = 1; ocelot 345 drivers/net/ethernet/mscc/ocelot_board.c regmap_field_write(ocelot->regfields[SYS_RESET_CFG_MEM_INIT], 1); ocelot 346 drivers/net/ethernet/mscc/ocelot_board.c regmap_field_write(ocelot->regfields[SYS_RESET_CFG_MEM_ENA], 1); ocelot 350 drivers/net/ethernet/mscc/ocelot_board.c regmap_field_read(ocelot->regfields[SYS_RESET_CFG_MEM_INIT], ocelot 354 drivers/net/ethernet/mscc/ocelot_board.c regmap_field_write(ocelot->regfields[SYS_RESET_CFG_MEM_ENA], 1); ocelot 355 drivers/net/ethernet/mscc/ocelot_board.c regmap_field_write(ocelot->regfields[SYS_RESET_CFG_CORE_ENA], 1); ocelot 357 drivers/net/ethernet/mscc/ocelot_board.c ocelot->num_cpu_ports = 1; /* 1 port on the switch, two groups */ ocelot 365 drivers/net/ethernet/mscc/ocelot_board.c ocelot->num_phys_ports = of_get_child_count(ports); ocelot 367 drivers/net/ethernet/mscc/ocelot_board.c ocelot->ports = devm_kcalloc(&pdev->dev, ocelot->num_phys_ports, ocelot 370 drivers/net/ethernet/mscc/ocelot_board.c INIT_LIST_HEAD(&ocelot->multicast); ocelot 371 drivers/net/ethernet/mscc/ocelot_board.c ocelot_init(ocelot); ocelot 403 drivers/net/ethernet/mscc/ocelot_board.c err = ocelot_probe_port(ocelot, port, regs, phy); ocelot 411 drivers/net/ethernet/mscc/ocelot_board.c ocelot->ports[port]->phy_mode = PHY_INTERFACE_MODE_NA; ocelot 413 drivers/net/ethernet/mscc/ocelot_board.c ocelot->ports[port]->phy_mode = phy_mode; ocelot 415 drivers/net/ethernet/mscc/ocelot_board.c switch (ocelot->ports[port]->phy_mode) { ocelot 424 drivers/net/ethernet/mscc/ocelot_board.c ocelot_port_writel(ocelot->ports[port], ocelot 430 drivers/net/ethernet/mscc/ocelot_board.c dev_err(ocelot->dev, ocelot 438 drivers/net/ethernet/mscc/ocelot_board.c serdes = devm_of_phy_get(ocelot->dev, portnp, NULL); ocelot 442 drivers/net/ethernet/mscc/ocelot_board.c dev_dbg(ocelot->dev, "deferring probe\n"); ocelot 444 drivers/net/ethernet/mscc/ocelot_board.c dev_err(ocelot->dev, ocelot 452 drivers/net/ethernet/mscc/ocelot_board.c ocelot->ports[port]->serdes = serdes; ocelot 468 drivers/net/ethernet/mscc/ocelot_board.c struct ocelot *ocelot = platform_get_drvdata(pdev); ocelot 470 drivers/net/ethernet/mscc/ocelot_board.c ocelot_deinit(ocelot); ocelot 13 drivers/net/ethernet/mscc/ocelot_io.c u32 __ocelot_read_ix(struct ocelot *ocelot, u32 reg, u32 offset) ocelot 20 drivers/net/ethernet/mscc/ocelot_io.c regmap_read(ocelot->targets[target], ocelot 21 drivers/net/ethernet/mscc/ocelot_io.c ocelot->map[target][reg & REG_MASK] + offset, &val); ocelot 26 drivers/net/ethernet/mscc/ocelot_io.c void __ocelot_write_ix(struct ocelot *ocelot, u32 val, u32 reg, u32 offset) ocelot 32 drivers/net/ethernet/mscc/ocelot_io.c regmap_write(ocelot->targets[target], ocelot 33 drivers/net/ethernet/mscc/ocelot_io.c ocelot->map[target][reg & REG_MASK] + offset, val); ocelot 37 drivers/net/ethernet/mscc/ocelot_io.c void __ocelot_rmw_ix(struct ocelot *ocelot, u32 val, u32 mask, u32 reg, ocelot 44 drivers/net/ethernet/mscc/ocelot_io.c regmap_update_bits(ocelot->targets[target], ocelot 45 drivers/net/ethernet/mscc/ocelot_io.c ocelot->map[target][reg & REG_MASK] + offset, ocelot 62 drivers/net/ethernet/mscc/ocelot_io.c int ocelot_regfields_init(struct ocelot *ocelot, ocelot 77 drivers/net/ethernet/mscc/ocelot_io.c regfield.reg = ocelot->map[target][reg & REG_MASK]; ocelot 81 drivers/net/ethernet/mscc/ocelot_io.c ocelot->regfields[i] = ocelot 82 drivers/net/ethernet/mscc/ocelot_io.c devm_regmap_field_alloc(ocelot->dev, ocelot 83 drivers/net/ethernet/mscc/ocelot_io.c ocelot->targets[target], ocelot 86 drivers/net/ethernet/mscc/ocelot_io.c if (IS_ERR(ocelot->regfields[i])) ocelot 87 drivers/net/ethernet/mscc/ocelot_io.c return PTR_ERR(ocelot->regfields[i]); ocelot 100 drivers/net/ethernet/mscc/ocelot_io.c struct regmap *ocelot_io_platform_init(struct ocelot *ocelot, ocelot 108 drivers/net/ethernet/mscc/ocelot_io.c regs = devm_ioremap_resource(ocelot->dev, res); ocelot 113 drivers/net/ethernet/mscc/ocelot_io.c return devm_regmap_init_mmio(ocelot->dev, regs, ocelot 49 drivers/net/ethernet/mscc/ocelot_police.c struct ocelot *ocelot = port->ocelot; ocelot 151 drivers/net/ethernet/mscc/ocelot_police.c ocelot_write_gix(ocelot, value, ANA_POL_MODE_CFG, pol_ix); ocelot 153 drivers/net/ethernet/mscc/ocelot_police.c ocelot_write_gix(ocelot, ocelot 158 drivers/net/ethernet/mscc/ocelot_police.c ocelot_write_gix(ocelot, ocelot 162 drivers/net/ethernet/mscc/ocelot_police.c ocelot_write_gix(ocelot, ocelot 167 drivers/net/ethernet/mscc/ocelot_police.c ocelot_write_gix(ocelot, ocelot 177 drivers/net/ethernet/mscc/ocelot_police.c struct ocelot *ocelot = port->ocelot; ocelot 196 drivers/net/ethernet/mscc/ocelot_police.c ocelot_rmw_gix(ocelot, ocelot 208 drivers/net/ethernet/mscc/ocelot_police.c struct ocelot *ocelot = port->ocelot; ocelot 220 drivers/net/ethernet/mscc/ocelot_police.c ocelot_rmw_gix(ocelot, ocelot 397 drivers/net/ethernet/mscc/ocelot_regs.c static void ocelot_pll5_init(struct ocelot *ocelot) ocelot 402 drivers/net/ethernet/mscc/ocelot_regs.c regmap_write(ocelot->targets[HSIO], HSIO_PLL5G_CFG4, ocelot 405 drivers/net/ethernet/mscc/ocelot_regs.c regmap_write(ocelot->targets[HSIO], HSIO_PLL5G_CFG0, ocelot 417 drivers/net/ethernet/mscc/ocelot_regs.c regmap_write(ocelot->targets[HSIO], HSIO_PLL5G_CFG2, ocelot 426 drivers/net/ethernet/mscc/ocelot_regs.c int ocelot_chip_init(struct ocelot *ocelot) ocelot 430 drivers/net/ethernet/mscc/ocelot_regs.c ocelot->map = ocelot_regmap; ocelot 431 drivers/net/ethernet/mscc/ocelot_regs.c ocelot->stats_layout = ocelot_stats_layout; ocelot 432 drivers/net/ethernet/mscc/ocelot_regs.c ocelot->num_stats = ARRAY_SIZE(ocelot_stats_layout); ocelot 433 drivers/net/ethernet/mscc/ocelot_regs.c ocelot->shared_queue_sz = 224 * 1024; ocelot 435 drivers/net/ethernet/mscc/ocelot_regs.c ret = ocelot_regfields_init(ocelot, ocelot_regfields); ocelot 439 drivers/net/ethernet/mscc/ocelot_regs.c ocelot_pll5_init(ocelot); ocelot 441 drivers/net/ethernet/mscc/ocelot_regs.c eth_random_addr(ocelot->base_mac); ocelot 442 drivers/net/ethernet/mscc/ocelot_regs.c ocelot->base_mac[5] &= 0xf0;