Messages in this thread | | | Subject | RE: [PATCHv4] DMAEngine: Define interleaved transfer request api | Date | Tue, 18 Oct 2011 07:44:05 -0700 | From | "Bounine, Alexandre" <> |
| |
On Tue, Oct 18, 2011 at 4:38 AM, Jassi Brar <jaswinder.singh@linaro.org> wrote: > > On 18 October 2011 13:56, Vinod Koul <vinod.koul@intel.com> wrote: > > On Tue, 2011-10-18 at 14:00 +0530, Jassi Brar wrote: > >> On 18 October 2011 13:12, Russell King <rmk@arm.linux.org.uk> wrote: > >> > On Tue, Oct 18, 2011 at 11:15:29AM +0530, Jassi Brar wrote: > >> >> On 18 October 2011 02:37, Bounine, Alexandre > <Alexandre.Bounine@idt.com> wrote: > >> >> > With item #1 above being a separate topic, I may have a problem > with #2 > >> >> > as well: dma_addr_t is sized for the local platform and not > guaranteed > >> >> > to be a 64-bit value (which may be required by a target). > >> >> > Agree with #3 (if #1 and #2 work). > >> >> > > >> >> Perhaps simply change dma_addr_t to u64 in dmaengine.h alone ? > >> > > >> > That's just an idiotic suggestion - there's no other way to put > that. > >> > Let's have some sanity here. > >> > > >> Yeah, I am not proud of the workaround, so I only probed the option. > >> I think I need to explain myself. > >> > >> The case here is that even a 32-bit RapidIO host could ask transfer > against > >> 64-bit address space on a remote device. And vice versa 64->32. > > I thought RIO address were always 64 + 2 bits, irrespective of what > the > > host system is... > > > No, not always. RIO address could be 32, 48 or 64... with the role > extra 2 bits > not very clear. RapidIO specification defines three possible address sizes for Processing Elements: 34, 50 and 66 bits.
There is no any special meaning for upper 2 bits that do not fit into traditional 32- and 64-bit sizes and the best way to deal with them is just forget this "+2" notion.
Processing Elements report their ability to support (generate and decode) specified address field sizes (with 34-bit address support being mandatory for all PEs).
Even a platform with dma_size_t = 32 bit may be capable to generate RIO requests with all RIO address ranges defined by RIO specification. E.g., any platform that has PCI Express with one or more Tsi721. Required RIO request address size will be defined by remote target mapping/implementation.
Using dma_memcopy API does not fit well into RIO system model because one of memory locations is outside of local memory map. This maybe a source or destination buffer.
Within the existing DMA API only dma_slave fits well into RIO model but it is unable to pass additional information that does not fit into MEM<->PORT model.
Alex.
| |