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 16b85a815b914eec2bc200143d2f4f6dc300305b..c2a1fbe680a937e2441110bba4fcb3f9db9743b3 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@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 dc95da78a56e6e3cce1e3b980aa7860601855999..2511ed6014c9fb86da54415e4a36865ef8473e16 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 8185bf1949e6cf0caa7127ec76be23648f3ec44b..2776275ea258c9d388f673b1a90a63c384b52201 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 e1b3e7131d739c386031b7c02d70ace70bc935b5..df55456f0c1011acb3c0fbfdef1e01e3bfc780b5 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@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
+					 */
 				};
 			};
 		};
@@ -216,7 +218,6 @@
 		#address-cells = <1>;
 		#size-cells = <0>;
 		reg = <0>;
-		mtd-mac-address = <&caldata 0x110c>;
 		lantiq,switch;
 
 		ethernet@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@5 {