mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
net: hns: modify tcam table and set mac key
The current definition of dsaf_drv_tbl_tcam_key is only suitable for Little-endian. If data is stored in Big-endian, this may lead to error in data use. Shift operation can make it work normally in both Big-endian and Little-endian. Signed-off-by: Qianqian Xie <xieqianqian@huawei.com> Reviewed-by: Yisen Zhuang <yisen.zhuang@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d30721d459
commit
5483bfcb16
2 changed files with 20 additions and 9 deletions
|
@ -1509,8 +1509,12 @@ static void hns_dsaf_set_mac_key(
|
|||
mac_key->high.bits.mac_3 = addr[3];
|
||||
mac_key->low.bits.mac_4 = addr[4];
|
||||
mac_key->low.bits.mac_5 = addr[5];
|
||||
mac_key->low.bits.vlan = vlan_id;
|
||||
mac_key->low.bits.port = port;
|
||||
dsaf_set_field(mac_key->low.bits.port_vlan, DSAF_TBL_TCAM_KEY_VLAN_M,
|
||||
DSAF_TBL_TCAM_KEY_VLAN_S, vlan_id);
|
||||
dsaf_set_field(mac_key->low.bits.port_vlan, DSAF_TBL_TCAM_KEY_PORT_M,
|
||||
DSAF_TBL_TCAM_KEY_PORT_S, port);
|
||||
|
||||
mac_key->low.bits.port_vlan = le16_to_cpu(mac_key->low.bits.port_vlan);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2760,8 +2764,12 @@ void hns_dsaf_set_promisc_tcam(struct dsaf_device *dsaf_dev,
|
|||
if (enable) {
|
||||
memset(&tbl_tcam_data, 0, sizeof(tbl_tcam_data));
|
||||
memset(&tbl_tcam_mask, 0, sizeof(tbl_tcam_mask));
|
||||
tbl_tcam_data.low.bits.port = port;
|
||||
tbl_tcam_mask.low.bits.port = 0xf; /* [3:0]: port id */
|
||||
dsaf_set_field(tbl_tcam_data.low.bits.port_vlan,
|
||||
DSAF_TBL_TCAM_KEY_PORT_M,
|
||||
DSAF_TBL_TCAM_KEY_PORT_S, port);
|
||||
dsaf_set_field(tbl_tcam_mask.low.bits.port_vlan,
|
||||
DSAF_TBL_TCAM_KEY_PORT_M,
|
||||
DSAF_TBL_TCAM_KEY_PORT_S, 0xf);
|
||||
|
||||
/* SUB_QID */
|
||||
dsaf_set_bit(mac_data.tbl_mcast_port_msk[0],
|
||||
|
|
|
@ -357,6 +357,11 @@ static inline void *hns_dsaf_dev_priv(const struct dsaf_device *dsaf_dev)
|
|||
return (void *)((u8 *)dsaf_dev + sizeof(*dsaf_dev));
|
||||
}
|
||||
|
||||
#define DSAF_TBL_TCAM_KEY_PORT_S 0
|
||||
#define DSAF_TBL_TCAM_KEY_PORT_M (((1ULL << 4) - 1) << 0)
|
||||
#define DSAF_TBL_TCAM_KEY_VLAN_S 4
|
||||
#define DSAF_TBL_TCAM_KEY_VLAN_M (((1ULL << 12) - 1) << 4)
|
||||
|
||||
struct dsaf_drv_tbl_tcam_key {
|
||||
union {
|
||||
struct {
|
||||
|
@ -370,11 +375,9 @@ struct dsaf_drv_tbl_tcam_key {
|
|||
} high;
|
||||
union {
|
||||
struct {
|
||||
u32 port:4; /* port id, */
|
||||
/* dsaf-mode fixed 0, non-dsaf-mode port id*/
|
||||
u32 vlan:12; /* vlan id */
|
||||
u32 mac_5:8;
|
||||
u32 mac_4:8;
|
||||
u16 port_vlan;
|
||||
u8 mac_5;
|
||||
u8 mac_4;
|
||||
} bits;
|
||||
|
||||
u32 val;
|
||||
|
|
Loading…
Reference in a new issue