diff options
Diffstat (limited to 'drivers/staging/gdm72xx/usb_boot.c')
-rw-r--r-- | drivers/staging/gdm72xx/usb_boot.c | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/drivers/staging/gdm72xx/usb_boot.c b/drivers/staging/gdm72xx/usb_boot.c index 0d45eb680be5..d59bac872ffe 100644 --- a/drivers/staging/gdm72xx/usb_boot.c +++ b/drivers/staging/gdm72xx/usb_boot.c @@ -67,6 +67,7 @@ struct fw_info { static void array_le32_to_cpu(u32 *arr, int num) { int i; + for (i = 0; i < num; i++, arr++) *arr = __le32_to_cpu(*arr); } @@ -79,7 +80,7 @@ static int gdm_wibro_send(struct usb_device *usbdev, void *data, int len) int actual; ret = usb_bulk_msg(usbdev, usb_sndbulkpipe(usbdev, 1), data, len, - &actual, 1000); + &actual, 1000); if (ret < 0) { dev_err(&usbdev->dev, "Error : usb_bulk_msg ( result = %d )\n", @@ -95,7 +96,7 @@ static int gdm_wibro_recv(struct usb_device *usbdev, void *data, int len) int actual; ret = usb_bulk_msg(usbdev, usb_rcvbulkpipe(usbdev, 2), data, len, - &actual, 5000); + &actual, 5000); if (ret < 0) { dev_err(&usbdev->dev, @@ -106,8 +107,8 @@ static int gdm_wibro_recv(struct usb_device *usbdev, void *data, int len) } static int download_image(struct usb_device *usbdev, - const struct firmware *firm, - loff_t pos, u32 img_len, u32 magic_num) + const struct firmware *firm, + loff_t pos, u32 img_len, u32 magic_num) { struct dn_header h; int ret = 0; @@ -169,14 +170,7 @@ int usb_boot(struct usb_device *usbdev, u16 pid) memcpy(&hdr, firm->data, sizeof(hdr)); array_le32_to_cpu((u32 *)&hdr, 19); -#if 0 - if (hdr.magic_code != 0x10767fff) { - dev_err(&usbdev->dev, "Invalid magic code 0x%08x\n", - hdr.magic_code); - ret = -EINVAL; - goto out; - } -#endif + if (hdr.count > MAX_IMG_CNT) { dev_err(&usbdev->dev, "Too many images. %d\n", hdr.count); ret = -EINVAL; @@ -201,14 +195,6 @@ int usb_boot(struct usb_device *usbdev, u16 pid) memcpy(&fw_info, firm->data + pos, sizeof(fw_info)); array_le32_to_cpu((u32 *)&fw_info, 8); -#if 0 - if ((fw_info.id & 0xfffff000) != 0x10767000) { - dev_err(&usbdev->dev, "Invalid FW id. 0x%08x\n", - fw_info.id); - ret = -EIO; - goto out; - } -#endif if ((fw_info.id & 0xffff) != pid) continue; @@ -219,8 +205,8 @@ int usb_boot(struct usb_device *usbdev, u16 pid) goto out; } - ret = download_image(usbdev, firm, pos, - fw_info.kernel_len, DN_KERNEL_MAGIC_NUMBER); + ret = download_image(usbdev, firm, pos, fw_info.kernel_len, + DN_KERNEL_MAGIC_NUMBER); if (ret < 0) goto out; dev_info(&usbdev->dev, "GCT: Kernel download success.\n"); @@ -231,7 +217,7 @@ int usb_boot(struct usb_device *usbdev, u16 pid) goto out; } ret = download_image(usbdev, firm, pos, fw_info.rootfs_len, - DN_ROOTFS_MAGIC_NUMBER); + DN_ROOTFS_MAGIC_NUMBER); if (ret < 0) goto out; dev_info(&usbdev->dev, "GCT: Filesystem download success.\n"); @@ -276,7 +262,7 @@ out: } static int em_download_image(struct usb_device *usbdev, const char *img_name, - char *type_string) + char *type_string) { char *buf = NULL; loff_t pos = 0; @@ -347,11 +333,8 @@ out: static int em_fw_reset(struct usb_device *usbdev) { - int ret; - /*Send ZLP*/ - ret = gdm_wibro_send(usbdev, NULL, 0); - return ret; + return gdm_wibro_send(usbdev, NULL, 0); } int usb_emergency(struct usb_device *usbdev) |