summaryrefslogtreecommitdiff
path: root/meta-ampere/meta-common
diff options
context:
space:
mode:
authorKhang Nguyen <khangng@amperecomputing.com>2023-12-04 04:42:00 +0300
committerThang Q. Nguyen <thang@os.amperecomputing.com>2024-08-09 05:00:25 +0300
commitf36ed163cfb756281a505930033088699d2827d6 (patch)
tree2001e426ad58cfa24f4b6c752ed6a3dbf7b14995 /meta-ampere/meta-common
parent386b62048f2aeb46ffc3af65db8b46623c6b3983 (diff)
downloadopenbmc-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.service10
-rw-r--r--meta-ampere/meta-common/recipes-ampere/network/ampere-usbnet/ampere_usbnet.sh26
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