Lines Matching full:ocelot
13 #include <soc/mscc/ocelot.h>
14 #include <linux/dsa/ocelot.h>
879 static int vsc9959_gcb_soft_rst_status(struct ocelot *ocelot) in vsc9959_gcb_soft_rst_status() argument
883 ocelot_field_read(ocelot, GCB_SOFT_RST_SWC_RST, &val); in vsc9959_gcb_soft_rst_status()
888 static int vsc9959_sys_ram_init_status(struct ocelot *ocelot) in vsc9959_sys_ram_init_status() argument
890 return ocelot_read(ocelot, SYS_RAM_INIT); in vsc9959_sys_ram_init_status()
896 static int vsc9959_reset(struct ocelot *ocelot) in vsc9959_reset() argument
901 ocelot_field_write(ocelot, GCB_SOFT_RST_SWC_RST, 1); in vsc9959_reset()
903 err = readx_poll_timeout(vsc9959_gcb_soft_rst_status, ocelot, val, !val, in vsc9959_reset()
906 dev_err(ocelot->dev, "timeout: switch core reset\n"); in vsc9959_reset()
911 ocelot_write(ocelot, SYS_RAM_INIT_RAM_INIT, SYS_RAM_INIT); in vsc9959_reset()
912 err = readx_poll_timeout(vsc9959_sys_ram_init_status, ocelot, val, !val, in vsc9959_reset()
916 dev_err(ocelot->dev, "timeout: switch sram init\n"); in vsc9959_reset()
921 ocelot_field_write(ocelot, SYS_RESET_CFG_CORE_ENA, 1); in vsc9959_reset()
956 static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot) in vsc9959_mdio_bus_alloc() argument
958 struct pci_dev *pdev = to_pci_dev(ocelot->dev); in vsc9959_mdio_bus_alloc()
959 struct felix *felix = ocelot_to_felix(ocelot); in vsc9959_mdio_bus_alloc()
961 struct device *dev = ocelot->dev; in vsc9959_mdio_bus_alloc()
1023 struct ocelot_port *ocelot_port = ocelot->ports[port]; in vsc9959_mdio_bus_alloc()
1044 static void vsc9959_mdio_bus_free(struct ocelot *ocelot) in vsc9959_mdio_bus_free() argument
1046 struct felix *felix = ocelot_to_felix(ocelot); in vsc9959_mdio_bus_free()
1049 for (port = 0; port < ocelot->num_phys_ports; port++) { in vsc9959_mdio_bus_free()
1144 static void vsc9959_port_qmaxsdu_set(struct ocelot *ocelot, int port, int tc, in vsc9959_port_qmaxsdu_set() argument
1149 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_0, in vsc9959_port_qmaxsdu_set()
1153 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_1, in vsc9959_port_qmaxsdu_set()
1157 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_2, in vsc9959_port_qmaxsdu_set()
1161 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_3, in vsc9959_port_qmaxsdu_set()
1165 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_4, in vsc9959_port_qmaxsdu_set()
1169 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_5, in vsc9959_port_qmaxsdu_set()
1173 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_6, in vsc9959_port_qmaxsdu_set()
1177 ocelot_write_rix(ocelot, max_sdu, QSYS_QMAXSDU_CFG_7, in vsc9959_port_qmaxsdu_set()
1183 static u32 vsc9959_port_qmaxsdu_get(struct ocelot *ocelot, int port, int tc) in vsc9959_port_qmaxsdu_get() argument
1186 case 0: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_0, port); in vsc9959_port_qmaxsdu_get()
1187 case 1: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_1, port); in vsc9959_port_qmaxsdu_get()
1188 case 2: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_2, port); in vsc9959_port_qmaxsdu_get()
1189 case 3: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_3, port); in vsc9959_port_qmaxsdu_get()
1190 case 4: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_4, port); in vsc9959_port_qmaxsdu_get()
1191 case 5: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_5, port); in vsc9959_port_qmaxsdu_get()
1192 case 6: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_6, port); in vsc9959_port_qmaxsdu_get()
1193 case 7: return ocelot_read_rix(ocelot, QSYS_QMAXSDU_CFG_7, port); in vsc9959_port_qmaxsdu_get()
1213 static void vsc9959_tas_guard_bands_update(struct ocelot *ocelot, int port) in vsc9959_tas_guard_bands_update() argument
1215 struct ocelot_port *ocelot_port = ocelot->ports[port]; in vsc9959_tas_guard_bands_update()
1216 struct ocelot_mm_state *mm = &ocelot->mm[port]; in vsc9959_tas_guard_bands_update()
1226 lockdep_assert_held(&ocelot->fwd_domain_lock); in vsc9959_tas_guard_bands_update()
1230 val = ocelot_read_rix(ocelot, QSYS_TAG_CONFIG, port); in vsc9959_tas_guard_bands_update()
1265 val = ocelot_read_rix(ocelot, QSYS_PREEMPTION_CFG, port); in vsc9959_tas_guard_bands_update()
1270 dev_dbg(ocelot->dev, in vsc9959_tas_guard_bands_update()
1292 dev_dbg(ocelot->dev, in vsc9959_tas_guard_bands_update()
1326 dev_info(ocelot->dev, in vsc9959_tas_guard_bands_update()
1335 vsc9959_port_qmaxsdu_set(ocelot, port, tc, max_sdu); in vsc9959_tas_guard_bands_update()
1338 ocelot_write_rix(ocelot, maxlen, QSYS_PORT_MAX_SDU, port); in vsc9959_tas_guard_bands_update()
1340 ocelot->ops->cut_through_fwd(ocelot); in vsc9959_tas_guard_bands_update()
1343 static void vsc9959_sched_speed_set(struct ocelot *ocelot, int port, in vsc9959_sched_speed_set() argument
1346 struct ocelot_port *ocelot_port = ocelot->ports[port]; in vsc9959_sched_speed_set()
1367 mutex_lock(&ocelot->fwd_domain_lock); in vsc9959_sched_speed_set()
1369 ocelot_rmw_rix(ocelot, in vsc9959_sched_speed_set()
1375 vsc9959_tas_guard_bands_update(ocelot, port); in vsc9959_sched_speed_set()
1377 mutex_unlock(&ocelot->fwd_domain_lock); in vsc9959_sched_speed_set()
1380 static void vsc9959_new_base_time(struct ocelot *ocelot, ktime_t base_time, in vsc9959_new_base_time() argument
1388 ocelot_ptp_gettime64(&ocelot->ptp_info, &ts); in vsc9959_new_base_time()
1402 static u32 vsc9959_tas_read_cfg_status(struct ocelot *ocelot) in vsc9959_tas_read_cfg_status() argument
1404 return ocelot_read(ocelot, QSYS_TAS_PARAM_CFG_CTRL); in vsc9959_tas_read_cfg_status()
1407 static void vsc9959_tas_gcl_set(struct ocelot *ocelot, const u32 gcl_ix, in vsc9959_tas_gcl_set() argument
1410 ocelot_write(ocelot, in vsc9959_tas_gcl_set()
1414 ocelot_write(ocelot, entry->interval, QSYS_GCL_CFG_REG_2); in vsc9959_tas_gcl_set()
1417 static int vsc9959_qos_port_tas_set(struct ocelot *ocelot, int port, in vsc9959_qos_port_tas_set() argument
1420 struct ocelot_port *ocelot_port = ocelot->ports[port]; in vsc9959_qos_port_tas_set()
1425 mutex_lock(&ocelot->fwd_domain_lock); in vsc9959_qos_port_tas_set()
1428 ocelot_port_mqprio(ocelot, port, &taprio->mqprio); in vsc9959_qos_port_tas_set()
1429 ocelot_rmw_rix(ocelot, 0, QSYS_TAG_CONFIG_ENABLE, in vsc9959_qos_port_tas_set()
1435 vsc9959_tas_guard_bands_update(ocelot, port); in vsc9959_qos_port_tas_set()
1437 mutex_unlock(&ocelot->fwd_domain_lock); in vsc9959_qos_port_tas_set()
1444 ret = ocelot_port_mqprio(ocelot, port, &taprio->mqprio); in vsc9959_qos_port_tas_set()
1468 ocelot_rmw(ocelot, QSYS_TAS_PARAM_CFG_CTRL_PORT_NUM(port) | in vsc9959_qos_port_tas_set()
1477 val = ocelot_read(ocelot, QSYS_PARAM_STATUS_REG_8); in vsc9959_qos_port_tas_set()
1483 ocelot_rmw_rix(ocelot, in vsc9959_qos_port_tas_set()
1492 vsc9959_new_base_time(ocelot, taprio->base_time, in vsc9959_qos_port_tas_set()
1494 ocelot_write(ocelot, base_ts.tv_nsec, QSYS_PARAM_CFG_REG_1); in vsc9959_qos_port_tas_set()
1495 ocelot_write(ocelot, lower_32_bits(base_ts.tv_sec), QSYS_PARAM_CFG_REG_2); in vsc9959_qos_port_tas_set()
1497 ocelot_write(ocelot, in vsc9959_qos_port_tas_set()
1501 ocelot_write(ocelot, taprio->cycle_time, QSYS_PARAM_CFG_REG_4); in vsc9959_qos_port_tas_set()
1502 ocelot_write(ocelot, taprio->cycle_time_extension, QSYS_PARAM_CFG_REG_5); in vsc9959_qos_port_tas_set()
1505 vsc9959_tas_gcl_set(ocelot, i, &taprio->entries[i]); in vsc9959_qos_port_tas_set()
1507 ocelot_rmw(ocelot, QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE, in vsc9959_qos_port_tas_set()
1511 ret = readx_poll_timeout(vsc9959_tas_read_cfg_status, ocelot, val, in vsc9959_qos_port_tas_set()
1518 vsc9959_tas_guard_bands_update(ocelot, port); in vsc9959_qos_port_tas_set()
1520 mutex_unlock(&ocelot->fwd_domain_lock); in vsc9959_qos_port_tas_set()
1526 ocelot_port_mqprio(ocelot, port, &taprio->mqprio); in vsc9959_qos_port_tas_set()
1528 mutex_unlock(&ocelot->fwd_domain_lock); in vsc9959_qos_port_tas_set()
1533 static void vsc9959_tas_clock_adjust(struct ocelot *ocelot) in vsc9959_tas_clock_adjust() argument
1541 mutex_lock(&ocelot->fwd_domain_lock); in vsc9959_tas_clock_adjust()
1543 for (port = 0; port < ocelot->num_phys_ports; port++) { in vsc9959_tas_clock_adjust()
1544 ocelot_port = ocelot->ports[port]; in vsc9959_tas_clock_adjust()
1549 ocelot_rmw(ocelot, in vsc9959_tas_clock_adjust()
1555 ocelot_rmw_rix(ocelot, 0, QSYS_TAG_CONFIG_ENABLE, in vsc9959_tas_clock_adjust()
1558 vsc9959_new_base_time(ocelot, taprio->base_time, in vsc9959_tas_clock_adjust()
1561 ocelot_write(ocelot, base_ts.tv_nsec, QSYS_PARAM_CFG_REG_1); in vsc9959_tas_clock_adjust()
1562 ocelot_write(ocelot, lower_32_bits(base_ts.tv_sec), in vsc9959_tas_clock_adjust()
1565 ocelot_rmw(ocelot, in vsc9959_tas_clock_adjust()
1570 ocelot_rmw(ocelot, QSYS_TAS_PARAM_CFG_CTRL_CONFIG_CHANGE, in vsc9959_tas_clock_adjust()
1575 ocelot_rmw_rix(ocelot, QSYS_TAG_CONFIG_ENABLE, in vsc9959_tas_clock_adjust()
1579 mutex_unlock(&ocelot->fwd_domain_lock); in vsc9959_tas_clock_adjust()
1585 struct ocelot *ocelot = ds->priv; in vsc9959_qos_port_cbs_set() local
1593 ocelot_write_gix(ocelot, QSYS_CIR_CFG_CIR_RATE(0) | in vsc9959_qos_port_cbs_set()
1597 ocelot_rmw_gix(ocelot, 0, QSYS_SE_CFG_SE_AVB_ENA, in vsc9959_qos_port_cbs_set()
1611 ocelot_write_gix(ocelot, in vsc9959_qos_port_cbs_set()
1617 ocelot_rmw_gix(ocelot, in vsc9959_qos_port_cbs_set()
1650 static int vsc9959_qos_port_mqprio(struct ocelot *ocelot, int port, in vsc9959_qos_port_mqprio() argument
1655 mutex_lock(&ocelot->fwd_domain_lock); in vsc9959_qos_port_mqprio()
1656 ret = ocelot_port_mqprio(ocelot, port, mqprio); in vsc9959_qos_port_mqprio()
1657 mutex_unlock(&ocelot->fwd_domain_lock); in vsc9959_qos_port_mqprio()
1666 struct ocelot *ocelot = ds->priv; in vsc9959_port_setup_tc() local
1672 return vsc9959_qos_port_tas_set(ocelot, port, type_data); in vsc9959_port_setup_tc()
1674 return vsc9959_qos_port_mqprio(ocelot, port, type_data); in vsc9959_port_setup_tc()
1790 static int vsc9959_mact_stream_set(struct ocelot *ocelot, in vsc9959_mact_stream_set() argument
1805 ret = ocelot_mact_lookup(ocelot, &dst_idx, mac, vid, &type); in vsc9959_mact_stream_set()
1819 ret = ocelot_mact_learn_streamdata(ocelot, dst_idx, mac, vid, type, in vsc9959_mact_stream_set()
1839 static int vsc9959_stream_table_add(struct ocelot *ocelot, in vsc9959_stream_table_add() argument
1852 ret = vsc9959_mact_stream_set(ocelot, stream_entry, extack); in vsc9959_stream_table_add()
1876 static void vsc9959_stream_table_del(struct ocelot *ocelot, in vsc9959_stream_table_del() argument
1880 vsc9959_mact_stream_set(ocelot, stream, NULL); in vsc9959_stream_table_del()
1886 static u32 vsc9959_sfi_access_status(struct ocelot *ocelot) in vsc9959_sfi_access_status() argument
1888 return ocelot_read(ocelot, ANA_TABLES_SFIDACCESS); in vsc9959_sfi_access_status()
1891 static int vsc9959_psfp_sfi_set(struct ocelot *ocelot, in vsc9959_psfp_sfi_set() argument
1900 ocelot_write(ocelot, ANA_TABLES_SFIDTIDX_SFID_INDEX(sfi->index), in vsc9959_psfp_sfi_set()
1904 ocelot_write(ocelot, val, ANA_TABLES_SFIDACCESS); in vsc9959_psfp_sfi_set()
1906 return readx_poll_timeout(vsc9959_sfi_access_status, ocelot, val, in vsc9959_psfp_sfi_set()
1915 ocelot_write(ocelot, in vsc9959_psfp_sfi_set()
1923 ocelot_write(ocelot, in vsc9959_psfp_sfi_set()
1930 return readx_poll_timeout(vsc9959_sfi_access_status, ocelot, val, in vsc9959_psfp_sfi_set()
1935 static int vsc9959_psfp_sfidmask_set(struct ocelot *ocelot, u32 sfid, int ports) in vsc9959_psfp_sfidmask_set() argument
1939 ocelot_rmw(ocelot, in vsc9959_psfp_sfidmask_set()
1944 ocelot_write(ocelot, in vsc9959_psfp_sfidmask_set()
1949 ocelot_rmw(ocelot, in vsc9959_psfp_sfidmask_set()
1954 return readx_poll_timeout(vsc9959_sfi_access_status, ocelot, val, in vsc9959_psfp_sfidmask_set()
1959 static int vsc9959_psfp_sfi_list_add(struct ocelot *ocelot, in vsc9959_psfp_sfi_list_add() argument
1972 ret = vsc9959_psfp_sfi_set(ocelot, sfi_entry); in vsc9959_psfp_sfi_list_add()
1978 vsc9959_psfp_sfidmask_set(ocelot, sfi->index, sfi->portmask); in vsc9959_psfp_sfi_list_add()
1985 static int vsc9959_psfp_sfi_table_add(struct ocelot *ocelot, in vsc9959_psfp_sfi_table_add() argument
1993 psfp = &ocelot->psfp; in vsc9959_psfp_sfi_table_add()
2015 return vsc9959_psfp_sfi_list_add(ocelot, sfi, last); in vsc9959_psfp_sfi_table_add()
2018 static int vsc9959_psfp_sfi_table_add2(struct ocelot *ocelot, in vsc9959_psfp_sfi_table_add2() argument
2028 psfp = &ocelot->psfp; in vsc9959_psfp_sfi_table_add2()
2042 ret = vsc9959_psfp_sfi_list_add(ocelot, sfi, last); in vsc9959_psfp_sfi_table_add2()
2048 return vsc9959_psfp_sfi_list_add(ocelot, sfi2, last->next); in vsc9959_psfp_sfi_table_add2()
2063 static void vsc9959_psfp_sfi_table_del(struct ocelot *ocelot, u32 index) in vsc9959_psfp_sfi_table_del() argument
2069 psfp = &ocelot->psfp; in vsc9959_psfp_sfi_table_del()
2076 vsc9959_psfp_sfi_set(ocelot, tmp); in vsc9959_psfp_sfi_table_del()
2099 static u32 vsc9959_sgi_cfg_status(struct ocelot *ocelot) in vsc9959_sgi_cfg_status() argument
2101 return ocelot_read(ocelot, ANA_SG_ACCESS_CTRL); in vsc9959_sgi_cfg_status()
2104 static int vsc9959_psfp_sgi_set(struct ocelot *ocelot, in vsc9959_psfp_sgi_set() argument
2116 ocelot_write(ocelot, ANA_SG_ACCESS_CTRL_SGID(sgi->index), in vsc9959_psfp_sgi_set()
2120 ocelot_rmw(ocelot, ANA_SG_CONFIG_REG_3_INIT_GATE_STATE, in vsc9959_psfp_sgi_set()
2135 vsc9959_new_base_time(ocelot, sgi->basetime, sgi->cycletime, &base_ts); in vsc9959_psfp_sgi_set()
2136 ocelot_write(ocelot, base_ts.tv_nsec, ANA_SG_CONFIG_REG_1); in vsc9959_psfp_sgi_set()
2138 ocelot_write(ocelot, val, ANA_SG_CONFIG_REG_2); in vsc9959_psfp_sgi_set()
2141 ocelot_write(ocelot, in vsc9959_psfp_sgi_set()
2150 ocelot_write(ocelot, sgi->cycletime, ANA_SG_CONFIG_REG_4); in vsc9959_psfp_sgi_set()
2156 ocelot_write_rix(ocelot, ANA_SG_GCL_GS_CONFIG_IPS(ips) | in vsc9959_psfp_sgi_set()
2162 ocelot_write_rix(ocelot, interval_sum, ANA_SG_GCL_TI_CONFIG, i); in vsc9959_psfp_sgi_set()
2165 ocelot_rmw(ocelot, ANA_SG_ACCESS_CTRL_CONFIG_CHANGE, in vsc9959_psfp_sgi_set()
2169 return readx_poll_timeout(vsc9959_sgi_cfg_status, ocelot, val, in vsc9959_psfp_sgi_set()
2174 static int vsc9959_psfp_sgi_table_add(struct ocelot *ocelot, in vsc9959_psfp_sgi_table_add() argument
2181 psfp = &ocelot->psfp; in vsc9959_psfp_sgi_table_add()
2193 ret = vsc9959_psfp_sgi_set(ocelot, sgi); in vsc9959_psfp_sgi_table_add()
2206 static void vsc9959_psfp_sgi_table_del(struct ocelot *ocelot, in vsc9959_psfp_sgi_table_del() argument
2214 psfp = &ocelot->psfp; in vsc9959_psfp_sgi_table_del()
2222 vsc9959_psfp_sgi_set(ocelot, &sgi); in vsc9959_psfp_sgi_table_del()
2230 static int vsc9959_psfp_filter_add(struct ocelot *ocelot, int port, in vsc9959_psfp_filter_add() argument
2246 psfp = &ocelot->psfp; in vsc9959_psfp_filter_add()
2266 ret = vsc9959_psfp_sgi_table_add(ocelot, sgi); in vsc9959_psfp_filter_add()
2288 ret = ocelot_vcap_policer_add(ocelot, index, &pol); in vsc9959_psfp_filter_add()
2334 vsc9959_psfp_sfi_table_del(ocelot, stream_entry->sfid); in vsc9959_psfp_filter_add()
2340 ret = vsc9959_psfp_sfi_table_add2(ocelot, &sfi, in vsc9959_psfp_filter_add()
2344 ret = vsc9959_psfp_sfi_table_add2(ocelot, &old_sfi, in vsc9959_psfp_filter_add()
2353 ret = vsc9959_psfp_sfi_table_add(ocelot, &sfi); in vsc9959_psfp_filter_add()
2360 ret = vsc9959_stream_table_add(ocelot, &psfp->stream_list, in vsc9959_psfp_filter_add()
2363 vsc9959_psfp_sfi_table_del(ocelot, stream.sfid); in vsc9959_psfp_filter_add()
2373 vsc9959_psfp_sgi_table_del(ocelot, sfi.sgid); in vsc9959_psfp_filter_add()
2376 ocelot_vcap_policer_del(ocelot, sfi.fmid); in vsc9959_psfp_filter_add()
2383 static int vsc9959_psfp_filter_del(struct ocelot *ocelot, in vsc9959_psfp_filter_del() argument
2387 struct ocelot_psfp_list *psfp = &ocelot->psfp; in vsc9959_psfp_filter_del()
2405 vsc9959_psfp_sgi_table_del(ocelot, sfi->sgid); in vsc9959_psfp_filter_del()
2408 ocelot_vcap_policer_del(ocelot, sfi->fmid); in vsc9959_psfp_filter_del()
2410 vsc9959_psfp_sfi_table_del(ocelot, stream->sfid); in vsc9959_psfp_filter_del()
2415 vsc9959_stream_table_del(ocelot, stream); in vsc9959_psfp_filter_del()
2422 vsc9959_mact_stream_set(ocelot, stream_entry, NULL); in vsc9959_psfp_filter_del()
2424 vsc9959_psfp_sfidmask_set(ocelot, stream_entry->sfid, in vsc9959_psfp_filter_del()
2433 static void vsc9959_update_sfid_stats(struct ocelot *ocelot, in vsc9959_update_sfid_stats() argument
2440 lockdep_assert_held(&ocelot->stat_view_lock); in vsc9959_update_sfid_stats()
2442 ocelot_rmw(ocelot, SYS_STAT_CFG_STAT_VIEW(sfid), in vsc9959_update_sfid_stats()
2446 match = ocelot_read(ocelot, SYS_COUNT_SF_MATCHING_FRAMES); in vsc9959_update_sfid_stats()
2447 not_pass_gate = ocelot_read(ocelot, SYS_COUNT_SF_NOT_PASSING_FRAMES); in vsc9959_update_sfid_stats()
2448 not_pass_sdu = ocelot_read(ocelot, SYS_COUNT_SF_NOT_PASSING_SDU); in vsc9959_update_sfid_stats()
2449 red = ocelot_read(ocelot, SYS_COUNT_SF_RED_FRAMES); in vsc9959_update_sfid_stats()
2452 ocelot_write(ocelot, in vsc9959_update_sfid_stats()
2463 /* Caller must hold &ocelot->stat_view_lock */
2464 static void vsc9959_update_stats(struct ocelot *ocelot) in vsc9959_update_stats() argument
2466 struct ocelot_psfp_list *psfp = &ocelot->psfp; in vsc9959_update_stats()
2472 vsc9959_update_sfid_stats(ocelot, sfi); in vsc9959_update_stats()
2477 static int vsc9959_psfp_stats_get(struct ocelot *ocelot, in vsc9959_psfp_stats_get() argument
2481 struct ocelot_psfp_list *psfp = &ocelot->psfp; in vsc9959_psfp_stats_get()
2494 mutex_lock(&ocelot->stat_view_lock); in vsc9959_psfp_stats_get()
2496 vsc9959_update_sfid_stats(ocelot, sfi); in vsc9959_psfp_stats_get()
2504 mutex_unlock(&ocelot->stat_view_lock); in vsc9959_psfp_stats_get()
2509 static void vsc9959_psfp_init(struct ocelot *ocelot) in vsc9959_psfp_init() argument
2511 struct ocelot_psfp_list *psfp = &ocelot->psfp; in vsc9959_psfp_init()
2528 static void vsc9959_cut_through_fwd(struct ocelot *ocelot) in vsc9959_cut_through_fwd() argument
2530 struct felix *felix = ocelot_to_felix(ocelot); in vsc9959_cut_through_fwd()
2534 lockdep_assert_held(&ocelot->fwd_domain_lock); in vsc9959_cut_through_fwd()
2536 for (port = 0; port < ocelot->num_phys_ports; port++) { in vsc9959_cut_through_fwd()
2537 struct ocelot_port *ocelot_port = ocelot->ports[port]; in vsc9959_cut_through_fwd()
2538 struct ocelot_mm_state *mm = &ocelot->mm[port]; in vsc9959_cut_through_fwd()
2548 /* Ocelot switches forward from the NPI port towards in vsc9959_cut_through_fwd()
2554 mask = ocelot_get_bridge_fwd_mask(ocelot, port); in vsc9959_cut_through_fwd()
2556 if (ocelot->npi >= 0) in vsc9959_cut_through_fwd()
2557 mask |= BIT(ocelot->npi); in vsc9959_cut_through_fwd()
2559 mask |= ocelot_port_assigned_dsa_8021q_cpu_mask(ocelot, in vsc9959_cut_through_fwd()
2566 for_each_set_bit(other_port, &mask, ocelot->num_phys_ports) { in vsc9959_cut_through_fwd()
2569 other_ocelot_port = ocelot->ports[other_port]; in vsc9959_cut_through_fwd()
2587 if (vsc9959_port_qmaxsdu_get(ocelot, port, tc)) in vsc9959_cut_through_fwd()
2592 tmp = ocelot_read_rix(ocelot, ANA_CUT_THRU_CFG, port); in vsc9959_cut_through_fwd()
2596 dev_dbg(ocelot->dev, in vsc9959_cut_through_fwd()
2601 ocelot_write_rix(ocelot, val, ANA_CUT_THRU_CFG, port); in vsc9959_cut_through_fwd()
2652 struct ocelot *ocelot = (struct ocelot *)data; in felix_irq_handler() local
2654 ocelot_get_txtstamp(ocelot); in felix_irq_handler()
2655 ocelot_mm_irq(ocelot); in felix_irq_handler()
2664 struct ocelot *ocelot; in felix_pci_probe() local
2687 ocelot = &felix->ocelot; in felix_pci_probe()
2688 ocelot->dev = &pdev->dev; in felix_pci_probe()
2689 ocelot->num_flooding_pgids = OCELOT_NUM_TC; in felix_pci_probe()
2697 "felix-intb", ocelot); in felix_pci_probe()
2703 ocelot->ptp = 1; in felix_pci_probe()
2704 ocelot->mm_supported = true; in felix_pci_probe()
2717 ds->priv = ocelot; in felix_pci_probe()