Skip to content

Commit 94f94d4

Browse files
vladimirolteandavem330
authored andcommitted
net: dsa: sja1105: add static tables for virtual links
This patch adds the register definitions for the: - VL Lookup Table - VL Policing Table - VL Forwarding Table - VL Forwarding Parameters Table These are needed in order to perform TTEthernet operations: QoS classification, flow-based policing and/or frame redirecting with the switch. Signed-off-by: Vladimir Oltean <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent e1eea81 commit 94f94d4

File tree

4 files changed

+318
-0
lines changed

4 files changed

+318
-0
lines changed

drivers/net/dsa/sja1105/sja1105.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,8 @@ size_t sja1105pqrs_mac_config_entry_packing(void *buf, void *entry_ptr,
254254
enum packing_op op);
255255
size_t sja1105pqrs_avb_params_entry_packing(void *buf, void *entry_ptr,
256256
enum packing_op op);
257+
size_t sja1105_vl_lookup_entry_packing(void *buf, void *entry_ptr,
258+
enum packing_op op);
257259

258260
/* From sja1105_flower.c */
259261
int sja1105_cls_flower_del(struct dsa_switch *ds, int port,

drivers/net/dsa/sja1105/sja1105_dynamic_config.c

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@
9797

9898
#define SJA1105_SIZE_DYN_CMD 4
9999

100+
#define SJA1105ET_SJA1105_SIZE_VL_LOOKUP_DYN_CMD \
101+
SJA1105_SIZE_DYN_CMD
102+
103+
#define SJA1105PQRS_SJA1105_SIZE_VL_LOOKUP_DYN_CMD \
104+
(SJA1105_SIZE_DYN_CMD + SJA1105_SIZE_VL_LOOKUP_ENTRY)
105+
100106
#define SJA1105ET_SIZE_MAC_CONFIG_DYN_ENTRY \
101107
SJA1105_SIZE_DYN_CMD
102108

@@ -146,6 +152,29 @@ enum sja1105_hostcmd {
146152
SJA1105_HOSTCMD_INVALIDATE = 4,
147153
};
148154

155+
static void
156+
sja1105_vl_lookup_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd,
157+
enum packing_op op)
158+
{
159+
const int size = SJA1105_SIZE_DYN_CMD;
160+
161+
sja1105_packing(buf, &cmd->valid, 31, 31, size, op);
162+
sja1105_packing(buf, &cmd->errors, 30, 30, size, op);
163+
sja1105_packing(buf, &cmd->rdwrset, 29, 29, size, op);
164+
sja1105_packing(buf, &cmd->index, 9, 0, size, op);
165+
}
166+
167+
static size_t sja1105et_vl_lookup_entry_packing(void *buf, void *entry_ptr,
168+
enum packing_op op)
169+
{
170+
struct sja1105_vl_lookup_entry *entry = entry_ptr;
171+
const int size = SJA1105ET_SJA1105_SIZE_VL_LOOKUP_DYN_CMD;
172+
173+
sja1105_packing(buf, &entry->egrmirr, 21, 17, size, op);
174+
sja1105_packing(buf, &entry->ingrmirr, 16, 16, size, op);
175+
return size;
176+
}
177+
149178
static void
150179
sja1105pqrs_l2_lookup_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd,
151180
enum packing_op op)
@@ -505,6 +534,16 @@ sja1105pqrs_avb_params_cmd_packing(void *buf, struct sja1105_dyn_cmd *cmd,
505534
struct sja1105_dynamic_table_ops sja1105et_dyn_ops[BLK_IDX_MAX_DYN] = {
506535
[BLK_IDX_SCHEDULE] = {0},
507536
[BLK_IDX_SCHEDULE_ENTRY_POINTS] = {0},
537+
[BLK_IDX_VL_LOOKUP] = {
538+
.entry_packing = sja1105et_vl_lookup_entry_packing,
539+
.cmd_packing = sja1105_vl_lookup_cmd_packing,
540+
.access = OP_WRITE,
541+
.max_entry_count = SJA1105_MAX_VL_LOOKUP_COUNT,
542+
.packed_size = SJA1105ET_SJA1105_SIZE_VL_LOOKUP_DYN_CMD,
543+
.addr = 0x35,
544+
},
545+
[BLK_IDX_VL_POLICING] = {0},
546+
[BLK_IDX_VL_FORWARDING] = {0},
508547
[BLK_IDX_L2_LOOKUP] = {
509548
.entry_packing = sja1105et_dyn_l2_lookup_entry_packing,
510549
.cmd_packing = sja1105et_l2_lookup_cmd_packing,
@@ -548,6 +587,7 @@ struct sja1105_dynamic_table_ops sja1105et_dyn_ops[BLK_IDX_MAX_DYN] = {
548587
},
549588
[BLK_IDX_SCHEDULE_PARAMS] = {0},
550589
[BLK_IDX_SCHEDULE_ENTRY_POINTS_PARAMS] = {0},
590+
[BLK_IDX_VL_FORWARDING_PARAMS] = {0},
551591
[BLK_IDX_L2_LOOKUP_PARAMS] = {
552592
.entry_packing = sja1105et_l2_lookup_params_entry_packing,
553593
.cmd_packing = sja1105et_l2_lookup_params_cmd_packing,
@@ -573,6 +613,16 @@ struct sja1105_dynamic_table_ops sja1105et_dyn_ops[BLK_IDX_MAX_DYN] = {
573613
struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN] = {
574614
[BLK_IDX_SCHEDULE] = {0},
575615
[BLK_IDX_SCHEDULE_ENTRY_POINTS] = {0},
616+
[BLK_IDX_VL_LOOKUP] = {
617+
.entry_packing = sja1105_vl_lookup_entry_packing,
618+
.cmd_packing = sja1105_vl_lookup_cmd_packing,
619+
.access = (OP_READ | OP_WRITE),
620+
.max_entry_count = SJA1105_MAX_VL_LOOKUP_COUNT,
621+
.packed_size = SJA1105PQRS_SJA1105_SIZE_VL_LOOKUP_DYN_CMD,
622+
.addr = 0x47,
623+
},
624+
[BLK_IDX_VL_POLICING] = {0},
625+
[BLK_IDX_VL_FORWARDING] = {0},
576626
[BLK_IDX_L2_LOOKUP] = {
577627
.entry_packing = sja1105pqrs_dyn_l2_lookup_entry_packing,
578628
.cmd_packing = sja1105pqrs_l2_lookup_cmd_packing,
@@ -616,6 +666,7 @@ struct sja1105_dynamic_table_ops sja1105pqrs_dyn_ops[BLK_IDX_MAX_DYN] = {
616666
},
617667
[BLK_IDX_SCHEDULE_PARAMS] = {0},
618668
[BLK_IDX_SCHEDULE_ENTRY_POINTS_PARAMS] = {0},
669+
[BLK_IDX_VL_FORWARDING_PARAMS] = {0},
619670
[BLK_IDX_L2_LOOKUP_PARAMS] = {
620671
.entry_packing = sja1105et_l2_lookup_params_entry_packing,
621672
.cmd_packing = sja1105et_l2_lookup_params_cmd_packing,

0 commit comments

Comments
 (0)