rockchip: ensure NanoPi R4S has unique MAC address
[openwrt/staging/dedeckeh.git] / target / linux / rockchip / armv8 / base-files / etc / board.d / 02_network
index 91bdb760d51d26fc09d2ca7cfa70752557a46d8e..b0e64799471c5c4a992ced6183ff12fd5691c208 100644 (file)
@@ -17,13 +17,36 @@ rockchip_setup_interfaces()
        esac
 }
 
-nanopi_r2s_generate_mac()
+generate_mac_from_mmc_cid()
 {
-       local sd_hash=$(sha256sum /sys/class/block/mmcblk0/device/cid)
+       local mmc_dev=$1
+
+       local sd_hash=$(sha256sum /sys/class/block/$mmc_dev/device/cid)
        local mac_base=$(macaddr_canonicalize "$(echo "${sd_hash}" | dd bs=1 count=12 2>/dev/null)")
        echo "$(macaddr_unsetbit_mc "$(macaddr_setbit_la "${mac_base}")")"
 }
 
+nanopi_r4s_get_mac()
+{
+       local interface=$1
+       local eeprom_path="/sys/bus/i2c/devices/2-0051/eeprom"
+       local address
+
+       if [ -f "$eeprom_path" ]; then
+               address=$(get_mac_binary "$eeprom_path" 0xfa)
+               if [ "$interface" = "lan" ]; then
+                       address=$(macaddr_setbit_la "$address")
+               fi
+       else
+               address=$(generate_mac_from_mmc_cid mmcblk1)
+               if [ "$interface" = "lan" ]; then
+                       address=$(macaddr_add "$address" 1)
+               fi
+       fi
+
+       echo "$address"
+}
+
 rockchip_setup_macs()
 {
        local board="$1"
@@ -33,12 +56,12 @@ rockchip_setup_macs()
 
        case "$board" in
        friendlyarm,nanopi-r2s)
-               wan_mac=$(nanopi_r2s_generate_mac)
+               wan_mac=$(generate_mac_from_mmc_cid mmcblk0)
                lan_mac=$(macaddr_add "$wan_mac" 1)
                ;;
        friendlyarm,nanopi-r4s)
-               wan_mac=$(get_mac_binary "/sys/bus/i2c/devices/2-0051/eeprom" 0xfa)
-               lan_mac=$(macaddr_setbit_la "$wan_mac")
+               wan_mac=$(nanopi_r4s_get_mac wan)
+               lan_mac=$(nanopi_r4s_get_mac lan)
                ;;
        esac