[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