Howto
- Mount a UART on your XG6846B. This is exactly the same UART as used by the predessor Inteno XG6846.
- Set up a TFTP server on your host computer
- Get uboot-0x03000000.bin
- Get latest zImage that I cooked up
- Plug local ethernet into one of the LAN ports (yellow)
- Power on the device
- Break into CFE on the UART (just hammer ENTER when the memory test is scrolling by)
- Wait for any screen noise to settle while ethernet plugs are detected etc
-
loadb n 0x03000000 192.168.1.2:uboot-0x03000000.bin go 0x03000000 loady
- Then send the kernel zImage using ymodem (such as Ctrl+A S in minicom)
- You will see that U-Boot has been preconfigured to load the kernel at 0x00200000 (we have some reserved memory at 0x00000000 for things like PSCI so we can't load the kernel there).
- Wait for the 6.8 MB to upload to target...
- go 0x00200000 to execute the kernel.
Status
- 2024-10-19 Merged the basic device tree for the XG6846B to the Linux kernel
- 2024-10-19 Improved the BCM6846 device tree with random number generator, watchdog, GPIO blocks, MDIO control block, LED controller and PL081 DMA block. (Later on, I also patched similar additions to all the other BCMBCA SoCs because why not, I had the speed going...
- 2024-09-17 Enabled MTD NAND and poked around in the NAND flash using U-Boot
- 2024-09-10 Managed to boot a very stripped-down Linux (just one CPU) from U-Boot
- 2024-09-08 Managed to execute U-Boot at 0x03000000
Kernel TODO
Admittedly I make very slow progress with this SoC so it would be great if others could try to help out...
- Make the secondary CPU boot - apparently only one of the CPU cores support NEON instructions. The DTSI claims the CPU is to be booted with PSCI, but sources seem so be using hidden registers in the GPIO block to boot the secondary CPU.
- Get the network going - this is the real trick. See the image on the side.
- The Marvell MC88E6320 switch is connected to the SoC using MDIO.
- WAN networking is connected directly to the Marvell MV88E6320 DSA switch using serdes, and the BCM68460 serdes driver is missing in the Linux kernel.
- The physical LAN ethernet ports are connected to the BCM68460 SoC where they appear on the MDIO link, but the actual LAN traffic goes through the MV88E6320 switch, and the RGMII is looped back from the switch to the SoC.
- All traffic is using the runner accelerator: all the networking in the switch achieve speed by using this accelerator.
Links
- BCM96846 hack branch for U-Boot - subject to constant change and including all my uglyhacks
- bcm6846-uboot.mak the Makefile that I use to reconfigure and build U-Boot
- Linux kernel sources - subject to constant change and including all my uglyhacks
- bcm6846.mak the Makefile that I use to reconfigure and build the kernel
- Source code to some Broadcom drivers that are used in this SoC/device