[Letux-kernel] [PATCH 0/3] MIPS: CI20: USB EHCI/OHCI

H. Nikolaus Schaller hns at goldelico.com
Sat Sep 26 11:51:43 CEST 2020


> Am 26.09.2020 um 11:26 schrieb H. Nikolaus Schaller <hns at goldelico.com>:
> 
> 
> Some more info from studying the old 3.18 code:
> 
> ohci-jz4740.c did there call jz4780_cgu_set_usb_suspend() for jz4780:
> 
> drivers/usb/host/ohci-jz4740.c:
> 
> +       if (of_machine_is_compatible("ingenic,jz4780-ohci")) {
> +               ret = jz4780_cgu_set_usb_suspend(USB_PORT_HOST, false);
> +               if (ret) {
> +                       dev_err(&pdev->dev, "failed to unsuspend port\n");
> +                       goto err_disable;
> +               }
> +       }
> +
> 
> drivers/clk/jz47xx/jz4780-cgu.c:
> +int jz4780_cgu_set_usb_suspend(enum jz4780_usb_port port, bool suspend)
> +{
> +       unsigned long flags;
> +       u32 opcr, bit;
> +
> +       switch (port) {
> +       case USB_PORT_OTG:
> +               bit = OPCR_SPENDN0;
> +               break;
> +
> +       case USB_PORT_HOST:
> +               bit = OPCR_SPENDN1;
> +               break;
> +
> +       default:
> +               return -EINVAL;
> +       }
> +
> +       spin_lock_irqsave(&cgu->power_lock, flags);
> +
> +       opcr = readl(cgu->base + CGU_REG_OPCR);
> +       if (suspend)
> +               opcr &= ~bit;
> +       else
> +               opcr |= bit;
> +       writel(opcr, cgu->base + CGU_REG_OPCR);
> +
> +       spin_unlock_irqrestore(&cgu->power_lock, flags);
> +       return 0;
> +}
> +EXPORT_SYMBOL_GPL(jz4780_cgu_set_usb_suspend);
> 
> And EHCI does some calls like:
> +       jz4780_cgu_start_ehci();
> +
> 
> +       /* Set utmi data bus width of controller to 16bit */
> +       temp = readl((volatile int *)EHCI_REG_UTMI_BUS);
> +       writel(temp | UTMIBUS_WIDTH, (volatile int *)EHCI_REG_UTMI_BUS);
> 
> 
> So this means that the ohci-generic driver doesn't really work because
> it can't handle writing some very special bits for the jz4780 cgu.
> 
> Now we can try to
> a) can hack that into the clock handling

Yippee ki-yay!

root at letux:~# lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0eef:0005 D-WAV Scientific Co., Ltd WS170120
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
root at letux:~#
root at letux:~# evtest /dev/input/touchscreen 
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xeef product 0x5 version 0x110
Input device name: "WaveShare WS170120"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 330 (BTN_TOUCH)
  Event type 3 (EV_ABS)
    Event code 0 (ABS_X)
      Value      0
      Min        0
      Max     1024
    Event code 1 (ABS_Y)
      Value      0
      Min        0
      Max      600
    Event code 24 (ABS_PRESSURE)
      Value      0
      Min        0
      Max      255
    Event code 40 (ABS_MISC)
      Value      0
      Min        0
      Max      255
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1601113558.596184, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0042
Event: time 1601113558.596184, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1601113558.596184, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 5
Event: time 1601113558.596184, type 3 (EV_ABS), code 0 (ABS_X), value 302
Event: time 1601113558.596184, type 3 (EV_ABS), code 1 (ABS_Y), value 305
Event: time 1601113558.596184, -------------- SYN_REPORT ------------
Event: time 1601113558.750194, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0042
Event: time 1601113558.750194, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1601113558.750194, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 0
Event: time 1601113558.750194, -------------- SYN_REPORT ------------
^Croot at letux:~#

Attached is my hack for drivers/clk/jz47xx/jz4780-cgu.c
which simply assumes that we want to enable the OTG *and* the HOST port...

What I think we must do is write a custom clock handler for
[JZ4780_CLK_UHC] that enables/disables OPCR_SPENDN1.

But for the moment it is enough to get the USB HOST port working in addition
to the OTG port. I think I can merge it into letux-5.9-rc7 and then we can
improve...

BR,
Nikolaus

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-MIPS-jz4780-cgu-hack-to-enable-the-usb-phy.patch
Type: application/octet-stream
Size: 1517 bytes
Desc: not available
URL: <http://lists.goldelico.com/pipermail/letux-kernel/attachments/20200926/85b82eae/attachment.obj>


More information about the Letux-kernel mailing list