>-----Original Message----- >From: Vladimir Oltean <olte...@gmail.com> >Sent: Wednesday, March 24, 2021 5:45 PM >To: Jakub Kicinski <k...@kernel.org>; David S. Miller ><da...@davemloft.net> >Cc: netdev@vger.kernel.org; Claudiu Manoil <claudiu.man...@nxp.com>; >Vladimir Oltean <vladimir.olt...@nxp.com> >Subject: [PATCH net-next 1/2] net: enetc: don't depend on system >endianness in enetc_set_vlan_ht_filter > >From: Vladimir Oltean <vladimir.olt...@nxp.com> > >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: Vladimir Oltean <vladimir.olt...@nxp.com>
Reviewed-by: Claudiu Manoil <claudiu.man...@nxp.com>