Re: [PATCH net] net: systemport: set dev->max_mtu to UMAC_MAX_MTU_SIZE

From: Vladimir Oltean
Date: Fri Dec 18 2020 - 16:15:20 EST


On Fri, Dec 18, 2020 at 01:08:58PM -0800, Florian Fainelli wrote:
> On 12/18/20 1:02 PM, Vladimir Oltean wrote:
> > On Fri, Dec 18, 2020 at 12:54:33PM -0800, Florian Fainelli wrote:
> >> On 12/18/20 12:52 PM, Vladimir Oltean wrote:
> >>> On Fri, Dec 18, 2020 at 12:30:20PM -0800, Florian Fainelli wrote:
> >>>> On 12/18/20 12:24 PM, Vladimir Oltean wrote:
> >>>>> Hi Florian,
> >>>>>
> >>>>> On Fri, Dec 18, 2020 at 09:38:43AM -0800, Florian Fainelli wrote:
> >>>>>> The driver is already allocating receive buffers of 2KiB and the
> >>>>>> Ethernet MAC is configured to accept frames up to UMAC_MAX_MTU_SIZE.
> >>>>>>
> >>>>>> Fixes: bfcb813203e6 ("net: dsa: configure the MTU for switch ports")
> >>>>>> Signed-off-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
> >>>>>> ---
> >>>>>> drivers/net/ethernet/broadcom/bcmsysport.c | 1 +
> >>>>>> 1 file changed, 1 insertion(+)
> >>>>>>
> >>>>>> diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
> >>>>>> index 0fdd19d99d99..b1ae9eb8f247 100644
> >>>>>> --- a/drivers/net/ethernet/broadcom/bcmsysport.c
> >>>>>> +++ b/drivers/net/ethernet/broadcom/bcmsysport.c
> >>>>>> @@ -2577,6 +2577,7 @@ static int bcm_sysport_probe(struct platform_device *pdev)
> >>>>>> NETIF_F_HW_VLAN_CTAG_TX;
> >>>>>> dev->hw_features |= dev->features;
> >>>>>> dev->vlan_features |= dev->features;
> >>>>>> + dev->max_mtu = UMAC_MAX_MTU_SIZE;
> >>>>>>
> >>>>>> /* Request the WOL interrupt and advertise suspend if available */
> >>>>>> priv->wol_irq_disabled = 1;
> >>>>>> --
> >>>>>> 2.25.1
> >>>>>>
> >>>>>
> >>>>> Do you want to treat the SYSTEMPORT Lite differently?
> >>>>>
> >>>>> /* Set maximum frame length */
> >>>>> if (!priv->is_lite)
> >>>>> umac_writel(priv, UMAC_MAX_MTU_SIZE, UMAC_MAX_FRAME_LEN);
> >>>>> else
> >>>>> gib_set_pad_extension(priv);
> >>>>
> >>>> SYSTEMPORT Lite does not actually validate the frame length, so setting
> >>>> a maximum number to the buffer size we allocate could work, but I don't
> >>>> see a reason to differentiate the two types of MACs here.
> >>>
> >>> And if the Lite doesn't validate the frame length, then shouldn't it
> >>> report a max_mtu equal to the max_mtu of the attached DSA switch, plus
> >>> the Broadcom tag length? Doesn't the b53 driver support jumbo frames?
> >>
> >> And how would I do that without create a horrible layering violation in
> >> either the systemport driver or DSA? Yes the b53 driver supports jumbo
> >> frames.
> >
> > Sorry, I don't understand where is the layering violation (maybe it doesn't
> > help me either that I'm not familiar with Broadcom architectures).
> >
> > Is the SYSTEMPORT Lite always used as a DSA master, or could it also be
> > used standalone? What would be the issue with hardcoding a max_mtu value
> > which is large enough for b53 to use jumbo frames?
>
> SYSTEMPORT Lite is always used as a DSA master AFAICT given its GMII
> Integration Block (GIB) was specifically designed with another MAC and
> particularly that of a switch on the other side.
>
> The layering violation I am concerned with is that we do not know ahead
> of time which b53 switch we are going to be interfaced with, and they
> have various limitations on the sizes they support. Right now b53 only
> concerns itself with returning JMS_MAX_SIZE, but I am fairly positive
> this needs fixing given the existing switches supported by the driver.

Maybe we don't need to over-engineer this. As long as you report a large
enough max_mtu in the SYSTEMPORT Lite driver to accomodate for all
possible revisions of embedded switches, and the max_mtu of the switch
itself is still accurate and representative of the switch revision limits,
I think that's good enough.