No subject


Fri Jan 23 11:48:37 CET 2009


enable/disable Nand Controller, and bit 6 is used for enable/disable usb
host controller.

so, I guess, this is why "usb start"+"usb stop" will cause "nand xxx" to
failure. because "usb stop" disable the Nand Controll Clock.

the following patch was tested on a s3c2440 board. and It seems work.

Is this correct ? I saw these piece of code been there for so a long time
(from u-boot-1.1.5). I am not very sure now.

Thank you and sorry for my poor english.

/WX

===============================================================================
diff --git a/cpu/arm920t/s3c24x0/usb.c b/cpu/arm920t/s3c24x0/usb.c
index e468ed0..abae409 100644
--- a/cpu/arm920t/s3c24x0/usb.c
+++ b/cpu/arm920t/s3c24x0/usb.c
@@ -46,7 +46,7 @@ int usb_cpu_init(void)
  /*
  * Enable USB host clock.
  */
- writel(readl(&clk_power->CLKCON) | (1 << 4), &clk_power->CLKCON);
+ writel(readl(&clk_power->CLKCON) | (1 << 6), &clk_power->CLKCON);

  return 0;
 }
@@ -54,15 +54,14 @@ int usb_cpu_init(void)
 int usb_cpu_stop(void)
 {
  struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
- /* may not want to do this */
- writel(readl(&clk_power->CLKCON) & ~(1 << 4), &clk_power->CLKCON);
+ writel(readl(&clk_power->CLKCON) & ~(1 << 6), &clk_power->CLKCON);
  return 0;
 }

 int usb_cpu_init_fail(void)
 {
  struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
- writel(readl(&clk_power->CLKCON) & ~(1 << 4), &clk_power->CLKCON);
+ writel(readl(&clk_power->CLKCON) & ~(1 << 6), &clk_power->CLKCON);
  return 0;
 }

diff --git a/cpu/arm920t/s3c24x0/usb_ohci.c b/cpu/arm920t/s3c24x0/usb_ohci.c
index 5aa8d64..2e6818d 100644
--- a/cpu/arm920t/s3c24x0/usb_ohci.c
+++ b/cpu/arm920t/s3c24x0/usb_ohci.c
@@ -55,14 +55,14 @@
 #define min_t(type, x, y) \
  ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; })

-#undef DEBUG
+#define DEBUG
 #ifdef DEBUG
 #define dbg(format, arg...) printf("DEBUG: " format "\n", ## arg)
 #else
 #define dbg(format, arg...) do {} while(0)
 #endif /* DEBUG */
 #define err(format, arg...) printf("ERROR: " format "\n", ## arg)
-#undef SHOW_INFO
+#define SHOW_INFO
 #ifdef SHOW_INFO
 #define info(format, arg...) printf("INFO: " format "\n", ## arg)
 #else
@@ -1672,7 +1672,7 @@ int usb_lowlevel_init(void)
  /*
  * Enable USB host clock.
  */
- clk_power->CLKCON |= (1 << 4);
+ clk_power->CLKCON |= (1 << 6);

  memset(&gohci, 0, sizeof(struct ohci));
  memset(&urb_priv, 0, sizeof(struct urb_priv));
@@ -1709,7 +1709,7 @@ int usb_lowlevel_init(void)
  if (hc_reset(&gohci) < 0) {
  hc_release_ohci(&gohci);
  /* Initialization failed */
- clk_power->CLKCON &= ~(1 << 4);
+ clk_power->CLKCON &= ~(1 << 6);
  return -1;
  }

@@ -1722,7 +1722,7 @@ int usb_lowlevel_init(void)
  err("can't start usb-%s", gohci.slot_name);
  hc_release_ohci(&gohci);
  /* Initialization failed */
- clk_power->CLKCON &= ~(1 << 4);
+ clk_power->CLKCON &= ~(1 << 6);
  return -1;
  }
 #ifdef DEBUG
@@ -1748,7 +1748,7 @@ int usb_lowlevel_stop(void)
  /* call hc_release_ohci() here ? */
  hc_reset(&gohci);
  /* may not want to do this */
- clk_power->CLKCON &= ~(1 << 4);
+ clk_power->CLKCON &= ~(1 << 6);
  return 0;
 }
 ======================================================================================

--0016364179a51b7d66048bae03c8--


More information about the U-Boot mailing list