]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
mt76: usb: fix hw initialization sequence
authorLorenzo Bianconi <lorenzo.bianconi@redhat.com>
Wed, 3 Oct 2018 10:52:25 +0000 (12:52 +0200)
committerFelix Fietkau <nbd@nbd.name>
Fri, 5 Oct 2018 18:05:44 +0000 (20:05 +0200)
mt76u_alloc_queues need to be called before mt76u_mcu_init_rx
since it initializes rx_page_lock spinlock used in mt76u_buf_alloc
routine.

Fixes: b11e19694dc9 ("mt76x0: add ieee80211_ops ops pointer to
mt76x0_alloc_device signature")

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
drivers/net/wireless/mediatek/mt76/mt76x2/usb_init.c

index a76043213f55b530b97726ef1786df1a17a1aefd..dd437e77009ff26fc6941bc033e22c0c787e2e0a 100644 (file)
@@ -179,28 +179,28 @@ static int mt76x0u_register_device(struct mt76x0_dev *dev)
        struct ieee80211_hw *hw = dev->mt76.hw;
        int err;
 
-       err = mt76u_mcu_init_rx(&dev->mt76);
+       err = mt76u_alloc_queues(&dev->mt76);
        if (err < 0)
-               return err;
+               goto out_err;
 
-       err = mt76u_alloc_queues(&dev->mt76);
+       err = mt76u_mcu_init_rx(&dev->mt76);
        if (err < 0)
-               return err;
+               goto out_err;
 
        mt76x0_chip_onoff(dev, true, true);
        if (!mt76x02_wait_for_mac(&dev->mt76)) {
                err = -ETIMEDOUT;
-               goto err;
+               goto out_err;
        }
 
        err = mt76x0u_mcu_init(dev);
        if (err < 0)
-               goto err;
+               goto out_err;
 
        mt76x0_init_usb_dma(dev);
        err = mt76x0_init_hardware(dev);
        if (err < 0)
-               goto err;
+               goto out_err;
 
        mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e);
        mt76_wr(dev, MT_TXOP_CTRL_CFG,
@@ -209,7 +209,7 @@ static int mt76x0u_register_device(struct mt76x0_dev *dev)
 
        err = mt76x0_register_device(dev);
        if (err < 0)
-               goto err;
+               goto out_err;
 
        /* check hw sg support in order to enable AMSDU */
        if (mt76u_check_sg(&dev->mt76))
@@ -221,7 +221,7 @@ static int mt76x0u_register_device(struct mt76x0_dev *dev)
 
        return 0;
 
-err:
+out_err:
        mt76x0u_cleanup(dev);
        return err;
 }
index 55e0dea568b8fbdc2f03643f72524b78d29755af..a8222447d805d912eda7b0f04bc134a1600c3aeb 100644 (file)
@@ -262,7 +262,7 @@ int mt76x2u_register_device(struct mt76x2_dev *dev)
 
        err = mt76u_mcu_init_rx(&dev->mt76);
        if (err < 0)
-               return err;
+               goto fail;
 
        err = mt76x2u_init_hardware(dev);
        if (err < 0)