lantiq: use BT HomeHub 5 Type A OEM partition layout

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>
This commit is contained in:
Mathias Kresin 2015-10-03 13:57:54 +02:00
parent 860210c373
commit 0e34459e6b
4 changed files with 38 additions and 37 deletions

View File

@ -75,7 +75,8 @@ BTHOMEHUBV3A)
;; ;;
BTHOMEHUBV5A) 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" \ ucidef_add_switch "switch0" \
"0:lan:3" "1:lan:4" "2:lan:2" "4:lan:1" "6t@eth0" "0:lan:3" "1:lan:4" "2:lan:2" "4:lan:1" "6t@eth0"
;; ;;

View File

@ -1,24 +1,31 @@
#!/bin/sh #!/bin/sh
# Based on ar71xx 11-ath10k-caldata and 10-rt2x00-eeprom # 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() { ath10k_caldata_die() {
echo "ath10k caldata: " "$*" echo "ath10k caldata: " "$*"
exit 1 exit 1
} }
ath10k_caldata_extract() { ath10k_caldata_extract_ubi() {
local part=$1 local part=$1
local offset=$2 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) dd if=/dev/$ubi of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count 2>/dev/null || \
[ -n "$mtd" ] || \ ath10k_caldata_die "failed to extract from $ubi"
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"
} }
ath10k_caldata_set_macaddr() { ath10k_caldata_set_macaddr() {
@ -28,20 +35,13 @@ ath10k_caldata_set_macaddr() {
conv=notrunc bs=1 seek=6 count=6 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 case "$FIRMWARE" in
"ath10k/cal-pci-0000:02:00.0.bin") "ath10k/cal-pci-0000:02:00.0.bin")
board=$(lantiq_board_name) board=$(lantiq_board_name)
case $board in case $board in
BTHOMEHUBV5A) BTHOMEHUBV5A)
lan_mac=$(mtd_get_mac_binary caldata 4364) ath10k_caldata_extract_ubi "caldata" 20480 2116
wifi_mac=$(macaddr_add "$lan_mac" 3) ath10k_caldata_set_macaddr $(macaddr_add $(mtd_get_mac_binary_ubi caldata 4364) +3)
ath10k_caldata_extract "caldata" 20480
ath10k_caldata_set_macaddr $wifi_mac
;; ;;
*) *)
ath10k_caldata_die "board $board is not supported yet" ath10k_caldata_die "board $board is not supported yet"

View 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 ath9k_patch_firmware_mac $(macaddr_add $(mtd_get_mac_ascii uboot-env ethaddr) +2) 268 1 258
;; ;;
BTHOMEHUBV5A) 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*) DGN3500*)
ath9k_eeprom_extract "calibration" 61440 ath9k_eeprom_extract "calibration" 61440

View File

@ -33,6 +33,9 @@
reg = <0x1 0x0 0x2000000>; reg = <0x1 0x0 0x2000000>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
nand-on-flash-bbt;
nand-ecc-strength = <3>;
nand-ecc-step-size = <256>;
partitions { partitions {
compatible = "fixed-partitions"; compatible = "fixed-partitions";
@ -41,26 +44,25 @@
partition@0 { partition@0 {
label = "u-boot"; label = "u-boot";
reg = <0x0 0x40000>; reg = <0x0 0xa0000>;
read-only;
};
partition@40000 {
label = "uboot-env";
reg = <0x40000 0x40000>;
};
caldata: partition@80000 {
label = "caldata";
reg = <0x80000 0x20000>;
read-only; read-only;
}; };
partition@a0000 { partition@a0000 {
label = "kernel"; label = "uboot-env";
reg = <0xa0000 0x200000>; reg = <0xa0000 0x20000>;
read-only;
}; };
partition@2a0000 { partition@c0000 {
label = "unused";
reg = <0xc0000 0x40000>;
};
partition@100000 {
label = "ubi"; label = "ubi";
reg = <0x2a0000 0x7d60000>; reg = <0x100000 0x7e80000>;
}; };
/*
* last 512 KiB are for the bad block table, not writable
*/
}; };
}; };
}; };
@ -216,7 +218,6 @@
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
reg = <0>; reg = <0>;
mtd-mac-address = <&caldata 0x110c>;
lantiq,switch; lantiq,switch;
ethernet@0 { ethernet@0 {
@ -250,8 +251,6 @@
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
reg = <1>; reg = <1>;
mtd-mac-address = <&caldata 0x110c>;
mtd-mac-address-increment = <4>;
lantiq,wan; lantiq,wan;
ethernet@5 { ethernet@5 {