linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
@ 2006-11-06 10:35 Nicolas DET
  2006-11-06 19:24 ` Kumar Gala
  0 siblings, 1 reply; 8+ messages in thread
From: Nicolas DET @ 2006-11-06 10:35 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: akpm@osdl.org, linuxppc-embedded

This patch use of_platform device to probe and install OHCI big endian HC.

PS: I did not success to properly inline the file using thrunderbird.

Signed-off-by: Nicolas DET <nd@bplan-gmbh.de>=20
---
--- a/drivers/usb/host/ohci-ppc-of.c=091970-01-01 01:00:00.000000000 +0100
+++ b/drivers/usb/host/ohci-ppc-of.c=092006-11-06 11:10:29.000000000 +0100
@@ -0,0 +1,283 @@
+/*
+ * OHCI HCD (Host Controller Driver) for USB.
+ *
+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
+ * (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net=
>
+ * (C) Copyright 2002 Hewlett-Packard Company
+ * (C) Copyright 2003-2005 MontaVista Software Inc.
+ *=20
+ * Probe and init OHCI Big endian HC from OpenFirmware device tree
+ * Tested on Efika 5k2
+ *
+ * Modified by Dale Farnsworth <dale@farnsworth.org> from ohci-sa1111.c
+ *
+ * This file is licenced under the GPL.
+ */
+
+#include <linux/signal.h>
+
+#include <asm/of_device.h>
+#include <asm/prom.h>
+
+/* configure so an HC device and id are always provided */
+/* always called with process context; sleeping is OK */
+
+/*
+ * usb_hcd_ppc_of_probe - initialize On-Chip HCDs
+ * Context: !in_interrupt()
+ *
+ * Allocates basic resources for this USB host controller.
+ *
+ * Store this function in the HCD's struct pci_driver as probe().
+ */
+static int usb_hcd_ppc_of_probe(const struct hc_driver *driver,
+=09=09=09  struct of_device *dev, int is_bigendian)
+{
+=09int retval;
+=09struct usb_hcd *hcd;
+=09struct ohci_hcd=09*ohci;
+=09struct resource res;
+=09int irq;
+=09int ret;
+
+=09pr_debug("initializing PPC-OF USB Controllern");
+
+=09if ((ret =3D of_address_to_resource(dev->node, 0, &res)) !=3D 0)
+=09=09return ret;
+
+=09hcd =3D usb_create_hcd(driver, &dev->dev, "PPC-OF USB");
+=09if (!hcd)
+=09=09return -ENOMEM;
+
+=09hcd->rsrc_start =3D res.start;
+=09hcd->rsrc_len =3D res.end - res.start + 1;
+
+=09if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
+=09=09pr_debug(__FILE__ ": request_mem_region failedn");
+=09=09retval =3D -EBUSY;
+=09=09goto err1;
+=09}
+
+=09irq =3D irq_of_parse_and_map(dev->node, 0);
+=09if (irq =3D=3D NO_IRQ) {
+=09=09retval =3D -EBUSY;
+=09=09goto err2;
+=09}
+
+=09hcd->regs =3D ioremap(hcd->rsrc_start, hcd->rsrc_len);
+=09if (!hcd->regs) {
+=09=09pr_debug(__FILE__ ": ioremap failedn");
+=09=09retval =3D -ENOMEM;
+=09=09goto err2;
+=09}
+
+=09ohci =3D hcd_to_ohci(hcd);
+=09if (is_bigendian)
+=09=09ohci->flags |=3D OHCI_BIG_ENDIAN;
+
+=09ohci_hcd_init(ohci);
+
+=09retval =3D usb_add_hcd(hcd, irq, 0);
+=09if (retval =3D=3D 0)
+=09=09return retval;
+
+=09pr_debug("Removing PPC-OF USB Controllern");
+
+=09iounmap(hcd->regs);
+ err2:
+=09release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
+ err1:
+ =09usb_put_hcd(hcd);
+=09return retval;
+}
+
+
+/* may be called without controller electrically present */
+/* may be called with controller, bus, and devices active */
+
+/*
+ * usb_hcd_ppc_of_remove - shutdown processing for On-Chip HCDs
+ * @pdev: USB Host Controller being removed
+ * Context: !in_interrupt()
+ *
+ * Reverses the effect of usb_hcd_ppc_of_probe().
+ * It is always called from a thread
+ * context, normally "rmmod", "apmd", or something similar.
+ *
+ */
+static void usb_hcd_ppc_of_remove(struct usb_hcd *hcd,
+=09=09struct of_device *op)
+{
+=09usb_remove_hcd(hcd);
+
+=09pr_debug("stopping PPC-OF USB Controllern");
+
+=09iounmap(hcd->regs);
+=09release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
+=09usb_put_hcd(hcd);
+}
+
+static int __devinit
+ohci_ppc_of_start(struct usb_hcd *hcd)
+{
+=09struct ohci_hcd=09*ohci =3D hcd_to_ohci(hcd);
+=09int=09=09ret;
+
+=09if ((ret =3D ohci_init(ohci)) < 0)
+=09=09return ret;
+
+=09if ((ret =3D ohci_run(ohci)) < 0) {
+=09=09err("can't start %s", ohci_to_hcd(ohci)->self.bus_name);
+=09=09ohci_stop(hcd);
+=09=09return ret;
+=09}
+
+=09return 0;
+}
+
+static const struct hc_driver ohci_ppc_of_hc_driver =3D {
+=09.description =3D=09=09hcd_name,
+=09.hcd_priv_size =3D=09sizeof(struct ohci_hcd),
+
+=09/*
+=09 * generic hardware linkage
+=09 */
+=09.irq =3D=09=09=09ohci_irq,
+=09.flags =3D=09=09HCD_USB11 | HCD_MEMORY,
+
+=09/*
+=09 * basic lifecycle operations
+=09 */
+=09.start =3D=09=09ohci_ppc_of_start,
+=09.stop =3D=09=09=09ohci_stop,
+=09.shutdown =3D =09=09ohci_shutdown,
+
+=09/*
+=09 * managing i/o requests and associated device resources
+=09 */
+=09.urb_enqueue =3D=09=09ohci_urb_enqueue,
+=09.urb_dequeue =3D=09=09ohci_urb_dequeue,
+=09.endpoint_disable =3D=09ohci_endpoint_disable,
+
+=09/*
+=09 * scheduling support
+=09 */
+=09.get_frame_number =3D=09ohci_get_frame,
+
+=09/*
+=09 * root hub support
+=09 */
+=09.hub_status_data =3D=09ohci_hub_status_data,
+=09.hub_control =3D=09=09ohci_hub_control,
+=09.hub_irq_enable =3D=09ohci_rhsc_enable,
+#ifdef=09CONFIG_PM
+=09.bus_suspend =3D=09=09ohci_bus_suspend,
+=09.bus_resume =3D=09=09ohci_bus_resume,
+#endif
+=09.start_port_reset =3D=09ohci_start_port_reset,
+};
+
+
+
+static int ohci_hcd_ppc_of_drv_remove(struct of_device *op)
+{
+=09struct usb_hcd *hcd =3D dev_get_drvdata(&op->dev);
+=09dev_set_drvdata(&op->dev, NULL);
+
+=09usb_hcd_ppc_of_remove(hcd, op);
+=09return 0;
+}
+
+static int ohci_hcd_ppc_of_drv_shutdown(struct of_device *op)
+{
+=09struct usb_hcd *hcd =3D dev_get_drvdata(&op->dev);
+
+        if (hcd->driver->shutdown)
+                hcd->driver->shutdown(hcd);
+
+=09return 0;
+}
+
+/*
+ *
+*/
+
+static struct of_device_id ohci_hcd_ppc_of_match[] =3D {
+#ifdef CONFIG_USB_OHCI_HCD_PPC_OF_BE
+=09{
+=09=09.name =3D "usb",
+=09=09.compatible =3D "ohci-bigendian",
+=09},
+=09{
+=09=09.name =3D "usb",
+=09=09.compatible =3D "ohci-be",
+=09},
+#endif
+#ifdef CONFIG_USB_OHCI_HCD_PPC_OF_LE
+=09{
+=09=09.name =3D "usb",
+=09=09.compatible =3D "ohci-littledian",
+=09},
+=09{
+=09=09.name =3D "usb",
+=09=09.compatible =3D "ohci-le",
+=09},
+#endif
+=09{},
+};
+
+static int __devinit
+ohci_hcd_ppc_of_drv_probe(struct of_device *op, const struct of_device_id =
*match)
+{
+=09struct device_node *dev;
+=09int ret;
+=09int is_bigendian;
+
+=09if (usb_disabled())
+=09=09return -ENODEV;
+
+=09dev =3D op->node;
+=09is_bigendian =3D 0;
+
+=09if ( device_is_compatible(dev, "ohci-bigendian") )
+=09=09is_bigendian =3D 1;
+
+=09if ( device_is_compatible(dev, "ohci-be") )
+=09=09is_bigendian =3D 1;=09
+
+=09ret =3D usb_hcd_ppc_of_probe(&ohci_ppc_of_hc_driver, op, is_bigendian);
+=09return ret;
+}
+
+static struct of_platform_driver ohci_hcd_ppc_of_driver =3D {
+=09.name=09=3D "ppc-of-ohci",
+=09.match_table=09=3D ohci_hcd_ppc_of_match,
+=09.probe=09=09=3D ohci_hcd_ppc_of_drv_probe,
+=09.remove=09=09=3D ohci_hcd_ppc_of_drv_remove,
+=09.shutdown =09=3D ohci_hcd_ppc_of_drv_shutdown,
+#ifdef=09CONFIG_PM
+=09/*.suspend=09=3D ohci_hcd_ppc_soc_drv_suspend,*/
+=09/*.resume=09=3D ohci_hcd_ppc_soc_drv_resume,*/
+#endif
+=09.driver=09=09=3D {
+=09=09.name=09=3D "ppc-of-ohci",
+=09=09.owner=09=3D THIS_MODULE,
+=09},
+};
+
+static int __init ohci_hcd_ppc_of_init(void)
+{
+=09pr_debug(DRIVER_INFO " (PPC OF)n");
+=09pr_debug("block sizes: ed %d td %dn", sizeof(struct ed),
+=09=09=09=09=09=09=09sizeof(struct td));
+=09
+=09return of_register_driver(&ohci_hcd_ppc_of_driver);   =20
+}
+
+static void __exit ohci_hcd_ppc_of_cleanup(void)
+{
+=09of_unregister_driver(&ohci_hcd_ppc_of_driver);
+}
+
+module_init(ohci_hcd_ppc_of_init);
+module_exit(ohci_hcd_ppc_of_cleanup);
--- a/drivers/usb/host/Kconfig=092006-11-01 09:18:56.000000000 +0100
+++ b/drivers/usb/host/Kconfig=092006-11-06 11:10:29.000000000 +0100
@@ -106,6 +106,25 @@ config USB_OHCI_HCD_PPC_SOC
 =09  Enables support for the USB controller on the MPC52xx or
 =09  STB03xxx processor chip.  If unsure, say Y.
=20
+config USB_OHCI_HCD_PPC_OF
+=09bool "OHCI support for PPC USB controller for OpenFirmware platform"
+=09depends on USB_OHCI_HCD && PPC_OF
+=09default y
+=09---help---
+=09  Enables support for the USB controller PowerPC OpenFirmware platform
+
+config USB_OHCI_HCD_PPC_OF_BE
+=09bool "Support big endian HC"
+=09depends on USB_OHCI_HCD_PPC_OF
+=09default y
+=09select USB_OHCI_BIG_ENDIAN
+
+config USB_OHCI_HCD_PPC_OF_LE
+=09bool "Support little endian HC"
+=09depends on USB_OHCI_HCD_PPC_OF
+=09default n
+=09select USB_OHCI_LITTLE_ENDIAN
+
 config USB_OHCI_HCD_PCI
 =09bool "OHCI support for PCI-bus USB controllers"
 =09depends on USB_OHCI_HCD && PCI && (STB03xxx || PPC_MPC52xx)
--- a/drivers/usb/host/ohci-hcd.c=092006-11-01 09:18:56.000000000 +0100
+++ b/drivers/usb/host/ohci-hcd.c=092006-11-06 11:10:29.000000000 +0100
@@ -930,6 +930,10 @@ MODULE_LICENSE ("GPL");
 #include "ohci-ppc-soc.c"
 #endif
=20
+#ifdef CONFIG_USB_OHCI_HCD_PPC_OF
+#include "ohci-ppc-of.c"
+#endif
+
 #if defined(CONFIG_ARCH_AT91RM9200) || defined(CONFIG_ARCH_AT91SAM9261)
 #include "ohci-at91.c"
 #endif
@@ -950,6 +954,8 @@ MODULE_LICENSE ("GPL");
       || defined (CONFIG_ARCH_AT91RM9200)=20
       || defined (CONFIG_ARCH_AT91SAM9261)=20
       || defined (CONFIG_ARCH_PNX4008)=20
+      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_LE)=20
+      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_BE)=20
 =09)
 #error "missing bus glue for ohci-hcd"
 #endif

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

* [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
@ 2006-11-06 11:01 Nicolas DET
  2006-11-06 22:55 ` Benjamin Herrenschmidt
  0 siblings, 1 reply; 8+ messages in thread
From: Nicolas DET @ 2006-11-06 11:01 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: linuxppc-embedded

[-- Attachment #1: Type: text/html, Size: 9868 bytes --]

[-- Attachment #2: Type: text/plain, Size: 8793 bytes --]

This patch use of_platform device to probe and install OHCI big endian HC.

PS: I did not success to properly inline the file using thrunderbird.

Signed-off-by: Nicolas DET <nd@bplan-gmbh.de> 
---
--- a/drivers/usb/host/ohci-ppc-of.c	1970-01-01 01:00:00.000000000 +0100
+++ b/drivers/usb/host/ohci-ppc-of.c	2006-11-06 11:10:29.000000000 +0100
@@ -0,0 +1,283 @@
+/*
+ * OHCI HCD (Host Controller Driver) for USB.
+ *
+ * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
+ * (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
+ * (C) Copyright 2002 Hewlett-Packard Company
+ * (C) Copyright 2003-2005 MontaVista Software Inc.
+ * 
+ * Probe and init OHCI Big endian HC from OpenFirmware device tree
+ * Tested on Efika 5k2
+ *
+ * Modified by Dale Farnsworth <dale@farnsworth.org> from ohci-sa1111.c
+ *
+ * This file is licenced under the GPL.
+ */
+
+#include <linux/signal.h>
+
+#include <asm/of_device.h>
+#include <asm/prom.h>
+
+/* configure so an HC device and id are always provided */
+/* always called with process context; sleeping is OK */
+
+/*
+ * usb_hcd_ppc_of_probe - initialize On-Chip HCDs
+ * Context: !in_interrupt()
+ *
+ * Allocates basic resources for this USB host controller.
+ *
+ * Store this function in the HCD's struct pci_driver as probe().
+ */
+static int usb_hcd_ppc_of_probe(const struct hc_driver *driver,
+			  struct of_device *dev, int is_bigendian)
+{
+	int retval;
+	struct usb_hcd *hcd;
+	struct ohci_hcd	*ohci;
+	struct resource res;
+	int irq;
+	int ret;
+
+	pr_debug("initializing PPC-OF USB Controller\n");
+
+	if ((ret = of_address_to_resource(dev->node, 0, &res)) != 0)
+		return ret;
+
+	hcd = usb_create_hcd(driver, &dev->dev, "PPC-OF USB");
+	if (!hcd)
+		return -ENOMEM;
+
+	hcd->rsrc_start = res.start;
+	hcd->rsrc_len = res.end - res.start + 1;
+
+	if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
+		pr_debug(__FILE__ ": request_mem_region failed\n");
+		retval = -EBUSY;
+		goto err1;
+	}
+
+	irq = irq_of_parse_and_map(dev->node, 0);
+	if (irq == NO_IRQ) {
+		retval = -EBUSY;
+		goto err2;
+	}
+
+	hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
+	if (!hcd->regs) {
+		pr_debug(__FILE__ ": ioremap failed\n");
+		retval = -ENOMEM;
+		goto err2;
+	}
+
+	ohci = hcd_to_ohci(hcd);
+	if (is_bigendian)
+		ohci->flags |= OHCI_BIG_ENDIAN;
+
+	ohci_hcd_init(ohci);
+
+	retval = usb_add_hcd(hcd, irq, 0);
+	if (retval == 0)
+		return retval;
+
+	pr_debug("Removing PPC-OF USB Controller\n");
+
+	iounmap(hcd->regs);
+ err2:
+	release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
+ err1:
+ 	usb_put_hcd(hcd);
+	return retval;
+}
+
+
+/* may be called without controller electrically present */
+/* may be called with controller, bus, and devices active */
+
+/*
+ * usb_hcd_ppc_of_remove - shutdown processing for On-Chip HCDs
+ * @pdev: USB Host Controller being removed
+ * Context: !in_interrupt()
+ *
+ * Reverses the effect of usb_hcd_ppc_of_probe().
+ * It is always called from a thread
+ * context, normally "rmmod", "apmd", or something similar.
+ *
+ */
+static void usb_hcd_ppc_of_remove(struct usb_hcd *hcd,
+		struct of_device *op)
+{
+	usb_remove_hcd(hcd);
+
+	pr_debug("stopping PPC-OF USB Controller\n");
+
+	iounmap(hcd->regs);
+	release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
+	usb_put_hcd(hcd);
+}
+
+static int __devinit
+ohci_ppc_of_start(struct usb_hcd *hcd)
+{
+	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
+	int		ret;
+
+	if ((ret = ohci_init(ohci)) < 0)
+		return ret;
+
+	if ((ret = ohci_run(ohci)) < 0) {
+		err("can't start %s", ohci_to_hcd(ohci)->self.bus_name);
+		ohci_stop(hcd);
+		return ret;
+	}
+
+	return 0;
+}
+
+static const struct hc_driver ohci_ppc_of_hc_driver = {
+	.description =		hcd_name,
+	.hcd_priv_size =	sizeof(struct ohci_hcd),
+
+	/*
+	 * generic hardware linkage
+	 */
+	.irq =			ohci_irq,
+	.flags =		HCD_USB11 | HCD_MEMORY,
+
+	/*
+	 * basic lifecycle operations
+	 */
+	.start =		ohci_ppc_of_start,
+	.stop =			ohci_stop,
+	.shutdown = 		ohci_shutdown,
+
+	/*
+	 * managing i/o requests and associated device resources
+	 */
+	.urb_enqueue =		ohci_urb_enqueue,
+	.urb_dequeue =		ohci_urb_dequeue,
+	.endpoint_disable =	ohci_endpoint_disable,
+
+	/*
+	 * scheduling support
+	 */
+	.get_frame_number =	ohci_get_frame,
+
+	/*
+	 * root hub support
+	 */
+	.hub_status_data =	ohci_hub_status_data,
+	.hub_control =		ohci_hub_control,
+	.hub_irq_enable =	ohci_rhsc_enable,
+#ifdef	CONFIG_PM
+	.bus_suspend =		ohci_bus_suspend,
+	.bus_resume =		ohci_bus_resume,
+#endif
+	.start_port_reset =	ohci_start_port_reset,
+};
+
+
+
+static int ohci_hcd_ppc_of_drv_remove(struct of_device *op)
+{
+	struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
+	dev_set_drvdata(&op->dev, NULL);
+
+	usb_hcd_ppc_of_remove(hcd, op);
+	return 0;
+}
+
+static int ohci_hcd_ppc_of_drv_shutdown(struct of_device *op)
+{
+	struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
+
+        if (hcd->driver->shutdown)
+                hcd->driver->shutdown(hcd);
+
+	return 0;
+}
+
+/*
+ *
+*/
+
+static struct of_device_id ohci_hcd_ppc_of_match[] = {
+#ifdef CONFIG_USB_OHCI_HCD_PPC_OF_BE
+	{
+		.name = "usb",
+		.compatible = "ohci-bigendian",
+	},
+	{
+		.name = "usb",
+		.compatible = "ohci-be",
+	},
+#endif
+#ifdef CONFIG_USB_OHCI_HCD_PPC_OF_LE
+	{
+		.name = "usb",
+		.compatible = "ohci-littledian",
+	},
+	{
+		.name = "usb",
+		.compatible = "ohci-le",
+	},
+#endif
+	{},
+};
+
+static int __devinit
+ohci_hcd_ppc_of_drv_probe(struct of_device *op, const struct of_device_id *match)
+{
+	struct device_node *dev;
+	int ret;
+	int is_bigendian;
+
+	if (usb_disabled())
+		return -ENODEV;
+
+	dev = op->node;
+	is_bigendian = 0;
+
+	if ( device_is_compatible(dev, "ohci-bigendian") )
+		is_bigendian = 1;
+
+	if ( device_is_compatible(dev, "ohci-be") )
+		is_bigendian = 1;	
+
+	ret = usb_hcd_ppc_of_probe(&ohci_ppc_of_hc_driver, op, is_bigendian);
+	return ret;
+}
+
+static struct of_platform_driver ohci_hcd_ppc_of_driver = {
+	.name	= "ppc-of-ohci",
+	.match_table	= ohci_hcd_ppc_of_match,
+	.probe		= ohci_hcd_ppc_of_drv_probe,
+	.remove		= ohci_hcd_ppc_of_drv_remove,
+	.shutdown 	= ohci_hcd_ppc_of_drv_shutdown,
+#ifdef	CONFIG_PM
+	/*.suspend	= ohci_hcd_ppc_soc_drv_suspend,*/
+	/*.resume	= ohci_hcd_ppc_soc_drv_resume,*/
+#endif
+	.driver		= {
+		.name	= "ppc-of-ohci",
+		.owner	= THIS_MODULE,
+	},
+};
+
+static int __init ohci_hcd_ppc_of_init(void)
+{
+	pr_debug(DRIVER_INFO " (PPC OF)\n");
+	pr_debug("block sizes: ed %d td %d\n", sizeof(struct ed),
+							sizeof(struct td));
+	
+	return of_register_driver(&ohci_hcd_ppc_of_driver);    
+}
+
+static void __exit ohci_hcd_ppc_of_cleanup(void)
+{
+	of_unregister_driver(&ohci_hcd_ppc_of_driver);
+}
+
+module_init(ohci_hcd_ppc_of_init);
+module_exit(ohci_hcd_ppc_of_cleanup);
--- a/drivers/usb/host/Kconfig	2006-11-01 09:18:56.000000000 +0100
+++ b/drivers/usb/host/Kconfig	2006-11-06 11:10:29.000000000 +0100
@@ -106,6 +106,25 @@ config USB_OHCI_HCD_PPC_SOC
 	  Enables support for the USB controller on the MPC52xx or
 	  STB03xxx processor chip.  If unsure, say Y.
 
+config USB_OHCI_HCD_PPC_OF
+	bool "OHCI support for PPC USB controller for OpenFirmware platform"
+	depends on USB_OHCI_HCD && PPC_OF
+	default y
+	---help---
+	  Enables support for the USB controller PowerPC OpenFirmware platform
+
+config USB_OHCI_HCD_PPC_OF_BE
+	bool "Support big endian HC"
+	depends on USB_OHCI_HCD_PPC_OF
+	default y
+	select USB_OHCI_BIG_ENDIAN
+
+config USB_OHCI_HCD_PPC_OF_LE
+	bool "Support little endian HC"
+	depends on USB_OHCI_HCD_PPC_OF
+	default n
+	select USB_OHCI_LITTLE_ENDIAN
+
 config USB_OHCI_HCD_PCI
 	bool "OHCI support for PCI-bus USB controllers"
 	depends on USB_OHCI_HCD && PCI && (STB03xxx || PPC_MPC52xx)
--- a/drivers/usb/host/ohci-hcd.c	2006-11-01 09:18:56.000000000 +0100
+++ b/drivers/usb/host/ohci-hcd.c	2006-11-06 11:10:29.000000000 +0100
@@ -930,6 +930,10 @@ MODULE_LICENSE ("GPL");
 #include "ohci-ppc-soc.c"
 #endif
 
+#ifdef CONFIG_USB_OHCI_HCD_PPC_OF
+#include "ohci-ppc-of.c"
+#endif
+
 #if defined(CONFIG_ARCH_AT91RM9200) || defined(CONFIG_ARCH_AT91SAM9261)
 #include "ohci-at91.c"
 #endif
@@ -950,6 +954,8 @@ MODULE_LICENSE ("GPL");
       || defined (CONFIG_ARCH_AT91RM9200) \
       || defined (CONFIG_ARCH_AT91SAM9261) \
       || defined (CONFIG_ARCH_PNX4008) \
+      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_LE) \
+      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_BE) \
 	)
 #error "missing bus glue for ohci-hcd"
 #endif


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

* Re: [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
  2006-11-06 10:35 [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC Nicolas DET
@ 2006-11-06 19:24 ` Kumar Gala
  2006-11-06 23:28   ` Sylvain Munaut
  0 siblings, 1 reply; 8+ messages in thread
From: Kumar Gala @ 2006-11-06 19:24 UTC (permalink / raw)
  To: Nicolas DET; +Cc: akpm@osdl.org, linuxppc-dev, linuxppc-embedded


On Nov 6, 2006, at 4:35 AM, Nicolas DET wrote:

> This patch use of_platform device to probe and install OHCI big  
> endian HC.
>
> PS: I did not success to properly inline the file using thrunderbird.

You really copy the USB maintainers on this.  Also, why bother with  
the Kconfig for USB_OHCI_HCD_PPC_OF_BE/USB_OHCI_HCD_PPC_OF_LE?

- kumar

[snip]

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

* Re: [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
  2006-11-06 11:01 Nicolas DET
@ 2006-11-06 22:55 ` Benjamin Herrenschmidt
  0 siblings, 0 replies; 8+ messages in thread
From: Benjamin Herrenschmidt @ 2006-11-06 22:55 UTC (permalink / raw)
  To: Nicolas DET; +Cc: linuxppc-dev, linuxppc-embedded

On Mon, 2006-11-06 at 12:01 +0100, Nicolas DET wrote:
> This patch use of_platform device to probe and install OHCI big endian HC.
> 
> PS: I did not success to properly inline the file using thrunderbird.

It looks ok to me, inlined and all... make sure you use the "Preformat"
style in thunderbird.

Ben.

> Signed-off-by: Nicolas DET <nd@bplan-gmbh.de> 
> ---
> --- a/drivers/usb/host/ohci-ppc-of.c	1970-01-01 01:00:00.000000000 +0100
> +++ b/drivers/usb/host/ohci-ppc-of.c	2006-11-06 11:10:29.000000000 +0100
> @@ -0,0 +1,283 @@
> +/*
> + * OHCI HCD (Host Controller Driver) for USB.
> + *
> + * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
> + * (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net>
> + * (C) Copyright 2002 Hewlett-Packard Company
> + * (C) Copyright 2003-2005 MontaVista Software Inc.
> + * 
> + * Probe and init OHCI Big endian HC from OpenFirmware device tree
> + * Tested on Efika 5k2
> + *
> + * Modified by Dale Farnsworth <dale@farnsworth.org> from ohci-sa1111.c
> + *
> + * This file is licenced under the GPL.
> + */
> +
> +#include <linux/signal.h>
> +
> +#include <asm/of_device.h>
> +#include <asm/prom.h>
> +
> +/* configure so an HC device and id are always provided */
> +/* always called with process context; sleeping is OK */
> +
> +/*
> + * usb_hcd_ppc_of_probe - initialize On-Chip HCDs
> + * Context: !in_interrupt()
> + *
> + * Allocates basic resources for this USB host controller.
> + *
> + * Store this function in the HCD's struct pci_driver as probe().
> + */
> +static int usb_hcd_ppc_of_probe(const struct hc_driver *driver,
> +			  struct of_device *dev, int is_bigendian)
> +{
> +	int retval;
> +	struct usb_hcd *hcd;
> +	struct ohci_hcd	*ohci;
> +	struct resource res;
> +	int irq;
> +	int ret;
> +
> +	pr_debug("initializing PPC-OF USB Controller\n");
> +
> +	if ((ret = of_address_to_resource(dev->node, 0, &res)) != 0)
> +		return ret;
> +
> +	hcd = usb_create_hcd(driver, &dev->dev, "PPC-OF USB");
> +	if (!hcd)
> +		return -ENOMEM;
> +
> +	hcd->rsrc_start = res.start;
> +	hcd->rsrc_len = res.end - res.start + 1;
> +
> +	if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
> +		pr_debug(__FILE__ ": request_mem_region failed\n");
> +		retval = -EBUSY;
> +		goto err1;
> +	}
> +
> +	irq = irq_of_parse_and_map(dev->node, 0);
> +	if (irq == NO_IRQ) {
> +		retval = -EBUSY;
> +		goto err2;
> +	}
> +
> +	hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
> +	if (!hcd->regs) {
> +		pr_debug(__FILE__ ": ioremap failed\n");
> +		retval = -ENOMEM;
> +		goto err2;
> +	}
> +
> +	ohci = hcd_to_ohci(hcd);
> +	if (is_bigendian)
> +		ohci->flags |= OHCI_BIG_ENDIAN;
> +
> +	ohci_hcd_init(ohci);
> +
> +	retval = usb_add_hcd(hcd, irq, 0);
> +	if (retval == 0)
> +		return retval;
> +
> +	pr_debug("Removing PPC-OF USB Controller\n");
> +
> +	iounmap(hcd->regs);
> + err2:
> +	release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
> + err1:
> + 	usb_put_hcd(hcd);
> +	return retval;
> +}
> +
> +
> +/* may be called without controller electrically present */
> +/* may be called with controller, bus, and devices active */
> +
> +/*
> + * usb_hcd_ppc_of_remove - shutdown processing for On-Chip HCDs
> + * @pdev: USB Host Controller being removed
> + * Context: !in_interrupt()
> + *
> + * Reverses the effect of usb_hcd_ppc_of_probe().
> + * It is always called from a thread
> + * context, normally "rmmod", "apmd", or something similar.
> + *
> + */
> +static void usb_hcd_ppc_of_remove(struct usb_hcd *hcd,
> +		struct of_device *op)
> +{
> +	usb_remove_hcd(hcd);
> +
> +	pr_debug("stopping PPC-OF USB Controller\n");
> +
> +	iounmap(hcd->regs);
> +	release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
> +	usb_put_hcd(hcd);
> +}
> +
> +static int __devinit
> +ohci_ppc_of_start(struct usb_hcd *hcd)
> +{
> +	struct ohci_hcd	*ohci = hcd_to_ohci(hcd);
> +	int		ret;
> +
> +	if ((ret = ohci_init(ohci)) < 0)
> +		return ret;
> +
> +	if ((ret = ohci_run(ohci)) < 0) {
> +		err("can't start %s", ohci_to_hcd(ohci)->self.bus_name);
> +		ohci_stop(hcd);
> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
> +static const struct hc_driver ohci_ppc_of_hc_driver = {
> +	.description =		hcd_name,
> +	.hcd_priv_size =	sizeof(struct ohci_hcd),
> +
> +	/*
> +	 * generic hardware linkage
> +	 */
> +	.irq =			ohci_irq,
> +	.flags =		HCD_USB11 | HCD_MEMORY,
> +
> +	/*
> +	 * basic lifecycle operations
> +	 */
> +	.start =		ohci_ppc_of_start,
> +	.stop =			ohci_stop,
> +	.shutdown = 		ohci_shutdown,
> +
> +	/*
> +	 * managing i/o requests and associated device resources
> +	 */
> +	.urb_enqueue =		ohci_urb_enqueue,
> +	.urb_dequeue =		ohci_urb_dequeue,
> +	.endpoint_disable =	ohci_endpoint_disable,
> +
> +	/*
> +	 * scheduling support
> +	 */
> +	.get_frame_number =	ohci_get_frame,
> +
> +	/*
> +	 * root hub support
> +	 */
> +	.hub_status_data =	ohci_hub_status_data,
> +	.hub_control =		ohci_hub_control,
> +	.hub_irq_enable =	ohci_rhsc_enable,
> +#ifdef	CONFIG_PM
> +	.bus_suspend =		ohci_bus_suspend,
> +	.bus_resume =		ohci_bus_resume,
> +#endif
> +	.start_port_reset =	ohci_start_port_reset,
> +};
> +
> +
> +
> +static int ohci_hcd_ppc_of_drv_remove(struct of_device *op)
> +{
> +	struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
> +	dev_set_drvdata(&op->dev, NULL);
> +
> +	usb_hcd_ppc_of_remove(hcd, op);
> +	return 0;
> +}
> +
> +static int ohci_hcd_ppc_of_drv_shutdown(struct of_device *op)
> +{
> +	struct usb_hcd *hcd = dev_get_drvdata(&op->dev);
> +
> +        if (hcd->driver->shutdown)
> +                hcd->driver->shutdown(hcd);
> +
> +	return 0;
> +}
> +
> +/*
> + *
> +*/
> +
> +static struct of_device_id ohci_hcd_ppc_of_match[] = {
> +#ifdef CONFIG_USB_OHCI_HCD_PPC_OF_BE
> +	{
> +		.name = "usb",
> +		.compatible = "ohci-bigendian",
> +	},
> +	{
> +		.name = "usb",
> +		.compatible = "ohci-be",
> +	},
> +#endif
> +#ifdef CONFIG_USB_OHCI_HCD_PPC_OF_LE
> +	{
> +		.name = "usb",
> +		.compatible = "ohci-littledian",
> +	},
> +	{
> +		.name = "usb",
> +		.compatible = "ohci-le",
> +	},
> +#endif
> +	{},
> +};
> +
> +static int __devinit
> +ohci_hcd_ppc_of_drv_probe(struct of_device *op, const struct of_device_id *match)
> +{
> +	struct device_node *dev;
> +	int ret;
> +	int is_bigendian;
> +
> +	if (usb_disabled())
> +		return -ENODEV;
> +
> +	dev = op->node;
> +	is_bigendian = 0;
> +
> +	if ( device_is_compatible(dev, "ohci-bigendian") )
> +		is_bigendian = 1;
> +
> +	if ( device_is_compatible(dev, "ohci-be") )
> +		is_bigendian = 1;	
> +
> +	ret = usb_hcd_ppc_of_probe(&ohci_ppc_of_hc_driver, op, is_bigendian);
> +	return ret;
> +}
> +
> +static struct of_platform_driver ohci_hcd_ppc_of_driver = {
> +	.name	= "ppc-of-ohci",
> +	.match_table	= ohci_hcd_ppc_of_match,
> +	.probe		= ohci_hcd_ppc_of_drv_probe,
> +	.remove		= ohci_hcd_ppc_of_drv_remove,
> +	.shutdown 	= ohci_hcd_ppc_of_drv_shutdown,
> +#ifdef	CONFIG_PM
> +	/*.suspend	= ohci_hcd_ppc_soc_drv_suspend,*/
> +	/*.resume	= ohci_hcd_ppc_soc_drv_resume,*/
> +#endif
> +	.driver		= {
> +		.name	= "ppc-of-ohci",
> +		.owner	= THIS_MODULE,
> +	},
> +};
> +
> +static int __init ohci_hcd_ppc_of_init(void)
> +{
> +	pr_debug(DRIVER_INFO " (PPC OF)\n");
> +	pr_debug("block sizes: ed %d td %d\n", sizeof(struct ed),
> +							sizeof(struct td));
> +	
> +	return of_register_driver(&ohci_hcd_ppc_of_driver);    
> +}
> +
> +static void __exit ohci_hcd_ppc_of_cleanup(void)
> +{
> +	of_unregister_driver(&ohci_hcd_ppc_of_driver);
> +}
> +
> +module_init(ohci_hcd_ppc_of_init);
> +module_exit(ohci_hcd_ppc_of_cleanup);
> --- a/drivers/usb/host/Kconfig	2006-11-01 09:18:56.000000000 +0100
> +++ b/drivers/usb/host/Kconfig	2006-11-06 11:10:29.000000000 +0100
> @@ -106,6 +106,25 @@ config USB_OHCI_HCD_PPC_SOC
>  	  Enables support for the USB controller on the MPC52xx or
>  	  STB03xxx processor chip.  If unsure, say Y.
>  
> +config USB_OHCI_HCD_PPC_OF
> +	bool "OHCI support for PPC USB controller for OpenFirmware platform"
> +	depends on USB_OHCI_HCD && PPC_OF
> +	default y
> +	---help---
> +	  Enables support for the USB controller PowerPC OpenFirmware platform
> +
> +config USB_OHCI_HCD_PPC_OF_BE
> +	bool "Support big endian HC"
> +	depends on USB_OHCI_HCD_PPC_OF
> +	default y
> +	select USB_OHCI_BIG_ENDIAN
> +
> +config USB_OHCI_HCD_PPC_OF_LE
> +	bool "Support little endian HC"
> +	depends on USB_OHCI_HCD_PPC_OF
> +	default n
> +	select USB_OHCI_LITTLE_ENDIAN
> +
>  config USB_OHCI_HCD_PCI
>  	bool "OHCI support for PCI-bus USB controllers"
>  	depends on USB_OHCI_HCD && PCI && (STB03xxx || PPC_MPC52xx)
> --- a/drivers/usb/host/ohci-hcd.c	2006-11-01 09:18:56.000000000 +0100
> +++ b/drivers/usb/host/ohci-hcd.c	2006-11-06 11:10:29.000000000 +0100
> @@ -930,6 +930,10 @@ MODULE_LICENSE ("GPL");
>  #include "ohci-ppc-soc.c"
>  #endif
>  
> +#ifdef CONFIG_USB_OHCI_HCD_PPC_OF
> +#include "ohci-ppc-of.c"
> +#endif
> +
>  #if defined(CONFIG_ARCH_AT91RM9200) || defined(CONFIG_ARCH_AT91SAM9261)
>  #include "ohci-at91.c"
>  #endif
> @@ -950,6 +954,8 @@ MODULE_LICENSE ("GPL");
>        || defined (CONFIG_ARCH_AT91RM9200) \
>        || defined (CONFIG_ARCH_AT91SAM9261) \
>        || defined (CONFIG_ARCH_PNX4008) \
> +      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_LE) \
> +      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_BE) \
>  	)
>  #error "missing bus glue for ohci-hcd"
>  #endif
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev

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

* Re: [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
  2006-11-06 19:24 ` Kumar Gala
@ 2006-11-06 23:28   ` Sylvain Munaut
  2006-11-07 16:46     ` Kumar Gala
  0 siblings, 1 reply; 8+ messages in thread
From: Sylvain Munaut @ 2006-11-06 23:28 UTC (permalink / raw)
  To: Kumar Gala; +Cc: linuxppc-dev, linuxppc-embedded

Kumar Gala wrote:
> On Nov 6, 2006, at 4:35 AM, Nicolas DET wrote:
>
>   
>> This patch use of_platform device to probe and install OHCI big  
>> endian HC.
>>
>> PS: I did not success to properly inline the file using thrunderbird.
>>     
>
> You really copy the USB maintainers on this.  Also, why bother with  
> the Kconfig for USB_OHCI_HCD_PPC_OF_BE/USB_OHCI_HCD_PPC_OF_LE?
>   
I think it's a good idea to use those :
 - Just including both when PPC_OF is used is overkill because it makes
all USB
perform useless tests if you never intend to use the LE version for example.
 - Using the already defined symbol USB_OHCI_BIG_ENDIAN would force
other ohci user to select BE/LE and they may not want to expose this.



However in this bus glue test :

+      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_LE) \
+      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_BE) \

I would just test for CONFIG_USB_OHCI_HCD_PPC_OF to keep things the same
betwenn all the bus glues. (Sure it would be stupid to select PPC_OF and neither
LE nor BE ...)

But that's just me and if the usb maintainer is ok with it, it's his call.


So otherwise, looks good to me. Haven't tested in hw yet ... I'll report asap.


Sylvain

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

* Re: [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
  2006-11-06 23:28   ` Sylvain Munaut
@ 2006-11-07 16:46     ` Kumar Gala
  2006-11-07 17:32       ` Sylvain Munaut
  0 siblings, 1 reply; 8+ messages in thread
From: Kumar Gala @ 2006-11-07 16:46 UTC (permalink / raw)
  To: Sylvain Munaut; +Cc: linuxppc-dev, linuxppc-embedded


On Nov 6, 2006, at 5:28 PM, Sylvain Munaut wrote:

> Kumar Gala wrote:
>> On Nov 6, 2006, at 4:35 AM, Nicolas DET wrote:
>>
>>
>>> This patch use of_platform device to probe and install OHCI big
>>> endian HC.
>>>
>>> PS: I did not success to properly inline the file using  
>>> thrunderbird.
>>>
>>
>> You really copy the USB maintainers on this.  Also, why bother with
>> the Kconfig for USB_OHCI_HCD_PPC_OF_BE/USB_OHCI_HCD_PPC_OF_LE?
>>
> I think it's a good idea to use those :
>  - Just including both when PPC_OF is used is overkill because it  
> makes
> all USB
> perform useless tests if you never intend to use the LE version for  
> example.
>  - Using the already defined symbol USB_OHCI_BIG_ENDIAN would force
> other ohci user to select BE/LE and they may not want to expose this.

Maybe I'm missing something, but it looks like the _OF_LE & _OF_BE  
are just configuring what matches may occur.  This seems like a one  
time event.

> However in this bus glue test :
>
> +      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_LE) \
> +      || defined (CONFIG_USB_OHCI_HCD_PPC_OF_BE) \
>
> I would just test for CONFIG_USB_OHCI_HCD_PPC_OF to keep things the  
> same
> betwenn all the bus glues. (Sure it would be stupid to select  
> PPC_OF and neither
> LE nor BE ...)
>
> But that's just me and if the usb maintainer is ok with it, it's  
> his call.
>
>
> So otherwise, looks good to me. Haven't tested in hw yet ... I'll  
> report asap.
>
>
> Sylvain

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

* Re: [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
  2006-11-07 16:46     ` Kumar Gala
@ 2006-11-07 17:32       ` Sylvain Munaut
  2006-11-07 17:37         ` Kumar Gala
  0 siblings, 1 reply; 8+ messages in thread
From: Sylvain Munaut @ 2006-11-07 17:32 UTC (permalink / raw)
  To: Kumar Gala; +Cc: linuxppc-dev, linuxppc-embedded


>>>> This patch use of_platform device to probe and install OHCI big
>>>> endian HC.
>>>>
>>>> PS: I did not success to properly inline the file using thrunderbird.
>>>>
>>>
>>> You really copy the USB maintainers on this.  Also, why bother with
>>> the Kconfig for USB_OHCI_HCD_PPC_OF_BE/USB_OHCI_HCD_PPC_OF_LE?
>>>
>> I think it's a good idea to use those :
>>  - Just including both when PPC_OF is used is overkill because it makes
>> all USB
>> perform useless tests if you never intend to use the LE version for
>> example.
>>  - Using the already defined symbol USB_OHCI_BIG_ENDIAN would force
>> other ohci user to select BE/LE and they may not want to expose this.
>
> Maybe I'm missing something, but it looks like the _OF_LE & _OF_BE are
> just configuring what matches may occur.  This seems like a one time
> event.

+
+config USB_OHCI_HCD_PPC_OF_BE
+	bool "Support big endian HC"
+	depends on USB_OHCI_HCD_PPC_OF
+	default y
+	select USB_OHCI_BIG_ENDIAN
+
+config USB_OHCI_HCD_PPC_OF_LE
+	bool "Support little endian HC"
+	depends on USB_OHCI_HCD_PPC_OF
+	default n
+	select USB_OHCI_LITTLE_ENDIAN

What's important is the USB_OHCI_BIG_ENDIAN and USB_OHCI_LITTLE_ENDIAN symbols that are selected when you choose these options.
When both are active, each usb mmio access will test either to access in BE mode or LE mode. If only one is active, the test is hardcoded.



    Sylvain

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

* Re: [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC
  2006-11-07 17:32       ` Sylvain Munaut
@ 2006-11-07 17:37         ` Kumar Gala
  0 siblings, 0 replies; 8+ messages in thread
From: Kumar Gala @ 2006-11-07 17:37 UTC (permalink / raw)
  To: Sylvain Munaut; +Cc: linuxppc-dev, linuxppc-embedded


On Nov 7, 2006, at 11:32 AM, Sylvain Munaut wrote:

>
>>>>> This patch use of_platform device to probe and install OHCI big
>>>>> endian HC.
>>>>>
>>>>> PS: I did not success to properly inline the file using  
>>>>> thrunderbird.
>>>>>
>>>>
>>>> You really copy the USB maintainers on this.  Also, why bother with
>>>> the Kconfig for USB_OHCI_HCD_PPC_OF_BE/USB_OHCI_HCD_PPC_OF_LE?
>>>>
>>> I think it's a good idea to use those :
>>>  - Just including both when PPC_OF is used is overkill because it  
>>> makes
>>> all USB
>>> perform useless tests if you never intend to use the LE version for
>>> example.
>>>  - Using the already defined symbol USB_OHCI_BIG_ENDIAN would force
>>> other ohci user to select BE/LE and they may not want to expose  
>>> this.
>>
>> Maybe I'm missing something, but it looks like the _OF_LE & _OF_BE  
>> are
>> just configuring what matches may occur.  This seems like a one time
>> event.
>
> +
> +config USB_OHCI_HCD_PPC_OF_BE
> +	bool "Support big endian HC"
> +	depends on USB_OHCI_HCD_PPC_OF
> +	default y
> +	select USB_OHCI_BIG_ENDIAN
> +
> +config USB_OHCI_HCD_PPC_OF_LE
> +	bool "Support little endian HC"
> +	depends on USB_OHCI_HCD_PPC_OF
> +	default n
> +	select USB_OHCI_LITTLE_ENDIAN
>
> What's important is the USB_OHCI_BIG_ENDIAN and  
> USB_OHCI_LITTLE_ENDIAN symbols that are selected when you choose  
> these options.
> When both are active, each usb mmio access will test either to  
> access in BE mode or LE mode. If only one is active, the test is  
> hardcoded.

Missed that part.  Now it makes sense.

- k

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

end of thread, other threads:[~2006-11-07 17:37 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-06 10:35 [PATCH] powerpc: Add of_platform support for OHCI/Bigendian HC Nicolas DET
2006-11-06 19:24 ` Kumar Gala
2006-11-06 23:28   ` Sylvain Munaut
2006-11-07 16:46     ` Kumar Gala
2006-11-07 17:32       ` Sylvain Munaut
2006-11-07 17:37         ` Kumar Gala
  -- strict thread matches above, loose matches on Subject: below --
2006-11-06 11:01 Nicolas DET
2006-11-06 22:55 ` Benjamin Herrenschmidt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).