]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
brcmfmac: cleanup of usb firmware download routines
authorHante Meuleman <meuleman@broadcom.com>
Thu, 15 Nov 2012 02:46:06 +0000 (18:46 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 16 Nov 2012 19:28:46 +0000 (14:28 -0500)
Clean code related to firmware download routines. Remove obsolete
delay and increase delay after reset command.

Reviewed-by: Arend Van Spriel <arend@broadcom.com>
Signed-off-by: Hante Meuleman <meuleman@broadcom.com>
Signed-off-by: Franky Lin <frankyl@broadcom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/brcm80211/brcmfmac/usb.c

index 15070b61b16109e3cc1f1c113075d70518982342..395c49d6e80e8b5f47bdf26569c0be1dbeb2f1aa 100644 (file)
 
 #define IOCTL_RESP_TIMEOUT  2000
 
-#define BRCMF_USB_DLIMAGE_SPINWAIT     100     /* in unit of ms */
-#define BRCMF_USB_DLIMAGE_LIMIT                500     /* spinwait limit (ms) */
+#define BRCMF_USB_RESET_GETVER_SPINWAIT        100     /* in unit of ms */
+#define BRCMF_USB_RESET_GETVER_LOOP_CNT        10
 
 #define BRCMF_POSTBOOT_ID              0xA123  /* ID to detect if dongle
                                                   has boot up */
-#define BRCMF_USB_RESETCFG_SPINWAIT    1       /* wait after resetcfg (ms) */
-
 #define BRCMF_USB_NRXQ 50
 #define BRCMF_USB_NTXQ 50
 
@@ -829,8 +827,7 @@ brcmf_usb_dlneeded(struct brcmf_usbdev_info *devinfo)
 
        /* Check if firmware downloaded already by querying runtime ID */
        id.chip = cpu_to_le32(0xDEAD);
-       brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id,
-               sizeof(struct bootrom_id_le));
+       brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id));
 
        chipid = le32_to_cpu(id.chip);
        chiprev = le32_to_cpu(id.chiprev);
@@ -841,8 +838,7 @@ brcmf_usb_dlneeded(struct brcmf_usbdev_info *devinfo)
                brcmf_dbg(USB, "chip %d rev 0x%x\n", chipid, chiprev);
        if (chipid == BRCMF_POSTBOOT_ID) {
                brcmf_dbg(USB, "firmware already downloaded\n");
-               brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id,
-                       sizeof(struct bootrom_id_le));
+               brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id));
                return false;
        } else {
                devinfo->bus_pub.devid = chipid;
@@ -855,38 +851,29 @@ static int
 brcmf_usb_resetcfg(struct brcmf_usbdev_info *devinfo)
 {
        struct bootrom_id_le id;
-       u16 wait = 0, wait_time;
+       u32 loop_cnt;
 
        brcmf_dbg(USB, "Enter\n");
 
-       if (devinfo == NULL)
-               return -EINVAL;
-
-       /* Give dongle chance to boot */
-       wait_time = BRCMF_USB_DLIMAGE_SPINWAIT;
-       while (wait < BRCMF_USB_DLIMAGE_LIMIT) {
-               mdelay(wait_time);
-               wait += wait_time;
+       loop_cnt = 0;
+       do {
+               mdelay(BRCMF_USB_RESET_GETVER_SPINWAIT);
+               loop_cnt++;
                id.chip = cpu_to_le32(0xDEAD);       /* Get the ID */
-               brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id,
-                       sizeof(struct bootrom_id_le));
+               brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id));
                if (id.chip == cpu_to_le32(BRCMF_POSTBOOT_ID))
                        break;
-       }
+       } while (loop_cnt < BRCMF_USB_RESET_GETVER_LOOP_CNT);
 
        if (id.chip == cpu_to_le32(BRCMF_POSTBOOT_ID)) {
-               brcmf_dbg(USB, "download done %d ms postboot chip 0x%x/rev 0x%x\n",
-                         wait, le32_to_cpu(id.chip), le32_to_cpu(id.chiprev));
-
-               brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id,
-                       sizeof(struct bootrom_id_le));
+               brcmf_dbg(USB, "postboot chip 0x%x/rev 0x%x\n",
+                         le32_to_cpu(id.chip), le32_to_cpu(id.chiprev));
 
-               /* XXX this wait may not be necessary */
-               mdelay(BRCMF_USB_RESETCFG_SPINWAIT);
+               brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id));
                return 0;
        } else {
                brcmf_dbg(ERROR, "Cannot talk to Dongle. Firmware is not UP, %d ms\n",
-                         wait);
+                         BRCMF_USB_RESET_GETVER_SPINWAIT * loop_cnt);
                return -EINVAL;
        }
 }