Re: [PATCH] mt7530 fix mt7530_fdb_write vid missing ivl bit
From: Eric Woudstra
Date: Sat Jul 17 2021 - 04:10:02 EST
You are right now there is a problem with vlan unaware bridge.
We need to change the line to:
if (vid > 1) reg[1] |= ATA2_IVL;
I have just tested this with a vlan unaware bridge and also with vlan bridge option disabled in the kernel. Only after applying the if statement it works for vlan unaware bridges/kernel.
On Jul 16, 2021, 11:06 PM, at 11:06 PM, Vladimir Oltean <olteanv@xxxxxxxxx> wrote:
>On Fri, Jul 16, 2021 at 05:36:39PM +0200, ericwouds@xxxxxxxxx wrote:
>> From: Eric Woudstra <ericwouds@xxxxxxxxx>
>>
>> According to reference guides mt7530 (mt7620) and mt7531:
>>
>> NOTE: When IVL is reset, MAC[47:0] and FID[2:0] will be used to
>> read/write the address table. When IVL is set, MAC[47:0] and
>CVID[11:0]
>> will be used to read/write the address table.
>>
>> Since the function only fills in CVID and no FID, we need to set the
>> IVL bit. The existing code does not set it.
>>
>> This is a fix for the issue I dropped here earlier:
>>
>>
>http://lists.infradead.org/pipermail/linux-mediatek/2021-June/025697.html
>>
>> With this patch, it is now possible to delete the 'self' fdb entry
>> manually. However, wifi roaming still has the same issue, the entry
>> does not get deleted automatically. Wifi roaming also needs a fix
>> somewhere else to function correctly in combination with vlan.
>>
>> Signed-off-by: Eric Woudstra <ericwouds@xxxxxxxxx>
>> ---
>> drivers/net/dsa/mt7530.c | 1 +
>> drivers/net/dsa/mt7530.h | 1 +
>> 2 files changed, 2 insertions(+)
>>
>> diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
>> index 93136f7e6..9e4df35f9 100644
>> --- a/drivers/net/dsa/mt7530.c
>> +++ b/drivers/net/dsa/mt7530.c
>> @@ -366,6 +366,7 @@ mt7530_fdb_write(struct mt7530_priv *priv, u16
>vid,
>> int i;
>>
>> reg[1] |= vid & CVID_MASK;
>> + reg[1] |= ATA2_IVL;
>> reg[2] |= (aging & AGE_TIMER_MASK) << AGE_TIMER;
>> reg[2] |= (port_mask & PORT_MAP_MASK) << PORT_MAP;
>> /* STATIC_ENT indicate that entry is static wouldn't
>> diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h
>> index 334d610a5..b19b389ff 100644
>> --- a/drivers/net/dsa/mt7530.h
>> +++ b/drivers/net/dsa/mt7530.h
>> @@ -79,6 +79,7 @@ enum mt753x_bpdu_port_fw {
>> #define STATIC_EMP 0
>> #define STATIC_ENT 3
>> #define MT7530_ATA2 0x78
>> +#define ATA2_IVL BIT(15)
>>
>> /* Register for address table write data */
>> #define MT7530_ATWD 0x7c
>> --
>> 2.25.1
>>
>
>Can VLAN-unaware FDB entries still be manipulated successfully after
>this patch, since it changes 'fid 0' to be interpreted as 'vid 0'?
>
>What is your problem with roaming exactly? Have you tried to disable
>hardware address learning on the CPU port and set
>ds->assisted_learning_on_cpu_port = true for mt7530?
>
>Please note that since kernel v5.14, raw 'self' entries can no longer
>be
>managed directly using 'bridge fdb', you need to use 'master static'
>and
>go through the bridge:
>https://www.kernel.org/doc/html/latest/networking/dsa/configuration.html#forwarding-database-fdb-management
>You will need to update your 'bridgefdbd' program, if it proves to be
>at
>all necessary to achieve what you want.