PS3 Linux OtherOS++ Cold Boot Custom Firmware (CFW) by Glevand
Following up on his previous work, today PlayStation 3 developer glevand has made available a Linux Cold Boot 3.55 Custom Firmware (CFW) OtherOS++ for PS3 Slim users via Gitbrew that loads into Petitboot with a single button press.
To quote: Hmm, it would be really nice to cold boot Linux on SLIM. The problem is this. On SLIM we patch GameOS loader and add the OtherOS++ support.
The OtherOS++ loader reads Petitboot from VFLASH and loads it in case the OtherOS flag is set. But at cold boot we cannot access VFLASH immediately, that doesn't work, i tried even to implement retries with sleep calls, no chance.
And today i took a look at GuestOS loader in LPAR1 process 9 (LV1 3.15) and noticed the following interesting thing. It doesn't matter on old OtherOS if we want to cold boot OtherOS or GameOS, GameOS is loaded always at cold boot first.
Maybe it works the following way. GameOS is always loaded first and then it checks OtherOS flag, if it is set then it reboots again and OtherOS is loaded. And because it is a warm boot now, OtherOS can read VFLASH successfully on NOR FATs.
Update: The theory is not quite right. It is true that initial GuestOS loader loads GameOS at cold boot first. It creates LPAR2, loads LV2 image into memory of LPAR2 but LPAR2 ist not executed immediately.
After loading GameOS, the initial Guest OS loader waits until FLASH is ready and then checks the boot GuestOS id, and if it's NOT equal to the id of GameOS then LPAR2 is detructed. When process 9 receives the LPAR2 shutdown signal, then it loads the boot GuestOS and executes it.
Hmm, maybe found a solution which could allow us to cold boot linux. There is a device in LPAR1, /dev/sd_detector. It allows processes in LPAR1 to get storage events like VFLASH is ready and others. We could use it in OtherOS++ loader and wait for this event.
On Linux, storage events are processed by storage notifier thread, see here: lxr.free-electrons.com/source/arch/powerpc/platforms/ ps3/device-init.c#L701
Found a possible solution but i need someone with a HW flasher so we could test it first without bricks. Get in touch with me if you want to help getting cold boot working.
YAY Got cold boot working on PS3 Slim My theory was right, i patched the initial GOS loader in process 9 of LPAR1 and it works now. I can cold boot my petitboot with just pressing power button once.
Yay, i'm even able to cold boot my Linux with the PS button on my PS3 controller. I added the new option --patch-lv1-otheros-plus-plus-cold-boot-fix to patch_lv1.tcl
I tested it with OFW but you could try it with CFW too i guess. I used OFW 3.55 and it worked on Linux.