[U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device

2015-03-04 Thread franck . jullien
From: Franck Jullien 

Mass storage is not necessary present on interface 0. This
patch allow usb_stor_scan to look in every available interface.

Signed-off-by: Franck Jullien 
---

v2: create a new function to improve indentation

v3: more indentation improvement

 common/usb_storage.c |   45 -
 1 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/common/usb_storage.c b/common/usb_storage.c
index 1411737..05c96a8 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -208,6 +208,30 @@ static unsigned int usb_get_max_lun(struct us_data *us)
return (len > 0) ? *result : 0;
 }
 
+static int usb_storage_register(struct usb_device *dev, unsigned char iface)
+{
+   int lun, max_lun, start = usb_max_devs;
+   int nb_dev = 0;
+
+   if (!usb_storage_probe(dev, iface, &usb_stor[usb_max_devs]))
+   return nb_dev;
+
+   /*
+* OK, it's a storage device.  Iterate over its LUNs
+* and populate `usb_dev_desc'.
+*/
+   max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
+   for (lun = 0; lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV; lun++) 
{
+   usb_dev_desc[usb_max_devs].lun = lun;
+   if (usb_stor_get_info(dev, &usb_stor[start],
+   &usb_dev_desc[usb_max_devs]) == 1) {
+   nb_dev++;
+   }
+   }
+
+   return nb_dev;
+}
+
 
/***
  * scan the usb and reports device info
  * to the user if mode = 1
@@ -215,7 +239,7 @@ static unsigned int usb_get_max_lun(struct us_data *us)
  */
 int usb_stor_scan(int mode)
 {
-   unsigned char i;
+   unsigned char i, iface;
struct usb_device *dev;
 
if (mode == 1)
@@ -241,23 +265,10 @@ int usb_stor_scan(int mode)
if (dev == NULL)
break; /* no more devices available */
 
-   if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) {
-   /* OK, it's a storage device.  Iterate over its LUNs
-* and populate `usb_dev_desc'.
-*/
-   int lun, max_lun, start = usb_max_devs;
-
-   max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
-   for (lun = 0;
-lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV;
-lun++) {
-   usb_dev_desc[usb_max_devs].lun = lun;
-   if (usb_stor_get_info(dev, &usb_stor[start],
-   &usb_dev_desc[usb_max_devs]) == 1) {
-   usb_max_devs++;
-   }
-   }
+   for (iface = 0; iface < dev->config.no_of_if; iface++) {
+   usb_max_devs += usb_storage_register(dev, iface);
}
+
/* if storage device */
if (usb_max_devs == USB_MAX_STOR_DEV) {
printf("max USB Storage Device reached: %d stopping\n",
-- 
1.7.1

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device

2015-03-05 Thread Marek Vasut
On Wednesday, March 04, 2015 at 09:07:00 PM, franck.jull...@gmail.com wrote:
> From: Franck Jullien 
> 
> Mass storage is not necessary present on interface 0. This
> patch allow usb_stor_scan to look in every available interface.
> 
> Signed-off-by: Franck Jullien 

Thanks!

Acked-by: Marek Vasut 

Are you OK if I apply this for -next (that is, after 2015.04 is out) ?

Best regards,
Marek Vasut
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device

2015-03-05 Thread Franck Jullien
2015-03-05 14:52 GMT+01:00 Marek Vasut :
> On Wednesday, March 04, 2015 at 09:07:00 PM, franck.jull...@gmail.com wrote:
>> From: Franck Jullien 
>>
>> Mass storage is not necessary present on interface 0. This
>> patch allow usb_stor_scan to look in every available interface.
>>
>> Signed-off-by: Franck Jullien 
>
> Thanks!
>
> Acked-by: Marek Vasut 
>
> Are you OK if I apply this for -next (that is, after 2015.04 is out) ?
>
> Best regards,
> Marek Vasut

Sure, there is no hurry.

Franck.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device

2015-03-05 Thread Marek Vasut
On Thursday, March 05, 2015 at 03:11:25 PM, Franck Jullien wrote:
> 2015-03-05 14:52 GMT+01:00 Marek Vasut :
> > On Wednesday, March 04, 2015 at 09:07:00 PM, franck.jull...@gmail.com wrote:
> >> From: Franck Jullien 
> >> 
> >> Mass storage is not necessary present on interface 0. This
> >> patch allow usb_stor_scan to look in every available interface.
> >> 
> >> Signed-off-by: Franck Jullien 
> > 
> > Thanks!
> > 
> > Acked-by: Marek Vasut 
> > 
> > Are you OK if I apply this for -next (that is, after 2015.04 is out) ?
> > 
> > Best regards,
> > Marek Vasut
> 
> Sure, there is no hurry.

Applied for -next , thanks!

Best regards,
Marek Vasut
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device

2015-04-17 Thread Simon Glass
+Tom

Hi Franck,

On 4 March 2015 at 13:07,   wrote:
> From: Franck Jullien 
>
> Mass storage is not necessary present on interface 0. This
> patch allow usb_stor_scan to look in every available interface.
>
> Signed-off-by: Franck Jullien 
> ---
>
> v2: create a new function to improve indentation
>
> v3: more indentation improvement
>
>  common/usb_storage.c |   45 -
>  1 files changed, 28 insertions(+), 17 deletions(-)
>
> diff --git a/common/usb_storage.c b/common/usb_storage.c
> index 1411737..05c96a8 100644
> --- a/common/usb_storage.c
> +++ b/common/usb_storage.c
> @@ -208,6 +208,30 @@ static unsigned int usb_get_max_lun(struct us_data *us)
> return (len > 0) ? *result : 0;
>  }
>
> +static int usb_storage_register(struct usb_device *dev, unsigned char iface)
> +{
> +   int lun, max_lun, start = usb_max_devs;
> +   int nb_dev = 0;
> +
> +   if (!usb_storage_probe(dev, iface, &usb_stor[usb_max_devs]))
> +   return nb_dev;
> +
> +   /*
> +* OK, it's a storage device.  Iterate over its LUNs
> +* and populate `usb_dev_desc'.
> +*/
> +   max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
> +   for (lun = 0; lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV; 
> lun++) {
> +   usb_dev_desc[usb_max_devs].lun = lun;
> +   if (usb_stor_get_info(dev, &usb_stor[start],
> +   &usb_dev_desc[usb_max_devs]) == 1) {
> +   nb_dev++;

Should start or usb_max_devs increase here? This will use the same
block_dev_desc_t for each device, won't it?

> +   }
> +   }
> +
> +   return nb_dev;
> +}
> +
>  
> /***
>   * scan the usb and reports device info
>   * to the user if mode = 1
> @@ -215,7 +239,7 @@ static unsigned int usb_get_max_lun(struct us_data *us)
>   */
>  int usb_stor_scan(int mode)
>  {
> -   unsigned char i;
> +   unsigned char i, iface;
> struct usb_device *dev;
>
> if (mode == 1)
> @@ -241,23 +265,10 @@ int usb_stor_scan(int mode)
> if (dev == NULL)
> break; /* no more devices available */
>
> -   if (usb_storage_probe(dev, 0, &usb_stor[usb_max_devs])) {
> -   /* OK, it's a storage device.  Iterate over its LUNs
> -* and populate `usb_dev_desc'.
> -*/
> -   int lun, max_lun, start = usb_max_devs;
> -
> -   max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
> -   for (lun = 0;
> -lun <= max_lun && usb_max_devs < 
> USB_MAX_STOR_DEV;
> -lun++) {
> -   usb_dev_desc[usb_max_devs].lun = lun;
> -   if (usb_stor_get_info(dev, &usb_stor[start],
> -   &usb_dev_desc[usb_max_devs]) == 1) {
> -   usb_max_devs++;
> -   }
> -   }
> +   for (iface = 0; iface < dev->config.no_of_if; iface++) {
> +   usb_max_devs += usb_storage_register(dev, iface);
> }
> +
> /* if storage device */
> if (usb_max_devs == USB_MAX_STOR_DEV) {
> printf("max USB Storage Device reached: %d 
> stopping\n",
> --
> 1.7.1
>

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device

2015-04-17 Thread Franck Jullien
Hi Simon,

2015-04-17 18:33 GMT+02:00 Simon Glass :
> +Tom
>
> Hi Franck,
>
> On 4 March 2015 at 13:07,   wrote:
>> From: Franck Jullien 
>>
>> Mass storage is not necessary present on interface 0. This
>> patch allow usb_stor_scan to look in every available interface.
>>
>> Signed-off-by: Franck Jullien 
>> ---
>>
>> v2: create a new function to improve indentation
>>
>> v3: more indentation improvement
>>
>>  common/usb_storage.c |   45 -
>>  1 files changed, 28 insertions(+), 17 deletions(-)
>>
>> diff --git a/common/usb_storage.c b/common/usb_storage.c
>> index 1411737..05c96a8 100644
>> --- a/common/usb_storage.c
>> +++ b/common/usb_storage.c
>> @@ -208,6 +208,30 @@ static unsigned int usb_get_max_lun(struct us_data *us)
>> return (len > 0) ? *result : 0;
>>  }
>>
>> +static int usb_storage_register(struct usb_device *dev, unsigned char iface)
>> +{
>> +   int lun, max_lun, start = usb_max_devs;
>> +   int nb_dev = 0;
>> +
>> +   if (!usb_storage_probe(dev, iface, &usb_stor[usb_max_devs]))
>> +   return nb_dev;
>> +
>> +   /*
>> +* OK, it's a storage device.  Iterate over its LUNs
>> +* and populate `usb_dev_desc'.
>> +*/
>> +   max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]);
>> +   for (lun = 0; lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV; 
>> lun++) {
>> +   usb_dev_desc[usb_max_devs].lun = lun;
>> +   if (usb_stor_get_info(dev, &usb_stor[start],
>> +   &usb_dev_desc[usb_max_devs]) == 1) {
>> +   nb_dev++;
>
> Should start or usb_max_devs increase here? This will use the same
> block_dev_desc_t for each device, won't it?
>

Good catch. I'll write a patch when I have some time (or someone can do that).
However, I won't be able to test it on hardware because I don't have
access to it anymore.

We could also revert this patch. Sorry for my mistake.

Franck.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot