SPRUGR9H November 2010 – April 2015 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , 66AK2L06 , AM5K2E02 , AM5K2E04 , SM320C6678-HIREL , TMS320C6652 , TMS320C6654 , TMS320C6655 , TMS320C6657 , TMS320C6670 , TMS320C6671 , TMS320C6672 , TMS320C6674 , TMS320C6678
The Queue Proxy is a module that provides atomic queue pushes across the cores in KeyStone architecture devices. The purpose of the proxy is to accept a Que N Reg C write followed by a Que N Reg D write without allowing another core to inject its own push. The method of pushing to the Queue Proxy is identical to writing to the Que N Reg C and D registers contained in the Queue Management Region, except at a different address (the same offset within the Queue Proxy Region). Each core is connected to the proxy and the proxy identifies it using its VBUS master ID. Simultaneous writes by two or more cores are arbitrated by round-robin. Queue pushes using only Reg D do not need to use the proxy and may write to the Queue Management Region. All registers in the Queue Proxy Region are write only, and reads will return 0 (so there is no queue popping from this region). Because Que N Reg A and B are read only, they are not supported in the Queue Proxy.
Another important consideration is use of the Queue Proxy in a multitasking environment. The proxy cannot differentiate writes having different sources within the same core (such as multiple threads). If an application pushes to queues using Reg C and D, and multiple threads may push to the same queue, the application must protect these pushes using a resource management method such as critical sections, semaphore, etc.