Re: [PATCH v4 2/9] usb: isp1760: move to regmap for register access

Dietmar Eggemann
2021-08-20T13:30:44Z

Hi Rui,

On 13/05/2021 10:47, Rui Miguel Silva wrote:
> Rework access to registers and memory to use regmap framework.
> No change in current feature or way of work is intended with this
> change.
>
> This will allow to reuse this driver with other IP of this family,
> for example isp1763, with little changes and effort.
>

1da9e1c06873 - usb: isp1760: move to regmap for register access

Starting from this patch, our Arm TC2 platform (multi_v7_defconfig,
vexpress-v2p-ca15_a7.dts) doesn't boot anymore.
We discovered this in our v5.14-rc1 based task scheduler test build.

With 1da9e1c06873^1 :

# lsusb
Bus 001 Device 001: ID 1d6b:0002 <-- NXP ISP1760 USB Host Controller
Bus 001 Device 002: ID 0471:3526
Bus 001 Device 003: ID 0781:5591

# dmesg | grep -i isp
[ 4.014307] isp1760 1b000000.usb: bus width: 32, oc: digital
[ 4.014442] isp1760 1b000000.usb: NXP ISP1760 USB Host Controller
[ 4.014715] isp1760 1b000000.usb: new USB bus registered, assigned bus number 1
[ 4.025076] isp1760 1b000000.usb: irq 32, io mem 0x1b000000
[ 4.025288] isp1760 1b000000.usb: USB ISP 1761 HW rev. 1 started
[ 4.055802] ISP1760 USB device initialised
[ 4.257911] isp1760 1b000000.usb: port 1 high speed
[ 4.325662] usb 1-1: new high-speed USB device number 2 using isp1760
[ 4.475670] isp1760 1b000000.usb: port 1 high speed
[ 14.320372] usb 1-1.2: new high-speed USB device number 3 using isp1760

With v5.14-rc1 :

there is no boot output at all, but I debugged it a little bit and the
system seems to hang here:

[ 1.847494] [<c0cac46c>] (isp1760_udc_register) from [<c0ca668c>] (isp1760_register+0x5d0/0x5f0)
[ 1.847527] [<c0ca668c>] (isp1760_register) from [<c0ca6b7c>] (isp1760_plat_probe+0x150/0x1b0)
[ 1.847557] [<c0ca6b7c>] (isp1760_plat_probe) from [<c0a46ef0>] (platform_probe+0x5c/0xb8)
[ 1.847589] [<c0a46ef0>] (platform_probe) from [<c0a44924>] (really_probe.part.0+0x9c/0x32c)
...

isp1760_udc_register()->isp1760_udc_init()

....
/* Reset the device controller. */
isp1760_udc_set(udc, DC_SFRESET); <-- hangs here !!!
usleep_range(10000, 11000);
isp1760_reg_write(udc->regs, ISP176x_DC_MODE, 0);
usleep_range(10000, 11000); …