]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
usb: musb-new: sunxi: Fix null pointer access
authorStefan Mavrodiev <stefan@olimex.com>
Wed, 5 Dec 2018 12:49:44 +0000 (14:49 +0200)
committerMarek Vasut <marex@denx.de>
Fri, 14 Dec 2018 16:59:10 +0000 (17:59 +0100)
When the device is in peripheral mode there is no
struct usb_bus_priv allocated pointer, as the uclass driver
("usb_dev_generic") doesn't call per_device_auto_alloc_size.

This results in writing to the internal SDRAM at
priv->desc_before_addr = true;

Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>
drivers/usb/musb-new/sunxi.c

index d7170a3078c4c4007c9058af0df60029f100f5f7..f542a181fac2f55a94405ad7879704b7a45100a3 100644 (file)
@@ -435,11 +435,14 @@ static int musb_usb_probe(struct udevice *dev)
 {
        struct sunxi_glue *glue = dev_get_priv(dev);
        struct musb_host_data *host = &glue->mdata;
-       struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
        struct musb_hdrc_platform_data pdata;
        void *base = dev_read_addr_ptr(dev);
        int ret;
 
+#ifdef CONFIG_USB_MUSB_HOST
+       struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
+#endif
+
        if (!base)
                return -EINVAL;
 
@@ -459,7 +462,6 @@ static int musb_usb_probe(struct udevice *dev)
                return ret;
        }
 
-       priv->desc_before_addr = true;
 
        memset(&pdata, 0, sizeof(pdata));
        pdata.power = 250;
@@ -467,6 +469,8 @@ static int musb_usb_probe(struct udevice *dev)
        pdata.config = glue->cfg->config;
 
 #ifdef CONFIG_USB_MUSB_HOST
+       priv->desc_before_addr = true;
+
        pdata.mode = MUSB_HOST;
        host->host = musb_init_controller(&pdata, &glue->dev, base);
        if (!host->host)