When should gpio-restart be used/avoided?

Lech Perczak lech.perczak at gmail.com
Sun Aug 14 10:09:59 PDT 2022


W dniu 2022-08-14 o 18:40, Bjørn Mork pisze:
> Lech Perczak <lech.perczak at gmail.com> writes:
>
>> I'll try your settings, on MF286D and on older MF286 as well.
>> My setup is a bit more convoluted, since my build has patches to use
>> split APN for IPv4v6 dual stack and I use DHCP.
> Are patches still required for dual-stack with uqmi?
For generic ipv4v6 they are not, however my usecase is even more special.
I use "internet" APN for v4 and "internetipv6" APN for v6, hence "split 
APN".

My configuration is like this:
config interface 'wan'
         option device '/dev/cdc-wdm0'
         option proto 'qmi'
         option apn 'internet'
         option v6apn 'internetipv6'
         option profile '1'
         option v6profile '5'
         option autoconnect '1'
         option dhcpv6 '1'
         option auth 'none'
         option pdptype 'ipv4-and-ipv6'

Do you think it's worth upstreaming? Users of Orange Poland would 
benefit from that, not sure how in other parts of the world.

It seems doable with ModemManager as well, by creating two separate 
bearers (and that's done under the hood for single APN as well),
but I haven't tried so far, uqmi works fine for me, albeit it lacks 
connection drop monitoring.

>   
>
> FWIW, this just works with ModemManager.  Tested this interface config
> now:
>
> config interface 'wan'
>          option device '/sys/devices/platform/soc/8af8800.usb3/8a00000.dwc3/xhci-hcd.0.auto/usb2/2-1'
>          option proto 'modemmanager'
>          option apn 'telenor.smart'
>          option iptype 'ipv4v6'
>
> and got:
>
> root at mf286d:/# ifconfig wwan0
> wwan0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
>            inet addr:10.201.240.26  P-t-P:10.201.240.26  Mask:255.255.255.252
>            inet6 addr: 2a02:2121:285:6c98:ed02:dc3b:8d92:ba9b/128 Scope:Global
>            inet6 addr: fe80::6481:c58c:9848:2b5/64 Scope:Link
>            UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1540  Metric:1
>            RX packets:13 errors:0 dropped:0 overruns:0 frame:0
>            TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
>            collisions:0 txqueuelen:1000
>            RX bytes:1415 (1.3 KiB)  TX bytes:1669 (1.6 KiB)
>
> root at mf286d:/# mmcli -b 1
>    ------------------------------------
>    General            |           path: /org/freedesktop/ModemManager1/Bearer/1
>                       |           type: default
>    ------------------------------------
>    Status             |      connected: yes
>                       |      suspended: no
>                       |    multiplexed: no
>                       |      interface: wwan0
>                       |     ip timeout: 20
>    ------------------------------------
>    Properties         |            apn: telenor.smart
>                       |        roaming: allowed
>                       |        ip type: ipv4v6
>    ------------------------------------
>    IPv4 configuration |         method: static
>                       |        address: 10.201.240.26
>                       |         prefix: 30
>                       |        gateway: 10.201.240.25
>                       |            dns: 193.213.112.4, 130.67.15.198
>                       |            mtu: 1500
>    ------------------------------------
>    IPv6 configuration |         method: static
>                       |        address: 2a02:2121:285:6c98:ed02:dc3b:8d92:ba9b
>                       |         prefix: 64
>                       |        gateway: 2a02:2121:285:6c98:f4b2:80d1:eba3:9279
>                       |            dns: 2001:4600:4:fff::52, 2001:4600:4:1fff::52
>                       |            mtu: 1540
>    ------------------------------------
>    Statistics         |       duration: 30
>                       |       bytes rx: 1204
>                       |       bytes tx: 722
>                       |       attempts: 1
>                       | total-duration: 30
>                       | total-bytes rx: 1204
>                       | total-bytes tx: 722
>
> root at mf286d:/# ip route
> default via 10.201.240.25 dev wwan0  src 10.201.240.26
> 10.201.240.24/30 dev wwan0 scope link  src 10.201.240.26
> 192.168.99.0/24 dev lan4.203 scope link  src 192.168.99.56
>
> root at mf286d:/# ip -6 route
> default from 2a02:2121:285:6c98::/64 via 2a02:2121:285:6c98:f4b2:80d1:eba3:9279 dev wwan0  metric 1024
> 2a02:2121:285:6c98:ed02:dc3b:8d92:ba9b dev wwan0  metric 256
> 2a02:2121:285:6c98:f4b2:80d1:eba3:9279 dev wwan0  metric 1024
> 2a02:2121:285:6c98::/64 dev lan4.203  metric 1024
> unreachable 2a02:2121:285:6c98::/64 dev lo  metric 2147483647
> fd63:fcae:6f0::/64 dev lan4.203  metric 1024
> unreachable fd63:fcae:6f0::/48 dev lo  metric 2147483647
> fe80::/64 dev eth0  metric 256
> fe80::/64 dev lan4  metric 256
> fe80::/64 dev lan4.203  metric 256
> fe80::/64 dev br-lan  metric 256
> fe80::/64 dev br-iot  metric 256
> fe80::/64 dev wwan0  metric 256
> anycast 2a02:2121:285:6c98:: dev lan4.203  metric 0
> anycast fd63:fcae:6f0:: dev lan4.203  metric 0
> anycast fe80:: dev eth0  metric 0
> anycast fe80:: dev br-lan  metric 0
> anycast fe80:: dev br-iot  metric 0
> anycast fe80:: dev lan4  metric 0
> anycast fe80:: dev lan4.203  metric 0
> anycast fe80:: dev wwan0  metric 0
> multicast ff00::/8 dev eth0  metric 256
> multicast ff00::/8 dev lan4.203  metric 256
> multicast ff00::/8 dev lan4  metric 256
> multicast ff00::/8 dev br-lan  metric 256
> multicast ff00::/8 dev br-iot  metric 256
> multicast ff00::/8 dev wwan0  metric 256
>
>>> But AFAICS the gpio-restart is not required for proper modem reset.  The
>>> modem works just fine without it.
>> Please check what happens if you set the "power button blocker" GPIO
>> switch high instead of default low. It will block the rear power
>> switch,
>> and should allow modem restart without forcing power-down of whole
>> board during reboot, IIRC.
> Yes, that sort of "works".
>
> But that's because the gpio-restart driver fails.  Looks like this GPIO
> not only disables the power button, but also the gpio used by the
> gpio-restart device (this would happen to be the GPIO connected to that
> button, would it?)
>
> The board isn't powered down simply because the driver fails and we
> fall back to the next reboot method.
>
> With "power button blocker" GPIO enabled I get this:
>
> root at mf286d:/# reboot
> root at mf286d:/# [  143.729180] br-iot: port 1(lan4.15) entered disabled state
> [  143.731624] device lan4.15 left promiscuous mode
> [  143.734007] br-iot: port 1(lan4.15) entered disabled state
> [  144.013431] br-lan: port 1(lan4.10) entered disabled state
> [  144.014460] device lan2 left promiscuous mode
> [  144.018001] br-lan: port 3(lan2) entered disabled state
> [  144.069983] device lan3 left promiscuous mode
> [  144.070286] br-lan: port 4(lan3) entered disabled state
> [  144.123858] device lan4.10 left promiscuous mode
> [  144.123943] device lan4 left promiscuous mode
> [  144.128225] br-lan: port 1(lan4.10) entered disabled state
> [  144.309385] device wan left promiscuous mode
> [  144.309781] br-lan: port 2(wan) entered disabled state
> [  144.360491] device eth0 left promiscuous mode
> [  144.670087] ipqess-edma c080000.ethernet eth0: Link is Down
> [  144.672057] qca8k-ipq4019 c000000.switch lan4: Link is Down
> [1707]: <info>  [modem0] state changed (connected -> disconnecting)
> [1707]: <info>  [modem0] state changed (disconnecting -> registered)
> [1707]: <info>  [modem0/bearer1] connection #1 finished: duration 90s, tx: 120 bytes, rx: 132 bytes
> [1707]: <info>  [modem0] state changed (registered -> disabling)
> [1707]: <info>  caught signal, shutting down...
> [1707]: <warn>  could not acquire the 'org.freedesktop.ModemManager1' service name
> [  148.863741] reboot: Restarting system
> [  152.069897] ------------[ cut here ]------------
> [  152.070259] WARNING: CPU: 0 PID: 3305 at drivers/power/reset/gpio-restart.c:46 gpio_restart_notify+0xec/0xf4
> [  152.073770] Modules linked in: pppoe ppp_async option nft_fib_inet nf_flow_table_ipv6 nf_flow_table_ipv4 nf_flow_table_inet ath10k_pci ath10k_core ath usb_wwan qmi_wwan pppox ppp_generic nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_objref nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_counter nft_chain_nat nf_tables nf_nat nf_flow_table nf_conntrack mac80211 cfg80211 usbserial usbnet slhc nfnetlink nf_reject_ipv6 nf_reject_ipv4 nf_log_ipv6 nf_log_ipv4 nf_log_common nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c hwmon crc_ccitt compat cdc_wdm ghash_arm_ce cmac leds_gpio xhci_plat_hcd xhci_pci xhci_hcd dwc3 dwc3_qcom gpio_button_hotplug mii crc32c_generic
> [  152.127776] CPU: 0 PID: 3305 Comm: procd Not tainted 5.10.120 #0
> [  152.149974] Hardware name: Generic DT based system
> [  152.156293] [<c030cd14>] (unwind_backtrace) from [<c0309998>] (show_stack+0x10/0x14)
> [  152.160868] [<c0309998>] (show_stack) from [<c05fb7f4>] (dump_stack+0x94/0xa8)
> [  152.168789] [<c05fb7f4>] (dump_stack) from [<c0320d08>] (__warn+0xc0/0x11c)
> [  152.175829] [<c0320d08>] (__warn) from [<c0320dcc>] (warn_slowpath_fmt+0x68/0x78)
> [  152.182701] [<c0320dcc>] (warn_slowpath_fmt) from [<c0734178>] (gpio_restart_notify+0xec/0xf4)
> [  152.190357] [<c0734178>] (gpio_restart_notify) from [<c03417c0>] (atomic_notifier_call_chain+0x58/0x78)
> [  152.198863] [<c03417c0>] (atomic_notifier_call_chain) from [<c0308334>] (machine_restart+0x78/0x7c)
> [  152.208115] [<c0308334>] (machine_restart) from [<c03432e4>] (__do_sys_reboot+0x204/0x258)
> [  152.217108] [<c03432e4>] (__do_sys_reboot) from [<c0300040>] (ret_fast_syscall+0x0/0x54)
> [  152.225354] Exception stack(0xc230bfa8 to 0xc230bff0)
> [  152.233658] bfa0:                   00000000 bed77e50 fee1dead 28121969 01234567 0001f514
> [  152.238643] bfc0: 00000000 bed77e50 b6ec4020 00000058 00000000 00000000 b6ec4010 00000001
> [  152.246748] bfe0: 004d2e14 bed77d7c 004b429c �
> Format: Log Type - Time(microsec) - Message - Optional Info
> Log Type: B - Since Boot(Power On Reset),  D - Delta,  S - Statistic
> S - QC_IMAGE_VERSION_STRING=BOOT.BF.3.1.1-00126
> S - IMAGE_VARIANT_STRING=DAABANAZA
> S - OEM_IMAGE_VERSION_STRING=CRM
> S - Boot Config, 0x00000021
>
> etc.
>
> That warning isn't there when the "power button blocker" is disabled.
This part was expected. Just checked on my unit, and this still did 
reboot the modem.
So it seems, that the modem reset is still possible by toggling this 
GPIO from userspace, while holding power button blocker,
even without rebooting whole device.
This won't be possible on MF286 though, it lacks the power button 
blocker line in hardware - it's physically present only from MF286A onwards,
It would be certainly nice, if the behaviour is consistent across the 
whole line of devices.
>
>
>
> Bjørn


-- 
Pozdrawiam,
Lech Perczak




More information about the openwrt-devel mailing list