- Update the device tree per QE USB bindings;
- Add timer (FSL GTM) node;
- Add gpio-controller node for BCSR13 bank (GPIOs on that bank
  are used to control the USB transceiver);
- Set up other BCSR registers;
- Configure the QE Par IO.

The work is loosely based on Li Yang's patch[1], which is used
to support peripheral mode only.

[1] http://ozlabs.org/pipermail/linuxppc-dev/2008-August/061357.html

The s-o-b line of the original patch preserved here.

Signed-off-by: Li Yang <[EMAIL PROTECTED]>
Signed-off-by: Anton Vorontsov <[EMAIL PROTECTED]>
---
 arch/powerpc/boot/dts/mpc836x_mds.dts     |   43 ++++++++++++++++++++++-
 arch/powerpc/platforms/83xx/mpc836x_mds.c |   52 ++++++++++++++++++++++++++++-
 2 files changed, 92 insertions(+), 3 deletions(-)

diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts 
b/arch/powerpc/boot/dts/mpc836x_mds.dts
index 66a12d2..bdb14ba 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -69,8 +69,18 @@
                };
 
                [EMAIL PROTECTED],0 {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
                        device_type = "board-control";
                        reg = <1 0 0x8000>;
+                       ranges = <0 1 0 0x8000>;
+
+                       bcsr13: [EMAIL PROTECTED] {
+                               #gpio-cells = <2>;
+                               compatible = "fsl,mpc8360mds-bcsr-gpio";
+                               reg = <0xd 1>;
+                               gpio-controller;
+                       };
                };
        };
 
@@ -195,10 +205,21 @@
                };
 
                [EMAIL PROTECTED] {
+                       #address-cells = <1>;
+                       #size-cells = <1>;
                        reg = <0x1400 0x100>;
+                       ranges = <0 0x1400 0x100>;
                        device_type = "par_io";
                        num-ports = <7>;
 
+                       qe_pio_b: [EMAIL PROTECTED] {
+                               #gpio-cells = <2>;
+                               compatible = "fsl,mpc8360-qe-pario-bank",
+                                            "fsl,mpc8323-qe-pario-bank";
+                               reg = <0x18 0x18>;
+                               gpio-controller;
+                       };
+
                        pio1: [EMAIL PROTECTED] {
                                pio-map = <
                        /* port  pin  dir  open_drain  assignment  has_irq */
@@ -282,6 +303,15 @@
                        };
                };
 
+               [EMAIL PROTECTED] {
+                       compatible = "fsl,mpc8360-qe-gtm",
+                                    "fsl,qe-gtm", "fsl,gtm";
+                       reg = <0x440 0x40>;
+                       clock-frequency = <132000000>;
+                       interrupts = <12 13 14 15>;
+                       interrupt-parent = <&qeic>;
+               };
+
                [EMAIL PROTECTED] {
                        cell-index = <0>;
                        compatible = "fsl,spi";
@@ -301,11 +331,20 @@
                };
 
                [EMAIL PROTECTED] {
-                       compatible = "qe_udc";
+                       compatible = "fsl,mpc8360-qe-usb",
+                                    "fsl,mpc8323-qe-usb";
                        reg = <0x6c0 0x40 0x8b00 0x100>;
                        interrupts = <11>;
                        interrupt-parent = <&qeic>;
-                       mode = "slave";
+                       fsl,fullspeed-clock = "clk21";
+                       fsl,lowspeed-clock = "brg9";
+                       gpios = <&qe_pio_b  2 0   /* USBOE */
+                                &qe_pio_b  3 0   /* USBTP */
+                                &qe_pio_b  8 0   /* USBTN */
+                                &qe_pio_b  9 0   /* USBRP */
+                                &qe_pio_b 11 0   /* USBRN */
+                                &bcsr13    5 0   /* SPEED */
+                                &bcsr13    4 1>; /* POWER */
                };
 
                enet0: [EMAIL PROTECTED] {
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c 
b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index 9d46e5b..4e69f7b 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -43,6 +43,7 @@
 #include <asm/udbg.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
+#include <sysdev/simple_gpio.h>
 #include <asm/qe.h>
 #include <asm/qe_ic.h>
 
@@ -127,9 +128,58 @@ static void __init mpc836x_mds_setup_arch(void)
                        iounmap(immap);
                }
 
-               iounmap(bcsr_regs);
                of_node_put(np);
        }
+#ifdef CONFIG_QE_USB
+       np = of_find_compatible_node(NULL, NULL, "fsl,mpc8323-qe-usb");
+       if (np) {
+               const char *mode = of_get_property(np, "mode", NULL);
+
+               par_io_config_pin(1,  2, 1, 0, 3, 0); /* USBOE  */
+               par_io_config_pin(1,  3, 1, 0, 3, 0); /* USBTP  */
+               par_io_config_pin(1,  8, 1, 0, 1, 0); /* USBTN  */
+               par_io_config_pin(1, 10, 2, 0, 3, 0); /* USBRXD */
+               par_io_config_pin(1,  9, 2, 1, 3, 0); /* USBRP  */
+               par_io_config_pin(1, 11, 2, 1, 3, 0); /* USBRN  */
+               par_io_config_pin(2, 20, 2, 0, 1, 0); /* CLK21  */
+
+#define BCSR8_TSEC1M_MASK      (0x3 << 6)
+#define BCSR8_TSEC1M_RGMII     (0x0 << 6)
+#define BCSR8_TSEC2M_MASK      (0x3 << 4)
+#define BCSR8_TSEC2M_RGMII     (0x0 << 4)
+               /*
+                * Default is GMII (2), but we should set it to RGMII (0) if
+                * we use USB (Eth PHY is in RGMII mode anyway).
+                */
+               clrsetbits_8(&bcsr_regs[8],
+                            BCSR8_TSEC1M_MASK | BCSR8_TSEC2M_MASK,
+                            BCSR8_TSEC1M_RGMII | BCSR8_TSEC2M_RGMII);
+
+#define BCSR13_USBMASK 0x0f
+#define BCSR13_nUSBEN  0x08 /* 1 - Disable, 0 - Enable                 */
+#define BCSR13_USBSPEED 0x04 /* 1 - Full, 0 - Low                      */
+#define BCSR13_USBMODE 0x02 /* 1 - Host, 0 - Function                  */
+#define BCSR13_nUSBVCC 0x01 /* 1 - gets VBUS, 0 - supplies VBUS        */
+
+               clrsetbits_8(&bcsr_regs[13], BCSR13_USBMASK, BCSR13_USBSPEED);
+
+               if (mode && !strcmp(mode, "peripheral")) {
+                       setbits8(&bcsr_regs[13], BCSR13_nUSBVCC);
+                       qe_usb_clock_set(QE_CLK21, 48000000);
+               } else {
+                       setbits8(&bcsr_regs[13], BCSR13_USBMODE);
+                       /*
+                        * The BCSR GPIOs are used to control power and
+                        * speed of the USB transceiver. This is needed for
+                        * the USB Host only.
+                        */
+                       simple_gpiochip_init("fsl,mpc8360mds-bcsr-gpio");
+               }
+
+               of_node_put(np);
+       }
+#endif                         /* CONFIG_QE_USB */
+       iounmap(bcsr_regs);
 #endif                         /* CONFIG_QUICC_ENGINE */
 }
 
-- 
1.5.6.3

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to