From: Alvin Šipraga <redacted>
Probe deferral is not an error, so don't log this as an error:
[0.590156] realtek-smi ethernet-switch: unable to register switch ret = -517
Signed-off-by: Alvin Šipraga <redacted>
---
drivers/net/dsa/realtek-smi-core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
@@ -456,7 +456,9 @@ static int realtek_smi_probe(struct platform_device *pdev)smi->ds->ops=var->ds_ops;ret=dsa_register_switch(smi->ds);if(ret){-dev_err(dev,"unable to register switch ret = %d\n",ret);+if(ret!=-EPROBE_DEFER)+dev_err(dev,"unable to register switch ret = %d\n",+ret);returnret;}return0;
On 26 Nov 2021, at 15:50, Alvin Šipraga [off-list ref] wrote:
From: Alvin Šipraga [off-list ref]
A contact at Realtek has clarified what exactly the units of RGMII RX
delay are. The answer is that the unit of RX delay is "about 0.3 ns".
Take this into account when parsing rx-internal-delay-ps by
approximating the closest step value. Delays of more than 2.1 ns are
rejected.
This obviously contradicts the previous assumption in the driver that a
step value of 4 was "about 2 ns", but Realtek also points out that it is
easy to find more than one RX delay step value which makes RGMII work.
Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC")
Cc: Arınç ÜNAL <redacted>
Signed-off-by: Alvin Šipraga <redacted>
Acked-by: Arınç ÜNAL <redacted>
I know you submitted a device tree using this driver with
rx-internal-delay-ps = <2000>. Would you care to test your device tree
with this patch and see if it needs updating? Before this patch, the
driver would configure a step value of 4. After this patch it will
configure a step value of 7.
If you experience problems then we will have to update the device tree
again, assuming this patch is accepted.
Thanks!
Alvin
On 26 Nov 2021, at 15:50, Alvin Šipraga [off-list ref] wrote:
From: Alvin Šipraga [off-list ref]
A contact at Realtek has clarified what exactly the units of RGMII RX
delay are. The answer is that the unit of RX delay is "about 0.3 ns".
Take this into account when parsing rx-internal-delay-ps by
approximating the closest step value. Delays of more than 2.1 ns are
rejected.
This obviously contradicts the previous assumption in the driver that a
step value of 4 was "about 2 ns", but Realtek also points out that it is
easy to find more than one RX delay step value which makes RGMII work.
Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC")
Cc: Arınç ÜNAL <redacted>
Signed-off-by: Alvin Šipraga <redacted>
@@ -276,7 +276,7 @@(RTL8365MB_PORT_ISOLATION_REG_BASE+(_physport))#define RTL8365MB_PORT_ISOLATION_MASK 0x07FF-/* MSTP port state registers - indexed by tree instancrSTI (tree ine */+/* MSTP port state registers - indexed by tree instance */#define RTL8365MB_MSTI_CTRL_BASE 0x0A00#define RTL8365MB_MSTI_CTRL_REG(_msti, _physport) \(RTL8365MB_MSTI_CTRL_BASE+((_msti)<<1)+((_physport)>>3))
From: Alvin Šipraga <redacted>
A contact at Realtek has clarified what exactly the units of RGMII RX
delay are. The answer is that the unit of RX delay is "about 0.3 ns".
Take this into account when parsing rx-internal-delay-ps by
approximating the closest step value. Delays of more than 2.1 ns are
rejected.
This obviously contradicts the previous assumption in the driver that a
step value of 4 was "about 2 ns", but Realtek also points out that it is
easy to find more than one RX delay step value which makes RGMII work.
Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC")
Cc: Arınç ÜNAL <redacted>
Signed-off-by: Alvin Šipraga <redacted>
---
drivers/net/dsa/rtl8365mb.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
@@ -760,7 +760,8 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_smi *smi, int port,*0=nodelay,1=2nsdelay*RXdelay:*0=nodelay,7=maximumdelay-*Nounitsarespecified,butthereareatotalof8steps.+*Eachstepisapproximately0.3ns,sothemaximumdelayisabout+*2.1ns.**Thevendordriveralsostatesthatthismustbeconfigured*before**forcingtheexternalinterfaceintoaparticularmode,whichisdone
@@ -771,10 +772,6 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_smi *smi, int port,*specified.WeignorethedetailoftheRGMIIinterfacemode*(RGMII_{RXID,TXID,etc.}),asthisisconsideredtobeaPHY-only*property.-*-*FortheRXdelay,weassumethataregistervalueof4correspondsto-*2ns.Butthisisjustaneducatedguess,soignoreallothervalues-*toavoidtoomuchconfusion.*/if(!of_property_read_u32(dn,"tx-internal-delay-ps",&val)){val=val/1000;/* convert to ns */
@@ -787,13 +784,13 @@ static int rtl8365mb_ext_config_rgmii(struct realtek_smi *smi, int port,}if(!of_property_read_u32(dn,"rx-internal-delay-ps",&val)){-val=val/1000;/* convert to ns */+val=DIV_ROUND_CLOSEST(val,300);/* convert to 0.3 ns step */-if(val==0||val==2)-rx_delay=val*2;+if(val<=7)+rx_delay=val;elsedev_warn(smi->dev,-"EXT port RX delay must be 0 to 2 ns\n");+"EXT port RX delay must be 0 to 2.1 ns\n");}ret=regmap_update_bits(
From: Alvin Šipraga <redacted>
Probe deferral is not an error, so don't log this as an error:
[0.590156] realtek-smi ethernet-switch: unable to register switch ret = -517
Signed-off-by: Alvin Šipraga <redacted>
---
drivers/net/dsa/realtek-smi-core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
@@ -456,7 +456,9 @@ static int realtek_smi_probe(struct platform_device *pdev)smi->ds->ops=var->ds_ops;ret=dsa_register_switch(smi->ds);if(ret){-dev_err(dev,"unable to register switch ret = %d\n",ret);+if(ret!=-EPROBE_DEFER)
Better use dev_err_probe().
+ dev_err(dev, "unable to register switch ret = %d\n",
+ ret);
return ret;
}
return 0;
From: Alvin Šipraga <redacted>
Probe deferral is not an error, so don't log this as an error:
[0.590156] realtek-smi ethernet-switch: unable to register switch ret = -517
Signed-off-by: Alvin Šipraga <redacted>
---
drivers/net/dsa/realtek-smi-core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
@@ -456,7 +456,9 @@ static int realtek_smi_probe(struct platform_device *pdev)smi->ds->ops=var->ds_ops;ret=dsa_register_switch(smi->ds);if(ret){-dev_err(dev,"unable to register switch ret = %d\n",ret);+if(ret!=-EPROBE_DEFER)
Better use dev_err_probe().
Didn't know about that - thanks. I'll send a v2.
quoted
+ dev_err(dev, "unable to register switch ret = %d\n",
+ ret);
return ret;
}
return 0;
Hey Alvin.
On 26/11/2021 16:01, Alvin Šipraga wrote:
Hi Arınç,
On 11/26/21 13:57, Arınç ÜNAL wrote:
quoted
quoted
On 26 Nov 2021, at 15:50, Alvin Šipraga [off-list ref] wrote:
From: Alvin Šipraga [off-list ref]
A contact at Realtek has clarified what exactly the units of RGMII RX
delay are. The answer is that the unit of RX delay is "about 0.3 ns".
Take this into account when parsing rx-internal-delay-ps by
approximating the closest step value. Delays of more than 2.1 ns are
rejected.
This obviously contradicts the previous assumption in the driver that a
step value of 4 was "about 2 ns", but Realtek also points out that it is
easy to find more than one RX delay step value which makes RGMII work.
Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC")
Cc: Arınç ÜNAL <redacted>
Signed-off-by: Alvin Šipraga <redacted>
Acked-by: Arınç ÜNAL <redacted>
I know you submitted a device tree using this driver with
rx-internal-delay-ps = <2000>. Would you care to test your device tree
with this patch and see if it needs updating? Before this patch, the
driver would configure a step value of 4. After this patch it will
configure a step value of 7.
If you experience problems then we will have to update the device tree
again, assuming this patch is accepted.
I just tested the driver with this patch on 5.15. The switch seems to
receive/transmit frames through the cpu port with rx-internal-delay-ps =
<2000> fine.
Should we update the device tree to use 2100 ps for rx-internal-delay-ps
anyway?
Arınç
Hey Alvin.
On 26/11/2021 16:01, Alvin Šipraga wrote:
quoted
Hi Arınç,
On 11/26/21 13:57, Arınç ÜNAL wrote:
quoted
quoted
On 26 Nov 2021, at 15:50, Alvin Šipraga [off-list ref] wrote:
From: Alvin Šipraga [off-list ref]
A contact at Realtek has clarified what exactly the units of RGMII RX
delay are. The answer is that the unit of RX delay is "about 0.3 ns".
Take this into account when parsing rx-internal-delay-ps by
approximating the closest step value. Delays of more than 2.1 ns are
rejected.
This obviously contradicts the previous assumption in the driver that a
step value of 4 was "about 2 ns", but Realtek also points out that
it is
easy to find more than one RX delay step value which makes RGMII work.
Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver
for RTL8365MB-VC")
Cc: Arınç ÜNAL <redacted>
Signed-off-by: Alvin Šipraga <redacted>
Acked-by: Arınç ÜNAL <redacted>
I know you submitted a device tree using this driver with
rx-internal-delay-ps = <2000>. Would you care to test your device tree
with this patch and see if it needs updating? Before this patch, the
driver would configure a step value of 4. After this patch it will
configure a step value of 7.
If you experience problems then we will have to update the device tree
again, assuming this patch is accepted.
I just tested the driver with this patch on 5.15. The switch seems to
receive/transmit frames through the cpu port with rx-internal-delay-ps =
<2000> fine.
Great, thanks a lot for testing!
Should we update the device tree to use 2100 ps for rx-internal-delay-ps
anyway?
Under the hood the driver will do the same thing, so it's not necessary.