lantiq: use BT HomeHub 5 Type A OEM partition layout
authorMathias Kresin <dev@kresin.me>
Sat, 3 Oct 2015 11:57:54 +0000 (13:57 +0200)
committerMathias Kresin <dev@kresin.me>
Tue, 29 Nov 2016 20:40:16 +0000 (21:40 +0100)
This way the on nand bad block table is preserved and used. Add support
for nand OOB ECC checksums as well. It should fix all reported ubi
errors, which were all related to bad nand blocks and a purged on nand
bad block table.

The existing ubi partition will be reused, which eliminates the need
to touch the caldata during initial install. The BT u-boot has support
for loading a kernel from an ubi volume. It isn't necessary any longer
to replace the BT u-boot with a custom compiled one to use LEDE.

It is required to restore the BT Firmware and install LEDE from scratch
to switch to the new partition layout.

An image for restoring the BT firmware and installing LEDE is provided
at https://github.com/mkresin/lede/releases.

Signed-off-by: Mathias Kresin <dev@kresin.me>
target/linux/lantiq/base-files/etc/board.d/02_network
target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
target/linux/lantiq/dts/BTHOMEHUBV5A.dts

index 16b85a815b914eec2bc200143d2f4f6dc300305b..c2a1fbe680a937e2441110bba4fcb3f9db9743b3 100755 (executable)
@@ -75,7 +75,8 @@ BTHOMEHUBV3A)
        ;;
 
 BTHOMEHUBV5A)
-       wan_mac=$(macaddr_add "$(mtd_get_mac_binary caldata 4364)" 1)
+       lan_mac=$(mtd_get_mac_binary_ubi caldata 4364)
+       wan_mac=$(macaddr_add "$lan_mac" 1)
        ucidef_add_switch "switch0" \
                "0:lan:3" "1:lan:4" "2:lan:2" "4:lan:1" "6t@eth0"
        ;;
index dc95da78a56e6e3cce1e3b980aa7860601855999..2511ed6014c9fb86da54415e4a36865ef8473e16 100644 (file)
@@ -1,24 +1,31 @@
 #!/bin/sh
 # Based on ar71xx 11-ath10k-caldata and 10-rt2x00-eeprom
 
+[ -e /lib/firmware/$FIRMWARE ] && exit 0
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+. /lib/functions/lantiq.sh
+. /lib/upgrade/nand.sh
+
 ath10k_caldata_die() {
        echo "ath10k caldata: " "$*"
        exit 1
 }
 
-ath10k_caldata_extract() {
+ath10k_caldata_extract_ubi() {
        local part=$1
        local offset=$2
-       local mtd
+       local count=$3
+       local ubidev=$(nand_find_ubi $CI_UBIPART)
+       local ubi
 
-       . /lib/functions.sh
+       ubi=$(nand_find_volume $ubidev $part)
+       [ -n "$ubi" ] || \
+               ath10k_caldata_die "no UBI volume found for $part"
 
-       mtd=$(find_mtd_part $part)
-       [ -n "$mtd" ] || \
-               ath10k_caldata_die "no mtd device found for partition $part"
-
-       dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=2116 || \
-               ath10k_caldata_die "failed to extract from $mtd"
+       dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
+               ath10k_caldata_die "failed to extract from $ubi"
 }
 
 ath10k_caldata_set_macaddr() {
@@ -28,20 +35,13 @@ ath10k_caldata_set_macaddr() {
                                conv=notrunc bs=1 seek=6 count=6
 }
 
-[ -e /lib/firmware/$FIRMWARE ] && exit 0
-. /lib/functions.sh
-. /lib/functions/system.sh
-. /lib/functions/lantiq.sh
-
 case "$FIRMWARE" in
 "ath10k/cal-pci-0000:02:00.0.bin")
        board=$(lantiq_board_name)
        case $board in
                BTHOMEHUBV5A)
-                       lan_mac=$(mtd_get_mac_binary caldata 4364)
-                       wifi_mac=$(macaddr_add "$lan_mac" 3)
-                       ath10k_caldata_extract "caldata" 20480
-                       ath10k_caldata_set_macaddr $wifi_mac
+                       ath10k_caldata_extract_ubi "caldata" 20480 2116
+                       ath10k_caldata_set_macaddr $(macaddr_add $(mtd_get_mac_binary_ubi caldata 4364) +3)
                        ;;
                *)
                        ath10k_caldata_die "board $board is not supported yet"
index 8185bf1949e6cf0caa7127ec76be23648f3ec44b..2776275ea258c9d388f673b1a90a63c384b52201 100644 (file)
@@ -115,7 +115,8 @@ case "$FIRMWARE" in
                                ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_ascii uboot-env ethaddr) +2) 268 1 258
                                ;;
                        BTHOMEHUBV5A)
-                               ath9k_eeprom_extract "caldata" 4096
+                               ath9k_ubi_eeprom_extract "caldata" 4096
+                               ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_binary_ubi caldata 4364) +2) 268 0 258
                                ;;
                        DGN3500*)
                                ath9k_eeprom_extract "calibration" 61440
index e1b3e7131d739c386031b7c02d70ace70bc935b5..df55456f0c1011acb3c0fbfdef1e01e3bfc780b5 100644 (file)
@@ -33,6 +33,9 @@
                                reg = <0x1 0x0 0x2000000>;
                                #address-cells = <1>;
                                #size-cells = <1>;
+                               nand-on-flash-bbt;
+                               nand-ecc-strength = <3>;
+                               nand-ecc-step-size = <256>;
 
                                partitions {
                                        compatible = "fixed-partitions";
 
                                        partition@0 {
                                                label = "u-boot";
-                                               reg = <0x0 0x40000>;
+                                               reg = <0x0 0xa0000>;
                                                read-only;
                                        };
-                                       partition@40000 {
+                                       partition@a0000 {
                                                label = "uboot-env";
-                                               reg = <0x40000 0x40000>;
-                                       };
-                                       caldata: partition@80000 {
-                                               label = "caldata";
-                                               reg = <0x80000 0x20000>;
+                                               reg = <0xa0000 0x20000>;
                                                read-only;
                                        };
-                                       partition@a0000 {
-                                               label = "kernel";
-                                               reg = <0xa0000 0x200000>;
+                                       partition@c0000 {
+                                               label = "unused";
+                                               reg = <0xc0000 0x40000>;
                                        };
-                                       partition@2a0000 {
+                                       partition@100000 {
                                                label = "ubi";
-                                               reg = <0x2a0000 0x7d60000>;
+                                               reg = <0x100000 0x7e80000>;
                                        };
+                                       /*
+                                        * last 512 KiB are for the bad block table, not writable
+                                        */
                                };
                        };
                };
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0>;
-               mtd-mac-address = <&caldata 0x110c>;
                lantiq,switch;
 
                ethernet@0 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <1>;
-               mtd-mac-address = <&caldata 0x110c>;
-               mtd-mac-address-increment = <4>;
                lantiq,wan;
 
                ethernet@5 {