video and usb driver (rk3588)

Michael Grunditz michael.grunditz at gmail.com
Fri Jan 20 12:27:12 CET 2023


On Thu, 19 Jan 2023 at 17:04, Michael Grunditz
<michael.grunditz at gmail.com> wrote:
>
> >
> > It might be easier to (1) calculate both the start offset and the end
> > offset, then (2) truncate the start offset to the cache-line size, (3)
> > round the end offset to the cache-line size, (4) calculate the size
> > argument by subtracting the start from the end offset.
> >
> > Regarding (2), when calculating the end offset via surface.w()*rect.y2()
> > + rect.x2(), it will refer to the pixel at the lower-right corner of the
> > dirty rectangle. You have to add 1 to this offset value, so that the
> > subsequent subtraction yields the number of covered pixels, not the
> > difference. E.g., think of a rectangle of only one pixel where p1 == p2.
> > Here we want to flush the cache line around this pixel. The difference
> > between the start and end offsets would be zero. But the number of
> > covered pixels is one.
>
> I have tried with 16,32 and 64. Same result. Movement y wise makes
> traces with mouse and bigger artifacts for windows.
> These sorts of things are really my weak spot.
>
> int a=0;
>                     int r=0;
>                     a=64;
>                     Genode::addr_t invalid =
> (rect.x1()+(rect.y1()*(size.w())))*sizeof(Pixel);
>                     log("unaligned invalid: ",invalid);
>
>                     invalid = invalid&~63;
>
>                     Genode::addr_t endoffset  =
> (1+(size.w()*rect.y2())+ rect.x2())*sizeof(Pixel);
>                     log("endoffset: ",endoffset);
>
>                     r = endoffset%a;
>                     endoffset = r? endoffset + (a - r) : endoffset;
>                     log("invalid: ",invalid);
>                     log("invalidz: ",endoffset);
>
>                     Genode::addr_t xxx = (Genode::addr_t)surface.addr();
>
>         cache_clean_invalidate_data(xxx+invalid,endoffset-invalid);

I have tested with full screen invalidate. It doesn't look pretty when
moving a window.. but mouse pointer
is ok. I have tried the below. Result: No traces if moving up , left
or right. Down , traces. So the start address
 is wrong, probably.

cache_clean_invalidate_data(xxx+invalid,(size.count()*sizeof(Pixel))-invalid);



More information about the users mailing list