Venezia

The VENEZIA (Vision Enabling Engine / Zen-Inspired Architecture) is a Toshiba original multi-core sub-system which has multiple sets of “MPE (Media Processing Engine)” suitable for image processing and multiple image processing accelerators.

= Description =

The VENEZIA is multi-grain parallellism architecture – application level (multi-core), instruction level (VLIW) and data level (SIMD).

The VENEZIA includes 4 sets of Toshiba original media processing engine “MPE” that enables simultaneous execution of up to four image recognition applications. Each MPE has a Toshiba original 32-bit RISC CPU core MeP-c5 and an image recognition coprocessor IVC2 (the 2nd generation of Image recognition VLIW Coprocessor). The MPE is 3way VLIW machine that can issue up to 3 instructions (one CPU instruction and up to 2 coprocessor instructions). The IVC2 provides SIMD (Single Instruction stream, Multiple Data stream) instructions for simultaneous operations on eight sets of 8-bit data, four sets of 16-bit data, and two sets of 32-bit data and VLIW (Very Long Instruction Word) technology to issue multiple instructions. The IVC2 can execute simultaneously up to 2 SIMD instructions. Since parallel processing of two instructions is enabled, operations on a maximum of 16 sets of 8-bit data can be processed simultaneously.

There are 8 MeP cores that serve as the media co-processor Venezia. The CPU ID register for them are: This means they are MeP c5 cores and are uniquely numbered 48-55.

= On boot time =

Used as a temporary location for secure_kernel.

Interesting test
Clearing this area (PA: 0x1F840000, size: 0x20000) will not load secure_kernel as expected, but will show the shell when resume.

But literally there is no secure_kernel, so a full resume fails and the system does not work properly.

= Features =


 * Toshiba original 32-bit RISC multi-core sub-system
 * Four media processing engines MPE (MPE0, MPE1, MPE2 and MPE3)(*10)
 * Each MPE features
 * 32-bit RISC core MeP-c5
 * 16KB (2-way set-associative) instruction cache and 16KB (2-way set-associative) data cache
 * 64KB (16 KB × 4 banks) data RAM used for efficient image data processing
 * Image recognition VLIW co-processor IVC2. VLIW (Very Long Instruction Word) technology that issues up to three instructions simultaneously (one MeP instruction and up to two IVC2 instructions can be encoded in a 64-bit VLIW code).
 * SIMD (Single Instruction stream, Multiple Data stream) that perform simultaneous operations on eight sets of 8-bit data, four sets of 16-bit data, and two sets of 32-bit data. Each IVC2 can execute simultaneously up to two SIMD instructions. Some SIMD instructions can store 256 bits of operation results in accumulators for high speed carry processing (eg. 8-bit data + 8bit data → 32-bit of accumulator).
 * DMA controller used for transferring the data of data RAM
 * Operating frequency: 266.7 MHz maximum
 * 256KB (4-way set-associative) L2 cache for shared use among the four MPE
 * 2 channels of timer
 * JTAG debug port. Also connected to VENEZIA, so a single ICE supports the control MeP and VENEZIA debugging

= VIP =

VIP stands for Venezia Image Processing. That is why VIP is gated when only audio decoding is active and present when image decoding is active, like when games use SceAvPlayer.

= Suspend / resume =

SceCodecEngineWrapper seems to do some writes to SceVeneziaSpram when doing suspend/resume

= Running Code =

It is easy to run your own MeP code in Venezia. It appears that the code is DMA copied to Venezia's private memory before resetting and executing it.

MeP payload:

ARM kernel module: