|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 02/10] xue: reset XHCI ports when initializing dbc
On 07.06.2022 16:30, Marek Marczykowski-Górecki wrote:
> Reset ports, to force host system to re-enumerate devices. Otheriwse it
> will require the cable to be re-plugged, or will wait in the
> "configuring" state indefinitely.
>
> Trick and code copied from Linux:
> drivers/usb/early/xhci-dbc.c:xdbc_start()->xdbc_reset_debug_port()
>
> Signed-off-by: Marek Marczykowski-Górecki <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
Just two style nits:
> --- a/xen/drivers/char/xue.c
> +++ b/xen/drivers/char/xue.c
> @@ -60,6 +60,10 @@
> ((1UL << XUE_PSC_CSC) | (1UL << XUE_PSC_PRC) | (1UL << XUE_PSC_PLC) |
> \
> (1UL << XUE_PSC_CEC))
>
> +#define XUE_XHC_EXT_PORT_MAJOR(x) (((x) >> 24) & 0xff)
> +#define PORT_RESET (1 << 4)
> +#define PORT_CONNECT (1 << 0)
Odd multiple blanks on the first of the lines you add.
> @@ -604,6 +608,68 @@ static void xue_init_strings(struct xue *xue, uint32_t
> *info)
> info[8] = (4 << 24) | (30 << 16) | (8 << 8) | 6;
> }
>
> +static void xue_do_reset_debug_port(struct xue *xue, u32 id, u32 count)
> +{
> + uint32_t *ops_reg;
> + uint32_t *portsc;
> + u32 val, cap_length;
> + int i;
> +
> + cap_length = (*(uint32_t*)xue->xhc_mmio) & 0xff;
> + ops_reg = xue->xhc_mmio + cap_length;
> +
> + id--;
> + for ( i = id; i < (id + count); i++ )
> + {
> + portsc = ops_reg + 0x100 + i * 0x4;
> + val = *portsc;
> + if ( !(val & PORT_CONNECT) )
> + *portsc = val | PORT_RESET;
> + }
> +}
> +
> +
> +static void xue_reset_debug_port(struct xue *xue)
Please don't add double blank lines.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |