[PATCH 1/1] Ubuntu: SAUCE: Workaround for SATA drive failure on Ubuntu installation
Andy Whitcroft
apw at canonical.com
Wed Dec 16 11:57:56 UTC 2009
On Wed, Dec 16, 2009 at 05:21:12PM +0800, Bryan Wu wrote:
> From: Dinh Nguyen <r00091 at freescale.com>
>
> BugLink: http://bugs.launchpad.net/bugs/431963
>
> Original patch was from Dinh Nguyen. That one find the root cause
> of this SATA drive failure issue. The USB2SATA chip GL830 can not
> accept the ATA PASS THROUGH command.
>
> This patch will skip the ATA PASS THROUGH command only for GL830
> USB device. So it will not effect other USB devices.
>
> Signed-off-by: Dinh Nguyen <r00091 at freescale.com>
> Signed-off-by: Bryan Wu <bryan.wu at canonical.com>
> ---
> drivers/usb/storage/usb.c | 17 +++++++++++++++--
> 1 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
> index 8060b85..d538511 100644
> --- a/drivers/usb/storage/usb.c
> +++ b/drivers/usb/storage/usb.c
> @@ -329,8 +329,21 @@ static int usb_stor_control_thread(void * __us)
>
> /* we've got a command, let's do it! */
> else {
> - US_DEBUG(usb_stor_show_command(us->srb));
This changes ...
> - us->proto_handler(us->srb, us);
> +#ifdef CONFIG_MACH_MX51_BABBAGE
> + u16 vid =
> + le16_to_cpu(us->pusb_dev->descriptor.idVendor);
> + u16 pid =
> + le16_to_cpu(us->pusb_dev->descriptor.idProduct);
> +#endif
> + US_DEBUGP(usb_stor_show_command(us->srb));
... to this, which is wrong as the routine there is a void, so there is
nothing to print. I think this will translate into a compile error when
CONFIG_USB_STORAGE_DEBUG is enabled.
It also seems wrong to be looking up and translating these ids for every
command when we only care for 0x85 commands.
> +#ifdef CONFIG_MACH_MX51_BABBAGE
> + if ((us->srb->cmnd[0] == 0x85) &&
> + (vid == 0x05e3) &&
> + (pid == 0x0718))
> + US_DEBUGP("Skip ATA PASS-THROUGH command\n");
> + else
> +#endif
> + us->proto_handler(us->srb, us);
> }
>
> /* lock access to the state */
So I propose to apply the patch as below.
Comments?
-apw
commit 95860a73f4c1ebff91cbf03783027c15600361d7
Author: Dinh Nguyen <r00091 at freescale.com>
Date: Wed Dec 16 17:21:12 2009 +0800
Ubuntu: SAUCE: Workaround for SATA drive failure on Ubuntu installation
BugLink: http://bugs.launchpad.net/bugs/431963
Original patch was from Dinh Nguyen. That one find the root cause
of this SATA drive failure issue. The USB2SATA chip GL830 can not
accept the ATA PASS THROUGH command.
This patch will skip the ATA PASS THROUGH command only for GL830
USB device. So it will not effect other USB devices.
[apw at canonical.com: fixed debug and optimised.]
Signed-off-by: Dinh Nguyen <r00091 at freescale.com>
Signed-off-by: Bryan Wu <bryan.wu at canonical.com>
Signed-off-by: Andy Whitcroft <apw at canonical.com>
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 8060b85..961bb1a 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -330,6 +330,15 @@ static int usb_stor_control_thread(void * __us)
/* we've got a command, let's do it! */
else {
US_DEBUG(usb_stor_show_command(us->srb));
+#ifdef CONFIG_MACH_MX51_BABBAGE
+ if ((us->srb->cmnd[0] == 0x85) &&
+ (le16_to_cpu(us->pusb_dev->descriptor.idVendor)
+ == 0x05e3) &&
+ (le16_to_cpu(us->pusb_dev->descriptor.idProduct)
+ == 0x0718))
+ US_DEBUGP("Skip ATA PASS-THROUGH command\n");
+ else
+#endif
us->proto_handler(us->srb, us);
}
More information about the kernel-team
mailing list