diff options
author | Khang Nguyen <khangng@amperecomputing.com> | 2023-12-04 04:42:00 +0300 |
---|---|---|
committer | Thang Q. Nguyen <thang@os.amperecomputing.com> | 2024-08-09 05:00:25 +0300 |
commit | f36ed163cfb756281a505930033088699d2827d6 (patch) | |
tree | 2001e426ad58cfa24f4b6c752ed6a3dbf7b14995 /meta-ampere/meta-common | |
parent | 386b62048f2aeb46ffc3af65db8b46623c6b3983 (diff) | |
download | openbmc-f36ed163cfb756281a505930033088699d2827d6.tar.xz |
meta-ampere: ampere-usbnet: Add delay and restart policy
When ampere-usbnet starts too soon, phosphor-networkd does not yet sync
the MAC address from inventory to u-boot, making ampere-usbnet fail.
This commit updates the service to restart 3 times, with a 5s delay
between restarts, on failure of invalid MAC or no MAC Address available.
Tested:
1. When FRU has valid MAC address, usb should be configured correctly:
[ 62.986382] configfs-gadget.usbnet gadget.0: HOST MAC 02:e2:84:8f:e3:56
[ 62.993978] configfs-gadget.usbnet gadget.0: MAC 06:e2:84:8f:e3:56
- Check MAC Address using ifconfig:
root@mtmitchell:~# ifconfig usb0 | grep HWaddr
usb0 Link encap:Ethernet HWaddr 06:E2:84:8F:E3:56
2. When FRU has invalid MAC address, usb should be configured with a
random MAC address after three restarts:
[ 63.417629] configfs-gadget.usbnet gadget.0: HOST MAC 02:c2:49:a6:09:3b
[ 63.425133] configfs-gadget.usbnet gadget.0: MAC 06:c2:49:a6:09:3b
[ 69.017538] configfs-gadget.usbnet gadget.0: HOST MAC 02:c2:49:a6:09:3b
[ 69.025012] configfs-gadget.usbnet gadget.0: MAC 06:c2:49:a6:09:3b
[ 74.530780] configfs-gadget.usbnet gadget.0: HOST MAC 02:c2:49:a6:09:3b
[ 74.538353] configfs-gadget.usbnet gadget.0: MAC 06:c2:49:a6:09:3b
- Check MAC Address using ifconfig:
root@mtmitchell:~# ifconfig usb0 | grep HWaddr
usb0 Link encap:Ethernet HWaddr 06:C2:49:A6:09:3B
- u-boot env should be unset:
root@mtmitchell:~# fw_printenv -n ethaddr
## Error: "ethaddr" not defined
Change-Id: If10045485bfd8d6803d6df305805924284740889
Signed-off-by: Khang Nguyen <khangng@amperecomputing.com>
Signed-off-by: Thang Q. Nguyen <thang@os.amperecomputing.com>
Diffstat (limited to 'meta-ampere/meta-common')
-rw-r--r-- | meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere-usbnet.service | 10 | ||||
-rw-r--r-- | meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere_usbnet.sh | 26 |
2 files changed, 21 insertions, 15 deletions
diff --git a/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere-usbnet.service b/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere-usbnet.service index 3499543258..461d423ad4 100644 --- a/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere-usbnet.service +++ b/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere-usbnet.service @@ -1,12 +1,14 @@ [Unit] Description=Ampere Ethernet over USB gadget device -After=phosphor-ipmi-host.service +After=multi-user.target +StartLimitIntervalSec=20 +StartLimitBurst=3 [Service] -Type=oneshot -RemainAfterExit=yes ExecStart=/usr/sbin/ampere_usbnet.sh -ExecStop=/usr/bin/usb-ctrl ecm usbnet off +Restart=on-failure +RestartMode=direct +RestartSec=5 [Install] WantedBy=multi-user.target diff --git a/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere_usbnet.sh b/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere_usbnet.sh index ca9357fa3a..fb886c2eab 100644 --- a/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere_usbnet.sh +++ b/meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere_usbnet.sh @@ -1,18 +1,22 @@ #!/bin/bash -ENV_MAC_ADDR=$(fw_printenv ethaddr eth1addr) +# Get MAC Address from uboot, or fallback to a random +ENV_MAC_ADDR= +ENV_MAC_ADDR=${ENV_MAC_ADDR:-"$(fw_printenv -n ethaddr)"} +ENV_MAC_ADDR=${ENV_MAC_ADDR:-"$(fw_printenv -n eth1addr)"} +MAC_ADDR=${ENV_MAC_ADDR:-"F8:C2:49:A6:09:3B"} -MAC_ADDR=$(echo "$ENV_MAC_ADDR" | cut -d "=" -f 2) - -if [ -n "$MAC_ADDR" ]; then - # Generate MAC Address from eth1addr using locally administered MAC - # https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local_(U/L_bit - SUBMAC=$(echo "$MAC_ADDR" | cut -d ":" -f 2-6) - /usr/bin/usb-ctrl ecm usbnet on "06:$SUBMAC" "02:$SUBMAC" -else - /usr/bin/usb-ctrl ecm usbnet on -fi +# Generate MAC Address using locally administered MAC +# https://en.wikipedia.org/wiki/MAC_address#Universal_vs._local_(U/L_bit +SUBMAC=$(echo "$MAC_ADDR" | cut -d ":" -f 2-5) +/usr/bin/usb-ctrl ecm usbnet off +/usr/bin/usb-ctrl ecm usbnet on "06:$SUBMAC:01" "06:$SUBMAC:00" # Use NCM (Ethernet) Gadget instead of FunctionFS Gadget echo 0x0103 > /sys/kernel/config/usb_gadget/usbnet/idProduct echo "OpenBMC usbnet Device" > /sys/kernel/config/usb_gadget/usbnet/strings/0x409/product + +if [ "$MAC_ADDR" != "$ENV_MAC_ADDR" ]; then + # fail and wait for systemd to restart this service + exit 1 +fi |