Re: [PATCH net-next 2/2] net: stmmac: dwmac4: Use the full perfect filter ability for UC filter
From: Nicolai Buchwitz
Date: Mon Aug 31 2026 - 08:07:37 EST
Hi Maxime
On 31.8.2026 09:01, Maxime Chevallier wrote:
Contrary to dwmac1000 that gets its number of perfect filter entries
through the 'snps,perfect-filter-entries' property, dwmac4 allows
reading the filter size from the HW features registers.
Perfect filter is used for Unicast filtering, and can contain up to 128
entries, each having its own set of registers to access it.
The registers are always at the same location in the map, regardless
whether or not the entry is implemented in hardware. Accessing a register
for an un-implemented entry just doesn't do anything.
The filter is made of one always-available entry, and 3 configurable
banks :
Entry 0 : Always implemented, stores the primary MAC address
Entry 1 \
... + -- Can contain between 0 and 31 entries. Number of available
Entry 31 / entries in HW_Features0[18:22].
Entry 32 \
... + -- Additional 32 entries, all or nothing. Availability is
Entry 63 / specified by HW_Features0[23]
Entry 64 \
... + - Additional 64 entries, all or nothing. Availability is
Entry 127 / specified by HW_Features0[24].
Each of the 3 configurable banks are independently selectable, meaning
we can have gaps in the register banks.
For instance, a setup with 50 addresses enabled will have 17 entries in
the first bank and the additional 32 bank enabled (50 = 32 + 17 + 1).
Another example with 70 addresses : 64 addr bank on, 5 addresses in the
first bank (70 = 64 + 5 + 1).
While I haven't seen HW with gaps in the banks, Synopsys confirmed this
is a real possibility.
Let's therefore introduce a dwmac4 helper to get the physical slot
number of a given entry, allowing to configure the correct bank when
populating the filter. As we need the HW feature-set to compute the
index, store the bank info in the mac_device_info struct.
The total number of available entries is computed based on the
discovered parameters, instead of using the default value of 1.
Results on HW that uses dwmac4 :
- imx8mp : goes from 1 entry to 64 (1 + 31 + 32)
- stm32mp1 : goes from 1 entry to 4 (1 + 3)
- jh7110 : goes from 1 entry to 9 (1 + 8)
- yt6801 : goes from 1 entry to hum, 1 entry (no extra addresses)
Signed-off-by: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
---
[...]
Reviewed-by: Nicolai Buchwitz <nb@xxxxxxxxxxx>
Thanks,
Nicolai