[source] lantiq: use BT HomeHub 5 Type A OEM partition layout

LEDE Commits lede-commits at lists.infradead.org
Tue Nov 29 12:41:23 PST 2016


mkresin pushed a commit to source.git, branch master:
https://git.lede-project.org/0e34459e6b4d7b3753b27cf97f304f86e80155ca

commit 0e34459e6b4d7b3753b27cf97f304f86e80155ca
Author: Mathias Kresin <dev at kresin.me>
AuthorDate: Sat Oct 3 13:57:54 2015 +0200

    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 at kresin.me>
---
 .../linux/lantiq/base-files/etc/board.d/02_network |  3 +-
 .../etc/hotplug.d/firmware/11-ath10k-caldata       | 36 +++++++++++-----------
 .../etc/hotplug.d/firmware/12-ath9k-eeprom         |  3 +-
 target/linux/lantiq/dts/BTHOMEHUBV5A.dts           | 29 +++++++++--------
 4 files changed, 36 insertions(+), 35 deletions(-)

diff --git a/target/linux/lantiq/base-files/etc/board.d/02_network b/target/linux/lantiq/base-files/etc/board.d/02_network
index 16b85a8..c2a1fbe 100755
--- a/target/linux/lantiq/base-files/etc/board.d/02_network
+++ b/target/linux/lantiq/base-files/etc/board.d/02_network
@@ -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 at eth0"
 	;;
diff --git a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index dc95da7..2511ed6 100644
--- a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -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"
diff --git a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
index 8185bf1..2776275 100644
--- a/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
+++ b/target/linux/lantiq/base-files/etc/hotplug.d/firmware/12-ath9k-eeprom
@@ -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
diff --git a/target/linux/lantiq/dts/BTHOMEHUBV5A.dts b/target/linux/lantiq/dts/BTHOMEHUBV5A.dts
index e1b3e71..df55456 100644
--- a/target/linux/lantiq/dts/BTHOMEHUBV5A.dts
+++ b/target/linux/lantiq/dts/BTHOMEHUBV5A.dts
@@ -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";
@@ -41,26 +44,25 @@
 
 					partition at 0 {
 						label = "u-boot";
-						reg = <0x0 0x40000>;
+						reg = <0x0 0xa0000>;
 						read-only;
 					};
-					partition at 40000 {
+					partition at a0000 {
 						label = "uboot-env";
-						reg = <0x40000 0x40000>;
-					};
-					caldata: partition at 80000 {
-						label = "caldata";
-						reg = <0x80000 0x20000>;
+						reg = <0xa0000 0x20000>;
 						read-only;
 					};
-					partition at a0000 {
-						label = "kernel";
-						reg = <0xa0000 0x200000>;
+					partition at c0000 {
+						label = "unused";
+						reg = <0xc0000 0x40000>;
 					};
-					partition at 2a0000 {
+					partition at 100000 {
 						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>;
 		#size-cells = <0>;
 		reg = <0>;
-		mtd-mac-address = <&caldata 0x110c>;
 		lantiq,switch;
 
 		ethernet at 0 {
@@ -250,8 +251,6 @@
 		#address-cells = <1>;
 		#size-cells = <0>;
 		reg = <1>;
-		mtd-mac-address = <&caldata 0x110c>;
-		mtd-mac-address-increment = <4>;
 		lantiq,wan;
 
 		ethernet at 5 {



More information about the lede-commits mailing list