Syncs are not necessary in this case.
authorCafe <cafe@not.applicable>
Wed, 2 Aug 2017 02:50:45 +0000 (02:50 +0000)
committerCafe <cafe@not.applicable>
Wed, 2 Aug 2017 02:50:45 +0000 (02:50 +0000)
From #biopenly:

<cafe-> Does anyone understand how memory coherency works on this? In
particular, when exactly is a sync necessary?

<HdkR> Should only need to flush out to memory from the CPU

<cafe-> HdkR: So as long as I don't set MALI_MEM_CACHED_CPU, I don't
need to sync?

<cafe-> (That's consistent with what the blob does, but I feel shaky
about not syncing...)

<cafe-> (What does MALI_MEM_COHERENT_[LOCAL|SYSTEM] do then, if oerent
by default...)

<cafe-> HdkR: According to panwrap, the blob allocates some region
CACHED_CPU, some CACHED_CPU | COHERENT_LOCAL, none COHERENT_SYSTEM
though, and mostly none of the above. It does not issue syncs except for
the CACHED_CPU regions. It does not appear to use any other sync
mechanism either, although it's possible it does a cache flush not-with
ioctls.

src/memory.c
src/memory.h
src/prototype.c

index fe8ce0e8b4bd173c24f128c3084b9c73a4d48398..35abc2f94de0efe03f0524c3aa9421489a45c3e0 100644 (file)
@@ -31,10 +31,3 @@ void gfree(void* ptr)
        printf("gfree %p\n", ptr);
        /* TODO */
 }
-
-/* Dirty hack but useful for testing */
-
-void sync_cbma(int fd)
-{
-       sync_gpu(fd, (uint8_t*) cbma_top, cbma_top, cbma_bottom - cbma_top);
-}
index de9b7b511299c538c1ba1866f314d597bf39b4b3..06281392887fda9252be116b36001dab6152807d 100644 (file)
@@ -3,4 +3,3 @@
 void init_cbma(int fd);
 void* galloc(size_t sz);
 void gfree(void* ptr);
-void sync_cbma(int fd);
index c04139b0a692d1de736c59fdf0153a1081f03f00..73b64dbe2eee9fc6f8b81e91498c8ce7bee52d51 100644 (file)
@@ -48,14 +48,9 @@ int main()
                        sample_fragment, sizeof(sample_fragment),
                        heap_free_address, scratchpad);
 
-       printf("Fragging...\n");
-
        uint32_t fragment_jc = job_chain_fragment(fd, framebuffer, heap_free_address, scratchpad);
 
        job_chain_replay(fd, tiler_jc, fragment_jc, heap_free_address, framebuffer);
-       printf("Syncing...\n");
-       sync_cbma(fd);
-       printf("Submitting...\n");
        flush_job_queue(fd);
 
        sleep(3);