public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot-Users] USB custodian repo updates
@ 2007-06-06 10:49 Markus Klotzbücher
  2007-06-09 16:39 ` Matthias Fuchs
  2007-08-07 20:48 ` [U-Boot-Users] USB PULL Request Markus Klotzbücher
  0 siblings, 2 replies; 6+ messages in thread
From: Markus Klotzbücher @ 2007-06-06 10:49 UTC (permalink / raw)
  To: u-boot

Dear List,

The following changes since commit 09444143670c9c2243cb7aba9f70b3713d33bed1:
  Markus Klotzbuecher (1):
        Change duplicate usb_cpu_init_fail to usb_board_init_fail

are found in the git repository at:

  git://www.denx.de/git/u-boot-usb.git

Markus Klotzbuecher (4):
      USB/OHCI: endianness cleanup in the generic ohci driver
      USB: ohci fixes and cleanup for mpc5xxx and IceCube board config
      USB: ohci fixes and cleanup for ppc4xx and yosemite board.
      TRAB, USB: update trab board configuration for use of generic ohci driver

Rodolfo Giometti (2):
      ISP116x: delay for crappy USB keys
      Files include/linux/byteorder/{big,little}_endian.h define

Zhang Wei (3):
      USB event poll support
      USB PCI-OHCI, interrupt pipe and usb event poll support
      Add USB PCI-OHCI, USB keyboard and event poll support to the

 README                        |    3 +
 common/usb_kbd.c              |    6 +-
 cpu/mpc5xxx/usb.c             |   54 ++++++
 cpu/ppc4xx/Makefile           |    2 +-
 cpu/ppc4xx/usb.c              |   50 ++++++
 doc/README.generic_usb_ohci   |   49 ++++--
 drivers/isp116x-hcd.c         |    1 +
 drivers/usb_ohci.c            |  386 ++++++++++++++++++++++++++++++-----------
 drivers/usb_ohci.h            |   12 +-
 drivers/usbtty.c              |    6 +-
 include/configs/IceCube.h     |    9 +-
 include/configs/MPC8641HPCN.h |   13 ++
 include/configs/trab.h        |    3 +-
 include/configs/yosemite.h    |    1 +
 include/usb.h                 |    1 +
 15 files changed, 462 insertions(+), 134 deletions(-)
 create mode 100644 cpu/mpc5xxx/usb.c
 create mode 100644 cpu/ppc4xx/usb.c


This also contains a big endianness cleanup which introduces two new
config options:

CFG_OHCI_BE_CONTROLLER: The ohci controller is big endian
CFG_OHCI_SWAP_REG_ACCESS: For PCI, do byte swapping for register
accesses.

I successfully tested these changes on arm (trab board), ppc4xx
(yosemite) and mpc5xxx (lite5200b).

If no problems show up, i'll ask Wolfgang to pull in about two weeks
(this time really).

Viele Gr??e / Best regards

Markus Klotzb?cher

--
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de

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

* [U-Boot-Users] USB custodian repo updates
  2007-06-06 10:49 [U-Boot-Users] USB custodian repo updates Markus Klotzbücher
@ 2007-06-09 16:39 ` Matthias Fuchs
  2007-06-12  8:24   ` Markus Klotzbücher
  2007-08-07 20:48 ` [U-Boot-Users] USB PULL Request Markus Klotzbücher
  1 sibling, 1 reply; 6+ messages in thread
From: Matthias Fuchs @ 2007-06-09 16:39 UTC (permalink / raw)
  To: u-boot

Hi Markus,

good work. I gave it a try on our PLU405 board (405EP) with a PCI attached 
OHCI controller (ISP1561). I had to add a offset to the dma'ed addresses, 
so that the USB controller can access the correct locations in RAM. 

CONFIG_PCI_CONFIG_HOST_BRIDGE must be defined and the pciconfighost variable
must be set. After this, RAM is accessible at PCI address 0x8000000. I modified 
drivers/usb_ohci.c to support this offset (CFG_USB_OHCI_DMA_BASE).

I am not sure if there is a better way to get PCI OHCI working with a 405 CPU.
U-Boot does not setup the PLB/PCI bridge so that the RAM is accessible at 
PCI address 0.

Here is my patch for discussion:

diff --git a/drivers/usb_ohci.c b/drivers/usb_ohci.c
index 3cef576..943e37d 100644
--- a/drivers/usb_ohci.c
+++ b/drivers/usb_ohci.c
@@ -81,7 +81,7 @@
  * e.g. PCI controllers need this
  */
 #ifdef CFG_OHCI_SWAP_REG_ACCESS
-# define readl(a) __swap_16(*((vu_long *)(a)))
+# define readl(a) __swap_32(*((vu_long *)(a)))
 # define writel(a, b) (*((vu_long *)(b)) = __swap_32((vu_long)a))
 #else
 # define readl(a) (*((vu_long *)(a)))
@@ -93,9 +93,13 @@
 #ifdef CONFIG_PCI_OHCI
 static struct pci_device_id ohci_pci_ids[] = {
 	{0x10b9, 0x5237},	/* ULI1575 PCI OHCI module ids */
+	{0x1131, 0x1561},	/* ISP1561 PCI OHCI module ids */
 	/* Please add supported PCI OHCI controller ids here */
 	{0, 0}
 };
+#ifndef CFG_USB_OHCI_DMA_BASE
+# define CFG_USB_OHCI_DMA_BASE 0
+#endif
 #endif
 
 #ifdef DEBUG
@@ -631,7 +635,7 @@ static int ep_link (ohci_t *ohci, ed_t *edi)
 	case PIPE_CONTROL:
 		ed->hwNextED = 0;
 		if (ohci->ed_controltail == NULL) {
-			writel (ed, &ohci->regs->ed_controlhead);
+			writel (CFG_USB_OHCI_DMA_BASE + (u32)ed, &ohci->regs->ed_controlhead);
 		} else {
 			ohci->ed_controltail->hwNextED = m32_swap ((unsigned long)ed);
 		}
@@ -647,7 +651,7 @@ static int ep_link (ohci_t *ohci, ed_t *edi)
 	case PIPE_BULK:
 		ed->hwNextED = 0;
 		if (ohci->ed_bulktail == NULL) {
-			writel (ed, &ohci->regs->ed_bulkhead);
+			writel (CFG_USB_OHCI_DMA_BASE + (u32)ed, &ohci->regs->ed_bulkhead);
 		} else {
 			ohci->ed_bulktail->hwNextED = m32_swap ((unsigned long)ed);
 		}
@@ -721,7 +725,7 @@ static int ep_unlink (ohci_t *ohci, ed_t *edi)
 				ohci->hc_control &= ~OHCI_CTRL_CLE;
 				writel (ohci->hc_control, &ohci->regs->control);
 			}
-			writel (m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_controlhead);
+			writel (CFG_USB_OHCI_DMA_BASE + m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_controlhead);
 		} else {
 			ed->ed_prev->hwNextED = ed->hwNextED;
 		}
@@ -738,7 +742,7 @@ static int ep_unlink (ohci_t *ohci, ed_t *edi)
 				ohci->hc_control &= ~OHCI_CTRL_BLE;
 				writel (ohci->hc_control, &ohci->regs->control);
 			}
-			writel (m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_bulkhead);
+			writel (CFG_USB_OHCI_DMA_BASE + m32_swap (*((__u32 *)&ed->hwNextED)), &ohci->regs->ed_bulkhead);
 		} else {
 			ed->ed_prev->hwNextED = ed->hwNextED;
 		}
@@ -790,7 +794,7 @@ static ed_t * ep_add_ed (struct usb_device *usb_dev, unsigned long pipe,
 		ed->hwINFO = m32_swap (OHCI_ED_SKIP); /* skip ed */
 		/* dummy td; end of td list for ed */
 		td = td_alloc (usb_dev);
-		ed->hwTailP = m32_swap ((unsigned long)td);
+		ed->hwTailP = m32_swap (CFG_USB_OHCI_DMA_BASE + (unsigned long)td);
 		ed->hwHeadP = ed->hwTailP;
 		ed->state = ED_UNLINK;
 		ed->type = usb_pipetype (pipe);
@@ -836,7 +840,7 @@ static void td_fill (ohci_t *ohci, unsigned int info,
 	td_pt->hwNextTD = 0;
 
 	/* fill the old dummy TD */
-	td = urb_priv->td [index] = (td_t *)(m32_swap (urb_priv->ed->hwTailP) & ~0xf);
+	td = urb_priv->td [index] = (td_t *)((m32_swap (urb_priv->ed->hwTailP)-CFG_USB_OHCI_DMA_BASE) & ~0xf);
 
 	td->ed = urb_priv->ed;
 	td->next_dl_td = NULL;
@@ -853,12 +857,16 @@ static void td_fill (ohci_t *ohci, unsigned int info,
 		data = 0;
 
 	td->hwINFO = m32_swap (info);
-	td->hwCBP = m32_swap ((unsigned long)data);
+	if (len) {
+		td->hwCBP = m32_swap (CFG_USB_OHCI_DMA_BASE + (unsigned long)data);
+	} else {
+		td->hwCBP = 0;
+	}
 	if (data)
-		td->hwBE = m32_swap ((unsigned long)(data + len - 1));
+		td->hwBE = m32_swap (CFG_USB_OHCI_DMA_BASE + (unsigned long)(data + len - 1));
 	else
 		td->hwBE = 0;
-	td->hwNextTD = m32_swap ((unsigned long)td_pt);
+	td->hwNextTD = m32_swap (CFG_USB_OHCI_DMA_BASE + (unsigned long)td_pt);
 
 	/* append to queue */
 	td->ed->hwTailP = td->hwNextTD;
@@ -949,7 +957,11 @@ static void dl_transfer_length(td_t * td)
 
 	tdINFO = m32_swap (td->hwINFO);
 	tdBE   = m32_swap (td->hwBE);
+	if (tdBE)
+		tdBE -= CFG_USB_OHCI_DMA_BASE;
 	tdCBP  = m32_swap (td->hwCBP);
+	if (tdCBP)
+		tdCBP -= CFG_USB_OHCI_DMA_BASE;
 
 
 	if (!(usb_pipetype (lurb_priv->pipe) == PIPE_CONTROL &&
@@ -975,10 +987,10 @@ static td_t * dl_reverse_done_list (ohci_t *ohci)
 	td_t *td_list = NULL;
 	urb_priv_t *lurb_priv = NULL;
 
-	td_list_hc = m32_swap (ohci->hcca->done_head) & 0xfffffff0;
+	td_list_hc = (m32_swap(ohci->hcca->done_head) - CFG_USB_OHCI_DMA_BASE) & 0xfffffff0;
 	ohci->hcca->done_head = 0;
 
-	while (td_list_hc) {
+	while (td_list_hc && (td_list_hc != CFG_USB_OHCI_DMA_BASE)) {
 		td_list = (td_t *)td_list_hc;
 
 		if (TD_CC_GET (m32_swap (td_list->hwINFO))) {
@@ -1001,7 +1013,7 @@ static td_t * dl_reverse_done_list (ohci_t *ohci)
 
 		td_list->next_dl_td = td_rev;
 		td_rev = td_list;
-		td_list_hc = m32_swap (td_list->hwNextTD) & 0xfffffff0;
+		td_list_hc = (m32_swap (td_list->hwNextTD) - CFG_USB_OHCI_DMA_BASE) & 0xfffffff0;
 	}
 	return td_list;
 }
@@ -1646,7 +1658,8 @@ static int hc_start (ohci_t * ohci)
 	writel (0, &ohci->regs->ed_controlhead);
 	writel (0, &ohci->regs->ed_bulkhead);
 
-	writel ((__u32)ohci->hcca, &ohci->regs->hcca); /* a reset clears this */
+        /* a reset clears this */
+	writel (CFG_USB_OHCI_DMA_BASE + (__u32)ohci->hcca, &ohci->regs->hcca);
 
 	fminterval = 0x2edf;
 	writel ((fminterval * 9) / 10, &ohci->regs->periodicstart);
diff --git a/include/configs/PLU405.h b/include/configs/PLU405.h
index d02c39b..e309369 100644
--- a/include/configs/PLU405.h
+++ b/include/configs/PLU405.h
@@ -65,6 +65,7 @@
 				CFG_CMD_DHCP	| \
 				CFG_CMD_PCI	| \
 				CFG_CMD_IRQ	| \
+				CFG_CMD_USB	| \
 				CFG_CMD_IDE	| \
 				CFG_CMD_FAT	| \
 				CFG_CMD_ELF	| \
@@ -450,4 +451,13 @@
 #define PLLMR1_DEFAULT	 PLLMR1_133_66_66_33
 #endif
 
+#define CONFIG_USB_OHCI_NEW            1
+#define CONFIG_PCI_OHCI                1
+#define CFG_OHCI_SWAP_REG_ACCESS       1
+#define CFG_USB_OHCI_MAX_ROOT_PORTS    15
+#define CFG_USB_OHCI_SLOT_NAME         "ohci_pci"
+#define CONFIG_USB_STORAGE             1
+/* RAM is seen at 0x8000000 from the PCI bus */
+#define CFG_USB_OHCI_DMA_BASE          0x80000000
+
 #endif	/* __CONFIG_H */

Regards
Matthias

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

* [U-Boot-Users] USB custodian repo updates
  2007-06-09 16:39 ` Matthias Fuchs
@ 2007-06-12  8:24   ` Markus Klotzbücher
  0 siblings, 0 replies; 6+ messages in thread
From: Markus Klotzbücher @ 2007-06-12  8:24 UTC (permalink / raw)
  To: u-boot

Hi Matthias,

Matthias Fuchs <matthias.fuchs@esd-electronics.com> writes:

> good work. I gave it a try on our PLU405 board (405EP) with a PCI attached 
> OHCI controller (ISP1561). I had to add a offset to the dma'ed addresses, 
> so that the USB controller can access the correct locations in RAM. 

Ok.

> CONFIG_PCI_CONFIG_HOST_BRIDGE must be defined and the pciconfighost variable
> must be set. After this, RAM is accessible at PCI address 0x8000000. I modified 
> drivers/usb_ohci.c to support this offset (CFG_USB_OHCI_DMA_BASE).
>
> I am not sure if there is a better way to get PCI OHCI working with a 405 CPU.
> U-Boot does not setup the PLB/PCI bridge so that the RAM is accessible at 
> PCI address 0.

And I think that we shouldn't force such a restriction. While your patch
doesn't actually augment readability ;-) i guess this is the price we
pay for supporting various controllers in one driver.

Could you resend your patch against the updated usb git repo and
including a Signed-off line? 

Best regards

Markus Klotzb?cher

--
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de

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

* [U-Boot-Users] USB PULL Request
  2007-06-06 10:49 [U-Boot-Users] USB custodian repo updates Markus Klotzbücher
  2007-06-09 16:39 ` Matthias Fuchs
@ 2007-08-07 20:48 ` Markus Klotzbücher
  2007-08-09 21:17   ` Wolfgang Denk
  1 sibling, 1 reply; 6+ messages in thread
From: Markus Klotzbücher @ 2007-08-07 20:48 UTC (permalink / raw)
  To: u-boot

Dear Wolfgang,

Please pull from the master branch at

git://www.denx.de/git/u-boot-usb.git

which (still) contains the following changes:

Markus Klotzb?cher <mk@denx.de> writes:

> The following changes since commit 09444143670c9c2243cb7aba9f70b3713d33bed1:
>   Markus Klotzbuecher (1):
>         Change duplicate usb_cpu_init_fail to usb_board_init_fail
>
> are found in the git repository at:
>
>   git://www.denx.de/git/u-boot-usb.git
>
> Markus Klotzbuecher (4):
>       USB/OHCI: endianness cleanup in the generic ohci driver
>       USB: ohci fixes and cleanup for mpc5xxx and IceCube board config
>       USB: ohci fixes and cleanup for ppc4xx and yosemite board.
>       TRAB, USB: update trab board configuration for use of generic ohci driver
>
> Rodolfo Giometti (2):
>       ISP116x: delay for crappy USB keys
>       Files include/linux/byteorder/{big,little}_endian.h define
>
> Zhang Wei (3):
>       USB event poll support
>       USB PCI-OHCI, interrupt pipe and usb event poll support
>       Add USB PCI-OHCI, USB keyboard and event poll support to the
>
>  README                        |    3 +
>  common/usb_kbd.c              |    6 +-
>  cpu/mpc5xxx/usb.c             |   54 ++++++
>  cpu/ppc4xx/Makefile           |    2 +-
>  cpu/ppc4xx/usb.c              |   50 ++++++
>  doc/README.generic_usb_ohci   |   49 ++++--
>  drivers/isp116x-hcd.c         |    1 +
>  drivers/usb_ohci.c            |  386 ++++++++++++++++++++++++++++++-----------
>  drivers/usb_ohci.h            |   12 +-
>  drivers/usbtty.c              |    6 +-
>  include/configs/IceCube.h     |    9 +-
>  include/configs/MPC8641HPCN.h |   13 ++
>  include/configs/trab.h        |    3 +-
>  include/configs/yosemite.h    |    1 +
>  include/usb.h                 |    1 +
>  15 files changed, 462 insertions(+), 134 deletions(-)
>  create mode 100644 cpu/mpc5xxx/usb.c
>  create mode 100644 cpu/ppc4xx/usb.c

Thanks and sorry everyone this took so long.

Viele Gr??e / Best regards

Markus Klotzb?cher

--
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de

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

* [U-Boot-Users] USB PULL Request
  2007-08-07 20:48 ` [U-Boot-Users] USB PULL Request Markus Klotzbücher
@ 2007-08-09 21:17   ` Wolfgang Denk
  2007-08-10 17:06     ` Jon Loeliger
  0 siblings, 1 reply; 6+ messages in thread
From: Wolfgang Denk @ 2007-08-09 21:17 UTC (permalink / raw)
  To: u-boot

In message <87lkcnjcjo.fsf@denx.de> you wrote:
> Dear Wolfgang,
> 
> Please pull from the master branch at
> 
> git://www.denx.de/git/u-boot-usb.git

Done. Thanks.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
G's Third Law:             In spite of all evidence  to  the  contra-
ry,  the  entire  universe  is composed of only two basic substances:
magic and bullshit.
H's Dictum:                There is no magic ...

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

* [U-Boot-Users] USB PULL Request
  2007-08-09 21:17   ` Wolfgang Denk
@ 2007-08-10 17:06     ` Jon Loeliger
  0 siblings, 0 replies; 6+ messages in thread
From: Jon Loeliger @ 2007-08-10 17:06 UTC (permalink / raw)
  To: u-boot

On Thu, 2007-08-09 at 16:17, Wolfgang Denk wrote:
> In message <87lkcnjcjo.fsf@denx.de> you wrote:
> > Dear Wolfgang,
> > 
> > Please pull from the master branch at
> > 
> > git://www.denx.de/git/u-boot-usb.git
> 
> Done. Thanks.

Yeah!  Thank you, both!

jdl

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

end of thread, other threads:[~2007-08-10 17:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-06 10:49 [U-Boot-Users] USB custodian repo updates Markus Klotzbücher
2007-06-09 16:39 ` Matthias Fuchs
2007-06-12  8:24   ` Markus Klotzbücher
2007-08-07 20:48 ` [U-Boot-Users] USB PULL Request Markus Klotzbücher
2007-08-09 21:17   ` Wolfgang Denk
2007-08-10 17:06     ` Jon Loeliger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox