Fix the USB code that was destroying my shell.
authorGerd Zellweger <mail@gerdzellweger.com>
Mon, 8 Dec 2014 17:11:10 +0000 (18:11 +0100)
committerGerd Zellweger <mail@gerdzellweger.com>
Wed, 10 Dec 2014 09:20:31 +0000 (10:20 +0100)
Writing random ASCII character in general is not a good idea.
Now I write a space/backspace combination which at least does
not set my shell to 'garbage output mode'.
The whole thing is suboptimal as we don't want USB set-up code
in the kernel and we don't want to do waiting using printf.
We should really re-write those wait functions to use deferred events...

include/usb/usb.h
kernel/arch/omap44xx/init.c
usr/drivers/usb/usb_manager/usb_manager.c

index 5e25f9f..9406350 100644 (file)
@@ -122,7 +122,7 @@ typedef struct usb_status usb_status_t;
 #define USB_DELAY_RECOVERY 10\r
 \r
 #define USB_WAIT(ms) \\r
-    for (uint32_t wait_i = 0; wait_i < 4*(ms); wait_i++) {printf("%c", 0xE);};\r
+    for (uint32_t wait_i = 0; wait_i < 2*(ms); wait_i++) { printf("%c", 0x20); printf("%c", 0x08); };\r
 \r
 \r
 /*\r
index 2f804c4..7325bae 100644 (file)
@@ -476,8 +476,9 @@ static void usb_power_on(void)
             &sysctrl_padconf_core_base, gpio62_mux);
 
     /* delay to give the hardware time to reset TODO: propper delay*/
-    for (int j = 0; j < 4000; j++) {
-        printf("%c", 0xE);
+    for (int j = 0; j < 2000; j++) {
+        printf("%c", 0x20);
+        printf("%c", 0x08);
     }
 
     hsusb_init();
@@ -490,8 +491,9 @@ static void usb_power_on(void)
     /* enable the USB HUB */
     omap44xx_gpio_setdataout_wr(&gpio_2_base, (1UL << HSUSB_HUB_RESET));
 
-    for (int j = 0; j < 4000; j++) {
-        printf("%c", 0xE);
+    for (int j = 0; j < 2000; j++) {
+        printf("%c", 0x20);
+        printf("%c", 0x08);
     }
 
     printf("  > performing softreset on the USB PHY\n");
index 89bfd49..187b8b3 100644 (file)
@@ -346,8 +346,6 @@ static usb_error_t pandaboard_checkup(uintptr_t base, int argc, char *argv[])
 
     /* wait till the request is done */
     while (*((volatile uint32_t*) (tmp + 0x00A4)) & (1 << 31)) {
-        printf("%c", 0xE);
-
     }
 
     /* compare the result */
@@ -366,7 +364,6 @@ static usb_error_t pandaboard_checkup(uintptr_t base, int argc, char *argv[])
 
     /* wait till request is done */
     while (*((volatile uint32_t*) (tmp + 0x00A4)) & (1 << 31)) {
-        printf("%c", 0xE);
     }
 
     /* compare the values */