Skip to contentSkip to conversation

uccp420wlan: new package

PATCH New Abhimanyu V 4 participants 11 messages Mar 16, 2017 – Mar 20, 2017

lore
Share & tools
lore
#0 lore raw

PATCH v4 1/3 uccp420wlan: new package

From: Abhimanyu Vishwakarma <[email protected]>

Wifi kernel module and firmware for Imagination explorer RPU

---
Changes v1->v2
- add hash file
Changes v2->v3 (Suggested by Arnout)
- remove patch and bump version
- add proprietary license file to LICENSE_FILES
- Fix help text indentation to below 72 columns
Changes v3->v4 (Suggested by Arnout)
- use UCCP420WLAN_INSTALL_TARGET_CMDS instead of HOOKS

 package/Config.in                    |  1 +
 package/uccp420wlan/Config.in        | 14 ++++++++++++++
 package/uccp420wlan/uccp420wlan.hash |  2 ++
 package/uccp420wlan/uccp420wlan.mk   | 18 ++++++++++++++++++
 4 files changed, 35 insertions(+)
 create mode 100644 package/uccp420wlan/Config.in
 create mode 100644 package/uccp420wlan/uccp420wlan.hash
 create mode 100644 package/uccp420wlan/uccp420wlan.mk
package/Config.in +1 -0
index 85e4dee..18d00b0 100644
@@ -479,6 +479,7 @@ endmenu
 	source "package/triggerhappy/Config.in"
 	source "package/uboot-tools/Config.in"
 	source "package/ubus/Config.in"
+	source "package/uccp420wlan/Config.in"
 	source "package/udev/Config.in"
 	source "package/udisks/Config.in"
 	source "package/upower/Config.in"
package/uccp420wlan/Config.in new file +14 -0
new file mode 100644
index 0000000..40abc8e
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_UCCP420WLAN
+	bool "uccp420wlan"
+	depends on BR2_LINUX_KERNEL
+	help
+	  SoftMAC (mac80211) based WiFi driver for Imagination's
+	  Explorer RPU uccp420. This supports Dual Band WiFi with
+	  2.4GHz - 2x2 b/g/n 40MHz, 5GHz - 2x2 a/n/11ac 80MHz modes
+
+	  Used in creator ci40 board.
+
+	  https://github.com/CreatorDev/uccp420wlan
+
+comment "uccp420wlan needs a Linux kernel to be built"
+	depends on !BR2_LINUX_KERNEL
package/uccp420wlan/uccp420wlan.hash new file +2 -0
new file mode 100644
index 0000000..41f60a4
@@ -0,0 +1,2 @@
+# locally computed hash
+sha256 1d4de62fc842dbab739708cf0d9ebce270fcdf63c1c13ac676cbc253acdaa3bb uccp420wlan-v6.9.1.tar.gz
package/uccp420wlan/uccp420wlan.mk new file +18 -0
new file mode 100644
index 0000000..1496a92
@@ -0,0 +1,18 @@
+################################################################################
+#
+# uccp420wlan
+#
+################################################################################
+
+UCCP420WLAN_VERSION = v6.9.1
+UCCP420WLAN_SITE = $(call github,CreatorDev,uccp420wlan,$(UCCP420WLAN_VERSION))
+UCCP420WLAN_LICENSE = GPLv2 (kernel module), proprietary (firmware blob)
+UCCP420WLAN_LICENSE_FILES = COPYING firmware/LICENSE.imagination
+
+define UCCP420WLAN_INSTALL_TARGET_CMDS
+	mkdir -p $(TARGET_DIR)/lib/firmware/img/uccp420wlan
+	cp $(@D)/firmware/*.ldr $(TARGET_DIR)/lib/firmware/img/uccp420wlan
+endef
+
+$(eval $(kernel-module))
+$(eval $(generic-package))
Signature · 1 line
2.7.4
#1 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

From: Abhimanyu Vishwakarma <[email protected]>

To build fitImage in post-build scripts, we need compressed kernel binary which is intermediate target, hence doesnt get copied to output/images folder.

---
Changes v3->v4 (Suggested by Arnout)
- Drop exporting LINUX_DIR instead add to EXTRA_ENV var

 package/Makefile.in | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
package/Makefile.in +2 -1
index 4a3eb26..b1962ed 100644
@@ -310,7 +310,8 @@ HOST_CONFIGURE_OPTS = \
 EXTRA_ENV = \
 	PATH=$(BR_PATH) \
 	BR2_DL_DIR=$(BR2_DL_DIR) \
-	BUILD_DIR=$(BUILD_DIR)
+	BUILD_DIR=$(BUILD_DIR) \
+	LINUX_DIR=$(LINUX_DIR)
 
 ################################################################################
 # settings we need to pass to configure
Signature · 1 line
2.7.4
#2 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

Quoted 8 lines · Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

To build fitImage in post-build scripts, we need compressed kernel binary which is intermediate target, hence doesnt get copied to output/images folder.

Regards,
Arnout

Quoted 22 lines

---
Changes v3->v4 (Suggested by Arnout)
- Drop exporting LINUX_DIR instead add to EXTRA_ENV var

 package/Makefile.in | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
package/Makefile.in +2 -1
index 4a3eb26..b1962ed 100644
@@ -310,7 +310,8 @@ HOST_CONFIGURE_OPTS = \
 EXTRA_ENV = \
 	PATH=$(BR_PATH) \
 	BR2_DL_DIR=$(BR2_DL_DIR) \
-	BUILD_DIR=$(BUILD_DIR)
+	BUILD_DIR=$(BUILD_DIR) \
+	LINUX_DIR=$(LINUX_DIR)
 
 ################################################################################
 # settings we need to pass to configure
Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#3 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

Hello,

Quoted 11 lines · Arnout Vandecappelle
Quoted 8 lines · Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

To build fitImage in post-build scripts, we need compressed kernel binary which is intermediate target, hence doesnt get copied to output/images folder.

I am not sure about this one. Why would we pass in the environment specifically LINUX_DIR, and not the <pkg>_DIR of the other ~2000 packages we have in Buildroot ?

What about instead using BR2_LINUX_KERNEL_VMLINUX_BIN, to get vmlinux.bin copied to output/images, and then compress it in the post-build script ?

Or alternatively, if there is a vmlinux.bin.gz target, add support for it in our linux package?

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#4 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

Quoted 10 lines · Thomas Petazzoni

Hello,

Quoted 7 lines · Arnout Vandecappelle
Quoted 6 lines · Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

To build fitImage in post-build scripts, we need compressed kernel binary which is intermediate target, hence doesnt get copied to output/images folder.

Quoted 8 lines
Quoted 4 lines
Quoted 2 lines

I am not sure about this one. Why would we pass in the environment specifically LINUX_DIR, and not the <pkg>_DIR of the other ~2000 packages we have in Buildroot ?

Because LINUX_DIR is *much* more likely to be used in a post-build/image
script. E.g. if the initramfs wouldn't be supported directly by Buildroot, you'd need it. Same for mxs-bootlets.

I agree though that it's not great, but could find no better way. Although,
actually, it could use a recursive 'make printvars VARS=LINUX_DIR' (which will be even better when [1] gets committed).

Quoted 3 lines

What about instead using BR2_LINUX_KERNEL_VMLINUX_BIN, to get vmlinux.bin copied to output/images, and then compress it in the post-build script ?

I considered that in one of my reviews, but vmlinux.bin doesn't contain the
load and start address. The post-build script would have to retrieve those in some other way.

However, Abhimanyu reported that there is upstream support for generating a
fitImage in the kernel build itself. That's of course preferable...

Abhimanyu, could you rework using either 'make printvars' in the post-build
script (optionally incorporating [1] in your series so 'make printvars' actually does the right thing), or using the in-kernel fitImage support?

Regards,
Arnout

[1] http://patchwork.ozlabs.org/patch/721102/

Quoted 8 lines

Or alternatively, if there is a vmlinux.bin.gz target, add support for it in our linux package?

Best regards,

Thomas

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#5 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

Hello,

Quoted 7 lines · Arnout Vandecappelle
Quoted 3 lines

What about instead using BR2_LINUX_KERNEL_VMLINUX_BIN, to get vmlinux.bin copied to output/images, and then compress it in the post-build script ?

I considered that in one of my reviews, but vmlinux.bin doesn't contain the
load and start address. The post-build script would have to retrieve those in some other way.

vmlinux.bin.gz also does not contain the load/start address. Only uImage does, and they get them from uImage.

So one possibility would be to make the Linux package behave like the U-Boot package: instead of having a choice...endchoice for the image format to install, you simply have a list of options so that you can select several of them.

Quoted 2 lines

However, Abhimanyu reported that there is upstream support for generating a
fitImage in the kernel build itself. That's of course preferable...

Yes, it would be much better obviously.

Otherwise, hardcoding the load/start address in the .its.in file is also good enough, this file is anyway board-specific.

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#6 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

Quoted 17 lines · Thomas Petazzoni

Hello,

Quoted 6 lines · Arnout Vandecappelle
Quoted 3 lines

What about instead using BR2_LINUX_KERNEL_VMLINUX_BIN, to get vmlinux.bin copied to output/images, and then compress it in the post-build script ?

I considered that in one of my reviews, but vmlinux.bin doesn't contain the
load and start address. The post-build script would have to retrieve those in some other way.

vmlinux.bin.gz also does not contain the load/start address. Only uImage does, and they get them from uImage.

So one possibility would be to make the Linux package behave like the U-Boot package: instead of having a choice...endchoice for the image format to install, you simply have a list of options so that you can select several of them.

Quoted 6 lines
Quoted 2 lines

However, Abhimanyu reported that there is upstream support for generating a
fitImage in the kernel build itself. That's of course preferable...

Yes, it would be much better obviously.

Otherwise, hardcoding the load/start address in the .its.in file is also good enough, this file is anyway board-specific.

Damn, i didnt see this mail before replying to previous version, I will prepare the patch with this.

Quoted 3 lines

Best regards,

Thomas

Regards
Abhimanyu

#7 lore raw

PATCH v4 2/3 Add LINUX_DIR to EXTRA_ENV for use in post-build scripts

In reply to Arnout Vandecappelle

Hi Arnout, Thomas,

Quoted 26 lines · Arnout Vandecappelle
Quoted 10 lines · Thomas Petazzoni

Hello,

Quoted 7 lines · Arnout Vandecappelle
Quoted 6 lines · Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

To build fitImage in post-build scripts, we need compressed kernel binary which is intermediate target, hence doesnt get copied to output/images folder.

Quoted 6 lines
Quoted 3 lines
Quoted 2 lines

I am not sure about this one. Why would we pass in the environment specifically LINUX_DIR, and not the <pkg>_DIR of the other ~2000 packages we have in Buildroot ?

Because LINUX_DIR is *much* more likely to be used in a post-build/image
script. E.g. if the initramfs wouldn't be supported directly by Buildroot, you'd need it. Same for mxs-bootlets.

I agree though that it's not great, but could find no better way. Although,
actually, it could use a recursive 'make printvars VARS=LINUX_DIR' (which will be even better when [1] gets committed).

Quoted 6 lines
Quoted 3 lines

What about instead using BR2_LINUX_KERNEL_VMLINUX_BIN, to get vmlinux.bin copied to output/images, and then compress it in the post-build script ?

I considered that in one of my reviews, but vmlinux.bin doesn't contain the
load and start address. The post-build script would have to retrieve those in some other way.

When working I also had 2 other way to get it working:

1. Using vmlinux.bin and use gzip in build script to generate vmlinux.bin.gz and use fixed ENTRY_ADDR which is how openwrt version also does.

2. Extracting vmlinux.bin.gz from uImage directly.

Out of 3 i thought using what is already generated is best way to use it and it also reduces extra processing. If out of above 2 look good let me know i can propose the patch with
solution.

Quoted 3 lines

However, Abhimanyu reported that there is upstream support for generating a
fitImage in the kernel build itself. That's of course preferable...

fitImage support would need some more time, i would prefer if we get it pushed before fitImage support is ready.

Quoted 11 lines

Abhimanyu, could you rework using either 'make printvars' in the post-build
script (optionally incorporating [1] in your series so 'make printvars' actually does the right thing), or using the in-kernel fitImage support?

Regards,
Arnout

[1] http://patchwork.ozlabs.org/patch/721102/

Thanks, i will work on patch.

Quoted 7 lines
Quoted 7 lines

Or alternatively, if there is a vmlinux.bin.gz target, add support for it in our linux package?

Best regards,

Thomas

Regards
Abhimanyu

#8 lore raw

PATCH v4 3/3 Add defconfig for MIPS Creator ci40

In reply to Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

Also add post-build script to create fitImage which is used by u-boot to boot the device. It also add post-image script to generate sdcard.img for preparing sdcard/usb device

---
Changes v1->v2
- No change
Changes v2->v3 (Suggested by Arnout)
- Remove uImage and add fitImage generation
- Tidy readme.txt
- Tidy ci40_defconfig, remove custom toolchain and add wifi helper packages Some changes are not done:
- Using git-helper:
- Custom kernel doesnt provide tar file, so it didnt work for me
Changes v3->v4 (Suggested by Arnout)
- Use github helper for getting kernel/u-boot
- rename fitImage.its -> fitImage.its.in to reflect as template file, remove hardcoded dtb filename
- Find dtb file in output/images directory and use first dtb in fitImage
- Remove image size from genimage.cfg
- Tidy readme.txt and add section to explain how to stop u-boot autoboot, how to make it persistent, and other grammar

 board/ci40/create_fitImage.sh | 35 ++++++++++++++++++++++
 board/ci40/fitImage.its.in    | 52 ++++++++++++++++++++++++++++++++
 board/ci40/genimage.cfg       | 12 ++++++++
 board/ci40/post-image.sh      | 15 ++++++++++
 board/ci40/readme.txt         | 70 +++++++++++++++++++++++++++++++++++++++++++
 configs/ci40_defconfig        | 46 ++++++++++++++++++++++++++++
 6 files changed, 230 insertions(+)
 create mode 100755 board/ci40/create_fitImage.sh
 create mode 100644 board/ci40/fitImage.its.in
 create mode 100644 board/ci40/genimage.cfg
 create mode 100755 board/ci40/post-image.sh
 create mode 100644 board/ci40/readme.txt
 create mode 100644 configs/ci40_defconfig
board/ci40/create_fitImage.sh new file +35 -0
new file mode 100755
index 0000000..23e084d
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# Inputs
+BOARD_DIR="$(dirname $0)"
+FIT_ITS_FILE=$BOARD_DIR/fitImage.its.in
+MKIMAGE=$HOST_DIR/usr/bin/mkimage
+UIMAGE=$BINARIES_DIR/uImage
+
+# Output
+MODIFIED_FIT_ITS=$BINARIES_DIR/fitImage.its
+FITIMAGE=$BINARIES_DIR/fitImage
+
+# Extract kernel load address and entry address from uImage
+load=0x$($MKIMAGE -l $UIMAGE | grep "Load Address: " | sed 's/Load Address: //g')
+entry=0x$($MKIMAGE -l $UIMAGE | grep "Entry Point:  " | sed 's/Entry Point:  //g')
+
+# For now use first dtb found, once we start supporting more than 1 dtb, we can
+# then generate multiple fitImage for different dtb found.
+dtbs=(`find $BINARIES_DIR -name "*.dtb" -printf "%f "`)
+dtb=${dtbs[0]}
+
+# Create a copy of fitImage.its file and replace these address in that file
+sed -e "s/@load@/$load/g"   \
+    -e "s/@entry@/$entry/g" \
+    -e "s/@dtb@/$dtb/g"     \
+    $FIT_ITS_FILE > $MODIFIED_FIT_ITS
+
+# Copy vmlinux.bin.gz to output/images, it is used in .its file
+cp -a $LINUX_DIR/arch/mips/boot/vmlinux.bin.gz $BINARIES_DIR
+
+# Create fitImage
+$MKIMAGE -f $MODIFIED_FIT_ITS $FITIMAGE
+
+# Copy to target
+cp -a $FITIMAGE $TARGET_DIR/fitImage
board/ci40/fitImage.its.in new file +52 -0

52 lines not on this page · raw message

board/ci40/genimage.cfg new file +12 -0
new file mode 100644
index 0000000..0ffc91c
@@ -0,0 +1,12 @@
+# Minimal SD card image
+#
+
+image sdcard.img {
+  hdimage {
+  }
+
+  partition rootfs {
+    partition-type = 0x83
+    image = "rootfs.ext4"
+  }
+}
board/ci40/post-image.sh new file +15 -0
new file mode 100755
index 0000000..18e76aa
@@ -0,0 +1,15 @@
+#!/usr/bin/env bash
+
+BOARD_DIR="$(dirname $0)"
+GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
+GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
+
+rm -rf "${GENIMAGE_TMP}"
+
+genimage \
+  --rootpath "${TARGET_DIR}" \
+  --tmppath "${GENIMAGE_TMP}" \
+  --inputpath "${BINARIES_DIR}" \
+  --outputpath "${BINARIES_DIR}" \
+  --config "${GENIMAGE_CFG}"
+
board/ci40/readme.txt new file +70 -0

70 lines not on this page · raw message

configs/ci40_defconfig new file +46 -0

46 lines not on this page · raw message

Signature · 1 line
2.7.4
#9 lore raw

PATCH v4 1/3 uccp420wlan: new package

In reply to Abhimanyu V
Quoted 6 lines · Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

Wifi kernel module and firmware for Imagination explorer RPU

There is one worry: it needs a kernel >= 4.2. However, I expect most of our
modules packages have some kind of kernel dependency, and none of them encode it. It's also hard to do since we don't have a way to know the kernel version. It could be worthwhile, however, to mention this minimum kernel version in the help text.

[snip]

Quoted 6 lines
package/uccp420wlan/Config.in new file +0 -0
new file mode 100644
index 0000000..40abc8e

package/uccp420wlan/Config.in line 9

Quoted 9 lines
package/uccp420wlan/Config.in new file +9 -0
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_UCCP420WLAN
+	bool "uccp420wlan"
+	depends on BR2_LINUX_KERNEL
+	help
+	  SoftMAC (mac80211) based WiFi driver for Imagination's
+	  Explorer RPU uccp420. This supports Dual Band WiFi with
+	  2.4GHz - 2x2 b/g/n 40MHz, 5GHz - 2x2 a/n/11ac 80MHz modes
+
+	  Used in creator ci40 board.

So

This module needs a Linux kernel >= v4.2.

package/uccp420wlan/Config.in line 13

Quoted 4 lines
package/uccp420wlan/Config.in new file +4 -0
+
+	  https://github.com/CreatorDev/uccp420wlan
+
+comment "uccp420wlan needs a Linux kernel to be built"

and

comment "uccp420wlan needs a Linux kernel >= v4.2 to be built"

Regards,
Arnout

Quoted 34 lines
package/uccp420wlan/Config.in new file +1 -0
+	depends on !BR2_LINUX_KERNEL
package/uccp420wlan/uccp420wlan.hash new file +2 -0
new file mode 100644
index 0000000..41f60a4
@@ -0,0 +1,2 @@
+# locally computed hash
+sha256 1d4de62fc842dbab739708cf0d9ebce270fcdf63c1c13ac676cbc253acdaa3bb uccp420wlan-v6.9.1.tar.gz
package/uccp420wlan/uccp420wlan.mk new file +18 -0
new file mode 100644
index 0000000..1496a92
@@ -0,0 +1,18 @@
+################################################################################
+#
+# uccp420wlan
+#
+################################################################################
+
+UCCP420WLAN_VERSION = v6.9.1
+UCCP420WLAN_SITE = $(call github,CreatorDev,uccp420wlan,$(UCCP420WLAN_VERSION))
+UCCP420WLAN_LICENSE = GPLv2 (kernel module), proprietary (firmware blob)
+UCCP420WLAN_LICENSE_FILES = COPYING firmware/LICENSE.imagination
+
+define UCCP420WLAN_INSTALL_TARGET_CMDS
+	mkdir -p $(TARGET_DIR)/lib/firmware/img/uccp420wlan
+	cp $(@D)/firmware/*.ldr $(TARGET_DIR)/lib/firmware/img/uccp420wlan
+endef
+
+$(eval $(kernel-module))
+$(eval $(generic-package))
Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#10 lore raw

PATCH v4 1/3 uccp420wlan: new package

In reply to Abhimanyu V

Hello,

Quoted 6 lines · Abhimanyu V

From: Abhimanyu Vishwakarma <[email protected]>

Wifi kernel module and firmware for Imagination explorer RPU

Quoted 9 lines

---
Changes v1->v2
- add hash file
Changes v2->v3 (Suggested by Arnout)
- remove patch and bump version
- add proprietary license file to LICENSE_FILES
- Fix help text indentation to below 72 columns
Changes v3->v4 (Suggested by Arnout)
- use UCCP420WLAN_INSTALL_TARGET_CMDS instead of HOOKS

Applied to master, after taking into account the comments made by Arnout.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com