Lines Matching full:ds
87 static int sja1105_drop_untagged(struct dsa_switch *ds, int port, bool drop) in sja1105_drop_untagged() argument
89 struct sja1105_private *priv = ds->priv; in sja1105_drop_untagged()
118 static int sja1105_commit_pvid(struct dsa_switch *ds, int port) in sja1105_commit_pvid() argument
120 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_commit_pvid()
122 struct sja1105_private *priv = ds->priv; in sja1105_commit_pvid()
153 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_commit_pvid()
156 return sja1105_drop_untagged(ds, port, drop_untagged); in sja1105_commit_pvid()
201 struct dsa_switch *ds = priv->ds; in sja1105_init_mac_settings() local
222 list_for_each_entry(dp, &ds->dst->ports, list) { in sja1105_init_mac_settings()
223 if (dp->ds != ds) in sja1105_init_mac_settings()
252 struct dsa_switch *ds = priv->ds; in sja1105_init_mii_settings() local
274 for (i = 0; i < ds->num_ports; i++) { in sja1105_init_mii_settings()
277 if (dsa_is_unused_port(priv->ds, i)) in sja1105_init_mii_settings()
378 for (port = 0; port < priv->ds->num_ports; port++) in sja1105_init_static_fdb()
379 if (!dsa_is_unused_port(priv->ds, port)) in sja1105_init_static_fdb()
415 struct dsa_switch *ds = priv->ds; in sja1105_init_l2_lookup_params() local
420 for (port = 0; port < ds->num_ports; port++) in sja1105_init_l2_lookup_params()
421 if (!dsa_is_unused_port(ds, port)) in sja1105_init_l2_lookup_params()
426 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_lookup_params()
427 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_lookup_params()
473 struct dsa_switch *ds = priv->ds; in sja1105_init_static_vlan() local
490 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_static_vlan()
491 if (dsa_is_unused_port(ds, port)) in sja1105_init_static_vlan()
498 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) { in sja1105_init_static_vlan()
511 struct dsa_switch *ds = priv->ds; in sja1105_init_l2_forwarding() local
538 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_forwarding()
539 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_forwarding()
549 for (from = 0; from < ds->num_ports; from++) { in sja1105_init_l2_forwarding()
550 if (!dsa_is_user_port(ds, from)) in sja1105_init_l2_forwarding()
553 for (to = 0; to < ds->num_ports; to++) { in sja1105_init_l2_forwarding()
554 if (!dsa_is_cpu_port(ds, to) && in sja1105_init_l2_forwarding()
555 !dsa_is_dsa_port(ds, to)) in sja1105_init_l2_forwarding()
569 for (from = 0; from < ds->num_ports; from++) { in sja1105_init_l2_forwarding()
570 if (!dsa_is_cpu_port(ds, from) && !dsa_is_dsa_port(ds, from)) in sja1105_init_l2_forwarding()
573 for (to = 0; to < ds->num_ports; to++) { in sja1105_init_l2_forwarding()
574 if (dsa_is_unused_port(ds, to)) in sja1105_init_l2_forwarding()
595 dst = ds->dst; in sja1105_init_l2_forwarding()
598 if (dl->dp->ds != ds || dl->link_dp->cpu_dp == dl->dp->cpu_dp) in sja1105_init_l2_forwarding()
602 to = dsa_upstream_port(ds, from); in sja1105_init_l2_forwarding()
604 dev_warn(ds->dev, in sja1105_init_l2_forwarding()
617 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_forwarding()
618 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_forwarding()
629 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_forwarding()
630 if (dsa_is_unused_port(ds, port)) in sja1105_init_l2_forwarding()
633 l2fwd[ds->num_ports + tc].vlan_pmap[port] = tc; in sja1105_init_l2_forwarding()
636 l2fwd[ds->num_ports + tc].type_egrpcp2outputq = true; in sja1105_init_l2_forwarding()
645 struct dsa_switch *ds = priv->ds; in sja1110_init_pcp_remapping() local
670 for (port = 0; port < ds->num_ports; port++) { in sja1110_init_pcp_remapping()
671 if (dsa_is_unused_port(ds, port)) in sja1110_init_pcp_remapping()
794 struct dsa_switch *ds = priv->ds; in sja1105_init_topology() local
801 general_params->host_port = ds->num_ports; in sja1105_init_topology()
814 general_params->casc_port = ds->num_ports; in sja1105_init_topology()
816 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_topology()
817 bool is_upstream = dsa_is_upstream_port(ds, port); in sja1105_init_topology()
818 bool is_dsa_link = dsa_is_dsa_port(ds, port); in sja1105_init_topology()
824 if (general_params->host_port == ds->num_ports) { in sja1105_init_topology()
827 dev_err(ds->dev, in sja1105_init_topology()
838 } else if (general_params->casc_port == ds->num_ports) { in sja1105_init_topology()
841 dev_err(ds->dev, in sja1105_init_topology()
849 if (general_params->host_port == ds->num_ports) { in sja1105_init_topology()
850 dev_err(ds->dev, "No host port configured\n"); in sja1105_init_topology()
862 .switchid = priv->ds->index, in sja1105_init_general_params()
876 .mirr_port = priv->ds->num_ports, in sja1105_init_general_params()
1010 struct dsa_switch *ds = priv->ds; in sja1105_init_l2_policing() local
1032 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_policing()
1033 int mcast = (ds->num_ports * (SJA1105_NUM_TC + 1)) + port; in sja1105_init_l2_policing()
1034 int bcast = (ds->num_ports * SJA1105_NUM_TC) + port; in sja1105_init_l2_policing()
1046 for (port = 0; port < ds->num_ports; port++) { in sja1105_init_l2_policing()
1049 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_init_l2_policing()
1297 dev_err(priv->ds->dev, "Invalid speed %iMbps\n", speed_mbps); in sja1105_set_port_speed()
1324 struct device *dev = priv->ds->dev; in sja1105_set_port_config()
1359 struct sja1105_private *priv = dp->ds->priv; in sja1105_mac_select_pcs()
1376 sja1105_inhibit_tx(dp->ds->priv, BIT(dp->index), true); in sja1105_mac_link_down()
1387 struct sja1105_private *priv = dp->ds->priv; in sja1105_mac_link_up()
1396 static void sja1105_phylink_get_caps(struct dsa_switch *ds, int port, in sja1105_phylink_get_caps() argument
1399 struct sja1105_private *priv = ds->priv; in sja1105_phylink_get_caps()
1553 int sja1105et_fdb_add(struct dsa_switch *ds, int port, in sja1105et_fdb_add() argument
1557 struct sja1105_private *priv = ds->priv; in sja1105et_fdb_add()
1558 struct device *dev = ds->dev; in sja1105et_fdb_add()
1638 int sja1105et_fdb_del(struct dsa_switch *ds, int port, in sja1105et_fdb_del() argument
1642 struct sja1105_private *priv = ds->priv; in sja1105et_fdb_del()
1673 int sja1105pqrs_fdb_add(struct dsa_switch *ds, int port, in sja1105pqrs_fdb_add() argument
1677 struct sja1105_private *priv = ds->priv; in sja1105pqrs_fdb_add()
1718 dev_err(ds->dev, "FDB is full, cannot add entry.\n"); in sja1105pqrs_fdb_add()
1748 dev_err(ds->dev, in sja1105pqrs_fdb_add()
1764 int sja1105pqrs_fdb_del(struct dsa_switch *ds, int port, in sja1105pqrs_fdb_del() argument
1768 struct sja1105_private *priv = ds->priv; in sja1105pqrs_fdb_del()
1801 static int sja1105_fdb_add(struct dsa_switch *ds, int port, in sja1105_fdb_add() argument
1805 struct sja1105_private *priv = ds->priv; in sja1105_fdb_add()
1822 rc = priv->info->fdb_add_cmd(ds, port, addr, vid); in sja1105_fdb_add()
1828 static int __sja1105_fdb_del(struct dsa_switch *ds, int port, in __sja1105_fdb_del() argument
1832 struct sja1105_private *priv = ds->priv; in __sja1105_fdb_del()
1847 return priv->info->fdb_del_cmd(ds, port, addr, vid); in __sja1105_fdb_del()
1850 static int sja1105_fdb_del(struct dsa_switch *ds, int port, in sja1105_fdb_del() argument
1854 struct sja1105_private *priv = ds->priv; in sja1105_fdb_del()
1858 rc = __sja1105_fdb_del(ds, port, addr, vid, db); in sja1105_fdb_del()
1864 static int sja1105_fdb_dump(struct dsa_switch *ds, int port, in sja1105_fdb_dump() argument
1867 struct sja1105_private *priv = ds->priv; in sja1105_fdb_dump()
1868 struct device *dev = ds->dev; in sja1105_fdb_dump()
1913 static void sja1105_fast_age(struct dsa_switch *ds, int port) in sja1105_fast_age() argument
1915 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_fast_age()
1916 struct sja1105_private *priv = ds->priv; in sja1105_fast_age()
1939 dev_err(ds->dev, "Failed to read FDB: %pe\n", in sja1105_fast_age()
1953 rc = __sja1105_fdb_del(ds, port, macaddr, l2_lookup.vlanid, db); in sja1105_fast_age()
1955 dev_err(ds->dev, in sja1105_fast_age()
1965 static int sja1105_mdb_add(struct dsa_switch *ds, int port, in sja1105_mdb_add() argument
1969 return sja1105_fdb_add(ds, port, mdb->addr, mdb->vid, db); in sja1105_mdb_add()
1972 static int sja1105_mdb_del(struct dsa_switch *ds, int port, in sja1105_mdb_del() argument
1976 return sja1105_fdb_del(ds, port, mdb->addr, mdb->vid, db); in sja1105_mdb_del()
1988 struct dsa_switch *ds = priv->ds; in sja1105_manage_flood_domains() local
1993 for (from = 0; from < ds->num_ports; from++) { in sja1105_manage_flood_domains()
1996 for (to = 0; to < priv->ds->num_ports; to++) { in sja1105_manage_flood_domains()
2023 static int sja1105_bridge_member(struct dsa_switch *ds, int port, in sja1105_bridge_member() argument
2027 struct sja1105_private *priv = ds->priv; in sja1105_bridge_member()
2032 for (i = 0; i < ds->num_ports; i++) { in sja1105_bridge_member()
2036 if (!dsa_is_user_port(ds, i)) in sja1105_bridge_member()
2049 if (!dsa_port_offloads_bridge(dsa_to_port(ds, i), &bridge)) in sja1105_bridge_member()
2065 rc = sja1105_commit_pvid(ds, port); in sja1105_bridge_member()
2072 static void sja1105_bridge_stp_state_set(struct dsa_switch *ds, int port, in sja1105_bridge_stp_state_set() argument
2075 struct dsa_port *dp = dsa_to_port(ds, port); in sja1105_bridge_stp_state_set()
2076 struct sja1105_private *priv = ds->priv; in sja1105_bridge_stp_state_set()
2109 dev_err(ds->dev, "invalid STP state: %d\n", state); in sja1105_bridge_stp_state_set()
2117 static int sja1105_bridge_join(struct dsa_switch *ds, int port, in sja1105_bridge_join() argument
2124 rc = sja1105_bridge_member(ds, port, bridge, true); in sja1105_bridge_join()
2128 rc = dsa_tag_8021q_bridge_join(ds, port, bridge, tx_fwd_offload, in sja1105_bridge_join()
2131 sja1105_bridge_member(ds, port, bridge, false); in sja1105_bridge_join()
2138 static void sja1105_bridge_leave(struct dsa_switch *ds, int port, in sja1105_bridge_leave() argument
2141 dsa_tag_8021q_bridge_leave(ds, port, bridge); in sja1105_bridge_leave()
2142 sja1105_bridge_member(ds, port, bridge, false); in sja1105_bridge_leave()
2200 static int sja1105_setup_tc_cbs(struct dsa_switch *ds, int port, in sja1105_setup_tc_cbs() argument
2203 struct sja1105_private *priv = ds->priv; in sja1105_setup_tc_cbs()
2297 struct dsa_switch *ds = priv->ds; in sja1105_static_config_reload() local
2313 for (i = 0; i < ds->num_ports; i++) { in sja1105_static_config_reload()
2325 rc = __sja1105_ptp_gettimex(ds, &now, &ptp_sts_before); in sja1105_static_config_reload()
2338 rc = __sja1105_ptp_settime(ds, 0, &ptp_sts_after); in sja1105_static_config_reload()
2355 __sja1105_ptp_adjtime(ds, now); in sja1105_static_config_reload()
2359 dev_info(priv->ds->dev, in sja1105_static_config_reload()
2373 for (i = 0; i < ds->num_ports; i++) { in sja1105_static_config_reload()
2423 sja1105_get_tag_protocol(struct dsa_switch *ds, int port, in sja1105_get_tag_protocol() argument
2426 struct sja1105_private *priv = ds->priv; in sja1105_get_tag_protocol()
2435 int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled, in sja1105_vlan_filtering() argument
2439 struct sja1105_private *priv = ds->priv; in sja1105_vlan_filtering()
2470 for (port = 0; port < ds->num_ports; port++) { in sja1105_vlan_filtering()
2471 if (dsa_is_unused_port(ds, port)) in sja1105_vlan_filtering()
2474 rc = sja1105_commit_pvid(ds, port); in sja1105_vlan_filtering()
2566 static int sja1105_bridge_vlan_add(struct dsa_switch *ds, int port, in sja1105_bridge_vlan_add() argument
2570 struct sja1105_private *priv = ds->priv; in sja1105_bridge_vlan_add()
2583 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_bridge_vlan_add()
2593 return sja1105_commit_pvid(ds, port); in sja1105_bridge_vlan_add()
2596 static int sja1105_bridge_vlan_del(struct dsa_switch *ds, int port, in sja1105_bridge_vlan_del() argument
2599 struct sja1105_private *priv = ds->priv; in sja1105_bridge_vlan_del()
2609 return sja1105_commit_pvid(ds, port); in sja1105_bridge_vlan_del()
2612 static int sja1105_dsa_8021q_vlan_add(struct dsa_switch *ds, int port, u16 vid, in sja1105_dsa_8021q_vlan_add() argument
2615 struct sja1105_private *priv = ds->priv; in sja1105_dsa_8021q_vlan_add()
2622 if (dsa_is_user_port(ds, port)) in sja1105_dsa_8021q_vlan_add()
2632 return sja1105_commit_pvid(ds, port); in sja1105_dsa_8021q_vlan_add()
2635 static int sja1105_dsa_8021q_vlan_del(struct dsa_switch *ds, int port, u16 vid) in sja1105_dsa_8021q_vlan_del() argument
2637 struct sja1105_private *priv = ds->priv; in sja1105_dsa_8021q_vlan_del()
2642 static int sja1105_prechangeupper(struct dsa_switch *ds, int port, in sja1105_prechangeupper() argument
2647 struct dsa_switch_tree *dst = ds->dst; in sja1105_prechangeupper()
2670 static int sja1105_mgmt_xmit(struct dsa_switch *ds, int port, int slot, in sja1105_mgmt_xmit() argument
2674 struct sja1105_private *priv = ds->priv; in sja1105_mgmt_xmit()
2695 dsa_enqueue_skb(skb, dsa_to_port(ds, port)->user); in sja1105_mgmt_xmit()
2702 dev_err_ratelimited(priv->ds->dev, in sja1105_mgmt_xmit()
2722 dev_err_ratelimited(priv->ds->dev, "xmit timed out\n"); in sja1105_mgmt_xmit()
2739 struct dsa_switch *ds = xmit_work->dp->ds; in sja1105_port_deferred_xmit() local
2740 struct sja1105_private *priv = ds->priv; in sja1105_port_deferred_xmit()
2747 sja1105_mgmt_xmit(ds, port, 0, skb, !!clone); in sja1105_port_deferred_xmit()
2751 sja1105_ptp_txtstamp_skb(ds, port, clone); in sja1105_port_deferred_xmit()
2758 static int sja1105_connect_tag_protocol(struct dsa_switch *ds, in sja1105_connect_tag_protocol() argument
2761 struct sja1105_private *priv = ds->priv; in sja1105_connect_tag_protocol()
2767 tagger_data = sja1105_tagger_data(ds); in sja1105_connect_tag_protocol()
2777 static int sja1105_set_ageing_time(struct dsa_switch *ds, in sja1105_set_ageing_time() argument
2781 struct sja1105_private *priv = ds->priv; in sja1105_set_ageing_time()
2798 static int sja1105_change_mtu(struct dsa_switch *ds, int port, int new_mtu) in sja1105_change_mtu() argument
2801 struct sja1105_private *priv = ds->priv; in sja1105_change_mtu()
2805 if (dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)) in sja1105_change_mtu()
2818 static int sja1105_get_max_mtu(struct dsa_switch *ds, int port) in sja1105_get_max_mtu() argument
2823 static int sja1105_port_setup_tc(struct dsa_switch *ds, int port, in sja1105_port_setup_tc() argument
2829 return sja1105_setup_tc_taprio(ds, port, type_data); in sja1105_port_setup_tc()
2831 return sja1105_setup_tc_cbs(ds, port, type_data); in sja1105_port_setup_tc()
2848 struct dsa_switch *ds = priv->ds; in sja1105_mirror_apply() local
2859 already_enabled = (general_params->mirr_port != ds->num_ports); in sja1105_mirror_apply()
2861 dev_err(priv->ds->dev, in sja1105_mirror_apply()
2873 for (port = 0; port < ds->num_ports; port++) { in sja1105_mirror_apply()
2881 new_mirr_port = ds->num_ports; in sja1105_mirror_apply()
2901 static int sja1105_mirror_add(struct dsa_switch *ds, int port, in sja1105_mirror_add() argument
2905 return sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, in sja1105_mirror_add()
2909 static void sja1105_mirror_del(struct dsa_switch *ds, int port, in sja1105_mirror_del() argument
2912 sja1105_mirror_apply(ds->priv, port, mirror->to_local_port, in sja1105_mirror_del()
2916 static int sja1105_port_policer_add(struct dsa_switch *ds, int port, in sja1105_port_policer_add() argument
2920 struct sja1105_private *priv = ds->priv; in sja1105_port_policer_add()
2935 static void sja1105_port_policer_del(struct dsa_switch *ds, int port) in sja1105_port_policer_del() argument
2938 struct sja1105_private *priv = ds->priv; in sja1105_port_policer_del()
3020 static int sja1105_port_pre_bridge_flags(struct dsa_switch *ds, int port, in sja1105_port_pre_bridge_flags() argument
3024 struct sja1105_private *priv = ds->priv; in sja1105_port_pre_bridge_flags()
3045 static int sja1105_port_bridge_flags(struct dsa_switch *ds, int port, in sja1105_port_bridge_flags() argument
3049 struct sja1105_private *priv = ds->priv; in sja1105_port_bridge_flags()
3092 static int sja1105_setup(struct dsa_switch *ds) in sja1105_setup() argument
3094 struct sja1105_private *priv = ds->priv; in sja1105_setup()
3100 dev_err(ds->dev, in sja1105_setup()
3110 dev_err(ds->dev, "Failed to load static config: %d\n", rc); in sja1105_setup()
3118 dev_err(ds->dev, in sja1105_setup()
3125 sja1105_tas_setup(ds); in sja1105_setup()
3126 sja1105_flower_setup(ds); in sja1105_setup()
3128 rc = sja1105_ptp_clock_register(ds); in sja1105_setup()
3130 dev_err(ds->dev, "Failed to register PTP clock: %d\n", rc); in sja1105_setup()
3134 rc = sja1105_mdiobus_register(ds); in sja1105_setup()
3136 dev_err(ds->dev, "Failed to register MDIO bus: %pe\n", in sja1105_setup()
3141 rc = sja1105_devlink_setup(ds); in sja1105_setup()
3146 rc = dsa_tag_8021q_register(ds, htons(ETH_P_8021Q)); in sja1105_setup()
3159 ds->vlan_filtering_is_global = true; in sja1105_setup()
3160 ds->fdb_isolation = true; in sja1105_setup()
3161 ds->max_num_bridges = DSA_TAG_8021Q_MAX_NUM_BRIDGES; in sja1105_setup()
3164 ds->num_tx_queues = SJA1105_NUM_TC; in sja1105_setup()
3166 ds->mtu_enforcement_ingress = true; in sja1105_setup()
3167 ds->assisted_learning_on_cpu_port = true; in sja1105_setup()
3172 sja1105_devlink_teardown(ds); in sja1105_setup()
3174 sja1105_mdiobus_unregister(ds); in sja1105_setup()
3176 sja1105_ptp_clock_unregister(ds); in sja1105_setup()
3178 sja1105_flower_teardown(ds); in sja1105_setup()
3179 sja1105_tas_teardown(ds); in sja1105_setup()
3186 static void sja1105_teardown(struct dsa_switch *ds) in sja1105_teardown() argument
3188 struct sja1105_private *priv = ds->priv; in sja1105_teardown()
3191 dsa_tag_8021q_unregister(ds); in sja1105_teardown()
3194 sja1105_devlink_teardown(ds); in sja1105_teardown()
3195 sja1105_mdiobus_unregister(ds); in sja1105_teardown()
3196 sja1105_ptp_clock_unregister(ds); in sja1105_teardown()
3197 sja1105_flower_teardown(ds); in sja1105_teardown()
3198 sja1105_tas_teardown(ds); in sja1105_teardown()
3308 struct dsa_switch *ds; in sja1105_probe() local
3376 ds = devm_kzalloc(dev, sizeof(*ds), GFP_KERNEL); in sja1105_probe()
3377 if (!ds) in sja1105_probe()
3380 ds->dev = dev; in sja1105_probe()
3381 ds->num_ports = priv->info->num_ports; in sja1105_probe()
3382 ds->ops = &sja1105_switch_ops; in sja1105_probe()
3383 ds->phylink_mac_ops = &sja1105_phylink_mac_ops; in sja1105_probe()
3384 ds->priv = priv; in sja1105_probe()
3385 priv->ds = ds; in sja1105_probe()
3395 dev_err(ds->dev, "Failed to parse DT: %d\n", rc); in sja1105_probe()
3407 return dsa_register_switch(priv->ds); in sja1105_probe()
3417 dsa_unregister_switch(priv->ds); in sja1105_remove()
3427 dsa_switch_shutdown(priv->ds); in sja1105_shutdown()