* [Buildroot] [PATCH V2] board/broadcom: add support for BCM4908 platform devices
@ 2021-12-20 4:52 Rafał Miłecki
2022-01-13 22:33 ` Yann E. MORIN
0 siblings, 1 reply; 2+ messages in thread
From: Rafał Miłecki @ 2021-12-20 4:52 UTC (permalink / raw)
To: buildroot, Thomas Petazzoni; +Cc: Rafał Miłecki
From: Rafał Miłecki <rafal@milecki.pl>
BCM4908 is Broadcom's 64-bit platform with Broadcom's own Brahma-B53
CPU(s). It's mostly used for home routers.
Kernel config is a minimal setup required to support on-SoC blocks like
NAND controller, Ethernet, switch, USB.
To make kernels 5.12+ boot those boards require a hacky patch modifying
hyp-stub.S. That booting problem will hopefully get fixes on day in
upstream kernel code.
There are many BCM4908 devices and all of them can be supported with the
same kernel & rootfs. For that reason this board compiles DTB files for
all 3 upstream supported devices. Compiling DTS files is cheap and it
saves duplicating the same board code for every supported board.
BCM4908 devices use Broadcom's own CFE bootloader which isn't properly
opensourced. Available CFE sources are very old and cover only some
ancient MIPS devices.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
V2: Add DEVELOPERS entry
Add readme.txt
Describe bootloader
Remove redundant config options
---
DEVELOPERS | 2 +
board/broadcom/bcm4908/linux.config | 41 +++++++++++++++++++
.../0001-arm64-don-t-issue-HVC-on-boot.patch | 32 +++++++++++++++
board/broadcom/bcm4908/readme.txt | 37 +++++++++++++++++
configs/broadcom_bcm4908_defconfig | 9 ++++
5 files changed, 121 insertions(+)
create mode 100644 board/broadcom/bcm4908/linux.config
create mode 100644 board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch
create mode 100644 board/broadcom/bcm4908/readme.txt
create mode 100644 configs/broadcom_bcm4908_defconfig
diff --git a/DEVELOPERS b/DEVELOPERS
index 35f3be81b8..4a8d53c672 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2310,6 +2310,8 @@ F: board/avnet/s6lx9_microboard/
F: configs/s6lx9_microboard_defconfig
N: Rafał Miłecki <rafal@milecki.pl>
+F: board/broadcom/bcm4908/
+F: configs/broadcom_bcm4908_defconfig
F: package/firmware-utils/
N: Rahul Bedarkar <rahulbedarkar89@gmail.com>
diff --git a/board/broadcom/bcm4908/linux.config b/board/broadcom/bcm4908/linux.config
new file mode 100644
index 0000000000..446a0bdf83
--- /dev/null
+++ b/board/broadcom/bcm4908/linux.config
@@ -0,0 +1,41 @@
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_ARCH_BCM4908=y
+CONFIG_NR_CPUS=4
+CONFIG_CMDLINE="earlycon=bcm63xx_uart,0xff800640 console=ttyS0,115200"
+CONFIG_CMDLINE_FORCE=y
+# CONFIG_GCC_PLUGINS is not set
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_BRIDGE=y
+CONFIG_BRIDGE_VLAN_FILTERING=y
+CONFIG_NET_DSA=y
+CONFIG_VLAN_8021Q=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+CONFIG_PCIE_BRCMSTB=y
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_MTD=y
+CONFIG_MTD_RAW_NAND=y
+CONFIG_MTD_NAND_BRCMNAND=y
+CONFIG_NETDEVICES=y
+CONFIG_NET_DSA_BCM_SF2=y
+CONFIG_SERIAL_BCM63XX=y
+CONFIG_SERIAL_BCM63XX_CONSOLE=y
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_SLAVE=y
+CONFIG_SPI=y
+CONFIG_PINCTRL=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_THERMAL=y
+CONFIG_USB=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PLATFORM=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_RESET_CONTROLLER=y
diff --git a/board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch b/board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch
new file mode 100644
index 0000000000..32e2b6330b
--- /dev/null
+++ b/board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch
@@ -0,0 +1,32 @@
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
+Date: Thu, 12 Aug 2021 11:52:42 +0200
+Subject: [PATCH] arm64: don't issue HVC on boot
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Broadcom's CFE loader seems to miss setting SCR_EL3.HCE which results in
+generating an UNDEF and kernel panic on the first HVC.
+
+HVC gets issued by kernels 5.12+ while booting, by kexec and KVM. Until
+someone finds a workaround we have to avoid all above.
+
+Workarounds: 0c93df9622d4 ("arm64: Initialise as nVHE before switching to VHE")
+Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
+---
+ arch/arm64/kernel/hyp-stub.S | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
+index 43d212618..fc95b103e 100644
+--- a/arch/arm64/kernel/hyp-stub.S
++++ b/arch/arm64/kernel/hyp-stub.S
+@@ -238,7 +238,7 @@ SYM_FUNC_START(switch_to_vhe)
+
+ // Turn the world upside down
+ mov x0, #HVC_VHE_RESTART
+- hvc #0
++// hvc #0
+ 1:
+ ret
+ SYM_FUNC_END(switch_to_vhe)
diff --git a/board/broadcom/bcm4908/readme.txt b/board/broadcom/bcm4908/readme.txt
new file mode 100644
index 0000000000..b918ab8477
--- /dev/null
+++ b/board/broadcom/bcm4908/readme.txt
@@ -0,0 +1,37 @@
+BCM4908
+
+Intro
+=====
+
+This readme covers BCM4908 family of Broadcom SoCs. It includes:
+ - BCM4906
+ - BCM4908
+ - BCM49408
+
+BCM4908 is commonly used in home routers by multiple vendors.
+
+Booting is handled using closed source CFE bootloader. There is no U-Boot (or
+any other) drop-in replacement. CFE supports booting over TFTP and from flash.
+
+How to build it
+===============
+
+ $ make broadcom_bcm4908_defconfig
+
+ $ make
+
+How to boot using TFTP
+======================
+
+When set into h (host) / c (tftp) mode CFE tries to boot image from a TFTP
+server. That allows booting buildroot built binaries. There are 3 files CFE
+looks for: kernel (Image), rootfs (cpio) and DTB. Exact filenames depend on CFE
+configuration.
+
+Booting from TFTP requires sharing 3 above files in TFTP server root dir.
+
+How to write to flash
+=====================
+
+Writing to flash requires using a custom BCM4908 firmware image format. It isn't
+supported yet.
diff --git a/configs/broadcom_bcm4908_defconfig b/configs/broadcom_bcm4908_defconfig
new file mode 100644
index 0000000000..85307af053
--- /dev/null
+++ b/configs/broadcom_bcm4908_defconfig
@@ -0,0 +1,9 @@
+BR2_aarch64=y
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.13.9"
+BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/broadcom/bcm4908/linux.config"
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm4908/bcm4906-netgear-r8000p broadcom/bcm4908/bcm4906-tplink-archer-c2300-v1 broadcom/bcm4908/bcm4908-asus-gt-ac5300"
+BR2_TARGET_ROOTFS_CPIO=y
--
2.31.1
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Buildroot] [PATCH V2] board/broadcom: add support for BCM4908 platform devices
2021-12-20 4:52 [Buildroot] [PATCH V2] board/broadcom: add support for BCM4908 platform devices Rafał Miłecki
@ 2022-01-13 22:33 ` Yann E. MORIN
0 siblings, 0 replies; 2+ messages in thread
From: Yann E. MORIN @ 2022-01-13 22:33 UTC (permalink / raw)
To: Rafał Miłecki
Cc: Rafał Miłecki, Thomas Petazzoni, buildroot
Rafał, All,
On 2021-12-20 05:52 +0100, Rafał Miłecki spake thusly:
> From: Rafał Miłecki <rafal@milecki.pl>
>
> BCM4908 is Broadcom's 64-bit platform with Broadcom's own Brahma-B53
> CPU(s). It's mostly used for home routers.
>
> Kernel config is a minimal setup required to support on-SoC blocks like
> NAND controller, Ethernet, switch, USB.
>
> To make kernels 5.12+ boot those boards require a hacky patch modifying
> hyp-stub.S. That booting problem will hopefully get fixes on day in
> upstream kernel code.
>
> There are many BCM4908 devices and all of them can be supported with the
> same kernel & rootfs. For that reason this board compiles DTB files for
> all 3 upstream supported devices. Compiling DTS files is cheap and it
> saves duplicating the same board code for every supported board.
>
> BCM4908 devices use Broadcom's own CFE bootloader which isn't properly
> opensourced. Available CFE sources are very old and cover only some
> ancient MIPS devices.
>
> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
> ---
[--SNIP--]
> diff --git a/board/broadcom/bcm4908/linux.config b/board/broadcom/bcm4908/linux.config
> new file mode 100644
> index 0000000000..446a0bdf83
> --- /dev/null
> +++ b/board/broadcom/bcm4908/linux.config
> @@ -0,0 +1,41 @@
> +CONFIG_BLK_DEV_INITRD=y
> +CONFIG_ARCH_BCM4908=y
The in-tree arm64 defconfig has support for CONFIG_ARCH_BCM4908, so
can't we use that in-tree defconfig rather than carry a custom config
file?
If it's just because some drivers are missing, maybe provide them as
a config fragment with just the symbols for those drivers.
> diff --git a/board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch b/board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch
> new file mode 100644
> index 0000000000..32e2b6330b
> --- /dev/null
> +++ b/board/broadcom/bcm4908/patches/linux/0001-arm64-don-t-issue-HVC-on-boot.patch
> @@ -0,0 +1,32 @@
> +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
> +Date: Thu, 12 Aug 2021 11:52:42 +0200
> +Subject: [PATCH] arm64: don't issue HVC on boot
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
Please use a git-formated patch, which you get with:
git format-patch --no-numbered
[--SNIP--]
> diff --git a/board/broadcom/bcm4908/readme.txt b/board/broadcom/bcm4908/readme.txt
> new file mode 100644
> index 0000000000..b918ab8477
> --- /dev/null
> +++ b/board/broadcom/bcm4908/readme.txt
> @@ -0,0 +1,37 @@
> +BCM4908
> +
> +Intro
> +=====
> +
> +This readme covers BCM4908 family of Broadcom SoCs. It includes:
> + - BCM4906
> + - BCM4908
> + - BCM49408
> +
> +BCM4908 is commonly used in home routers by multiple vendors.
> +
> +Booting is handled using closed source CFE bootloader. There is no U-Boot (or
> +any other) drop-in replacement. CFE supports booting over TFTP and from flash.
Out of curiosity, and definitely not needed for that patch: is there no
way to chain-boot? I.e. have CFE load a U-Boot, adn then that U-Boot
load kernel and so on.
> +How to build it
> +===============
> +
> + $ make broadcom_bcm4908_defconfig
> +
> + $ make
> +
> +How to boot using TFTP
> +======================
> +
> +When set into h (host) / c (tftp) mode CFE tries to boot image from a TFTP
I am not sure I grasped what this "h (host) / c (tftp) mode" means. Can
we expect users who have such a board to understand that?
> +server. That allows booting buildroot built binaries. There are 3 files CFE
> +looks for: kernel (Image), rootfs (cpio) and DTB. Exact filenames depend on CFE
> +configuration.
I would maybe add something like:
Inspect the logs of your TFTP server to see what files are
requested.
Otherwise I think this readme is good.
> +Booting from TFTP requires sharing 3 above files in TFTP server root dir.
> +
> +How to write to flash
> +=====================
> +
> +Writing to flash requires using a custom BCM4908 firmware image format. It isn't
> +supported yet.
> diff --git a/configs/broadcom_bcm4908_defconfig b/configs/broadcom_bcm4908_defconfig
> new file mode 100644
> index 0000000000..85307af053
> --- /dev/null
> +++ b/configs/broadcom_bcm4908_defconfig
> @@ -0,0 +1,9 @@
> +BR2_aarch64=y
> +BR2_LINUX_KERNEL=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION=y
> +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.13.9"
You will need to pin the linux-headers to that version too:
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_13=y
However, why do you want to stick to 5.13.x? Can't we use a more recent
version (5.15, or even the brand new 5.16)?
Regards,
Yann E. MORIN.
> +BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
> +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/broadcom/bcm4908/linux.config"
> +BR2_LINUX_KERNEL_DTS_SUPPORT=y
> +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm4908/bcm4906-netgear-r8000p broadcom/bcm4908/bcm4906-tplink-archer-c2300-v1 broadcom/bcm4908/bcm4908-asus-gt-ac5300"
> +BR2_TARGET_ROOTFS_CPIO=y
> --
> 2.31.1
>
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 561 099 427 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-01-13 22:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-20 4:52 [Buildroot] [PATCH V2] board/broadcom: add support for BCM4908 platform devices Rafał Miłecki
2022-01-13 22:33 ` Yann E. MORIN
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox