• Vladimir Oltean's avatar
    net: enetc: don't depend on system endianness in enetc_set_vlan_ht_filter · 110eccdb
    Vladimir Oltean authored
    ENETC has a 64-entry hash table for VLAN RX filtering per Station
    Interface, which is accessed through two 32-bit registers: VHFR0 holding
    the low portion, and VHFR1 holding the high portion.
    
    The enetc_set_vlan_ht_filter function looks at the pf->vlan_ht_filter
    bitmap, which is fundamentally an unsigned long variable, and casts it
    to a u32 array of two elements. It puts the first u32 element into VHFR0
    and the second u32 element into VHFR1.
    
    It is easy to imagine that this will not work on big endian systems
    (although, yes, we have bigger problems, because currently enetc assumes
    that the CPU endianness is equal to the controller endianness, aka
    little endian - but let's assume that we could add a cpu_to_le32 in
    enetc_wd_reg and a le32_to_cpu in enetc_rd_reg).
    
    Let's use lower_32_bits and upper_32_bits which are designed to work
    regardless of endianness.
    
    Tested that both the old and the new method produce the same results:
    
    $ ethtool -K eth1 rx-vlan-filter on
    $ ip link add link eth1 name eth1.100 type vlan id 100
    enetc_set_vlan_ht_filter: method 1: si_idx 0 VHFR0 0x0 VHFR1 0x20
    enetc_set_vlan_ht_filter: method 2: si_idx 0 VHFR0 0x0 VHFR1 0x20
    $ ip link add link eth1 name eth1.101 type vlan id 101
    enetc_set_vlan_ht_filter: method 1: si_idx 0 VHFR0 0x0 VHFR1 0x30
    enetc_set_vlan_ht_filter: method 2: si_idx 0 VHFR0 0x0 VHFR1 0x30
    $ ip link add link eth1 name eth1.34 type vlan id 34
    enetc_set_vlan_ht_filter: method 1: si_idx 0 VHFR0 0x0 VHFR1 0x34
    enetc_set_vlan_ht_filter: method 2: si_idx 0 VHFR0 0x0 VHFR1 0x34
    $ ip link add link eth1 name eth1.1024 type vlan id 1024
    enetc_set_vlan_ht_filter: method 1: si_idx 0 VHFR0 0x1 VHFR1 0x34
    enetc_set_vlan_ht_filter: method 2: si_idx 0 VHFR0 0x1 VHFR1 0x34
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarClaudiu Manoil <claudiu.manoil@nxp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    110eccdb
enetc_pf.c 30.6 KB