[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] [GSoC] Co-Processors Update #10

From: Alfredo Muniz
Subject: Re: [Discuss-gnuradio] [GSoC] Co-Processors Update #10
Date: Wed, 20 Aug 2014 00:45:13 -0700

On Mon, Aug 18, 2014 at 1:42 PM, Alfredo Muniz <address@hidden> wrote:
Expect one more update to mark the finishing of documentation on Friday.

Philip requested that I do a summary of my findings before then so here goes. 

If we want GNU Radio to support a multitude of coprocessors we need to be able to offer both contiguous memory allocation support and scatter gather list support (get_user_pages method). I think we all agree that whatever goes into runtime must be general and not device specific since we don't want to keep changing things when a new device comes out. 

Contiguous memory allocation support is needed for devices such as the ARM<==>DSP in the keystone2 because the DSP doesn't have an MMU or IOMMU. There is support for scatter-gather lists but is highly abstracted by the multicore navigator that its seems like a different thing all together. TI uses CMEM, Nvidia uses NVMAP, Qualcomm uses PMEM, Android uses ION,  which essentially do the same thing but for different devices. I went down the CMEM road because thats what people were recommending on the e2e forums for zero copy work on the keystone2. I think we should be able to support things like this and I think we can with minor additions to runtime. Integrating a memory allocator into GNU Radio will require that most of device specific things/memory allocator specific things be done in the OOT which I think is doable. All we need to do to GNU Radio is change the buffer location in memory. 

Scatter gather list support is needed for devices such as the Zynq where the AXI DMA supports scatter gather lists. First we pass our buffer from userspace to the kernel module using ioctl. The module runs get_user_pages on it which essentially gives us the translation from userspace virtual to kernelspace physical without a need to copy to kernel (kernelspace virtual). We can then use the scatter-gather api in the kernel to send to the bus address. The reason for scatter-gather is that the buffer is large so spans many pages that are not contiguous in memory so devices that support scatter-gather make it appear contiguous in memory. This is an overall better solution as its pretty much the standard to include scatter-gather dma support (its just very abstracted in the keystone2). Integrating this into GNU Radio is possible with the changes I have already made to runtime on my GNU Radio branch. I can probably write a module and test this myself before the conference since I have a zedboard and experience with developing on the zynq and friends with experience developing on the zynq aka you guys plus I've probably read LDD3 too many times. 

So thats my recommendation for GNU Radio after three full months of working on this. I guess after my last documentation update on Friday and of course the conference, I'll be updating during the coproc calls. 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]