As I said we need to support this resolution under Windows CE, having a working linux implementation would be useful to check how the DCU or other components are initialized.
At the FTF 2014 in Dallas people from Freescale confirmed that this resolution/refresh rate should be supported by the Vybrid DCU, but I found this document that states that 800x600 is the maximum resolution supported.
http://cache.freescale.com/files/microcontrollers/doc/app_note/AN4651.pdf
On the other side all the calculations on this document are done considering merging 6 layer per pixel (maximum supported number of overlapping layers).
I don't need that.
One layer can be enough, two would be perfect.
Taking numbers from that document the bandwidth between DCU and DDR is 1GB/s (less than 1.6GB/s DDR bandwidth). Using one layer will require 1024x768x4(32bpp)x60(refresh rate)~=189MB/s, less than 20% of the available bandwidth.
For six layers this would exceed memory bandwidth (~1.2GB), but the only method suggested by the application note to avoid this is to reduce pixel clock.
Why reducing the number of enabled layers does not change the figures about required bandwidth?
What happens if I enable just one or two layers?
I tried to set BLEND_ITER in the DCU_MODE register to 6 (max layers), 4 (suggested if you enable also DDR_MODE that is what I do), 2 (minimum value), but nothing changes.
I reset all the layer configuration registers to 0, clearing the enable bit (EN=31) in CTRLDESCLX_3 register for each layer but the one I'm currently using (layer 0).
The DCU still loads data from 6 layers!?
Where does it takes the address, since all registers are set to 0?
It loads 6 copies of the same data from DDR (the only enabled layer that has a meaninful memory address configured in CTRLDESCRX_3?