diff mbox series

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

Message ID 20201218173843.141046-1-f.fainelli@gmail.com (mailing list archive)
State Accepted
Delegated to: Netdev Maintainers
Headers show
Series [net] net: systemport: set dev->max_mtu to UMAC_MAX_MTU_SIZE | expand

Checks

Context Check Description
netdev/cover_letter success Link
netdev/fixes_present success Link
netdev/patch_count success Link
netdev/tree_selection success Clearly marked for net
netdev/subject_prefix success Link
netdev/source_inline success Was 0 now: 0
netdev/verify_signedoff success Link
netdev/module_param success Was 0 now: 0
netdev/build_32bit fail Errors and warnings before: 11 this patch: 11
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/verify_fixes success Link
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 7 lines checked
netdev/build_allmodconfig_warn fail Errors and warnings before: 9 this patch: 9
netdev/header_inline success Link
netdev/stable success Stable not CCed

Commit Message

Florian Fainelli Dec. 18, 2020, 5:38 p.m. UTC
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@gmail.com>
---
 drivers/net/ethernet/broadcom/bcmsysport.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Vladimir Oltean Dec. 18, 2020, 8:24 p.m. UTC | #1
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@gmail.com>
> ---
>  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);
Florian Fainelli Dec. 18, 2020, 8:30 p.m. UTC | #2
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@gmail.com>
>> ---
>>  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.
Vladimir Oltean Dec. 18, 2020, 8:52 p.m. UTC | #3
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@gmail.com>
> >> ---
> >>  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?
Florian Fainelli Dec. 18, 2020, 8:54 p.m. UTC | #4
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@gmail.com>
>>>> ---
>>>>  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.
Vladimir Oltean Dec. 18, 2020, 9:02 p.m. UTC | #5
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@gmail.com>
> >>>> ---
> >>>>  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?
Florian Fainelli Dec. 18, 2020, 9:08 p.m. UTC | #6
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@gmail.com>
>>>>>> ---
>>>>>>  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.
Vladimir Oltean Dec. 18, 2020, 9:14 p.m. UTC | #7
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@gmail.com>
> >>>>>> ---
> >>>>>>  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.
Florian Fainelli Dec. 18, 2020, 9:17 p.m. UTC | #8
On 12/18/20 1:14 PM, Vladimir Oltean wrote:
> 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@gmail.com>
>>>>>>>> ---
>>>>>>>>  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.

I suppose that is fair, v2 coming, thanks!
Florian Fainelli Dec. 21, 2020, 9:49 p.m. UTC | #9
On 12/18/2020 1:17 PM, Florian Fainelli wrote:
>>>>>>> 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.
> 
> I suppose that is fair, v2 coming, thanks!

I was going to issue a v2 for this patch, but given that we don't
allocate buffers larger than 2KiB and there is really no need to
implement ndo_change_mtu(), is there really a point not to use
UMAC_MAX_MTU_SIZE for both variants of the SYSTEMPORT MAC?
Vladimir Oltean Dec. 21, 2020, 10:25 p.m. UTC | #10
On Mon, Dec 21, 2020 at 01:49:03PM -0800, Florian Fainelli wrote:
> On 12/18/2020 1:17 PM, Florian Fainelli wrote:
> >>>>>>> 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.
> >
> > I suppose that is fair, v2 coming, thanks!
>
> I was going to issue a v2 for this patch, but given that we don't
> allocate buffers larger than 2KiB and there is really no need to
> implement ndo_change_mtu(), is there really a point not to use
> UMAC_MAX_MTU_SIZE for both variants of the SYSTEMPORT MAC?

After your first reply that "the Lite doesn't validate the frame length", I was
under the impression that it is sufficient to declare a larger max_mtu such as
JMS_MAX_SIZE and 9K jumbo frames would just work. But with the current buffer
allocation in bcm_sysport_rx_refill it clearly wouldn't. A stupid confusion
really. So yeah, sorry for having you resend a v2 with no change.
If it helps you could add to the patch:

Reviewed-by: Vladimir Oltean <olteanv@gmail.com>

Thanks again for explaining.
Florian Fainelli Dec. 21, 2020, 10:55 p.m. UTC | #11
On 12/21/2020 2:25 PM, Vladimir Oltean wrote:
> On Mon, Dec 21, 2020 at 01:49:03PM -0800, Florian Fainelli wrote:
>> On 12/18/2020 1:17 PM, Florian Fainelli wrote:
>>>>>>>>> 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.
>>>
>>> I suppose that is fair, v2 coming, thanks!
>>
>> I was going to issue a v2 for this patch, but given that we don't
>> allocate buffers larger than 2KiB and there is really no need to
>> implement ndo_change_mtu(), is there really a point not to use
>> UMAC_MAX_MTU_SIZE for both variants of the SYSTEMPORT MAC?
> 
> After your first reply that "the Lite doesn't validate the frame length", I was
> under the impression that it is sufficient to declare a larger max_mtu such as
> JMS_MAX_SIZE and 9K jumbo frames would just work. But with the current buffer
> allocation in bcm_sysport_rx_refill it clearly wouldn't. A stupid confusion
> really. So yeah, sorry for having you resend a v2 with no change.
> If it helps you could add to the patch:
> 
> Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
> 
> Thanks again for explaining.

No worries, Jakub, David, do you need me to resend or can you pick it up
from patchwork?
diff mbox series

Patch

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;