116 Commits

Author SHA1 Message Date
Leon Anavi
aaf976a665 linux-firmware-rpidistro: Update and stabilize
Update to 20240709-2~bpo12+1+rpt3 and add brcmfmac module
parameters for stability.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-09-01 08:19:47 +03:00
Joshua Watt
8d786f646e linux-firmware-rpidistro: Fix WiFi on Raspberry Pi 5
Switches the Raspberry Pi 5 to use the standard cyfman43455-sdio
firmware by default. The minimal firmware on this device is unable to
connect to a WiFi access point.

This also matches the behavior of Raspberry Pi OS, which defaults to the
standard firmware

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-09-01 08:19:47 +03:00
Omri Sarig
2597651049 linux-firmware-rpidistro: Fix wireless error message on RPi
Fixes: #1396

Signed-off-by: Omri Sarig <omri.sarig@prevas.dk>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-09-01 08:19:47 +03:00
Martin Jansa
3afc9728b1 mesa, wayland-protocols: use separate recipe instead of bbappend
Fix
https://github.com/agherzan/meta-raspberrypi/pull/1484

Avoid llvm runtime dependency to avoid issues in builds with meta-clang:

ERROR: Multiple .bb files are due to be built which each provide llvm:
  meta-clang/recipes-devtools/clang/clang_git.bb
  oe-core/meta/recipes-devtools/llvm/llvm_18.1.6.bb
A list of tasks depending on these providers is shown and may help explain where the dependency comes from.
meta-clang/recipes-devtools/clang/clang_git.bb has unique dependees:
  oe-core/meta/recipes-graphics/mesa/mesa_24.0.7.bb:do_prepare_recipe_sysroot
  oe-core/meta/recipes-graphics/mesa/mesa_24.0.7.bb:do_package
  meta-atlas/meta-atlas/recipes-core/images/atlas-image-video.bb:do_populate_lic_deploy
  oe-core/meta/recipes-graphics/mesa/mesa_24.0.7.bb:do_collect_spdx_deps
  meta-atlas/meta-atlas/recipes-core/images/atlas-image-video.bb:do_populate_interfaces_deploy
oe-core/meta/recipes-devtools/llvm/llvm_18.1.6.bb has unique dependees:
  oe-core/meta/recipes-graphics/mesa/mesa_24.0.7.bb:do_package_qa
  oe-core/meta/recipes-graphics/mesa/mesa_24.0.7.bb:do_create_runtime_spdx
It could be that one recipe provides something the other doesn't and should. The following provider and runtime provider differences may be helpful.
meta-clang/recipes-devtools/clang/clang_git.bb has unique provides:
  clang
meta-clang/recipes-devtools/clang/clang_git.bb has unique rprovides:
  clang-dbg
  clang-libclang-cpp
  liblldb
  llvm-linker-tools
  ^clang-locale-.*
  clang-libllvm
  lldb
  clang-format
  clang
  clang-dev
  clang-locale
  clang-lldb-python
  libclang
  clang-src
  clang-doc
  clang-staticdev
  lldb-server
  clang-tidy
  clang-tools
oe-core/meta/recipes-devtools/llvm/llvm_18.1.6.bb has unique provides:

oe-core/meta/recipes-devtools/llvm/llvm_18.1.6.bb has unique rprovides:
  llvm
  llvm-dbg
  llvm-libllvm
  llvm-src
  llvm-dev
  llvm-liboptremarks
  llvm-locale
  llvm-llvmhello
  llvm-liblto
  llvm-staticdev
  llvm-bugpointpasses
  llvm-doc
  ^llvm-locale-.*

check_data_file_clashes: Package clang-libllvm wants to install file rootfs/usr/lib/libLLVM.so.18.1
But that file is already provided by package  * llvm

Also avoid:
  python __anonymous() {
      if d.getVar('SOC_FAMILY') == 'rpi' and d.getVar("PN") == d.getVar("BPN"):
          d.setVarFlag("SRC_URI", "sha256sum", "4d2b2a9e3e099d017dc8107bf1c334d27bb87d9e4aff19a0c8d856d17cd41ef0")
  }
This doesn't work for multilib builds where PN != BPN (e.g. lib32-wayland-protocols)

It is easier to just add separate recipes with COMPATIBLE_MACHINE
restriction instead of modifying the recipes for all MACHINEs with
bbappend and then trying to limit it to rpi MACHINEs with overrides
(e.g. why is whole recipe duplicated in wayland-protocols bbappend
doesn't make any sense to me).

breakage like this in stable branches is bad, these bbappends are hard
to avoid (without BBMASKing them and then reintroducing the necessary
part of original mesa bbappend). Now with separate recipes people can
at least opt-out by setting P_V to original scarthgap versions:

PREFERRED_VERSION_mesa:rpi = "24.%"
PREFERRED_VERSION_wayland-protocols:rpi = "1.33"

Signed-off-by: Martin Jansa <martin2.jansa@lgepartner.com>
2025-08-10 09:52:38 -07:00
Garrett Brown
de443f6986 linux: Enable CONFIG_I2C_BRCMSTB for proper HDMI I2C support
This patch enables the CONFIG_I2C_BRCMSTB option in vc4graphics.cfg to
ensure proper support for the `brcm,bcm2711-hdmi-i2c` device node. Without
this configuration, the I2C bus associated with HDMI on Broadcom
BCM2711-based systems may fail to probe, causing issues with HDMI
communication and display initialization.

Additionally, this resolves potential deferred probe issues observed in
the kernel logs, ensuring the correct initialization of the HDMI I2C bus.

Signed-off-by: Garrett Brown <garrett.brown@aclima.io>
2025-08-08 10:56:28 -07:00
Martin Jansa
5f942bc479 Revert "rpi-default-versions: Switch default kernel to 6.12"
This reverts commit 8c916b683d.

Change like this doesn't belong to stable branch, people who
want to use 6.12 can easily switch the P_V in their config.

As reported in:
https://github.com/agherzan/meta-raspberrypi/pull/1483

lttng-modules version in scarthgap fails to build with 6.12:

lttng-modules/2.13.12/lttng-modules-2.13.12/src/../include/wrapper/uprobes.h:28:16: error: too few arguments to function 'uprobe_register'
lttng-modules-2.13.12/src/../include/wrapper/uprobes.h:34:9: error: implicit declaration of function 'uprobe_unregister'; did you mean 'uprobe_register'? [-Werror=implicit-function-declaration]
   34 |         uprobe_unregister(inode, offset, uc);
      |         ^~~~~~~~~~~~~~~~~

Signed-off-by: Martin Jansa <martin2.jansa@lgepartner.com>
2025-08-08 10:56:07 -07:00
Leon Anavi
fceeefa9f0 mesa: wayland-protocols: Fix signatures
Make the upgrade bbappends conditional for Raspberry Pi to fix
issues with signatures. This way the layer passes successfully
test_signatures from:

yocto-check-layer --with-software-layer-signature-check

This work was sponsored by GOVCERT.LU.

Suggested-by: Denys Dmytriyenko <denys@konsulko.com>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-08-05 18:34:07 -07:00
Leon Anavi
884b8b424f mesa_%.bbappend: DISTRO_FEATURES for wayland
Conditionally add wayland-protocols to DEPENDS and RDEPENDS if
variable DISTRO_FEATURES includes wayland.

This work was sponsored by GOVCERT.LU.

Suggested-by: Daniel F. Dickinson <daniel@d-f-d.ca>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-08-05 18:34:07 -07:00
Leon Anavi
c62176e5ff mesa: Upgrade 25.1.3 -> 25.1.6
Upgrade to release 25.1.6:

- v3dv: regression in vkAllocateMemory importing gbm bo
- Vulkan WSI (and zink) use threads on X11 even when the X
  connection isn't thread-safe
- sddm-greeter-qt segfault when using nvk+zink
- [regression][bisected] [FirePro W4100]: crashing/rebooting
- Descriptor set layout with binding flags fails due to indices
  not matching bindings
- piglit bindless texture tests crash
- [radeonsi] Artifacts in Team Fortress 2 (bisected)
- eglgears_wayland segfault on zink+nvk with PRIME
- vn_renderer_virtgpu.c:13:10: fatal error: 'xf86drm.h' file not
  found
- brw: mad instruction printing broken on Gfx11
- radv: RGB9E5 rendering does not ignore alpha write mask

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-08-05 18:34:07 -07:00
Leon Anavi
41a6240492 mesa: Upgrade 24.3.1 -> 25.1.3
Upgrade to release 25.1.3:

- A bug fix release which fixes bugs found since the 25.1.2 release
- Implements the OpenGL 4.6 API, but the version reported by
  glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
  glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver
  being used. Some drivers don't support all the features required
  in OpenGL 4.6. OpenGL 4.6 is only available if requested at
  context creation. Compatibility contexts may report a lower
  version depending on each driver.
- Implements the Vulkan 1.4 API, but the version reported by the
  apiVersion property of the VkPhysicalDeviceProperties struct
  depends on the particular driver being used.

For Raspberry Pi this upgrade brings the following fixes:

- v3dv: vkcube-wayland crashes on raspberry pi 5 kernel 6.12

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-08-05 18:34:07 -07:00
Leon Anavi
849919de47 wayland-protocols: Upgrade 1.38 -> 1.45
Upgrade wayland-protocols to version 1.45 following the upstream:
https://git.openembedded.org/openembedded-core/commit/meta/recipes-graphics/wayland/wayland-protocols_1.45.bb?id=6d158db297a1b790fdf7f201eb3a1e47bb9bc272

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-08-05 18:34:07 -07:00
Bassem Nomany
cdf5a8ae49 mesa: update to 24.3.1
Upgrade to latest official mesa release.

Fixes DRM DSI linking to missing and non exisiting library
drm-rp1-dsi_dri.so on mesa 24.0.7 from poky scarthgap
and styhead.

    https://github.com/agherzan/meta-raspberrypi/issues/1389

Signed-off-by: Bassem Nomany <bassem.nomany@id8-engineering.io>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-08-05 18:34:07 -07:00
Adam Schafer
1f2045321a add raspi-utils recipe to scarthgap branch
Signed-off-by: Adam Schafer <adam.schafer@iridium.com>
2025-07-25 10:32:15 -07:00
Martin Jansa
8e9ec2685a docker-build: use --no-cache
* --no-cache is needed to actually call apt update instead of using it
  from docker cache and then failing to fetch pruned packages as shown:
  https://github.com/agherzan/meta-raspberrypi/actions/runs/16327036376/job/46119768952?pr=1491

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2025-07-21 10:30:09 -07:00
Gijs Peskens
48452445d7 raspberrypi5.conf: Add CM5 dtb's
Add new dtb's required for raspberry compute module 5

Signed-off-by: Gijs Peskens <gijs.peskens@munisense.com>
2025-07-03 23:08:04 -07:00
Markus Volk
9e89558cb8 rpi-bootfiles: update to latest release
Signed-off-by: Markus Volk <f_l_k@t-online.de>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-07-01 19:07:00 -07:00
Markus Volk
8c916b683d rpi-default-versions: Switch default kernel to 6.12
Signed-off-by: Markus Volk <f_l_k@t-online.de>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-07-01 19:07:00 -07:00
Markus Volk
4597c80b12 linux-raspberrypi: update 6.12.2 -> 6.12.25
6.12 is now the default in RPiOS and firmware switched to 6.12 initially in raspberrypi/firmware@fe200a5
now it's on 6.12.25

Signed-off-by: Markus Volk <f_l_k@t-online.de>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-07-01 19:07:00 -07:00
Markus Volk
bae1bac2e7 linux-raspberrypi: add recipe for 6.12
This release is tagged outside of branch.
Use 'nobranch=1' to still be able to fetch the code.
https://github.com/raspberrypi/linux/releases/tag/rpi-6.12.y_20241206_2

The kernel was tested to run on raspberrypi4-64

Signed-off-by: Markus Volk <f_l_k@t-online.de>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-07-01 19:07:00 -07:00
Damiano Ferrari
1091bde25e rpi-bootfiles: Update to latest release
Signed-off-by: Damiano Ferrari <damiano.ferrari@ferrarigrowtech.com>
2025-06-30 00:19:13 -07:00
Damiano Ferrari
acc1e1e9f2 rpi-eeprom: Update to latest release
Signed-off-by: Damiano Ferrari <damiano.ferrari@ferrarigrowtech.com>
2025-06-30 00:19:13 -07:00
Leon Anavi
bce7b3acd2 u-boot_%.bbappend: Increase CONFIG_SYS_BOOTM_LEN
Increase CONFIG_SYS_BOOTM_LEN for machine raspberrypi4 (32-bit)
because the kernel size has increased. This fixes the following
issue when booting an image with U-Boot:

   Image Name:   Linux-6.6.63-v7l
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    8559752 Bytes = 8.2 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
   Booting using the fdt blob at 0x2eff2000
Working FDT set to 2eff2000
   Loading Kernel Image to 8000
Image too large: increase CONFIG_SYS_BOOTM_LEN
Must RESET board to recover

Fixes: https://github.com/agherzan/meta-raspberrypi/issues/1306

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-06-06 07:57:21 -07:00
Leon Anavi
c06ccd1897 rpi-base.inc: vc4-kms-dsi-ili9881-7inch.dtbo
Add vc4-kms-dsi-ili9881-7inch.dtbo for the Raspberry Pi Touch
Display 2 to RPI_KERNEL_DEVICETREE_OVERLAYS.

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-06-06 07:56:48 -07:00
Florin Sarbu
37975104a6 linux-raspberrypi.inc: Change defconfig for RPi3 64 bits
Switch to bcm2711_defconfig for RPi3 64 bits as per
https://github.com/raspberrypi/linux/pull/6688

Signed-off-by: Florin Sarbu <florin@balena.io>
2025-06-05 22:08:49 -07:00
Leon Anavi
a56d87d4e6 yocto-builder/Dockerfile: Ubuntu 22.04
Upgrade to Ubuntu 22.04 because it is compatible with the Yocto
Project release Walnascar and provides a newer Python version:
- Add --ulimit "nofile=1024:1048576" to yocto-builds.yml.
- Increase vm.max_map_count.
- Add --security-opt apparmor=unconfined to docker cmdline.
- Run docker without the default seccomp profile

This commit is backport from branch master to Scarthgap because
Ubuntu 20.04 reached its end of life (EOL) on May 31, 2025. Yocto
release Scarthgap also supports Ubuntu 22.04.

This work was sponsored by GOVCERT.LU.

Suggested-by: Martin Steegmanns <martin.steegmanns@govcert.etat.lu>
Suggested-by: Stu Westerman @stu-spp
Suggested-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2025-06-05 08:17:30 -07:00
Thomas Roos
1467f18a49 Moving bcm2712d0.dtbo into rpi-base.inc
Having RPI_KERNEL_DEVICETREE_OVERLAYS:append = " overlays/bcm2712d0.dtbo"
in raspberrypi5.conf is not applying when building an 64bit compatible image
with raspberrypi-armv8. Thus moving into the rpi-base.inc

This fix the boot of this image on Raspberry Pi 5 hw rev 1.1

Signed-off-by: Thomas Roos <throos@amazon.de>
2025-06-03 18:13:50 -07:00
Jaeyoon Jung
3b27c95c16 linux-raspberrypi: Drop deprecated configs from android-driver.cfg
CONFIG_ASHMEM has been deprecated since 5.18 by:
    commit 721412ed3d819e767cac2b06646bf03aa158aaec
    Author: Christoph Hellwig <hch@lst.de>
    Date:   Tue Mar 15 13:34:57 2022 +0100

        staging: remove ashmem

        The mainline replacement for ashmem is memfd, so remove the legacy
        code from drivers/staging/

so has CONFIG_ANDROID since 6.1 by:
    commit 1045a06724f322ed61f1ffb994427c7bdbe64647
    Author: Christoph Hellwig <hch@lst.de>
    Date:   Wed Jun 29 17:01:02 2022 +0200

        remove CONFIG_ANDROID

        The ANDROID config symbol is only used to guard the binder config
        symbol and to inject completely random config changes.  Remove it
        as it is obviously a bad idea.

As now master has 6.1 or later, both should be dropped.

Signed-off-by: Jaeyoon Jung <jaeyoon.jung@lge.com>
2025-04-10 17:16:41 -07:00
Ayoub Zaki
c153c694bd raspberrypi5: add bcm2712d0 overlay required for booting up correctly
Signed-off-by: Ayoub Zaki <ayoub.zaki@embetrix.com>
2025-03-21 21:40:49 -07:00
Pierrick Curt
e9cc26c9c7 rpi-base: build uart dts overlays by default
We need the uart dts overlays to enable a specific uart peripheral.
For example if you use the disable-bt overlay, you have to enable
the uart0 dts overlay to be able to use uart0 peripheral.

Signed-off-by: Pierrick Curt <pierrickcurt@gmail.com>
2025-03-21 23:56:29 +00:00
Andrei Gherzan
fa2bcfcf0e docs: Fix ReadTheDocs sphinx.configuration requirement
Deprecation of projects using Sphinx or MkDocs without an explicit
configuration file:

https://about.readthedocs.com/blog/2024/12/deprecate-config-files-without-sphinx-or-mkdocs-config/

Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
2025-03-21 09:22:09 +00:00
Khem Raj
e124d8284c rpi-base: Remove bcm2712-rpi-5-b.dtb from RPI_KERNEL_DEVICETREE target
All bcm2712 are built for arm64 builds alone and rpi-base.inc is included
by 32-bit machine configs as well. Recently, kernel moved thesr dts files
into arch/arm64/boot/dts/broadcom/ folder [1]

[1] 10c77e119e

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2025-03-12 21:46:29 +00:00
Khem Raj
3209d98660 linux-raspberrypi-6.6: Upgrade to 6.6.63
supersedes https://github.com/agherzan/meta-raspberrypi/pull/1374

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2025-03-12 21:46:29 +00:00
Matthias Klein
6df7e028a2 linux-firmware-rpidistro: Upgrade to bookworm/20230625-2+rpt3
The upgrade was necessary to get WLAN running on a CM4 (under scarthgap).
Otherwise I continuously got the following kernel messages when trying to connect:
[   31.907395] brcmfmac: brcmf_set_channel: set chanspec 0xd022 fail, reason -52
[   32.023434] brcmfmac: brcmf_set_channel: set chanspec 0xd026 fail, reason -52
[   32.135403] brcmfmac: brcmf_set_channel: set chanspec 0xd02a fail, reason -52
[   32.247392] brcmfmac: brcmf_set_channel: set chanspec 0xd02e fail, reason -52
[   33.919395] brcmfmac: brcmf_set_channel: set chanspec 0xd090 fail, reason -52
[   33.926940] brcmfmac: brcmf_set_channel: set chanspec 0xd095 fail, reason -52
[   33.935151] brcmfmac: brcmf_set_channel: set chanspec 0xd099 fail, reason -52
[   33.942691] brcmfmac: brcmf_set_channel: set chanspec 0xd09d fail, reason -52
[   33.950338] brcmfmac: brcmf_set_channel: set chanspec 0xd0a1 fail, reason -52
[   33.957903] brcmfmac: brcmf_set_channel: set chanspec 0xd0a5 fail, reason -52

Firmware version before:  BCM4345/6 wl0: Apr 15 2021 03:03:20 version 7.45.234 (4ca95bb CY) FWID 01-996384e2
Firmware version current: BCM4345/6 wl0: Aug 29 2023 01:47:08 version 7.45.265 (28bca26 CY) FWID 01-b677b91b

Signed-off-by: Matthias Klein <matthias@extraklein.de>
2024-09-24 00:27:27 +01:00
Matthias Klein
1918a27419 linux-firmware-rpidistro: Fix wireless on model Zero 2 W
Firmware links for model Zero 2 W were missing.

This patch sets the necessary links for brcmfmac firmware. Without the
links, the firmware cannot be loaded without causing boot messages like:
brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430b0-sdio.raspberrypi,model-zero-2-w.bin failed with error -2

Fixes agherzan/meta-raspberrypi#1324

Signed-off-by: Matthias Klein <matthias@extraklein.de>
2024-06-07 05:19:13 +01:00
alperak
0f46a1d376 rpi-cmdline: Fix being renamed of network interfaces
Add net.ifnames=0 kernel parameter into CMDLINE and make it possible to override.

If we boot the kernel this way, the network interfaces will not be renamed. Otherwise it will be renamed.

Without parameter:

root@raspberrypi3-64:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: enu1u1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel qlen 1000
    link/ether b8:27:eb:d9:fd:59 brd ff:ff:ff:ff:ff:ff
3: wlxb827eb8ca80c: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether b8:27:eb:8c:a8:0c brd ff:ff:ff:ff:ff:ff

root@raspberrypi3-64:~# journalctl | grep wlan
Feb 27 17:26:08 raspberrypi3-64 kernel: brcmfmac mmc1:0001:1 wlxb827eb8ca80c: renamed from wlan0
Feb 27 17:26:10 raspberrypi3-64 kernel[296]: [    8.711897] brcmfmac mmc1:0001:1 wlxb827eb8ca80c: renamed from wlan0

With parameter:

root@raspberrypi3-64:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel qlen 1000
    link/ether b8:27:eb:d9:fd:59 brd ff:ff:ff:ff:ff:ff
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel qlen 1000
    link/ether b8:27:eb:8c:a8:0c brd ff:ff:ff:ff:ff:ff

Signed-off-by: alperak <alperyasinak1@gmail.com>
2024-05-28 23:14:17 +01:00
Tim Orling
fb03b44883 raspberrypi5.conf: Fix KERNEL_IMAGETYPE_UBOOT
Similar to raspberrypi4-64.conf, we need to set KERNEL_IMAGETYPE_UBOOT to
"Image" and set KERNEL_BOOTCMD to "booti"

Signed-off-by: Tim Orling <tim.orling@konsulko.com>
2024-05-28 23:06:18 +01:00
Tim Orling
6d593646ba u-boot: re-enable rapsberrypi5
With meta-lts-mixins scarthgap/u-boot we can now support raspberrypi5

Signed-off-by: Tim Orling <tim.orling@konsulko.com>
2024-05-28 23:06:18 +01:00
Tim Orling
16656a66cf layer.conf: rpi5 recommends lts-u-boot-mixin
Add lts-u-boot-mixin to LAYERRECOMMENDS

https://git.yoctoproject.org/meta-lts-mixins 'scarthgap/u-boot' branch
adds u-boot v2024.04 support which includes the initial support for
raspberrypi5.

Signed-off-by: Tim Orling <tim.orling@konsulko.com>
2024-05-28 23:06:18 +01:00
Martin Jansa
6160d0d737 linux: drop unused 5.15 version
* 6.1 version was used by default since mickledore:
  12a1187b01
  and kirkstone for rpi5 MACHINEs since:
  9dc6673d41

* scarthgap uses 6.6 by default since:
  1cf3dd5e5e

* nobody is probably using 5.15 with newer release and there are issues with "iw reg" since
  wireless-regdb upgrade in oe-core as well as shown in:
  https://github.com/agherzan/meta-raspberrypi/pull/1317
  so better to drop it from master/scarthgap together with
  rpi.scc used only for 5.15 and 0001-gcc-plugins-Reorganize-gimple-includes-for-GCC-13.patch
  used only by rpi.scc

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2024-05-28 22:18:43 +01:00
Martin Jansa
e7476edfcb linux: drop unused rpi4-64-kernel-misc.cfg
* it was used only for linux-raspberrypi_4.19.inc dropped in:
  2afeee9b82 (diff-7460e33493167fc60e3c40dcb0b3b9298e0bac97d5945414349c89cecc1cf3f1)

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2024-05-28 22:18:43 +01:00
Max Stepanov
1879cb831f rpi-eeprom: Update to support raspberrypi5 machine
- Upgraded rpi-eeprom to latest release
 - Updated recipe to support pi4 and pi5 machines

Signed-off-by: Max Stepanov <mast@imast.ru>
2024-04-09 09:18:38 +01:00
jdavidsson
d072cc8a48 rpi-base: Add hifiberry-dacplusadc overlay
Add support for HiFiBerry DAC+ ADC.

Signed-off-by: jdavidsson <johan.et.davidsson@gmail.com>
2024-03-28 03:35:31 +00:00
Khem Raj
ec06e94f2a raspberrypi-firmware: Revert to debian archive
This file is now used to fetch binary blobs used by picamera and
vc library recipes, which are only compatible with 32bit userspace
Perhaps we need to sunset these recipe as some point and repace
with alternatives like picamera2 which is built on top of libcamera
and works on both 32bit and 64 bit

rpi-bootfiles is fetching from latest firmware.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-27 10:23:17 +00:00
Khem Raj
bb8d5f7e9b rpi-bootfiles: Resort to github APIs for tarballs
The firmware repo is huge ( 36G ) to clone is onerous
using shallow clone tarballs require them to be pre-populated
at some mirror which we don't have. Third option is to let
github provide the tarball, there is concern that tarballs
might change the compression etc and thus checksum would change
that is something github would communicate to users in advance [1]

Therefore this is the best solution for us right now.

Also upgrade to latest while here and drop PR settings

[1] https://docs.github.com/en/repositories/working-with-files/using-files/downloading-source-code-archives#stability-of-source-code-archives

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-27 10:23:17 +00:00
Khem Raj
e8d4ac24a4 linux-raspberrypi_6.6: Bump to 6.6.22
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-27 10:23:17 +00:00
Martin Jansa
d88e625cf2 userland: fix installed-vs-shipped in multilib builds
Be aware that whole userland repo is marked as ancient and deprecated:
96a7334ae9
and explicitly says:
"If you are using code from here you should rethink your solution."

But even if your build is using vc4graphics in MACHINE_FEATURES
to avoid most of userland, this issue with multilib was preventing
do_install:append to actually remove those libraries provided by
lib32-mesa when building lib32-userland (e.g. to provide
virtual/libomxil or as dependency of raspidmx or runtime dependency
of omxplayer).

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2024-03-19 00:26:25 +00:00
Khem Raj
1cf3dd5e5e rpi-default-versions: Switch default kernel to 6.6
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-18 12:22:52 +00:00
Khem Raj
6a7aac79ce rpi-base: Add missing broadcom/ prefix to find DTB files
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-18 12:22:52 +00:00
Khem Raj
90d4e6568a raspberrypi-firmware: Fetch using git URI
This brings the matching binary blobs to latest kernel

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-18 12:22:52 +00:00
Khem Raj
a62c7c2ca6 linux-firmware-rpidistro: Upgrade to bookworm/20230625-2+rpt2
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-18 12:22:52 +00:00
Khem Raj
ba342d2a9e bluez-firmware-rpidistro: Upgrade to 1.2-9+rpt3 release
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-18 12:22:52 +00:00
Khem Raj
e9a1940bab linux-raspberrypi: Add recipe for 6.6 LTS kernel
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-03-18 12:22:52 +00:00
Michał Kluska
92a9b7a012 rpi-base: Added missing HiFiBerry
Added support for missing HiFiBerry AMP100, AMP3, AMP4 Pro, DAC+ ADC Pro, DAC+ DSP, DAC+ HD, Digi Pro.

Signed-off-by: Michał Kluska <kluska.mk@gmail.com>
2024-03-05 10:46:04 +00:00
Martin Jansa
95a9103f91 sdimage-raspberrypi.wks: increase /boot partition minimal size from 20 to 100
* current aarch64 kernel image alone is 24MB:
  24M tmp-glibc/deploy/images/raspberrypi4-64/Image-raspberrypi4-64-1-6.1.77+git0+43d1723dbe_77fc1fbcb5-r0.1-20110405230000.bin
  and with rpi-bootfiles it takes around 46MB (e.g. this is from kirkstone raspberrypi4-64 build):

2.0K    boot.scr
2.0K    cmdline.txt
4.0K    fixup4cd.dat
4.0K    fixup_cd.dat
4.0K    uEnv.txt
6.0K    fixup4.dat
8.0K    fixup.dat
10K     fixup4db.dat
10K     fixup4x.dat
10K     fixup_db.dat
10K     fixup_x.dat
16K     uboot.env
36K     config.txt
52K     bcm2711-rpi-4-b.dtb
52K     bcm2711-rpi-400.dtb
52K     bcm2711-rpi-cm4.dtb
52K     bootcode.bin
126K    overlays
558K    kernel8.img
786K    start4cd.elf
786K    start_cd.elf
2.2M    start4.elf
2.9M    start.elf
2.9M    start4x.elf
3.6M    start4db.elf
3.6M    start_x.elf
4.6M    start_db.elf
23M     Image

* it is increased automatically to fit the content:

  tmp-glibc/deploy/images/raspberrypi4-64 $ sfdisk -l core-image-minimal-raspberrypi4-64.rootfs--1.0-r0-20110405230000.wic
  Disk core-image-minimal-raspberrypi4-64.rootfs--1.0-r0-20110405230000.wic: 241.2 MiB, 252915712 bytes, 493976 sectors
  Units: sectors of 1 * 512 = 512 bytes
  Sector size (logical/physical): 512 bytes / 512 bytes
  I/O size (minimum/optimal): 512 bytes / 512 bytes
  Disklabel type: dos
  Disk identifier: 0x076c4a2a

  Device                                                                Boot  Start    End Sectors   Size Id Type
  core-image-minimal-raspberrypi4-64.rootfs--1.0-r0-20110405230000.wic1 *      8192 157815  149624  73.1M  c W95 FAT32 (LBA)
  core-image-minimal-raspberrypi4-64.rootfs--1.0-r0-20110405230000.wic2      163840 493975  330136 161.2M 83 Linux

  but if you want to update the kernel in place or add some additional files
  later, it might not be big enough, increase the minimal size from 20M to 100M

* reminder (as I forgot about it before):
  "--size" is just minimum

  https://docs.yoctoproject.org/ref-manual/kickstart.html
  says:

  --size: The minimum partition size. Specify as an integer value optionally followed by one of the units “k” / “K” for kibibyte, “M” for mebibyte and “G” for gibibyte. The default unit if none is given is “M”. You do not need this option if you use --source.
  --fixed-size: The exact partition size. Specify as an integer value optionally followed by one of the units “k” / “K” for kibibyte, “M” for mebibyte and “G” for gibibyte. The default unit if none is given is “M”. Cannot be specify together with --size. An error occurs when assembling the disk image if the partition data is larger than --fixed-size.

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2024-02-23 01:24:46 +00:00
Martin Jansa
b65bff6323 sdcard_image-rpi.bbclass: include ${IMAGE_NAME_SUFFIX} directly in both ${IMAGE_NAME} and ${IMAGE_LINK_NAME}
* Adjust to
  https://git.openembedded.org/openembedded-core/commit/?id=26d97acc71379ab6702fa54a23b6542a3f51779c

* ${IMAGE_NAME}${IMAGE_NAME_SUFFIX} is almost always used together already
  and when they aren't it's usually because of hardcoded '.rootfs' suffix

* it's a bit strange, because ${IMAGE_NAME_SUFFIX} is applied after the
  version from ${IMAGE_VERSION_SUFFIX}, if we move it to ${IMAGE_LINK_NAME}
  then it will be applied before the version and ${IMAGE_LINK_NAME}
  will be just the version-less symlink to latest built version.

* it's not added to INITRAMFS_IMAGE_NAME as it assumes that all
  images used as initramfs will set IMAGE_NAME_SUFFIX to empty.
  Many already do as shown bellow, but you might need to extend
  this list in your layer.

* without this fix, build with:
  IMAGE_FSTYPES:rpi = "rpi-sdimg.gz"
  will fail due to duplicated .rootfs suffix as shown in:
  http://errors.yoctoproject.org/Errors/Details/754267/

  130023424 bytes (130 MB, 124 MiB) copied, 0.0706353 s, 1.8 GB/s
  gzip: skipping: core-image-minimal-raspberrypi4-64.rootfs-20240222111049.rpi-sdimg does not exist
  WARNING: TOPDIR/tmp-glibc/work/raspberrypi4_64-oe-linux/core-image-minimal/1.0/temp/run.do_image_rpi_sdimg.1238835:263 exit 1 from 'gzip -f -9 -n -c --rsyncable core-image-minimal-raspberrypi4-64.rootfs-20240222111049.rpi-sdimg > core-image-minimal-raspberrypi4-64.rootfs-20240222111049.rpi-sdimg.gz'

  OE raspberrypi4-64@ /OE/build/oe-core/tmp-glibc/work/raspberrypi4_64-oe-linux/core-image-minimal/1.0/deploy-core-image-minimal-image-complete $ ll
  total 305612
  drwxr-xr-x  2 martin martin      4096 Feb 22 12:12 ./
  drwxr-xr-x 17 martin martin      4096 Feb 22 12:12 ../
  -rw-r--r--  1 martin martin 130023424 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.ext3
  -rw-r--r--  1 martin martin      3535 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.manifest
  -rw-r--r--  1 martin martin 184549376 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.rootfs.rpi-sdimg
  -rw-r--r--  1 martin martin         0 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.rpi-sdimg.gz
  -rw-r--r--  1 martin martin    361441 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.spdx.tar.zst
  -rw-r--r--  1 martin martin    271541 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.testdata.json
  -rw-r--r--  1 martin martin  50331648 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs-20240222111049.vfat
  lrwxrwxrwx  1 martin martin        61 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs.ext3 -> core-image-minimal-raspberrypi4-64.rootfs-20240222111049.ext3
  lrwxrwxrwx  1 martin martin        65 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs.manifest -> core-image-minimal-raspberrypi4-64.rootfs-20240222111049.manifest
  lrwxrwxrwx  1 martin martin        69 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs.spdx.tar.zst -> core-image-minimal-raspberrypi4-64.rootfs-20240222111049.spdx.tar.zst
  lrwxrwxrwx  1 martin martin        70 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs.testdata.json -> core-image-minimal-raspberrypi4-64.rootfs-20240222111049.testdata.json
  lrwxrwxrwx  1 martin martin        61 Feb 22 12:12 core-image-minimal-raspberrypi4-64.rootfs.vfat -> core-image-minimal-raspberrypi4-64.rootfs-20240222111049.vfat

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2024-02-22 15:21:59 +00:00
Khem Raj
8fa8d6bed7 python3-sense-hat: Drop PYTHON_PN
Starting OE core commit b566b1e32c7993d1ab7795562f648e52ce186a70,
we no longer need PYTHON_PN for any abstraction of python2 vs python3.

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-02-22 13:12:22 +00:00
Matthew Draws
dbf1113a82 rpi-eeprom_git: v.2024.01.05-2712 Update recipe to latest rpi-eeprom repo
This follows the current latest release of rpi-eeprom:
https://github.com/raspberrypi/rpi-eeprom

Signed-off-by: Matthew Draws <draws.matthew@gmail.com>
2024-02-20 13:00:04 +00:00
Kevin Hao
2e1ca4ce2e rpidistro-ffmpeg: Fix old override syntax
Signed-off-by: Kevin Hao <kexin.hao@windriver.com>
2024-02-20 07:39:32 +00:00
Khem Raj
54f6b3c660 layer.conf: Update for the scarthgap release series
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-02-19 19:23:28 +00:00
Khem Raj
6d7c2f8080 linux-raspberrypi: Upgrade to 6.1.77
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-02-19 19:23:28 +00:00
Pascal Huerst
fc34bc3b86 rpi-base: Add missing hifiberry overlay
There is anoter hifiberry hat, for which there is currently
no overlay added to the build, so let's add it:

hifiberry-dacplusadcpro.dtbo

Signed-off-by: Pascal Huerst <pascal.huerst@gmail.com>
2024-02-13 12:24:22 +00:00
Martin Jansa
e67feeff48 libcamera-apps: fix build with libcamera-0.2.0
* it's failing to build since the upgrade in:
  https://git.openembedded.org/meta-openembedded/commit/?id=711c6fbce39df685225bca081c5f42bae2de658b

* fixes
  ../git/core/libcamera_app.cpp: In member function 'void LibcameraApp::ConfigureViewfinder()':
  ../git/core/libcamera_app.cpp:327:25: error: 'class libcamera::CameraConfiguration' has no member named 'transform'
    327 |         configuration_->transform = options_->transform;
        |                         ^~~~~~~~~

* be aware that the repository and libraries were removed in 1.4.0 version with:
  0ca9f41fea
  but I'll leave that change to someone actually using this, I was just fixing
  the build issue found in world builds

* tweak FILES to package library symlink without "lib" prefix to fix:
  ERROR: libcamera-apps-1.4.2+git-r0 do_package: QA Issue: libcamera-apps: Files/directories were installed but not shipped in any package:
    /usr/lib/rpicam_app.so
  Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
  libcamera-apps: 1 installed and not shipped files. [installed-vs-shipped]

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2024-02-01 11:44:18 +00:00
Khem Raj
99a1b4b5fa linux-raspberrypi_6.1.bb: Upgrade to 6.1.74
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2024-02-01 11:41:55 +00:00
Damiano Ferrari
9c901bf170 docs: add info on how to set different CAN interrupt pins
Signed-off-by: Damiano Ferrari <damiano.ferrari@ferrarigrowtech.com>
2024-01-26 00:39:32 +00:00
Damiano Ferrari
51386901d4 rpi-config: Add CAN0_INTERRUPT_PIN and CAN1_INTERRUPT_PIN variable
Current configuration hard-code the values of the CAN interrupt pins. This setting allows to change them. The default values are the same as before.

Signed-off-by: Damiano Ferrari <damiano.ferrari@ferrarigrowtech.com>
2024-01-26 00:39:32 +00:00
Leon Anavi
fe7592fe9c conf/machine/raspberrypi5.conf: Use "Image"
"zImage" not supported on arm64 so set KERNEL_IMAGETYPE_DIRECT to
"Image" for Raspberry Pi 5 and avoid the following errors:

| make: *** No rule to make target 'zImage'.  Stop.
| ERROR: oe_runmake failed

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Leon Anavi
1f35a585ca conf/machine/raspberrypi5.conf: ttyAMA10
Set SERIAL_CONSOLES to ttyAMA10. This fixes login on the UART
no matter if systemd is used.

This work was sponsored by GOVCERT.LU.

Suggested-by: Gael PORTAY <gael.portay@rtone.fr>
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Leon Anavi
15967d6ad9 conf/machine/raspberrypi5.conf: kernel_2712.img
Set SDIMG_KERNELIMAGE to kernel_2712.img instead of kernel8.img.
Raspberry Pi 5 firmware defaults to loading kernel_2712.img because
this image contains optimisations specific to Raspberry Pi 5
(e.g. 16K page-size). For more details:
https://www.raspberrypi.com/documentation/computers/config_txt.html#kernel

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Leon Anavi
ddb4d6652d linux-raspberrypi.inc: bcm2712_defconfig for rpi5
Use bcm2711_defconfig instead of bcm2712_defconfig for Raspberry
Pi 5 as per the instructions in the documentation:
https://www.raspberrypi.com/documentation/computers/linux_kernel.html#kernel-configuration

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Leon Anavi
357c85c5fb rpi-config: Reduce config.txt size
Remove some comments to reduce config.txt file size to avoid file
corruption and make sure Raspberry Pi 5 will boot successfully.

The issue with large config.txt has been reported to related
projects:
https://github.com/raspberrypi/firmware/issues/1848
https://github.com/Evilpaul/RPi-config/issues/9

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Leon Anavi
4814f09e49 u-boot_%.bbappend: Skip for Raspberry Pi 5
Temporary avoid Raspberry Pi 5 machines because U-Boot has not been
ported to it yet.

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Leon Anavi
df13222776 rpi-base.inc: Add vc4-kms-v3d-pi5.dtbo
Add overlays/vc4-kms-v3d-pi5.dtbo to use vc4-kms-v3d driver on
Raspberry Pi 5.

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-25 17:25:39 +00:00
Florin Sarbu
1e7750e3c8 Add Raspberry Pi 5
Signed-off-by: Florin Sarbu <florin@balena.io>
2024-01-25 17:25:39 +00:00
Leon Anavi
b859bc3eca bcm2835: update 1.71 -> 1.73
Update to version 1.73:

- Fixed some inconsistent indenting in bcm2835.c that triggers
  warnings for some people.
- Added Timeout checks to bcm2835_i2c_write() in case of IO
  problems. New reason code BCM2835_I2C_REASON_ERROR_TIMEOUT
  added.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2024-01-08 11:45:41 +00:00
Harunobu Kurokawa
4c033eb074 rpi-cmdline, rpi-u-boot-src: Support USB boot
The Raspberry Pi 4 board can boot the image from USB memory.
But current meta-raspberrypi supports only SD boot.

This commit allows switching SD boot to other device.
For example, if you want to use USB boot, please define
the following parameters in your conf/local.conf file.
CMDLINE_ROOT_PARTITION = "/dev/sda2"
BOOT_MEDIA = "usb"

v4: Update extra-build-config.md to explain more detail for new variable.

v3: Changed variable name to "BOOT_MEDIA" (was "BOOT_DEVTIPE").

v2: Set existing microSD parameter as default. User can overwrite
some parameters.

Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
2023-12-13 16:43:59 +02:00
Lorenzo Arena
fde68b24f0 docs: fix syntax for overriding fs type for initramfs image
Signed-off-by: Lorenzo Arena <arena.lor@gmail.com>
2023-12-05 17:00:50 +02:00
Leon Anavi
8231f97534 rpi-config: reintroduce start_x
Add a patch to reintroduce configuration start_x. This patch has
been submitted to the upstream of of the RPi-config GitHub repo:
https://github.com/Evilpaul/RPi-config/pull/8

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2023-11-24 08:06:17 +02:00
Vincent Davis Jr
0f6c5eab24 rpidistro-vlc: add new patch po-Fix-typos-in-oc
Fixes compilation issue that occur with
the latest in OE-core.

Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2023-11-24 06:00:33 +02:00
Leon Anavi
6008249722 rpi-config: Upgrade to tip of tree
Upgrade to the latest version of the repository with includes the
following improvements of the template for config.txt:

- update revision and date stamp
- additon of dtoverlay
- general updates

This work was sponsored by GOVCERT.LU.

Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
2023-11-17 16:49:53 +02:00
Matthew Draws
eb79172bc9 rpi-eeprom: Update to 2023.10.18-2712
This follows the current latest release of rpi-eeprom:
https://github.com/raspberrypi/rpi-eeprom

This also removes a patch that is already in upstream.
5ec5c003ba/rpi-eeprom-update (L122)
https://github.com/raspberrypi/rpi-eeprom/commit/55ca589

Signed-off-by: Matthew Draws <draws.matthew@gmail.com>
2023-11-15 00:51:30 +02:00
Khem Raj
08371543f7 linux-raspberrypi_6.1.bb: Update to 6.1.61 release
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-11-14 17:37:06 +02:00
Jose Quaresma
6ef8b576b8 rpi-base: Adds EXTRA_IMAGEDEPENDS to fix the image task do_populate_lic_deploy
This fix is needed to bring the complete dependency chain in order to guarantee
the recursive runtime dependencies [1] of do_populate_lic_deploy in do_populate_lic
will run as expected.

[1] openembedded-core/meta/classes-recipe/license_image.bbclass:do_populate_lic_deploy[recrdeptask] += "do_populate_lic do_deploy"

Fix the following image build issues:

| ERROR: lmp-base-console-image-1.0-r0 do_populate_lic_deploy: Couldn't find license information for dependency rpi-config

Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
2023-10-27 01:30:36 +01:00
Carlos Alberto Lopez Perez
0a4a68dba6 linux-raspberrypi: stop setting powersave as the default CPU governor
* The defconfigs from the RPi Kernel set `powersave` as the default
  CPU governor, which is a bad idea as that reduces performance by
  setting the CPU frequency to the minimum one.

* In case of a Yocto build user-space is not configured by default
  to change the CPU governor, so `powersave` will remain the CPU
  governor and it will slow down everything.

* I submitted a fix for those defconfigs to upstream here:
  https://github.com/raspberrypi/linux/pull/5666
  However, we shouldn't wait until that is accepted and backported
  to all the stable branches (if ever is).

* This patch unsets the selection of `powersave` as the default CPU
  governor.

* Then the CPU governor that will be selected as default after this
  patch will be the Linux's default one that is either `ondemand` or
  `schedutil` depending on the Kernel version.

Signed-off-by: Carlos Alberto Lopez Perez <clopez@igalia.com>
2023-10-25 20:44:38 +01:00
Jose Quaresma
3a0f6678e0 linux-raspberrypi/linux-raspberrypi-v7: drop 5.10 version
The overlays/imx708.dtbo is not supported and backport [1] the dtbo is not accepted so drop this kernel version.
[1] https://github.com/raspberrypi/linux/pull/5452

Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
2023-10-24 12:41:50 +01:00
Andrei Gherzan
9a296d75a8 docs: Fix ReadTheDocs builds.os requirement
This fixes:

The configuration key "build.os" is required to build your
documentation. Read more at
https://docs.readthedocs.io/en/stable/config-file/v2.html#build-os

Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
2023-10-24 12:36:33 +01:00
Joshua Watt
482d864b8f rpi-base: Fix wic image kernel dependency
wic images depend on the kernel device trees, and therefore should
depend on virtual/kernel:do_deploy to make sure these are present in the
deploy directory.

Most of the time, this dependency is satisfied indirectly since a rootfs
image will depend on the kernel, but add it explicitly for the cases
where it is not.

Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
2023-09-27 12:42:25 +01:00
Martin Jansa
c0aec2f628 layer.conf: update LAYERSERIES_COMPAT for nanbield
* oe-core switched to nanbield in:
  https://git.openembedded.org/openembedded-core/commit/?id=f212cb12a0db9c9de5afd3cc89b1331d386e55f6

Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
2023-09-22 10:39:52 +01:00
Khem Raj
6f93508662 raspberrypi-firmware: Update to 20230509~buster
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-09-22 10:39:52 +01:00
Khem Raj
82fb510fc6 bluez-firmware-rpidistro: Update to 1.2-4+rpt10
Drop a backport already in 1.2-4+rpt10

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-09-22 10:39:52 +01:00
Khem Raj
a871ecfb38 linux-firmware-rpidistro: Update to 20230210-5_bpo11+1
Symlinks are no longer needed as they already exist in the new raspbian firmware tarball

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-09-22 10:39:52 +01:00
Khem Raj
653f281c8f linux-raspberrypi: Upgrade 6.1 release to latest point release 6.1.54
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-09-22 10:39:52 +01:00
Khem Raj
108f83f0e9 userland: Update to trunk from 20230419
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-09-22 10:39:52 +01:00
Sangmo Kang
6501ec892c omxplayer: fix an error caused by new srcrev fetcher API
Fail to parse omxplayer_git.bb after using new srcrev fetcher API
* https://git.yoctoproject.org/poky/commit/?id=c9400d01575c2a93762b71bf790d0edd6e2acb6f
* https://git.yoctoproject.org/poky/commit/?id=62afa02d01794376efab75623f42e7e08af08526

Error message:

ERROR: ExpansionError during parsing /tmp/meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb
Traceback (most recent call last):
  File "Var <fetcher_hashes_dummyfunc[vardepvalue]>", line 1, in <module>
  File "/tmp/poky/bitbake/lib/bb/fetch2/__init__.py", line 834, in get_hashvalue(d=<bb.data_smart.DataSmart object at 0x7fdac34c1130>, method_name='sortable_revision'):
     def get_hashvalue(d, method_name='sortable_revision'):
    >    pkgv, revs = _get_srcrev(d, method_name=method_name)
         return " ".join(revs)
  File "/tmp/poky/bitbake/lib/bb/fetch2/__init__.py", line 804, in _get_srcrev(d=<bb.data_smart.DataSmart object at 0x7fdac34c1130>, method_name='sortable_revision'):
         if not format:
    >        raise FetchError("The SRCREV_FORMAT variable must be set when multiple SCMs are used.\n"\
                              "The SCMs are:\n%s" % '\n'.join(scms))
bb.data_smart.ExpansionError: Failure expanding variable fetcher_hashes_dummyfunc[vardepvalue], expression was ${@bb.fetch.get_hashvalue(d)} which triggered exception FetchError: Fetcher failure: The SRCREV_FORMAT variable must be set when multiple SCMs are used.
The SCMs are:
git://github.com/popcornmix/omxplayer.git;protocol=https;branch=master
git://github.com/FFmpeg/FFmpeg;branch=release/4.0;protocol=https;depth=1;name=ffmpeg;destsuffix=git/ffmpeg
The variable dependency chain for the failure is: fetcher_hashes_dummyfunc[vardepvalue]

ERROR: Parsing halted due to errors, see error messages above

Signed-off-by: Sangmo Kang <sangmo.kang@lge.com>
2023-08-29 22:43:01 +01:00
Andrei Gherzan
98ee0439ca docs: Fix documentation theme
This avoids failing builds with:
NameError: name 'html_theme' is not defined

It also makes the theme configuration explicit and correctly set up.

Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
2023-08-29 22:43:01 +01:00
Andrei Gherzan
a7f7272dca ci: Add usrmerge to distro features
unmerged-usr was deprecated upstream[1]. Follow up with our CI builds.

[1] https://lore.kernel.org/all/3f2f03085301d22854e5429019fb010f27d98bc7.camel@linuxfoundation.org/t/

Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
2023-08-29 22:43:01 +01:00
Vivien Didelot
5e2f79a6fa libcamera-apps: bump to latest main
Now that the libcamera package from meta-multimedia has support
for flicker controls and libcamera-apps uses meson, we can bump the
package to its latest revision.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
5f9423e4f9 libcamera-apps: switch from CMake to meson
CMake is removed in upstream libcamera-apps as of 9e17265,
thus switch to meson to build the package from now on.

Add PACKAGECONFIG entries and neon flags matching the settings
project meson.build as described in the official documentation
https://www.raspberrypi.com/documentation/computers/camera_software.html#building-libcamera-apps

Default to "drm" for PACKAGECONFIG as it is the only option enabled
in both recommended meson setup for Raspberry Pi OS and Raspberry Pi
OS Lite.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
9d9f98d266 libcamera-apps: bump to 3d9ac10
Bump libcamera to 3d9ac10 to get a fix for the current libcamera from
meta-openembedded/meta-multimedia for the following issue:

    error: 'StreamRoles' in namespace 'libcamera' does not name a type; did you mean 'StreamRole'?
       55 |         using StreamRoles = libcamera::StreamRoles;
          |                                        ^~~~~~~~~~~
          |                                        StreamRole

Reported-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
55b6e121f9 libcamera-apps: move recipe to dynamic-layers
Move the libcamera-apps recipe to dynamic-layers/multimedia-layer
alongside with its libcamera dependency.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
d9ffd5c828 rpi-libcamera-apps: rename to libcamera-apps
The libcamera-apps project is written in a hardware-agnostic manner
thanks to libcamera, and thus isn't specific to the rpi SoC family.

Moreover, the project is correctly named libcamera-apps and not
rpi-libcamera-apps, so rename the recipe in order to reflect that.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
fbf6b355a3 rpi-libcamera-apps: don't force COMPATIBLE_MACHINE
Even though the libcamera apps are a rewrite of the rpicam apps and
maintained by the raspberry folks, switching to libcamera makes the
code hardware agnostic and thus could be compiled and used on various
machines featuring a camera device supported by a libcamera pipeline.

For this reason, do not enforce COMPATIBLE_MACHINE.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
c0fca29ff3 rpi-libcamera-apps: replace tensorflow config
The 'tensorflow-lite' PACKAGECONFIG entry was missing the corresponding
build dependency. In order to be consistent with the build macros,
replace the feature with a 'tflite' package config entry.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
83a422668c rpi-libcamera-apps: add drm support
Add a 'drm' PACKAGECONFIG entry in order to provide support for a
DRM preview window while running the libcamera apps.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
48c3cc7413 rpi-libcamera-apps: add opencv build dependency
The 'opencv' PACKAGECONFIG entry was missing the build dependency.

Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Vivien Didelot
2ae93b0f9f rpi-libcamera-apps: fix Illegal Instruction
With armv8-neon being enforced for all ARM based machines, running
any libcamera app on raspberrypi (e.g. Raspberry Pi B Rev 2) results
in Illegal Instruction.

To fix this, set armv8-neon for 32bit raspberrypi3 and raspberrypi4
but defaults to TARGET_ARCH for other non-aarch64 machines.

Fixes: f16219293a ("rpi-libcamera-apps: fix flags used in aarch64 builds")
Signed-off-by: Vivien Didelot <vivien.didelot@gmail.com>
2023-08-08 01:54:22 +01:00
Khem Raj
3f12757165 rpi-base: Remove customizing SPLASH var
psplash-raspberrypi does not exist anymore, we use psplash from core

Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-08-02 10:53:23 +01:00
Vincent Davis Jr
be4867e494 rpidistro-vlc: fix error uint64_t does not name
Build failure occurring with gcc version 13.1.1.
Add patch to fix builds with latest gcc in OE-core.

Signed-off-by: Vincent Davis Jr <vince@underview.tech>
2023-08-02 10:52:06 +01:00
Martin Jansa
f78b4f159d libcamera: update PACKAGECONFIG for libcamera-0.1.0
* libcamera was updated in meta-oe in:
  https://git.openembedded.org/meta-openembedded/commit/?id=4e0281797277cf44287de93618c51e4a219fac75

* now it was failing with:
  meson.build:3:0: ERROR: Options "raspberrypi" are not in allowed choices: "all, auto, imx8-isi, ipu3, rkisp1, rpi/vc4, simple, uvcvideo, vimc"

  because raspberrypi support was updated and renamed to rpi/vc4 in:
  726e9274ea

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2023-07-27 15:01:55 +01:00
Jan Vermaete
05dceed006 rpi-base.inc: add the disable-wifi overlay
It can be useful to disable the WiFi for hardening reasons.
And it probably lower the power consumption a bit.

Signed-off-by: Jan Vermaete <jan.vermaete@gmail.com>
2023-07-26 17:36:36 +01:00
Jan Vermaete
8585b42bd6 kas-poky-rpi.yml: renamed ABORT to HALT
Naming changed in Yocto.  And it avoids a warning during the run.

Signed-off-by: Jan Vermaete <jan.vermaete@gmail.com>
2023-07-24 12:09:29 +01:00
Khem Raj
e3f733cadd linux-raspberrypi_6.1.bb: Update to 6.1.38
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-07-11 15:05:10 +01:00
Khem Raj
dff85b9a9f linux-raspberrypi-6.1: Update to 6.1.34 release
Signed-off-by: Khem Raj <raj.khem@gmail.com>
2023-06-22 09:58:22 +01:00
Martin Jansa
195c7d59bc *.patch: add Upstream-Status to all patches
There is new patch-status QA check in oe-core:
https://git.openembedded.org/openembedded-core/commit/?id=76a685bfcf927593eac67157762a53259089ea8a

This is temporary work around just to hide _many_ warnings from
optional patch-status (if you add it to WARN_QA).

This just added
Upstream-Status: Pending
everywhere without actually investigating what's the proper status.

This is just to hide current QA warnings and to catch new .patch files being
added without Upstream-Status, but the number of Pending patches is now terrible:
Patches in Pending state: 41 (57%)

With recent change to enable patch-status not only for all .patch
files in oe-core, but for all recipes from oe-core:
https://git.openembedded.org/openembedded-core/commit/?id=61a881fdbe8b5a21c6276b8a5d06cc30486b1eb3
this causes bluez5 do_patch failures as reported in:
https://lists.openembedded.org/g/openembedded-core/message/183177

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
2023-06-22 00:04:40 +01:00
DOLE Olivier
8e07f0d328 rpi-config: U-Boot requires "enable_uart=1" to operate correctly.
When RPI_USE_U_BOOT is set to 1, if enable_uart is not set to 1 in config.txt
then the board won't boot (Resolves agherzan#1189).
This requirement only affects the following boards:
- Raspberry Pi Zero W
- Raspberry Pi 3 32 & 64 bit
- Raspberry Pi 4 32 & 64 bit

Signed-off-by: DOLE Olivier <odole@dicksondata.fr>
2023-06-09 02:09:42 +01:00
Florin Sarbu
492cb5a5d9 udev-rules-rpi: Use 99-com.rules directly from upstream
Rather than have an unsynchronized copy of this file, let's use this
udev rule directly from upstream.

Signed-off-by: Florin Sarbu <florin@balena.io>
2023-05-28 10:19:52 +01:00
Zachary T Welch
9240ea91ca machines: simplify MACHINEOVERRIDES definitions
Prepending new definitions should be preferred to assignment, as it is
simpler and more conducive to defining new machine configurations that
reuse these configurations.

Signed-off-by: Zachary T Welch <zach@aquabyte.ai>
2023-05-24 11:30:04 +01:00
109 changed files with 2366 additions and 1238 deletions

View File

@@ -32,7 +32,7 @@ runs:
n=1
until [ "$n" -gt "$tries" ]; do
echo "Building the docker image ${{ inputs.docker_image }}-${{ inputs.id }}... try $n..."
if docker build . -f "${{ inputs.docker_image }}/Dockerfile" -t "${{ inputs.docker_image }}-${{ inputs.id }}"; then
if docker build --no-cache . -f "${{ inputs.docker_image }}/Dockerfile" -t "${{ inputs.docker_image }}-${{ inputs.id }}"; then
# This can fail if a dangling images cleaning job runs in
# parallel. So we try this a couple of times to minimize
# conflict. This is because while building, docker creates a

View File

@@ -23,7 +23,9 @@ jobs:
id: ${{ github.event.number }}
- name: Do DCO check
run: |
docker run --rm -v "$GITHUB_WORKSPACE:/work:ro" \
docker run --rm --security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
-v "$GITHUB_WORKSPACE:/work:ro" \
--env "BASE_REF=$GITHUB_BASE_REF" \
"dco-check-${{ github.event.number }}"
- name: Cleanup temporary docker image

View File

@@ -17,5 +17,5 @@ passing the appropriate `-f` argument.
Here is an example for building the `dco-check` image:
```
docker build . -f dco-check/Dockerfile -t dco-check
docker build --no-cache . -f dco-check/Dockerfile -t dco-check
```

View File

@@ -2,20 +2,21 @@
#
# SPDX-License-Identifier: MIT
FROM ubuntu:20.04
FROM ubuntu:22.04
ARG DEBIAN_FRONTEND="noninteractive"
RUN apt-get update -qq
RUN apt-get update -q -y
RUN apt-get install -y eatmydata
# Yocto/OE build host dependencies
# Keep this in sync with
# https://git.yoctoproject.org/poky/tree/documentation/poky.yaml
# https://git.yoctoproject.org/poky/tree/documentation/poky.yaml.in
# https://git.yoctoproject.org/poky/tree/documentation/tools/host_packages_scripts/ubuntu_essential.sh
RUN eatmydata apt-get install -qq -y \
gawk wget git diffstat unzip texinfo gcc build-essential chrpath \
socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
build-essential chrpath cpio debianutils diffstat file gawk gcc \
git iputils-ping libacl1 liblz4-tool locales python3 python3-git \
python3-jinja2 python3-pexpect python3-pip python3-subunit socat \
texinfo unzip wget xz-utils zstd
# en_US.UTF-8 is required by the build system
RUN eatmydata apt-get install -qq -y locales \
@@ -29,6 +30,9 @@ RUN eatmydata apt-get clean && rm -rf /var/lib/apt/lists/*
RUN echo "dash dash/sh boolean false" | debconf-set-selections \
&& dpkg-reconfigure dash
# Fix the resource exhaustion problem on the build infrastructure
RUN echo 'vm.max_map_count = 4048576' >> /etc/sysctl.conf
# Run under normal user called 'ci'
RUN useradd --create-home --uid 1000 --shell /usr/bin/bash ci
USER ci

View File

@@ -42,7 +42,9 @@ printf "\n# ------ ci ------\n" >> conf/local.conf
cat <<EOCONF >>conf/local.conf
BB_NUMBER_THREADS = "6"
PARALLEL_MAKE = "-j 6"
DISTRO_FEATURES:append = " systemd"
# unmerged-usr is deprecated
# https://lore.kernel.org/all/3f2f03085301d22854e5429019fb010f27d98bc7.camel@linuxfoundation.org/t/
DISTRO_FEATURES:append = " systemd usrmerge"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit"
VIRTUAL-RUNTIME_initscripts = "systemd-compat-units"

View File

@@ -25,6 +25,7 @@ jobs:
- raspberrypi3
- raspberrypi4-64
- raspberrypi4
- raspberrypi5
- raspberrypi-cm3
- raspberrypi-cm
- raspberrypi-armv7
@@ -65,7 +66,8 @@ jobs:
if: steps.changed-files-specific.outputs.any_changed == 'true'
- name: Build the image
run: |
docker run --rm \
docker run --rm --security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
-v "$GITHUB_WORKSPACE:/work:ro" \
-v "$DL_DIR:$DL_DIR:rw" \
-v "$SSTATE_DIR:$SSTATE_DIR:rw" \
@@ -75,6 +77,7 @@ jobs:
--env "IMAGE=${{ matrix.image }}" \
--env "DL_DIR=$DL_DIR" \
--env "SSTATE_DIR=$SSTATE_DIR" \
--ulimit "nofile=1024:1048576" \
"yocto-builder-${{ github.event.number }}" \
/entrypoint-build.sh
if: steps.changed-files-specific.outputs.any_changed == 'true'

View File

@@ -42,7 +42,8 @@ jobs:
if: steps.changed-files-specific.outputs.any_changed == 'true'
- name: Run yocto-check-layer
run: |
docker run --rm -v "$GITHUB_WORKSPACE:/work:ro" \
docker run --rm --security-opt apparmor=unconfined \
-v "$GITHUB_WORKSPACE:/work:ro" \
--env "BASE_REF=$GITHUB_BASE_REF" \
"yocto-builder-${{ github.event.number }}" \
/entrypoint-yocto-check-layer.sh

View File

@@ -1,6 +1,11 @@
version: 2
sphinx:
configuration: docs/conf.py
build:
os: ubuntu-22.04
tools:
python: "3.7"
python:
version: "3.7"
install:
- requirements: docs/requirements.txt

View File

@@ -60,7 +60,7 @@ do_image_rpi_sdimg[depends] = " \
do_image_rpi_sdimg[recrdeps] = "do_build"
# SD card image name
SDIMG = "${IMGDEPLOYDIR}/${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.rpi-sdimg"
SDIMG = "${IMGDEPLOYDIR}/${IMAGE_NAME}.rpi-sdimg"
# Additional files and/or directories to be copied into the vfat partition from the IMAGE_ROOTFS.
FATPAYLOAD ?= ""

View File

@@ -9,8 +9,11 @@ BBFILE_COLLECTIONS += "raspberrypi"
BBFILE_PATTERN_raspberrypi := "^${LAYERDIR}/"
BBFILE_PRIORITY_raspberrypi = "9"
LAYERSERIES_COMPAT_raspberrypi = "mickledore"
LAYERSERIES_COMPAT_raspberrypi = "nanbield scarthgap"
LAYERDEPENDS_raspberrypi = "core"
# Recommended for u-boot support for raspberrypi5
# https://git.yoctoproject.org/meta-lts-mixins 'scarthgap/u-boot' branch
LAYERRECOMMENDS_raspberrypi = "lts-u-boot-mixin"
# Additional license directories.
LICENSE_PATH += "${LAYERDIR}/files/custom-licenses"

View File

@@ -18,6 +18,7 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
overlays/overlay_map.dtb \
overlays/at86rf233.dtbo \
overlays/disable-bt.dtbo \
overlays/disable-wifi.dtbo \
overlays/dwc2.dtbo \
overlays/gpio-ir.dtbo \
overlays/gpio-ir-tx.dtbo \
@@ -25,8 +26,16 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
overlays/gpio-poweroff.dtbo \
overlays/gpio-shutdown.dtbo \
overlays/hifiberry-amp.dtbo \
overlays/hifiberry-amp100.dtbo \
overlays/hifiberry-amp3.dtbo \
overlays/hifiberry-amp4pro.dtbo \
overlays/hifiberry-dac.dtbo \
overlays/hifiberry-dacplus.dtbo \
overlays/hifiberry-dacplusadc.dtbo \
overlays/hifiberry-dacplusadcpro.dtbo \
overlays/hifiberry-dacplusdsp.dtbo \
overlays/hifiberry-dacplushd.dtbo \
overlays/hifiberry-digi-pro.dtbo \
overlays/hifiberry-digi.dtbo \
overlays/justboom-both.dtbo \
overlays/justboom-dac.dtbo \
@@ -49,33 +58,47 @@ RPI_KERNEL_DEVICETREE_OVERLAYS ?= " \
overlays/pps-gpio.dtbo \
overlays/rpi-ft5406.dtbo \
overlays/rpi-poe.dtbo \
overlays/uart0.dtbo \
overlays/uart0-pi5.dtbo \
overlays/uart1.dtbo \
overlays/uart1-pi5.dtbo \
overlays/uart2.dtbo \
overlays/uart2-pi5.dtbo \
overlays/uart3.dtbo \
overlays/uart3-pi5.dtbo \
overlays/uart4.dtbo \
overlays/uart4-pi5.dtbo \
overlays/uart5.dtbo \
overlays/vc4-fkms-v3d.dtbo \
overlays/vc4-fkms-v3d-pi4.dtbo \
overlays/vc4-kms-v3d.dtbo \
overlays/vc4-kms-v3d-pi4.dtbo \
overlays/vc4-kms-v3d-pi5.dtbo \
overlays/vc4-kms-dsi-7inch.dtbo \
overlays/vc4-kms-dsi-ili9881-7inch.dtbo \
overlays/w1-gpio.dtbo \
overlays/w1-gpio-pullup.dtbo \
overlays/wm8960-soundcard.dtbo \
overlays/bcm2712d0.dtbo \
"
RPI_KERNEL_DEVICETREE ?= " \
bcm2708-rpi-zero.dtb \
bcm2708-rpi-zero-w.dtb \
bcm2708-rpi-b.dtb \
bcm2708-rpi-b-rev1.dtb \
bcm2708-rpi-b-plus.dtb \
bcm2709-rpi-2-b.dtb \
bcm2710-rpi-2-b.dtb \
bcm2710-rpi-3-b.dtb \
bcm2710-rpi-3-b-plus.dtb \
bcm2710-rpi-zero-2.dtb \
bcm2711-rpi-4-b.dtb \
bcm2711-rpi-400.dtb \
bcm2708-rpi-cm.dtb \
bcm2710-rpi-cm3.dtb \
bcm2711-rpi-cm4.dtb \
bcm2711-rpi-cm4s.dtb \
broadcom/bcm2708-rpi-zero.dtb \
broadcom/bcm2708-rpi-zero-w.dtb \
broadcom/bcm2708-rpi-b.dtb \
broadcom/bcm2708-rpi-b-rev1.dtb \
broadcom/bcm2708-rpi-b-plus.dtb \
broadcom/bcm2709-rpi-2-b.dtb \
broadcom/bcm2710-rpi-2-b.dtb \
broadcom/bcm2710-rpi-3-b.dtb \
broadcom/bcm2710-rpi-3-b-plus.dtb \
broadcom/bcm2710-rpi-zero-2.dtb \
broadcom/bcm2711-rpi-4-b.dtb \
broadcom/bcm2711-rpi-400.dtb \
broadcom/bcm2708-rpi-cm.dtb \
broadcom/bcm2710-rpi-cm3.dtb \
broadcom/bcm2711-rpi-cm4.dtb \
broadcom/bcm2711-rpi-cm4s.dtb \
"
KERNEL_DEVICETREE ??= " \
@@ -112,9 +135,6 @@ SERIAL_CONSOLES_CHECK ??= "${SERIAL_CONSOLES}"
# This variable is referred to by recipes fetching / generating the files.
BOOTFILES_DIR_NAME ?= "bootfiles"
# Set Raspberrypi splash image
SPLASH ?= "psplash-raspberrypi"
def make_dtb_boot_files(d):
# Generate IMAGE_BOOT_FILES entries for device tree files listed in
# KERNEL_DEVICETREE.
@@ -150,7 +170,11 @@ IMAGE_BOOT_FILES ?= "${BOOTFILES_DIR_NAME}/* \
${@make_dtb_boot_files(d)} \
${RPI_EXTRA_IMAGE_BOOT_FILES} \
"
EXTRA_IMAGEDEPENDS += "rpi-bootfiles"
do_image_wic[depends] += " \
virtual/kernel:do_deploy \
rpi-bootfiles:do_deploy \
${@bb.utils.contains('RPI_USE_U_BOOT', '1', 'u-boot:do_deploy', '',d)} \
"

View File

@@ -1,4 +1,4 @@
# RaspberryPi BSP default versions
PREFERRED_VERSION_linux-raspberrypi ??= "6.1.%"
PREFERRED_VERSION_linux-raspberrypi ??= "6.6.%"
PREFERRED_VERSION_linux-raspberrypi-v7 ??= "${PREFERRED_VERSION_linux-raspberrypi}"

View File

@@ -32,6 +32,11 @@ RPI_KERNEL_DEVICETREE = " \
broadcom/bcm2711-rpi-400.dtb \
broadcom/bcm2711-rpi-cm4.dtb \
broadcom/bcm2711-rpi-cm4s.dtb \
broadcom/bcm2712-rpi-5-b.dtb \
broadcom/bcm2712-rpi-cm5-cm5io.dtb \
broadcom/bcm2712-rpi-cm5-cm4io.dtb \
broadcom/bcm2712-rpi-cm5l-cm5io.dtb \
broadcom/bcm2712-rpi-cm5l-cm4io.dtb \
"
SDIMG_KERNELIMAGE ?= "kernel8.img"

View File

@@ -2,7 +2,7 @@
#@NAME: RaspberryPi Compute Module (CM1)
#@DESCRIPTION: Machine configuration for the RaspberryPi Compute Module (CM1)
MACHINEOVERRIDES = "raspberrypi:${MACHINE}"
MACHINEOVERRIDES =. "raspberrypi:"
include conf/machine/raspberrypi.conf
ARMSTUB ?= "armstub.bin"

View File

@@ -2,9 +2,9 @@
#@NAME: RaspberryPi0 2 Wifi Development Board
#@DESCRIPTION: Machine configuration for the RaspberryPi0 2 Wifi in 64 bits mode
include conf/machine/raspberrypi3-64.conf
MACHINEOVERRIDES =. "raspberrypi3-64:"
MACHINEOVERRIDES := "${@'${MACHINEOVERRIDES}'.replace(':${MACHINE}',':raspberrypi3-64:${MACHINE}')}"
include conf/machine/raspberrypi3-64.conf
MACHINE_EXTRA_RRECOMMENDS += "\
linux-firmware-rpidistro-bcm43436 \

View File

@@ -2,9 +2,9 @@
#@NAME: RaspberryPi0 2 Wifi Development Board
#@DESCRIPTION: Machine configuration for the RaspberryPi0 2 Wifi in 32 bits mode
include conf/machine/raspberrypi3.conf
MACHINEOVERRIDES =. "raspberrypi3:"
MACHINEOVERRIDES := "${@'${MACHINEOVERRIDES}'.replace(':${MACHINE}',':raspberrypi3:${MACHINE}')}"
include conf/machine/raspberrypi3.conf
MACHINE_EXTRA_RRECOMMENDS += "\
linux-firmware-rpidistro-bcm43436 \

View File

@@ -2,7 +2,7 @@
#@NAME: RaspberryPi Zero Development Board
#@DESCRIPTION: Machine configuration for the RaspberryPi Zero board (https://www.raspberrypi.org/blog/raspberry-pi-zero)
MACHINEOVERRIDES = "raspberrypi:${MACHINE}"
MACHINEOVERRIDES =. "raspberrypi:"
include conf/machine/raspberrypi.conf
SERIAL_CONSOLES ?= "115200;ttyAMA0"

View File

@@ -2,7 +2,7 @@
#@NAME: RaspberryPi 3 Development Board
#@DESCRIPTION: Machine configuration for the RaspberryPi 3 in 64 bits mode
MACHINEOVERRIDES = "raspberrypi3:${MACHINE}"
MACHINEOVERRIDES =. "raspberrypi3:"
MACHINE_EXTRA_RRECOMMENDS += "\
linux-firmware-rpidistro-bcm43430 \

View File

@@ -2,7 +2,7 @@
#@NAME: RaspberryPi 4 Development Board (64bit)
#@DESCRIPTION: Machine configuration for the RaspberryPi 4 in 64 bits mode
MACHINEOVERRIDES = "raspberrypi4:${MACHINE}"
MACHINEOVERRIDES =. "raspberrypi4:"
MACHINE_FEATURES += "pci"
MACHINE_EXTRA_RRECOMMENDS += "\

View File

@@ -0,0 +1,36 @@
#@TYPE: Machine
#@NAME: RaspberryPi 5 Development Board (64bit)
#@DESCRIPTION: Machine configuration for the RaspberryPi 5 in 64 bits mode
require conf/machine/include/arm/armv8-2a/tune-cortexa76.inc
include conf/machine/include/rpi-base.inc
MACHINE_FEATURES += "pci"
MACHINE_EXTRA_RRECOMMENDS += "\
linux-firmware-rpidistro-bcm43455 \
bluez-firmware-rpidistro-bcm4345c0-hcd \
linux-firmware-rpidistro-bcm43456 \
bluez-firmware-rpidistro-bcm4345c5-hcd \
"
RPI_KERNEL_DEVICETREE = " \
broadcom/bcm2712-rpi-5-b.dtb \
broadcom/bcm2712-rpi-cm5-cm5io.dtb \
broadcom/bcm2712-rpi-cm5-cm4io.dtb \
broadcom/bcm2712-rpi-cm5l-cm5io.dtb \
broadcom/bcm2712-rpi-cm5l-cm4io.dtb \
"
SDIMG_KERNELIMAGE ?= "kernel_2712.img"
SERIAL_CONSOLES ?= "115200;ttyAMA10"
VC4DTBO ?= "vc4-kms-v3d"
# When u-boot is enabled we need to use the "Image" format and the "booti"
# command to load the kernel
KERNEL_IMAGETYPE_UBOOT ?= "Image"
# "zImage" not supported on arm64 and ".gz" images not supported by bootloader yet
KERNEL_IMAGETYPE_DIRECT ?= "Image"
KERNEL_BOOTCMD ?= "booti"
UBOOT_MACHINE = "rpi_arm64_config"

View File

@@ -30,7 +30,10 @@
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = ['myst_parser']
extensions = [
'myst_parser',
'sphinx_rtd_theme'
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
@@ -121,6 +124,7 @@ todo_include_todos = False
# a list of builtin themes.
#
# html_theme = 'alabaster'
html_theme = "sphinx_rtd_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the

View File

@@ -74,6 +74,22 @@ To remove (or adjust) this delay set these variables in local.conf:
BOOT_DELAY = "0"
BOOT_DELAY_MS = "0"
## Boot media
The Raspberry Pi 4 board can load the boot image files from SD card and USB memory.
By default SD card media is used as boot media.
To switch the boot media from SD card to USB memory, the following variables are supported
in local.conf: `CMDLINE_ROOT_PARTITION` and `BOOT_MEDIA`.
The default value of `CMDLINE_ROOT_PARTITION` is "/dev/mmcblk0p2" to mount SD card. If you want to mount USB memory partition, set CMDLINE_ROOT_PARTITION to "/dev/sda2".
`BOOT_MEDIA` allows `mmc` and `usb`. The "mmc" is required to load an image from the SD card, following the u-boot specification. Similarly, if you want to load a boot image file from USB memory, set BOOT_MEDIA to "usb".
For example, if you want to use USB boot, please define
the following parameters in your local.conf file.
CMDLINE_ROOT_PARTITION = "/dev/sda2"
BOOT_MEDIA = "usb"
## Set overclocking options
The Raspberry Pi can be overclocked. As of now overclocking up to the "Turbo
@@ -155,6 +171,16 @@ For further customisation the KERNEL_IMAGETYPE and KERNEL_BOOTCMD variables can
be overridden to select the exact kernel image type (eg. zImage) and u-boot
command (eg. bootz) to be used.
To operate correctly, U-Boot requires `enable_uart=1` in `config.txt` file for
the following boards:
* Raspberry Pi Zero W
* Raspberry Pi 3 32-bit
* Raspberry Pi 3 64-bit
* Raspberry Pi 4 32-bit
* Raspberry Pi 4 64-bit
It means that, for those boards, `RPI_USE_U_BOOT = "1"` is not compatible with
`ENABLE_UART = "0"`.
## Image with Initramfs
To build an initramfs image:
@@ -170,7 +196,7 @@ To build an initramfs image:
- `INITRAMFS_IMAGE_BUNDLE = "1"`
- `BOOT_SPACE = "1073741"`
- `INITRAMFS_MAXSIZE = "315400"`
- `IMAGE_FSTYPES_pn-${INITRAMFS_IMAGE} = "${INITRAMFS_FSTYPES}"`
- `IMAGE_FSTYPES:pn-${INITRAMFS_IMAGE} = "${INITRAMFS_FSTYPES}"`
## Including additional files in the SD card image boot partition
@@ -314,6 +340,13 @@ Some modules may require setting the frequency of the crystal oscillator used on
CAN_OSCILLATOR="8000000"
Configure the interrupt pin to the one connected to the CAN module. By default,
the pins are set to 25 for can0 and 24 for can1. To change them to 12 and 16,
the following variables also have to be set:
CAN0_INTERRUPT_PIN = "12"
CAN1_INTERRUPT_PIN = "16"
Tested modules:
* PiCAN2 (16 MHz crystal): <http://skpang.co.uk/catalog/pican2-canbus-board-for-raspberry-pi-23-p-1475.html>

View File

@@ -1 +1,2 @@
myst_parser
sphinx_rtd_theme

View File

@@ -18,7 +18,7 @@ DEPENDS += " \
"
RDEPENDS:${PN} += " \
${PYTHON_PN}-numpy \
${PYTHON_PN}-rtimu \
${PYTHON_PN}-pillow \
python3-numpy \
python3-rtimu \
python3-pillow \
"

View File

@@ -1,4 +1,4 @@
From 738f530829fb5ee37d74191d34f75d72921284ca Mon Sep 17 00:00:00 2001
From bbc1ea3e4119c665723cfd1c5a364bc8c7cbb464 Mon Sep 17 00:00:00 2001
From: Martin Jansa <Martin.Jansa@gmail.com>
Date: Thu, 4 May 2023 18:07:16 +0000
Subject: [PATCH] utils/version.py: use /usr/bin/env in shebang
@@ -31,7 +31,7 @@ Upstream-Status: Pending
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/utils/version.py b/utils/version.py
index fc2d431..1400eed 100755
index 48d7e05..4a5e35c 100755
--- a/utils/version.py
+++ b/utils/version.py
@@ -1,4 +1,4 @@
@@ -39,4 +39,4 @@ index fc2d431..1400eed 100755
+#!/usr/bin/env python3
# Copyright (C) 2021, Raspberry Pi (Trading) Limited
# Generate version information for libcamera-apps
# Generate version information for rpicam-apps

View File

@@ -0,0 +1,271 @@
From 500f1e9eaeca29b255d0364e1383d70ade1d1177 Mon Sep 17 00:00:00 2001
From: Martin Jansa <martin.jansa@gmail.com>
Date: Tue, 30 Jan 2024 12:02:09 +0000
Subject: [PATCH] Revert "Support compressed pixel formats when saving DNGs"
This reverts commit a85aed7603a0b69a6685d3f81ee860246d5b1621.
This requires rpi specific fork of libcamera to provide e.g.
formats::RGGB16_PISP_COMP1
added in:
https://github.com/raspberrypi/libcamera/commit/fb3cb844f2117f30d3eeece99d6ce4d02624e492
but not included in libcamera from meta-oe:
https://git.openembedded.org/meta-openembedded/commit/?id=711c6fbce39df685225bca081c5f42bae2de658b
See https://github.com/raspberrypi/rpicam-apps/issues/627
Upstream-Status: Pending
---
image/dng.cpp | 205 ++++++++------------------------------------------
1 file changed, 33 insertions(+), 172 deletions(-)
diff --git a/image/dng.cpp b/image/dng.cpp
index 7692f92..fc10439 100644
--- a/image/dng.cpp
+++ b/image/dng.cpp
@@ -33,47 +33,40 @@ struct BayerFormat
int bits;
char const *order;
bool packed;
- bool compressed;
};
static const std::map<PixelFormat, BayerFormat> bayer_formats =
{
- { formats::SRGGB10_CSI2P, { "RGGB-10", 10, TIFF_RGGB, true, false } },
- { formats::SGRBG10_CSI2P, { "GRBG-10", 10, TIFF_GRBG, true, false } },
- { formats::SBGGR10_CSI2P, { "BGGR-10", 10, TIFF_BGGR, true, false } },
- { formats::SGBRG10_CSI2P, { "GBRG-10", 10, TIFF_GBRG, true, false } },
-
- { formats::SRGGB10, { "RGGB-10", 10, TIFF_RGGB, false, false } },
- { formats::SGRBG10, { "GRBG-10", 10, TIFF_GRBG, false, false } },
- { formats::SBGGR10, { "BGGR-10", 10, TIFF_BGGR, false, false } },
- { formats::SGBRG10, { "GBRG-10", 10, TIFF_GBRG, false, false } },
-
- { formats::SRGGB12_CSI2P, { "RGGB-12", 12, TIFF_RGGB, true, false } },
- { formats::SGRBG12_CSI2P, { "GRBG-12", 12, TIFF_GRBG, true, false } },
- { formats::SBGGR12_CSI2P, { "BGGR-12", 12, TIFF_BGGR, true, false } },
- { formats::SGBRG12_CSI2P, { "GBRG-12", 12, TIFF_GBRG, true, false } },
-
- { formats::SRGGB12, { "RGGB-12", 12, TIFF_RGGB, false, false } },
- { formats::SGRBG12, { "GRBG-12", 12, TIFF_GRBG, false, false } },
- { formats::SBGGR12, { "BGGR-12", 12, TIFF_BGGR, false, false } },
- { formats::SGBRG12, { "GBRG-12", 12, TIFF_GBRG, false, false } },
-
- { formats::SRGGB16, { "RGGB-16", 16, TIFF_RGGB, false, false } },
- { formats::SGRBG16, { "GRBG-16", 16, TIFF_GRBG, false, false } },
- { formats::SBGGR16, { "BGGR-16", 16, TIFF_BGGR, false, false } },
- { formats::SGBRG16, { "GBRG-16", 16, TIFF_GBRG, false, false } },
-
- { formats::R10_CSI2P, { "BGGR-10", 10, TIFF_BGGR, true, false } },
- { formats::R10, { "BGGR-10", 10, TIFF_BGGR, false, false } },
+ { formats::SRGGB10_CSI2P, { "RGGB-10", 10, TIFF_RGGB, true } },
+ { formats::SGRBG10_CSI2P, { "GRBG-10", 10, TIFF_GRBG, true } },
+ { formats::SBGGR10_CSI2P, { "BGGR-10", 10, TIFF_BGGR, true } },
+ { formats::SGBRG10_CSI2P, { "GBRG-10", 10, TIFF_GBRG, true } },
+
+ { formats::SRGGB10, { "RGGB-10", 10, TIFF_RGGB, false } },
+ { formats::SGRBG10, { "GRBG-10", 10, TIFF_GRBG, false } },
+ { formats::SBGGR10, { "BGGR-10", 10, TIFF_BGGR, false } },
+ { formats::SGBRG10, { "GBRG-10", 10, TIFF_GBRG, false } },
+
+ { formats::SRGGB12_CSI2P, { "RGGB-12", 12, TIFF_RGGB, true } },
+ { formats::SGRBG12_CSI2P, { "GRBG-12", 12, TIFF_GRBG, true } },
+ { formats::SBGGR12_CSI2P, { "BGGR-12", 12, TIFF_BGGR, true } },
+ { formats::SGBRG12_CSI2P, { "GBRG-12", 12, TIFF_GBRG, true } },
+
+ { formats::SRGGB12, { "RGGB-12", 12, TIFF_RGGB, false } },
+ { formats::SGRBG12, { "GRBG-12", 12, TIFF_GRBG, false } },
+ { formats::SBGGR12, { "BGGR-12", 12, TIFF_BGGR, false } },
+ { formats::SGBRG12, { "GBRG-12", 12, TIFF_GBRG, false } },
+
+ { formats::SRGGB16, { "RGGB-16", 16, TIFF_RGGB, false } },
+ { formats::SGRBG16, { "GRBG-16", 16, TIFF_GRBG, false } },
+ { formats::SBGGR16, { "BGGR-16", 16, TIFF_BGGR, false } },
+ { formats::SGBRG16, { "GBRG-16", 16, TIFF_GBRG, false } },
+
+ { formats::R10_CSI2P, { "BGGR-10", 10, TIFF_BGGR, true } },
+ { formats::R10, { "BGGR-10", 10, TIFF_BGGR, false } },
// Currently not in the main libcamera branch
//{ formats::R12_CSI2P, { "BGGR-12", 12, TIFF_BGGR, true } },
- { formats::R12, { "BGGR-12", 12, TIFF_BGGR, false, false } },
-
- /* PiSP compressed formats. */
- { formats::RGGB16_PISP_COMP1, { "RGGB-16-PISP", 16, TIFF_RGGB, false, true } },
- { formats::GRBG16_PISP_COMP1, { "GRBG-16-PISP", 16, TIFF_GRBG, false, true } },
- { formats::GBRG16_PISP_COMP1, { "GBRG-16-PISP", 16, TIFF_GBRG, false, true } },
- { formats::BGGR16_PISP_COMP1, { "BGGR-16-PISP", 16, TIFF_BGGR, false, true } },
+ { formats::R12, { "BGGR-12", 12, TIFF_BGGR, false } },
};
static void unpack_10bit(uint8_t const *src, StreamInfo const &info, uint16_t *dest)
@@ -124,129 +117,6 @@ static void unpack_16bit(uint8_t const *src, StreamInfo const &info, uint16_t *d
}
}
-// We always use these compression parameters.
-#define COMPRESS_OFFSET 2048
-#define COMPRESS_MODE 1
-
-static uint16_t postprocess(uint16_t a)
-{
- if (COMPRESS_MODE & 2)
- {
- if (COMPRESS_MODE == 3 && a < 0x4000)
- a = a >> 2;
- else if (a < 0x1000)
- a = a >> 4;
- else if (a < 0x1800)
- a = (a - 0x800) >> 3;
- else if (a < 0x3000)
- a = (a - 0x1000) >> 2;
- else if (a < 0x6000)
- a = (a - 0x2000) >> 1;
- else if (a < 0xC000)
- a = (a - 0x4000);
- else
- a = 2 * (a - 0x8000);
- }
-
- return std::min(0xFFFF, a + COMPRESS_OFFSET);
-}
-
-static uint16_t dequantize(uint16_t q, int qmode)
-{
- switch (qmode)
- {
- case 0:
- return (q < 320) ? 16 * q : 32 * (q - 160);
-
- case 1:
- return 64 * q;
-
- case 2:
- return 128 * q;
-
- default:
- return (q < 94) ? 256 * q : std::min(0xFFFF, 512 * (q - 47));
- }
-}
-
-static void subBlockFunction(uint16_t *d, uint32_t w)
-{
- int q[4];
-
- int qmode = (w & 3);
- if (qmode < 3)
- {
- int field0 = (w >> 2) & 511;
- int field1 = (w >> 11) & 127;
- int field2 = (w >> 18) & 127;
- int field3 = (w >> 25) & 127;
- if (qmode == 2 && field0 >= 384)
- {
- q[1] = field0;
- q[2] = field1 + 384;
- }
- else
- {
- q[1] = (field1 >= 64) ? field0 : field0 + 64 - field1;
- q[2] = (field1 >= 64) ? field0 + field1 - 64 : field0;
- }
- int p1 = std::max(0, q[1] - 64);
- if (qmode == 2)
- p1 = std::min(384, p1);
- int p2 = std::max(0, q[2] - 64);
- if (qmode == 2)
- p2 = std::min(384, p2);
- q[0] = p1 + field2;
- q[3] = p2 + field3;
- }
- else
- {
- int pack0 = (w >> 2) & 32767;
- int pack1 = (w >> 17) & 32767;
- q[0] = (pack0 & 15) + 16 * ((pack0 >> 8) / 11);
- q[1] = (pack0 >> 4) % 176;
- q[2] = (pack1 & 15) + 16 * ((pack1 >> 8) / 11);
- q[3] = (pack1 >> 4) % 176;
- }
-
- d[0] = dequantize(q[0], qmode);
- d[2] = dequantize(q[1], qmode);
- d[4] = dequantize(q[2], qmode);
- d[6] = dequantize(q[3], qmode);
-}
-
-static void uncompress(uint8_t const *src, StreamInfo const &info, uint16_t *dest)
-{
- // In all cases, the *decompressed* image must be a multiple of 8 columns wide.
- unsigned int buf_stride_pixels = (info.width + 7) & ~7;
- for (unsigned int y = 0; y < info.height; ++y)
- {
- uint16_t *dp = dest + y * buf_stride_pixels;
- uint8_t const *sp = src + y * info.stride;
-
- for (unsigned int x = 0; x < info.width; x+=8)
- {
- if (COMPRESS_MODE & 1)
- {
- uint32_t w0 = 0, w1 = 0;
- for (int b = 0; b < 4; ++b)
- w0 |= (*sp++) << (b * 8);
- for (int b = 0; b < 4; ++b)
- w1 |= (*sp++) << (b * 8);
- subBlockFunction(dp, w0);
- subBlockFunction(dp + 1, w1);
- for (int i = 0; i < 8; ++i, ++dp)
- *dp = postprocess(*dp);
- }
- else
- {
- for (int i = 0; i < 8; ++i)
- *dp++ = postprocess((*sp++) << 8);
- }
- }
- }
-}
-
struct Matrix
{
Matrix(float m0, float m1, float m2,
@@ -307,16 +177,8 @@ void dng_save(std::vector<libcamera::Span<uint8_t>> const &mem, StreamInfo const
BayerFormat const &bayer_format = it->second;
LOG(1, "Bayer format is " << bayer_format.name);
- // Decompression will require a buffer that's 8 pixels aligned.
- unsigned int buf_stride_pixels = info.width;
- unsigned int buf_stride_pixels_padded = (buf_stride_pixels + 7) & ~7;
- std::vector<uint16_t> buf(buf_stride_pixels_padded * info.height);
- if (bayer_format.compressed)
- {
- uncompress(mem[0].data(), info, &buf[0]);
- buf_stride_pixels = buf_stride_pixels_padded;
- }
- else if (bayer_format.packed)
+ std::vector<uint16_t> buf(info.width * info.height);
+ if (bayer_format.packed)
{
switch (bayer_format.bits)
{
@@ -444,9 +306,8 @@ void dng_save(std::vector<libcamera::Span<uint8_t>> const &mem, StreamInfo const
{
for (unsigned int x = 0; x < (info.width >> 4); x++)
{
- unsigned int off = (y * buf_stride_pixels + x) << 4;
- uint32_t grey =
- buf[off] + buf[off + 1] + buf[off + buf_stride_pixels] + buf[off + buf_stride_pixels + 1];
+ unsigned int off = (y * info.width + x) << 4;
+ uint32_t grey = buf[off] + buf[off + 1] + buf[off + info.width] + buf[off + info.width + 1];
grey = (grey << 14) >> bayer_format.bits;
grey = sqrt((double)grey); // simple "gamma correction"
thumb_buf[3 * x] = thumb_buf[3 * x + 1] = thumb_buf[3 * x + 2] = grey;
@@ -478,7 +339,7 @@ void dng_save(std::vector<libcamera::Span<uint8_t>> const &mem, StreamInfo const
for (unsigned int y = 0; y < info.height; y++)
{
- if (TIFFWriteScanline(tif, &buf[buf_stride_pixels * y], y, 0) != 1)
+ if (TIFFWriteScanline(tif, &buf[info.width * y], y, 0) != 1)
throw std::runtime_error("error writing DNG image data");
}

View File

@@ -0,0 +1,44 @@
SUMMARY = "A suite of libcamera-based apps"
DESCRIPTION = "This is a small suite of libcamera-based apps that aim to \
copy the functionality of the existing \"raspicam\" apps."
HOMEPAGE = "https://github.com/raspberrypi/libcamera-apps"
SECTION = "console/utils"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://license.txt;md5=a0013d1b383d72ba4bdc5b750e7d1d77"
SRC_URI = "\
git://github.com/raspberrypi/libcamera-apps.git;protocol=https;branch=main \
file://0001-utils-version.py-use-usr-bin-env-in-shebang.patch \
file://0002-Revert-Support-compressed-pixel-formats-when-saving-.patch \
"
PV = "1.4.2+git${SRCPV}"
SRCREV = "9ae39f85ae6bee9761c36b9b5b80d675bc1fa369"
S = "${WORKDIR}/git"
DEPENDS = "libcamera libexif jpeg tiff libpng boost"
PACKAGECONFIG ??= "drm"
PACKAGECONFIG[libav] = "-Denable_libav=true, -Denable_libav=false, libav"
PACKAGECONFIG[drm] = "-Denable_drm=true, -Denable_drm=false, libdrm"
PACKAGECONFIG[egl] = "-Denable_egl=true, -Denable_egl=false, virtual/egl"
PACKAGECONFIG[qt] = "-Denable_qt=true, -Denable_qt=false, qtbase"
PACKAGECONFIG[opencv] = "-Denable_opencv=true, -Denable_opencv=false, opencv"
PACKAGECONFIG[tflite] = "-Denable_tflite=true, -Denable_tflite=false, tensorflow-lite"
inherit meson pkgconfig
NEON_FLAGS = ""
NEON_FLAGS:aarch64 = "-Dneon_flags=arm64"
NEON_FLAGS:arm:raspberrypi3 = "-Dneon_flags=armv8-neon"
NEON_FLAGS:arm:raspberrypi4 = "-Dneon_flags=armv8-neon"
EXTRA_OEMESON += "${NEON_FLAGS}"
# QA Issue: /usr/bin/camera-bug-report contained in package libcamera-apps requires /usr/bin/python3
do_install:append() {
rm -v ${D}/${bindir}/camera-bug-report
}
# not picked automatically, because it's missing common 'lib' prefix
FILES:${PN}-dev += "${libdir}/rpicam_app.so"

View File

@@ -1,2 +1,2 @@
PACKAGECONFIG[raspberrypi] = "-Dpipelines=raspberrypi -Dipas=raspberrypi -Dcpp_args=-Wno-unaligned-access"
PACKAGECONFIG[raspberrypi] = "-Dpipelines=rpi/vc4 -Dipas=rpi/vc4 -Dcpp_args=-Wno-unaligned-access"
PACKAGECONFIG:append:rpi = " raspberrypi"

View File

@@ -0,0 +1,30 @@
From 6fca76ebd76bf8fce9b111e31bda64015cdc770f Mon Sep 17 00:00:00 2001
From: Johannes Kauffmann <johanneskauffmann@hotmail.com>
Date: Mon, 11 Jul 2022 19:35:57 +0000
Subject: [PATCH] demux: dash: include cstdint, needed for uint64_t
Fixes #27077.
Upstream-Status: Backport
https://github.com/videolan/vlc/commit/6fca76ebd76bf8fce9b111e31bda64015cdc770f
---
modules/demux/dash/mpd/TemplatedUri.hpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/modules/demux/dash/mpd/TemplatedUri.hpp b/modules/demux/dash/mpd/TemplatedUri.hpp
index 1eeb70cbb6..7f7264a9c8 100644
--- a/modules/demux/dash/mpd/TemplatedUri.hpp
+++ b/modules/demux/dash/mpd/TemplatedUri.hpp
@@ -21,6 +21,7 @@
#ifndef TEMPLATEDURI_HPP
#define TEMPLATEDURI_HPP
+#include <cstdint>
#include <string>
namespace dash
--
2.34.1

View File

@@ -0,0 +1,59 @@
From 4caba7560aec54f6d944accd1a8d216e8d9b1d92 Mon Sep 17 00:00:00 2001
From: Vincent Davis Jr <vince@underview.tech>
Date: Tue, 14 Nov 2023 20:17:11 -0500
Subject: [PATCH] po: Fix typos in oc.po for gettext compatibility
Upstream-Status: Inappropriate
Ws moved upstream, but upstream patch couldn't be applied.
https://code.videolan.org/videolan/vlc/-/commit/9d67e20c2edd25251b46d1780a7973b44ac5e5ba
gettext-0.22 became stricter and started to validate format strings. Fix
the typos.
Bug: https://bugs.gentoo.org/909015
Signed-off-by: Vincent Davis Jr <vince@underview.tech>
---
po/oc.po | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/po/oc.po b/po/oc.po
index 86f2ed8a1..ce68c581f 100644
--- a/po/oc.po
+++ b/po/oc.po
@@ -5298,18 +5298,18 @@ msgstr "Comanda+"
#: src/misc/update.c:482
#, c-format
msgid "%.1f GiB"
-msgstr "%.lf Gio"
+msgstr "%.1f Gio"
#: src/misc/update.c:484
#, c-format
msgid "%.1f MiB"
-msgstr "%.lf Mio"
+msgstr "%.1f Mio"
#: src/misc/update.c:486 modules/gui/macosx/VLCPlaylistInfo.m:138
#: modules/gui/macosx/VLCPlaylistInfo.m:140
#, c-format
msgid "%.1f KiB"
-msgstr "%.lf Kio"
+msgstr "%.1f Kio"
#: src/misc/update.c:488
#, c-format
@@ -33071,7 +33071,7 @@ msgstr "Lista del gestionari de mèdias"
#, fuzzy
#~ msgid "%.1f kB"
-#~ msgstr "%.lf Gio"
+#~ msgstr "%.1f Gio"
#, fuzzy
#~ msgid "Speed"
--
2.34.1

View File

@@ -15,6 +15,7 @@ SRC_URI = "\
file://0006-mmal_chain.patch \
file://0007-armv6.patch \
file://0008-configure-Disable-incompatible-function-pointer-type.patch \
file://0009-demux-dash-include-cstdint-needed-for-uint64_t.patch \
file://2001-fix-luaL-checkint.patch \
file://2002-use-vorbisidec.patch \
file://3001-configure.ac-setup-for-OE-usage.patch \
@@ -26,6 +27,7 @@ SRC_URI = "\
${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', 'file://3007-remove-xorg-related-link-libs.patch', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', '', 'file://3008-vo-Makefile.am-exclude-libgl_plugin.patch', d)} \
file://3009-vo-converter_vaapi-Fix-EGL-macro-undeclared.patch \
file://3010-po-Fix-typos-in-oc.po-for-gettext-compatibility.patch \
"
SRCREV = "b276eb0d7bc3213363e97dbb681ef7c927be6c73"

View File

@@ -55,7 +55,7 @@ local_conf_header:
STOPTASKS,${DL_DIR},1G,100K \
STOPTASKS,${SSTATE_DIR},1G,100K \
STOPTASKS,/tmp,100M,100K \
ABORT,${TMPDIR},100M,1K \
ABORT,${DL_DIR},100M,1K \
ABORT,${SSTATE_DIR},100M,1K \
ABORT,/tmp,10M,1K"
HALT,${TMPDIR},100M,1K \
HALT,${DL_DIR},100M,1K \
HALT,${SSTATE_DIR},100M,1K \
HALT,/tmp,10M,1K"

View File

@@ -5,7 +5,16 @@ LIC_FILES_CHKSUM = "file://LICENCE.broadcom;md5=c403841ff2837657b2ed8e5bb474ac8d
inherit deploy nopackages
include recipes-bsp/common/raspberrypi-firmware.inc
RPIFW_DATE ?= "20250430"
SRCREV = "bc7f439c234e19371115e07b57c366df59cc1bc7"
SHORTREV = "${@d.getVar("SRCREV", False).__str__()[:7]}"
RPIFW_SRC_URI ?= "https://api.github.com/repos/raspberrypi/firmware/tarball/${SRCREV};downloadfilename=raspberrypi-firmware-${SHORTREV}.tar.gz"
RPIFW_S ?= "${WORKDIR}/raspberrypi-firmware-${SHORTREV}"
SRC_URI = "${RPIFW_SRC_URI}"
SRC_URI[sha256sum] = "2c027debbef53c86c9ff9197d056d501b95f6ad214ad4db00a8a59b947574eb1"
PV = "${RPIFW_DATE}"
INHIBIT_DEFAULT_DEPS = "1"

View File

@@ -9,7 +9,9 @@ inherit deploy nopackages
CMDLINE_DWC_OTG ?= "dwc_otg.lpm_enable=0"
CMDLINE_ROOT_FSTYPE ?= "rootfstype=ext4"
CMDLINE_ROOTFS ?= "root=/dev/mmcblk0p2 ${CMDLINE_ROOT_FSTYPE} rootwait"
CMDLINE_ROOT_PARTITION ?= "/dev/mmcblk0p2"
CMDLINE_ROOTFS ?= "root=${CMDLINE_ROOT_PARTITION} ${CMDLINE_ROOT_FSTYPE} rootwait"
CMDLINE_SERIAL ?= "${@oe.utils.conditional("ENABLE_UART", "1", "console=serial0,115200", "", d)}"
@@ -44,6 +46,9 @@ CMDLINE_ISOL_CPUS ?= "${@setup_isolcpus(d)}"
# if the MAC addresses are omitted, random values will be used
CMDLINE_RNDIS ?= ""
# That allows to keep the traditional network interface names
CMDLINE_IFNAMES ?= "net.ifnames=0"
CMDLINE = " \
${CMDLINE_ISOL_CPUS} \
${CMDLINE_DWC_OTG} \
@@ -55,6 +60,7 @@ CMDLINE = " \
${CMDLINE_PITFT} \
${CMDLINE_DEBUG} \
${CMDLINE_RNDIS} \
${CMDLINE_IFNAMES} \
"
do_compile() {

View File

@@ -0,0 +1,55 @@
From ce27f7e22b2cd7453a425e08780a338a71301961 Mon Sep 17 00:00:00 2001
From: Leon Anavi <leon.anavi@konsulko.com>
Date: Mon, 20 Nov 2023 15:19:15 +0200
Subject: [PATCH] config.txt: reintroduce start_x
Reintroduce configuration "start_x". Based on the experience with
Yocto/OpenEmbedded layer meta-raspberrypi, it has been observed
that Raspberry Pi 4B 4GB may fail to enable the camera if
"start_x=1" is at the end of the file. Therefore, "start_x=1"
is expected in config.txt template and it has been set to replace
the original occurrence, which is at the middle of the file.
Also update revision and date stamp.
GitHub pull request: https://github.com/Evilpaul/RPi-config/pull/8
Upstream-Status: Submitted
Signed-off-by: Leon Anavi <leon.anavi@konsulko.com>
---
config.txt | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/config.txt b/config.txt
index 1cf7b29..e28ed02 100644
--- a/config.txt
+++ b/config.txt
@@ -1,7 +1,7 @@
################################################################################
## Raspberry Pi Configuration Settings
##
-## Revision 17, 2021/08/15
+## Revision 18, 2023/11/20
##
## Details taken from the eLinux wiki and official Raspberry Pi documentation.
## For up-to-date information please refer to links below.
@@ -760,6 +760,16 @@
## Camera Settings
################################################################################
+## start_x
+## Set to "1" to enable the camera module.
+##
+## Enabling the camera requires gpu_mem option to be specified with a value
+## of at least 128.
+##
+## Default 0
+##
+#start_x=0
+
## disable_camera_led
## Turn off the red camera led when recording video or taking a still
## picture.
--
2.39.2

View File

@@ -7,8 +7,9 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda
COMPATIBLE_MACHINE = "^rpi$"
SRCREV = "648ffc470824c43eb0d16c485f4c24816b32cd6f"
SRCREV = "6ac2d832c6c3b208e2669f50ec1abf2c20cb7ff4"
SRC_URI = "git://github.com/Evilpaul/RPi-config.git;protocol=https;branch=master \
file://0001-config.txt-reintroduce-start_x.patch \
"
S = "${WORKDIR}/git"
@@ -29,6 +30,8 @@ GPIO_IR ?= "18"
GPIO_IR_TX ?= "17"
CAN_OSCILLATOR ?= "16000000"
CAN0_INTERRUPT_PIN ?= "25"
CAN1_INTERRUPT_PIN ?= "24"
ENABLE_UART ??= ""
@@ -178,13 +181,27 @@ do_deploy() {
fi
# UART support
if [ "${ENABLE_UART}" = "1" ] || [ "${ENABLE_UART}" = "0" ] ; then
if [ "${ENABLE_UART}" = "1" ] || [ "${ENABLE_UART}" = "0" ]; then
echo "# Enable UART" >>$CONFIG
echo "enable_uart=${ENABLE_UART}" >>$CONFIG
elif [ -n "${ENABLE_UART}" ]; then
bbfatal "Invalid value for ENABLE_UART [${ENABLE_UART}]. The value for ENABLE_UART can be 0 or 1."
fi
# U-Boot requires "enable_uart=1" for various boards to operate correctly
# cf https://source.denx.de/u-boot/u-boot/-/blob/v2023.04/arch/arm/mach-bcm283x/Kconfig?ref_type=tags#L65
if [ "${RPI_USE_U_BOOT}" = "1" ] && [ "${ENABLE_UART}" != "1" ]; then
case "${UBOOT_MACHINE}" in
rpi_0_w_defconfig|rpi_3_32b_config|rpi_4_32b_config|rpi_arm64_config)
if [ "${ENABLE_UART}" = "0" ]; then
bbfatal "Invalid configuration: RPI_USE_U_BOOT requires to enable the UART in config.txt for ${MACHINE}"
fi
echo "# U-Boot requires UART" >>$CONFIG
echo "enable_uart=1" >>$CONFIG
;;
esac
fi
# Infrared support
if [ "${ENABLE_IR}" = "1" ]; then
echo "# Enable infrared" >>$CONFIG
@@ -253,12 +270,12 @@ do_deploy() {
# ENABLE DUAL CAN
if [ "${ENABLE_DUAL_CAN}" = "1" ]; then
echo "# Enable DUAL CAN" >>$CONFIG
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=25" >>$CONFIG
echo "dtoverlay=mcp2515-can1,oscillator=${CAN_OSCILLATOR},interrupt=24" >>$CONFIG
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=${CAN0_INTERRUPT_PIN}" >>$CONFIG
echo "dtoverlay=mcp2515-can1,oscillator=${CAN_OSCILLATOR},interrupt=${CAN1_INTERRUPT_PIN}" >>$CONFIG
# ENABLE CAN
elif [ "${ENABLE_CAN}" = "1" ]; then
echo "# Enable CAN" >>$CONFIG
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=25" >>$CONFIG
echo "dtoverlay=mcp2515-can0,oscillator=${CAN_OSCILLATOR},interrupt=${CAN0_INTERRUPT_PIN}" >>$CONFIG
fi
@@ -302,6 +319,13 @@ do_deploy() {
echo "# Enable One-Wire Interface" >> $CONFIG
echo "dtoverlay=w1-gpio" >> $CONFIG
fi
# Reduce config.txt file size to avoid corruption and
# to boot successfully Raspberry Pi 5. The issue has
# been reported to related projects:
# https://github.com/raspberrypi/firmware/issues/1848
# https://github.com/Evilpaul/RPi-config/issues/9
sed -i '/^##/d' $CONFIG
}
do_deploy:append:raspberrypi3-64() {

View File

@@ -1,9 +1,9 @@
RPIFW_DATE ?= "20220830"
RPIFW_DATE ?= "20230509~buster"
RPIFW_SRC_URI ?= "https://archive.raspberrypi.com/debian/pool/main/r/raspberrypi-firmware/raspberrypi-firmware_1.${RPIFW_DATE}.orig.tar.xz"
RPIFW_S ?= "${WORKDIR}/raspberrypi-firmware-1.${RPIFW_DATE}"
SRC_URI = "${RPIFW_SRC_URI}"
SRC_URI[sha256sum] = "2b27e4b3c4d2664a0a1d0dd8602bd80ea41dd006eb0ad9c67d7b659c9c8bb4e5"
SRC_URI[sha256sum] = "1d9eb83111826b708f461101766fd2000d45f1c171ad573936d000f623ca8098"
PV = "${RPIFW_DATE}"

View File

@@ -1,36 +0,0 @@
From 55ca589ab9e6e719c1e1f9fc72997d1643d28fe3 Mon Sep 17 00:00:00 2001
From: Allan Xavier <mr.a.xavier@googlemail.com>
Date: Thu, 12 Jan 2023 12:08:55 +0000
Subject: [PATCH] Fix rpi-eeprom-update when using busybox find
The busybox implementation of find does not detect recursive nested
symlinks, this results in it finding multiple instances of of_node
matching -samefile, the result of which then fails the -e path test.
The of_node symlink we're tyring to find should match the path
/sys/bus/nvmem/devices/*/of_node so just limit the find depth to 3 as
there's no point searching deeper than that.
Signed-off-by: Allan Xavier <mr.a.xavier@googlemail.com>
Upstream-Status: Backport [https://github.com/raspberrypi/rpi-eeprom/commit/55ca589ab9e6e719c1e1f9fc72997d1643d28fe3]
---
rpi-eeprom-update | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rpi-eeprom-update b/rpi-eeprom-update
index 79eb3bf..cb25316 100755
--- a/rpi-eeprom-update
+++ b/rpi-eeprom-update
@@ -126,7 +126,7 @@ getBootloaderConfig() {
if [ -f "${blconfig_alias}" ]; then
local blconfig_ofnode_path="/sys/firmware/devicetree/base"$(strings "${blconfig_alias}")""
- local blconfig_ofnode_link=$(find -L /sys/bus/nvmem -samefile "${blconfig_ofnode_path}" 2>/dev/null)
+ local blconfig_ofnode_link=$(find -L /sys/bus/nvmem -maxdepth 3 -samefile "${blconfig_ofnode_path}" 2>/dev/null)
if [ -e "${blconfig_ofnode_link}" ]; then
blconfig_nvmem_path=$(dirname "${blconfig_ofnode_link}")
--
2.34.1

View File

@@ -1,16 +1,15 @@
SUMMARY = "Installation scripts and binaries for the Raspberry Pi 4 EEPROM"
DESCRIPTION = "This repository contains the rpi4 bootloader and scripts \
DESCRIPTION = "This repository contains the rpi4/rpi5 bootloader and scripts \
for updating it in the spi eeprom"
LICENSE = "BSD-3-Clause & Broadcom-RPi"
LIC_FILES_CHKSUM = "file://LICENSE;md5=f546ed4f47e9d4c1fe954ecc9d3ef4f3"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a6c5149578a16272119f3f9c13d6549b"
SRC_URI = " \
git://github.com/raspberrypi/rpi-eeprom.git;protocol=https;branch=master \
file://0001-Fix-rpi-eeprom-update-when-using-busybox-find.patch \
"
SRCREV = "6e79e995bbc75c5fdd5305bd7fe029758cfade2f"
PV = "v2022.12.07-138a1"
SRCREV = "1bd0a1052b2e74d7af04de18d30b5edb12d8a423"
PV = "v2025.03.10-2712"
S = "${WORKDIR}/git"
@@ -35,23 +34,29 @@ do_install() {
install -m 0755 ${S}/rpi-eeprom-digest ${D}${bindir}
# copy firmware files
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/critical
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/stable
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader/beta
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/default
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/latest
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/default
install -d ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/latest
install -m 644 ${S}/firmware/critical/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/critical
install -m 644 ${S}/firmware/stable/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/stable
install -m 644 ${S}/firmware/beta/* ${D}${base_libdir}/firmware/raspberrypi/bootloader/beta
install -m 644 ${S}/firmware-2711/default/* ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/default
install -m 644 ${S}/firmware-2711/latest/* ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/latest
install -m 644 ${S}/firmware-2712/default/* ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/default
install -m 644 ${S}/firmware-2712/latest/* ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/latest
ln -s critical ${D}${base_libdir}/firmware/raspberrypi/bootloader/default
ln -s stable ${D}${base_libdir}/firmware/raspberrypi/bootloader/latest
ln -s default ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/critical
ln -s latest ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/stable
ln -s latest ${D}${base_libdir}/firmware/raspberrypi/bootloader-2711/beta
ln -s default ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/critical
ln -s latest ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/stable
ln -s latest ${D}${base_libdir}/firmware/raspberrypi/bootloader-2712/beta
# copy default config
install -d ${D}${sysconfdir}/default
install -D ${S}/rpi-eeprom-update-default ${D}${sysconfdir}/default/rpi-eeprom-update
}
FILES:${PN} += "${base_libdir}/firmware/raspberrypi/bootloader/*"
FILES:${PN} += "${base_libdir}/firmware/raspberrypi/bootloader-*"
INHIBIT_PACKAGE_STRIP = "1"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
@@ -61,4 +66,4 @@ INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
# need to disable arch check for it otherwise it cannot packed.
QAPATHTEST[arch] = ""
COMPATIBLE_MACHINE = "raspberrypi4|raspberrypi4-64"
COMPATIBLE_MACHINE = "raspberrypi4|raspberrypi4-64|raspberrypi5"

View File

@@ -1,4 +1,4 @@
fdt addr ${fdt_addr} && fdt get value bootargs /chosen bootargs
fatload mmc 0:1 ${kernel_addr_r} @@KERNEL_IMAGETYPE@@
if test ! -e mmc 0:1 uboot.env; then saveenv; fi;
fatload @@BOOT_MEDIA@@ 0:1 ${kernel_addr_r} @@KERNEL_IMAGETYPE@@
if test ! -e @@BOOT_MEDIA@@ 0:1 uboot.env; then saveenv; fi;
@@KERNEL_BOOTCMD@@ ${kernel_addr_r} - ${fdt_addr}

View File

@@ -9,9 +9,12 @@ INHIBIT_DEFAULT_DEPS = "1"
SRC_URI = "file://boot.cmd.in"
BOOT_MEDIA ?= "mmc"
do_compile() {
sed -e 's/@@KERNEL_IMAGETYPE@@/${KERNEL_IMAGETYPE}/' \
-e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' \
-e 's/@@BOOT_MEDIA@@/${BOOT_MEDIA}/' \
"${WORKDIR}/boot.cmd.in" > "${WORKDIR}/boot.cmd"
mkimage -A ${UBOOT_ARCH} -T script -C none -n "Boot script" -d "${WORKDIR}/boot.cmd" boot.scr
}

View File

@@ -29,6 +29,8 @@ Signed-off-by: Mauro Salvini <m.salvini@koansoftware.com>
Cc: C?dric Schieli <cschieli@gmail.com>
Cc: Matthias Brugger <mbrugger@suse.com>
---
Upstream-Status: Pending
board/raspberrypi/rpi/rpi.c | 3 ---
1 file changed, 3 deletions(-)

View File

@@ -0,0 +1 @@
CONFIG_SYS_BOOTM_LEN=0x1000000

View File

@@ -5,6 +5,7 @@ SRC_URI:append:rpi = " \
"
SRC_URI:append:rpi = " file://0001-rpi-always-set-fdt_addr-with-firmware-provided-FDT-address.patch"
SRC_URI:append:raspberrypi4 = " file://maxsize.cfg"
DEPENDS:append:rpi = " u-boot-default-script"

View File

@@ -4,6 +4,8 @@ Date: Tue, 16 Feb 2016 16:40:46 +0000
Subject: [PATCH] bcm43xx: Add bcm43xx-3wire variant
---
Upstream-Status: Pending
tools/hciattach.c | 3 +++
1 file changed, 3 insertions(+)

View File

@@ -5,6 +5,8 @@ Subject: [PATCH] bcm43xx: The UART speed must be reset after the firmware
download
---
Upstream-Status: Pending
tools/hciattach_bcm43xx.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

View File

@@ -4,6 +4,8 @@ Date: Wed, 20 Jan 2016 16:00:37 +0000
Subject: [PATCH] Increase firmware load timeout to 30s
---
Upstream-Status: Pending
tools/hciattach.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

View File

@@ -11,6 +11,8 @@ Subject: [PATCH] Move the hciattach firmware into /lib/firmware
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
Upstream-Status: Pending
tools/hciattach.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

View File

@@ -3,16 +3,17 @@ LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = " \
file://99-com.rules \
git://github.com/RPi-Distro/raspberrypi-sys-mods;protocol=https;branch=master \
file://can.rules \
"
SRCREV = "5ce3ef2b7f377c23fea440ca9df0e30f3f8447cf"
S = "${WORKDIR}"
S = "${WORKDIR}/git"
INHIBIT_DEFAULT_DEPS = "1"
do_install () {
install -d ${D}${sysconfdir}/udev/rules.d
install -m 0644 ${WORKDIR}/99-com.rules ${D}${sysconfdir}/udev/rules.d/
install -m 0644 ${S}/etc.armhf/udev/rules.d/99-com.rules ${D}${sysconfdir}/udev/rules.d/
install -m 0644 ${WORKDIR}/can.rules ${D}${sysconfdir}/udev/rules.d/
}

View File

@@ -1,21 +0,0 @@
KERNEL=="ttyAMA[01]", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if cmp -s $$ALIASES/uart0 $$ALIASES/serial0; then \
echo 0;\
elif cmp -s $$ALIASES/uart0 $$ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi\
'", SYMLINK+="serial%c"
KERNEL=="ttyS0", PROGRAM="/bin/sh -c '\
ALIASES=/proc/device-tree/aliases; \
if cmp -s $$ALIASES/uart1 $$ALIASES/serial0; then \
echo 0; \
elif cmp -s $$ALIASES/uart1 $$ALIASES/serial1; then \
echo 1; \
else \
exit 1; \
fi \
'", SYMLINK+="serial%c"

View File

@@ -12,8 +12,7 @@ COMPATIBLE_MACHINE = "^rpi$"
SRC_URI = "http://www.airspayce.com/mikem/bcm2835/bcm2835-${PV}.tar.gz"
SRC_URI[md5sum] = "9bd2d39bf4b3a9e81dce799ca51c826a"
SRC_URI[sha256sum] = "564920d205977d7e2846e434947708455d468d3a952feca9faef643abd03a227"
SRC_URI[sha256sum] = "e67a986462618988a5a86752e36e3ebdd7c5cae66940ff7330aea243b2762525"
inherit autotools

View File

@@ -0,0 +1,53 @@
SUMMARY = "A collection of scripts and simple applications"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENCE;md5=4c01239e5c3a3d133858dedacdbca63c"
RCONFLICTS:${PN} = "userland"
DEPENDS:append = " dtc"
PACKAGES =+ " ${PN}-raspinfo"
PACKAGES =+ " ${PN}-ovmerge"
RDEPENDS:${PN}-raspinfo += " bash"
RDEPENDS:${PN}-ovmerge += " perl"
PV = "1.0+git"
SRC_URI = "git://github.com/raspberrypi/utils;protocol=https;branch=master"
SRCREV = "b9c63214c535d7df2b0fa6743b7b3e508363c25a"
FILES:${PN}:append = " \
${datadir}/bash-completion/completions/pinctrl \
${datadir}/bash-completion/completions/vcgencmd \
"
FILES:${PN}-raspinfo += "${bindir}/raspinfo"
FILES:${PN}-ovmerge += "${bindir}/ovmerge"
S = "${WORKDIR}/git"
OECMAKE_TARGET_COMPILE = "\
dtmerge/all \
eeptools/all \
otpset/all \
overlaycheck/all \
ovmerge/all \
pinctrl/all \
raspinfo/all \
vcgencmd/all \
vclog/all \
vcmailbox/all \
"
OECMAKE_TARGET_INSTALL = "\
dtmerge/install \
eeptools/install \
otpset/install \
overlaycheck/install \
ovmerge/install \
pinctrl/install \
raspinfo/install \
vcgencmd/install \
vclog/install \
vcmailbox/install \
"
inherit cmake

View File

@@ -0,0 +1,29 @@
From: Markus Volk <f_l_k@t-online.de>
Date: Sun, 19 Mai 2025 15:34:46 +0100
Subject: [PATCH] dont build clover frontend
The clover frontend is deprecated and is always built with opencl, even if
using rusticl. Additionally it adds a reproducibility issue.
Upstream-Status: Inappropriate [oe-specific]
Signed-off-by: Markus Volk <f_l_k@t-online.de>
--- a/src/gallium/meson.build 2025-05-07 18:35:10.000000000 +0200
+++ b/src/gallium/meson.build 2025-05-18 17:05:23.677694272 +0200
@@ -195,15 +195,11 @@
else
driver_d3d12 = declare_dependency()
endif
-if with_gallium_clover or with_tests
+if with_tests
# At the moment, clover and gallium/tests are the only two consumers
# for pipe-loader
subdir('targets/pipe-loader')
endif
-if with_gallium_clover
- subdir('frontends/clover')
- subdir('targets/opencl')
-endif
if with_gallium_rusticl
subdir('frontends/rusticl')
subdir('targets/rusticl')

View File

@@ -0,0 +1,39 @@
From 531c6696d42953cd642dea7bf70153285c7949ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kai=20Wasserb=C3=A4ch?= <kai@dev.carbon-project.org>
Date: Tue, 6 May 2025 14:36:57 +0200
Subject: [PATCH] fix(FTBFS): clc: switch to new non-owned `TargetOptions` for
LLVM 21
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Upstream hid the `TargetOptions` in commit 985410f87f2d19910a8d327527fd30062b042b63
Use the new `getTargetOpts()` to obtain the `TargetOptions` for
`setTarget()`.
Upstream-Status: Backport [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34835]
Signed-off-by: Kai Wasserbäch <kai@dev.carbon-project.org>
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/13079
Reference: https://github.com/llvm/llvm-project/commit/985410f87f2d19910a8d327527fd30062b042b63
Reviewed-by: Karol Herbst <kherbst@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34835>
---
src/compiler/clc/clc_helpers.cpp | 4 ++++
1 file changed, 4 insertions(+)
--- a/src/compiler/clc/clc_helpers.cpp
+++ b/src/compiler/clc/clc_helpers.cpp
@@ -874,7 +874,11 @@ clc_compile_to_llvm_module(LLVMContext &
diag_opts));
c->setTarget(clang::TargetInfo::CreateTargetInfo(
+#if LLVM_VERSION_MAJOR >= 21
+ c->getDiagnostics(), c->getInvocation().getTargetOpts()));
+#else
c->getDiagnostics(), c->getInvocation().TargetOpts));
+#endif
c->getFrontendOpts().ProgramAction = clang::frontend::EmitLLVMOnly;

View File

@@ -0,0 +1,110 @@
From 027ac36756cc75eea9ed4fee135a351af30b35fd Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Tue, 16 Jul 2024 12:32:47 +0300
Subject: [PATCH] freedreno: don't encode build path into binaries
Encoding build-specific path into installed binaries is generally
frowned upon. It harms the reproducibility of the build and e.g.
OpenEmbedded now considers that to be an error.
Instead of hardcoding rnn_src_path into the RNN_DEF_PATH define specify
it manually when running the tests.
Upstream-Status: Submitted [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30206]
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
src/freedreno/afuc/meson.build | 4 ++++
src/freedreno/decode/meson.build | 4 +++-
src/freedreno/meson.build | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/freedreno/afuc/meson.build b/src/freedreno/afuc/meson.build
index bb7cebf5a748..351cc31ef2de 100644
--- a/src/freedreno/afuc/meson.build
+++ b/src/freedreno/afuc/meson.build
@@ -56,10 +56,12 @@ if with_tests
asm_fw = custom_target('afuc_test.fw',
output: 'afuc_test.fw',
command: [asm, files('../.gitlab-ci/traces/afuc_test.asm'), '@OUTPUT@'],
+ env: {'RNN_PATH': rnn_src_path},
)
asm_fw_a7xx = custom_target('afuc_test_a7xx.fw',
output: 'afuc_test_a7xx.fw',
command: [asm, files('../.gitlab-ci/traces/afuc_test_a7xx.asm'), '@OUTPUT@'],
+ env: {'RNN_PATH': rnn_src_path},
)
test('afuc-asm',
diff,
@@ -120,11 +122,13 @@ if cc.sizeof('size_t') > 4
disasm_fw = custom_target('afuc_test.asm',
output: 'afuc_test.asm',
command: [disasm, '-u', files('../.gitlab-ci/reference/afuc_test.fw')],
+ env: {'RNN_PATH': rnn_src_path},
capture: true
)
disasm_fw_a7xx = custom_target('afuc_test_a7xx.asm',
output: 'afuc_test_a7xx.asm',
command: [disasm, '-u', files('../.gitlab-ci/reference/afuc_test_a7xx.fw')],
+ env: {'RNN_PATH': rnn_src_path},
capture: true
)
test('afuc-disasm',
diff --git a/src/freedreno/decode/meson.build b/src/freedreno/decode/meson.build
index 469eeb4eb597..dfa1c12d0d9f 100644
--- a/src/freedreno/decode/meson.build
+++ b/src/freedreno/decode/meson.build
@@ -194,6 +194,7 @@ if dep_lua.found() and dep_libarchive.found()
log = custom_target(name + '.log',
output: name + '.log',
command: [cffdump, '--unit-test', args, files('../.gitlab-ci/traces/' + name + '.rd.gz')],
+ env: {'RNN_PATH': rnn_src_path},
capture: true,
)
test('cffdump-' + name,
@@ -247,7 +248,8 @@ if with_tests
output: name + '.log',
command: [crashdec, args, files('../.gitlab-ci/traces/' + name + '.devcore')],
capture: true,
- env: {'GALLIUM_DUMP_CPU': 'false'},
+ env: {'GALLIUM_DUMP_CPU': 'false',
+ 'RNN_PATH': rnn_src_path},
)
test('crashdec-' + name,
diff --git a/src/freedreno/meson.build b/src/freedreno/meson.build
index 98e49b8fcf0e..145e72597eb9 100644
--- a/src/freedreno/meson.build
+++ b/src/freedreno/meson.build
@@ -6,7 +6,7 @@ inc_freedreno_rnn = include_directories('rnn')
rnn_src_path = dir_source_root + '/src/freedreno/registers'
rnn_install_path = get_option('datadir') + '/freedreno/registers'
-rnn_path = rnn_src_path + ':' + get_option('prefix') + '/' + rnn_install_path
+rnn_path = get_option('prefix') + '/' + rnn_install_path
dep_libarchive = dependency('libarchive', allow_fallback: true, required: false)
dep_libxml2 = dependency('libxml-2.0', allow_fallback: true, required: false)
diff --git a/src/freedreno/registers/gen_header.py b/src/freedreno/registers/gen_header.py
--- a/src/freedreno/registers/gen_header.py
+++ b/src/freedreno/registers/gen_header.py
@@ -885,13 +885,14 @@ The rules-ng-ng source files this header
""")
maxlen = 0
for filepath in p.xml_files:
- maxlen = max(maxlen, len(filepath))
+ maxlen = max(maxlen, len(os.path.basename(filepath)))
for filepath in p.xml_files:
- pad = " " * (maxlen - len(filepath))
+ filename = os.path.basename(filepath)
+ pad = " " * (maxlen - len(filename))
filesize = str(os.path.getsize(filepath))
filesize = " " * (7 - len(filesize)) + filesize
filetime = time.ctime(os.path.getmtime(filepath))
- print("- " + filepath + pad + " (" + filesize + " bytes, from " + filetime + ")")
+ print("- " + filename + pad + " (" + filesize + " bytes, from " + filetime + ")")
if p.copyright_year:
current_year = str(datetime.date.today().year)
print()
---
2.39.2

View File

@@ -0,0 +1,24 @@
From 02cc21800fe29f566add525e63f619c0536d6e7b Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 13 Jan 2020 15:23:47 -0800
Subject: [PATCH] meson misdetects 64bit atomics on mips/clang
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
src/util/u_atomic.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/u_atomic.c b/src/util/u_atomic.c
index 5a5eab4..e499516 100644
--- a/src/util/u_atomic.c
+++ b/src/util/u_atomic.c
@@ -21,7 +21,7 @@
* IN THE SOFTWARE.
*/
-#if defined(MISSING_64BIT_ATOMICS) && defined(HAVE_PTHREAD)
+#if !defined(__clang__) && defined(MISSING_64BIT_ATOMICS) && defined(HAVE_PTHREAD)
#include <stdint.h>
#include <pthread.h>

View File

@@ -0,0 +1,383 @@
SUMMARY = "A free implementation of the OpenGL API"
DESCRIPTION = "Mesa is an open-source implementation of the OpenGL specification - \
a system for rendering interactive 3D graphics. \
A variety of device drivers allows Mesa to be used in many different environments \
ranging from software emulation to complete hardware acceleration for modern GPUs. \
Mesa is used as part of the overall Direct Rendering Infrastructure and X.org \
environment."
HOMEPAGE = "http://mesa3d.org"
BUGTRACKER = "https://bugs.freedesktop.org"
SECTION = "x11"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://docs/license.rst;md5=ffe678546d4337b732cfd12262e6af11"
PE = "2"
SRC_URI = "https://archive.mesa3d.org/mesa-${PV}.tar.xz \
file://0001-meson-misdetects-64bit-atomics-on-mips-clang.patch \
file://0001-freedreno-don-t-encode-build-path-into-binaries.patch \
file://0001-dont-build-clover-frontend.patch \
file://0001-fix-FTBFS-clc-switch-to-new-non-owned-TargetOptions-.patch \
"
SRC_URI[sha256sum] = "9f2b69eb39d2d8717d30a9868fdda3e0c0d3708ba32778bbac8ddb044538ce84"
PV = "25.1.6"
UPSTREAM_CHECK_GITTAGREGEX = "mesa-(?P<pver>\d+(\.\d+)+)"
#because we cannot rely on the fact that all apps will use pkgconfig,
#make eglplatform.h independent of MESA_EGL_NO_X11_HEADER
do_install:append() {
# sed can't find EGL/eglplatform.h as it doesn't get installed when glvnd enabled.
# So, check if EGL/eglplatform.h exists before running sed.
if ${@bb.utils.contains('PACKAGECONFIG', 'egl', 'true', 'false', d)} && [ -f ${D}${includedir}/EGL/eglplatform.h ]; then
sed -i -e 's/^#elif defined(__unix__) && defined(EGL_NO_X11)$/#elif defined(__unix__) \&\& defined(EGL_NO_X11) || ${@bb.utils.contains('PACKAGECONFIG', 'x11', '0', '1', d)}/' ${D}${includedir}/EGL/eglplatform.h
fi
# These are ICDs, apps are not supposed to link against them
if ${@bb.utils.contains('PACKAGECONFIG', 'glvnd', 'true', 'false', d)} ; then
rm -f ${D}${libdir}/libEGL_mesa.so ${D}${libdir}/libGLX_mesa.so
fi
}
DEPENDS = "expat makedepend-native flex-native bison-native libxml2-native zlib chrpath-replacement-native python3-mako-native gettext-native python3-pyyaml-native"
EXTRANATIVEPATH += "chrpath-native"
GLPROVIDES = " \
${@bb.utils.contains('PACKAGECONFIG', 'opengl', 'virtual/libgl', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'gles', 'virtual/libgles1 virtual/libgles2 virtual/libgles3', '', d)} \
${@bb.utils.contains('PACKAGECONFIG', 'egl', 'virtual/egl', '', d)} \
"
PROVIDES = " \
${@bb.utils.contains('PACKAGECONFIG', 'glvnd', '', d.getVar('GLPROVIDES'), d)} \
${@bb.utils.contains('PACKAGECONFIG', 'gbm', 'virtual/libgbm', '', d)} \
virtual/mesa \
"
inherit meson pkgconfig python3native gettext features_check rust
BBCLASSEXTEND = "native nativesdk"
ANY_OF_DISTRO_FEATURES = "opengl vulkan"
PLATFORMS ??= "${@bb.utils.filter('PACKAGECONFIG', 'x11 wayland', d)}"
# set the MESA_BUILD_TYPE to either 'release' (default) or 'debug'
# by default the upstream mesa sources build a debug release
# here we assume the user will want a release build by default
MESA_BUILD_TYPE ?= "release"
def check_buildtype(d):
_buildtype = d.getVar('MESA_BUILD_TYPE')
if _buildtype not in ['release', 'debug']:
bb.fatal("unknown build type (%s), please set MESA_BUILD_TYPE to either 'release' or 'debug'" % _buildtype)
if _buildtype == 'debug':
return 'debugoptimized'
return 'plain'
MESON_BUILDTYPE = "${@check_buildtype(d)}"
EXTRA_OEMESON = " \
-Dglx-read-only-text=true \
-Dplatforms='${@",".join("${PLATFORMS}".split())}' \
"
def strip_comma(s):
return s.strip(',')
PACKAGECONFIG = " \
gallium \
video-codecs \
${@bb.utils.filter('DISTRO_FEATURES', 'x11 vulkan wayland glvnd', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'opengl egl gles gbm virgl', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'vulkan', 'zink', '', d)} \
"
# skip all Rust dependencies if we are not building OpenCL"
INHIBIT_DEFAULT_RUST_DEPS = "${@bb.utils.contains('PACKAGECONFIG', 'opencl', '', '1', d)}"
PACKAGECONFIG:append:x86 = " libclc gallium-llvm intel amd nouveau svga"
PACKAGECONFIG:append:x86-64 = " libclc gallium-llvm intel amd nouveau svga"
PACKAGECONFIG:append:i686 = " libclc gallium-llvm intel amd nouveau svga"
PACKAGECONFIG:append:class-native = " libclc gallium-llvm amd nouveau svga"
# "gbm" requires "opengl"
PACKAGECONFIG[gbm] = "-Dgbm=enabled,-Dgbm=disabled"
X11_DEPS = "xorgproto virtual/libx11 libxext libxxf86vm libxdamage libxfixes xrandr xorgproto libxshmfence"
# "x11" requires "opengl"
PACKAGECONFIG[x11] = ",-Dglx=disabled,${X11_DEPS}"
PACKAGECONFIG[wayland] = ",,wayland-native wayland libdrm wayland-protocols"
VULKAN_DRIVERS_AMD = "${@bb.utils.contains('PACKAGECONFIG', 'amd', ',amd', '', d)}"
VULKAN_DRIVERS_ASAHI = "${@bb.utils.contains('PACKAGECONFIG', 'asahi libclc opencl', ',asahi', '', d)}"
VULKAN_DRIVERS_INTEL = "${@bb.utils.contains('PACKAGECONFIG', 'intel libclc', ',intel', '', d)}"
VULKAN_DRIVERS_SWRAST = ",swrast"
# Crashes on x32
VULKAN_DRIVERS_SWRAST:x86-x32 = ""
VULKAN_DRIVERS_LLVM = "${VULKAN_DRIVERS_SWRAST}${VULKAN_DRIVERS_AMD}${VULKAN_DRIVERS_ASAHI}${VULKAN_DRIVERS_INTEL}"
VULKAN_DRIVERS = ""
VULKAN_DRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
VULKAN_DRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'broadcom', ',broadcom', '', d)}"
VULKAN_DRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', '${VULKAN_DRIVERS_LLVM}', '', d)}"
VULKAN_DRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'imagination', ',imagination-experimental', '', d)}"
VULKAN_DRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'panfrost', ',panfrost', '', d)}"
PACKAGECONFIG[vulkan] = "-Dvulkan-drivers=${@strip_comma('${VULKAN_DRIVERS}')}, -Dvulkan-drivers='',glslang-native vulkan-loader vulkan-headers"
# mesa development and testing tools support, per driver
TOOLS = ""
TOOLS_DEPS = ""
TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'etnaviv', ',etnaviv', '', d)}"
TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'lima', ',lima', '', d)}"
TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'panfrost', ',panfrost', '', d)}"
TOOLS:append = "${@bb.utils.contains('PACKAGECONFIG', 'imagination', ',imagination', '', d)}"
# dependencies for tools.
TOOLS_DEPS:append = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ' ncurses libxml2 ', '', d)}"
# the fdperf tool requires libconfig (a part of meta-oe) so it needs special
# treatment in addition to the usual 'freedreno tools'.
PACKAGECONFIG[freedreno-fdperf] = ",,libconfig"
PACKAGECONFIG[tools] = "-Dtools=${@strip_comma('${TOOLS}')}, -Dtools='', ${TOOLS_DEPS}"
PACKAGECONFIG[opengl] = "-Dopengl=true, -Dopengl=false"
PACKAGECONFIG[glvnd] = "-Dglvnd=enabled, -Dglvnd=disabled, libglvnd"
# "gles" requires "opengl"
PACKAGECONFIG[gles] = "-Dgles1=enabled -Dgles2=enabled, -Dgles1=disabled -Dgles2=disabled"
# "egl" requires "opengl"
PACKAGECONFIG[egl] = "-Degl=enabled, -Degl=disabled"
# "opencl" also requires libclc and gallium-llvm to be present in PKGCONFIG!
# Be sure to enable them both for the target and for the native build.
PACKAGECONFIG[opencl] = "-Dgallium-rusticl=true, -Dgallium-rusticl=false, bindgen-cli-native"
PACKAGECONFIG[broadcom] = ""
PACKAGECONFIG[etnaviv] = ",,python3-pycparser-native"
PACKAGECONFIG[freedreno] = ""
PACKAGECONFIG[vc4] = ""
PACKAGECONFIG[v3d] = ""
PACKAGECONFIG[zink] = ""
GALLIUMDRIVERS = "softpipe"
# gallium swrast was found to crash Xorg on startup in x32 qemu
GALLIUMDRIVERS:x86-x32 = ""
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'etnaviv', ',etnaviv', '', d)}"
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'freedreno', ',freedreno', '', d)}"
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'vc4', ',vc4', '', d)}"
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'v3d', ',v3d', '', d)}"
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'zink', ',zink', '', d)}"
GALLIUMDRIVERS_ASAHI = "${@bb.utils.contains('PACKAGECONFIG', 'asahi libclc opencl', ',asahi', '', d)}"
GALLIUMDRIVERS_AMD = "${@bb.utils.contains('PACKAGECONFIG', 'amd', ',r300', '', d)}"
GALLIUMDRIVERS_IRIS = "${@bb.utils.contains('PACKAGECONFIG', 'intel libclc', ',iris', '', d)}"
GALLIUMDRIVERS_NOUVEAU = "${@bb.utils.contains('PACKAGECONFIG', 'nouveau', ',nouveau', '', d)}"
GALLIUMDRIVERS_RADEONSI = "${@bb.utils.contains('PACKAGECONFIG', 'amd', ',radeonsi', '', d)}"
GALLIUMDRIVERS_LLVMPIPE = ",llvmpipe"
# llvmpipe crashes on x32
GALLIUMDRIVERS_LLVMPIPE:x86-x32 = ""
GALLIUMDRIVERS_SVGA = "${@bb.utils.contains('PACKAGECONFIG', 'svga', ',svga', '', d)}"
GALLIUMDRIVERS_LLVM = "${GALLIUMDRIVERS_LLVMPIPE}${GALLIUMDRIVERS_AMD}${GALLIUMDRIVERS_ASAHI}${GALLIUMDRIVERS_IRIS}${GALLIUMDRIVERS_NOUVEAU}${GALLIUMDRIVERS_RADEONSI}${GALLIUMDRIVERS_SVGA}"
PACKAGECONFIG[amd] = ""
PACKAGECONFIG[nouveau] = ""
PACKAGECONFIG[svga] = ""
PACKAGECONFIG[virgl] = ""
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'gallium-llvm', '${GALLIUMDRIVERS_LLVM}', '', d)}"
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'amd', ',r600', '', d)}"
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'virgl', ',virgl', '', d)}"
MESA_CLC = "system"
MESA_CLC:class-native = "enabled"
INSTALL_MESA_CLC = "false"
INSTALL_MESA_CLC:class-native = "true"
MESA_NATIVE = "mesa-native"
MESA_NATIVE:class-native = ""
PACKAGECONFIG[gallium] = "-Dgallium-drivers=${@strip_comma('${GALLIUMDRIVERS}')}, -Dgallium-drivers='', libdrm"
PACKAGECONFIG[gallium-llvm] = "-Dllvm=enabled -Dshared-llvm=enabled, -Dllvm=disabled, llvm llvm-native elfutils"
PACKAGECONFIG[libclc] = "-Dmesa-clc=${MESA_CLC} -Dinstall-mesa-clc=${INSTALL_MESA_CLC} -Dmesa-clc-bundle-headers=enabled,,libclc spirv-tools spirv-llvm-translator ${MESA_NATIVE}"
PACKAGECONFIG[va] = "-Dgallium-va=enabled,-Dgallium-va=disabled,libva-initial"
PACKAGECONFIG[vdpau] = "-Dgallium-vdpau=enabled,-Dgallium-vdpau=disabled,libvdpau"
PACKAGECONFIG[imagination] = "-Dimagination-srv=true,-Dimagination-srv=false"
PACKAGECONFIG[asahi] = ""
PACKAGECONFIG[intel] = ""
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'intel', ',i915,crocus', '', d)}"
PACKAGECONFIG[lima] = ""
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'lima', ',lima', '', d)}"
PACKAGECONFIG[panfrost] = ""
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'panfrost', ',panfrost', '', d)}"
PACKAGECONFIG[tegra] = ""
GALLIUMDRIVERS:append = "${@bb.utils.contains('PACKAGECONFIG', 'tegra', ',tegra,nouveau', '', d)}"
PACKAGECONFIG[vulkan-beta] = "-Dvulkan-beta=true,-Dvulkan-beta=false"
PACKAGECONFIG[perfetto] = "-Dperfetto=true,-Dperfetto=false,libperfetto"
PACKAGECONFIG[unwind] = "-Dlibunwind=enabled,-Dlibunwind=disabled,libunwind"
PACKAGECONFIG[lmsensors] = "-Dlmsensors=enabled,-Dlmsensors=disabled,lmsensors"
VIDEO_CODECS ?= "${@bb.utils.contains('LICENSE_FLAGS_ACCEPTED', 'commercial', 'all', 'all_free', d)}"
PACKAGECONFIG[video-codecs] = "-Dvideo-codecs=${VIDEO_CODECS}, -Dvideo-codecs=''"
PACKAGECONFIG[teflon] = "-Dteflon=true, -Dteflon=false"
# llvmpipe is slow if compiled with -fomit-frame-pointer (e.g. -O2)
FULL_OPTIMIZATION:append = " -fno-omit-frame-pointer"
CFLAGS:append:armv5 = " -DMISSING_64BIT_ATOMICS"
CFLAGS:append:armv6 = " -DMISSING_64BIT_ATOMICS"
# Remove the mesa dependency on mesa-dev, as mesa is empty
DEV_PKG_DEPENDENCY = ""
# GLES2 and GLES3 implementations are packaged in a single library in libgles2-mesa.
# Add a dependency so the GLES3 dev package is associated with its implementation.
RPROVIDES:libgles2-mesa += "libgles3-mesa"
RPROVIDES:libgles2-mesa-dev += "libgles3-mesa-dev"
RDEPENDS:libopencl-mesa += "${@bb.utils.contains('PACKAGECONFIG', 'opencl', 'libclc spirv-tools spirv-llvm-translator', '', d)}"
PACKAGES =+ "libegl-mesa libegl-mesa-dev \
libgallium \
libgl-mesa libgl-mesa-dev \
libglx-mesa libglx-mesa-dev \
libglapi libglapi-dev \
libgbm libgbm-dev \
libgles1-mesa libgles1-mesa-dev \
libgles2-mesa libgles2-mesa-dev \
libopencl-mesa \
libteflon \
mesa-megadriver mesa-vulkan-drivers \
mesa-vdpau-drivers mesa-tools \
"
do_install:append () {
# libwayland-egl has been moved to wayland 1.15+
rm -f ${D}${libdir}/libwayland-egl*
rm -f ${D}${libdir}/pkgconfig/wayland-egl.pc
}
# For the packages that make up the OpenGL interfaces, inject variables so that
# they don't get Debian-renamed (which would remove the -mesa suffix), and
# RPROVIDEs/RCONFLICTs on the generic libgl name.
python __anonymous() {
pkgconfig = (d.getVar('PACKAGECONFIG') or "").split()
mlprefix = d.getVar("MLPREFIX")
suffix = ""
if "-native" in d.getVar("PN"):
suffix = "-native"
for p in ("libegl", "libgl", "libglx", "libgles1", "libgles2", "libgles3", "libopencl"):
fullp = mlprefix + p + "-mesa" + suffix
d.appendVar("RRECOMMENDS:" + fullp, " ${MLPREFIX}mesa-megadriver" + suffix)
d.setVar("DEBIAN_NOAUTONAME:%slibopencl-mesa%s" % (mlprefix, suffix), "1")
if 'glvnd' in pkgconfig:
for p in ("libegl", "libglx"):
fullp = mlprefix + p + "-mesa" + suffix
d.appendVar("RPROVIDES:" + fullp, ' virtual-%s-icd' % p)
else:
for p in (("egl", "libegl", "libegl1"),
("opengl", "libgl", "libgl1"),
("gles", "libgles1", "libglesv1-cm1"),
("gles", "libgles2", "libglesv2-2", "libgles3")):
if not p[0] in pkgconfig:
continue
fullp = mlprefix + p[1] + "-mesa" + suffix
pkgs = " " + " ".join(mlprefix + x + suffix for x in p[1:])
d.setVar("DEBIAN_NOAUTONAME:" + fullp, "1")
d.appendVar("RREPLACES:" + fullp, pkgs)
d.appendVar("RPROVIDES:" + fullp, pkgs)
d.appendVar("RCONFLICTS:" + fullp, pkgs)
# For -dev, the first element is both the Debian and original name
fullp = mlprefix + p[1] + "-mesa-dev" + suffix
pkgs = " " + mlprefix + p[1] + "-dev" + suffix
d.setVar("DEBIAN_NOAUTONAME:" + fullp, "1")
d.appendVar("RREPLACES:" + fullp, pkgs)
d.appendVar("RPROVIDES:" + fullp, pkgs)
d.appendVar("RCONFLICTS:" + fullp, pkgs)
}
python mesa_populate_packages() {
pkgs = ['mesa', 'mesa-dev', 'mesa-dbg']
for pkg in pkgs:
d.setVar("RPROVIDES:%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
d.setVar("RCONFLICTS:%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
d.setVar("RREPLACES:%s" % pkg, pkg.replace("mesa", "mesa-dri", 1))
import re
dri_drivers_root = oe.path.join(d.getVar('PKGD'), d.getVar('libdir'), "dri")
if os.path.isdir(dri_drivers_root):
dri_pkgs = sorted(os.listdir(dri_drivers_root))
lib_name = d.expand("${MLPREFIX}mesa-megadriver")
for p in dri_pkgs:
m = re.match(r'^(.*)_dri\.so$', p)
if m:
pkg_name = " ${MLPREFIX}mesa-driver-%s" % legitimize_package_name(m.group(1))
d.appendVar("RPROVIDES:%s" % lib_name, pkg_name)
d.appendVar("RCONFLICTS:%s" % lib_name, pkg_name)
d.appendVar("RREPLACES:%s" % lib_name, pkg_name)
}
PACKAGESPLITFUNCS =+ "mesa_populate_packages"
PACKAGES_DYNAMIC += "^mesa-driver-.*"
PACKAGES_DYNAMIC:class-native = "^mesa-driver-.*-native"
FILES:mesa-megadriver = "${libdir}/dri/* ${datadir}/drirc.d"
FILES:mesa-vulkan-drivers = "${libdir}/libvulkan_*.so ${libdir}/libpowervr_rogue.so ${datadir}/vulkan"
FILES:${PN}-vdpau-drivers = "${libdir}/vdpau/*.so.*"
FILES:libegl-mesa = "${libdir}/libEGL*.so.* ${datadir}/glvnd/egl_vendor.d"
FILES:libgbm = "${libdir}/libgbm.so.* ${libdir}/gbm/*_gbm.so"
FILES:libgallium = "${libdir}/libgallium-*.so"
FILES:libgles1-mesa = "${libdir}/libGLESv1*.so.*"
FILES:libgles2-mesa = "${libdir}/libGLESv2.so.*"
FILES:libgl-mesa = "${libdir}/libGL.so.*"
FILES:libglx-mesa = "${libdir}/libGLX*.so.*"
FILES:libopencl-mesa = "${libdir}/lib*OpenCL.so* ${sysconfdir}/OpenCL/vendors/*.icd"
FILES:libglapi = "${libdir}/libglapi.so.*"
FILES:${PN}-dev = "${libdir}/pkgconfig/dri.pc ${includedir}/GL/internal/dri_interface.h ${includedir}/vulkan ${libdir}/vdpau/*.so"
FILES:libegl-mesa-dev = "${libdir}/libEGL*.* ${includedir}/EGL ${includedir}/KHR ${libdir}/pkgconfig/egl.pc"
FILES:libgbm-dev = "${libdir}/libgbm.* ${libdir}/pkgconfig/gbm.pc ${includedir}/gbm.h ${includedir}/gbm_backend_abi.h"
FILES:libgl-mesa-dev = "${libdir}/libGL.* ${includedir}/GL/*.h ${libdir}/pkgconfig/gl.pc"
FILES:libglapi-dev = "${libdir}/libglapi.*"
FILES:libgles1-mesa-dev = "${libdir}/libGLESv1*.* ${includedir}/GLES ${libdir}/pkgconfig/glesv1*.pc"
FILES:libgles2-mesa-dev = "${libdir}/libGLESv2.* ${includedir}/GLES2 ${includedir}/GLES3 ${libdir}/pkgconfig/glesv2.pc"
FILES:libteflon = "${libdir}/libteflon.so"
# catch all to get all the tools and data
FILES:${PN}-tools = "${bindir} ${datadir}"
ALLOW_EMPTY:${PN}-tools = "1"
# All DRI drivers are symlinks to libdril_dri.so
INSANE_SKIP:${PN}-megadriver += "dev-so"
# OpenCL ICDs package also ship correspondig .so files, there is no -dev package
INSANE_SKIP:libopencl-mesa += "dev-so"
# Fix upgrade path from mesa to mesa-megadriver
RREPLACES:mesa-megadriver = "mesa"
RCONFLICTS:mesa-megadriver = "mesa"
RPROVIDES:mesa-megadriver = "mesa"
# Use this newer version only for rpi MACHINEs
COMPATIBLE_MACHINE = "^rpi$"
# This version doesn't have kmsro and dri3 added by
# recipes-graphics/mesa/mesa_%.bbappend
# already removed in master branch with:
# https://github.com/agherzan/meta-raspberrypi/pull/1456
# https://github.com/agherzan/meta-raspberrypi/pull/1472
PACKAGECONFIG:remove:rpi = "kmsro dri3"

View File

@@ -7,6 +7,8 @@ This patch adds provisions in userland to
let apps callers set the next rendereing dispmanx resource.
It's useful for implementing, say, a buffer carousel.
---
Upstream-Status: Pending
interface/khronos/common/khrn_client_rpc.h | 2 ++
interface/khronos/common/khrn_int_ids.h | 2 ++
interface/khronos/egl/egl_client.c | 30 +++++++++++++++++++---

View File

@@ -19,6 +19,8 @@ vc_vchi_dispmanx.h
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
.gitignore | 1 +
CMakeLists.txt | 11 +
README.md | 4 +

View File

@@ -4,6 +4,8 @@ Date: Tue, 1 Oct 2013 13:19:20 +0200
Subject: [PATCH] wayland: Add Wayland example
---
Upstream-Status: Pending
.../linux/apps/hello_pi/CMakeLists.txt | 1 +
.../linux/apps/hello_pi/Makefile | 2 +
.../hello_pi/hello_wayland/CMakeLists.txt | 8 +

View File

@@ -9,6 +9,8 @@ lets add the dependency on bcm_host module which should do it
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/wayland-egl/wayland-egl.pc.in | 1 +
1 file changed, 1 insertion(+)

View File

@@ -9,6 +9,8 @@ This was removed after a discussion on IRC with the weston guys
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
Upstream-Status: Pending
interface/vmcs_host/vc_vchi_dispmanx.c | 1 -
1 file changed, 1 deletion(-)

View File

@@ -7,6 +7,8 @@ origins from buildroot
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/egl/egl_client_surface.c | 2 ++
1 file changed, 2 insertions(+)

View File

@@ -7,6 +7,8 @@ origins from metrological wayland support
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/egl/egl_client_surface.c | 3 +++
1 file changed, 3 insertions(+)

View File

@@ -7,6 +7,8 @@ Origins from buildroot
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/ext/gl_oes_egl_image_client.c | 1 -
1 file changed, 1 deletion(-)

View File

@@ -17,6 +17,8 @@ make[2]: ***
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/vcos/pthreads/CMakeLists.txt | 8 ++++++++
interface/vmcs_host/CMakeLists.txt | 8 --------
interface/vmcs_host/vc_vchi_dispmanx.h | 2 +-

View File

@@ -7,6 +7,8 @@ frame rate appears irregular and lower than expected when using nested compositi
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/egl/egl_client.c | 8 ++++++++
1 file changed, 8 insertions(+)

View File

@@ -7,6 +7,8 @@ Fixes #149
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/vmcs_host/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

View File

@@ -7,6 +7,8 @@ Courtesy: Zan Dobersek
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/ext/egl_wayland.c | 42 +++++++++++++++++++++++++++++
interface/wayland/dispmanx.xml | 10 +++++++
2 files changed, 52 insertions(+)

View File

@@ -12,6 +12,8 @@ to two vertical intervals
Signed-off-by: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/egl/egl_client.c | 3 ++-
interface/khronos/egl/egl_client_surface.c | 8 ++++++++
interface/khronos/egl/egl_client_surface.h | 11 +++++++++++

View File

@@ -13,6 +13,8 @@ via embedded composition e.g. westeros
Signed-off-by: Jeff Wannamaker <jeff_wannamaker@cable.comcast.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/common/khrn_client.c | 2 +-
interface/khronos/common/khrn_client.h | 11 +++++-
interface/khronos/ext/egl_wayland.c | 50 ++++++++++++++++++++++----

View File

@@ -8,6 +8,8 @@ taken from Khronos headers
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/include/EGL/eglext.h | 8 ++++++++
1 file changed, 8 insertions(+)

View File

@@ -8,6 +8,8 @@ for multiple versions of glibc even ones which does not have this define
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
opensrc/helpers/libfdt/libfdt_env.h | 4 ++++
1 file changed, 4 insertions(+)

View File

@@ -4,6 +4,8 @@ Date: Wed, 13 Jun 2018 18:22:22 +0000
Subject: [PATCH] openmaxil: add pkg-config file
---
Upstream-Status: Pending
CMakeLists.txt | 2 +-
pkgconfig/openmaxil.pc.in | 10 ++++++++++
2 files changed, 11 insertions(+), 1 deletion(-)

View File

@@ -8,6 +8,8 @@ therefore import needed defines and typedefs from latest mesa
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending
interface/khronos/include/EGL/eglext.h | 14 ++++++++++++++
1 file changed, 14 insertions(+)

View File

@@ -0,0 +1,725 @@
From 8f7fba136391e2020cd0fc9dca76932d3faa21eb Mon Sep 17 00:00:00 2001
From: Martin Jansa <martin.jansa@gmail.com>
Date: Fri, 8 Mar 2024 16:29:22 +0100
Subject: [PATCH] CMakeLists.txt, *.pc: respect CMAKE_INSTALL_LIBDIR
* and CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_INCLUDEDIR as well
* fixes installation paths with multilib
lib32-userland fails with:
ERROR: QA Issue: lib32-userland: Files/directories were installed but not shipped in any package:
/usr/lib/libbrcmEGL.so
/usr/lib/libvchiq_arm.so
...
/usr/lib/pkgconfig/wayland-egl.pc
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
lib32-userland: 66 installed and not shipped files. [installed-vs-shipped]
Signed-off-by: Martin Jansa <martin.jansa@gmail.com>
---
Upstream-Status: Pending
CMakeLists.txt | 2 +-
containers/CMakeLists.txt | 2 +-
containers/test/CMakeLists.txt | 24 +++++++++----------
helpers/dtoverlay/CMakeLists.txt | 2 +-
.../linux/apps/dtmerge/CMakeLists.txt | 2 +-
.../linux/apps/dtoverlay/CMakeLists.txt | 6 ++---
.../linux/apps/gencmd/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_audio/CMakeLists.txt | 2 +-
.../hello_pi/hello_dispmanx/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_encode/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_font/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_jpeg/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_teapot/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_tiger/CMakeLists.txt | 2 +-
.../hello_pi/hello_triangle/CMakeLists.txt | 2 +-
.../hello_pi/hello_triangle2/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_video/CMakeLists.txt | 2 +-
.../hello_pi/hello_videocube/CMakeLists.txt | 2 +-
.../hello_pi/hello_wayland/CMakeLists.txt | 2 +-
.../apps/hello_pi/hello_world/CMakeLists.txt | 2 +-
.../linux/apps/raspicam/CMakeLists.txt | 2 +-
.../linux/apps/smem/CMakeLists.txt | 2 +-
.../linux/apps/tvservice/CMakeLists.txt | 2 +-
.../linux/apps/vcmailbox/CMakeLists.txt | 2 +-
.../linux/libs/bcm_host/CMakeLists.txt | 2 +-
.../linux/libs/debug_sym/CMakeLists.txt | 6 ++---
.../linux/libs/sm/CMakeLists.txt | 4 ++--
interface/khronos/CMakeLists.txt | 10 ++++----
interface/mmal/CMakeLists.txt | 4 ++--
interface/mmal/components/CMakeLists.txt | 2 +-
interface/mmal/core/CMakeLists.txt | 4 ++--
interface/mmal/util/CMakeLists.txt | 4 ++--
interface/mmal/vc/CMakeLists.txt | 6 ++---
interface/vchiq_arm/CMakeLists.txt | 4 ++--
interface/vcos/CMakeLists.txt | 2 +-
interface/vcos/generic/CMakeLists.txt | 2 +-
interface/vcos/pthreads/CMakeLists.txt | 4 ++--
interface/vmcs_host/CMakeLists.txt | 2 +-
makefiles/cmake/vmcs.cmake | 2 +-
middleware/openmaxil/CMakeLists.txt | 2 +-
pkgconfig/bcm_host.pc.in | 2 +-
pkgconfig/brcmegl.pc.in | 2 +-
pkgconfig/brcmglesv2.pc.in | 2 +-
pkgconfig/brcmvg.pc.in | 2 +-
pkgconfig/mmal.pc.in | 2 +-
pkgconfig/vcsm.pc.in | 2 +-
46 files changed, 73 insertions(+), 73 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3e3c90e..0bb54b7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -136,7 +136,7 @@ if(PKG_CONFIG_FOUND)
foreach(PCFILE bcm_host.pc brcmegl.pc brcmglesv2.pc brcmvg.pc vcsm.pc mmal.pc openmaxil.pc)
configure_file("pkgconfig/${PCFILE}.in" "${PCFILE}" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PCFILE}"
- DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig")
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
endforeach()
endif()
# Remove cache entry, if one added by command line
diff --git a/containers/CMakeLists.txt b/containers/CMakeLists.txt
index 5570038..6c3d39c 100644
--- a/containers/CMakeLists.txt
+++ b/containers/CMakeLists.txt
@@ -66,7 +66,7 @@ set(packetizers_SRCS ${packetizers_SRCS} ${SOURCE_DIR}/h264/avc1_packetizer.c)
add_library(containers ${LIBRARY_TYPE} ${core_SRCS} ${io_SRCS} ${net_SRCS} ${packetizers_SRCS})
target_link_libraries(containers vcos)
-install(TARGETS containers DESTINATION lib)
+install(TARGETS containers DESTINATION ${CMAKE_INSTALL_LIBDIR})
set(container_readers)
set(container_writers)
diff --git a/containers/test/CMakeLists.txt b/containers/test/CMakeLists.txt
index 7d36352..832ad0f 100644
--- a/containers/test/CMakeLists.txt
+++ b/containers/test/CMakeLists.txt
@@ -1,17 +1,17 @@
# Generate test application
add_executable(containers_test test.c)
target_link_libraries(containers_test -Wl,--no-whole-archive containers)
-install(TARGETS containers_test DESTINATION bin)
+install(TARGETS containers_test DESTINATION ${CMAKE_INSTALL_BINDIR})
# Generate test application
add_executable(containers_check_frame_int check_frame_int.c)
target_link_libraries(containers_check_frame_int -Wl,--no-whole-archive containers)
-install(TARGETS containers_check_frame_int DESTINATION bin)
+install(TARGETS containers_check_frame_int DESTINATION ${CMAKE_INSTALL_BINDIR})
# Generate autotest application
#add_executable(containers_autotest autotest.cpp crc_32.c)
#target_link_libraries(containers_autotest -Wl,--no-whole-archive containers})
-#install(TARGETS containers_autotest DESTINATION bin)
+#install(TARGETS containers_autotest DESTINATION ${CMAKE_INSTALL_BINDIR})
# Helper code to provide non-blocking console input
if (WIN32)
@@ -28,39 +28,39 @@ add_dependencies(containers_test containers_test_extra)
# Generate net test applications
add_executable(containers_stream_client stream_client.c ${NB_IO_SOURCE})
target_link_libraries(containers_stream_client containers)
-install(TARGETS containers_stream_client DESTINATION bin)
+install(TARGETS containers_stream_client DESTINATION ${CMAKE_INSTALL_BINDIR})
add_executable(containers_stream_server stream_server.c)
target_link_libraries(containers_stream_server containers)
-install(TARGETS containers_stream_server DESTINATION bin)
+install(TARGETS containers_stream_server DESTINATION ${CMAKE_INSTALL_BINDIR})
add_executable(containers_datagram_sender datagram_sender.c)
target_link_libraries(containers_datagram_sender containers)
-install(TARGETS containers_datagram_sender DESTINATION bin)
+install(TARGETS containers_datagram_sender DESTINATION ${CMAKE_INSTALL_BINDIR})
add_executable(containers_datagram_receiver datagram_receiver.c)
target_link_libraries(containers_datagram_receiver containers)
-install(TARGETS containers_datagram_receiver DESTINATION bin)
+install(TARGETS containers_datagram_receiver DESTINATION ${CMAKE_INSTALL_BINDIR})
add_executable(containers_rtp_decoder rtp_decoder.c ${NB_IO_SOURCE})
target_link_libraries(containers_rtp_decoder containers)
-install(TARGETS containers_rtp_decoder DESTINATION bin)
+install(TARGETS containers_rtp_decoder DESTINATION ${CMAKE_INSTALL_BINDIR})
# Generate URI test application
add_executable(containers_test_uri test_uri.c)
target_link_libraries(containers_test_uri containers)
-install(TARGETS containers_test_uri DESTINATION bin)
+install(TARGETS containers_test_uri DESTINATION ${CMAKE_INSTALL_BINDIR})
# Generate URI pipe application
add_executable(containers_uri_pipe uri_pipe.c ${NB_IO_SOURCE})
target_link_libraries(containers_uri_pipe containers)
-install(TARGETS containers_uri_pipe DESTINATION bin)
+install(TARGETS containers_uri_pipe DESTINATION ${CMAKE_INSTALL_BINDIR})
# Generate bit stream test application
add_executable(containers_test_bits test_bits.c)
target_link_libraries(containers_test_bits containers)
-install(TARGETS containers_test_bits DESTINATION bin)
+install(TARGETS containers_test_bits DESTINATION ${CMAKE_INSTALL_BINDIR})
# Generate packet file dump application
add_executable(containers_dump_pktfile dump_pktfile.c)
-install(TARGETS containers_dump_pktfile DESTINATION bin)
+install(TARGETS containers_dump_pktfile DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/helpers/dtoverlay/CMakeLists.txt b/helpers/dtoverlay/CMakeLists.txt
index b3bd30f..7e83780 100644
--- a/helpers/dtoverlay/CMakeLists.txt
+++ b/helpers/dtoverlay/CMakeLists.txt
@@ -22,4 +22,4 @@ add_library (dtovl ${SHARED}
target_link_libraries(dtovl fdt)
-install (TARGETS dtovl DESTINATION lib)
+install (TARGETS dtovl DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/host_applications/linux/apps/dtmerge/CMakeLists.txt b/host_applications/linux/apps/dtmerge/CMakeLists.txt
index d3f7e36..daa91e5 100755
--- a/host_applications/linux/apps/dtmerge/CMakeLists.txt
+++ b/host_applications/linux/apps/dtmerge/CMakeLists.txt
@@ -17,5 +17,5 @@ include_directories (
add_executable(dtmerge dtmerge.c)
target_link_libraries(dtmerge dtovl)
-install(TARGETS dtmerge RUNTIME DESTINATION bin)
+install(TARGETS dtmerge RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES dtmerge.1 DESTINATION man/man1)
diff --git a/host_applications/linux/apps/dtoverlay/CMakeLists.txt b/host_applications/linux/apps/dtoverlay/CMakeLists.txt
index 97bcadc..238296d 100755
--- a/host_applications/linux/apps/dtoverlay/CMakeLists.txt
+++ b/host_applications/linux/apps/dtoverlay/CMakeLists.txt
@@ -16,12 +16,12 @@ include_directories (
add_executable(dtoverlay dtoverlay_main.c utils.c)
target_link_libraries(dtoverlay dtovl)
-install(TARGETS dtoverlay RUNTIME DESTINATION bin)
+install(TARGETS dtoverlay RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES dtoverlay.1 DESTINATION man/man1)
add_custom_command(TARGET dtoverlay POST_BUILD COMMAND ln;-sf;dtoverlay;dtparam)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dtparam DESTINATION bin)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dtparam DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES dtparam.1 DESTINATION man/man1)
set(DTOVERLAY_SCRIPTS dtoverlay-pre dtoverlay-post)
-install(PROGRAMS ${DTOVERLAY_SCRIPTS} DESTINATION bin)
+install(PROGRAMS ${DTOVERLAY_SCRIPTS} DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/gencmd/CMakeLists.txt b/host_applications/linux/apps/gencmd/CMakeLists.txt
index 0c2c32a..fdd2f00 100644
--- a/host_applications/linux/apps/gencmd/CMakeLists.txt
+++ b/host_applications/linux/apps/gencmd/CMakeLists.txt
@@ -16,5 +16,5 @@ include_directories( ../../../..
add_executable(vcgencmd gencmd.c)
target_link_libraries(vcgencmd vcos vchiq_arm vchostif)
-install(TARGETS vcgencmd RUNTIME DESTINATION bin)
+install(TARGETS vcgencmd RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES vcgencmd.1 DESTINATION man/man1)
diff --git a/host_applications/linux/apps/hello_pi/hello_audio/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_audio/CMakeLists.txt
index 03207c5..8f4d06c 100644
--- a/host_applications/linux/apps/hello_pi/hello_audio/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_audio/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_dispmanx/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_dispmanx/CMakeLists.txt
index 0471a1d..fd8b85e 100644
--- a/host_applications/linux/apps/hello_pi/hello_dispmanx/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_dispmanx/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_encode/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_encode/CMakeLists.txt
index 147623b..98a197a 100644
--- a/host_applications/linux/apps/hello_pi/hello_encode/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_encode/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_font/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_font/CMakeLists.txt
index 448d2cf..1d89f4c 100644
--- a/host_applications/linux/apps/hello_pi/hello_font/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_font/CMakeLists.txt
@@ -6,4 +6,4 @@ target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
target_link_libraries(${EXEC} vgfont freetype z)
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_jpeg/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_jpeg/CMakeLists.txt
index a56dda5..f611f8e 100644
--- a/host_applications/linux/apps/hello_pi/hello_jpeg/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_jpeg/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_teapot/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_teapot/CMakeLists.txt
index cdb8413..a60da3e 100644
--- a/host_applications/linux/apps/hello_pi/hello_teapot/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_teapot/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_tiger/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_tiger/CMakeLists.txt
index b253f3f..1104a8b 100644
--- a/host_applications/linux/apps/hello_pi/hello_tiger/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_tiger/CMakeLists.txt
@@ -6,4 +6,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_triangle/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_triangle/CMakeLists.txt
index 4e8128e..4b738bb 100644
--- a/host_applications/linux/apps/hello_pi/hello_triangle/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_triangle/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_triangle2/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_triangle2/CMakeLists.txt
index 390980a..c8c534f 100644
--- a/host_applications/linux/apps/hello_pi/hello_triangle2/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_triangle2/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_video/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_video/CMakeLists.txt
index 42187af..6b15ca2 100644
--- a/host_applications/linux/apps/hello_pi/hello_video/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_video/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_videocube/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_videocube/CMakeLists.txt
index d7fb059..9612ffe 100644
--- a/host_applications/linux/apps/hello_pi/hello_videocube/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_videocube/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
index 9a2f75c..9a468a6 100644
--- a/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_wayland/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS} -lwayland-client -lwayland-egl)
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/hello_pi/hello_world/CMakeLists.txt b/host_applications/linux/apps/hello_pi/hello_world/CMakeLists.txt
index b0120fe..97d90f6 100644
--- a/host_applications/linux/apps/hello_pi/hello_world/CMakeLists.txt
+++ b/host_applications/linux/apps/hello_pi/hello_world/CMakeLists.txt
@@ -5,4 +5,4 @@ add_executable(${EXEC} ${SRCS})
target_link_libraries(${EXEC} ${HELLO_PI_LIBS})
install(TARGETS ${EXEC}
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/raspicam/CMakeLists.txt b/host_applications/linux/apps/raspicam/CMakeLists.txt
index f73a4d0..4a9cd88 100644
--- a/host_applications/linux/apps/raspicam/CMakeLists.txt
+++ b/host_applications/linux/apps/raspicam/CMakeLists.txt
@@ -66,6 +66,6 @@ target_link_libraries(raspiyuv ${MMAL_LIBS} vcos bcm_host m)
target_link_libraries(raspivid ${MMAL_LIBS} vcos bcm_host m)
target_link_libraries(raspividyuv ${MMAL_LIBS} vcos bcm_host m)
-install(TARGETS raspistill raspiyuv raspivid raspividyuv RUNTIME DESTINATION bin)
+install(TARGETS raspistill raspiyuv raspivid raspividyuv RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES raspistill.1 raspiyuv.1 raspivid.1 raspividyuv.1 DESTINATION man/man1)
install(FILES raspicam.7 DESTINATION man/man7)
diff --git a/host_applications/linux/apps/smem/CMakeLists.txt b/host_applications/linux/apps/smem/CMakeLists.txt
index 0fa8328..60c9c61 100644
--- a/host_applications/linux/apps/smem/CMakeLists.txt
+++ b/host_applications/linux/apps/smem/CMakeLists.txt
@@ -16,5 +16,5 @@ include_directories (
add_executable(vcsmem smem.c)
target_link_libraries(vcsmem vcos vcsm vchostif)
-install(TARGETS vcsmem RUNTIME DESTINATION bin)
+install(TARGETS vcsmem RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/host_applications/linux/apps/tvservice/CMakeLists.txt b/host_applications/linux/apps/tvservice/CMakeLists.txt
index 0190774..fad5a6b 100644
--- a/host_applications/linux/apps/tvservice/CMakeLists.txt
+++ b/host_applications/linux/apps/tvservice/CMakeLists.txt
@@ -3,5 +3,5 @@ add_executable(tvservice tvservice.c)
target_link_libraries(tvservice vchostif bcm_host)
install(TARGETS tvservice
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES tvservice.1 DESTINATION man/man1)
diff --git a/host_applications/linux/apps/vcmailbox/CMakeLists.txt b/host_applications/linux/apps/vcmailbox/CMakeLists.txt
index d153363..2731724 100644
--- a/host_applications/linux/apps/vcmailbox/CMakeLists.txt
+++ b/host_applications/linux/apps/vcmailbox/CMakeLists.txt
@@ -2,6 +2,6 @@ add_executable(vcmailbox vcmailbox.c)
target_link_libraries(vcmailbox vchostif)
install(TARGETS vcmailbox
- RUNTIME DESTINATION bin)
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES vcmailbox.1 DESTINATION man/man1)
install(FILES vcmailbox.7 raspiotp.7 raspirev.7 DESTINATION man/man7)
diff --git a/host_applications/linux/libs/bcm_host/CMakeLists.txt b/host_applications/linux/libs/bcm_host/CMakeLists.txt
index 7a4ab06..3614943 100644
--- a/host_applications/linux/libs/bcm_host/CMakeLists.txt
+++ b/host_applications/linux/libs/bcm_host/CMakeLists.txt
@@ -19,5 +19,5 @@ add_library(bcm_host ${SHARED} bcm_host.c)
target_link_libraries(bcm_host vcos vchostif)
-install(TARGETS bcm_host DESTINATION lib)
+install(TARGETS bcm_host DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/host_applications/linux/libs/debug_sym/CMakeLists.txt b/host_applications/linux/libs/debug_sym/CMakeLists.txt
index d437b99..37eb759 100644
--- a/host_applications/linux/libs/debug_sym/CMakeLists.txt
+++ b/host_applications/linux/libs/debug_sym/CMakeLists.txt
@@ -11,6 +11,6 @@ include_directories (
add_library(debug_sym ${SHARED} debug_sym.c)
add_library(debug_sym_static STATIC debug_sym.c)
-install(TARGETS debug_sym DESTINATION lib)
-install(TARGETS debug_sym_static DESTINATION lib)
-install(FILES debug_sym.h DESTINATION include/interface/debug_sym)
+install(TARGETS debug_sym DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS debug_sym_static DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(FILES debug_sym.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/debug_sym)
diff --git a/host_applications/linux/libs/sm/CMakeLists.txt b/host_applications/linux/libs/sm/CMakeLists.txt
index 5ce5aca..84d8123 100644
--- a/host_applications/linux/libs/sm/CMakeLists.txt
+++ b/host_applications/linux/libs/sm/CMakeLists.txt
@@ -14,5 +14,5 @@ add_library(vcsm ${SHARED} user-vcsm.c)
target_link_libraries(vcsm vcos)
-install(TARGETS vcsm DESTINATION lib)
-install(FILES user-vcsm.h DESTINATION include/interface/vcsm)
+install(TARGETS vcsm DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(FILES user-vcsm.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/vcsm)
diff --git a/interface/khronos/CMakeLists.txt b/interface/khronos/CMakeLists.txt
index 95c0e11..00316a5 100644
--- a/interface/khronos/CMakeLists.txt
+++ b/interface/khronos/CMakeLists.txt
@@ -94,11 +94,11 @@ if (BUILD_WAYLAND)
)
add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
- install(TARGETS wayland-egl DESTINATION lib)
+ install(TARGETS wayland-egl DESTINATION ${CMAKE_INSTALL_LIBDIR})
configure_file ("wayland-egl/wayland-egl.pc.in" "wayland-egl/wayland-egl.pc" @ONLY)
install (FILES "${CMAKE_CURRENT_BINARY_DIR}/wayland-egl/wayland-egl.pc"
- DESTINATION lib/pkgconfig)
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
endif ()
add_library(EGL ${SHARED} ${EGL_SOURCE})
@@ -126,8 +126,8 @@ target_link_libraries(GLESv2 EGL khrn_client vcos)
target_link_libraries(WFC EGL)
target_link_libraries(OpenVG EGL)
-install(TARGETS EGL GLESv2 OpenVG WFC khrn_client DESTINATION lib)
-install(TARGETS EGL_static GLESv2_static khrn_static DESTINATION lib)
+install(TARGETS EGL GLESv2 OpenVG WFC khrn_client DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS EGL_static GLESv2_static khrn_static DESTINATION ${CMAKE_INSTALL_LIBDIR})
# recommended names to use to avoid conflicts with mesa libs
add_library(brcmEGL ${SHARED} ${EGL_SOURCE})
@@ -140,4 +140,4 @@ target_link_libraries(brcmGLESv2 brcmEGL khrn_client vcos)
target_link_libraries(brcmWFC brcmEGL)
target_link_libraries(brcmOpenVG brcmEGL)
-install(TARGETS brcmEGL brcmGLESv2 brcmOpenVG brcmWFC DESTINATION lib)
+install(TARGETS brcmEGL brcmGLESv2 brcmOpenVG brcmWFC DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/interface/mmal/CMakeLists.txt b/interface/mmal/CMakeLists.txt
index c5c1642..fe784e8 100644
--- a/interface/mmal/CMakeLists.txt
+++ b/interface/mmal/CMakeLists.txt
@@ -16,7 +16,7 @@ add_subdirectory(client)
target_link_libraries(mmal mmal_core mmal_util mmal_vc_client vcos mmal_components)
-install(TARGETS mmal DESTINATION lib)
+install(TARGETS mmal DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES
mmal.h
mmal_buffer.h
@@ -36,7 +36,7 @@ install(FILES
mmal_pool.h mmal_port.h
mmal_queue.h
mmal_types.h
- DESTINATION include/interface/mmal
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/mmal
)
# Test apps
diff --git a/interface/mmal/components/CMakeLists.txt b/interface/mmal/components/CMakeLists.txt
index d65fa37..4c85de0 100644
--- a/interface/mmal/components/CMakeLists.txt
+++ b/interface/mmal/components/CMakeLists.txt
@@ -30,5 +30,5 @@ set(container_libs ${container_libs} containers)
target_link_libraries(mmal_components ${container_libs} mmal_util)
target_link_libraries(mmal_components mmal_core)
-install(TARGETS mmal_components DESTINATION lib)
+install(TARGETS mmal_components DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/interface/mmal/core/CMakeLists.txt b/interface/mmal/core/CMakeLists.txt
index efa14d9..4fe0779 100644
--- a/interface/mmal/core/CMakeLists.txt
+++ b/interface/mmal/core/CMakeLists.txt
@@ -13,7 +13,7 @@ add_library (mmal_core ${LIBRARY_TYPE}
target_link_libraries (mmal_core vcos mmal_vc_client)
-install(TARGETS mmal_core DESTINATION lib)
+install(TARGETS mmal_core DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES
mmal_buffer_private.h
mmal_clock_private.h
@@ -21,5 +21,5 @@ install(FILES
mmal_core_private.h
mmal_port_private.h
mmal_events_private.h
- DESTINATION include/interface/mmal/core
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/mmal/core
)
diff --git a/interface/mmal/util/CMakeLists.txt b/interface/mmal/util/CMakeLists.txt
index b2a6858..e51afd0 100644
--- a/interface/mmal/util/CMakeLists.txt
+++ b/interface/mmal/util/CMakeLists.txt
@@ -12,7 +12,7 @@ add_library (mmal_util ${LIBRARY_TYPE}
target_link_libraries (mmal_util vcos)
-install(TARGETS mmal_util DESTINATION lib)
+install(TARGETS mmal_util DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES
mmal_component_wrapper.h
mmal_connection.h
@@ -24,5 +24,5 @@ install(FILES
mmal_util.h
mmal_util_params.h
mmal_util_rational.h
- DESTINATION include/interface/mmal/util
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/mmal/util
)
diff --git a/interface/mmal/vc/CMakeLists.txt b/interface/mmal/vc/CMakeLists.txt
index d6e80db..3b9ec64 100644
--- a/interface/mmal/vc/CMakeLists.txt
+++ b/interface/mmal/vc/CMakeLists.txt
@@ -8,12 +8,12 @@ target_link_libraries(mmal_vc_client vchiq_arm vcos vcsm)
if(BUILD_MMAL_APPS)
add_executable(mmal_vc_diag mmal_vc_diag.c)
target_link_libraries(mmal_vc_diag mmal mmal_vc_client debug_sym vcos)
-install(TARGETS mmal_vc_diag RUNTIME DESTINATION bin)
+install(TARGETS mmal_vc_diag RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif(BUILD_MMAL_APPS)
include_directories ( ../../../host_applications/linux/libs/sm )
-install(TARGETS mmal_vc_client DESTINATION lib)
+install(TARGETS mmal_vc_client DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(FILES
mmal_vc_api.h
mmal_vc_api_drm.h
@@ -22,5 +22,5 @@ install(FILES
mmal_vc_msgs.h
mmal_vc_opaque_alloc.h
mmal_vc_shm.h
- DESTINATION include/interface/mmal/vc
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/mmal/vc
)
diff --git a/interface/vchiq_arm/CMakeLists.txt b/interface/vchiq_arm/CMakeLists.txt
index 7af383d..e5a3224 100644
--- a/interface/vchiq_arm/CMakeLists.txt
+++ b/interface/vchiq_arm/CMakeLists.txt
@@ -5,7 +5,7 @@ add_library(vchiq_arm SHARED
# pull in VCHI cond variable emulation
target_link_libraries(vchiq_arm vcos)
-install(TARGETS vchiq_arm DESTINATION lib)
+install(TARGETS vchiq_arm DESTINATION ${CMAKE_INSTALL_LIBDIR})
#install(FILES etc/10-vchiq.rules DESTINATION /etc/udev/rules.d)
include_directories(../..)
@@ -17,4 +17,4 @@ target_link_libraries(vchiq_test
vchiq_arm
vcos)
-install(TARGETS vchiq_test RUNTIME DESTINATION bin)
+install(TARGETS vchiq_test RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
diff --git a/interface/vcos/CMakeLists.txt b/interface/vcos/CMakeLists.txt
index 23a8d72..b0924a4 100644
--- a/interface/vcos/CMakeLists.txt
+++ b/interface/vcos/CMakeLists.txt
@@ -65,4 +65,4 @@ if (WIN32)
configure_file (build_all.bat.in build_all.bat @ONLY)
endif ()
-#install (FILES ${HEADERS} DESTINATION include/interface/vcos)
+#install (FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/vcos)
diff --git a/interface/vcos/generic/CMakeLists.txt b/interface/vcos/generic/CMakeLists.txt
index c09f376..8af98fd 100644
--- a/interface/vcos/generic/CMakeLists.txt
+++ b/interface/vcos/generic/CMakeLists.txt
@@ -18,4 +18,4 @@ foreach (header ${HEADERS})
configure_file ("${header}" "${VCOS_HEADERS_BUILD_DIR}/generic/${header}" COPYONLY)
endforeach ()
-install (FILES ${HEADERS} DESTINATION include/interface/vcos/generic)
+install (FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/interface/vcos/generic)
diff --git a/interface/vcos/pthreads/CMakeLists.txt b/interface/vcos/pthreads/CMakeLists.txt
index d6cd415..821b3f3 100644
--- a/interface/vcos/pthreads/CMakeLists.txt
+++ b/interface/vcos/pthreads/CMakeLists.txt
@@ -50,5 +50,5 @@ else ()
endif ()
-#install(FILES ${HEADERS} DESTINATION include)
-install(TARGETS vcos DESTINATION lib)
+#install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_LIBDIR})
+install(TARGETS vcos DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/interface/vmcs_host/CMakeLists.txt b/interface/vmcs_host/CMakeLists.txt
index 76813c9..0984d8a 100755
--- a/interface/vmcs_host/CMakeLists.txt
+++ b/interface/vmcs_host/CMakeLists.txt
@@ -35,5 +35,5 @@ target_link_libraries(vchostif vchiq_arm vcos)
#target_link_libraries(bufman WFC)
-install(TARGETS ${INSTALL_TARGETS} DESTINATION lib)
+install(TARGETS ${INSTALL_TARGETS} DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/makefiles/cmake/vmcs.cmake b/makefiles/cmake/vmcs.cmake
index 7c97463..a1eb911 100644
--- a/makefiles/cmake/vmcs.cmake
+++ b/makefiles/cmake/vmcs.cmake
@@ -16,7 +16,7 @@ endif()
SET(CMAKE_INSTALL_PREFIX "${VMCS_INSTALL_PREFIX}" CACHE INTERNAL "Prefix
prepended to install directories" FORCE)
if(NOT DEFINED VMCS_PLUGIN_DIR)
- SET(VMCS_PLUGIN_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_SHARED_LIBRARY_PREFIX}/plugins)
+ SET(VMCS_PLUGIN_DIR ${CMAKE_INSTALL_LIBDIR}/plugins)
endif()
# What kind of system are we?
diff --git a/middleware/openmaxil/CMakeLists.txt b/middleware/openmaxil/CMakeLists.txt
index 3e9c5f9..c063740 100644
--- a/middleware/openmaxil/CMakeLists.txt
+++ b/middleware/openmaxil/CMakeLists.txt
@@ -49,4 +49,4 @@ else ()
endif ()
-install (TARGETS openmaxil DESTINATION lib)
+install (TARGETS openmaxil DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/pkgconfig/bcm_host.pc.in b/pkgconfig/bcm_host.pc.in
index c7237c5..2988b42 100644
--- a/pkgconfig/bcm_host.pc.in
+++ b/pkgconfig/bcm_host.pc.in
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/include
Name: bcm_host
diff --git a/pkgconfig/brcmegl.pc.in b/pkgconfig/brcmegl.pc.in
index 5dd3d5b..a45bf22 100644
--- a/pkgconfig/brcmegl.pc.in
+++ b/pkgconfig/brcmegl.pc.in
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/include
Name: brcmEGL
diff --git a/pkgconfig/brcmglesv2.pc.in b/pkgconfig/brcmglesv2.pc.in
index e0e36f5..902fbf3 100644
--- a/pkgconfig/brcmglesv2.pc.in
+++ b/pkgconfig/brcmglesv2.pc.in
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/include
Name: brcmGLESv2
diff --git a/pkgconfig/brcmvg.pc.in b/pkgconfig/brcmvg.pc.in
index 763a44b..98489ee 100644
--- a/pkgconfig/brcmvg.pc.in
+++ b/pkgconfig/brcmvg.pc.in
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/include
Name: brcmOpenVG
diff --git a/pkgconfig/mmal.pc.in b/pkgconfig/mmal.pc.in
index 37d344c..1ffa4f5 100644
--- a/pkgconfig/mmal.pc.in
+++ b/pkgconfig/mmal.pc.in
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/include
Name: MMAL
diff --git a/pkgconfig/vcsm.pc.in b/pkgconfig/vcsm.pc.in
index b12c56f..6f762cb 100644
--- a/pkgconfig/vcsm.pc.in
+++ b/pkgconfig/vcsm.pc.in
@@ -1,6 +1,6 @@
prefix=@CMAKE_INSTALL_PREFIX@
exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
includedir=${prefix}/include
Name: VCSM

View File

@@ -13,11 +13,11 @@ COMPATIBLE_MACHINE = "^rpi$"
SRCBRANCH = "master"
SRCFORK = "raspberrypi"
SRCREV = "54fd97ae4066a10b6b02089bc769ceed328737e0"
SRCREV = "cc1ca18fb0689b01cc2ca2aa4b400dcee624a213"
# Use the date of the above commit as the package version. Update this when
# SRCREV is changed.
PV = "20220323"
PV = "20230419"
SRC_URI = "\
git://github.com/${SRCFORK}/userland.git;protocol=https;branch=${SRCBRANCH} \
@@ -46,6 +46,7 @@ SRC_URI = "\
file://0022-all-host_applications-remove-non-existent-projects.patch \
file://0023-hello_pi-optionally-build-wayland-specific-app.patch \
file://0024-userland-Sync-needed-defines-for-weston-build.patch \
file://0025-CMakeLists.txt-.pc-respect-CMAKE_INSTALL_LIBDIR.patch \
"
SRC_URI:remove:toolchain-clang = "file://0021-cmake-Disable-format-overflow-warning-as-error.patch"

View File

@@ -0,0 +1,27 @@
SUMMARY = "Collection of additional Wayland protocols"
DESCRIPTION = "Wayland protocols that add functionality not \
available in the Wayland core protocol. Such protocols either add \
completely new functionality, or extend the functionality of some other \
protocol either in Wayland core, or some other protocol in \
wayland-protocols."
HOMEPAGE = "http://wayland.freedesktop.org"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://COPYING;md5=c7b12b6702da38ca028ace54aae3d484 \
file://stable/presentation-time/presentation-time.xml;endline=26;md5=4646cd7d9edc9fa55db941f2d3a7dc53"
SRC_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/releases/${PV}/downloads/wayland-protocols-${PV}.tar.xz"
SRC_URI[sha256sum] = "4d2b2a9e3e099d017dc8107bf1c334d27bb87d9e4aff19a0c8d856d17cd41ef0"
UPSTREAM_CHECK_URI = "https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tags"
UPSTREAM_CHECK_REGEX = "releases/(?P<pver>.+)"
DEPENDS += "wayland-native"
inherit meson pkgconfig allarch
EXTRA_OEMESON += "-Dtests=false"
BBCLASSEXTEND = "native nativesdk"
# Use this newer version only for rpi MACHINEs
COMPATIBLE_MACHINE = "^rpi$"

View File

@@ -1,898 +0,0 @@
From 31ad68831357d2019624004f1f0846475671088f Mon Sep 17 00:00:00 2001
From: Phil Elwell <phil@raspberrypi.com>
Date: Thu, 5 May 2022 13:17:21 +0100
Subject: [PATCH] Braktooth fix for CYW43455
This updated Bluetooth firmware contains Braktooth fixes for
CYW43455, addressing the following vulnerabilities:
CVE-2021-34145
CVE-2021-34146
CVE-2021-34147
CVE-2021-34148
Original firmware name: BCM4345C0_003.001.025.0187.0370.hcd
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
Upstream-Status: Backport
---
broadcom/BCM4345C0.hcd | Bin 57622 -> 63894 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/broadcom/BCM4345C0.hcd b/broadcom/BCM4345C0.hcd
index 82c3647398b67474110fffb6f05986be7c1e3bc8..d4d7e47ad8115bf34cba5df237afaf4bf598e74b 100644
GIT binary patch
delta 30611
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
delta 24701
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
E52KeC5&!@I

View File

@@ -16,7 +16,7 @@ SECTION = "kernel"
# [^1]: https://github.com/RPi-Distro/bluez-firmware/issues/1
LICENSE = "Firmware-cypress-rpidistro"
LIC_FILES_CHKSUM = "\
file://LICENCE.cypress-rpidistro;md5=c5d12ae0b24ef7177902a8e288751a4e \
file://LICENCE.cypress-rpidistro;md5=be80828daf682762f392131141288a74 \
"
# These are not common licenses, set NO_GENERIC_LICENSE for them
@@ -24,11 +24,10 @@ LIC_FILES_CHKSUM = "\
NO_GENERIC_LICENSE[Firmware-cypress-rpidistro] = "LICENCE.cypress-rpidistro"
SRC_URI = " \
git://github.com/RPi-Distro/bluez-firmware;branch=master;protocol=https \
file://31ad68831357d2019624004f1f0846475671088f.patch \
git://github.com/RPi-Distro/bluez-firmware;branch=bookworm;protocol=https \
"
SRCREV = "e7fd166981ab4bb9a36c2d1500205a078a35714d"
PV = "1.2-4+rpt8"
SRCREV = "78d6a07730e2d20c035899521ab67726dc028e1c"
PV = "1.2-9+rpt3"
S = "${WORKDIR}/git"
@@ -52,19 +51,21 @@ do_install() {
install -d ${D}${nonarch_base_libdir}/firmware/brcm
cp LICENCE.cypress-rpidistro ${D}${nonarch_base_libdir}/firmware
install -m 0644 broadcom/BCM434*.hcd ${D}${nonarch_base_libdir}/firmware/brcm/
install -m 0644 debian/firmware/broadcom/BCM434*.hcd ${D}${nonarch_base_libdir}/firmware/brcm/
}
PACKAGES = "\
${PN}-cypress-license \
${PN}-bcm43430a1-hcd \
${PN}-bcm43430b0-hcd \
${PN}-bcm4343a2-hcd \
${PN}-bcm4345c0-hcd \
${PN}-bcm4345c5-hcd \
"
LICENSE:${PN}-bcm43430a1-hcd = "Firmware-cypress-rpidistro"
LICENSE:${PN}-bcm43430b0-hcd = "Firmware-cypress-rpidistro"
LICENSE:${PN}-bcm4343a2-hcd = "Firmware-cypress-rpidistro"
LICENSE:${PN}-bcm4345c0-hcd = "Firmware-cypress-rpidistro"
LICENSE:${PN}-bcm4345c5-hcd = "Firmware-cypress-rpidistro"
LICENSE:${PN}-cypress-license = "Firmware-cypress-rpidistro"
@@ -78,6 +79,9 @@ FILES:${PN}-bcm43430a1-hcd = "\
FILES:${PN}-bcm43430b0-hcd = "\
${nonarch_base_libdir}/firmware/brcm/BCM43430B0.hcd \
"
FILES:${PN}-bcm4343a2-hcd = "\
${nonarch_base_libdir}/firmware/brcm/BCM4343A2.hcd \
"
FILES:${PN}-bcm4345c0-hcd = "\
${nonarch_base_libdir}/firmware/brcm/BCM4345C0.hcd \
"
@@ -87,12 +91,15 @@ FILES:${PN}-bcm4345c5-hcd = "\
RDEPENDS:${PN}-bcm43430a1-hcd += "${PN}-cypress-license"
RDEPENDS:${PN}-bcm43430b0-hcd += "${PN}-cypress-license"
RDEPENDS:${PN}-bcm4343a2-hcd += "${PN}-cypress-license"
RDEPENDS:${PN}-bcm4345c0-hcd += "${PN}-cypress-license"
RDEPENDS:${PN}-bcm4345c5-hcd += "${PN}-cypress-license"
RCONFLICTS:${PN}-bcm43430a1-hcd = "linux-firmware-bcm43430a1-hcd"
RREPLACES:${PN}-bcm43430a1-hcd = "linux-firmware-bcm43430a1-hcd"
RCONFLICTS:${PN}-bcm43430b0-hcd = "linux-firmware-bcm43430b0-hcd"
RREPLACES:${PN}-bcm43430b0-hcd = "linux-firmware-bcm43430b0-hcd"
RCONFLICTS:${PN}-bcm4343a2-hcd = "linux-firmware-bcm4343a2-hcd"
RREPLACES:${PN}-bcm4343a2-hcd = "linux-firmware-bcm4343a2-hcd"
RCONFLICTS:${PN}-bcm43435c0-hcd = "linux-firmware-bcm4345c0-hcd"
RREPLACES:${PN}-bcm43435c0-hcd = "linux-firmware-bcm4345c0-hcd"
RCONFLICTS:${PN}-bcm43435c5-hcd = "linux-firmware-bcm4345c5-hcd"

View File

@@ -1,28 +0,0 @@
From b9db43e36ad0942d33cb4db5b394abd722862568 Mon Sep 17 00:00:00 2001
From: Andrei Gherzan <andrei.gherzan@huawei.com>
Date: Fri, 9 Sep 2022 20:28:06 +0200
Subject: [PATCH] Default 43455 firmware to standard variant
The firmware for 43455 is loaded as a symlink: brcmfmac43455-sdio.bin.
This symlink is now broken as the debian package handles the right
target of this symlink through a postinstall. We don't have that logic
here so we default to the standard variant.
Upstream-Status: Inappropriate [issue reported at https://github.com/RPi-Distro/firmware-nonfree/issues/26]
Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com>
---
debian/config/brcm80211/brcm/brcmfmac43455-sdio.bin | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.bin b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.bin
index 9c39208..b914838 120000
--- a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.bin
+++ b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.bin
@@ -1 +1 @@
-../cypress/cyfmac43455-sdio.bin
\ No newline at end of file
+../cypress/cyfmac43455-sdio-standard.bin
\ No newline at end of file
--
2.25.1

View File

@@ -0,0 +1,79 @@
From 20741d848c32e0fb2e4841cf8bbc9ec3d198bb6b Mon Sep 17 00:00:00 2001
From: Omri Sarig <omri.sarig@prevas.dk>
Date: Thu, 9 Jan 2025 19:00:10 +0100
Subject: [PATCH 2/2] Default all RPi 43455 boards to standard variant
As the patch above explains, the symlink that is being used by the
brcmfmac43455-sdio.* files is one that is created by the Debian system,
which we do not have in our implementation. Therefore, when the system
tries to load these files, an error message is generated.
By changing the symlinks to be to the standard variant, the problem is
solved for the build.
The code is also working without this patch - when the driver is unable
to load the board-specific file (such as
brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin), it reverts to using
the base file (brcmfmac43455-sdio.bin), which is a correct link (as it
is fixed in the patch above). However, the driver is still generating an
error message in this case, which is being solved by linking the
board-specific files to the standard variant as well.
Upstream-Status: Inappropriate [issue reported at https://github.com/RPi-Distro/firmware-nonfree/issues/26]
Signed-off-by: Omri Sarig <omri.sarig@prevas.dk>
---
.../brcm/brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin | 2 +-
.../brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.bin | 2 +-
.../brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin | 2 +-
.../brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin | 2 +-
.../brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,5-model-b.bin | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin
index 9c39208..b914838 120000
--- a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin
+++ b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-a-plus.bin
@@ -1 +1 @@
-../cypress/cyfmac43455-sdio.bin
\ No newline at end of file
+../cypress/cyfmac43455-sdio-standard.bin
\ No newline at end of file
diff --git a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.bin b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.bin
index 9c39208..b914838 120000
--- a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.bin
+++ b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,3-model-b-plus.bin
@@ -1 +1 @@
-../cypress/cyfmac43455-sdio.bin
\ No newline at end of file
+../cypress/cyfmac43455-sdio-standard.bin
\ No newline at end of file
diff --git a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin
index 9c39208..b914838 120000
--- a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin
+++ b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.bin
@@ -1 +1 @@
-../cypress/cyfmac43455-sdio.bin
\ No newline at end of file
+../cypress/cyfmac43455-sdio-standard.bin
\ No newline at end of file
diff --git a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin
index 9c39208..b914838 120000
--- a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin
+++ b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin
@@ -1 +1 @@
-../cypress/cyfmac43455-sdio.bin
\ No newline at end of file
+../cypress/cyfmac43455-sdio-standard.bin
\ No newline at end of file
diff --git a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,5-model-b.bin b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,5-model-b.bin
index 9c39208..b914838 120000
--- a/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,5-model-b.bin
+++ b/debian/config/brcm80211/brcm/brcmfmac43455-sdio.raspberrypi,5-model-b.bin
@@ -1 +1 @@
-../cypress/cyfmac43455-sdio.bin
\ No newline at end of file
+../cypress/cyfmac43455-sdio-standard.bin
\ No newline at end of file
--
2.34.1

View File

@@ -7,19 +7,19 @@ SECTION = "kernel"
LICENSE = "GPL-2.0-only & binary-redist-Cypress-rpidistro & Synaptics-rpidistro"
LIC_FILES_CHKSUM = "\
file://debian/config/brcm80211/copyright;md5=b0630b02d90e3da72206c909b6aecc8c \
file://debian/copyright;md5=454e44c688dc909e16223e4aee63568c \
"
# Where these are no common licenses, set NO_GENERIC_LICENSE so that the
# license files will be copied from the fetched source.
NO_GENERIC_LICENSE[binary-redist-Cypress-rpidistro] = "debian/config/brcm80211/copyright"
NO_GENERIC_LICENSE[Synaptics-rpidistro] = "debian/config/brcm80211/copyright"
NO_GENERIC_LICENSE[binary-redist-Cypress-rpidistro] = "debian/copyright"
NO_GENERIC_LICENSE[Synaptics-rpidistro] = "debian/copyright"
LICENSE_FLAGS = "synaptics-killswitch"
SRC_URI = "git://github.com/RPi-Distro/firmware-nonfree;branch=bullseye;protocol=https \
file://0001-Default-43455-firmware-to-standard-variant.patch \
SRC_URI = "git://github.com/RPi-Distro/firmware-nonfree;branch=bookworm;protocol=https \
file://0002-Default-all-RPi-43455-boards-to-standard-variant.patch \
"
SRCREV = "541e5a05d152e7e6f0d9be45622e4a3741e51c02"
PV = "20210315-3+rpt7"
SRCREV = "c9d3ae6584ab79d19a4f94ccf701e888f9f87a53"
PV = "20240709-2~bpo12+1+rpt3"
S = "${WORKDIR}/git"
inherit allarch
@@ -27,13 +27,19 @@ inherit allarch
do_configure[noexec] = "1"
do_compile[noexec] = "1"
# The minimal firmware doesn't work with Raspberry Pi 5, so default to the
# standard firmware
CYFMAC43455_SDIO_FIRMWARE ??= "minimal"
CYFMAC43455_SDIO_FIRMWARE:raspberrypi5 ??= "standard"
do_install() {
install -d ${D}${nonarch_base_libdir}/firmware/brcm ${D}${nonarch_base_libdir}/firmware/cypress
cp debian/config/brcm80211/copyright ${D}${nonarch_base_libdir}/firmware/copyright.firmware-nonfree-rpidistro
cp debian/copyright ${D}${nonarch_base_libdir}/firmware/copyright.firmware-nonfree-rpidistro
for fw in \
brcmfmac43430-sdio \
brcmfmac43430b0-sdio \
brcmfmac43436-sdio \
brcmfmac43436s-sdio \
brcmfmac43455-sdio \
@@ -42,32 +48,29 @@ do_install() {
done
cp -R --no-dereference --preserve=mode,links -v debian/config/brcm80211/cypress/* ${D}${nonarch_base_libdir}/firmware/cypress/
ln -s cyfmac43455-sdio-${CYFMAC43455_SDIO_FIRMWARE}.bin ${D}${nonarch_base_libdir}/firmware/cypress/cyfmac43455-sdio.bin
rm ${D}${nonarch_base_libdir}/firmware/cypress/README.txt
# add compat links. Fixes errors like
# brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-compute-module.txt failed with error -2
ln -s brcmfmac43455-sdio.txt ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-compute-module.txt
# brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin failed with error -2
ln -s brcmfmac43455-sdio.bin ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43455-sdio.raspberrypi,4-model-b.bin
# brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.bin failed with error -2
ln -s brcmfmac43430-sdio.bin ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.raspberrypi,model-zero-w.bin
# brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.bin failed with error -2
ln -s brcmfmac43430-sdio.bin ${D}${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.raspberrypi,3-model-b.bin
install -d ${D}${sysconfdir}/modprobe.d
install -m 0644 debian/rpi-brcmfmac.conf ${D}${sysconfdir}/modprobe.d/
}
PACKAGES = "\
${PN}-bcm43430 \
${PN}-bcm43436 \
${PN}-bcm43436s \
${PN}-bcm43439 \
${PN}-bcm43455 \
${PN}-bcm43456 \
${PN}-license \
${PN}-module-conf \
"
LICENSE:${PN}-bcm43430 = "binary-redist-Cypress-rpidistro"
LICENSE:${PN}-bcm43436 = "Synaptics-rpidistro"
LICENSE:${PN}-bcm43436s = "Synaptics-rpidistro"
LICENSE:${PN}-bcm43439 = "Synaptics-rpidistro"
LICENSE:${PN}-bcm43455 = "binary-redist-Cypress-rpidistro"
LICENSE:${PN}-bcm43456 = "Synaptics-rpidistro"
LICENSE:${PN}-license = "GPL-2.0-only"
@@ -77,30 +80,41 @@ FILES:${PN}-bcm43430 = " \
${nonarch_base_libdir}/firmware/cypress/cyfmac43430-sdio.bin \
${nonarch_base_libdir}/firmware/cypress/cyfmac43430-sdio.clm_blob \
"
FILES:${PN}-bcm43436 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43436-*"
FILES:${PN}-bcm43436 = " \
${nonarch_base_libdir}/firmware/brcm/brcmfmac43436-* \
${nonarch_base_libdir}/firmware/brcm/brcmfmac43430b0-* \
"
FILES:${PN}-bcm43436s = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43436s*"
FILES:${PN}-bcm43439 = " \
${nonarch_base_libdir}/firmware/cypress/43439A0-7.95.49.00.combined \
${nonarch_base_libdir}/firmware/cypress/cyfmac43439-sdio* \
"
FILES:${PN}-bcm43455 = " \
${nonarch_base_libdir}/firmware/brcm/brcmfmac43455* \
${nonarch_base_libdir}/firmware/cypress/cyfmac43455-sdio* \
"
FILES:${PN}-bcm43456 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43456*"
FILES:${PN}-license = "${nonarch_base_libdir}/firmware/copyright.firmware-nonfree-rpidistro"
FILES:${PN}-module-conf = "${sysconfdir}/modprobe.d"
RDEPENDS:${PN}-bcm43430 += "${PN}-license"
RDEPENDS:${PN}-bcm43436 += "${PN}-license"
RDEPENDS:${PN}-bcm43436s += "${PN}-license"
RDEPENDS:${PN}-bcm43455 += "${PN}-license"
RDEPENDS:${PN}-bcm43456 += "${PN}-license"
RDEPENDS:${PN}-bcm43430 += "${PN}-license ${PN}-module-conf"
RDEPENDS:${PN}-bcm43436 += "${PN}-license ${PN}-module-conf"
RDEPENDS:${PN}-bcm43436s += "${PN}-license ${PN}-module-conf"
RDEPENDS:${PN}-bcm43439 += "${PN}-license ${PN}-module-conf"
RDEPENDS:${PN}-bcm43455 += "${PN}-license ${PN}-module-conf"
RDEPENDS:${PN}-bcm43456 += "${PN}-license ${PN}-module-conf"
RCONFLICTS:${PN}-bcm43430 = "linux-firmware-raspbian-bcm43430"
RCONFLICTS:${PN}-bcm43436 = "linux-firmware-bcm43436"
RCONFLICTS:${PN}-bcm43436s = "linux-firmware-bcm43436s"
RCONFLICTS:${PN}-bcm43439 = "linux-firmware-bcm43439"
RCONFLICTS:${PN}-bcm43455 = "linux-firmware-bcm43455"
RCONFLICTS:${PN}-bcm43456 = "linux-firmware-bcm43456"
RREPLACES:${PN}-bcm43430 = "linux-firmware-bcm43430"
RREPLACES:${PN}-bcm43436 = "linux-firmware-bcm43436"
RREPLACES:${PN}-bcm43436s = "linux-firmware-bcm43436s"
RREPLACES:${PN}-bcm43439 = "linux-firmware-bcm43439"
RREPLACES:${PN}-bcm43455 = "linux-firmware-bcm43455"
RREPLACES:${PN}-bcm43456 = "linux-firmware-bcm43456"

View File

@@ -1,48 +0,0 @@
From 32f53700aeef2f5c7797ddda66348fc0b29e1047 Mon Sep 17 00:00:00 2001
From: Kees Cook <keescook@chromium.org>
Date: Wed, 18 Jan 2023 12:21:35 -0800
Subject: [PATCH] gcc-plugins: Reorganize gimple includes for GCC 13
The gimple-iterator.h header must be included before gimple-fold.h
starting with GCC 13. Reorganize gimple headers to work for all GCC
versions.
Reported-by: Palmer Dabbelt <palmer@rivosinc.com>
Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
Link: https://lore.kernel.org/all/20230113173033.4380-1-palmer@rivosinc.com/
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
---
scripts/gcc-plugins/gcc-common.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h
index 0c087614fc3e..27770c31214c 100644
--- a/scripts/gcc-plugins/gcc-common.h
+++ b/scripts/gcc-plugins/gcc-common.h
@@ -77,8 +77,10 @@
#include "varasm.h"
#include "stor-layout.h"
#include "internal-fn.h"
+#include "gimple.h"
#include "gimple-expr.h"
#include "gimple-fold.h"
+#include "gimple-iterator.h"
#include "context.h"
#include "tree-ssa-alias.h"
#include "tree-ssa.h"
@@ -91,11 +93,9 @@
#include "tree-eh.h"
#include "stmt.h"
#include "gimplify.h"
-#include "gimple.h"
#include "tree-ssa-operands.h"
#include "tree-phinodes.h"
#include "tree-cfg.h"
-#include "gimple-iterator.h"
#include "gimple-ssa.h"
#include "ssa-iterators.h"
--
2.39.1

View File

@@ -1,8 +1,3 @@
CONFIG_ANDROID=y
#CONFIG_ANDROID_BINDERFS is not set
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDER_DEVICES="binder"
CONFIG_ASHMEM=y

View File

@@ -0,0 +1,9 @@
# The defconfigs from the RPi Kernel set "powersave" as the default CPU governor.
# That is a bad idea as it reduces performance, so we unset that default option here.
# The option to build the powersave governor (but not as the default) is also enabled.
# A fix for this was sent to upstream: https://github.com/raspberrypi/linux/pull/5666
# However, we need to carry this option override until those defconfigs are fixed on
# *all* the kernel branches that we support. So that can be a long time depending
# on wheter the above PR gets accepted and/or backported to the stable branches.
CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=n
CONFIG_CPU_FREQ_GOV_POWERSAVE=y

View File

@@ -1,2 +0,0 @@
# see emmc node
CONFIG_MMC_SDHCI_IPROC=y

View File

@@ -1 +0,0 @@
patch 0001-gcc-plugins-Reorganize-gimple-includes-for-GCC-13.patch

View File

@@ -1,4 +1,5 @@
CONFIG_I2C_BCM2835=y
CONFIG_I2C_BRCMSTB=y
CONFIG_DRM=y
CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_VC4=y

View File

@@ -3,4 +3,4 @@
# SPDX-License-Identifier: MIT
require linux-raspberrypi-v7.inc
require linux-raspberrypi_5.10.bb
require linux-raspberrypi_6.12.bb

View File

@@ -3,4 +3,4 @@
# SPDX-License-Identifier: MIT
require linux-raspberrypi-v7.inc
require linux-raspberrypi_5.15.bb
require linux-raspberrypi_6.6.bb

View File

@@ -15,6 +15,7 @@ SRC_URI += " \
${@bb.utils.contains("INITRAMFS_IMAGE_BUNDLE", "1", "file://initramfs-image-bundle.cfg", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "vc4graphics", "file://vc4graphics.cfg", "", d)} \
${@bb.utils.contains("MACHINE_FEATURES", "wm8960", "file://wm8960.cfg", "", d)} \
file://default-cpu-governor.cfg \
"
SRC_URI:append:raspberrypi4 = " \
@@ -27,11 +28,12 @@ KBUILD_DEFCONFIG:raspberrypi ?= "bcmrpi_defconfig"
KBUILD_DEFCONFIG:raspberrypi-cm3 ?= "bcm2709_defconfig"
KBUILD_DEFCONFIG:raspberrypi2 ?= "bcm2709_defconfig"
KBUILD_DEFCONFIG:raspberrypi3 ?= "bcm2709_defconfig"
KBUILD_DEFCONFIG:raspberrypi3-64 ?= "bcmrpi3_defconfig"
KBUILD_DEFCONFIG:raspberrypi3-64 ?= "bcm2711_defconfig"
KBUILD_DEFCONFIG:raspberrypi4 ?= "bcm2711_defconfig"
KBUILD_DEFCONFIG:raspberrypi4-64 ?= "bcm2711_defconfig"
KBUILD_DEFCONFIG:raspberrypi-armv7 ?= "bcm2711_defconfig"
KBUILD_DEFCONFIG:raspberrypi-armv8 ?= "bcm2711_defconfig"
KBUILD_DEFCONFIG:raspberrypi5 ?= "bcm2712_defconfig"
LINUX_VERSION_EXTENSION ?= ""

View File

@@ -1,19 +0,0 @@
LINUX_VERSION ?= "5.10.110"
LINUX_RPI_BRANCH ?= "rpi-5.10.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-5.10"
SRCREV_machine = "427c6bd8835e197693e9b4aedbe45c2c3c84cdce"
SRCREV_meta = "96ea2660bb97e15f48f4885b9e436f24c3606bd9"
KMETA = "kernel-meta"
SRC_URI = " \
git://github.com/raspberrypi/linux.git;name=machine;branch=${LINUX_RPI_BRANCH};protocol=https \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=${LINUX_RPI_KMETA_BRANCH};destsuffix=${KMETA} \
file://powersave.cfg \
file://android-drivers.cfg \
"
require linux-raspberrypi.inc
KERNEL_DTC_FLAGS += "-@ -H epapr"

View File

@@ -1,9 +1,9 @@
LINUX_VERSION ?= "6.1.20"
LINUX_VERSION ?= "6.1.77"
LINUX_RPI_BRANCH ?= "rpi-6.1.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-6.1"
SRCREV_machine = "a1cd5351f431caf7cf472825aff0e1c66bf31de4"
SRCREV_meta = "1a97a82e62ebf4ef3787768a1f5937e2d2f280ce"
SRCREV_machine = "77fc1fbcb5c013329af9583307dd1ff3cd4752aa"
SRCREV_meta = "43d1723dbe0ce7b341cf32feeb35ecbe6b0ce29a"
KMETA = "kernel-meta"

View File

@@ -1,16 +1,15 @@
LINUX_VERSION ?= "5.15.92"
LINUX_RPI_BRANCH ?= "rpi-5.15.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-5.15"
LINUX_VERSION ?= "6.12.25"
LINUX_RPI_BRANCH ?= "rpi-6.12.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-6.12"
SRCREV_machine = "14b35093ca68bf2c81bbc90aace5007142b40b40"
SRCREV_meta = "509f4b9d68337f103633d48b621c1c9aa0dc975d"
SRCREV_machine = "3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16"
SRCREV_meta = "1f6ab68a1d86836bf1b82b791df03da3cfeacb3f"
KMETA = "kernel-meta"
SRC_URI = " \
git://github.com/raspberrypi/linux.git;name=machine;branch=${LINUX_RPI_BRANCH};protocol=https \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=${LINUX_RPI_KMETA_BRANCH};destsuffix=${KMETA} \
file://rpi.scc \
file://powersave.cfg \
file://android-drivers.cfg \
"

View File

@@ -0,0 +1,31 @@
LINUX_VERSION ?= "6.6.63"
LINUX_RPI_BRANCH ?= "rpi-6.6.y"
LINUX_RPI_KMETA_BRANCH ?= "yocto-6.6"
SRCREV_machine = "e442e5c1ab6bff5b5460b4fc949beb72aaf77970"
SRCREV_meta = "52ff0d75713ce61962b325a2090bd55e216f0cf3"
KMETA = "kernel-meta"
SRC_URI = " \
git://github.com/raspberrypi/linux.git;name=machine;branch=${LINUX_RPI_BRANCH};protocol=https \
git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=${LINUX_RPI_KMETA_BRANCH};destsuffix=${KMETA} \
file://powersave.cfg \
file://android-drivers.cfg \
"
require linux-raspberrypi.inc
KERNEL_DTC_FLAGS += "-@ -H epapr"
RDEPENDS:${KERNEL_PACKAGE_NAME}:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}"
RDEPENDS:${KERNEL_PACKAGE_NAME}-base:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}-base"
RDEPENDS:${KERNEL_PACKAGE_NAME}-image:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}-image"
RDEPENDS:${KERNEL_PACKAGE_NAME}-dev:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}-dev"
RDEPENDS:${KERNEL_PACKAGE_NAME}-vmlinux:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}-vmlinux"
RDEPENDS:${KERNEL_PACKAGE_NAME}-modules:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}-modules"
RDEPENDS:${KERNEL_PACKAGE_NAME}-dbg:raspberrypi-armv7:append = " ${RASPBERRYPI_v7_KERNEL_PACKAGE_NAME}-dbg"
DEPLOYDEP = ""
DEPLOYDEP:raspberrypi-armv7 = "${RASPBERRYPI_v7_KERNEL}:do_deploy"
do_deploy[depends] += "${DEPLOYDEP}"

View File

@@ -27,6 +27,8 @@ arrive:
gst_omx_component_wait_message()
---
Upstream-Status: Pending
omx/gstomxvideodec.c | 5 +++++
1 file changed, 5 insertions(+)

View File

@@ -3,6 +3,8 @@ From: Khem Raj <raj.khem@gmail.com>
Date: Sat, 13 Feb 2016 11:42:29 -0800
---
Upstream-Status: Pending
omx/gstomxvideodec.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

View File

@@ -7,6 +7,8 @@ Without this commit the decoder streaming thread stops without ever attending
the drain request, leaving the decoder input thread waiting forever.
---
Upstream-Status: Pending
omx/gstomx.c | 7 +++++++
1 file changed, 7 insertions(+)

View File

@@ -1,44 +0,0 @@
SUMMARY = "A suite of libcamera-based apps for the Raspberry Pi"
DESCRIPTION = "This is a small suite of libcamera-based apps that aim to \
copy the functionality of the existing \"raspicam\" apps."
HOMEPAGE = "https://github.com/raspberrypi/libcamera-apps"
SECTION = "console/utils"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://license.txt;md5=a0013d1b383d72ba4bdc5b750e7d1d77"
SRC_URI = "\
git://github.com/raspberrypi/libcamera-apps.git;protocol=https;branch=main \
file://0001-utils-version.py-use-usr-bin-env-in-shebang.patch \
"
PV = "1.1.2+git${SRCPV}"
SRCREV = "12098520a3dec36ba796655baac7efece457f8d8"
S = "${WORKDIR}/git"
COMPATIBLE_MACHINE = "^rpi$"
DEPENDS = "libcamera libexif jpeg tiff libpng boost"
inherit cmake pkgconfig
EXTRA_OECMAKE = "\
-DCMAKE_BUILD_TYPE=Release \
-DBoost_INCLUDE_DIR=${STAGING_INCDIR} \
-DCMAKE_LIBRARY_PATH=${STAGING_LIBDIR} \
"
LIBCAMERA_ARCH = "${TARGET_ARCH}"
LIBCAMERA_ARCH:aarch64 = "arm64"
LIBCAMERA_ARCH:arm = "armv8-neon"
EXTRA_OECMAKE += "-DENABLE_COMPILE_FLAGS_FOR_TARGET=${LIBCAMERA_ARCH}"
PACKAGECONFIG[x11] = "-DENABLE_X11=1,-DENABLE_X11=0"
PACKAGECONFIG[qt] = "-DENABLE_QT=1,-DENABLE_QT=0"
PACKAGECONFIG[opencv] = "-DENABLE_OPENCV=1,-DENABLE_OPENCV=0"
PACKAGECONFIG[tensorflow-lite] = "-DENABLE_TFLITE=1,-DENABLE_TFLITE=0"
do_install:append() {
# Requires python3-core which not all systems may have
rm -v ${D}/${bindir}/camera-bug-report
}

Some files were not shown because too many files have changed in this diff Show More