Communication Processor Update Package
Communication Processor update files are stored in a .tar.gz encrypted within a CpUp file, encrypted into a SPKG contained within Development kit (DEM or PDEL) PUP files.
Every Playstation Update Package (PUP) up to version 0.996.090 ship with 2 distinct CpUp files of the same version for platforms ES1 and ES2 (and later) respectively. Every TOOL PUP since 1.00 only contains a single CpUp.
CpUp file is made of a header followed by a data area.
|0x0||u32||Magic "CpUp" byte-reversed ("pUpC")|
|0x4||u32||Version. Ex: 01 00 03 01 (22.214.171.124)|
|0x8||u64||Reserved. Always zeroed.|
|0x10||u32||Unknown. Always 0x01000000. Maybe CpUp format version or type.|
|0x14||u32||Size. Full CpUp size. 0x10 aligned.|
|0x18||u32||Header size. Always 0x20.|
|0x1C||u32||Unpacked data size. tar.gz size.|
|EOF-0x100||0x100||RSA Encrypted AES-128-CBC KeyBlob. 0x00-0x10 = IV, 0x10-0x20 = Key, 0x20-0x34 = Sha1|
CP board id
- DEM-3000H has CP board GCP-001 (0-835-185-02) -> CP board id 3
- DEM-3000L has CP board GCP-002 (0-851-147-03) -> CP board id 4
- DEM-3000P has CP board GCP-002 (0-851-147-07) -> CP board id 4
- PDEL-100x has CP board GCP-002 (1-884-532-11) -> CP board id 4
Here are the known CP firmware versions:
|CP Version||PUP System Software Version||CP Platform||cpupdate.bin SHA256|
|0.9.1.0||0.940 internal-0.940.050 external||ES1||7452fadcd867861bf5c852f8019814fd063ea46276391234e4a3b38ef4473352|
|0.9.1.0||0.940 internal-0.940.050 external||ES2||de98625e0bb2410c9e3aa775b6968cfdfeebdbe186b4af29c8ce620d29b9a68d|
|0.9.5.1||0.990.030 internal-0.990.140 external||ES1||aef385dd3651b94df6ab61a6ae5578e2f0e5361efabb08ca243734a2e463348e|
|0.9.5.1||0.990.030 internal-0.990.140 external||ES2||fc47823201ba6ce2b4010db64ec4001fc807166c1a3a732629abedcbd6c94afd|
|126.96.36.199||1.030 / PDEL-1001 Recovery||ES2||d863715a2733aca58f8ec17d96079ba3150d31df35738a3e287739babdd161e4|
Kernel Boot Loader logs
The Kernel Boot Loader and Non-Secure Kernel Boot Loader respectively reference the current CP version in their bootlogs (the version issued by KBL appears in the console output). This follows the following standard:
Starting PSP2 Kernel Boot Loader [0x%08x]: %d...revision : %d.build date : %s.....cp info. : bid.%x ver.%04x
Starting PSP2 Kernel Boot Loader (Non-secure) [0x%08x]: %d...BOOTSW.......%d: 0x%08x....: CP time...: CP bid & version
Where bid. is the Board id and ver. is the CP firmware version For example "bid.4 ver.1301" stands for board id 4, CP version 1301
In NSKBL format the information is logged in the following format: "0x00041301 [0x00041301]: CP bid & version" where 0x0004 is the mask for bid (Board id 4) and 0x1301 is the mask for version (Version 1301).
This version information appear to most likely be read from KBL Param#DIP Switches.
You can get additional information by using the sdk's psp2ctrl info command. Information is displayed as such:
DEM-3000H in normal mode
CP: BoardVersion: 3 PackageVersion: 0.9.6.0 RecoveryPackageVersion: 0.9.2.0 ProtocolVersion: 188.8.131.52 Flags: 0x0
DEM-3000H in recovery mode
CP: BoardVersion: 3 PackageVersion: 0.9.6.0 RecoveryPackageVersion: 0.9.2.0 ProtocolVersion: 184.108.40.206 Flags: 0x1
DEM-3000L in normal mode
CP: BoardVersion: 4 PackageVersion: 220.127.116.11 RecoveryPackageVersion: 0.9.6.4 ProtocolVersion: 18.104.22.168 Flags: 0x0
DEM-3000L in recovery mode: MISSING
PDEL-1001 in normal mode
CP: BoardVersion: 4 PackageVersion: 22.214.171.124 RecoveryPackageVersion: 126.96.36.199 ProtocolVersion: 188.8.131.52 Flags: 0x0
PDEL-1001 in recovery mode
CP: BoardVersion: 4 PackageVersion: 184.108.40.206 RecoveryPackageVersion: 220.127.116.11 ProtocolVersion: 18.104.22.168 Flags: 0x1
Note: The flag exposed in the above examples is the recovery mode flag, while the flag is set to 0x1, recovery mode is active and the CP is running from the recovery bank.
The Communication Processor is updated through the use of the SceDeci4pCpup kernel module.
The Communication Processor on PS Vita Development units is not downgradable within normal operations (even when downgrading the unit itself using a PUP). It may be possible to downgrade by using the psp2ctrl recover-cp cpupdate.bin command while in recovery mode where cpupdate.bin is a CPUP of a version equal or higher to the RecoveryPackageVersion, it may also be possible to downgrade from the vita side by patching or bypassing the version check performed by SceDeci4pCpup.
CP Recovery Mode
In the event that the CP becomes unresponsive, a special recovery mode exists. To enter this mode you need to press the "init" button (physically located at the bottom of the CP) while the AC is plugged in. The CP will then reboot into recovery mode (the LED will turn blue, then green). If your unit is connected, you will get disconnected from TM server until you reconnect the USB cable. You may still experience timeouts when running the psp2ctrl info command, if so your SDK binaries might not be compatible with the version used in the recovery bank and you may need to use older ones.
While in recovery mode, until the AC gets disconnected, the CP will be running its recovery package firmware. While this essentially acts as a downgrade, the version located in the active bank will not change. The version reported by the CP is not the running version but rather the version that is currently flashed in the normal/active bank. It is therefore not possible to downgrade a unit by updating to a PUP while in recovery mode because the version reported will still be higher than the CPUP present inside the PUP.
While this does not permanently downgrades your CP firmware, this is however useful in the attempts of triggering a possible vulnerability that would have been patched on a later revision.