summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter A. Bigot <pab@pabigot.com>2018-11-13 14:44:21 -0600
committerAndrei Gherzan <andrei@gherzan.ro>2018-11-23 16:25:34 +0200
commitbfc35b773ff405394d066d7d8efb32ced3ac0410 (patch)
tree504a7dfe9e97d06dcb71391a018281ba3f96cd34
parent10cee099bc6f1f805367e866598af6bf44e8f1b7 (diff)
downloadmeta-raspberrypi-bfc35b773ff405394d066d7d8efb32ced3ac0410.tar.gz
linux-firmware: replace machine override with new recipes
Raspberry Pi hardware requires firmware that supersedes or is not present in the standard linux-firmware distribution. These files are maintained in the RPi-Distro project on github. Several attempts have been made to reconcile conflicts between what's in linux-firmware and what the hardware needs. The existing approach is functional but not maintainable since it combines material from three repositories into a single package that claims to be linux-firmware. Remove the appends that change the content of linux-firmware for rpi hardware. Add two new recipes that follow the RPi-Distro repositories: * firmware-nonfree which forked from linux-firmware and replaces content is provided as linux-firmware-rpidistro; * bluez-firmware which forked from (very old) bluez and adds content is provided as bluez-firmware-rpidistro. The packages are named to make clear that these come from RPi-Distro, rather than generic sources. Licensing attempts to record the state of licensing as documented in RPi-Distro. Resolves: #298 Signed-off-by: Peter A. Bigot <pab@pabigot.com>
-rw-r--r--conf/machine/raspberrypi0-wifi.conf4
-rw-r--r--conf/machine/raspberrypi3-64.conf8
-rw-r--r--conf/machine/raspberrypi3.conf8
-rw-r--r--recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb84
-rw-r--r--recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb96
-rw-r--r--recipes-kernel/linux-firmware/linux-firmware_%.bbappend69
6 files changed, 190 insertions, 79 deletions
diff --git a/conf/machine/raspberrypi0-wifi.conf b/conf/machine/raspberrypi0-wifi.conf
index 7d7f1da..2c4f760 100644
--- a/conf/machine/raspberrypi0-wifi.conf
+++ b/conf/machine/raspberrypi0-wifi.conf
@@ -7,8 +7,8 @@ require conf/machine/include/tune-arm1176jzf-s.inc
7include conf/machine/include/rpi-base.inc 7include conf/machine/include/rpi-base.inc
8 8
9MACHINE_EXTRA_RRECOMMENDS += "\ 9MACHINE_EXTRA_RRECOMMENDS += "\
10 linux-firmware-bcm43430 \ 10 linux-firmware-rpidistro-bcm43430 \
11 linux-firmware-bcm43430a1-hcd \ 11 bluez-firmware-rpidistro-bcm43430a1-hcd \
12" 12"
13 13
14SDIMG_KERNELIMAGE ?= "kernel.img" 14SDIMG_KERNELIMAGE ?= "kernel.img"
diff --git a/conf/machine/raspberrypi3-64.conf b/conf/machine/raspberrypi3-64.conf
index 456373d..635e4f6 100644
--- a/conf/machine/raspberrypi3-64.conf
+++ b/conf/machine/raspberrypi3-64.conf
@@ -5,10 +5,10 @@
5MACHINEOVERRIDES = "raspberrypi3:${MACHINE}" 5MACHINEOVERRIDES = "raspberrypi3:${MACHINE}"
6 6
7MACHINE_EXTRA_RRECOMMENDS += "\ 7MACHINE_EXTRA_RRECOMMENDS += "\
8 linux-firmware-bcm43430 \ 8 linux-firmware-rpidistro-bcm43430 \
9 linux-firmware-bcm43455 \ 9 linux-firmware-rpidistro-bcm43455 \
10 linux-firmware-bcm43430a1-hcd \ 10 bluez-firmware-rpidistro-bcm43430a1-hcd \
11 linux-firmware-bcm4345c0-hcd \ 11 bluez-firmware-rpidistro-bcm4345c0-hcd \
12" 12"
13 13
14require conf/machine/include/arm/arch-armv8.inc 14require conf/machine/include/arm/arch-armv8.inc
diff --git a/conf/machine/raspberrypi3.conf b/conf/machine/raspberrypi3.conf
index 4fcff18..df64cbb 100644
--- a/conf/machine/raspberrypi3.conf
+++ b/conf/machine/raspberrypi3.conf
@@ -7,10 +7,10 @@ require conf/machine/include/tune-cortexa7.inc
7include conf/machine/include/rpi-base.inc 7include conf/machine/include/rpi-base.inc
8 8
9MACHINE_EXTRA_RRECOMMENDS += "\ 9MACHINE_EXTRA_RRECOMMENDS += "\
10 linux-firmware-bcm43430 \ 10 linux-firmware-rpidistro-bcm43430 \
11 linux-firmware-bcm43455 \ 11 linux-firmware-rpidistro-bcm43455 \
12 linux-firmware-bcm43430a1-hcd \ 12 bluez-firmware-rpidistro-bcm43430a1-hcd \
13 linux-firmware-bcm4345c0-hcd \ 13 bluez-firmware-rpidistro-bcm4345c0-hcd \
14" 14"
15 15
16SDIMG_KERNELIMAGE ?= "kernel7.img" 16SDIMG_KERNELIMAGE ?= "kernel7.img"
diff --git a/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb b/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb
new file mode 100644
index 0000000..b16b2c1
--- /dev/null
+++ b/recipes-kernel/bluez-firmware-rpidistro/bluez-firmware-rpidistro_git.bb
@@ -0,0 +1,84 @@
1SUMMARY = "Linux kernel Bluetooth firmware files from Raspbian distribution"
2DESCRIPTION = "Updated Bluetooth firmware files for RaspberryPi hardware. \
3RPi-Distro obtains these directly from Cypress; they are not submitted \
4to linux-firmware for general use."
5HOMEPAGE = "https://github.com/RPi-Distro/bluez-firmware"
6SECTION = "kernel"
7
8# Upstream has provided[^1] licensing information in the Debian
9# copyright file. The wording of the Cypress license subsequently
10# changed in linux-firmware.
11#
12# Rather than make assumptions about what's supposed to be what, we'll
13# use the license implied by the source of these files, named to avoid
14# conflicts with linux-firmware.
15#
16# [^1]: https://github.com/RPi-Distro/bluez-firmware/issues/1
17LICENSE = "Firmware-cypress-rpidistro"
18LIC_FILES_CHKSUM = "\
19 file://LICENCE.cypress-rpidistro;md5=852f9d10cbedba1f6c439729bd0617b4 \
20"
21
22# These are not common licenses, set NO_GENERIC_LICENSE for them
23# so that the license files will be copied from fetched source
24NO_GENERIC_LICENSE[Firmware-cypress-rpidistro] = "LICENCE.cypress-rpidistro"
25
26SRC_URI = "git://github.com/RPi-Distro/bluez-firmware"
27SRCREV = "ade2bae1aaaebede09abb8fb546f767a0e4c7804"
28PV = "0.0+git${SRCPV}"
29
30S = "${WORKDIR}/git"
31
32inherit allarch
33
34CLEANBROKEN = "1"
35
36do_extract_lic() {
37 # Extract the license from the Debian copyright file
38 sed -e '1,23d' ${S}/debian/copyright > ${S}/LICENCE.cypress-rpidistro
39}
40# Must be before both do_install and do_populate_lic. Putting it before
41# their common ancestor works; other approaches do not.
42addtask extract_lic after do_unpack before do_patch
43
44do_compile() {
45 :
46}
47
48do_install() {
49 install -d ${D}${nonarch_base_libdir}/firmware/brcm
50
51 cp LICENCE.cypress-rpidistro ${D}${nonarch_base_libdir}/firmware
52 install -m 0644 broadcom/BCM434*.hcd ${D}${nonarch_base_libdir}/firmware/brcm/
53}
54
55PACKAGES = "\
56 ${PN}-cypress-license \
57 ${PN}-bcm43430a1-hcd \
58 ${PN}-bcm4345c0-hcd \
59"
60
61LICENSE_${PN}-bcm43430a1-hcd = "Firmware-cypress-rpidistro"
62LICENSE_${PN}-bcm4345c0-hcd = "Firmware-cypress-rpidistro"
63LICENSE_${PN}-cypress-license = "Firmware-cypress-rpidistro"
64
65FILES_${PN}-cypress-license = "\
66 ${nonarch_base_libdir}/firmware/LICENCE.cypress-rpidistro \
67"
68FILES_${PN}-bcm43430a1-hcd = "\
69 ${nonarch_base_libdir}/firmware/brcm/BCM43430A1.hcd \
70"
71FILES_${PN}-bcm4345c0-hcd = "\
72 ${nonarch_base_libdir}/firmware/brcm/BCM4345C0.hcd \
73"
74
75RDEPENDS_${PN}-bcm43430a1-hcd += "${PN}-cypress-license"
76RDEPENDS_${PN}-bcm4345c0-hcd += "${PN}-cypress-license"
77RCONFLICTS_${PN}-bcm43430a1-hcd = "linux-firmware-bcm43430a1-hcd"
78RREPLACES_${PN}-bcm43430a1-hcd = "linux-firmware-bcm43430a1-hcd"
79RCONFLICTS_${PN}-bcm43435c0-hcd = "linux-firmware-bcm4345c0-hcd"
80RREPLACES_${PN}-bcm43435c0-hcd = "linux-firmware-bcm4345c0-hcd"
81
82# Firmware files are generally not run on the CPU, so they can be
83# allarch despite being architecture specific
84INSANE_SKIP = "arch"
diff --git a/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb b/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb
new file mode 100644
index 0000000..1f63c32
--- /dev/null
+++ b/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bb
@@ -0,0 +1,96 @@
1SUMMARY = "Linux kernel firmware files from Raspbian distribution"
2DESCRIPTION = "Updated firmware files for RaspberryPi hardware. \
3RPi-Distro obtains these directly from Cypress; they are not submitted \
4to linux-firmware for general use."
5HOMEPAGE = "https://github.com/RPi-Distro/firmware-nonfree"
6SECTION = "kernel"
7
8# In maintained upstream linux-firmware:
9# * brcmfmac43430-sdio falls under LICENCE.cypress
10# * brcmfmac43455-sdio falls under LICENCE.broadcom_bcm43xx
11#
12# It is likely[^1] that both of these should be under LICENCE.cypress.
13# Further, at this time the text of LICENCE.broadcom_bcm43xx is the same
14# in linux-firmware and RPi-Distro/firmware-nonfree, but this may
15# change.
16#
17# Rather than make assumptions about what's supposed to be what, we'll
18# use the license implied by the source of these files, named to avoid
19# conflicts with linux-firmware.
20#
21# [^1]: https://github.com/RPi-Distro/bluez-firmware/issues/1
22LICENSE = "\
23 Firmware-broadcom_bcm43xx-rpidistro \
24 & WHENCE \
25"
26LIC_FILES_CHKSUM = "\
27 file://LICENCE.broadcom_bcm43xx;md5=3160c14df7228891b868060e1951dfbc \
28 file://WHENCE;md5=a9c2c217f513c20e1d16b384b3e2c12d \
29"
30
31# These are not common licenses, set NO_GENERIC_LICENSE for them
32# so that the license files will be copied from fetched source
33NO_GENERIC_LICENSE[Firmware-broadcom_bcm43xx-rpidistro] = "LICENCE.broadcom_bcm43xx"
34NO_GENERIC_LICENSE[WHENCE] = "WHENCE"
35
36SRC_URI = "git://github.com/RPi-Distro/firmware-nonfree"
37SRCREV = "b518de45ced519e8f7a499f4778100173402ae43"
38PV = "0.0+git${SRCPV}"
39
40S = "${WORKDIR}/git"
41
42inherit allarch
43
44CLEANBROKEN = "1"
45
46do_compile() {
47 :
48}
49
50do_install() {
51 install -d ${D}${nonarch_base_libdir}/firmware/brcm
52
53 cp ./LICENCE.broadcom_bcm43xx ${D}${nonarch_base_libdir}/firmware/LICENCE.broadcom_bcm43xx-rpidistro
54
55 # Replace outdated linux-firmware files with updated ones from
56 # raspbian firmware-nonfree. Raspbian adds blobs and nvram
57 # definitions that are also necessary so copy those too.
58 for fw in brcmfmac43430-sdio brcmfmac43455-sdio ; do
59 install -m 0644 brcm/${fw}.* ${D}${nonarch_base_libdir}/firmware/brcm/
60 done
61}
62
63PACKAGES = "\
64 ${PN}-broadcom-license \
65 ${PN}-bcm43430 \
66 ${PN}-bcm43455 \
67"
68
69LICENSE_${PN}-bcm43430 = "Firmware-broadcom_bcm43xx-rpidistro"
70LICENSE_${PN}-bcm43455 = "Firmware-broadcom_bcm43xx-rpidistro"
71LICENSE_${PN}-broadcom-license = "Firmware-broadcom_bcm43xx-rpidistro"
72FILES_${PN}-broadcom-license = "${nonarch_base_libdir}/firmware/LICENCE.broadcom_bcm43xx-rpidistro"
73FILES_${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430*"
74FILES_${PN}-bcm43455 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43455*"
75RDEPENDS_${PN}-bcm43430 += "${PN}-broadcom-license"
76RDEPENDS_${PN}-bcm43455 += "${PN}-broadcom-license"
77RCONFLICTS_${PN}-bcm43430 = "\
78 linux-firmware-bcm43430 \
79 linux-firmware-raspbian-bcm43430 \
80"
81RREPLACES_${PN}-bcm43430 = "\
82 linux-firmware-bcm43430 \
83 linux-firmware-raspbian-bcm43430 \
84"
85RCONFLICTS_${PN}-bcm43455 = "\
86 linux-firmware-bcm43455 \
87 linux-firmware-raspbian-bcm43455 \
88"
89RREPLACES_${PN}-bcm43455 = "\
90 linux-firmware-bcm43455 \
91 linux-firmware-raspbian-bcm43455 \
92"
93
94# Firmware files are generally not run on the CPU, so they can be
95# allarch despite being architecture specific
96INSANE_SKIP = "arch"
diff --git a/recipes-kernel/linux-firmware/linux-firmware_%.bbappend b/recipes-kernel/linux-firmware/linux-firmware_%.bbappend
deleted file mode 100644
index 4443736..0000000
--- a/recipes-kernel/linux-firmware/linux-firmware_%.bbappend
+++ /dev/null
@@ -1,69 +0,0 @@
1# Augments upstream linux-firmware with additional and updated images
2# from Raspbian:
3# https://github.com/RPi-Distro/firmware-nonfree
4# https://github.com/RPi-Distro/bluez-firmware
5
6SRC_URI_append_rpi = " \
7 git://github.com/RPi-Distro/firmware-nonfree;destsuffix=raspbian-nf;name=raspbian-nf \
8 git://github.com/RPi-Distro/bluez-firmware;destsuffix=raspbian-bluez;name=raspbian-bluez \
9"
10
11SRCREV_raspbian-nf = "b518de45ced519e8f7a499f4778100173402ae43"
12SRCREV_raspbian-bluez = "ade2bae1aaaebede09abb8fb546f767a0e4c7804"
13SRCREV_FORMAT_rpi = "default+raspbian-nf+raspbian-bluez"
14
15do_install_append_rpi() {
16 install -d ${D}${nonarch_base_libdir}/firmware/brcm/
17
18 # Replace outdated linux-firmware files with updated ones from
19 # raspbian firmware-nonfree. Raspbian adds blobs and nvram
20 # definitions that are also necessary so copy those too.
21 for fw in brcmfmac43430-sdio brcmfmac43455-sdio ; do
22 install -m 0644 ${WORKDIR}/raspbian-nf/brcm/${fw}.* ${D}${nonarch_base_libdir}/firmware/brcm/
23 done
24
25 # Add missing Cypress Bluetooth files from raspbian bluez-firmware
26 for fw in BCM43430A1.hcd BCM4345C0.hcd ; do
27 install -m 0644 ${WORKDIR}/raspbian-bluez/broadcom/${fw} ${D}${nonarch_base_libdir}/firmware/brcm/
28 done
29}
30
31# NB: Must prepend, else these become empty and their content is left in
32# the roll-up package which precedes them.
33PACKAGES_prepend_rpi = "\
34 ${PN}-bcm43430a1-hcd \
35 ${PN}-bcm4345c0-hcd \
36"
37
38# ${PN}-bcm43455 package and brcmfmac43455-sdio from linux-firmware
39# is already included in the oe-core recipe, so don't add it to PACKAGES
40# again, the version from raspbian-nf seems a bit newer:
41# $ strings ./1_0.0+gitAUTOINC+d114732723+86e88fbf03+e28cd7ee86-r0/git/brcm/brcmfmac43455-sdio.bin | grep Ver
42# Version: 7.45.18.0 CRC: d7226371 Date: Sun 2015-03-01 07:31:57 PST Ucode Ver: 1026.2 FWID: 01-6a2c8ad4
43# $ strings ./1_0.0+gitAUTOINC+d114732723+86e88fbf03+e28cd7ee86-r0/raspbian-nf/brcm/brcmfmac43455-sdio.bin | grep Ver
44# Version: 7.45.154 (r684107 CY) CRC: b1f79383 Date: Tue 2018-02-27 03:18:17 PST Ucode Ver: 1043.2105 FWID 01-4fbe0b04
45
46# For additional Broadcom
47LICENSE_${PN}-bcm43455 = "Firmware-broadcom_bcm43xx"
48
49FILES_${PN}-bcm43430_append_rpi = " \
50 ${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.txt \
51"
52FILES_${PN}-bcm43455 = " \
53 ${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.* \
54"
55
56RDEPENDS_${PN}-bcm43455 += "${PN}-broadcom-license"
57
58LICENSE_${PN}-bcm43430a1-hcd = "Firmware-cypress"
59LICENSE_${PN}-bcm4345c0-hcd = "Firmware-cypress"
60
61FILES_${PN}-bcm43430a1-hcd = " \
62 ${nonarch_base_libdir}/firmware/brcm/BCM43430A1.hcd \
63"
64FILES_${PN}-bcm4345c0-hcd = " \
65 ${nonarch_base_libdir}/firmware/brcm/BCM4345C0.hcd \
66"
67
68RDEPENDS_${PN}-bcm43430a1-hcd += "${PN}-cypress-license"
69RDEPENDS_${PN}-bcm4345c0-hcd += "${PN}-cypress-license"