diff --git a/buildroot-external/board/raspberrypi/amber/cmdline.txt b/buildroot-external/board/raspberrypi/amber/cmdline.txt new file mode 100644 index 000000000..7284969fc --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/cmdline.txt @@ -0,0 +1 @@ +dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200n8 console=ttyAMA2,115200n8 diff --git a/buildroot-external/board/raspberrypi/amber/config.txt b/buildroot-external/board/raspberrypi/amber/config.txt new file mode 100644 index 000000000..9ba9349db --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/config.txt @@ -0,0 +1,77 @@ +# For more options and information see +# http://rpf.io/configtxt +# Some settings may impact device functionality. See link above for details + +# HAOS - don't change it! +disable_splash=1 +kernel=u-boot.bin +arm_64bit=1 + +# uncomment to enable primary UART console +enable_uart=1 + +# uncomment if you get no picture on HDMI for a default "safe" mode +#hdmi_safe=1 + +# uncomment this if your display has a black border of unused pixels visible +# and your display can output without overscan +#disable_overscan=1 + +# uncomment the following to adjust overscan. Use positive numbers if console +# goes off screen, and negative if there is too much border +#overscan_left=16 +#overscan_right=16 +#overscan_top=16 +#overscan_bottom=16 + +# uncomment to force a console size. By default it will be display's size minus +# overscan. +#framebuffer_width=1280 +#framebuffer_height=720 + +# uncomment if hdmi display is not detected and composite is being output +#hdmi_force_hotplug=1 + +# uncomment to force a specific HDMI mode (this will force VGA) +#hdmi_group=1 +#hdmi_mode=1 + +# uncomment to force a HDMI mode rather than DVI. This can make audio work in +# DMT (computer monitor) modes +#hdmi_drive=2 + +# uncomment to increase signal to HDMI, if you have interference, blanking, or +# no display +#config_hdmi_boost=4 + +# uncomment for composite PAL +#sdtv_mode=2 + +# Uncomment to disable continous SD-card poll (for USB SSD) +#dtparam=sd_poll_once=on + +# Uncomment some or all of these to enable the optional hardware interfaces +#dtparam=i2c_arm=on +#dtparam=i2s=on +#dtparam=spi=on + +# Uncomment this to enable the lirc-rpi module +#dtoverlay=lirc-rpi + +# Uncomment this to enable GPIO support for RPI-RF-MOD/HM-MOD-RPI-PCB +#enable_uart=1 +#dtparam=i2c_arm=on +#dtoverlay=miniuart-bt +#dtoverlay=rpi-rf-mod + +# Additional overlays and parameters are documented /boot/overlays/README + +# Enable audio (loads snd_bcm2835) +dtparam=audio=on + +[all] +#dtoverlay=vc4-fkms-v3d +#max_framebuffers=2 +device_tree=bcm2711-rpi-cm4-ha-amber.dtb +dtoverlay=dwc2,dr_mode=host + diff --git a/buildroot-external/board/raspberrypi/amber/meta b/buildroot-external/board/raspberrypi/amber/meta new file mode 100644 index 000000000..44398ad85 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/meta @@ -0,0 +1,10 @@ +BOARD_ID=amber +BOARD_NAME="Amber" +CHASSIS=embedded +BOOTLOADER=uboot +KERNEL_FILE=Image +BOOT_SYS=hybrid +BOOT_SPL=false +BOOT_ENV_SIZE=0x4000 +SUPERVISOR_MACHINE=raspberrypi4-64 +SUPERVISOR_ARCH=aarch64 diff --git a/buildroot-external/board/raspberrypi/amber/patches/linux/0001-ARM-dts-bcm2711-Add-device-tree-for-Home-Assistant-A.patch b/buildroot-external/board/raspberrypi/amber/patches/linux/0001-ARM-dts-bcm2711-Add-device-tree-for-Home-Assistant-A.patch new file mode 100644 index 000000000..2bd7baae3 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/patches/linux/0001-ARM-dts-bcm2711-Add-device-tree-for-Home-Assistant-A.patch @@ -0,0 +1,680 @@ +From 4000c39e3084ea0bdd76173fda310b6c32fd4734 Mon Sep 17 00:00:00 2001 +Message-Id: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +From: Stefan Agner +Date: Thu, 4 Mar 2021 14:28:29 +0100 +Subject: [PATCH 1/6] ARM: dts: bcm2711: Add device tree for Home Assistant + Amber + +Add device tree for Home Assistant Amber, a Compute Module 4 based I/O +board. + +Signed-off-by: Stefan Agner +--- + arch/arm/boot/dts/Makefile | 3 +- + .../arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts | 618 ++++++++++++++++++ + arch/arm64/boot/dts/broadcom/Makefile | 1 + + .../dts/broadcom/bcm2711-rpi-cm4-ha-amber.dts | 1 + + 4 files changed, 622 insertions(+), 1 deletion(-) + create mode 100644 arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts + create mode 100644 arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4-ha-amber.dts + +diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile +index 12cd8bf582e1..4fa8c7be516a 100644 +--- a/arch/arm/boot/dts/Makefile ++++ b/arch/arm/boot/dts/Makefile +@@ -14,7 +14,8 @@ dtb-$(CONFIG_ARCH_BCM2835) += \ + bcm2711-rpi-4-b.dtb \ + bcm2711-rpi-400.dtb \ + bcm2710-rpi-cm3.dtb \ +- bcm2711-rpi-cm4.dtb ++ bcm2711-rpi-cm4.dtb \ ++ bcm2711-rpi-cm4-ha-amber.dtb + + dtb-$(CONFIG_ARCH_ALPINE) += \ + alpine-db.dtb +diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +new file mode 100644 +index 000000000000..11d8f87ac6d3 +--- /dev/null ++++ b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +@@ -0,0 +1,618 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/dts-v1/; ++#include "bcm2711.dtsi" ++#include "bcm2835-rpi.dtsi" ++ ++/ { ++ compatible = "raspberrypi,4-compute-module-ha-amber", "brcm,bcm2711"; ++ model = "Raspberry Pi Compute Module 4 on Home Assistant Amber"; ++ ++ chosen { ++ /* 8250 auxiliary UART instead of pl011 */ ++ stdout-path = "serial1:115200n8"; ++ }; ++ ++ /* Will be filled by the bootloader */ ++ memory@0 { ++ device_type = "memory"; ++ reg = <0 0 0>; ++ }; ++ ++ aliases { ++ emmc2bus = &emmc2bus; ++ ethernet0 = &genet; ++ pcie0 = &pcie0; ++ }; ++ ++ leds { ++ act { ++ gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ pwr { ++ label = "PWR"; ++ gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; ++ default-state = "keep"; ++ linux,default-trigger = "default-on"; ++ }; ++ }; ++ ++ wifi_pwrseq: wifi-pwrseq { ++ compatible = "mmc-pwrseq-simple"; ++ reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>; ++ }; ++ ++ sd_io_1v8_reg: sd_io_1v8_reg { ++ compatible = "regulator-gpio"; ++ regulator-name = "vdd-sd-io"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ regulator-settling-time-us = <5000>; ++ gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>; ++ states = <1800000 0x1 ++ 3300000 0x0>; ++ status = "okay"; ++ }; ++ ++ sd_vcc_reg: sd_vcc_reg { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc-sd"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ enable-active-high; ++ gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>; ++ }; ++}; ++ ++&ddc0 { ++ status = "okay"; ++}; ++ ++&ddc1 { ++ status = "okay"; ++}; ++ ++&firmware { ++ expgpio: gpio { ++ compatible = "raspberrypi,firmware-gpio"; ++ gpio-controller; ++ #gpio-cells = <2>; ++ gpio-line-names = "BT_ON", ++ "WL_ON", ++ "PWR_LED_OFF", ++ "ANT1", ++ "VDD_SD_IO_SEL", ++ "CAM_GPIO", ++ "SD_PWR_ON", ++ "ANT2"; ++ status = "okay"; ++ ++ ant1: ant1 { ++ gpio-hog; ++ gpios = <3 GPIO_ACTIVE_HIGH>; ++ output-high; ++ }; ++ ++ ant2: ant2 { ++ gpio-hog; ++ gpios = <7 GPIO_ACTIVE_HIGH>; ++ output-low; ++ }; ++ }; ++}; ++ ++&gpio { ++ /* ++ * Parts taken from rpi_SCH_4b_4p0_reduced.pdf and ++ * the official GPU firmware DT blob. ++ * ++ * Legend: ++ * "FOO" = GPIO line named "FOO" on the schematic ++ * "FOO_N" = GPIO line named "FOO" on schematic, active low ++ */ ++ gpio-line-names = "ID_SDA", ++ "ID_SCL", ++ "SDA1", ++ "SCL1", ++ "GPIO_GCLK", ++ "GPIO5", ++ "GPIO6", ++ "SPI_CE1_N", ++ "SPI_CE0_N", ++ "SPI_MISO", ++ "SPI_MOSI", ++ "SPI_SCLK", ++ "GPIO12", ++ "GPIO13", ++ /* Serial port */ ++ "TXD1", ++ "RXD1", ++ "GPIO16", ++ "GPIO17", ++ "GPIO18", ++ "GPIO19", ++ "GPIO20", ++ "GPIO21", ++ "GPIO22", ++ "GPIO23", ++ "GPIO24", ++ "GPIO25", ++ "GPIO26", ++ "GPIO27", ++ "RGMII_MDIO", ++ "RGMIO_MDC", ++ /* Used by BT module */ ++ "CTS0", ++ "RTS0", ++ "TXD0", ++ "RXD0", ++ /* Used by Wifi */ ++ "SD1_CLK", ++ "SD1_CMD", ++ "SD1_DATA0", ++ "SD1_DATA1", ++ "SD1_DATA2", ++ "SD1_DATA3", ++ /* Shared with SPI flash */ ++ "PWM0_MISO", ++ "PWM1_MOSI", ++ "STATUS_LED_G_CLK", ++ "SPIFLASH_CE_N", ++ "SDA0", ++ "SCL0", ++ "RGMII_RXCLK", ++ "RGMII_RXCTL", ++ "RGMII_RXD0", ++ "RGMII_RXD1", ++ "RGMII_RXD2", ++ "RGMII_RXD3", ++ "RGMII_TXCLK", ++ "RGMII_TXCTL", ++ "RGMII_TXD0", ++ "RGMII_TXD1", ++ "RGMII_TXD2", ++ "RGMII_TXD3"; ++}; ++ ++&hdmi0 { ++ clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>; ++ clock-names = "hdmi", "bvb", "audio", "cec"; ++ status = "okay"; ++}; ++ ++&hdmi1 { ++ clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>; ++ clock-names = "hdmi", "bvb", "audio", "cec"; ++ status = "okay"; ++}; ++ ++&hvs { ++ clocks = <&firmware_clocks 4>; ++}; ++ ++&pixelvalve0 { ++ status = "okay"; ++}; ++ ++&pixelvalve1 { ++ status = "okay"; ++}; ++ ++&pixelvalve2 { ++ status = "okay"; ++}; ++ ++&pixelvalve4 { ++ status = "okay"; ++}; ++ ++&vc4 { ++ status = "okay"; ++}; ++ ++&vec { ++ status = "disabled"; ++}; ++ ++&pwm1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>; ++ status = "okay"; ++}; ++ ++/* SDHCI is used to control the SDIO for wireless */ ++&sdhci { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&emmc_gpio34>; ++ bus-width = <4>; ++ non-removable; ++ mmc-pwrseq = <&wifi_pwrseq>; ++ status = "okay"; ++ ++ brcmf: wifi@1 { ++ reg = <1>; ++ compatible = "brcm,bcm4329-fmac"; ++ }; ++}; ++ ++/* EMMC2 is used to drive the EMMC card */ ++&emmc2 { ++ bus-width = <8>; ++ vqmmc-supply = <&sd_io_1v8_reg>; ++ vmmc-supply = <&sd_vcc_reg>; ++ broken-cd; ++ status = "okay"; ++}; ++ ++&genet { ++ phy-handle = <&phy1>; ++ phy-mode = "rgmii-rxid"; ++ status = "okay"; ++}; ++ ++&genet_mdio { ++ phy1: ethernet-phy@1 { ++ /* No PHY interrupt */ ++ reg = <0x1>; ++ }; ++}; ++ ++/* uart0 communicates with the BT module */ ++&uart0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>; ++ uart-has-rtscts; ++ status = "okay"; ++ ++ bluetooth { ++ compatible = "brcm,bcm43438-bt"; ++ max-speed = <2000000>; ++ shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>; ++ }; ++}; ++ ++/* uart1 is mapped to the pin header */ ++&uart1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart1_gpio14>; ++ status = "okay"; ++}; ++ ++&vchiq { ++ interrupts = ; ++}; ++ ++// ============================================= ++// Downstream rpi- changes ++ ++#define BCM2711 ++ ++#include "bcm270x.dtsi" ++#include "bcm271x-rpi-bt.dtsi" ++ ++/ { ++ soc { ++ /delete-node/ pixelvalve@7e807000; ++ /delete-node/ hdmi@7e902000; ++ }; ++}; ++ ++#include "bcm2711-rpi.dtsi" ++#include "bcm283x-rpi-csi0-2lane.dtsi" ++#include "bcm283x-rpi-csi1-4lane.dtsi" ++#include "bcm283x-rpi-i2c0mux_0_44.dtsi" ++ ++/ { ++ chosen { ++ bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1"; ++ }; ++ ++ aliases { ++ serial0 = &uart1; ++ serial1 = &uart0; ++ mmc0 = &emmc2; ++ mmc1 = &mmcnr; ++ mmc2 = &sdhost; ++ /delete-property/ i2c2; ++ i2c3 = &i2c3; ++ i2c4 = &i2c4; ++ i2c5 = &i2c5; ++ i2c6 = &i2c6; ++ /delete-property/ intc; ++ }; ++ ++ /delete-node/ wifi-pwrseq; ++ ++ cam0_reg: cam1_reg: cam1_reg { ++ compatible = "regulator-fixed"; ++ regulator-name = "cam1-reg"; ++ gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ status = "disabled"; ++ }; ++}; ++ ++&mmcnr { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sdio_pins>; ++ bus-width = <4>; ++ status = "okay"; ++}; ++ ++&uart0 { ++ pinctrl-0 = <&uart0_pins &bt_pins>; ++ status = "okay"; ++}; ++ ++&uart1 { ++ pinctrl-0 = <&uart1_pins>; ++}; ++ ++&spi0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi0_pins &spi0_cs_pins>; ++ cs-gpios = <&gpio 8 1>, <&gpio 7 1>; ++ ++ spidev0: spidev@0{ ++ compatible = "spidev"; ++ reg = <0>; /* CE0 */ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ spi-max-frequency = <125000000>; ++ }; ++ ++ spidev1: spidev@1{ ++ compatible = "spidev"; ++ reg = <1>; /* CE1 */ ++ #address-cells = <1>; ++ #size-cells = <0>; ++ spi-max-frequency = <125000000>; ++ }; ++}; ++ ++&gpio { ++ spi0_pins: spi0_pins { ++ brcm,pins = <9 10 11>; ++ brcm,function = ; ++ }; ++ ++ spi0_cs_pins: spi0_cs_pins { ++ brcm,pins = <8 7>; ++ brcm,function = ; ++ }; ++ ++ spi3_pins: spi3_pins { ++ brcm,pins = <1 2 3>; ++ brcm,function = ; ++ }; ++ ++ spi3_cs_pins: spi3_cs_pins { ++ brcm,pins = <0 24>; ++ brcm,function = ; ++ }; ++ ++ spi4_pins: spi4_pins { ++ brcm,pins = <5 6 7>; ++ brcm,function = ; ++ }; ++ ++ spi4_cs_pins: spi4_cs_pins { ++ brcm,pins = <4 25>; ++ brcm,function = ; ++ }; ++ ++ spi5_pins: spi5_pins { ++ brcm,pins = <13 14 15>; ++ brcm,function = ; ++ }; ++ ++ spi5_cs_pins: spi5_cs_pins { ++ brcm,pins = <12 26>; ++ brcm,function = ; ++ }; ++ ++ spi6_pins: spi6_pins { ++ brcm,pins = <19 20 21>; ++ brcm,function = ; ++ }; ++ ++ spi6_cs_pins: spi6_cs_pins { ++ brcm,pins = <18 27>; ++ brcm,function = ; ++ }; ++ ++ i2c0_pins: i2c0 { ++ brcm,pins = <0 1>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ ++ i2c1_pins: i2c1 { ++ brcm,pins = <2 3>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ ++ i2c3_pins: i2c3 { ++ brcm,pins = <4 5>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ ++ i2c4_pins: i2c4 { ++ brcm,pins = <8 9>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ ++ i2c5_pins: i2c5 { ++ brcm,pins = <12 13>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ ++ i2c6_pins: i2c6 { ++ brcm,pins = <22 23>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ ++ i2s_pins: i2s { ++ brcm,pins = <18 19 20 21>; ++ brcm,function = ; ++ }; ++ ++ sdio_pins: sdio_pins { ++ brcm,pins = <34 35 36 37 38 39>; ++ brcm,function = ; // alt3 = SD1 ++ brcm,pull = <0 2 2 2 2 2>; ++ }; ++ ++ bt_pins: bt_pins { ++ brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0 ++ // to fool pinctrl ++ brcm,function = <0>; ++ brcm,pull = <2>; ++ }; ++ ++ uart0_pins: uart0_pins { ++ brcm,pins = <32 33>; ++ brcm,function = ; ++ brcm,pull = <0 2>; ++ }; ++ ++ uart1_pins: uart1_pins { ++ brcm,pins; ++ brcm,function; ++ brcm,pull; ++ }; ++ ++ uart2_pins: uart2_pins { ++ brcm,pins = <0 1>; ++ brcm,function = ; ++ brcm,pull = <0 2>; ++ }; ++ ++ uart3_pins: uart3_pins { ++ brcm,pins = <4 5>; ++ brcm,function = ; ++ brcm,pull = <0 2>; ++ }; ++ ++ uart4_pins: uart4_pins { ++ brcm,pins = <8 9>; ++ brcm,function = ; ++ brcm,pull = <0 2>; ++ }; ++ ++ uart5_pins: uart5_pins { ++ brcm,pins = <12 13>; ++ brcm,function = ; ++ brcm,pull = <0 2>; ++ }; ++}; ++ ++&i2c0if { ++ clock-frequency = <100000>; ++}; ++ ++&i2c1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c1_pins>; ++ clock-frequency = <100000>; ++}; ++ ++&i2s { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2s_pins>; ++}; ++ ++/ { ++ __overrides__ { ++ /delete-property/ i2c2_baudrate; ++ /delete-property/ i2c2_iknowwhatimdoing; ++ }; ++}; ++ ++// ============================================= ++// Board specific stuff here ++ ++&pcie0 { ++ brcm,enable-l1ss; ++}; ++ ++&sdhost { ++ status = "disabled"; ++}; ++ ++&phy1 { ++ led-modes = <0x00 0x08>; /* link/activity link */ ++}; ++ ++&gpio { ++ audio_pins: audio_pins { ++ brcm,pins = <>; ++ brcm,function = <>; ++ }; ++}; ++ ++&leds { ++ act_led: act { ++ label = "led0"; ++ linux,default-trigger = "mmc0"; ++ gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ pwr_led: pwr { ++ label = "led1"; ++ linux,default-trigger = "default-on"; ++ gpios = <&expgpio 2 GPIO_ACTIVE_LOW>; ++ }; ++}; ++ ++&pwm1 { ++ status = "disabled"; ++}; ++ ++&audio { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&audio_pins>; ++ brcm,disable-headphones = <1>; ++}; ++ ++/ { ++ __overrides__ { ++ act_led_gpio = <&act_led>,"gpios:4"; ++ act_led_activelow = <&act_led>,"gpios:8"; ++ act_led_trigger = <&act_led>,"linux,default-trigger"; ++ ++ pwr_led_gpio = <&pwr_led>,"gpios:4"; ++ pwr_led_activelow = <&pwr_led>,"gpios:8"; ++ pwr_led_trigger = <&pwr_led>,"linux,default-trigger"; ++ ++ eth_led0 = <&phy1>,"led-modes:0"; ++ eth_led1 = <&phy1>,"led-modes:4"; ++ ++ ant1 = <&ant1>,"output-high?=on", ++ <&ant1>, "output-low?=off", ++ <&ant2>, "output-high?=off", ++ <&ant2>, "output-low?=on"; ++ ant2 = <&ant1>,"output-high?=off", ++ <&ant1>, "output-low?=on", ++ <&ant2>, "output-high?=on", ++ <&ant2>, "output-low?=off"; ++ noant = <&ant1>,"output-high?=off", ++ <&ant1>, "output-low?=on", ++ <&ant2>, "output-high?=off", ++ <&ant2>, "output-low?=on"; ++ ++ sd_poll_once = <&emmc2>, "non-removable?"; ++ spi_dma4 = <&spi0>, "dmas:0=", <&dma40>, ++ <&spi0>, "dmas:8=", <&dma40>; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/broadcom/Makefile b/arch/arm64/boot/dts/broadcom/Makefile +index 69809bf2f45d..aef509d06d14 100644 +--- a/arch/arm64/boot/dts/broadcom/Makefile ++++ b/arch/arm64/boot/dts/broadcom/Makefile +@@ -10,6 +10,7 @@ dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-4-b.dtb + dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-400.dtb + dtb-$(CONFIG_ARCH_BCM2835) += bcm2710-rpi-cm3.dtb + dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-cm4.dtb ++dtb-$(CONFIG_ARCH_BCM2835) += bcm2711-rpi-cm4-ha-amber.dtb + + subdir-y += northstar2 + subdir-y += stingray +diff --git a/arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4-ha-amber.dts +new file mode 100644 +index 000000000000..728975338bf0 +--- /dev/null ++++ b/arch/arm64/boot/dts/broadcom/bcm2711-rpi-cm4-ha-amber.dts +@@ -0,0 +1 @@ ++#include "../../../../arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts" +-- +2.33.0 + diff --git a/buildroot-external/board/raspberrypi/amber/patches/linux/0002-ARM-dts-bcm2711-amber-Mux-UART4-for-SiLabs-radio-mod.patch b/buildroot-external/board/raspberrypi/amber/patches/linux/0002-ARM-dts-bcm2711-amber-Mux-UART4-for-SiLabs-radio-mod.patch new file mode 100644 index 000000000..616eea3a9 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/patches/linux/0002-ARM-dts-bcm2711-amber-Mux-UART4-for-SiLabs-radio-mod.patch @@ -0,0 +1,58 @@ +From 0113b0cf3e1e1d64234a3674a159e3af6f082000 Mon Sep 17 00:00:00 2001 +Message-Id: <0113b0cf3e1e1d64234a3674a159e3af6f082000.1633341968.git.stefan@agner.ch> +In-Reply-To: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +References: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +From: Stefan Agner +Date: Thu, 4 Mar 2021 14:33:09 +0100 +Subject: [PATCH 2/6] ARM: dts: bcm2711: amber: Mux UART4 for SiLabs radio + module + +Enable UART4 by default and mux pins including hardware flow control. + +Signed-off-by: Stefan Agner +--- + arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts | 13 +++++++++++-- + 1 file changed, 11 insertions(+), 2 deletions(-) + +diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +index 11d8f87ac6d3..48a56bf7e3d8 100644 +--- a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts ++++ b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +@@ -19,6 +19,7 @@ memory@0 { + }; + + aliases { ++ serial4 = &uart4; + emmc2bus = &emmc2bus; + ethernet0 = &genet; + pcie0 = &pcie0; +@@ -283,6 +284,14 @@ &uart1 { + status = "okay"; + }; + ++/* uart4 for Zigbee */ ++&uart4 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart4_pins>; ++ uart-has-rtscts; ++ status = "okay"; ++}; ++ + &vchiq { + interrupts = ; + }; +@@ -505,9 +514,9 @@ uart3_pins: uart3_pins { + }; + + uart4_pins: uart4_pins { +- brcm,pins = <8 9>; ++ brcm,pins = <8 9 10 11>; + brcm,function = ; +- brcm,pull = <0 2>; ++ brcm,pull = <0 2 2 0>; + }; + + uart5_pins: uart5_pins { +-- +2.33.0 + diff --git a/buildroot-external/board/raspberrypi/amber/patches/linux/0003-ARM-dts-bcm2711-amber-Mux-debug-UART5.patch b/buildroot-external/board/raspberrypi/amber/patches/linux/0003-ARM-dts-bcm2711-amber-Mux-debug-UART5.patch new file mode 100644 index 000000000..172445c96 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/patches/linux/0003-ARM-dts-bcm2711-amber-Mux-debug-UART5.patch @@ -0,0 +1,51 @@ +From c9f08bb9ed2f72ec76651552e85c4fa5ccbab6f3 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +References: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +From: Stefan Agner +Date: Thu, 4 Mar 2021 14:44:23 +0100 +Subject: [PATCH 3/6] ARM: dts: bcm2711: amber: Mux debug UART5 + +Signed-off-by: Stefan Agner +--- + arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +index 48a56bf7e3d8..f0f83ff79882 100644 +--- a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts ++++ b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +@@ -9,7 +9,7 @@ / { + + chosen { + /* 8250 auxiliary UART instead of pl011 */ +- stdout-path = "serial1:115200n8"; ++ stdout-path = "serial5:115200n8"; + }; + + /* Will be filled by the bootloader */ +@@ -20,6 +20,7 @@ memory@0 { + + aliases { + serial4 = &uart4; ++ serial5 = &uart5; + emmc2bus = &emmc2bus; + ethernet0 = &genet; + pcie0 = &pcie0; +@@ -292,6 +293,13 @@ &uart4 { + status = "okay"; + }; + ++/* uart5 default Debug UART */ ++&uart5 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&uart5_pins>; ++ status = "okay"; ++}; ++ + &vchiq { + interrupts = ; + }; +-- +2.33.0 + diff --git a/buildroot-external/board/raspberrypi/amber/patches/linux/0004-ARM-dts-bcm2711-amber-Enable-I2C6-by-default.patch b/buildroot-external/board/raspberrypi/amber/patches/linux/0004-ARM-dts-bcm2711-amber-Enable-I2C6-by-default.patch new file mode 100644 index 000000000..f85e3677e --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/patches/linux/0004-ARM-dts-bcm2711-amber-Enable-I2C6-by-default.patch @@ -0,0 +1,35 @@ +From e6388d4f1c27666f14a5b78f190659fa7ebfdffc Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +References: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +From: Stefan Agner +Date: Thu, 4 Mar 2021 14:48:48 +0100 +Subject: [PATCH 4/6] ARM: dts: bcm2711: amber: Enable I2C6 by default + +The main I2C bus used on Amber is I2C6. Enable it by default. + +Signed-off-by: Stefan Agner +--- + arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +index f0f83ff79882..c4b0432b81a4 100644 +--- a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts ++++ b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +@@ -544,6 +544,12 @@ &i2c1 { + clock-frequency = <100000>; + }; + ++&i2c6 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c6_pins>; ++ status = "okay"; ++}; ++ + &i2s { + pinctrl-names = "default"; + pinctrl-0 = <&i2s_pins>; +-- +2.33.0 + diff --git a/buildroot-external/board/raspberrypi/amber/patches/linux/0005-ARM-dts-bcm2711-amber-add-I2S-audio-codec.patch b/buildroot-external/board/raspberrypi/amber/patches/linux/0005-ARM-dts-bcm2711-amber-add-I2S-audio-codec.patch new file mode 100644 index 000000000..cea582bc8 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/patches/linux/0005-ARM-dts-bcm2711-amber-add-I2S-audio-codec.patch @@ -0,0 +1,67 @@ +From b56cab462d92c755a34dc4bb4d901fb86cf81a5b Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +References: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +From: Stefan Agner +Date: Thu, 4 Mar 2021 17:19:01 +0100 +Subject: [PATCH 5/6] ARM: dts: bcm2711: amber: add I2S audio codec + +Add TI PCM5122 I2S audio codec. + +Signed-off-by: Stefan Agner +--- + .../arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts | 26 +++++++++++++++++++ + 1 file changed, 26 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +index c4b0432b81a4..8d8d31a2fafb 100644 +--- a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts ++++ b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +@@ -548,11 +548,22 @@ &i2c6 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c6_pins>; + status = "okay"; ++ ++ card_codec: pcm5121@4c { ++ #sound-dai-cells = <0>; ++ compatible = "ti,pcm5121"; ++ reg = <0x4c>; ++ AVDD-supply = <&vdd_3v3_reg>; ++ DVDD-supply = <&vdd_3v3_reg>; ++ CPVDD-supply = <&vdd_3v3_reg>; ++ status = "okay"; ++ }; + }; + + &i2s { + pinctrl-names = "default"; + pinctrl-0 = <&i2s_pins>; ++ status = "okay"; + }; + + / { +@@ -602,6 +613,21 @@ &pwm1 { + status = "disabled"; + }; + ++&sound { ++ compatible = "simple-audio-card"; ++ simple-audio-card,format = "i2s"; ++ simple-audio-card,name = "pcm5521-sound"; ++ status = "okay"; ++ ++ simple-audio-card,cpu { ++ sound-dai = <&i2s>; ++ }; ++ ++ dailink0_slave: simple-audio-card,codec { ++ sound-dai = <&card_codec>; ++ }; ++}; ++ + &audio { + pinctrl-names = "default"; + pinctrl-0 = <&audio_pins>; +-- +2.33.0 + diff --git a/buildroot-external/board/raspberrypi/amber/patches/linux/0006-ARM-dts-bcm2711-amber-enable-GPIO-keys.patch b/buildroot-external/board/raspberrypi/amber/patches/linux/0006-ARM-dts-bcm2711-amber-enable-GPIO-keys.patch new file mode 100644 index 000000000..6f2589a57 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/patches/linux/0006-ARM-dts-bcm2711-amber-enable-GPIO-keys.patch @@ -0,0 +1,71 @@ +From 5d8c4f62c8e254380b9cb83f22fa035311bc3bfb Mon Sep 17 00:00:00 2001 +Message-Id: <5d8c4f62c8e254380b9cb83f22fa035311bc3bfb.1633341968.git.stefan@agner.ch> +In-Reply-To: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +References: <4000c39e3084ea0bdd76173fda310b6c32fd4734.1633341968.git.stefan@agner.ch> +From: Stefan Agner +Date: Tue, 9 Mar 2021 15:02:53 +0100 +Subject: [PATCH 6/6] ARM: dts: bcm2711: amber: enable GPIO keys + +Signed-off-by: Stefan Agner +--- + .../arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts | 30 +++++++++++++++++++ + 1 file changed, 30 insertions(+) + +diff --git a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +index 8d8d31a2fafb..7badb6073729 100644 +--- a/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts ++++ b/arch/arm/boot/dts/bcm2711-rpi-cm4-ha-amber.dts +@@ -2,6 +2,7 @@ + /dts-v1/; + #include "bcm2711.dtsi" + #include "bcm2835-rpi.dtsi" ++#include + + / { + compatible = "raspberrypi,4-compute-module-ha-amber", "brcm,bcm2711"; +@@ -26,6 +27,29 @@ aliases { + pcie0 = &pcie0; + }; + ++ keys: gpio-keys { ++ compatible = "gpio-keys"; ++ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&gpio_button_pins>; ++ ++ status = "okay"; ++ ++ power { ++ label = "Power Button"; ++ linux,code = ; ++ gpios = <&gpio 26 GPIO_ACTIVE_LOW>; ++ debounce-interval = <100>; // ms ++ }; ++ ++ user { ++ label = "User Button"; ++ linux,code = ; ++ gpios = <&gpio 27 GPIO_ACTIVE_LOW>; ++ debounce-interval = <100>; // ms ++ }; ++ }; ++ + leds { + act { + gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; +@@ -393,6 +417,12 @@ spidev1: spidev@1{ + }; + + &gpio { ++ gpio_button_pins: gpio_button_pins { ++ brcm,pins = <26 27>; ++ brcm,function = ; ++ brcm,pull = ; ++ }; ++ + spi0_pins: spi0_pins { + brcm,pins = <9 10 11>; + brcm,function = ; +-- +2.33.0 + diff --git a/buildroot-external/board/raspberrypi/amber/uboot-boot64.ush b/buildroot-external/board/raspberrypi/amber/uboot-boot64.ush new file mode 100644 index 000000000..85180e7b2 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/uboot-boot64.ush @@ -0,0 +1,79 @@ + +part start ${devtype} ${devnum} 6 dev_env +${devtype} dev ${devnum} + +setenv loadbootstate " \ + echo 'loading env...'; \ + ${devtype} read ${ramdisk_addr_r} ${dev_env} 0x20; \ + env import -c ${ramdisk_addr_r} 0x4000;" + +setenv storebootstate " \ + echo 'storing env...'; \ + env export -c -s 0x4000 ${ramdisk_addr_r} BOOT_ORDER BOOT_A_LEFT BOOT_B_LEFT MACHINE_ID; \ + ${devtype} write ${ramdisk_addr_r} ${dev_env} 0x20;" + +run loadbootstate +test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B" +test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3 +test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3 + +# HassOS bootargs +setenv bootargs_hassos "zram.enabled=1 zram.num_devices=3 apparmor=1 security=apparmor rootwait systemd.machine_id=${MACHINE_ID} cgroup_enable=memory fsck.repair=yes" + +if gpio input GPIO27; then + sleep 1 + if gpio input GPIO27; then + echo "Device wipe button has been pressed, setting wipe flag..." + setenv bootargs_hassos "${bootargs_hassos} haos.wipe=1" + fi +fi + +# HassOS system A/B +setenv bootargs_a "root=PARTUUID=8d3d53e3-6d49-4c38-8349-aff6859e82fd rootfstype=squashfs ro" +setenv bootargs_b "root=PARTUUID=a3ec664e-32ce-4665-95ea-7ae90ce9aa20 rootfstype=squashfs ro" + +# Preserve origin bootargs +setenv bootargs_rpi +setenv fdt_org ${fdt_addr} +fdt addr ${fdt_org} +fdt get value bootargs_rpi /chosen bootargs + +setenv bootargs +for BOOT_SLOT in "${BOOT_ORDER}"; do + if test "x${bootargs}" != "x"; then + # skip remaining slots + elif test "x${BOOT_SLOT}" = "xA"; then + if test ${BOOT_A_LEFT} -gt 0; then + setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1 + echo "Trying to boot slot A, ${BOOT_A_LEFT} attempts remaining. Loading kernel ..." + if load ${devtype} ${devnum}:2 ${kernel_addr_r} Image; then + setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_a} rauc.slot=A" + fi + fi + elif test "x${BOOT_SLOT}" = "xB"; then + if test ${BOOT_B_LEFT} -gt 0; then + setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1 + echo "Trying to boot slot B, ${BOOT_B_LEFT} attempts remaining. Loading kernel ..." + if load ${devtype} ${devnum}:4 ${kernel_addr_r} Image; then + setenv bootargs "${bootargs_hassos} ${bootargs_rpi} ${bootargs_b} rauc.slot=B" + fi + fi + fi +done + +setenv fdt_addr +if test -n "${bootargs}"; then + run storebootstate +else + echo "No valid slot found, resetting tries to 3" + setenv BOOT_A_LEFT 3 + setenv BOOT_B_LEFT 3 + run storebootstate + reset +fi + +echo "Starting kernel" +booti ${kernel_addr_r} - ${fdt_org} + +echo "Boot failed, resetting..." +reset diff --git a/buildroot-external/board/raspberrypi/amber/uboot.config b/buildroot-external/board/raspberrypi/amber/uboot.config new file mode 100644 index 000000000..82b4d3388 --- /dev/null +++ b/buildroot-external/board/raspberrypi/amber/uboot.config @@ -0,0 +1,2 @@ +CONFIG_CMD_NVME=y +CONFIG_NVME=y diff --git a/buildroot-external/configs/amber_defconfig b/buildroot-external/configs/amber_defconfig new file mode 100644 index 000000000..e02bcb769 --- /dev/null +++ b/buildroot-external/configs/amber_defconfig @@ -0,0 +1,121 @@ +BR2_aarch64=y +BR2_cortex_a72=y +BR2_ARM_FPU_NEON_VFPV4=y +BR2_DL_DIR="/cache/dl" +BR2_CCACHE=y +BR2_CCACHE_DIR="/cache/cc" +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_HASSOS_PATH)/patches $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/patches $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/amber/patches" +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +BR2_GCC_VERSION_9_X=y +BR2_OPTIMIZE_2=y +BR2_SSP_REGULAR=y +BR2_SSP_OPTION="-fstack-protector" +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_BINUTILS_ENABLE_LTO=y +BR2_GCC_ENABLE_LTO=y +BR2_TARGET_GENERIC_HOSTNAME="homeassistant" +BR2_TARGET_GENERIC_ISSUE="Welcome to Home Assistant" +BR2_INIT_SYSTEMD=y +# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/rootfs-overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/amber $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/hassos-hook.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/raspberrypi/linux/archive/1.20210928.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="bcm2711" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/hassos.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/docker.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/kernel.config" +BR2_LINUX_KERNEL_LZ4=y +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-cm4-ha-amber" +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" +BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_PROCPS_NG=y +BR2_PACKAGE_JQ=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_E2FSPROGS_E2IMAGE=y +BR2_PACKAGE_SQUASHFS=y +BR2_PACKAGE_OS_AGENT=y +BR2_PACKAGE_UDISKS2=y +# BR2_PACKAGE_LVM2_STANDARD_INSTALL is not set +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_MEDIATEK_MT7601U=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT2XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RALINK_RT73=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX_BT=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX_BT=y +BR2_PACKAGE_LINUX_FIRMWARE_USB_SERIAL_TI=y +BR2_PACKAGE_RPI_FIRMWARE=y +BR2_PACKAGE_RPI_FIRMWARE_VARIANT_PI4=y +BR2_PACKAGE_RPI_WIFI_FIRMWARE=y +BR2_PACKAGE_GPTFDISK=y +BR2_PACKAGE_GPTFDISK_SGDISK=y +BR2_PACKAGE_UBOOT_TOOLS=y +BR2_PACKAGE_CA_CERTIFICATES=y +BR2_PACKAGE_LIBDNET=y +BR2_PACKAGE_LIBCGROUP=y +BR2_PACKAGE_LIBCGROUP_TOOLS=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y +BR2_PACKAGE_DROPBEAR=y +BR2_PACKAGE_DROPBEAR_CLIENT=y +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_WIRELESS_REGDB=y +BR2_PACKAGE_NVME=y +BR2_PACKAGE_STRESS_NG=y +BR2_PACKAGE_TINI=y +BR2_PACKAGE_DOCKER_ENGINE=y +BR2_PACKAGE_DOCKER_CLI=y +BR2_PACKAGE_RAUC=y +BR2_PACKAGE_RAUC_NETWORK=y +BR2_PACKAGE_RNG_TOOLS=y +# BR2_PACKAGE_SYSTEMD_HWDB is not set +# BR2_PACKAGE_SYSTEMD_NETWORKD is not set +BR2_PACKAGE_SYSTEMD_RANDOMSEED=y +BR2_PACKAGE_SYSTEMD_RESOLVED=y +BR2_PACKAGE_SYSTEMD_COREDUMP=y +BR2_PACKAGE_SYSTEMD_LOGIND=y +BR2_PACKAGE_UTIL_LINUX_PARTX=y +BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y +BR2_PACKAGE_UTIL_LINUX_LOGIN=y +BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y +BR2_PACKAGE_UTIL_LINUX_SULOGIN=y +BR2_PACKAGE_USB_MODESWITCH=y +BR2_PACKAGE_USB_MODESWITCH_DATA=y +BR2_PACKAGE_INPUT_EVENT_DAEMON=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_LZ4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_VERSION=y +BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2021.10-rc5" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="rpi_4" +BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/uboot.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/uboot.config $(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/amber/uboot.config" +BR2_PACKAGE_HOST_UBOOT_TOOLS=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT=y +BR2_PACKAGE_HOST_UBOOT_TOOLS_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_HASSOS_PATH)/board/raspberrypi/amber/uboot-boot64.ush" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GPTFDISK=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HASSIO=y +BR2_PACKAGE_HASSIO_ARCH="aarch64" +BR2_PACKAGE_HASSIO_MACHINE="raspberrypi4-64" +BR2_PACKAGE_APPARMOR=y +BR2_PACKAGE_APPARMOR_PROFILES=y +BR2_PACKAGE_LIBCURL_CURL=y +BR2_PACKAGE_BLUETOOTH_BCM43XX=y +BR2_PACKAGE_DOSFSTOOLS=y +BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y +BR2_PACKAGE_RPI_RF_MOD=y +BR2_PACKAGE_RPI_RF_MOD_DTS=y