[U-Boot] [U-Boot, 1/3] musb: sunxi: Do not allocate musb struct multiple times

Hans de Goede
2016-04-05T09:00:53Z

Marek, Simon,

Any news on this patch-set ?

Patch 1 is sunxi specific, but patch 2 is a generic musb patch
and patch 3 (of which I've send a v2 fixing some compiler warnings)
is a generic (dm) usb patch, so my plan was for these 3 patches
to go upstream through Marek's usb tree, after a review of:

https://patchwork.ozlabs.org/patch/605491/

by Simon.

Regards,

Hans

On 02-04-16 20:46, Hans de Goede wrote:
> The probe function of the musb host driver can be called multiple
> times. The code assumes that it can safe the pointer to the allocated
> musb struct in the driver model priv_auto_alloc data, but this data
> gets free-ed on a probe failure or on removal, so we must safe the
> pointer elsewhere.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> drivers/usb/musb-new/sunxi.c | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/musb-new/sunxi.c b/drivers/usb/musb-new/sunxi.c
> index be1d2ec..3081afc 100644
> --- a/drivers/usb/musb-new/sunxi.c
> +++ b/drivers/usb/musb-new/sunxi.c
> @@ -201,6 +201,7 @@ static irqreturn_t sunxi_musb_interrupt(int irq, void *__hci)
>
> /* musb_core does not call enable / disable in a balanced manner <sigh> */
> static bool enabled = false;
> +static struct musb *sunxi_musb;
>
> static int sunxi_musb_enable(struct musb *musb)
> {
> @@ -320,13 +321,15 @@ int musb_usb_probe(struct udevice *dev)
>
> priv->desc_before_addr = true;
>
> - if (!host->host) {
> - host->host = musb_init_controller(&musb_plat, NULL,
> + if (!sunxi_musb) {
> + sunxi_musb = musb_init_controller(&musb_plat, NULL,
> (void *)SUNXI_USB0_BASE);
> - if (!host->host)
> - return -EIO;
> }
>
> + host->host = sunxi_musb;
> + if (!host->host)
> + return -EIO;
> +
> ret = musb_lowlevel_init(host);
> if (ret == 0)
> printf("MUSB OTG\n");
>