[OpenWrt-Devel] [PATCH] ath79: speed up ath9k-eeprom extraction

Dmitry Tunin hanipouspilot at gmail.com
Fri Feb 22 09:32:03 EST 2019


пт, 22 февр. 2019 г. в 16:57, Petr Štetiar <ynezz at true.cz>:
>
> Dmitry Tunin <hanipouspilot at gmail.com> [2019-02-22 16:13:52]:
>
> > What do you mean by "generalize"? Fix it on all platforms, or having
> > common 10-ath9k-eeprom, 11-ath10k-caldata, etc files., or common code
> > that will be used on all platforms in some other file?
> > The first approach is obviously simple enough, but the second is not
> > that easy, but doable.
>
> Simply moving common bits to some generic file which could be shared by all
> platforms. Something like this for ar71xx, ath79 and ramips, untested.
>
> ---
>  package/base-files/files/lib/functions/eeprom.sh   | 54 ++++++++++++
>  .../etc/hotplug.d/firmware/10-ath9k-eeprom         | 97 +++++-----------------
>  .../etc/hotplug.d/firmware/10-ath9k-eeprom         | 84 +++++--------------
>  .../etc/hotplug.d/firmware/10-rt2x00-eeprom        | 32 ++-----
>  4 files changed, 106 insertions(+), 161 deletions(-)
>  create mode 100644 package/base-files/files/lib/functions/eeprom.sh
>
> diff --git a/package/base-files/files/lib/functions/eeprom.sh b/package/base-files/files/lib/functions/eeprom.sh
> new file mode 100644
> index 0000000..3b585da
> --- /dev/null
> +++ b/package/base-files/files/lib/functions/eeprom.sh
> @@ -0,0 +1,54 @@
> +. /lib/functions.sh
> +. /lib/functions/system.sh
> +
> +eeprom_die() {
> +       echo "eeprom: " "$*"
> +       exit 1
> +}
> +
> +mtd_eeprom_extract() {
> +       local part=$1
> +       local offset=$2
> +       local count=$3
> +       local mtd
> +
> +       mtd=$(find_mtd_chardev $part)
> +       [ -n "$mtd" ] || \
> +               eeprom_die "no mtd device found for partition $part"
> +
> +       dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
> +               eeprom_die "failed to extract from $mtd"
> +}
> +
> +mtd_eeprom_extract_reverse() {
> +       local part=$1
> +       local offset=$2
> +       local count=$3
> +       local mtd
> +       local reversed
> +       local caldata
> +
> +       mtd=$(find_mtd_chardev "$part")
> +       reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd)
> +
> +       for byte in $reversed; do
> +               caldata="\x${byte}${caldata}"
> +       done
> +
> +       printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
> +}
> +
> +ubi_eeprom_extract() {
> +       local part=$1
> +       local offset=$2
> +       local count=$3
> +       local ubidev=$(nand_find_ubi $CI_UBIPART)
> +       local ubi
> +
> +       ubi=$(nand_find_volume $ubidev $part)
> +       [ -n "$ubi" ] || \
> +               eeprom_die "no UBI volume found for $part"
> +
> +       dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
> +               eeprom_die "failed to extract from $ubi"
> +}
> diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> index 94bce7d..21808fb 100644
> --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> @@ -2,60 +2,7 @@
>
>  [ -e /lib/firmware/$FIRMWARE ] && exit 0
>
> -. /lib/functions.sh
> -. /lib/functions/system.sh
> -
> -ath9k_eeprom_die() {
> -       echo "ath9k eeprom: " "$*"
> -       exit 1
> -}
> -
> -ath9k_eeprom_extract() {
> -       local part=$1
> -       local offset=$2
> -       local count=$3
> -       local mtd
> -
> -       mtd=$(find_mtd_chardev $part)
> -       [ -n "$mtd" ] || \
> -               ath9k_eeprom_die "no mtd device found for partition $part"
> -
> -       dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
> -               ath9k_eeprom_die "failed to extract from $mtd"
> -}
> -
> -ath9k_ubi_eeprom_extract() {
> -       local part=$1
> -       local offset=$2
> -       local count=$3
> -       local ubidev=$(nand_find_ubi $CI_UBIPART)
> -       local ubi
> -
> -       ubi=$(nand_find_volume $ubidev $part)
> -       [ -n "$ubi" ] || \
> -               ath9k_eeprom_die "no UBI volume found for $part"
> -
> -       dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
> -               ath9k_eeprom_die "failed to extract from $ubi"
> -}
> -
> -ath9k_eeprom_extract_reverse() {
> -       local part=$1
> -       local offset=$2
> -       local count=$3
> -       local mtd
> -       local reversed
> -       local caldata
> -
> -       mtd=$(find_mtd_chardev "$part")
> -       reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd)
> -
> -       for byte in $reversed; do
> -               caldata="\x${byte}${caldata}"
> -       done
> -
> -       printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
> -}
> +. /lib/functions/eeprom.sh
>
>  ath9k_patch_firmware_mac() {
>         local mac=$1
> @@ -72,48 +19,48 @@ case "$FIRMWARE" in
>         case $board in
>         c-55|\
>         c-60)
> -               ath9k_eeprom_extract "art" 4096 2048
> +               mtd_eeprom_extract "art" 4096 2048
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +1)
>                 ;;
>         fritz4020|\
>         fritz450e)
> -               ath9k_eeprom_extract_reverse "urlader" 5441 1088
> +               mtd_eeprom_extract_reverse "urlader" 5441 1088
>                 ;;
>         mr18)
>                 . /lib/upgrade/nand.sh
>
>                 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
> -                       ath9k_ubi_eeprom_extract "caldata" 4096 2048
> +                       ubi_eeprom_extract "caldata" 4096 2048
>                 else
> -                       ath9k_eeprom_extract "odm-caldata" 4096 2048
> +                       mtd_eeprom_extract "odm-caldata" 4096 2048
>                 fi
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +1)
>                 ;;
>         r6100 | \
>         wndr3700v4 | \
>         wndr4300)
> -               ath9k_eeprom_extract "caldata" 4096 2048
> +               mtd_eeprom_extract "caldata" 4096 2048
>                 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 0)
>                 ;;
>         rambutan)
> -               ath9k_eeprom_extract "art" 4096 2048
> +               mtd_eeprom_extract "art" 4096 2048
>                 ;;
>         wlr8100)
> -               ath9k_eeprom_extract "art" 4096 2048
> +               mtd_eeprom_extract "art" 4096 2048
>                 ath9k_patch_firmware_mac $(mtd_get_mac_ascii u-boot-env "ethaddr")
>                 ;;
>         z1)
>                 . /lib/upgrade/nand.sh
>
>                 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
> -                       ath9k_ubi_eeprom_extract "caldata" 4096 2048
> +                       ubi_eeprom_extract "caldata" 4096 2048
>                 else
> -                       ath9k_eeprom_extract "origcaldata" 4096 2048
> +                       mtd_eeprom_extract "origcaldata" 4096 2048
>                 fi
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2)
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
> @@ -121,39 +68,39 @@ case "$FIRMWARE" in
>  "pci_wmac0.eeprom")
>         case $board in
>         c-55)
> -               ath9k_eeprom_extract "art" 20480 2048
> +               mtd_eeprom_extract "art" 20480 2048
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary art 0) +2)
>                 ;;
>         fritz300e)
> -               ath9k_eeprom_extract_reverse "urloader" 5441 1088
> +               mtd_eeprom_extract_reverse "urloader" 5441 1088
>                 ;;
>         mr18)
>                 . /lib/upgrade/nand.sh
>
>                 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
> -                       ath9k_ubi_eeprom_extract "caldata" 20480 2048
> +                       ubi_eeprom_extract "caldata" 20480 2048
>                 else
> -                       ath9k_eeprom_extract "odm-caldata" 20480 2048
> +                       mtd_eeprom_extract "odm-caldata" 20480 2048
>                 fi
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +2)
>                 ;;
>         wndr3700v4 | \
>         wndr4300)
> -               ath9k_eeprom_extract "caldata" 20480 2048
> +               mtd_eeprom_extract "caldata" 20480 2048
>                 ath9k_patch_firmware_mac $(mtd_get_mac_binary caldata 12)
>                 ;;
>         z1)
>                 . /lib/upgrade/nand.sh
>
>                 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
> -                       ath9k_ubi_eeprom_extract "caldata" 86016 4096
> +                       ubi_eeprom_extract "caldata" 86016 4096
>                 else
> -                       ath9k_eeprom_extract "origcaldata" 86016 4096
> +                       mtd_eeprom_extract "origcaldata" 86016 4096
>                 fi
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3)
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
> @@ -164,14 +111,14 @@ case "$FIRMWARE" in
>                 . /lib/upgrade/nand.sh
>
>                 if [ -n "$(nand_find_volume ubi0 caldata)" ]; then
> -                       ath9k_ubi_eeprom_extract "caldata" 36864 2048
> +                       ubi_eeprom_extract "caldata" 36864 2048
>                 else
> -                       ath9k_eeprom_extract "odm-caldata" 36864 2048
> +                       mtd_eeprom_extract "odm-caldata" 36864 2048
>                 fi
>                 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) +3)
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
> diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> index 8b217d1..8979075 100644
> --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
> @@ -2,45 +2,7 @@
>
>  [ -e /lib/firmware/$FIRMWARE ] && exit 0
>
> -. /lib/functions.sh
> -. /lib/functions/system.sh
> -
> -ath9k_eeprom_die() {
> -       echo "ath9k eeprom: " "$*"
> -       exit 1
> -}
> -
> -ath9k_eeprom_extract() {
> -       local part=$1
> -       local offset=$2
> -       local count=$3
> -       local mtd
> -
> -       mtd=$(find_mtd_chardev $part)
> -       [ -n "$mtd" ] || \
> -               ath9k_eeprom_die "no mtd device found for partition $part"
> -
> -       dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
> -               ath9k_eeprom_die "failed to extract from $mtd"
> -}
> -
> -ath9k_eeprom_extract_reverse() {
> -       local part=$1
> -       local offset=$2
> -       local count=$3
> -       local mtd
> -       local reversed
> -       local caldata
> -
> -       mtd=$(find_mtd_chardev "$part")
> -       reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd)
> -
> -       for byte in $reversed; do
> -               caldata="\x${byte}${caldata}"
> -       done
> -
> -       printf "%b" "$caldata" > /lib/firmware/$FIRMWARE
> -}
> +. /lib/functions/eeprom.sh
>
>  xor() {
>         local val
> @@ -98,50 +60,50 @@ case "$FIRMWARE" in
>  "ath9k-eeprom-ahb-18100000.wmac.bin")
>         case $board in
>         avm,fritz4020)
> -               ath9k_eeprom_extract_reverse "urlader" 5441 1088
> +               mtd_eeprom_extract_reverse "urlader" 5441 1088
>                 ;;
>         dlink,dir-825-c1|\
>         dlink,dir-835-a1)
> -               ath9k_eeprom_extract "art" 4096 1088
> +               mtd_eeprom_extract "art" 4096 1088
>                 ath9k_patch_fw_mac_crc $(mtd_get_mac_text "mac" 4) 2
>                 ;;
>         dlink,dir-859-a1)
> -               ath9k_eeprom_extract "art" 4096 1088
> +               mtd_eeprom_extract "art" 4096 1088
>                 ath9k_patch_fw_mac $(mtd_get_mac_ascii devdata "wlan24mac") 2
>                 ;;
>         iodata,wn-ac1167dgr|\
>         iodata,wn-ac1600dgr|\
>         iodata,wn-ac1600dgr2|\
>         iodata,wn-ag300dgr)
> -               ath9k_eeprom_extract "art" 4096 1088
> +               mtd_eeprom_extract "art" 4096 1088
>                 ath9k_patch_fw_mac $(mtd_get_mac_ascii u-boot-env ethaddr) 2
>                 ;;
>         nec,wg800hp)
> -               ath9k_eeprom_extract "art" 4096 1088
> +               mtd_eeprom_extract "art" 4096 1088
>                 ath9k_patch_fw_mac $(mtd_get_mac_text board_data 1664) 2
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
>  "ath9k-eeprom-pci-0000:00:00.0.bin")
>         case $board in
>         avm,fritz300e)
> -               ath9k_eeprom_extract_reverse "urloader" 5441 1088
> +               mtd_eeprom_extract_reverse "urloader" 5441 1088
>                 ;;
>         buffalo,whr-g301n|\
>         buffalo,wzr-hp-g302h-a1a0|\
>         tplink,tl-wr841-v5|\
>         tplink,tl-wr941-v4)
> -               ath9k_eeprom_extract "art" 4096 3768
> +               mtd_eeprom_extract "art" 4096 3768
>                 ;;
>         buffalo,wzr-hp-g450h)
> -               ath9k_eeprom_extract "ART" 4096 1088
> +               mtd_eeprom_extract "ART" 4096 1088
>                 ;;
>         dlink,dir-825-c1|\
>         dlink,dir-835-a1)
> -               ath9k_eeprom_extract "art" 20480 1088
> +               mtd_eeprom_extract "art" 20480 1088
>                 ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "mac" 24) 1) 2
>                 ;;
>         ocedo,raccoon|\
> @@ -149,7 +111,7 @@ case "$FIRMWARE" in
>         tplink,tl-wdr4300|\
>         tplink,tl-wdr4900-v2|\
>         winchannel,wb2000)
> -               ath9k_eeprom_extract "art" 20480 1088
> +               mtd_eeprom_extract "art" 20480 1088
>                 ;;
>         netgear,wnr612-v2|\
>         on,n150r|\
> @@ -167,20 +129,20 @@ case "$FIRMWARE" in
>         ubnt,bullet-m|\
>         ubnt,nano-m|\
>         ubnt,rocket-m)
> -               ath9k_eeprom_extract "art" 4096 4096
> +               mtd_eeprom_extract "art" 4096 4096
>                 ;;
>         pqi,air-pen)
> -               ath9k_eeprom_extract "art" 4096 2002
> +               mtd_eeprom_extract "art" 4096 2002
>                 ;;
>         ubnt,unifi)
> -               ath9k_eeprom_extract "art" 4096 2048
> +               mtd_eeprom_extract "art" 4096 2048
>                 ;;
>         wd,mynet-wifi-rangeextender)
> -               ath9k_eeprom_extract "art" 4096 4096
> +               mtd_eeprom_extract "art" 4096 4096
>                 ath9k_patch_fw_mac_crc $(nvram get wl0_hwaddr) "$mac" 2
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
> @@ -190,14 +152,14 @@ case "$FIRMWARE" in
>         netgear,wndr3700|\
>         netgear,wndr3700v2|\
>         netgear,wndr3800)
> -               ath9k_eeprom_extract "art" 4096 3768
> +               mtd_eeprom_extract "art" 4096 3768
>                 ;;
>         dlink,dir-825-b1)
> -               ath9k_eeprom_extract "caldata" 4096 3768
> +               mtd_eeprom_extract "caldata" 4096 3768
>                 ath9k_patch_fw_mac_crc $(mtd_get_mac_text "caldata" 65440) 524
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
> @@ -207,14 +169,14 @@ case "$FIRMWARE" in
>         netgear,wndr3700|\
>         netgear,wndr3700v2|\
>         netgear,wndr3800)
> -               ath9k_eeprom_extract "art" 20480 3768
> +               mtd_eeprom_extract "art" 20480 3768
>                 ;;
>         dlink,dir-825-b1)
> -               ath9k_eeprom_extract "caldata" 20480 3768
> +               mtd_eeprom_extract "caldata" 20480 3768
>                 ath9k_patch_fw_mac_crc $(macaddr_add $(mtd_get_mac_text "caldata" 65460) 1) 524
>                 ;;
>         *)
> -               ath9k_eeprom_die "board $board is not supported yet"
> +               eeprom_die "board $board is not supported yet"
>                 ;;
>         esac
>         ;;
> diff --git a/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom b/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
> index 13a4687..60b0e68 100644
> --- a/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
> +++ b/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom
> @@ -1,24 +1,5 @@
>  #!/bin/sh
>
> -rt2x00_eeprom_die() {
> -       echo "rt2x00 eeprom: " "$*"
> -       exit 1
> -}
> -
> -rt2x00_eeprom_extract() {
> -       local part=$1
> -       local offset=$2
> -       local count=$3
> -       local mtd
> -
> -       mtd=$(find_mtd_part $part)
> -       [ -n "$mtd" ] || \
> -               rt2x00_eeprom_die "no mtd device found for partition $part"
> -
> -       dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
> -               rt2x00_eeprom_die "failed to extract from $mtd"
> -}
> -
>  jboot_eeprom_extract() {
>         local part=$1
>         local offset=$2
> @@ -26,21 +7,21 @@ jboot_eeprom_extract() {
>
>         mtd=$(find_mtd_part $part)
>         [ -n "$mtd" ] || \
> -               rt2x00_eeprom_die "no mtd device found for partition $part"
> +               eeprom_die "no mtd device found for partition $part"
>
>         jboot_config_read -i $mtd -o $offset -e /lib/firmware/$FIRMWARE  2>/dev/null || \
> -               rt2x00_eeprom_die "failed to extract from $mtd"
> +               eeprom_die "failed to extract from $mtd"
>  }
>
>  rt2x00_eeprom_set_macaddr() {
>         local macaddr=$1
>
>         [ -n "$macaddr" ] || \
> -               rt2x00_eeprom_die "invalid wlan mac address"
> +               eeprom_die "invalid wlan mac address"
>
>         macaddr_2bin $macaddr | dd of=/lib/firmware/$FIRMWARE \
>                                 conv=notrunc bs=1 seek=4 count=6 2>/dev/null || \
> -               rt2x00_eeprom_die "failed to write mac address to eeprom file"
> +               eeprom_die "failed to write mac address to eeprom file"
>  }
>
>  FW="/lib/firmware/$FIRMWARE"
> @@ -48,6 +29,7 @@ FW="/lib/firmware/$FIRMWARE"
>
>  . /lib/functions.sh
>  . /lib/functions/system.sh
> +. /lib/functions/eeprom.sh
>
>  board=$(board_name)
>
> @@ -67,11 +49,11 @@ case "$FIRMWARE" in
>                 ;;
>         tiny-ac)
>                 wifi_mac=$(mtd_get_mac_ascii u-boot-env INIC_MAC_ADDR)
> -               rt2x00_eeprom_extract "factory" 0 512
> +               mtd_eeprom_extract "factory" 0 512
>                 rt2x00_eeprom_set_macaddr $wifi_mac
>                 ;;
>         *)
> -               rt2x00_eeprom_die "Please define mtd-eeprom in $board DTS file!"
> +               eeprom_die "Please define mtd-eeprom in $board DTS file!"
>                 ;;
>         esac
>         ;;
>
> -- ynezz

The only problem here is that not all platforms need it.

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list