RE: gadget framework data alignment

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

 



Vikram

> -----Original Message-----
> From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Pandita, Vikram
> Sent: Tuesday, December 15, 2009 9:53 PM
> To: Gadiyar, Anand; Alan Stern; Matthieu CASTET
> Cc: linux-usb@xxxxxxxxxxxxxxx; David Brownell
> Subject: RE: gadget framework data alignment
> 
> 
> 
> >-----Original Message-----
> >From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Gadiyar,
> >Anand
> >Sent: Tuesday, December 15, 2009 10:10 AM
> >To: Alan Stern; Matthieu CASTET
> >Cc: linux-usb@xxxxxxxxxxxxxxx; David Brownell
> >Subject: RE: gadget framework data alignment
> >
> >Alan Stern wrote:
> >> On Tue, 15 Dec 2009, Matthieu CASTET wrote:
> >>
> >> > Hi,
> >> >
> >> >
> >> > I am wondering about using dma with gadget.
> >> >
> >> > From what I understand gadget function can put anything in req->buf.
> >> > That is the case for u_ether that puts skb->data.
> >> >
> >> > But if the driver wants to do dma they need a buffer aligned on a
> cache
> >> > boundary (to clean/invalidate/flush buffer).
> >> >
> >> > Who should do the job ?
> >> > - Gadget function should provide "provide DMA-safe buffers" like in
> spi
> >> > subsystem ?
> >> > - Driver need to copy the data in a safe buffer.
> >>
> >> Buffers should be allocated by calling kmalloc() or equivalent
> >> functions.  These routines always return addresses that are
> >> cacheline-aligned on architectures which require it.
> >>
> >
> >For g_ether, the buffers are allocated using kmalloc(), but the
> >networking code seems to move the data in the buffer out by 2
> >bytes, and passes this unaligned address down to the gadget driver.
> >
> >The MUSB controller in the beagleboard could handle these unaligned
> >DMA address, but looks like newer MUSB controllers don't seem to
> >like this.
> 
> I would split this problem into two parts:
> 
> RX g-ether buffers:
> 	The offset by 2 gets taken care if we override NET_IP_ALIGN to 4.
> 	(Refer: include/linux/skbuff.h)
> 	Seems this macro is for this specific purpose and works,
> 	it's a different thing where to override in code (probably in arch
> specific system.h file)

By overriding NET_IP_ALIGN to 4 in arch/arm/include/asm/system.h, It is impacting other things also. Such as basic Ethernet is not working. 
I tried the values 0 and 4 in skb_reserve for RX g_ether buffers. Both are working fine.

So we should use some different macro for this purpose.

> 
> TX g-ether buffers
> 	Tx buffers still come unaligned by offset 2 and just changing
> NET_IP_ALIGN to 4 does not help.
> 
> >
> >- Anand
> >--
> >To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> >the body of a message to majordomo@xxxxxxxxxxxxxxx
> >More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux