Hallo
This is absolutely correct. I made some experiments and solved part of problem with l4_cache_clean_data(). I putted it to refresh(int x, int y, int w, int h) (( os/src/server/nitpicker/genode/main.cc +441 )) and anytime, when i called nitpicker->frame buffer()->refresh() i got very good image. (But in my tests i used hardcoded pointer to data with pixels, because pixels[] inside np_test and local_addr was a different ) But, while i dragged image i got again noise on image. if i stopped (i guess refresh happend after stop) and i have again clear image. So, Norman, can You please put cache_clean_data to the right place inside nitpicker for flushing cache pixels on every pixels writing?
In our project we use Chestnut43 board for prototype. This board has 4.3” LCD 480x272 pixels. I get display configuration for this LCD from Linux driver. Display work, picture is drawing, colors are correct. But sometimes window drawn with distortion (normal drawing http://dl.dropbox.com/u/8558928/pic_1.jpg , distorted: http://dl.dropbox.com/u/8558928/pic_2.jpg http://dl.dropbox.com/u/8558928/pic_3.jpg ). I can’t solve this yet. Maybe I have wrong configuration for display controller.
To me this looks like a typical cache artifact. The syscall bindings of Fiasco.OC provide several functions for dealing with caches on ARM platforms (i.e., see 'cache.h'). Those functions are unused by Genode until now because we haven't experienced such artifacts with the PBXA9 platform or Qemu. Maybe you could investigate if these cache-related functions are relevant to your problem and if so, how they could be put to use in a clean way within Genode?