Skip to content

Commit 0a7bdbc

Browse files
vladimirolteandavem330
authored andcommitted
net: dsa: sja1105: move devlink param code to sja1105_devlink.c
We'll have more devlink code soon. Group it together in a separate translation object. Signed-off-by: Vladimir Oltean <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent e666a4c commit 0a7bdbc

File tree

4 files changed

+132
-103
lines changed

4 files changed

+132
-103
lines changed

drivers/net/dsa/sja1105/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ sja1105-objs := \
66
sja1105_main.o \
77
sja1105_flower.o \
88
sja1105_ethtool.o \
9+
sja1105_devlink.o \
910
sja1105_clocking.o \
1011
sja1105_static_config.o \
1112
sja1105_dynamic_config.o \

drivers/net/dsa/sja1105/sja1105.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,17 @@ enum sja1105_reset_reason {
244244

245245
int sja1105_static_config_reload(struct sja1105_private *priv,
246246
enum sja1105_reset_reason reason);
247-
247+
int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled);
248248
void sja1105_frame_memory_partitioning(struct sja1105_private *priv);
249249

250+
/* From sja1105_devlink.c */
251+
int sja1105_devlink_setup(struct dsa_switch *ds);
252+
void sja1105_devlink_teardown(struct dsa_switch *ds);
253+
int sja1105_devlink_param_get(struct dsa_switch *ds, u32 id,
254+
struct devlink_param_gset_ctx *ctx);
255+
int sja1105_devlink_param_set(struct dsa_switch *ds, u32 id,
256+
struct devlink_param_gset_ctx *ctx);
257+
250258
/* From sja1105_spi.c */
251259
int sja1105_xfer_buf(const struct sja1105_private *priv,
252260
sja1105_spi_rw_mode_t rw, u64 reg_addr,
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
/* Copyright (c) 2018-2019, Vladimir Oltean <[email protected]>
3+
*/
4+
#include "sja1105.h"
5+
6+
static int sja1105_best_effort_vlan_filtering_get(struct sja1105_private *priv,
7+
bool *be_vlan)
8+
{
9+
*be_vlan = priv->best_effort_vlan_filtering;
10+
11+
return 0;
12+
}
13+
14+
static int sja1105_best_effort_vlan_filtering_set(struct sja1105_private *priv,
15+
bool be_vlan)
16+
{
17+
struct dsa_switch *ds = priv->ds;
18+
bool vlan_filtering;
19+
int port;
20+
int rc;
21+
22+
priv->best_effort_vlan_filtering = be_vlan;
23+
24+
rtnl_lock();
25+
for (port = 0; port < ds->num_ports; port++) {
26+
struct dsa_port *dp;
27+
28+
if (!dsa_is_user_port(ds, port))
29+
continue;
30+
31+
dp = dsa_to_port(ds, port);
32+
vlan_filtering = dsa_port_is_vlan_filtering(dp);
33+
34+
rc = sja1105_vlan_filtering(ds, port, vlan_filtering);
35+
if (rc)
36+
break;
37+
}
38+
rtnl_unlock();
39+
40+
return rc;
41+
}
42+
43+
enum sja1105_devlink_param_id {
44+
SJA1105_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
45+
SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
46+
};
47+
48+
int sja1105_devlink_param_get(struct dsa_switch *ds, u32 id,
49+
struct devlink_param_gset_ctx *ctx)
50+
{
51+
struct sja1105_private *priv = ds->priv;
52+
int err;
53+
54+
switch (id) {
55+
case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
56+
err = sja1105_best_effort_vlan_filtering_get(priv,
57+
&ctx->val.vbool);
58+
break;
59+
default:
60+
err = -EOPNOTSUPP;
61+
break;
62+
}
63+
64+
return err;
65+
}
66+
67+
int sja1105_devlink_param_set(struct dsa_switch *ds, u32 id,
68+
struct devlink_param_gset_ctx *ctx)
69+
{
70+
struct sja1105_private *priv = ds->priv;
71+
int err;
72+
73+
switch (id) {
74+
case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
75+
err = sja1105_best_effort_vlan_filtering_set(priv,
76+
ctx->val.vbool);
77+
break;
78+
default:
79+
err = -EOPNOTSUPP;
80+
break;
81+
}
82+
83+
return err;
84+
}
85+
86+
static const struct devlink_param sja1105_devlink_params[] = {
87+
DSA_DEVLINK_PARAM_DRIVER(SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
88+
"best_effort_vlan_filtering",
89+
DEVLINK_PARAM_TYPE_BOOL,
90+
BIT(DEVLINK_PARAM_CMODE_RUNTIME)),
91+
};
92+
93+
static int sja1105_setup_devlink_params(struct dsa_switch *ds)
94+
{
95+
return dsa_devlink_params_register(ds, sja1105_devlink_params,
96+
ARRAY_SIZE(sja1105_devlink_params));
97+
}
98+
99+
static void sja1105_teardown_devlink_params(struct dsa_switch *ds)
100+
{
101+
dsa_devlink_params_unregister(ds, sja1105_devlink_params,
102+
ARRAY_SIZE(sja1105_devlink_params));
103+
}
104+
105+
int sja1105_devlink_setup(struct dsa_switch *ds)
106+
{
107+
int rc;
108+
109+
rc = sja1105_setup_devlink_params(ds);
110+
if (rc)
111+
return rc;
112+
113+
return 0;
114+
}
115+
116+
void sja1105_devlink_teardown(struct dsa_switch *ds)
117+
{
118+
sja1105_teardown_devlink_params(ds);
119+
}

drivers/net/dsa/sja1105/sja1105_main.c

Lines changed: 3 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -2634,7 +2634,7 @@ static int sja1105_vlan_prepare(struct dsa_switch *ds, int port,
26342634
* which can only be partially reconfigured at runtime (and not the TPID).
26352635
* So a switch reset is required.
26362636
*/
2637-
static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
2637+
int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled)
26382638
{
26392639
struct sja1105_l2_lookup_params_entry *l2_lookup_params;
26402640
struct sja1105_general_params_entry *general_params;
@@ -2864,105 +2864,6 @@ static const struct dsa_8021q_ops sja1105_dsa_8021q_ops = {
28642864
.vlan_del = sja1105_dsa_8021q_vlan_del,
28652865
};
28662866

2867-
static int sja1105_best_effort_vlan_filtering_get(struct sja1105_private *priv,
2868-
bool *be_vlan)
2869-
{
2870-
*be_vlan = priv->best_effort_vlan_filtering;
2871-
2872-
return 0;
2873-
}
2874-
2875-
static int sja1105_best_effort_vlan_filtering_set(struct sja1105_private *priv,
2876-
bool be_vlan)
2877-
{
2878-
struct dsa_switch *ds = priv->ds;
2879-
bool vlan_filtering;
2880-
int port;
2881-
int rc;
2882-
2883-
priv->best_effort_vlan_filtering = be_vlan;
2884-
2885-
rtnl_lock();
2886-
for (port = 0; port < ds->num_ports; port++) {
2887-
struct dsa_port *dp;
2888-
2889-
if (!dsa_is_user_port(ds, port))
2890-
continue;
2891-
2892-
dp = dsa_to_port(ds, port);
2893-
vlan_filtering = dsa_port_is_vlan_filtering(dp);
2894-
2895-
rc = sja1105_vlan_filtering(ds, port, vlan_filtering);
2896-
if (rc)
2897-
break;
2898-
}
2899-
rtnl_unlock();
2900-
2901-
return rc;
2902-
}
2903-
2904-
enum sja1105_devlink_param_id {
2905-
SJA1105_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
2906-
SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
2907-
};
2908-
2909-
static int sja1105_devlink_param_get(struct dsa_switch *ds, u32 id,
2910-
struct devlink_param_gset_ctx *ctx)
2911-
{
2912-
struct sja1105_private *priv = ds->priv;
2913-
int err;
2914-
2915-
switch (id) {
2916-
case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
2917-
err = sja1105_best_effort_vlan_filtering_get(priv,
2918-
&ctx->val.vbool);
2919-
break;
2920-
default:
2921-
err = -EOPNOTSUPP;
2922-
break;
2923-
}
2924-
2925-
return err;
2926-
}
2927-
2928-
static int sja1105_devlink_param_set(struct dsa_switch *ds, u32 id,
2929-
struct devlink_param_gset_ctx *ctx)
2930-
{
2931-
struct sja1105_private *priv = ds->priv;
2932-
int err;
2933-
2934-
switch (id) {
2935-
case SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING:
2936-
err = sja1105_best_effort_vlan_filtering_set(priv,
2937-
ctx->val.vbool);
2938-
break;
2939-
default:
2940-
err = -EOPNOTSUPP;
2941-
break;
2942-
}
2943-
2944-
return err;
2945-
}
2946-
2947-
static const struct devlink_param sja1105_devlink_params[] = {
2948-
DSA_DEVLINK_PARAM_DRIVER(SJA1105_DEVLINK_PARAM_ID_BEST_EFFORT_VLAN_FILTERING,
2949-
"best_effort_vlan_filtering",
2950-
DEVLINK_PARAM_TYPE_BOOL,
2951-
BIT(DEVLINK_PARAM_CMODE_RUNTIME)),
2952-
};
2953-
2954-
static int sja1105_setup_devlink_params(struct dsa_switch *ds)
2955-
{
2956-
return dsa_devlink_params_register(ds, sja1105_devlink_params,
2957-
ARRAY_SIZE(sja1105_devlink_params));
2958-
}
2959-
2960-
static void sja1105_teardown_devlink_params(struct dsa_switch *ds)
2961-
{
2962-
dsa_devlink_params_unregister(ds, sja1105_devlink_params,
2963-
ARRAY_SIZE(sja1105_devlink_params));
2964-
}
2965-
29662867
/* The programming model for the SJA1105 switch is "all-at-once" via static
29672868
* configuration tables. Some of these can be dynamically modified at runtime,
29682869
* but not the xMII mode parameters table.
@@ -3030,7 +2931,7 @@ static int sja1105_setup(struct dsa_switch *ds)
30302931

30312932
ds->configure_vlan_while_not_filtering = true;
30322933

3033-
rc = sja1105_setup_devlink_params(ds);
2934+
rc = sja1105_devlink_setup(ds);
30342935
if (rc < 0)
30352936
return rc;
30362937

@@ -3061,7 +2962,7 @@ static void sja1105_teardown(struct dsa_switch *ds)
30612962
kthread_destroy_worker(sp->xmit_worker);
30622963
}
30632964

3064-
sja1105_teardown_devlink_params(ds);
2965+
sja1105_devlink_teardown(ds);
30652966
sja1105_flower_teardown(ds);
30662967
sja1105_tas_teardown(ds);
30672968
sja1105_ptp_clock_unregister(ds);

0 commit comments

Comments
 (0)