Lines Matching full:ds

73 static int sja1105_drop_untagged(struct dsa_switch *ds, int port, bool drop)  in sja1105_drop_untagged()  argument
75 struct sja1105_private *priv = ds->priv; in sja1105_drop_untagged()
104 static int sja1105_commit_pvid(struct dsa_switch *ds, int port) in sja1105_commit_pvid() argument
106 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_commit_pvid()
107 struct sja1105_private *priv = ds->priv; in sja1105_commit_pvid()
138 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_commit_pvid()
141 return sja1105_drop_untagged(ds, port, drop_untagged); in sja1105_commit_pvid()
186 struct dsa_switch *ds = priv->ds; in sja1105_init_mac_settings() local
207 list_for_each_entry(dp, &ds->dst->ports, list) { in sja1105_init_mac_settings()
208 if (dp->ds != ds) in sja1105_init_mac_settings()
237 struct dsa_switch *ds = priv->ds; in sja1105_init_mii_settings() local
259 for (i = 0; i < ds->num_ports; i++) { in sja1105_init_mii_settings()
262 if (dsa_is_unused_port(priv->ds, i)) in sja1105_init_mii_settings()
363 for (port = 0; port < priv->ds->num_ports; port++) in sja1105_init_static_fdb()
364 if (!dsa_is_unused_port(priv->ds, port)) in sja1105_init_static_fdb()
402 struct dsa_switch *ds = priv->ds; in sja1105_init_l2_lookup_params() local
407 for (port = 0; port < ds->num_ports; port++) in sja1105_init_l2_lookup_params()
408 if (!dsa_is_unused_port(ds, port)) in sja1105_init_l2_lookup_params()
413 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_lookup_params()
414 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_lookup_params()
460 struct dsa_switch *ds = priv->ds; in sja1105_init_static_vlan() local
477 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_static_vlan()
478 if (dsa_is_unused_port(ds, port)) in sja1105_init_static_vlan()
485 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) { in sja1105_init_static_vlan()
498 struct dsa_switch *ds = priv->ds; in sja1105_init_l2_forwarding() local
525 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_forwarding()
526 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_forwarding()
536 for (from = 0; from < ds->num_ports; from++) { in sja1105_init_l2_forwarding()
537 if (!dsa_is_user_port(ds, from)) in sja1105_init_l2_forwarding()
540 for (to = 0; to < ds->num_ports; to++) { in sja1105_init_l2_forwarding()
541 if (!dsa_is_cpu_port(ds, to) && in sja1105_init_l2_forwarding()
542 !dsa_is_dsa_port(ds, to)) in sja1105_init_l2_forwarding()
556 for (from = 0; from < ds->num_ports; from++) { in sja1105_init_l2_forwarding()
557 if (!dsa_is_cpu_port(ds, from) && !dsa_is_dsa_port(ds, from)) in sja1105_init_l2_forwarding()
560 for (to = 0; to < ds->num_ports; to++) { in sja1105_init_l2_forwarding()
561 if (dsa_is_unused_port(ds, to)) in sja1105_init_l2_forwarding()
582 dst = ds->dst; in sja1105_init_l2_forwarding()
585 if (dl->dp->ds != ds || dl->link_dp->cpu_dp == dl->dp->cpu_dp) in sja1105_init_l2_forwarding()
589 to = dsa_upstream_port(ds, from); in sja1105_init_l2_forwarding()
591 dev_warn(ds->dev, in sja1105_init_l2_forwarding()
604 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_forwarding()
605 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_forwarding()
616 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_forwarding()
617 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_forwarding()
620 l2fwd[ds->num_ports + tc].vlan_pmap[port] = tc; in sja1105_init_l2_forwarding()
623 l2fwd[ds->num_ports + tc].type_egrpcp2outputq = true; in sja1105_init_l2_forwarding()
632 struct dsa_switch *ds = priv->ds; in sja1110_init_pcp_remapping() local
657 for (port = 0; port < ds->num_ports; port++) { in sja1110_init_pcp_remapping()
658 if (dsa_is_unused_port(ds, port)) in sja1110_init_pcp_remapping()
781 struct dsa_switch *ds = priv->ds; in sja1105_init_topology() local
788 general_params->host_port = ds->num_ports; in sja1105_init_topology()
801 general_params->casc_port = ds->num_ports; in sja1105_init_topology()
803 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_topology()
804 bool is_upstream = dsa_is_upstream_port(ds, port); in sja1105_init_topology()
805 bool is_dsa_link = dsa_is_dsa_port(ds, port); in sja1105_init_topology()
811 if (general_params->host_port == ds->num_ports) { in sja1105_init_topology()
814 dev_err(ds->dev, in sja1105_init_topology()
825 } else if (general_params->casc_port == ds->num_ports) { in sja1105_init_topology()
828 dev_err(ds->dev, in sja1105_init_topology()
836 if (general_params->host_port == ds->num_ports) { in sja1105_init_topology()
837 dev_err(ds->dev, "No host port configured\n"); in sja1105_init_topology()
849 .switchid = priv->ds->index, in sja1105_init_general_params()
863 .mirr_port = priv->ds->num_ports, in sja1105_init_general_params()
997 struct dsa_switch *ds = priv->ds; in sja1105_init_l2_policing() local
1019 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_policing()
1020 int mcast = (ds->num_ports * (SJA1105_NUM_TC + 1)) + port; in sja1105_init_l2_policing()
1021 int bcast = (ds->num_ports * SJA1105_NUM_TC) + port; in sja1105_init_l2_policing()
1033 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_policing()
1036 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_init_l2_policing()
1100 struct dsa_switch *ds = priv->ds; in sja1105_parse_rgmii_delays() local
1103 for (port = 0; port < ds->num_ports; port++) { in sja1105_parse_rgmii_delays()
1215 struct device *dev = priv->ds->dev; in sja1105_adjust_port_config()
1302 static void sja1105_mac_config(struct dsa_switch *ds, int port, in sja1105_mac_config() argument
1306 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_mac_config()
1307 struct sja1105_private *priv = ds->priv; in sja1105_mac_config()
1311 dev_err(ds->dev, "Changing PHY mode to %s not supported!\n", in sja1105_mac_config()
1322 static void sja1105_mac_link_down(struct dsa_switch *ds, int port, in sja1105_mac_link_down() argument
1326 sja1105_inhibit_tx(ds->priv, BIT(port), true); in sja1105_mac_link_down()
1329 static void sja1105_mac_link_up(struct dsa_switch *ds, int port, in sja1105_mac_link_up() argument
1336 struct sja1105_private *priv = ds->priv; in sja1105_mac_link_up()
1343 static void sja1105_phylink_validate(struct dsa_switch *ds, int port, in sja1105_phylink_validate() argument
1352 struct sja1105_private *priv = ds->priv; in sja1105_phylink_validate()
1502 int sja1105et_fdb_add(struct dsa_switch *ds, int port, in sja1105et_fdb_add() argument
1506 struct sja1105_private *priv = ds->priv; in sja1105et_fdb_add()
1507 struct device *dev = ds->dev; in sja1105et_fdb_add()
1587 int sja1105et_fdb_del(struct dsa_switch *ds, int port, in sja1105et_fdb_del() argument
1591 struct sja1105_private *priv = ds->priv; in sja1105et_fdb_del()
1622 int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, in sja1105pqrs_fdb_add() argument
1626 struct sja1105_private *priv = ds->priv; in sja1105pqrs_fdb_add()
1667 dev_err(ds->dev, "FDB is full, cannot add entry.\n"); in sja1105pqrs_fdb_add()
1697 dev_err(ds->dev, in sja1105pqrs_fdb_add()
1713 int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, in sja1105pqrs_fdb_del() argument
1717 struct sja1105_private *priv = ds->priv; in sja1105pqrs_fdb_del()
1750 static int sja1105_fdb_add(struct dsa_switch *ds, int port, in sja1105_fdb_add() argument
1753 struct sja1105_private *priv = ds->priv; in sja1105_fdb_add()
1755 return priv->info->fdb_add_cmd(ds, port, addr, vid); in sja1105_fdb_add()
1758 static int sja1105_fdb_del(struct dsa_switch *ds, int port, in sja1105_fdb_del() argument
1761 struct sja1105_private *priv = ds->priv; in sja1105_fdb_del()
1763 return priv->info->fdb_del_cmd(ds, port, addr, vid); in sja1105_fdb_del()
1766 static int sja1105_fdb_dump(struct dsa_switch *ds, int port, in sja1105_fdb_dump() argument
1769 struct sja1105_private *priv = ds->priv; in sja1105_fdb_dump()
1770 struct device *dev = ds->dev; in sja1105_fdb_dump()
1814 static void sja1105_fast_age(struct dsa_switch *ds, int port) in sja1105_fast_age() argument
1816 struct sja1105_private *priv = ds->priv; in sja1105_fast_age()
1830 dev_err(ds->dev, "Failed to read FDB: %pe\n", in sja1105_fast_age()
1844 rc = sja1105_fdb_del(ds, port, macaddr, l2_lookup.vlanid); in sja1105_fast_age()
1846 dev_err(ds->dev, in sja1105_fast_age()
1854 static int sja1105_mdb_add(struct dsa_switch *ds, int port, in sja1105_mdb_add() argument
1857 return sja1105_fdb_add(ds, port, mdb->addr, mdb->vid); in sja1105_mdb_add()
1860 static int sja1105_mdb_del(struct dsa_switch *ds, int port, in sja1105_mdb_del() argument
1863 return sja1105_fdb_del(ds, port, mdb->addr, mdb->vid); in sja1105_mdb_del()
1875 struct dsa_switch *ds = priv->ds; in sja1105_manage_flood_domains() local
1880 for (from = 0; from < ds->num_ports; from++) { in sja1105_manage_flood_domains()
1883 for (to = 0; to < priv->ds->num_ports; to++) { in sja1105_manage_flood_domains()
1910 static int sja1105_bridge_member(struct dsa_switch *ds, int port, in sja1105_bridge_member() argument
1914 struct sja1105_private *priv = ds->priv; in sja1105_bridge_member()
1919 for (i = 0; i < ds->num_ports; i++) { in sja1105_bridge_member()
1923 if (!dsa_is_user_port(ds, i)) in sja1105_bridge_member()
1936 if (dsa_to_port(ds, i)->bridge_dev != br) in sja1105_bridge_member()
1952 rc = sja1105_commit_pvid(ds, port); in sja1105_bridge_member()
1959 static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, in sja1105_bridge_stp_state_set() argument
1962 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_bridge_stp_state_set()
1963 struct sja1105_private *priv = ds->priv; in sja1105_bridge_stp_state_set()
1996 dev_err(ds->dev, "invalid STP state: %d\n", state); in sja1105_bridge_stp_state_set()
2004 static int sja1105_bridge_join(struct dsa_switch *ds, int port, in sja1105_bridge_join() argument
2007 return sja1105_bridge_member(ds, port, br, true); in sja1105_bridge_join()
2010 static void sja1105_bridge_leave(struct dsa_switch *ds, int port, in sja1105_bridge_leave() argument
2013 sja1105_bridge_member(ds, port, br, false); in sja1105_bridge_leave()
2047 static int sja1105_setup_tc_cbs(struct dsa_switch *ds, int port, in sja1105_setup_tc_cbs() argument
2050 struct sja1105_private *priv = ds->priv; in sja1105_setup_tc_cbs()
2131 struct dsa_switch *ds = priv->ds; in sja1105_static_config_reload() local
2146 for (i = 0; i < ds->num_ports; i++) { in sja1105_static_config_reload()
2160 rc = __sja1105_ptp_gettimex(ds, &now, &ptp_sts_before); in sja1105_static_config_reload()
2173 rc = __sja1105_ptp_settime(ds, 0, &ptp_sts_after); in sja1105_static_config_reload()
2190 __sja1105_ptp_adjtime(ds, now); in sja1105_static_config_reload()
2194 dev_info(priv->ds->dev, in sja1105_static_config_reload()
2208 for (i = 0; i < ds->num_ports; i++) { in sja1105_static_config_reload()
2257 sja1105_get_tag_protocol(struct dsa_switch *ds, int port, in sja1105_get_tag_protocol() argument
2260 struct sja1105_private *priv = ds->priv; in sja1105_get_tag_protocol()
2269 int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled, in sja1105_vlan_filtering() argument
2274 struct sja1105_private *priv = ds->priv; in sja1105_vlan_filtering()
2337 for (port = 0; port < ds->num_ports; port++) { in sja1105_vlan_filtering()
2338 if (dsa_is_unused_port(ds, port)) in sja1105_vlan_filtering()
2341 rc = sja1105_commit_pvid(ds, port); in sja1105_vlan_filtering()
2433 static int sja1105_bridge_vlan_add(struct dsa_switch *ds, int port, in sja1105_bridge_vlan_add() argument
2437 struct sja1105_private *priv = ds->priv; in sja1105_bridge_vlan_add()
2450 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_bridge_vlan_add()
2460 return sja1105_commit_pvid(ds, port); in sja1105_bridge_vlan_add()
2463 static int sja1105_bridge_vlan_del(struct dsa_switch *ds, int port, in sja1105_bridge_vlan_del() argument
2466 struct sja1105_private *priv = ds->priv; in sja1105_bridge_vlan_del()
2476 return sja1105_commit_pvid(ds, port); in sja1105_bridge_vlan_del()
2479 static int sja1105_dsa_8021q_vlan_add(struct dsa_switch *ds, int port, u16 vid, in sja1105_dsa_8021q_vlan_add() argument
2482 struct sja1105_private *priv = ds->priv; in sja1105_dsa_8021q_vlan_add()
2489 if (dsa_is_user_port(ds, port)) in sja1105_dsa_8021q_vlan_add()
2499 return sja1105_commit_pvid(ds, port); in sja1105_dsa_8021q_vlan_add()
2502 static int sja1105_dsa_8021q_vlan_del(struct dsa_switch *ds, int port, u16 vid) in sja1105_dsa_8021q_vlan_del() argument
2504 struct sja1105_private *priv = ds->priv; in sja1105_dsa_8021q_vlan_del()
2509 static int sja1105_prechangeupper(struct dsa_switch *ds, int port, in sja1105_prechangeupper() argument
2514 struct dsa_switch_tree *dst = ds->dst; in sja1105_prechangeupper()
2536 static void sja1105_port_disable(struct dsa_switch *ds, int port) in sja1105_port_disable() argument
2538 struct sja1105_private *priv = ds->priv; in sja1105_port_disable()
2541 if (!dsa_is_user_port(ds, port)) in sja1105_port_disable()
2548 static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, in sja1105_mgmt_xmit() argument
2552 struct sja1105_private *priv = ds->priv; in sja1105_mgmt_xmit()
2573 dsa_enqueue_skb(skb, dsa_to_port(ds, port)->slave); in sja1105_mgmt_xmit()
2580 dev_err_ratelimited(priv->ds->dev, in sja1105_mgmt_xmit()
2600 dev_err_ratelimited(priv->ds->dev, "xmit timed out\n"); in sja1105_mgmt_xmit()
2628 sja1105_mgmt_xmit(priv->ds, port, 0, skb, !!clone); in sja1105_port_deferred_xmit()
2632 sja1105_ptp_txtstamp_skb(priv->ds, port, clone); in sja1105_port_deferred_xmit()
2641 static int sja1105_set_ageing_time(struct dsa_switch *ds, in sja1105_set_ageing_time() argument
2645 struct sja1105_private *priv = ds->priv; in sja1105_set_ageing_time()
2662 static int sja1105_change_mtu(struct dsa_switch *ds, int port, int new_mtu) in sja1105_change_mtu() argument
2665 struct sja1105_private *priv = ds->priv; in sja1105_change_mtu()
2669 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_change_mtu()
2682 static int sja1105_get_max_mtu(struct dsa_switch *ds, int port) in sja1105_get_max_mtu() argument
2687 static int sja1105_port_setup_tc(struct dsa_switch *ds, int port, in sja1105_port_setup_tc() argument
2693 return sja1105_setup_tc_taprio(ds, port, type_data); in sja1105_port_setup_tc()
2695 return sja1105_setup_tc_cbs(ds, port, type_data); in sja1105_port_setup_tc()
2712 struct dsa_switch *ds = priv->ds; in sja1105_mirror_apply() local
2723 already_enabled = (general_params->mirr_port != ds->num_ports); in sja1105_mirror_apply()
2725 dev_err(priv->ds->dev, in sja1105_mirror_apply()
2737 for (port = 0; port < ds->num_ports; port++) { in sja1105_mirror_apply()
2745 new_mirr_port = ds->num_ports; in sja1105_mirror_apply()
2765 static int sja1105_mirror_add(struct dsa_switch *ds, int port, in sja1105_mirror_add() argument
2769 return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, in sja1105_mirror_add()
2773 static void sja1105_mirror_del(struct dsa_switch *ds, int port, in sja1105_mirror_del() argument
2776 sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, in sja1105_mirror_del()
2780 static int sja1105_port_policer_add(struct dsa_switch *ds, int port, in sja1105_port_policer_add() argument
2784 struct sja1105_private *priv = ds->priv; in sja1105_port_policer_add()
2799 static void sja1105_port_policer_del(struct dsa_switch *ds, int port) in sja1105_port_policer_del() argument
2802 struct sja1105_private *priv = ds->priv; in sja1105_port_policer_del()
2878 static int sja1105_port_pre_bridge_flags(struct dsa_switch *ds, int port, in sja1105_port_pre_bridge_flags() argument
2882 struct sja1105_private *priv = ds->priv; in sja1105_port_pre_bridge_flags()
2903 static int sja1105_port_bridge_flags(struct dsa_switch *ds, int port, in sja1105_port_bridge_flags() argument
2907 struct sja1105_private *priv = ds->priv; in sja1105_port_bridge_flags()
2940 struct dsa_switch *ds = priv->ds; in sja1105_teardown_ports() local
2943 for (port = 0; port < ds->num_ports; port++) { in sja1105_teardown_ports()
2954 struct dsa_switch *ds = priv->ds; in sja1105_setup_ports() local
2958 for (port = 0; port < ds->num_ports; port++) { in sja1105_setup_ports()
2960 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_setup_ports()
2975 dev_err(ds->dev, in sja1105_setup_ports()
3003 static int sja1105_setup(struct dsa_switch *ds) in sja1105_setup() argument
3005 struct sja1105_private *priv = ds->priv; in sja1105_setup()
3011 dev_err(ds->dev, in sja1105_setup()
3021 dev_err(ds->dev, "Failed to load static config: %d\n", rc); in sja1105_setup()
3029 dev_err(ds->dev, in sja1105_setup()
3040 sja1105_tas_setup(ds); in sja1105_setup()
3041 sja1105_flower_setup(ds); in sja1105_setup()
3043 rc = sja1105_ptp_clock_register(ds); in sja1105_setup()
3045 dev_err(ds->dev, "Failed to register PTP clock: %d\n", rc); in sja1105_setup()
3049 rc = sja1105_mdiobus_register(ds); in sja1105_setup()
3051 dev_err(ds->dev, "Failed to register MDIO bus: %pe\n", in sja1105_setup()
3056 rc = sja1105_devlink_setup(ds); in sja1105_setup()
3061 rc = dsa_tag_8021q_register(ds, htons(ETH_P_8021Q)); in sja1105_setup()
3074 ds->vlan_filtering_is_global = true; in sja1105_setup()
3075 ds->untag_bridge_pvid = true; in sja1105_setup()
3077 ds->num_fwd_offloading_bridges = 7; in sja1105_setup()
3080 ds->num_tx_queues = SJA1105_NUM_TC; in sja1105_setup()
3082 ds->mtu_enforcement_ingress = true; in sja1105_setup()
3083 ds->assisted_learning_on_cpu_port = true; in sja1105_setup()
3088 sja1105_devlink_teardown(ds); in sja1105_setup()
3090 sja1105_mdiobus_unregister(ds); in sja1105_setup()
3092 sja1105_ptp_clock_unregister(ds); in sja1105_setup()
3094 sja1105_flower_teardown(ds); in sja1105_setup()
3095 sja1105_tas_teardown(ds); in sja1105_setup()
3103 static void sja1105_teardown(struct dsa_switch *ds) in sja1105_teardown() argument
3105 struct sja1105_private *priv = ds->priv; in sja1105_teardown()
3108 dsa_tag_8021q_unregister(ds); in sja1105_teardown()
3111 sja1105_devlink_teardown(ds); in sja1105_teardown()
3112 sja1105_mdiobus_unregister(ds); in sja1105_teardown()
3113 sja1105_ptp_clock_unregister(ds); in sja1105_teardown()
3114 sja1105_flower_teardown(ds); in sja1105_teardown()
3115 sja1105_tas_teardown(ds); in sja1105_teardown()
3224 struct dsa_switch *ds; in sja1105_probe() local
3295 ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); in sja1105_probe()
3296 if (!ds) in sja1105_probe()
3299 ds->dev = dev; in sja1105_probe()
3300 ds->num_ports = priv->info->num_ports; in sja1105_probe()
3301 ds->ops = &sja1105_switch_ops; in sja1105_probe()
3302 ds->priv = priv; in sja1105_probe()
3303 priv->ds = ds; in sja1105_probe()
3310 dev_err(ds->dev, "Failed to parse DT: %d\n", rc); in sja1105_probe()
3319 dev_err(ds->dev, "RGMII delay not supported\n"); in sja1105_probe()
3331 return dsa_register_switch(priv->ds); in sja1105_probe()
3341 dsa_unregister_switch(priv->ds); in sja1105_remove()
3355 dsa_switch_shutdown(priv->ds); in sja1105_shutdown()