[LEDE-DEV] [PATCH v2 2/2] ar71xx: Do not use a hardcoded ath10k firmware mac address

Martin Blumenstingl martin.blumenstingl at googlemail.com
Sun Sep 18 14:31:48 PDT 2016


On Sun, Sep 18, 2016 at 11:29 PM, Martin Blumenstingl
<martin.blumenstingl at googlemail.com> wrote:
> ar71xx has an init-script for special devices where the ath10k OTP
> calibration data is stored on the PCIe card's EEPROM (and thus can only
> be read by ath10k). Unfortunately the OTP data uses the default mac
> address (= all devices come with the same mac address, which leads to
> problems when you have multiple of these devices in the same network).
>
> To work around this the mac address is patched in the firmware during
> the first boot of the device. To prevent flash wear this was only done
> if the ath10k firmware matched a hardcoded md5sum.
> However, if the md5sum does not match this can mean that either the mac
> address was already patched (which is fine) - unfortunately it can also
> mean that the firmware version was updated without updating the
> hardcoded md5sum.
>
> Change the "was the mac address already patched" check to actually
> compare the mac address inside the ath10k firmware.
>
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl at googlemail.com>
> ---
>  .../linux/ar71xx/base-files/lib/preinit/82_patch_ath10k | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/target/linux/ar71xx/base-files/lib/preinit/82_patch_ath10k b/target/linux/ar71xx/base-files/lib/preinit/82_patch_ath10k
> index af12bd5..b6af921 100644
> --- a/target/linux/ar71xx/base-files/lib/preinit/82_patch_ath10k
> +++ b/target/linux/ar71xx/base-files/lib/preinit/82_patch_ath10k
> @@ -12,16 +12,19 @@ do_patch_ath10k_firmware() {
>                 return
>         }
>
> -       local firmware_md5_orig="fcb2fbd42d73a63fbf603505c718cbde"
> -       local firmware_md5_current="$(md5sum $firmware_file)"
> -       local firmware_md5_current="${firmware_md5_current%% *}"
> +       local mac_offset=276
> +       local mac_length=6
> +       local default_mac="00:03:07:12:34:56"
> +       local current_mac="$(hexdump -v -n $mac_length -s $mac_offset -e '5/1 "%02x:" 1/1 "%02x"' $firmware_file  2>/dev/null)"
>
> -       # verify md5sum before patching
> -       [ "$firmware_md5_orig" != "$firmware_md5_current" ] || {
> +       # check if mac address was already patched
> +       [ "$default_mac" = "$current_mac" ] || {
>                 return
>         }
>
> -       # some boards have bogus mac in otp, patch the default mac in the firmware
> +       # some boards have bogus mac in otp (= directly in the PCIe card's EEPROM).
> +       # we have to patch the default mac in the firmware because we cannot change
> +       # the otp.
>         case $(ar71xx_board_name) in
>                 dgl-5500-a1 | tew-823dru)
I should mention that I do not have access to any of these devices,
thus I cannot test this properly.
So it would be great if someone with access to any of these devices
could give it a try.



More information about the Lede-dev mailing list