Time for a progress report.
I successfully booted a Linux kernel on the Retromini some weeks ago. I won’t paste the whole kernel boot here, but you can read it by clicking here.
Since then, I’ve been adding support for the various hardware components of the Retromini in the upstream drivers if they exist, or writting new drivers otherwise.
Here is a list of the hardware components, and their current state:
|PLL and Clocks||Working||Not upstream|
|System timer||Working||Sent upstream|
|Watchdog (reboot)||Working||Sent upstream|
|PWM (backlight)||Working||Sent upstream|
|Pinctrl + GPIO||Working||Sent upstream|
|Memory controller||Working||Not Upstream|
|BCH (error correction for NAND)||Working||Not Upstream|
|USB Ethernet / mass storage||Not working|
|Buttons||Working except SELECT||Upstream|
|ADC (SELECT button)||Not working|
If I find some time in the next few days, I will clean up and push on Github the current git tree I’m working on.
Some things I thought I’d share:
- The JZ4725B SoC used by the Retromini is actually newer than the JZ4740. Some hardware blocks are more similar to the JZ4770 than the JZ4740.
- The RTC does not retain the date across reboots. This sucks, as I won’t be able to play Pokémon games then, as they rely a lot on time. Maybe a hardware modification could make it work?
- The buttons are for the most part GPIO-mapped. The R button is not available when serial logging is enabled, it uses the same pin as RX. Also, for some reason the SELECT button is not GPIO-mapped, but connected to the Analog-to-Digital Converter (ADC). Whoever thought it was a good idea, should burn in hell.
That’s all folks!