Other Parts Discussed in Thread: SK-AM62B-P1,
Hi TI Experts,
We have AM62 base custom HW modules which uses on module DP83867 Ethernet PHY. This PHY uses 25MHz EXT_REFCLK1 from SOC.
I found that EXT_REFCLK1 25MHz clock goes off in deepsleep mode and comes back with a wrong frequency of 50 MHz. (Already have this thread in e2e for the same). However with the below workaround in ti-sci firmware driver, I could recover the 25 MHz clock back after waking up from deepsleep.
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c index a58d25724365..9b211ce386d7 100644 --- a/drivers/firmware/ti_sci.c +++ b/drivers/firmware/ti_sci.c @@ -3619,6 +3620,20 @@ static int ti_sci_resume(struct device *dev) return ret; dev_dbg(dev, "%s: disable isolation: %d\n", __func__, ret); + /* ti_sci_cmd_clk_set_freq(const struct ti_sci_handle *handle, + u32 dev_id, u32 clk_id, u64 min_freq, + u64 target_freq, u64 max_freq); */ + + ret = ti_sci_cmd_clk_set_freq(&info->handle, 157, 20, 0, 25000000, 50000000); + + if (ret) { + dev_info(dev, "%s: setting EXT_REFCLK1 at 25MHz failed with error : %d\n", __func__, ret); + return ret; + } + + dev_info(dev, "%s: setting EXT_REFCLK1 at 25MHz success : %d\n", __func__, ret); ti_sci_msg_cmd_lpm_wake_reason(&info->handle, &source, &time); dev_info(dev, "%s: wakeup source: 0x%X\n", __func__, source);
By doing above workaround, I am still unable to make Ethernet interface (DP83867 Ethernet PHY) working. Eth0 link status is not resuming back online. Unable to get IP for eth0 interface after wake up from deepsleep.
Please see below status logs of eth0 upon resuming from deepsleep.
root@verdin-am62-15133510:~# ifconfig eth0: flags=-28605<UP,BROADCAST,RUNNING,MULTICAST,DYNAMIC> mtu 1500 inet6 fe80::214:2dff:fee6:eb46 prefixlen 64 scopeid 0x20<link> ether 00:14:2d:e6:eb:46 txqueuelen 1000 (Ethernet) RX packets 77 bytes 6838 (6.6 KiB) RX errors 0 dropped 43 overruns 0 frame 0 TX packets 115 bytes 20379 (19.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 213 bytes 15432 (15.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 213 bytes 15432 (15.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 usb0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.11.1 netmask 255.255.255.0 broadcast 192.168.11.255 inet6 fe80::a413:aff:feda:7f7d prefixlen 64 scopeid 0x20<link> ether a6:13:0a:da:7f:7d txqueuelen 1000 (Ethernet) RX packets 112 bytes 16551 (16.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 44 bytes 7996 (7.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Settings for eth0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: Symmetric Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: Symmetric Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Speed: 10Mb/s Duplex: Half Auto-negotiation: on master-slave cfg: preferred slave master-slave status: unknown Port: Twisted Pair PHYAD: 0 Transceiver: external MDI-X: Unknown Supports Wake-on: ubgs Wake-on: ubgs SecureOn password: ff:ff:ff:ff:ff:ff Current message level: 0x000020f7 (8439) drv probe link ifdown ifup rx_err tx_err hw Link detected: no
root@verdin-am62-15133510:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether 00:14:2d:e6:eb:46 brd ff:ff:ff:ff:ff:ff 3: can0: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10 link/can 4: can1: <NOARP,ECHO> mtu 16 qdisc noop state DOWN group default qlen 10 link/can 5: mlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 6c:1d:eb:9d:38:4d brd ff:ff:ff:ff:ff:ff 6: uap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 6c:1d:eb:9d:3a:4d brd ff:ff:ff:ff:ff:ff 7: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether a6:13:0a:da:7f:7d brd ff:ff:ff:ff:ff:ff inet 192.168.11.1/24 brd 192.168.11.255 scope global usb0 valid_lft forever preferred_lft forever inet6 fe80::a413:aff:feda:7f7d/64 scope link valid_lft forever preferred_lft forever
Questions :
- Is DP83867 Ethernet PHY supports XI clock breakage (going off and getting on again) during it's operation in current SW ? (As per the datasheet https://www.ti.com/lit/gpn/dp83867ir, PHY supports deepsleep mode in which XI can be turned off, however present dp83867 Linux driver is not supporting this feature as far as I can understand)
- If answer to Q#1 is no, what could be the solution for this issue ?
- How to make eth0 (DP83867) functionally working after deepsleep wakeup while using an internal EXT_REFCLK1 25MHz clock ?
SW details:
- All SW components at latest and greatest tag - '09.01.00.008' from the December 2023 release
- DTSI: https://git.toradex.com/cgit/linux-toradex.git/tree/arch/arm64/boot/dts/ti/k3-am62-verdin.dtsi?h=toradex_ti-linux-6.1.y
Looking forward for support.
Thank you.
Regards,
Parth P