[LEDE-DEV] [PATCH v2] ipq806x: add ap.dk01.1 board support

Roman Yeryomin roman at advem.lv
Mon Oct 16 07:04:19 PDT 2017


AP.DK01.1 is QCA dev board with:
- ipq4028 (quad core ARM @710MHz, 2x2 dual an+ac radios)
- 256MB RAM
- 32MB SPI flash
- QCA8075 ethernet switch (WAN port, 4x LAN ports)

First installation via u-boot:
sf probe
sf erase 0x180000 0x1a00000
tftpboot 0x84000000 lede-ipq806x-AP-DK01.1-C1-squashfs-sysupgrade.bin
sf write 0x84000000 0x180000 0x1a00000

Further via sysupgrade.

Changes:
- add partitions
- enable wifi and ethernet
- set max cpu speed to 710MHz
- set memory size to 256MB
- add image generation
- extract pre-cal data from ART partition

Wirespeed NAT can be achieved with spreading rx interrupts over different
cores. Wifi needs love -- too slow. Could be that latest ath10k helps,
didn't test yet.

Changes since v1:
- add hw description and install instruction

Signed-off-by: Roman Yeryomin <roman at advem.lv>
---
 .../etc/hotplug.d/firmware/11-ath10k-caldata       |  6 ++
 target/linux/ipq806x/base-files/lib/ipq806x.sh     |  3 +
 target/linux/ipq806x/image/Makefile                | 18 ++++-
 ...s-ipq4019-ap.dk01.1-add-256MB-memory-node.patch | 14 ++++
 ...2-dts-ipq4019-ap.dk01.1-fix-max-cpu-speed.patch | 15 ++++
 ...4-03-dts-ipq4019-ap.dk01.1-add-partitions.patch | 72 ++++++++++++++++++
 ...pq4019-ap.dk01.1-enable-wifi-and-ethernet.patch | 87 ++++++++++++++++++++++
 7 files changed, 214 insertions(+), 1 deletion(-)
 create mode 100644 target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap.dk01.1-add-256MB-memory-node.patch
 create mode 100644 target/linux/ipq806x/patches-4.9/864-02-dts-ipq4019-ap.dk01.1-fix-max-cpu-speed.patch
 create mode 100644 target/linux/ipq806x/patches-4.9/864-03-dts-ipq4019-ap.dk01.1-add-partitions.patch
 create mode 100644 target/linux/ipq806x/patches-4.9/864-04-dts-ipq4019-ap.dk01.1-enable-wifi-and-ethernet.patch

diff --git a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
index 39757eb..271667f 100644
--- a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
+++ b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
@@ -50,6 +50,9 @@ case "$FIRMWARE" in
 	fritz4040)
 		/usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x207 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
 		;;
+	ap-dk01.1-c1)
+		ath10kcal_extract "ART" 4096 12064
+		;;
 	esac
 	;;
 "ath10k/pre-cal-ahb-a800000.wifi.bin")
@@ -57,6 +60,9 @@ case "$FIRMWARE" in
 	fritz4040)
 		/usr/bin/fritz_cal_extract -i 1 -s 0x400 -e 0x208 -l 12064 -o /lib/firmware/$FIRMWARE $(find_mtd_chardev "urlader_config")
 		;;
+	ap-dk01.1-c1)
+		ath10kcal_extract "ART" 20480 12064
+		;;
 	esac
 	;;
 
diff --git a/target/linux/ipq806x/base-files/lib/ipq806x.sh b/target/linux/ipq806x/base-files/lib/ipq806x.sh
index e8ff7ea..940c7ef 100644
--- a/target/linux/ipq806x/base-files/lib/ipq806x.sh
+++ b/target/linux/ipq806x/base-files/lib/ipq806x.sh
@@ -14,6 +14,9 @@ ipq806x_board_detect() {
 	machine=$(cat /proc/device-tree/model)
 
 	case "$machine" in
+	*"AP-DK01.1-C1")
+		name="ap-dk01.1-c1"
+		;;
 	*"AP148")
 		name="ap148"
 		;;
diff --git a/target/linux/ipq806x/image/Makefile b/target/linux/ipq806x/image/Makefile
index 3a76c7f..60b3a71 100644
--- a/target/linux/ipq806x/image/Makefile
+++ b/target/linux/ipq806x/image/Makefile
@@ -264,7 +264,23 @@ define Device/AP-DK04.1-C1
 	DEVICE_TITLE := QCA AP-DK04.1-C1
 endef
 
+define Device/AP-DK01.1-C1
+	PROFILES += $$(DEVICE_NAME)
+	DEVICE_TITLE := QCA AP-DK01.1-C1
+	BOARD_NAME := ap-dk01.1-c1
+	DEVICE_DTS := qcom-ipq4019-ap.dk01.1-c1
+	KERNEL_LOADADDR := 0x80208000
+	KERNEL_INSTALL := 1
+	KERNEL_SIZE := 4096k
+	IMAGE_SIZE := 26624k
+	FILESYSTEMS := squashfs
+	$(call Device/FitImage)
+	IMAGES := sysupgrade.bin
+	IMAGE/sysupgrade.bin := append-kernel | pad-to $$$${KERNEL_SIZE} | append-rootfs | pad-rootfs | append-metadata
+	DEVICE_PACKAGES := ath10k-firmware-qca4019
+endef
+
 TARGET_DEVICES += AP148 AP148-legacy C2600 D7800 DB149 EA8500 FRITZ4040 R7500 \
-		  R7500v2 R7800 NBG6817 VR2600v AP-DK04.1-C1
+		  R7500v2 R7800 NBG6817 VR2600v AP-DK04.1-C1 AP-DK01.1-C1
 
 $(eval $(call BuildImage))
diff --git a/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap.dk01.1-add-256MB-memory-node.patch b/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap.dk01.1-add-256MB-memory-node.patch
new file mode 100644
index 0000000..8a80979
--- /dev/null
+++ b/target/linux/ipq806x/patches-4.9/864-01-dts-ipq4019-ap.dk01.1-add-256MB-memory-node.patch
@@ -0,0 +1,14 @@
+--- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
++++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
+@@ -20,6 +20,11 @@
+ 	model = "Qualcomm Technologies, Inc. IPQ4019/AP-DK01.1";
+ 	compatible = "qcom,ipq4019";
+ 
++	memory {
++		device_type = "memory";
++		reg = <0x80000000 0x10000000>;
++	};
++
+ 	clocks {
+                 xo: xo {
+                         compatible = "fixed-clock";
diff --git a/target/linux/ipq806x/patches-4.9/864-02-dts-ipq4019-ap.dk01.1-fix-max-cpu-speed.patch b/target/linux/ipq806x/patches-4.9/864-02-dts-ipq4019-ap.dk01.1-fix-max-cpu-speed.patch
new file mode 100644
index 0000000..e9540f4
--- /dev/null
+++ b/target/linux/ipq806x/patches-4.9/864-02-dts-ipq4019-ap.dk01.1-fix-max-cpu-speed.patch
@@ -0,0 +1,15 @@
+--- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
++++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
+@@ -135,3 +135,12 @@
+ 		};
+ 	};
+ };
++
++&cpu0_opp_table {
++	/delete-node/ opp at 666000000;
++
++	opp at 710000000 {
++		opp-hz = /bits/ 64 <710000000>;
++		clock-latency-ns = <256000>;
++	};
++};
diff --git a/target/linux/ipq806x/patches-4.9/864-03-dts-ipq4019-ap.dk01.1-add-partitions.patch b/target/linux/ipq806x/patches-4.9/864-03-dts-ipq4019-ap.dk01.1-add-partitions.patch
new file mode 100644
index 0000000..a7861cd
--- /dev/null
+++ b/target/linux/ipq806x/patches-4.9/864-03-dts-ipq4019-ap.dk01.1-add-partitions.patch
@@ -0,0 +1,72 @@
+--- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
++++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
+@@ -93,6 +93,69 @@
+ 				reg = <0>;
+ 				compatible = "mx25l25635e";
+ 				spi-max-frequency = <24000000>;
++
++				SBL1 at 0 {
++					label = "SBL1";
++					reg = <0x0 0x40000>;
++					read-only;
++				};
++
++				MIBIB at 40000 {
++					label = "MIBIB";
++					reg = <0x40000 0x20000>;
++					read-only;
++				};
++
++				QSEE at 60000 {
++					label = "QSEE";
++					reg = <0x60000 0x60000>;
++					read-only;
++				};
++
++				CDT at c0000 {
++					label = "CDT";
++					reg = <0xc0000 0x10000>;
++					read-only;
++				};
++
++				DDRPARAMS at d0000 {
++					label = "DDRPARAMS";
++					reg = <0xd0000 0x10000>;
++					read-only;
++				};
++
++				APPSBLENV at e0000 {
++					label = "APPSBLENV";
++					reg = <0xe0000 0x10000>;
++					read-only;
++				};
++
++				APPSBL at f0000 {
++					label = "APPSBL";
++					reg = <0xf0000 0x80000>;
++					read-only;
++				};
++
++				ART at 170000 {
++					label = "ART";
++					reg = <0x170000 0x10000>;
++					read-only;
++				};
++
++				kernel at 180000 {
++					label = "kernel";
++					reg = <0x180000 0x400000>;
++				};
++
++				rootfs at 580000 {
++					label = "rootfs";
++					reg = <0x580000 0x1600000>;
++				};
++
++				firmware at 180000 {
++					label = "firmware";
++					reg = <0x180000 0x1a00000>;
++				};
+ 			};
+ 		};
+ 
diff --git a/target/linux/ipq806x/patches-4.9/864-04-dts-ipq4019-ap.dk01.1-enable-wifi-and-ethernet.patch b/target/linux/ipq806x/patches-4.9/864-04-dts-ipq4019-ap.dk01.1-enable-wifi-and-ethernet.patch
new file mode 100644
index 0000000..cc90475
--- /dev/null
+++ b/target/linux/ipq806x/patches-4.9/864-04-dts-ipq4019-ap.dk01.1-enable-wifi-and-ethernet.patch
@@ -0,0 +1,87 @@
+--- a/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
++++ b/arch/arm/boot/dts/qcom-ipq4019-ap.dk01.1.dtsi
+@@ -15,6 +15,7 @@
+  */
+ 
+ #include "qcom-ipq4019.dtsi"
++#include <dt-bindings/soc/qcom,tcsr.h>
+ 
+ / {
+ 	model = "Qualcomm Technologies, Inc. IPQ4019/AP-DK01.1";
+@@ -25,6 +26,27 @@
+ 		reg = <0x80000000 0x10000000>;
+ 	};
+ 
++	reserved-memory {
++		#address-cells = <0x1>;
++		#size-cells = <0x1>;
++		ranges;
++
++		rsvd1 at 87000000 {
++			reg = <0x87000000 0x0500000>;
++			no-map;
++		};
++
++		wifi_dump at 87500000 {
++			reg = <0x87500000 0x600000>;
++			no-map;
++		};
++
++		rsvd2 at 87B00000 {
++			reg = <0x87b00000 0x500000>;
++			no-map;
++		};
++	};
++
+ 	clocks {
+                 xo: xo {
+                         compatible = "fixed-clock";
+@@ -196,6 +218,48 @@
+ 		usb2: usb2 at 60f8800 {
+ 			status = "ok";
+ 		};
++
++		wifi at a000000 {
++			status = "okay";
++		};
++
++		wifi at a800000 {
++			status = "okay";
++		};
++
++		ess-switch at c000000 {
++			status = "okay";
++		};
++
++		ess-psgmii at 98000 {
++			status = "okay";
++		};
++
++		edma at c080000 {
++			status = "okay";
++		};
++
++		mdio at 90000 {
++			status = "okay";
++		};
++
++		ess_tcsr at 1953000 {
++			compatible = "qcom,tcsr";
++			reg = <0x1953000 0x1000>;
++			qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
++		};
++
++		tcsr at 1949000 {
++			compatible = "qcom,tcsr";
++			reg = <0x1949000 0x100>;
++			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
++		};
++
++		tcsr at 1957000 {
++			compatible = "qcom,tcsr";
++			reg = <0x1957000 0x100>;
++			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
++		};
+ 	};
+ };
+ 
-- 
2.7.4




More information about the Lede-dev mailing list