Hello,
I have an application running on TI C6678 and I am trying to add SRIO communication to this application.
I built and executed on C6678 EVM the SRIO projects provided by TI's platform development kit:
- pdk_C6678_1_1_2_5\packages\ti\drv\srio\example\SRIOMulticoreLoopback
- pdk_C6678_1_1_2_5\packages\ti\drv\srio\test\tput_benchmarking
- pdk_C6678_1_1_2_5\packages\ti\drv\srio\test\Loopback. Details for this project: (i) SRIO Driver uses Application Managed Configuration, (ii) SRIO Driver operates in Polling Mode and (iii) Communication using Raw, Type 11, Non-Blocking sockets.
All tests executed correctly.
Since the Loopback project is very close to my application needs, I applied one change required by my application: I explicitly deployed the buffer descriptors to DDR3, external memory (please note that, according to the map file of the original project, L2 memory is the default location of the buffer descriptors).
With this change, the communication test fails.
Initially, I didn't suspect a caching consistency problem because:
- caching for external memory should be initially disabled
- the original CFG file and the original C files don't seem to enable caching for external memory
However, reading the MAR register 128, I found that caching was enabled for external memory.
Although I don't understand why caching was enabled, I tried to deal with the DDR3 cache consistency:
- Option 1: I added CSL cache consistency calls CACHE_wbL2() after SRIO send and CACHE_invL2() before SRIO receive. It didn't work.
- Option 2: I added CSL cache consistency calls CACHE_wbL2() after SRIO send and CACHE_wbInvL2() before SRIO receive (I assumed that the descriptors used by the receive completion queue might require a write back). It didn't work.
- Option 3: I modified the CFG file to explicitly disable caching for the first DDR3 block: Cache.setMarMeta(0x80000000, 0x1000000, 0). With this change, the communication test executes correctly.
Questions:
1. My application requires that (i) the buffer descriptors are in DDR3 and (ii) DDR3 caching is enabled. As a consequence, Option 3 won't work. Is there a way solve this problem using only CSL cache consistency calls, similar to Options 1 and 2?
2. Somehow related: why is the original CFG file enabling DDR3 caching? I noticed that the generated file srio_test_pe66e.c contains entry ti_sysbios_family_c66_Cache_marvalues__C[128]=0x0D (enable caching).
Attached is the modified CFG file: srio_test.cfg
Thanks,
Sergiu