All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements
@ 2012-10-22 21:39 Allen Martin
  2012-10-22 21:39 ` [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard Allen Martin
  2012-10-22 21:59 ` [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Stephen Warren
  0 siblings, 2 replies; 7+ messages in thread
From: Allen Martin @ 2012-10-22 21:39 UTC (permalink / raw)
  To: u-boot

Change usb_kbd driver to obey alignment requirements for USB DMA on
the buffer used for data transfer.  This is necessary for
architectures that enable dcache and enable USB DMA.

Signed-off-by: Allen Martin <amartin@nvidia.com>
---
 common/usb_kbd.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/common/usb_kbd.c b/common/usb_kbd.c
index 19f01db..cfc1281 100644
--- a/common/usb_kbd.c
+++ b/common/usb_kbd.c
@@ -28,6 +28,7 @@
 #include <malloc.h>
 #include <stdio_dev.h>
 #include <asm/byteorder.h>
+#include <linux/compiler.h>
 
 #include <usb.h>
 
@@ -106,17 +107,17 @@ static const unsigned char usb_kbd_num_keypad[] = {
 	(USB_KBD_NUMLOCK | USB_KBD_CAPSLOCK | USB_KBD_SCROLLLOCK)
 
 struct usb_kbd_pdata {
+	uint8_t		new[8];
+	uint8_t		old[8];
+
 	uint32_t	repeat_delay;
 
 	uint32_t	usb_in_pointer;
 	uint32_t	usb_out_pointer;
 	uint8_t		usb_kbd_buffer[USB_KBD_BUFFER_LEN];
 
-	uint8_t		new[8];
-	uint8_t		old[8];
-
 	uint8_t		flags;
-};
+} __aligned(USB_DMA_MINALIGN);
 
 /* Generic keyboard event polling. */
 void usb_kbd_generic_poll(void)
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard
  2012-10-22 21:39 [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Allen Martin
@ 2012-10-22 21:39 ` Allen Martin
  2012-10-22 21:56   ` Stephen Warren
  2012-10-22 21:59 ` [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Stephen Warren
  1 sibling, 1 reply; 7+ messages in thread
From: Allen Martin @ 2012-10-22 21:39 UTC (permalink / raw)
  To: u-boot

Enable USB keyboard for the springbank variant of seaboard

Signed-off-by: Allen Martin <amartin@nvidia.com>
---
 include/configs/seaboard.h       |    5 ++++-
 include/configs/tegra20-common.h |    5 +++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h
index 0727a4c..9e27050 100644
--- a/include/configs/seaboard.h
+++ b/include/configs/seaboard.h
@@ -33,6 +33,9 @@
 #define CONFIG_TPS6586X_POWER
 #define CONFIG_TEGRA_CLOCK_SCALING
 
+/* Enable USB keyboard */
+#define CONFIG_USB_KEYBOARD
+
 #include "tegra20-common.h"
 
 /* Enable fdt support for Seaboard. Flash the image in u-boot-dtb.bin */
@@ -99,7 +102,7 @@
 #define CONFIG_KEYBOARD
 
 #undef TEGRA_DEVICE_SETTINGS
-#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc\0" \
+#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc,usbkbd\0" \
 				"stdout=serial\0" \
 				"stderr=serial\0"
 
diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h
index d7d6dc3..1448888 100644
--- a/include/configs/tegra20-common.h
+++ b/include/configs/tegra20-common.h
@@ -102,6 +102,11 @@
 #define CONFIG_EHCI_IS_TDI
 #define CONFIG_EHCI_DCACHE
 
+#ifdef CONFIG_USB_KEYBOARD
+#define CONFIG_SYS_USB_EVENT_POLL
+#define CONFIG_PREBOOT			"usb start"
+#endif /* CONFIG_USB_KEYBOARD */
+
 /* Total I2C ports on Tegra20 */
 #define TEGRA_I2C_NUM_CONTROLLERS	4
 
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard
  2012-10-22 21:39 ` [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard Allen Martin
@ 2012-10-22 21:56   ` Stephen Warren
  2012-10-22 22:58     ` Allen Martin
  0 siblings, 1 reply; 7+ messages in thread
From: Stephen Warren @ 2012-10-22 21:56 UTC (permalink / raw)
  To: u-boot

On 10/22/2012 03:39 PM, Allen Martin wrote:
> Enable USB keyboard for the springbank variant of seaboard

This sounds nice!

> diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h

>  #undef TEGRA_DEVICE_SETTINGS
> -#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc\0" \
> +#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc,usbkbd\0" \
>  				"stdout=serial\0" \
>  				"stderr=serial\0"

Rather than duplicating this everywhere (and I imagine now that this
support works, most Tegra boards will want to turn on USB keyboard),
can't we do something automatic in tegra-common-post.h, like:

#ifdef CONFIG_TEGRA_KEYBOARD
#define STDIN_KBD_KBC ",tegra-kbc"
#else
#define STDIN_KBD_KBC ""
#endif

#ifdef CONFIG_USB_KEYBOARD
#define STDIN_KBD_USB ",usbkbd"
#else
#define STDIN_KBD_USB ""
#endif

#define TEGRA_DEVICE_SETTINGS \
	"stdin=serial" STDIN_KBD_KBC STDIN_KBD_USB "\" \
	...

By the way, does tegra-kbc work now/yet? The last time I tried it, I
don't think it did.

> diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h

> +#ifdef CONFIG_USB_KEYBOARD
> +#define CONFIG_SYS_USB_EVENT_POLL
> +#define CONFIG_PREBOOT			"usb start"
> +#endif /* CONFIG_USB_KEYBOARD */

Similarly, we could also e.g. turn on CONFIG_KEYBOARD whenever
CONFIG_TEGRA_KEYBOARD is turned on, and perhaps a bunch of other similar
things, like moving much of the partition/filesystem/command/... support
into the Tegra common files. That would be something for another patch
though.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements
  2012-10-22 21:39 [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Allen Martin
  2012-10-22 21:39 ` [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard Allen Martin
@ 2012-10-22 21:59 ` Stephen Warren
  2012-10-22 22:35   ` Allen Martin
  1 sibling, 1 reply; 7+ messages in thread
From: Stephen Warren @ 2012-10-22 21:59 UTC (permalink / raw)
  To: u-boot

On 10/22/2012 03:39 PM, Allen Martin wrote:
> Change usb_kbd driver to obey alignment requirements for USB DMA on
> the buffer used for data transfer.  This is necessary for
> architectures that enable dcache and enable USB DMA.

> diff --git a/common/usb_kbd.c b/common/usb_kbd.c

>  struct usb_kbd_pdata {
> +	uint8_t		new[8];
> +	uint8_t		old[8];
> +
>  	uint32_t	repeat_delay;
>  
>  	uint32_t	usb_in_pointer;
>  	uint32_t	usb_out_pointer;
>  	uint8_t		usb_kbd_buffer[USB_KBD_BUFFER_LEN];
>  
> -	uint8_t		new[8];
> -	uint8_t		old[8];
> -
>  	uint8_t		flags;
> -};
> +} __aligned(USB_DMA_MINALIGN);

Surely you need to edit the malloc() call in usb_kbd_probe() instead of
adding __aligned to the type; does the alignment on the type really get
propagated into malloc(), or as custom code at the call-site somehow?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements
  2012-10-22 21:59 ` [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Stephen Warren
@ 2012-10-22 22:35   ` Allen Martin
  0 siblings, 0 replies; 7+ messages in thread
From: Allen Martin @ 2012-10-22 22:35 UTC (permalink / raw)
  To: u-boot

On Mon, Oct 22, 2012 at 02:59:43PM -0700, Stephen Warren wrote:
> On 10/22/2012 03:39 PM, Allen Martin wrote:
> > Change usb_kbd driver to obey alignment requirements for USB DMA on
> > the buffer used for data transfer.  This is necessary for
> > architectures that enable dcache and enable USB DMA.
> 
> > diff --git a/common/usb_kbd.c b/common/usb_kbd.c
> 
> >  struct usb_kbd_pdata {
> > +	uint8_t		new[8];
> > +	uint8_t		old[8];
> > +
> >  	uint32_t	repeat_delay;
> >  
> >  	uint32_t	usb_in_pointer;
> >  	uint32_t	usb_out_pointer;
> >  	uint8_t		usb_kbd_buffer[USB_KBD_BUFFER_LEN];
> >  
> > -	uint8_t		new[8];
> > -	uint8_t		old[8];
> > -
> >  	uint8_t		flags;
> > -};
> > +} __aligned(USB_DMA_MINALIGN);
> 
> Surely you need to edit the malloc() call in usb_kbd_probe() instead of
> adding __aligned to the type; does the alignment on the type really get
> propagated into malloc(), or as custom code at the call-site somehow?

Yes, you're right.  I misread the code and thought it came from a
static allocation.  I got reassured when I added the change and the
cache flush alignment warnings went away, but I guess these alignment
things are always a crapshoot anyway.

I'll fix, thanks for finding that.

-Allen
-- 
nvpublic

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard
  2012-10-22 21:56   ` Stephen Warren
@ 2012-10-22 22:58     ` Allen Martin
  2012-10-22 23:13       ` Stephen Warren
  0 siblings, 1 reply; 7+ messages in thread
From: Allen Martin @ 2012-10-22 22:58 UTC (permalink / raw)
  To: u-boot

On Mon, Oct 22, 2012 at 02:56:44PM -0700, Stephen Warren wrote:
> On 10/22/2012 03:39 PM, Allen Martin wrote:
> > Enable USB keyboard for the springbank variant of seaboard
> 
> This sounds nice!
> 
> > diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h
> 
> >  #undef TEGRA_DEVICE_SETTINGS
> > -#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc\0" \
> > +#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc,usbkbd\0" \
> >  				"stdout=serial\0" \
> >  				"stderr=serial\0"
> 
> Rather than duplicating this everywhere (and I imagine now that this
> support works, most Tegra boards will want to turn on USB keyboard),
> can't we do something automatic in tegra-common-post.h, like:
> 
> #ifdef CONFIG_TEGRA_KEYBOARD
> #define STDIN_KBD_KBC ",tegra-kbc"
> #else
> #define STDIN_KBD_KBC ""
> #endif
> 
> #ifdef CONFIG_USB_KEYBOARD
> #define STDIN_KBD_USB ",usbkbd"
> #else
> #define STDIN_KBD_USB ""
> #endif
> 
> #define TEGRA_DEVICE_SETTINGS \
> 	"stdin=serial" STDIN_KBD_KBC STDIN_KBD_USB "\" \
> 	...

The only issue I see with that is TEGRA_DEVICE_SETTINGS can be used by
boards today to add additional environment as well as override
stdin/stdout/stderr.  I don't think any boards actually do though, so
we could just make a TEGRA_EXTRA_DEVICE_SETTINGS if that need comes
up. 

We might as well just put this directly in CONFIG_EXTRA_ENV_SETTINGS
because if TEGRA_DEVICE_SETTINGS is private to tegra-common-post.h
there's really no reason for it to exist.

> 
> By the way, does tegra-kbc work now/yet? The last time I tried it, I
> don't think it did.

It was working at one point, but I haven't tried it recently.

> 
> > diff --git a/include/configs/tegra20-common.h b/include/configs/tegra20-common.h
> 
> > +#ifdef CONFIG_USB_KEYBOARD
> > +#define CONFIG_SYS_USB_EVENT_POLL
> > +#define CONFIG_PREBOOT			"usb start"
> > +#endif /* CONFIG_USB_KEYBOARD */
> 
> Similarly, we could also e.g. turn on CONFIG_KEYBOARD whenever
> CONFIG_TEGRA_KEYBOARD is turned on, and perhaps a bunch of other similar
> things, like moving much of the partition/filesystem/command/... support
> into the Tegra common files. That would be something for another patch
> though.

Sure, looks like there's pleny of room for commonizing more stuff from
the board confgs and triggering off tegra feature defines like
CONFIG_TEGRA_I2C, CONFIG_TEGRA_MMC, CONFIG_USB_EHCI_TEGRA,
CONFIG_TEGRA_KEYBOARD. 

I'll look at making a separate patch for that.

-Allen
-- 
nvpublic

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard
  2012-10-22 22:58     ` Allen Martin
@ 2012-10-22 23:13       ` Stephen Warren
  0 siblings, 0 replies; 7+ messages in thread
From: Stephen Warren @ 2012-10-22 23:13 UTC (permalink / raw)
  To: u-boot

On 10/22/2012 04:58 PM, Allen Martin wrote:
> On Mon, Oct 22, 2012 at 02:56:44PM -0700, Stephen Warren wrote:
>> On 10/22/2012 03:39 PM, Allen Martin wrote:
>>> Enable USB keyboard for the springbank variant of seaboard
>>
>> This sounds nice!
>>
>>> diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h
>>
>>>  #undef TEGRA_DEVICE_SETTINGS
>>> -#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc\0" \
>>> +#define TEGRA_DEVICE_SETTINGS	"stdin=serial,tegra-kbc,usbkbd\0" \
>>>  				"stdout=serial\0" \
>>>  				"stderr=serial\0"
>>
>> Rather than duplicating this everywhere (and I imagine now that this
>> support works, most Tegra boards will want to turn on USB keyboard),
>> can't we do something automatic in tegra-common-post.h, like:
>>
>> #ifdef CONFIG_TEGRA_KEYBOARD
>> #define STDIN_KBD_KBC ",tegra-kbc"
>> #else
>> #define STDIN_KBD_KBC ""
>> #endif
>>
>> #ifdef CONFIG_USB_KEYBOARD
>> #define STDIN_KBD_USB ",usbkbd"
>> #else
>> #define STDIN_KBD_USB ""
>> #endif
>>
>> #define TEGRA_DEVICE_SETTINGS \
>> 	"stdin=serial" STDIN_KBD_KBC STDIN_KBD_USB "\" \
>> 	...
> 
> The only issue I see with that is TEGRA_DEVICE_SETTINGS can be used by
> boards today to add additional environment as well as override
> stdin/stdout/stderr.  I don't think any boards actually do though, so
> we could just make a TEGRA_EXTRA_DEVICE_SETTINGS if that need comes
> up. 

The common file could always only #define TEGRA_DEVICE_SETTINGS if the
board didn't already define a custom version.

> We might as well just put this directly in CONFIG_EXTRA_ENV_SETTINGS
> because if TEGRA_DEVICE_SETTINGS is private to tegra-common-post.h
> there's really no reason for it to exist.

It may be useful to keep it; I separated out MEM_LAYOUT_ENV_SETTINGS and
BOOTCMDS_COMMON for example just so that EXTRA_ENV_SETTINGS could be
built out of a few smaller and hence more manageable pieces.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-10-22 23:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-22 21:39 [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Allen Martin
2012-10-22 21:39 ` [U-Boot] [PATCH 2/2] tegra: seaboard: Enable USB keyboard Allen Martin
2012-10-22 21:56   ` Stephen Warren
2012-10-22 22:58     ` Allen Martin
2012-10-22 23:13       ` Stephen Warren
2012-10-22 21:59 ` [U-Boot] [PATCH 1/2] USB: make usb_kbd obey USB DMA alignment requirements Stephen Warren
2012-10-22 22:35   ` Allen Martin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.