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

Roman Yeryomin roman at advem.lv
Mon Oct 16 12:10:52 PDT 2017


On 2017-10-16 20:32, Christian Lamparter wrote:
> Added John, maybe he has more comments.
> 
> On Monday, October 16, 2017 5:04:19 PM CEST Roman Yeryomin wrote:
>> AP.DK01.1 is QCA dev board with:
>> - ipq4028 (quad core ARM @710MHz, 2x2 dual an+ac radios)
>                            ^^ might not be correct. more to this below.
>> - 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
> From what I know, tftpboot sets $filesize enviroment variable. This has
> the advantage that you don't need to write all the 
> random?/uninitialized
> memory to the flash. After all 0x1a00000 is like 26MiB.

I didn't actually, but also didn't know about $filesize, thanks for the 
hint

>> 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.
> That "Wifi needs love" stinks of board-2.bin issues. And we had to deal
> with this before:
> <http://lists.infradead.org/pipermail/ath10k/2016-November/008763.html>
> 
> Verify that you have the correct (and up to date) board-2.bin for the 
> board.
> please add the board's board-2.bin to the ipq-wifi package.

I was going to deal with wifi related issues later.

>> 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/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
>    This "qcom-ipq4019-ap.dk01.1-c1" is important later on.
> 
>> +	KERNEL_LOADADDR := 0x80208000
>> +	KERNEL_INSTALL := 1
>> +	KERNEL_SIZE := 4096k
>> +	IMAGE_SIZE := 26624k
>> +	FILESYSTEMS := squashfs
>> +	$(call Device/FitImage)
> Any reason why this include is not at the top of the define?

This is kernel image generation, right before full image.
Actually I don't understand why it's put on top.

>> +	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
> Why are you patching the qcom-ipq4019-ap.dk01.1.dtsi?
> And not the qcom-ipq4019-ap.dk01.1-c1.dts?

Hmm, missed that one.

>> +@@ -20,6 +20,11 @@
>> + 	model = "Qualcomm Technologies, Inc. IPQ4019/AP-DK01.1";
>> + 	compatible = "qcom,ipq4019";
> I think this should be "qcom,ipq4019-ap.dk01.1-c1", "qcom,ipq4019".
> The device-tree folks stick to their rules in the
> usage-model.txt / 2.2 Platform Identification
> <https://www.kernel.org/doc/Documentation/devicetree/usage-model.txt>

I didn't change that. And will not in v3, since I'm going to patch 
qcom-ipq4019-ap.dk01.1-c1.dts

>> +
>> ++	memory {
>> ++		device_type = "memory";
>> ++		reg = <0x80000000 0x10000000>;
>> ++	};
>> ++
> This shouldn't be in the .dtsi. Not all IPQ4019 have 256MiBs of RAM.
> The ASUS RT-AC58U only has 128 MiB. And on the other side of the
> spectrum, qualcomm's says the chip supports up to 1GiB.
> <https://www.qualcomm.com/products/ipq4019>
> 
>> + 	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>;
>> ++	};
>> ++};
> This looks rather familiar. Like exactly a 1:1 copy from the FB4040's 
> dts
> right here:
> https://github.com/lede-project/source/blob/master/target/linux/ipq806x/files-4.9/arch/arm/boot/dts/qcom-ipq4019-fritz4040.dts#L286
> Is this true?
> 
> There's a reason to stick with the 666MHz rate though. You should check
> if the device produces messages like:
> [    1.399981] cpufreq: cpufreq_online: CPU0: Running at unlisted
> freq: 666000 KHz
> [    1.400256] cpufreq: cpufreq_online: CPU0: Unlisted initial
> frequency changed to: 710000 KHz
> (From what I know, the SBL actually sets it to 666MHz)
> 
> But there's more. If you look at qualcomm's page, it's says that the
> CPU Clock Speed is 717 MHz: <https://www.qualcomm.com/products/ipq4028>
> 
> Since you are working for a OEM/ODM. You could please ask what is the
> right MHz table for these devices? Unfortunately, Qualcomm never got
> around to fix this upstream and without an official statement from them
> it's very difficult to push stuff like this upstream.

Hmm...

>> 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";
> The mx25l25635e has been "not for new designs" for a couple of years 
> now?!
> <http://www.macronix.com/en-us/products/NOR-Flash/Serial-NOR-Flash/Pages/spec.aspx?p=MX25L25635E>
> Are you sure this device is really a mx25l25635e and not the newer 
> mx25l25635f?
> 
>> + 				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>;
>> ++				};
>> + 			};
>> + 		};
>> +
> Please move this to the qcom-ipq4019-ap.dk01.1-c1.dts.
> And preferably, this should also be pushed to
> linux-arm-kernel at lists.infradead.org

ok

> <https://lists.infradead.org/mailman/listinfo/linux-arm-kernel>
>> 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>
> please move this to the qcom-ipq4019-ap.dk01.1-c1.dts.
> 
>> +
>> + / {
>> + 	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;
>> ++		};
>> ++	};
> 
> The wifi_dump area is not needed by the ath10k driver.
> Furthermore, the you could probably get away with reserving
> less memory. From what I know, you only need to reserve space
> for the "QSEE environment", which is located betwenn
> 0x87e00000 and 0x88000000.

I have no information about those.
I think there should be also NSS region...

> (please move this to the qcom-ipq4019-ap.dk01.1-c1.dts.)
>> ++
>> + 	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>;
>> ++		};
>> + 	};
>> + };
>> +
> please move this to the qcom-ipq4019-ap.dk01.1-c1.dts.
> 
> 
> 
> 
> _______________________________________________
> Lede-dev mailing list
> Lede-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev

Why do I receive emails two times?
One with this signature ^^^ and another without?

Regards,
Roman



More information about the Lede-dev mailing list