From: Alexandru Tachici <redacted>
The ADIN1100 is a low power single port 10BASE-T1L transceiver designed for
industrial Ethernet applications and is compliant with the IEEE 802.3cg
Ethernet standard for long reach 10 Mb/s Single Pair Ethernet.
Ethtool output:
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT1L/Full
2400mv
1000mv
Supported pause frame use: Transmit-only
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT1L/Full
2400mv
1000mv
Advertised pause frame use: Transmit-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT1L/Full
2400mv
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 10Mb/s
Duplex: Full
Auto-negotiation: on
master-slave cfg: preferred master
master-slave status: master
Port: MII
PHYAD: 0
Transceiver: external
Link detected: yes
SQI: 7/7
1. Add basic support for ADIN1100.
Alexandru Ardelean (1):
net: phy: adin1100: Add initial support for ADIN1100 industrial PHY
1. Added 10baset-T1L link modes.
2. Added 10base-T1L voltage levels link modes. 1v is the default TX level.
2.4 V support depends on pin configuration and power supply.
3. Allow user to access error and frame counters through ethtool.
4. Allow user to set the master-slave configuration of ADIN1100.
5. Convert MSE to SQI using a predefined table and allow user access
through ethtool.
6. DT bindings for ADIN1100.
Alexandru Tachici (6):
ethtool: Add 10base-T1L link mode entries
ethtool: Add 10base-T1L voltage levels link mode entries
net: phy: adin1100: Add ethtool get_stats support
net: phy: adin1100: Add ethtool master-slave support
net: phy: adin1100: Add SQI support
dt-bindings: adin1100: Add binding for ADIN1100 Ethernet PHY
Changelog v1 -> v2:
- Added ETHTOOL_LINK_MODE_10baseT1L_Full_BIT and ETHTOOL_LINK_MODE_10baseT1L_Half_BIT.
Using only full duplex here as chip supports full duplex only
- removed .match_phy_device
- removed link partner advertising of modes not present in the kernel
- enable/disable only the PCS loopback
- replaced custom timeout implementations with phy_read_mmd_poll_timeout
- added link modes for 1.0 V and 2.4 V TX levels
- removed link change notify
- check if 2.4v TX level is supported in adin_get_features call and set
corresponding link mode
.../devicetree/bindings/net/adi,adin1100.yaml | 45 ++
drivers/net/phy/Kconfig | 7 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/adin1100.c | 533 ++++++++++++++++++
drivers/net/phy/phy-core.c | 4 +-
include/uapi/linux/ethtool.h | 4 +
net/ethtool/common.c | 6 +
7 files changed, 599 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/net/adi,adin1100.yaml
create mode 100644 drivers/net/phy/adin1100.c
--
2.25.1
From: Alexandru Tachici <redacted>
Allow user to select the advertised master-slave
configuration through ethtool.
Signed-off-by: Alexandru Tachici <redacted>
---
drivers/net/phy/adin1100.c | 78 +++++++++++++++++++++++++++++++++++++-
1 file changed, 77 insertions(+), 1 deletion(-)
From: Andrew Lunn <andrew@lunn.ch> Date: 2021-07-13 17:53:30
On Mon, Jul 12, 2021 at 04:06:29PM +0300, alexandru.tachici@analog.com wrote:
From: Alexandru Tachici <redacted>
Allow user to select the advertised master-slave
configuration through ethtool.
Signed-off-by: Alexandru Tachici <redacted>
From: Alexandru Ardelean <redacted>
The ADIN1100 is a low power single port 10BASE-T1L transceiver designed for
industrial Ethernet applications and is compliant with the IEEE 802.3cg
Ethernet standard for long reach 10 Mb/s Single Pair Ethernet.
Signed-off-by: Alexandru Ardelean <redacted>
Signed-off-by: Alexandru Tachici <redacted>
---
drivers/net/phy/Kconfig | 7 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/adin1100.c | 326 +++++++++++++++++++++++++++++++++++++
3 files changed, 334 insertions(+)
create mode 100644 drivers/net/phy/adin1100.c
On Sat, Jul 17, 2021 at 12:24:27AM +0300, alexandru.tachici@analog.com wrote:
No, ADIN1100 supports only full duplex mode. Added this one just to
report through ethtool if lp supports it or not.
Same about TI T1L phy, there is not half duplex support. I'm courios if
this is actually required by the 802.3cg standard.
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
On Tue, Jul 13, 2021 at 06:58:30PM +0200, Andrew Lunn wrote:
quoted
+static const int phy_10_features_array[] = {
+ ETHTOOL_LINK_MODE_10baseT1L_Full_BIT,
Does you device implement ETHTOOL_LINK_MODE_10baseT1L_Half_BIT? I'm
assuming half duplex is part of the standard?
No, there is no ETHTOOL_LINK_MODE_10baseT1L_Half_BIT according to
802.3cg-2019.
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
On Mon, Jul 12, 2021 at 04:06:27PM +0300, alexandru.tachici@analog.com wrote:
quoted hunk
From: Alexandru Ardelean <redacted>
The ADIN1100 is a low power single port 10BASE-T1L transceiver designed for
industrial Ethernet applications and is compliant with the IEEE 802.3cg
Ethernet standard for long reach 10 Mb/s Single Pair Ethernet.
Signed-off-by: Alexandru Ardelean <redacted>
Signed-off-by: Alexandru Tachici <redacted>
---
drivers/net/phy/Kconfig | 7 +
drivers/net/phy/Makefile | 1 +
drivers/net/phy/adin1100.c | 326 +++++++++++++++++++++++++++++++++++++
3 files changed, 334 insertions(+)
create mode 100644 drivers/net/phy/adin1100.c
All of this bits are implemented according to the 802.3-2018 standard,
For example ADIN_AN_CONTROL is corresponding to "45.2.7.19 BASE-T1 AN control register (Register 7.512)"
From: Alexandru Tachici <redacted>
The PHY has multiple error counters and one frame counter.
This change enables the frame checker and allows ethtool
to retrieve the counters values.
Signed-off-by: Alexandru Tachici <redacted>
---
drivers/net/phy/adin1100.c | 79 ++++++++++++++++++++++++++++++++++++++
1 file changed, 79 insertions(+)
Since this phy seems to implement a lot MAC stats would it make sense
to plumb thru the new ethtool API for PHYs (ethtool_eth_mac_stats etc.)
rather than let the same string proliferation problem spring up in
another section of the code?
@@ -13,7 +13,7 @@*/constchar*phy_speed_to_str(intspeed){-BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS!=94,+BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS!=96,"Enum ethtool_link_mode_bit_indices and phylib are out of sync. ""If a speed or mode has been added please update phy_speed_to_str ""and the PHY settings array.\n");
@@ -1661,6 +1661,8 @@ enum ethtool_link_mode_bit_indices {ETHTOOL_LINK_MODE_100baseFX_Full_BIT=91,ETHTOOL_LINK_MODE_10baseT1L_Half_BIT=92,ETHTOOL_LINK_MODE_10baseT1L_Full_BIT=93,+ETHTOOL_LINK_MODE_2400mv_BIT=94,+ETHTOOL_LINK_MODE_1000mv_BIT=95,/* must be last entry */__ETHTOOL_LINK_MODE_MASK_NBITS};
@@ -13,7 +13,7 @@*/constchar*phy_speed_to_str(intspeed){-BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS!=92,+BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS!=94,"Enum ethtool_link_mode_bit_indices and phylib are out of sync. ""If a speed or mode has been added please update phy_speed_to_str ""and the PHY settings array.\n");
@@ -1659,6 +1659,8 @@ enum ethtool_link_mode_bit_indices {ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT=89,ETHTOOL_LINK_MODE_100baseFX_Half_BIT=90,ETHTOOL_LINK_MODE_100baseFX_Full_BIT=91,+ETHTOOL_LINK_MODE_10baseT1L_Half_BIT=92,+ETHTOOL_LINK_MODE_10baseT1L_Full_BIT=93,/* must be last entry */__ETHTOOL_LINK_MODE_MASK_NBITS};
@@ -13,7 +13,7 @@*/constchar*phy_speed_to_str(intspeed){-BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS!=92,+BUILD_BUG_ON_MSG(__ETHTOOL_LINK_MODE_MASK_NBITS!=94,"Enum ethtool_link_mode_bit_indices and phylib are out of sync. ""If a speed or mode has been added please update phy_speed_to_str ""and the PHY settings array.\n");
@@ -1659,6 +1659,8 @@ enum ethtool_link_mode_bit_indices {ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT=89,ETHTOOL_LINK_MODE_100baseFX_Half_BIT=90,ETHTOOL_LINK_MODE_100baseFX_Full_BIT=91,+ETHTOOL_LINK_MODE_10baseT1L_Half_BIT=92,+ETHTOOL_LINK_MODE_10baseT1L_Full_BIT=93,/* must be last entry */__ETHTOOL_LINK_MODE_MASK_NBITS};
From: Alexandru Tachici <redacted>
Determine the SQI from MSE using a predefined table
for the 10BASE-T1L.
Signed-off-by: Alexandru Tachici <redacted>
---
drivers/net/phy/adin1100.c | 52 ++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
From: Rob Herring <robh@kernel.org> Date: 2021-07-12 14:13:08
On Mon, 12 Jul 2021 16:06:31 +0300, alexandru.tachici@analog.com wrote:
From: Alexandru Tachici <redacted>
DT bindings for the ADIN1100 10BASE-T1L Ethernet PHY.
Signed-off-by: Alexandru Tachici <redacted>
---
.../devicetree/bindings/net/adi,adin1100.yaml | 45 +++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/adi,adin1100.yaml
My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):
yamllint warnings/errors:
dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/net/adi,adin1100.example.dt.yaml:0:0: /example-0/ethernet@e000c000: failed to match any schema with compatible: ['cdns,zynq-gem', 'cdns,gem']
Documentation/devicetree/bindings/net/adi,adin1100.example.dt.yaml:0:0: /example-0/ethernet@e000c000: failed to match any schema with compatible: ['cdns,zynq-gem', 'cdns,gem']
\ndoc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/patch/1503981
This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit.
From: Rob Herring <robh@kernel.org> Date: 2021-07-12 17:46:46
On Mon, Jul 12, 2021 at 08:12:53AM -0600, Rob Herring wrote:
On Mon, 12 Jul 2021 16:06:31 +0300, alexandru.tachici@analog.com wrote:
quoted
From: Alexandru Tachici <redacted>
DT bindings for the ADIN1100 10BASE-T1L Ethernet PHY.
Signed-off-by: Alexandru Tachici <redacted>
---
.../devicetree/bindings/net/adi,adin1100.yaml | 45 +++++++++++++++++++
1 file changed, 45 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/adi,adin1100.yaml
My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):
yamllint warnings/errors:
dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/net/adi,adin1100.example.dt.yaml:0:0: /example-0/ethernet@e000c000: failed to match any schema with compatible: ['cdns,zynq-gem', 'cdns,gem']
Documentation/devicetree/bindings/net/adi,adin1100.example.dt.yaml:0:0: /example-0/ethernet@e000c000: failed to match any schema with compatible: ['cdns,zynq-gem', 'cdns,gem']
Please either convert the above binding or use something that already
has a schema.
Rob
@@ -0,0 +1,45 @@+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)+%YAML1.2+---+$id:http://devicetree.org/schemas/net/adi,adin1100.yaml#+$schema:http://devicetree.org/meta-schemas/core.yaml#++title:Analog Devices ADIN1100 PHY++maintainers:+-Alexandru Tachici <alexandru.tachici@analog.com>++description:+Bindings for Analog Devices Industrial Low Power 10BASE-T1L Ethernet PHY++allOf:+-$ref:ethernet-phy.yaml#++properties:+adi,disable-2400mv-tx-level:+description:+Prevent ADIN1100 from using the 2.4 V pk-pk transmit level.+type:boolean
This property should be generic. It is defined by IEEE 802.3cg 2019 and can
be implemented on all T1L PHYs.
I assume, it should be something like:
ethernet-phy-10base-t1l-2.4vpp-enable
ethernet-phy-10base-t1l-2.4vpp-disable
To overwrite bootstrapped of fuzed values if supported. The IEEE 802.3cg
specification uses following wordings for this functionality:
"10BASE-T1L increased transmit level request ..."
"146.5.4.1 Transmitter output voltage
When tested with the test fixture shown in Figure 146–20 with the transmitter
in test mode 1, the transmitter output voltage shall be 2.4 V + 5%/ – 15%
peak-to-peak (for the 2.4 Vpp operating mode) and 1.0 V + 5%/ – 15%
peak-to-peak (for the 1.0 Vpp operating mode). Transmitter output
voltage can be set using the management interface or by hardware default set-up."
I would recommend to use similar wording if possible.
@@ -0,0 +1,45 @@+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)+%YAML1.2+---+$id:http://devicetree.org/schemas/net/adi,adin1100.yaml#+$schema:http://devicetree.org/meta-schemas/core.yaml#++title:Analog Devices ADIN1100 PHY++maintainers:+-Alexandru Tachici <alexandru.tachici@analog.com>++description:+Bindings for Analog Devices Industrial Low Power 10BASE-T1L Ethernet PHY++allOf:+-$ref:ethernet-phy.yaml#++properties:+adi,disable-2400mv-tx-level:+description:+Prevent ADIN1100 from using the 2.4 V pk-pk transmit level.+type:boolean
This property should be generic. It is defined by IEEE 802.3cg 2019 and can
be implemented on all T1L PHYs.
I assume, it should be something like:
ethernet-phy-10base-t1l-2.4vpp-enable
ethernet-phy-10base-t1l-2.4vpp-disable
'ethernet-phy-' is a bit redundant and I'd make it a tristate (not
present, 0, 1). So just '10base-t1l-2.4vpp'?
To overwrite bootstrapped of fuzed values if supported. The IEEE 802.3cg
specification uses following wordings for this functionality:
"10BASE-T1L increased transmit level request ..."
@@ -0,0 +1,45 @@+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)+%YAML1.2+---+$id:http://devicetree.org/schemas/net/adi,adin1100.yaml#+$schema:http://devicetree.org/meta-schemas/core.yaml#++title:Analog Devices ADIN1100 PHY++maintainers:+-Alexandru Tachici <alexandru.tachici@analog.com>++description:+Bindings for Analog Devices Industrial Low Power 10BASE-T1L Ethernet PHY++allOf:+-$ref:ethernet-phy.yaml#++properties:+adi,disable-2400mv-tx-level:+description:+Prevent ADIN1100 from using the 2.4 V pk-pk transmit level.+type:boolean
This property should be generic. It is defined by IEEE 802.3cg 2019 and can
be implemented on all T1L PHYs.
I assume, it should be something like:
ethernet-phy-10base-t1l-2.4vpp-enable
ethernet-phy-10base-t1l-2.4vpp-disable
'ethernet-phy-' is a bit redundant and I'd make it a tristate (not
present, 0, 1). So just '10base-t1l-2.4vpp'?
quoted
To overwrite bootstrapped of fuzed values if supported. The IEEE 802.3cg
specification uses following wordings for this functionality:
"10BASE-T1L increased transmit level request ..."
sounds ok for me.
Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
From: "Russell King (Oracle)" <linux@armlinux.org.uk> Date: 2021-07-12 13:34:23
On Mon, Jul 12, 2021 at 04:06:24PM +0300, alexandru.tachici@analog.com wrote:
From: Alexandru Tachici <redacted>
The ADIN1100 is a low power single port 10BASE-T1L transceiver designed for
industrial Ethernet applications and is compliant with the IEEE 802.3cg
Ethernet standard for long reach 10 Mb/s Single Pair Ethernet.
Ethtool output:
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT1L/Full
2400mv
1000mv
The SI unit of voltage is V not v, so milli-volts is mV not mv. Surely,
at the very least, we should be using the SI designation in user
visible strings?
It may also be worth providing a brief description of 10BASE-T1L in the
cover letter so (e.g.) one doesn't have to look up the fact that the
voltage level is negotiated via bit 13 of the base page. I've found
that by searching google and finding dp83td510e.pdf
Thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
On Mon, Jul 12, 2021 at 02:33:58PM +0100, Russell King (Oracle) wrote:
On Mon, Jul 12, 2021 at 04:06:24PM +0300, alexandru.tachici@analog.com wrote:
quoted
From: Alexandru Tachici <redacted>
The ADIN1100 is a low power single port 10BASE-T1L transceiver designed for
industrial Ethernet applications and is compliant with the IEEE 802.3cg
Ethernet standard for long reach 10 Mb/s Single Pair Ethernet.
Ethtool output:
Settings for eth1:
Supported ports: [ TP MII ]
Supported link modes: 10baseT1L/Full
2400mv
1000mv
The SI unit of voltage is V not v, so milli-volts is mV not mv. Surely,
at the very least, we should be using the SI designation in user
visible strings?
It may also be worth providing a brief description of 10BASE-T1L in the
cover letter so (e.g.) one doesn't have to look up the fact that the
voltage level is negotiated via bit 13 of the base page. I've found
that by searching google and finding dp83td510e.pdf
I'm curios how the voltage should be actually chosen?
In the adin1100 datasheet i read:
"The 1.0 V pk-pk operating mode, external termination resistors and independent
Rx/Tx pins make the ADIN1100 suited to intrinsic safety applications"
"For long reach/trunk applications the higher transmit amplitude of 2.4 V pk-pk"
So, it seems to depends on:
- do we have safety requirements?
- how long is the cable?
Can we use 2.4V any time if it is available or it is bad idea for short
cables?
Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Managed to get some answears form the HW team.
From a safety perspective: in Explosive environments
only 1.0 V is allowed.
Tests showed that 1.0 V shows spurs around 200m and
2.4V works for up to 1.3 Km.
On Tue, Aug 03, 2021 at 12:47:15PM +0300, alexandru.tachici@analog.com wrote:
Managed to get some answears form the HW team.
From a safety perspective: in Explosive environments
only 1.0 V is allowed.
Tests showed that 1.0 V shows spurs around 200m and
2.4V works for up to 1.3 Km.
It will be probably better to drop this functionality for now and
provide it as separate patch set. This will probably need new UAPI and
some discussions.
Can you please add me to CC by the next patch rounds for this PHY.
Regards,
Oleksij
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |