It's been over 8 years since my original post here about trying to get the Chumby 8 running with a newer kernel. I still haven't given up on this; it's just taken a while to find time. I'm not sure if people are still using their silvermoon devices these days -- it has aged quite a bit and 128 MB of RAM isn't much, but I had a hankering to continue on with this recently, mainly as a personal "board bringup" challenge.
My latest progress over the last week doesn't directly involve the kernel at all. I actually decided to get the Chumby 8 working with a modern u-boot version first, for a number of reasons: it's more likely that a modern Linux kernel will be able to boot successfully if we have a modern bootloader available to boot it, I wanted everything to be based on a device tree, and I also wanted to be able to generate a full SD image from scratch using as few binary blobs as possible. Also as a personal preference, I wanted to integrate it with buildroot because that's the environment I'm most comfortable in.
Sadly, support for the PXA168 was recently removed from u-boot due to not meeting a deadline for updating the aspenite board file, so I had to base it on version 2021.10 which is the last version that supported it. I have actually succeeded at this! It involved a lot of SD card swapping, frustration, and a lot of experimentation, but I have a basic Chumby 8 u-boot build working. It has UART, SD card, and LCD support. It also talks to the coprocessor to allow the reboot and poweroff commands to behave properly. My changes are here on GitHub:
This is still a work in progress -- the biggest thing left to do is figure out how to get a chunk of code from the old u-boot working -- it reconfigures the PLLs and changes the DDR RAM settings. It seems to work okay without it, but I'm sure the original engineers did it for a reason, and I want to match that configuration. It's complicated and hacky because it loads a function into SRAM, jumps into it, and reconfigures the DDR RAM that u-boot is running from, so integrating it with the new u-boot may take some work. I also have no idea if it works on other silvermoon-type devices. I'm specifically targeting the Chumby 8, because that's what I have to test with.
I haven't actually tested trying to boot any kind of a kernel with this yet, but it should work if someone sets all the proper environment variables. It definitely won't work with a stock chumby kernel because I've changed the machine ID to match the number that was added to the machine ID registry for silvermoon, which doesn't match what was actually used in the old silvermoon kernel. But you could change this pretty easily for testing.
But how do you test/use this new u-boot? Turns out I also created a branch of buildroot that automatically creates a bootable SD card image from scratch, that includes u-boot. It also builds a small root filesystem, but doesn't yet have a kernel so it can't boot into it.
This was also a little tricky. I had to figure out how to get the binary bootloader blob (obm.bin). I also had to look at it a bit deeper and figure out where/how it loads u-boot, so I could figure out how to arrange the generated SD card image. But I got it working, and it boots up to a u-boot prompt. I'm pretty happy with it because the only binary blob it depends on is that obm.bin file, and buildroot automatically downloads it for you. Everything else is automatically downloaded and built from scratch by buildroot. Here's how to test it:
git clone https://github.com/dougg3/buildroot.git -b chumby
You should eventually end up with a successful build. The final binary is a file called sdcard.img in the "output/images" subdirectory. You can dd this image to an SD card and boot a Chumby 8 with it. It won't be useful unless you've soldered on the UART header and have a USB to TTL serial adapter. Anyway, if you've got that all set up like me, you'll end up with a Chumby boot prompt:
Total times UART was inited: 0x00000001
Total wait loops iterated: 0x000022B3
Hello world, I'm the most incredibly annoying boot process you'll ever meet!
done with key wait
flash boot attempt
loading OS loader
U-Boot 2021.10 (May 06 2022 - 19:03:09 -0700)
SoC: Armada 88AP168-B0
DRAM: 128 MiB
MMC: mv_sdh: 0
Loading Environment from nowhere... OK
You can test the LCD and SD card by running the following command in u-boot to load a BMP image from the generated ext4 filesystem and display it on the screen:
ext4load mmc 0:2 0x1000000 /boot/testsplash.bmp ; bmp display 0x1000000
That's all I have for now! After I figure out the PLL/DDR reconfiguration stuff, I think I can start focusing on trying to get a modern kernel booting. I can't make any promises about how soon I'll be able to look at it though! As others have pointed out above, it's a long and complicated process to get every peripheral working. A lot of the stuff doesn't have mainline support, and a lot of it is super custom chumby stuff so it's more complicated than just "create a dts file". But maybe we can slowly inch toward it...
Edit 5/7/2022: I got the PLL and DDR configuration figured out and working, and the changes have been pushed to the repos above. I'm feeling pretty good about the condition of this new u-boot!