[PATCH 1/1] usb: gadget: mark init as late_initcall

2013-09-23 Thread Peter Chen
Since we introduce -EPROBE_DEFER for udc driver, it will be
probed at late_initcall if it is defered. When the gadget
is built in, it will return couldn't find an available UDC
at such case. That's the problem we met at below link:

http://marc.info/?l=linux-usbm=137706435611447w=2

We have no driver's probe at gadget driver, so we can't return
-EPROBE_DEFER. And it is also not suitable to defer udc_bind_to_driver
if the udc is not found temporarily, since it is hard to decide the
return value for usb_gadget_probe_driver.

Due to above reasons, mark gadget's init as late_initcall may be a
moderate solution.

Signed-off-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/gadget/acm_ms.c   |2 +-
 drivers/usb/gadget/audio.c|2 +-
 drivers/usb/gadget/cdc2.c |2 +-
 drivers/usb/gadget/ether.c|2 +-
 drivers/usb/gadget/gmidi.c|2 +-
 drivers/usb/gadget/hid.c  |2 +-
 drivers/usb/gadget/mass_storage.c |2 +-
 drivers/usb/gadget/multi.c|2 +-
 drivers/usb/gadget/ncm.c  |2 +-
 drivers/usb/gadget/nokia.c|2 +-
 drivers/usb/gadget/printer.c  |2 +-
 drivers/usb/gadget/serial.c   |2 +-
 drivers/usb/gadget/webcam.c   |2 +-
 drivers/usb/gadget/zero.c |2 +-
 14 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/acm_ms.c b/drivers/usb/gadget/acm_ms.c
index 4b947bb..d712962 100644
--- a/drivers/usb/gadget/acm_ms.c
+++ b/drivers/usb/gadget/acm_ms.c
@@ -224,7 +224,7 @@ static int __init init(void)
 {
return usb_composite_probe(acm_ms_driver);
 }
-module_init(init);
+late_initcall(init);
 
 static void __exit cleanup(void)
 {
diff --git a/drivers/usb/gadget/audio.c b/drivers/usb/gadget/audio.c
index 231b0ef..04345a4 100644
--- a/drivers/usb/gadget/audio.c
+++ b/drivers/usb/gadget/audio.c
@@ -176,7 +176,7 @@ static int __init init(void)
 {
return usb_composite_probe(audio_driver);
 }
-module_init(init);
+late_initcall(init);
 
 static void __exit cleanup(void)
 {
diff --git a/drivers/usb/gadget/cdc2.c b/drivers/usb/gadget/cdc2.c
index 5a5acf2..a4a3407 100644
--- a/drivers/usb/gadget/cdc2.c
+++ b/drivers/usb/gadget/cdc2.c
@@ -256,7 +256,7 @@ static int __init init(void)
 {
return usb_composite_probe(cdc_driver);
 }
-module_init(init);
+late_initcall(init);
 
 static void __exit cleanup(void)
 {
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index c1c113e..e0722e9 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -483,7 +483,7 @@ static int __init init(void)
 {
return usb_composite_probe(eth_driver);
 }
-module_init(init);
+late_initcall(init);
 
 static void __exit cleanup(void)
 {
diff --git a/drivers/usb/gadget/gmidi.c b/drivers/usb/gadget/gmidi.c
index e879e2c..67bd00a 100644
--- a/drivers/usb/gadget/gmidi.c
+++ b/drivers/usb/gadget/gmidi.c
@@ -167,7 +167,7 @@ static int __init midi_init(void)
 {
return usb_composite_probe(midi_driver);
 }
-module_init(midi_init);
+late_initcall(midi_init);
 
 static void __exit midi_cleanup(void)
 {
diff --git a/drivers/usb/gadget/hid.c b/drivers/usb/gadget/hid.c
index 778613e..42756a0 100644
--- a/drivers/usb/gadget/hid.c
+++ b/drivers/usb/gadget/hid.c
@@ -256,7 +256,7 @@ static int __init hidg_init(void)
 
return status;
 }
-module_init(hidg_init);
+late_initcall(hidg_init);
 
 static void __exit hidg_cleanup(void)
 {
diff --git a/drivers/usb/gadget/mass_storage.c 
b/drivers/usb/gadget/mass_storage.c
index 080e577..fd26fc8 100644
--- a/drivers/usb/gadget/mass_storage.c
+++ b/drivers/usb/gadget/mass_storage.c
@@ -189,7 +189,7 @@ static int __init msg_init(void)
 {
return usb_composite_probe(msg_driver);
 }
-module_init(msg_init);
+late_initcall(msg_init);
 
 static void msg_cleanup(void)
 {
diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c
index 2a1ebef..c5956bf 100644
--- a/drivers/usb/gadget/multi.c
+++ b/drivers/usb/gadget/multi.c
@@ -365,7 +365,7 @@ static int __init multi_init(void)
 {
return usb_composite_probe(multi_driver);
 }
-module_init(multi_init);
+late_initcall(multi_init);
 
 static void __exit multi_exit(void)
 {
diff --git a/drivers/usb/gadget/ncm.c b/drivers/usb/gadget/ncm.c
index 81956fe..6be75d4 100644
--- a/drivers/usb/gadget/ncm.c
+++ b/drivers/usb/gadget/ncm.c
@@ -212,7 +212,7 @@ static int __init init(void)
 {
return usb_composite_probe(ncm_driver);
 }
-module_init(init);
+late_initcall(init);
 
 static void __exit cleanup(void)
 {
diff --git a/drivers/usb/gadget/nokia.c b/drivers/usb/gadget/nokia.c
index 0a8099a..b07451e 100644
--- a/drivers/usb/gadget/nokia.c
+++ b/drivers/usb/gadget/nokia.c
@@ -351,7 +351,7 @@ static int __init nokia_init(void)
 {
return usb_composite_probe(nokia_driver);
 }
-module_init(nokia_init);
+late_initcall(nokia_init);
 
 static void __exit nokia_cleanup(void)
 {
diff --git a/drivers/usb/gadget/printer.c 

[PATCH -next] USB: WUSBCORE: use list_move_tail instead of list_del/list_add_tail

2013-09-23 Thread Wei Yongjun
From: Wei Yongjun yongjun_...@trendmicro.com.cn

Using list_move_tail() instead of list_del() + list_add_tail().

Signed-off-by: Wei Yongjun yongjun_...@trendmicro.com.cn
---
 drivers/usb/wusbcore/wa-xfer.c | 6 ++
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c
index 6ad02f5..cf10979 100644
--- a/drivers/usb/wusbcore/wa-xfer.c
+++ b/drivers/usb/wusbcore/wa-xfer.c
@@ -1552,10 +1552,8 @@ error_complete:
 
dev_info(dev, Control EP stall.  Queue delayed work.\n);
spin_lock_irq(wa-xfer_list_lock);
-   /* remove xfer from xfer_list. */
-   list_del(xfer-list_node);
-   /* add xfer to xfer_errored_list. */
-   list_add_tail(xfer-list_node, wa-xfer_errored_list);
+   /* move xfer from xfer_list to xfer_errored_list. */
+   list_move_tail(xfer-list_node, wa-xfer_errored_list);
spin_unlock_irq(wa-xfer_list_lock);
spin_unlock_irqrestore(xfer-lock, flags);
queue_work(wusbd, wa-xfer_error_work);

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: dwc3: Remove additional delay of 100ms when resuming

2013-09-23 Thread Jingoo Han
On Monday, September 23, 2013 12:38 PM, Vivek Gautam wrote:
 
 This delay got introduced in:
 7415f17 usb: dwc3: core: add power management support
 which reflected similar code in dwc3_core_soft_reset() function.
 However, originally the delay of 100ms in dwc3_core_soft_reset() was
 meant to assist USB2PHY and USB3PHY reset, not for usb_phy_init()
 sequence.
 
 We should get rid of this delay, since things will still work
 fine without this.
 
 Signed-off-by: Vivek Gautam gautam.vi...@samsung.com

Reviewed-by: Jingoo Han jg1@samsung.com

OK, I see.
There is no reason to add msleep(100) to dwc3_resume();
thus, this msleep(100) can be removed.

Best regards,
Jingoo Han

 ---
 
 Hi Felipe,
 
 I remember this change for phy_init including msleep(100) was
 suggested by me, after testing the patch-series for PM support
 to dwc3.
 Sorry for that !!
 
  drivers/usb/dwc3/core.c |1 -
  1 files changed, 0 insertions(+), 1 deletions(-)
 
 diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
 index 474162e..e88ffae 100644
 --- a/drivers/usb/dwc3/core.c
 +++ b/drivers/usb/dwc3/core.c
 @@ -691,7 +691,6 @@ static int dwc3_resume(struct device *dev)
 
   usb_phy_init(dwc-usb3_phy);
   usb_phy_init(dwc-usb2_phy);
 - msleep(100);
 
   spin_lock_irqsave(dwc-lock, flags);
 
 --
 1.7.6.5


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] USB: gadget: s3c-hsotg: add isochronous transfers support

2013-09-23 Thread Robert Baldyga
This patch adds isochronous transfer support. It adds few modifications:
- Modify s3c_hsotg_write_fifo() function. It actually calculates transfer
  size, taking into account Multi Count value, which indicates number of
  transactions per microframe.
- Fix s3c_hsotg_start_req() function by setting number of packets to Multi
  Count field in DIEPTSIZ register for isochronous endpoints.
- Fix s3c_hsotg_set_ep_maxpacket() function. Field wMaxPacketSize of endpoint
  descriptor is now splitted into maximum packet size value and number of
  additional transaction per microframe.
- Modify s3c_hsotg_epint() function. Some interrupts are ignored for
  isochronous endpoints, (e.g. INTknTXFEmpMsk) becouse isochronous request is
  always transfered in single transaction, which ends with XferCompl interrupt.
  Add Odd/Even microframe toggle to allow data transfering in each microframe.
- Fix s3c_hsotg_ep_enable() function by supporting isochronous endpoint type.

Signed-off-by: Robert Baldyga r.bald...@samsung.com
Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
---
 drivers/usb/gadget/s3c-hsotg.c |   74 +++-
 1 file changed, 57 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
index d5d951d..d737452 100644
--- a/drivers/usb/gadget/s3c-hsotg.c
+++ b/drivers/usb/gadget/s3c-hsotg.c
@@ -82,9 +82,12 @@ struct s3c_hsotg_req;
  * @dir_in: Set to true if this endpoint is of the IN direction, which
  * means that it is sending data to the Host.
  * @index: The index for the endpoint registers.
+ * @mc: Multi Count - number of transactions per microframe
+ * @interval - Interval for periodic endpoints
  * @name: The name array passed to the USB core.
  * @halted: Set if the endpoint has been halted.
  * @periodic: Set if this is a periodic ep, such as Interrupt
+ * @insochronous: Set if this is a isochronous ep
  * @sent_zlp: Set if we've sent a zero-length packet.
  * @total_data: The total number of data bytes done.
  * @fifo_size: The size of the FIFO (for periodic IN endpoints)
@@ -120,9 +123,12 @@ struct s3c_hsotg_ep {
 
unsigned char   dir_in;
unsigned char   index;
+   unsigned char   mc;
+   unsigned char   interval;
 
unsigned inthalted:1;
unsigned intperiodic:1;
+   unsigned intisochronous:1;
unsigned intsent_zlp:1;
 
charname[10];
@@ -467,6 +473,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
void *data;
int can_write;
int pkt_round;
+   int max_transfer;
 
to_write -= (buf_pos - hs_ep-last_load);
 
@@ -534,15 +541,17 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
can_write *= 4; /* fifo size is in 32bit quantities. */
}
 
-   dev_dbg(hsotg-dev, %s: GNPTXSTS=%08x, can=%d, to=%d, mps %d\n,
-__func__, gnptxsts, can_write, to_write, hs_ep-ep.maxpacket);
+   max_transfer = hs_ep-ep.maxpacket * hs_ep-mc;
+
+   dev_dbg(hsotg-dev, %s: GNPTXSTS=%08x, can=%d, to=%d, max_transfer 
%d\n,
+__func__, gnptxsts, can_write, to_write, max_transfer);
 
/*
 * limit to 512 bytes of data, it seems at least on the non-periodic
 * FIFO, requests of 512 cause the endpoint to get stuck with a
 * fragment of the end of the transfer in it.
 */
-   if (can_write  512)
+   if (can_write  512  !periodic)
can_write = 512;
 
/*
@@ -550,8 +559,8 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
 * the transfer to return that it did not run out of fifo space
 * doing it.
 */
-   if (to_write  hs_ep-ep.maxpacket) {
-   to_write = hs_ep-ep.maxpacket;
+   if (to_write  max_transfer) {
+   to_write = max_transfer;
 
/* it's needed only when we do not use dedicated fifos */
if (!hsotg-dedicated_fifos)
@@ -564,7 +573,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
 
if (to_write  can_write) {
to_write = can_write;
-   pkt_round = to_write % hs_ep-ep.maxpacket;
+   pkt_round = to_write % max_transfer;
 
/*
 * Round the write down to an
@@ -730,8 +739,16 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
else
packets = 1;/* send one packet if length is zero. */
 
+   if (length  (hs_ep-mc * hs_ep-ep.maxpacket)  hs_ep-isochronous) {
+   dev_err(hsotg-dev, req length  maxpacket*mc\n);
+   return;
+   }
+
if (dir_in  index != 0)
-   epsize = DxEPTSIZ_MC(1);
+   if (hs_ep-isochronous)
+   epsize = DxEPTSIZ_MC(packets);
+   else
+   epsize = DxEPTSIZ_MC(1);
   

[PATCH] usb: s3c-hsotg: add isochronous transfers support

2013-09-23 Thread Robert Baldyga
Hello,

There is my initial proposal for isochronous transfers support in s3c-hsotg
driver.

This patch does few modifications:
- Fix few functions to make them usable in isochronous transfers handling.
- Add few fields to s3c_hsotg_ep structure, used for isochronous ep handling.
- Add isochronous specific endpoint descriptor fields handling.
- Add high-speed high-bandwidth trensfers support by correct Multi Count
  handling and Odd/Even frame toggle for interval=1.
- Improve endpoint interrupt handling by ignoring unneded interrupts for
  isochronous endpoints.

Best regards
Robert Baldyga
Samsung RD Institute Poland

Robert Baldyga (1):
  USB: gadget: s3c-hsotg: add isochronous transfers support

 drivers/usb/gadget/s3c-hsotg.c |   74 +++-
 1 file changed, 57 insertions(+), 17 deletions(-)

-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Cannot shutdown power use from built in webcam in thinkpad T530 questions]

2013-09-23 Thread Oleksij Rempel
Am 22.09.2013 22:36, schrieb Marc MERLIN:
 On Sun, Sep 22, 2013 at 04:32:08PM -0400, Alan Stern wrote:
 I'm somehow thinking there is a driver or hardware problem when the device
 does get stuck in a mode where it won't sleep properly again until the next
 reboot (just unloading/loading the driver does not fix this).

 That's quite possible.  But if it is a driver problem, wouldn't 
 unloading and reloading the driver fix it?
  
 You'd think that but it hasn't so far with this one device.
 
 You might get more information from a kernel with CONFIG_USB_DEBUG 
 enabled.  Especially if you add

 #define VERBOSE_DEBUG

 to drivers/usb/core/driver.c before the first #include line.

 Do you think thaty would help debug the problem above, or not really? I'm

 There's no way to know in advance.

 starting to think that the USB layer is not at fault, although I could be
 wrong I suppose.

 You asked for advice on things to try, and I suggested something.  
 That's the best I can do.
 
 Understood, just making sure this was still potentially useful considering
 what I found out since my last message.

Which version of powertop are you actually using? None of current
versions would show you Watt usage for devices.
you can use watch grep . * instead and check fallowing fields:
runtime_suspended_time - suspend time. If it is growing device is suspended
runtime_active_kids - if not zero, some program use it
control - if on then autosuspend is disabled.

-- 
Regards,
Oleksij
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: No keyboard and mouse usb detected at startup.

2013-09-23 Thread Roger Quadros
Hi,

On 09/23/2013 07:26 AM, Kumar Gaurav wrote:
 Hi Alan,
 I have one question just for knowledge. I was looking for the reason of this 
 bug but wasn't even able to identify which driver (ehci,xhci etc) these 
 devices are using. I tried inspecting with my USB mouse and found out it was 
 ehci (i believe it depends on devices).
 My configuration files are almost similar between 3.10 and 3.11...
 Attached 2 lsusb -v files, 1 that works, the other doesn't.

 I use debian wheezy with LUKS.

 Thank you, best regards

 Note: Same problem with the kernel 3.12rc1.
 It looks like your system did not load the ohci-pci driver.  Is
 CONFIG_USB_OHCI_HCD_PCI enabled?
 how did you identified it was using ohci?
 Please reply.

Because almost all keyboards/mice are full speed devices and will need
the OHCI controller to handle them, unless they are connected via
an external high speed hub that does Transaction Translation (TT).

cheers,
-roger

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 5/7] staging: usbip: Add encryption support to kernel

2013-09-23 Thread Dan Carpenter
On Thu, Sep 19, 2013 at 04:11:57PM +0200, Dominik Paulus wrote:
 +int usbip_init_crypto(struct usbip_device *ud, unsigned char *sendkey, 
 unsigned
 + char *recvkey)
 +{
 + int ret;
 +
 + ud-use_crypto = 1;
 +
 + ud-tfm_recv = crypto_alloc_aead(gcm(aes), 0, 0);
 + if (IS_ERR(ud-tfm_recv))
 + return -PTR_ERR(ud-tfm_recv);

PTR_ERR() already returns a negative.

 + ud-tfm_send = crypto_alloc_aead(gcm(aes), 0, 0);
 + if (IS_ERR(ud-tfm_send)) {
 + crypto_free_aead(ud-tfm_recv);
 + return -PTR_ERR(ud-tfm_send);

Again.  All the uses of PTR_ERR() in this patch have the same problem.

 + plainbuf = kmalloc(USBIP_PACKETSIZE, GFP_KERNEL);
 + if (IS_ERR(plainbuf))
 + return -PTR_ERR(plainbuf);

kmalloc() returns NULL on error and not an ERR_PTR.  All the calls to
kmalloc() have this problem.

 + cipherbuf = kmalloc(USBIP_PACKETSIZE, GFP_KERNEL);
 + if (IS_ERR(cipherbuf)) {
 + kfree(plainbuf);
 + return -PTR_ERR(cipherbuf);
 + }
 +
 + while (total  size) {
 + uint32_t packetsize;
 + struct kvec recvvec;
 +
 + /*
 +  * We use a global kfifo to buffer unrequested plaintext bytes.
 +  * Flush this buffer first before receiving new data.
 +  */
 + if (kfifo_len(ud-recv_queue)) {
 + size_t next = min_t(size_t, kfifo_len(ud-recv_queue),
 + size - total);
 + /* No error checking necessary - see previous line */
 + ret = kfifo_out(ud-recv_queue, ((char *)
 + vec[0].iov_base)+total, next);


The comment assume there is only one reader and one writer at a time,
yes?  The casting is not needed:

ret = kfifo_out(ud-recv_queue,
vec[0].iov_base + total, next);


v +total += next;
 + continue;
 + }
 +
 + /* See usbip_sendmsg() for the format of one encrypted packet */
 +
 + /*
 +  * Receive size of next crypto packet
 +  */
 + recvvec.iov_base = packetsize;
 + recvvec.iov_len = sizeof(packetsize);
 +
 + ret = kernel_recvmsg(ud-tcp_socket, msg, recvvec, 1,
 + sizeof(packetsize), flags);
 + packetsize = be32_to_cpu(packetsize);
 + if (ret = 0) {

I think a return of zero should mean total = -EBADMSG;.  In other words
this check should be if (ret  0) { and we hit the next else if.
Same below again.

 + total = ret;
 + goto err;
 + } else if (ret != sizeof(packetsize)) {
 + total = -EBADMSG;
 + goto err;
 + }
 +
 + if (packetsize  USBIP_PACKETSIZE) {
 + total = -EBADMSG;
 + goto err;
 + }
 +

regards,
dan carpenter
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 5/7] staging: usbip: Add encryption support to kernel

2013-09-23 Thread Dan Carpenter
On Thu, Sep 19, 2013 at 04:11:57PM +0200, Dominik Paulus wrote:
 +int usbip_init_crypto(struct usbip_device *ud, unsigned char *sendkey, 
 unsigned
 + char *recvkey)
 +{
 + int ret;
 +
 + ud-use_crypto = 1;
 +
 + ud-tfm_recv = crypto_alloc_aead(gcm(aes), 0, 0);
 + if (IS_ERR(ud-tfm_recv))
 + return -PTR_ERR(ud-tfm_recv);
 + ud-tfm_send = crypto_alloc_aead(gcm(aes), 0, 0);
 + if (IS_ERR(ud-tfm_send)) {
 + crypto_free_aead(ud-tfm_recv);
 + return -PTR_ERR(ud-tfm_send);
 + }
 + ret = kfifo_alloc(ud-recv_queue, RECVQ_SIZE, GFP_KERNEL);
 + if (ret) {
 + crypto_free_aead(ud-tfm_recv);
 + crypto_free_aead(ud-tfm_send);
 + return ret;
 + }
 +
 + if (crypto_aead_setkey(ud-tfm_send, sendkey, USBIP_KEYSIZE) != 0 ||
 + crypto_aead_setkey(ud-tfm_recv, recvkey,
 + USBIP_KEYSIZE) != 0 ||
 + crypto_aead_setauthsize(ud-tfm_send,
 + USBIP_AUTHSIZE) != 0 ||
 + crypto_aead_setauthsize(ud-tfm_recv,
 + USBIP_AUTHSIZE)) {
 + crypto_free_aead(ud-tfm_recv);
 + crypto_free_aead(ud-tfm_send);
 + kfifo_free(ud-recv_queue);
 + }

This returns success on error instead of failure.

The indenting is messed up.  There are three places which check  != 0
and doesn't.  Please leave off the != 0 throughout the whole patch.
It should look like:

if (crypto_aead_setkey(ud-tfm_send, sendkey, USBIP_KEYSIZE) ||
crypto_aead_setkey(ud-tfm_recv, recvkey, USBIP_KEYSIZE) ||
crypto_aead_setauthsize(ud-tfm_send, USBIP_AUTHSIZE) ||
crypto_aead_setauthsize(ud-tfm_recv, USBIP_AUTHSIZE)) {
ret = -EINVAL;
goto err_free_fifo;
}

Notice how the label name is chosen based on the label location and not
the goto location.

The end of the function should look like:

return 0;

err_free_fifo:
kfifo_free(ud-recv_queue);
err_free_send:
crypto_free_aead(ud-tfm_send);
err_free_recv:
crypto_free_aead(ud-tfm_recv);

return ret;

regards,
dan carpenter

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 5/5] dma: cppi41: add support for suspend and resume

2013-09-23 Thread Vinod Koul
On Mon, Sep 23, 2013 at 07:53:11AM +0200, Daniel Mack wrote:
 On 23.09.2013 06:09, Vinod Koul wrote:
  On Sun, Sep 22, 2013 at 04:50:04PM +0200, Daniel Mack wrote:
 
  +#ifdef CONFIG_PM_SLEEP
  a
  
  +static int cppi41_suspend(struct device *dev)
  +{
  +  struct cppi41_dd *cdd = dev_get_drvdata(dev);
  +
  +  cppi_writel(0, cdd-usbss_mem + USBSS_IRQ_CLEARR);
  +  disable_sched(cdd);
  +
  +  return 0;
  +}
  +
  +static int cppi41_resume(struct device *dev)
  +{
  +  struct cppi41_dd *cdd = dev_get_drvdata(dev);
  +  int i;
  +
  +  for (i = 0; i  DESCS_AREAS; i++)
  +  cppi_writel(cdd-descs_phys, cdd-qmgr_mem + QMGR_MEMBASE(i));
  +
  +  init_sched(cdd);
  +  cppi_writel(USBSS_IRQ_PD_COMP, cdd-usbss_mem + USBSS_IRQ_ENABLER);
  +
  +  return 0;
  +}
  +#endif
  +
  +static SIMPLE_DEV_PM_OPS(cppi41_pm_ops, cppi41_suspend, cppi41_resume);
  Here is the macro in pm.h
 
 [...]
 
  Now since you are using the macro there should be no need to wrap ifdef 
  around
  your code, the macro will take care of it.
 
 Well yes, which is why I put the macro itself *outside* of the #ifdef
 block. Without that #ifdef, however, and with CONFIG_PM_SLEEP unset, I get:
 
 drivers/dma/cppi41.c:1043:12: warning: ‘cppi41_suspend’ defined but not
 used [-Wunused-function]
  static int cppi41_suspend(struct device *dev)
 ^
 drivers/dma/cppi41.c:1053:12: warning: ‘cppi41_resume’ defined but not
 used [-Wunused-function]
  static int cppi41_resume(struct device *dev)
 ^
 
 ... which doesn't surprise me much. Or do I still not get your point?
And this is what i had expected... I was thinking we should ignore this, but
this is better too, so I will try to apply this now

~Vinod

-- 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 5/5] dma: cppi41: add support for suspend and resume

2013-09-23 Thread Vinod Koul
On Sun, Sep 22, 2013 at 04:50:04PM +0200, Daniel Mack wrote:
 This patch adds support for suspend/resume functionality to the cppi41
 DMA driver. The steps necessary to make the system resume properly were
 figured out by trial-and-error. The code as it stands now is the
 minimum that has to be done to put the musb host system on an AM33xx
 system into an operable state after resume.
Applied, thanks

~Vinod
 
 Signed-off-by: Daniel Mack zon...@gmail.com
 ---
  drivers/dma/cppi41.c | 29 +
  1 file changed, 29 insertions(+)
 
 diff --git a/drivers/dma/cppi41.c b/drivers/dma/cppi41.c
 index 3347321..89decc9 100644
 --- a/drivers/dma/cppi41.c
 +++ b/drivers/dma/cppi41.c
 @@ -1040,12 +1040,41 @@ static int cppi41_dma_remove(struct platform_device 
 *pdev)
   return 0;
  }
  
 +#ifdef CONFIG_PM_SLEEP
 +static int cppi41_suspend(struct device *dev)
 +{
 + struct cppi41_dd *cdd = dev_get_drvdata(dev);
 +
 + cppi_writel(0, cdd-usbss_mem + USBSS_IRQ_CLEARR);
 + disable_sched(cdd);
 +
 + return 0;
 +}
 +
 +static int cppi41_resume(struct device *dev)
 +{
 + struct cppi41_dd *cdd = dev_get_drvdata(dev);
 + int i;
 +
 + for (i = 0; i  DESCS_AREAS; i++)
 + cppi_writel(cdd-descs_phys, cdd-qmgr_mem + QMGR_MEMBASE(i));
 +
 + init_sched(cdd);
 + cppi_writel(USBSS_IRQ_PD_COMP, cdd-usbss_mem + USBSS_IRQ_ENABLER);
 +
 + return 0;
 +}
 +#endif
 +
 +static SIMPLE_DEV_PM_OPS(cppi41_pm_ops, cppi41_suspend, cppi41_resume);
 +
  static struct platform_driver cpp41_dma_driver = {
   .probe  = cppi41_dma_probe,
   .remove = cppi41_dma_remove,
   .driver = {
   .name = cppi41-dma-engine,
   .owner = THIS_MODULE,
 + .pm = cppi41_pm_ops,
   .of_match_table = of_match_ptr(cppi41_dma_ids),
   },
  };
 -- 
 1.8.3.1
 

-- 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 5/7] staging: usbip: Add encryption support to kernel

2013-09-23 Thread Dan Carpenter
On Thu, Sep 19, 2013 at 04:11:57PM +0200, Dominik Paulus wrote:
 +/*
 + * Perform encryption/decryption on one chunk of data.
 + * Uses global crypto state stored in usbip_device.
 + * Parameters:
 + * encrypt: 1 to perform encryption, 0 to perform decryption operation

Make this a define:
#define USBIP_ENCRYPT 1
#define USBIP_ENCRYPT 0

 + * packetsize: Size of the encrypted packet, including the authentication 
 tag,
 + * not including the associated data (length field).
 + * plaintext and ciphertext have to be appropiately managed by the caller
 + * (i.e. they must be at least packetsize bytes long).
 + * Returns: 0 on success
 + */
 +static int usbip_crypt(struct usbip_device *ud, int encrypt, uint32_t
 + packetsize, unsigned char *plaintext, unsigned char
 + *ciphertext)

Don't break put line breaks between the type and the variable name.  It
should be:

static int usbip_crypt(struct usbip_device *ud, int encrypt,
uint32_t packetsize, unsigned char *plaintext,
unsigned char *ciphertext)

This applies to earlier patches in this series as well.

 +{
 + struct crypto_aead *tfm;
 + struct aead_request *req;
 + struct tcrypt_result result;
 + struct scatterlist plain, cipher, assoc;
 + char iv[16];
 + u64 *iv_num;
 + u64 iv_net;
 + const int plainsize = packetsize - USBIP_AUTHSIZE;

Is it possible that packetsize is less than USBIP_AUTHSIZE?

 + int ret;
 +
 + memset(iv, 0, sizeof(iv));
 + if (encrypt) {
 + tfm = ud-tfm_send;
 + iv_num = ud-ctr_send;
 + } else {
 + tfm = ud-tfm_recv;
 + iv_num = ud-ctr_recv;
 + }
 + iv_net = cpu_to_be64(*iv_num);
 + memcpy(iv, iv_net, sizeof(iv_net));
 +
 + req = aead_request_alloc(tfm, GFP_KERNEL);
 + if (IS_ERR(req))
 + return -PTR_ERR(req);
 +
 + init_completion(result.completion);
 + aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
 + tcrypt_complete, result);

Align this up like:

aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
  tcrypt_complete, result);


 +
 + sg_init_one(cipher, ciphertext, packetsize);
 + sg_init_one(plain, plaintext, plainsize);
 + crypto_aead_clear_flags(tfm, ~0);
 +
 + if (encrypt)
 + aead_request_set_crypt(req, plain, cipher, plainsize, iv);
 + else
 + aead_request_set_crypt(req, cipher, plain, packetsize, iv);
 + packetsize = cpu_to_be32(packetsize);
 + sg_init_one(assoc, packetsize, sizeof(packetsize));
 + /* Associated data: Unencrypted length tag */
 + aead_request_set_assoc(req, assoc, sizeof(packetsize));
 +
 + if (encrypt)
 + ret = crypto_aead_encrypt(req);
 + else
 + ret = crypto_aead_decrypt(req);
 +

Good on you for figuring out what crypto_aead_en/decrypt() returns.
Where are these functions documented?

 + switch (ret) {
 + case 0: /* Success */
 + break;
 + case -EINPROGRESS:
 + case -EBUSY:
 + wait_for_completion(result.completion);
 + break;
 + default:
 + aead_request_free(req);
 + return ret;
 + }
 +

regards,
dan carpenter

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [alsa-devel] [PATCH 23/51] DMA-API: dma: pl08x: add dma_set_mask_and_coherent() call

2013-09-23 Thread Vinod Koul
On Thu, Sep 19, 2013 at 10:48:01PM +0100, Russell King wrote:
 The DMA API requires drivers to call the appropriate dma_set_mask()
 functions before doing any DMA mapping.  Add this required call to
 the AMBA PL08x driver.
 
 Signed-off-by: Russell King rmk+ker...@arm.linux.org.uk
Acked-by: Vinod Koul vinod.k...@intel.com

~Vinod
 ---
  drivers/dma/amba-pl08x.c |5 +
  1 files changed, 5 insertions(+), 0 deletions(-)
 
 diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c
 index fce46c5..e51a983 100644
 --- a/drivers/dma/amba-pl08x.c
 +++ b/drivers/dma/amba-pl08x.c
 @@ -2055,6 +2055,11 @@ static int pl08x_probe(struct amba_device *adev, const 
 struct amba_id *id)
   if (ret)
   return ret;
  
 + /* Ensure that we can do DMA */
 + ret = dma_set_mask_and_coherent(adev-dev, DMA_BIT_MASK(32));
 + if (ret)
 + goto out_no_pl08x;
 +
   /* Create the driver state holder */
   pl08x = kzalloc(sizeof(*pl08x), GFP_KERNEL);
   if (!pl08x) {
 -- 
 1.7.4.4
 
 ___
 Alsa-devel mailing list
 alsa-de...@alsa-project.org
 http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

-- 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [alsa-devel] [PATCH 43/51] DMA-API: dma: edma.c: no need to explicitly initialize DMA masks

2013-09-23 Thread Vinod Koul
On Fri, Sep 20, 2013 at 12:15:39AM +0100, Russell King wrote:
 register_platform_device_full() can setup the DMA mask provided the
 appropriate member is set in struct platform_device_info.  So lets
 make that be the case.  This avoids a direct reference to the DMA
 masks by this driver.
 
 Signed-off-by: Russell King rmk+ker...@arm.linux.org.uk
Acked-by: Vinod Koul vinod.k...@intel.com

This also brings me question that should we force the driver to use the
dma_set_mask_and_coherent() API or they have below flexiblity too?

~Vinod

 ---
  drivers/dma/edma.c |6 ++
  1 files changed, 2 insertions(+), 4 deletions(-)
 
 diff --git a/drivers/dma/edma.c b/drivers/dma/edma.c
 index ff50ff4..7f9fe30 100644
 --- a/drivers/dma/edma.c
 +++ b/drivers/dma/edma.c
 @@ -702,11 +702,13 @@ static struct platform_device *pdev0, *pdev1;
  static const struct platform_device_info edma_dev_info0 = {
   .name = edma-dma-engine,
   .id = 0,
 + .dma_mask = DMA_BIT_MASK(32),
  };
  
  static const struct platform_device_info edma_dev_info1 = {
   .name = edma-dma-engine,
   .id = 1,
 + .dma_mask = DMA_BIT_MASK(32),
  };


  
  static int edma_init(void)
 @@ -720,8 +722,6 @@ static int edma_init(void)
   ret = PTR_ERR(pdev0);
   goto out;
   }
 - pdev0-dev.dma_mask = pdev0-dev.coherent_dma_mask;
 - pdev0-dev.coherent_dma_mask = DMA_BIT_MASK(32);
   }
  
   if (EDMA_CTLRS == 2) {
 @@ -731,8 +731,6 @@ static int edma_init(void)
   platform_device_unregister(pdev0);
   ret = PTR_ERR(pdev1);
   }
 - pdev1-dev.dma_mask = pdev1-dev.coherent_dma_mask;
 - pdev1-dev.coherent_dma_mask = DMA_BIT_MASK(32);
   }
  
  out:
 -- 
 1.7.4.4
 
 ___
 Alsa-devel mailing list
 alsa-de...@alsa-project.org
 http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

-- 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [alsa-devel] [PATCH 24/51] DMA-API: dma: pl330: add dma_set_mask_and_coherent() call

2013-09-23 Thread Vinod Koul
On Sat, Sep 21, 2013 at 09:00:00PM +0100, Russell King - ARM Linux wrote:
 On Fri, Sep 20, 2013 at 07:26:27PM +0200, Heiko Stübner wrote:
  Am Donnerstag, 19. September 2013, 23:49:01 schrieb Russell King:
   The DMA API requires drivers to call the appropriate dma_set_mask()
   functions before doing any DMA mapping.  Add this required call to
   the AMBA PL08x driver.
  ^--- copy and paste error - should of course be PL330
 
 Fixed, thanks.
with fixed changelog...

Acked-by: Vinod Koul vinod.k...@intel.com

~Vinod

-- 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb/core/devio.c:tolerate wrong direction flag in control endpoints

2013-09-23 Thread Kurt Garloff
Hi Alan,

On 09/23/2013 04:28 AM, Alan Stern wrote:
 On Sun, 22 Sep 2013, Kurt Garloff wrote:

 Well, this seems to be a question of terminology, no?
 I saw the endpoint byte as consisting of endpoint index plus the direction 
 bit.
 See the entry for Endpoint Address in Chapter 2 (Terms and 
 Abbreviations) of the USB 2.0 specification.  The definition says:

   The combination of an endpoint number and an endpoint direction
   on a USB device. Each endpoint address supports data transfer
   in one direction.

OK. This definitely helps me to use the correct terminology.
 OK, you certainly know the USB specs better than I do.

 If the message is not according to spec because the windex byte (which
 should reference the endpoint) has the endpoint direction flag wrong,
 then the question may become whether the kernel should reject it or
 leave that to the device.
 Rejecting by the kernel has the risk that somewhat non-compliant devices
 with somewhat non-compliant (userspace) drivers are prevented from working.
 While not rejecting has the risk that overly sensitive devices might freak 
 out
 on receiving a non-compliant transfer. The fact that Win does not not seem to
 filter here however might make that risk rather small.
 (Long years have taught us that companies don't test against the spec but 
 this
  OS from Redmond.)
 This is a good explanation of why the patch should be accepted.
OK, I added it into the patch header.
 It seems to interpret wIndex differently indeed. Not sure whether
 that qualifies as a bug or not. Maybe it should not claim to be a
 HID device then?
 Maybe not.  This particular combination of bRequestType and bRequest 
 values (0x22, 0x09) is not defined in the HID 1.11 spec.  Do you know 
 if it is defined somewhere else?
These are custom commands, somewhat described at
http://pegatech.com/_Uploads/Downloads/Documents/Protocol_Definition_Rev_1.12.pdf
 Hmmm, none of the devices I have show this.
 My impression was that the EP byte is composed of 
   ep = epindex | (dir==in? 0x80: 0)
 and that index alone must be unique already. But then again, I'm in no
 way an expert in USB specs and may just have jumped to conclusions
 from the wording.
 The spec is pretty clear about this.  For example, it says that in
 addition to endpoint 0, a device can have up to 15 input endpoints and 
 up to 15 output endpoints (section 5.3.1.2).

 (And again the behavior might not be enforced by the spec, but maybe
 by Windows?)
 More likely the behavior isn't enforced at all.  The device may simply 
 be buggy.
With behavior here I referred to the fact that I have not yet seen a USB
device that
has two endpoints with the same endpoint number (but different direction).
Anyway, that's not relevant to the patch ... We don't change the value of
wIndex, we just decide to let the transfer through and let the device
deal with it.
 Based on the observation that uurb.endpoint = 0 (see above), I have
 changed my code in the Linux program (at [2]) to use 0x00 as wIndex 
 instead of 0x81 (or formerly 0x01). It still worked.
 So it's questionable, whether wIndex should even point to an EP ...
 and the hardware might just ignore it.
 It looks that way.  The request claims to be class-specific, so it 
 would be nice to know which class document defines the request's 
 format.
I guess none ...
I just dropped the (or 00), as it's not reflected in the code ...
 Thanks for the review! I will submit a new patch.
 Good.

Find it here.
(Let me know if it should be sent again separately for some reason.)

Let me try inline insert (by c'n'p: I switched from mutt to Thunderbird
recently and lack
experience whether this breaks formatting or so ...)

8

From: Kurt Garloff k...@garloff.de
Date: Mon, 23 Sep 2013 14:19:02 +0200
Subject: Tolerate wrong direction bit in endpoint address for control
messages
   
Trying to read data from the Pegasus Technologies NoteTaker (0e20:0101)
[1] with the Windows App (EasyNote) works natively but fails when
Windows is running under KVM (and the USB device handed to KVM).
   
The reason is a USB control message
 usb 4-2.2: control urb: bRequestType=22 bRequest=09 wValue=0200
wIndex=0001 wLength=0008
This goes to endpoint address 0x01 (wIndex); however, endpoint number 1
is an input endpoint and thus has endpoint address 0x81.
   
The kernel thus rejects the IO and thus we see the failure.
   
Apparently, Linux is more strict here than Windows ... we can't change
the Win app easily, so that's a problem.

It seems that the Win app/driver is buggy here and the driver does not
behave fully according to the USB HID class that it claims to belong to.
The device seems to happily deal with that though (and seems to not
really care about this value much).

So the question is whether the Linux kernel should filter here.
Rejecting has the risk that somewhat non-compliant userspace apps/
drivers (most likely in a virtual machine) are prevented from working.
Not rejecting has the risk of 

[PATCH v1] USBNET: fix handling padding packet

2013-09-23 Thread Ming Lei
Commit 638c5115a7949(USBNET: support DMA SG) introduces DMA SG
if the usb host controller is capable of building packet from
discontinuous buffers, but missed handling padding packet when
building DMA SG.

This patch attachs the pre-allocated padding packet at the
end of the sg list, so padding packet can be sent to device
if drivers require that.

Reported-by: David Laight david.lai...@aculab.com
Acked-by: Oliver Neukum oli...@neukum.org
Signed-off-by: Ming Lei ming@canonical.com
---
v1:
- fix bug in case of dev-can_dma_sg and !urb-num_sgs
---
 drivers/net/usb/usbnet.c   |   27 +--
 include/linux/usb/usbnet.h |1 +
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 7b331e6..bf94e10 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1241,7 +1241,9 @@ static int build_dma_sg(const struct sk_buff *skb, struct 
urb *urb)
if (num_sgs == 1)
return 0;
 
-   urb-sg = kmalloc(num_sgs * sizeof(struct scatterlist), GFP_ATOMIC);
+   /* reserve one for zero packet */
+   urb-sg = kmalloc((num_sgs + 1) * sizeof(struct scatterlist),
+ GFP_ATOMIC);
if (!urb-sg)
return -ENOMEM;
 
@@ -1305,7 +1307,7 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
if (build_dma_sg(skb, urb)  0)
goto drop;
}
-   entry-length = length = urb-transfer_buffer_length;
+   length = urb-transfer_buffer_length;
 
/* don't assume the hardware handles USB_ZERO_PACKET
 * NOTE:  strictly conforming cdc-ether devices should expect
@@ -1317,15 +1319,18 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
if (length % dev-maxpacket == 0) {
if (!(info-flags  FLAG_SEND_ZLP)) {
if (!(info-flags  FLAG_MULTI_PACKET)) {
-   urb-transfer_buffer_length++;
-   if (skb_tailroom(skb)) {
+   length++;
+   if (skb_tailroom(skb)  !urb-num_sgs) {
skb-data[skb-len] = 0;
__skb_put(skb, 1);
-   }
+   } else if (urb-num_sgs)
+   sg_set_buf(urb-sg[urb-num_sgs++],
+   dev-padding_pkt, 1);
}
} else
urb-transfer_flags |= URB_ZERO_PACKET;
}
+   entry-length = urb-transfer_buffer_length = length;
 
spin_lock_irqsave(dev-txq.lock, flags);
retval = usb_autopm_get_interface_async(dev-intf);
@@ -1509,6 +1514,7 @@ void usbnet_disconnect (struct usb_interface *intf)
 
usb_kill_urb(dev-interrupt);
usb_free_urb(dev-interrupt);
+   kfree(dev-padding_pkt);
 
free_netdev(net);
 }
@@ -1679,9 +1685,16 @@ usbnet_probe (struct usb_interface *udev, const struct 
usb_device_id *prod)
/* initialize max rx_qlen and tx_qlen */
usbnet_update_max_qlen(dev);
 
+   if (dev-can_dma_sg  !(info-flags  FLAG_SEND_ZLP) 
+   !(info-flags  FLAG_MULTI_PACKET)) {
+   dev-padding_pkt = kzalloc(1, GFP_KERNEL);
+   if (!dev-padding_pkt)
+   goto out4;
+   }
+
status = register_netdev (net);
if (status)
-   goto out4;
+   goto out5;
netif_info(dev, probe, dev-net,
   register '%s' at usb-%s-%s, %s, %pM\n,
   udev-dev.driver-name,
@@ -1699,6 +1712,8 @@ usbnet_probe (struct usb_interface *udev, const struct 
usb_device_id *prod)
 
return 0;
 
+out5:
+   kfree(dev-padding_pkt);
 out4:
usb_free_urb(dev-interrupt);
 out3:
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index 9cb2fe8..e303eef 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -42,6 +42,7 @@ struct usbnet {
struct usb_host_endpoint *status;
unsignedmaxpacket;
struct timer_list   delay;
+   const char  *padding_pkt;
 
/* protocol/interface state */
struct net_device   *net;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v7 09/10] usb: dwc3: omap: manage usb_otg_ss_refclk960m clock

2013-09-23 Thread Roger Quadros
Hi Felipe,

On 09/18/2013 03:49 PM, Roger Quadros wrote:
 usb_otg_ss_refclk960m is an optional functional clock to the
 UBS_OTG_SS module. So manage it in the driver.
 

Just realized that usb_otg_ss_refclk960m is in fact functional clock to the 
PHY and not USB_OTG_SS module. The name is misleading.

So please ignore patch 9 and 10.

cheers,
-roger


 Also update device tree binding information.
 
 Signed-off-by: Roger Quadros rog...@ti.com
 ---
  Documentation/devicetree/bindings/usb/omap-usb.txt |4 
  drivers/usb/dwc3/dwc3-omap.c   |   13 +
  2 files changed, 17 insertions(+), 0 deletions(-)
 
 diff --git a/Documentation/devicetree/bindings/usb/omap-usb.txt 
 b/Documentation/devicetree/bindings/usb/omap-usb.txt
 index f67573c..47c8530 100644
 --- a/Documentation/devicetree/bindings/usb/omap-usb.txt
 +++ b/Documentation/devicetree/bindings/usb/omap-usb.txt
 @@ -47,6 +47,8 @@ OMAP DWC3 GLUE
   - #address-cells, #size-cells : Must be present if the device has sub-nodes
   - utmi-mode : controls the source of UTMI/PIPE status for VBUS and OTG ID.
 It should be set to 1 for HW mode and 2 for SW mode.
 + - clock : should refer to the clock node that provides 960MHz functional 
 clock.
 + - clock-names : should be usb_otg_ss_refclk960m
   - ranges: the child address space are mapped 1:1 onto the parent address 
 space
  
  Optional Properties:
 @@ -68,6 +70,8 @@ omap_dwc3 {
   #address-cells = 1;
   #size-cells = 1;
   utmi-mode = 2;
 + clocks = usb_otg_ss1_refclk960m;
 + clock-names = usb_otg_ss_refclk960m;
   ranges;
  };
  
 diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c
 index 7f7ea62..c33b26c 100644
 --- a/drivers/usb/dwc3/dwc3-omap.c
 +++ b/drivers/usb/dwc3/dwc3-omap.c
 @@ -32,6 +32,7 @@
  #include linux/extcon.h
  #include linux/extcon/of_extcon.h
  #include linux/regulator/consumer.h
 +#include linux/clk.h
  
  #include linux/usb/otg.h
  
 @@ -119,6 +120,8 @@
  #define USBOTGSS_UTMI_OTG_STATUS_SESSVALID   (1  2)
  #define USBOTGSS_UTMI_OTG_STATUS_VBUSVALID   (1  1)
  
 +#define USBOTGSS_REFCLK usb_otg_ss_refclk960m
 +
  struct dwc3_omap {
   /* device lock */
   spinlock_t  lock;
 @@ -144,6 +147,7 @@ struct dwc3_omap {
   struct notifier_block   id_nb;
  
   struct regulator*vbus_reg;
 + struct clk  *refclk;
  };
  
  enum omap_dwc3_vbus_id_status {
 @@ -449,6 +453,12 @@ static int dwc3_omap_probe(struct platform_device *pdev)
   }
   }
  
 + omap-refclk = devm_clk_get(dev, USBOTGSS_REFCLK);
 + if (IS_ERR(omap-refclk)) {
 + dev_err(dev, couldn't get %s\n, USBOTGSS_REFCLK);
 + return PTR_ERR(omap-refclk);
 + }
 +
   spin_lock_init(omap-lock);
  
   omap-dev   = dev;
 @@ -464,6 +474,8 @@ static int dwc3_omap_probe(struct platform_device *pdev)
   goto err0;
   }
  
 + clk_prepare_enable(omap-refclk);
 +
   reg = dwc3_omap_readl(omap-base, USBOTGSS_REVISION);
   omap-revision = reg;
   x_major = USBOTGSS_REVISION_XMAJOR(reg);
 @@ -593,6 +605,7 @@ static int dwc3_omap_remove(struct platform_device *pdev)
   extcon_unregister_interest(omap-extcon_id_dev);
   dwc3_omap_disable_irqs(omap);
   pm_runtime_put_sync(pdev-dev);
 + clk_disable_unprepare(omap-refclk);
   pm_runtime_disable(pdev-dev);
   device_for_each_child(pdev-dev, NULL, dwc3_omap_remove_core);
  
 

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] usb: usbtest: bmAttributes would better be masked

2013-09-23 Thread Huang Rui
When transfer type is isochronous, the other bits (bits 5..2) of bmAttributes in
endpoint descriptor might not be set zero. So it's better to mask bmAttributes
with USB_ENDPOINT_XFERTYPE_MASK to judge the transfter type later.

Signed-off-by: Huang Rui ray.hu...@amd.com
---
 drivers/usb/misc/usbtest.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index aa28ac8..c69f199 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -120,7 +120,8 @@ get_endpoints(struct usbtest_dev *dev, struct usb_interface 
*intf)
struct usb_host_endpoint*e;
 
e = alt-endpoint + ep;
-   switch (e-desc.bmAttributes) {
+   switch (e-desc.bmAttributes 
+   USB_ENDPOINT_XFERTYPE_MASK) {
case USB_ENDPOINT_XFER_BULK:
break;
case USB_ENDPOINT_XFER_ISOC:
-- 
1.7.11.7


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] USB: gadget: s3c-hsotg: add isochronous transfers support

2013-09-23 Thread Bartlomiej Zolnierkiewicz

Hi Robert,

On Monday, September 23, 2013 10:07:12 AM Robert Baldyga wrote:
 This patch adds isochronous transfer support. It adds few modifications:
 - Modify s3c_hsotg_write_fifo() function. It actually calculates transfer
   size, taking into account Multi Count value, which indicates number of
   transactions per microframe.
 - Fix s3c_hsotg_start_req() function by setting number of packets to Multi
   Count field in DIEPTSIZ register for isochronous endpoints.
 - Fix s3c_hsotg_set_ep_maxpacket() function. Field wMaxPacketSize of endpoint
   descriptor is now splitted into maximum packet size value and number of
   additional transaction per microframe.
 - Modify s3c_hsotg_epint() function. Some interrupts are ignored for
   isochronous endpoints, (e.g. INTknTXFEmpMsk) becouse isochronous request is
   always transfered in single transaction, which ends with XferCompl 
 interrupt.
   Add Odd/Even microframe toggle to allow data transfering in each microframe.
 - Fix s3c_hsotg_ep_enable() function by supporting isochronous endpoint type.
 
 Signed-off-by: Robert Baldyga r.bald...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  drivers/usb/gadget/s3c-hsotg.c |   74 
 +++-
  1 file changed, 57 insertions(+), 17 deletions(-)
 
 diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c
 index d5d951d..d737452 100644
 --- a/drivers/usb/gadget/s3c-hsotg.c
 +++ b/drivers/usb/gadget/s3c-hsotg.c
 @@ -82,9 +82,12 @@ struct s3c_hsotg_req;
   * @dir_in: Set to true if this endpoint is of the IN direction, which
   *   means that it is sending data to the Host.
   * @index: The index for the endpoint registers.
 + * @mc: Multi Count - number of transactions per microframe
 + * @interval - Interval for periodic endpoints
   * @name: The name array passed to the USB core.
   * @halted: Set if the endpoint has been halted.
   * @periodic: Set if this is a periodic ep, such as Interrupt
 + * @insochronous: Set if this is a isochronous ep

s/insochronous/isochronous/

   * @sent_zlp: Set if we've sent a zero-length packet.
   * @total_data: The total number of data bytes done.
   * @fifo_size: The size of the FIFO (for periodic IN endpoints)
 @@ -120,9 +123,12 @@ struct s3c_hsotg_ep {
  
   unsigned char   dir_in;
   unsigned char   index;
 + unsigned char   mc;
 + unsigned char   interval;
  
   unsigned inthalted:1;
   unsigned intperiodic:1;
 + unsigned intisochronous:1;
   unsigned intsent_zlp:1;
  
   charname[10];
 @@ -467,6 +473,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
   void *data;
   int can_write;
   int pkt_round;
 + int max_transfer;
  
   to_write -= (buf_pos - hs_ep-last_load);
  
 @@ -534,15 +541,17 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
   can_write *= 4; /* fifo size is in 32bit quantities. */
   }
  
 - dev_dbg(hsotg-dev, %s: GNPTXSTS=%08x, can=%d, to=%d, mps %d\n,
 -  __func__, gnptxsts, can_write, to_write, hs_ep-ep.maxpacket);
 + max_transfer = hs_ep-ep.maxpacket * hs_ep-mc;
 +
 + dev_dbg(hsotg-dev, %s: GNPTXSTS=%08x, can=%d, to=%d, max_transfer 
 %d\n,
 +  __func__, gnptxsts, can_write, to_write, max_transfer);
  
   /*
* limit to 512 bytes of data, it seems at least on the non-periodic
* FIFO, requests of 512 cause the endpoint to get stuck with a
* fragment of the end of the transfer in it.
*/
 - if (can_write  512)
 + if (can_write  512  !periodic)
   can_write = 512;

Doesn't it also affect non-isochronous transfers?

If so this change should be in a separate preparatory patch.

   /*
 @@ -550,8 +559,8 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
* the transfer to return that it did not run out of fifo space
* doing it.
*/
 - if (to_write  hs_ep-ep.maxpacket) {
 - to_write = hs_ep-ep.maxpacket;
 + if (to_write  max_transfer) {
 + to_write = max_transfer;
  
   /* it's needed only when we do not use dedicated fifos */
   if (!hsotg-dedicated_fifos)
 @@ -564,7 +573,7 @@ static int s3c_hsotg_write_fifo(struct s3c_hsotg *hsotg,
  
   if (to_write  can_write) {
   to_write = can_write;
 - pkt_round = to_write % hs_ep-ep.maxpacket;
 + pkt_round = to_write % max_transfer;
  
   /*
* Round the write down to an
 @@ -730,8 +739,16 @@ static void s3c_hsotg_start_req(struct s3c_hsotg *hsotg,
   else
   packets = 1;/* send one packet if length is zero. */
  
 + if (length  (hs_ep-mc * hs_ep-ep.maxpacket)  hs_ep-isochronous) {

Wouldn't checking hs_ep-isonchronous first be better?

 + dev_err(hsotg-dev, req length  

Re: No keyboard and mouse usb detected at startup.

2013-09-23 Thread Alan Stern
On Mon, 23 Sep 2013, Kumar Gaurav wrote:

 Hi Alan,
 I have one question just for knowledge. I was looking for the reason of 
 this bug but wasn't even able to identify which driver (ehci,xhci etc) 
 these devices are using. I tried inspecting with my USB mouse and found 
 out it was ehci (i believe it depends on devices).
  My configuration files are almost similar between 3.10 and 3.11...
  Attached 2 lsusb -v files, 1 that works, the other doesn't.
 
  I use debian wheezy with LUKS.
 
  Thank you, best regards
 
  Note: Same problem with the kernel 3.12rc1.
  It looks like your system did not load the ohci-pci driver.  Is
  CONFIG_USB_OHCI_HCD_PCI enabled?
 how did you identified it was using ohci?

You can tell by looking at the output from lsusb -v.  Here are the 
important lines:

 Bus 004 Device 002: ID 04d9:1603 Holtek Semiconductor, Inc. Keyboard

 Bus 005 Device 002: ID 1bcf:0005 Sunplus Innovation Technology Inc. 

These lines say that the Holtek keyboard is on bus 4 and the Sunplus
mouse is on bus 5.

 Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
 Device Descriptor:
   bLength18
   bDescriptorType 1
   bcdUSB   1.10
   bDeviceClass9 Hub
   bDeviceSubClass 0 Unused
   bDeviceProtocol 0 Full speed (or root) hub
   bMaxPacketSize064
   idVendor   0x1d6b Linux Foundation
   idProduct  0x0001 1.1 root hub
   bcdDevice3.10
   iManufacturer   3 Linux 3.10.11-gnu-hardened ohci_hcd
   iProduct2 OHCI Host Controller
   iSerial 1 :00:12.0

 Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
 Device Descriptor:
   bLength18
   bDescriptorType 1
   bcdUSB   1.10
   bDeviceClass9 Hub
   bDeviceSubClass 0 Unused
   bDeviceProtocol 0 Full speed (or root) hub
   bMaxPacketSize064
   idVendor   0x1d6b Linux Foundation
   idProduct  0x0001 1.1 root hub
   bcdDevice3.10
   iManufacturer   3 Linux 3.10.11-gnu-hardened ohci_hcd
   iProduct2 OHCI Host Controller
   iSerial 1 :00:13.0

These lines say that the host controllers for buses 4 and 5 are both 
OHCI (see the iProduct entries).  Also, the iSerial values give the 
controllers' PCI addresses.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/7] mtd: atmel_nand: fix deferred probe from __init

2013-09-23 Thread Johan Hovold
Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
this driver might return -EPROBE_DEFER if a gpio_request fails.

Cc: David Woodhouse dw...@infradead.org
Cc: Josh Wu josh...@atmel.com
Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/mtd/nand/atmel_nand.c | 13 +++--
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c
index 060feea..bd1ce7d 100644
--- a/drivers/mtd/nand/atmel_nand.c
+++ b/drivers/mtd/nand/atmel_nand.c
@@ -1139,7 +1139,7 @@ static int pmecc_choose_ecc(struct atmel_nand_host *host,
return 0;
 }
 
-static int __init atmel_pmecc_nand_init_params(struct platform_device *pdev,
+static int atmel_pmecc_nand_init_params(struct platform_device *pdev,
 struct atmel_nand_host *host)
 {
struct mtd_info *mtd = host-mtd;
@@ -1548,7 +1548,7 @@ static int atmel_of_init_port(struct atmel_nand_host 
*host,
 }
 #endif
 
-static int __init atmel_hw_nand_init_params(struct platform_device *pdev,
+static int atmel_hw_nand_init_params(struct platform_device *pdev,
 struct atmel_nand_host *host)
 {
struct mtd_info *mtd = host-mtd;
@@ -1987,7 +1987,7 @@ static struct platform_driver atmel_nand_nfc_driver;
 /*
  * Probe for the NAND device.
  */
-static int __init atmel_nand_probe(struct platform_device *pdev)
+static int atmel_nand_probe(struct platform_device *pdev)
 {
struct atmel_nand_host *host;
struct mtd_info *mtd;
@@ -2184,7 +2184,7 @@ err_nand_ioremap:
 /*
  * Remove a NAND device.
  */
-static int __exit atmel_nand_remove(struct platform_device *pdev)
+static int atmel_nand_remove(struct platform_device *pdev)
 {
struct atmel_nand_host *host = platform_get_drvdata(pdev);
struct mtd_info *mtd = host-mtd;
@@ -2270,7 +2270,8 @@ static struct platform_driver atmel_nand_nfc_driver = {
 };
 
 static struct platform_driver atmel_nand_driver = {
-   .remove = __exit_p(atmel_nand_remove),
+   .probe  = atmel_nand_probe,
+   .remove = atmel_nand_remove,
.driver = {
.name   = atmel_nand,
.owner  = THIS_MODULE,
@@ -2278,7 +2279,7 @@ static struct platform_driver atmel_nand_driver = {
},
 };
 
-module_platform_driver_probe(atmel_nand_driver, atmel_nand_probe);
+module_platform_driver(atmel_nand_driver);
 
 MODULE_LICENSE(GPL);
 MODULE_AUTHOR(Rick Bronson);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 0/7] driver core: prevent deferred probe with platform_driver_probe

2013-09-23 Thread Johan Hovold
Deferred probing cannot be used with platform_driver_probe as by the
time probing is retried either the driver has been unregistered or its
probe function has been set to platform_drv_probe_fail.

With commit e9354576 (gpiolib: Defer failed gpio requests by default)
the gpio subsystem started returning -EPROBE_DEFER, which in turn
several platform drivers using platform_driver_probe return to driver
core. Other subsystems (e.g. regulator) has since started doing the
same.

The first patch in this series prevents platform drivers using
platform_driver_probe from requesting probe deferral while warning that
it is not supported.

The remaining patches move six platform-driver probe functions that rely
on gpio_request out of __init. There are likely other probe functions
that might return -EPROBE_DEFER and should be moved out of __init as
well.

Note that the mvsdio, at91_cf and pxa25x_udc patches are completely
untested.

Johan


Johan Hovold (7):
  driver core: prevent deferred probe with platform_driver_probe
  mmc: mvsdio: fix deferred probe from __init
  mtd: atmel_nand: fix deferred probe from __init
  pcmcia: at91_cf: fix deferred probe from __init
  usb: gadget: pxa25x_udc: fix deferred probe from __init
  usb: phy: gpio-vbus: fix deferred probe from __init
  backlight: atmel-pwm-bl: fix deferred probe from __init

 drivers/base/platform.c| 17 +
 drivers/mmc/host/mvsdio.c  | 11 ++-
 drivers/mtd/nand/atmel_nand.c  | 13 +++--
 drivers/pcmcia/at91_cf.c   | 11 +--
 drivers/usb/gadget/pxa25x_udc.c|  9 +
 drivers/usb/phy/phy-gpio-vbus-usb.c| 11 +--
 drivers/video/backlight/atmel-pwm-bl.c |  9 +
 include/linux/platform_device.h|  1 +
 8 files changed, 47 insertions(+), 35 deletions(-)

-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb/core/devio.c:tolerate wrong direction flag in control endpoints

2013-09-23 Thread Alan Stern
On Mon, 23 Sep 2013, Kurt Garloff wrote:

  that qualifies as a bug or not. Maybe it should not claim to be a
  HID device then?
  Maybe not.  This particular combination of bRequestType and bRequest 
  values (0x22, 0x09) is not defined in the HID 1.11 spec.  Do you know 
  if it is defined somewhere else?
 These are custom commands, somewhat described at
 http://pegatech.com/_Uploads/Downloads/Documents/Protocol_Definition_Rev_1.12.pdf

That document describes a UART protocol with no mention of USB at all.

  (And again the behavior might not be enforced by the spec, but maybe
  by Windows?)
  More likely the behavior isn't enforced at all.  The device may simply 
  be buggy.
 With behavior here I referred to the fact that I have not yet seen a USB
 device that
 has two endpoints with the same endpoint number (but different direction).

I have.  They aren't very common but they do exist.

 Let me try inline insert (by c'n'p: I switched from mutt to Thunderbird
 recently and lack
 experience whether this breaks formatting or so ...)

It did mangle the whitespace characters.  That doesn't matter for 
reviewing, but it is important when you submit the patch.  Take a look 
at Documentation/email-clients.txt for some suggestions.

 8
 
 From: Kurt Garloff k...@garloff.de
 Date: Mon, 23 Sep 2013 14:19:02 +0200
 Subject: Tolerate wrong direction bit in endpoint address for control
 messages

 Trying to read data from the Pegasus Technologies NoteTaker (0e20:0101)
 [1] with the Windows App (EasyNote) works natively but fails when
 Windows is running under KVM (and the USB device handed to KVM).

 The reason is a USB control message
  usb 4-2.2: control urb: bRequestType=22 bRequest=09 wValue=0200
 wIndex=0001 wLength=0008
 This goes to endpoint address 0x01 (wIndex); however, endpoint number 1
 is an input endpoint and thus has endpoint address 0x81.

You should say something like:

however, endpoint 0x01 doesn't exist.  There is an endpoint
0x81, though; perhaps the app meant that endpoint instead.

 The kernel thus rejects the IO and thus we see the failure.

 Apparently, Linux is more strict here than Windows ... we can't change
 the Win app easily, so that's a problem.
 
 It seems that the Win app/driver is buggy here and the driver does not
 behave fully according to the USB HID class that it claims to belong to.
 The device seems to happily deal with that though (and seems to not
 really care about this value much).
 
 So the question is whether the Linux kernel should filter here.
 Rejecting has the risk that somewhat non-compliant userspace apps/
 drivers (most likely in a virtual machine) are prevented from working.
 Not rejecting has the risk of confusing an overly sensitive device with
 such a transfer. Given the fact that Windows does not filter it makes
 this risk rather small though.
 
 The patch makes the kernel more tolerant: If the endpoint address in
 wIndex does not exist, but an endpoint with toggled direction bit does,
 it will let the transfer through. (It does NOT change the message.)
 
 With attached patch, the app in Windows in KVM works.
  usb 4-2.2: check_ctrlrecip: process 13073 (qemu-kvm) requesting ep 01
 but needs 81 (or 00)

You need to remove the (or 00) here.

 I suspect this will mostly affect apps in virtual environments; as on
 Linux the apps would have been adapted to the stricter handling of the
 kernel. I have done that for mine[2].
  
 [1] http://www.pegatech.com/
 [2] https://sourceforge.net/projects/notetakerpen/
 
 Signed-off-by: Kurt Garloff k...@garloff.de
 Cc: sta...@vger.kernel.or

Fix the spelling (.org).

 ---
  drivers/usb/core/devio.c |   16 
  1 file changed, 16 insertions(+)
 
 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
 index 737e3c1..4ff61f9 100644
 --- a/drivers/usb/core/devio.c
 +++ b/drivers/usb/core/devio.c
 @@ -742,6 +742,22 @@ static int check_ctrlrecip(struct dev_state *ps,
 unsigned int requesttype,
  if ((index  ~USB_DIR_IN) == 0)
  return 0;
  ret = findintfep(ps-dev, index);
 +if (ret  0) {
 +/*
 + * Some not fully compliant Win apps seem to get
 + * ndex wrong and have the endpoint number here

s/ndex/index/

 + * rather than the endpoint address (with the
 + * correct direction). Win does let this through,
 + * so we'll give it a second try as well (to not
 + * break KVM) -- but warn.
 + */
 +ret = findintfep(ps-dev, index ^ 0x80);
 +if (ret = 0)
 +dev_info(ps-dev-dev ,
 +%s: process %i (%s) requesting ep %02x but needs
 %02x\n,
 +__func__, task_pid_nr(current),
 +current-comm, index, index ^ 0x80);
 +}
  if (ret = 0)
  ret = checkintf(ps, ret);
  break;

After you make these changes, you can add:

Acked-by: 

[PATCH 2/7] mmc: mvsdio: fix deferred probe from __init

2013-09-23 Thread Johan Hovold
Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
this driver might return -EPROBE_DEFER if the mmc_gpio_request_cd fails.

Cc: Nicolas Pitre n...@fluxnic.net
Cc: Chris Ball c...@laptop.org
Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/mmc/host/mvsdio.c | 11 ++-
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 06c5b0b..deecee0 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -655,7 +655,7 @@ static const struct mmc_host_ops mvsd_ops = {
.enable_sdio_irq= mvsd_enable_sdio_irq,
 };
 
-static void __init
+static void
 mv_conf_mbus_windows(struct mvsd_host *host,
 const struct mbus_dram_target_info *dram)
 {
@@ -677,7 +677,7 @@ mv_conf_mbus_windows(struct mvsd_host *host,
}
 }
 
-static int __init mvsd_probe(struct platform_device *pdev)
+static int mvsd_probe(struct platform_device *pdev)
 {
struct device_node *np = pdev-dev.of_node;
struct mmc_host *mmc = NULL;
@@ -819,7 +819,7 @@ out:
return ret;
 }
 
-static int __exit mvsd_remove(struct platform_device *pdev)
+static int mvsd_remove(struct platform_device *pdev)
 {
struct mmc_host *mmc = platform_get_drvdata(pdev);
 
@@ -872,7 +872,8 @@ static const struct of_device_id mvsdio_dt_ids[] = {
 MODULE_DEVICE_TABLE(of, mvsdio_dt_ids);
 
 static struct platform_driver mvsd_driver = {
-   .remove = __exit_p(mvsd_remove),
+   .probe  = mvsd_probe,
+   .remove = mvsd_remove,
.suspend= mvsd_suspend,
.resume = mvsd_resume,
.driver = {
@@ -881,7 +882,7 @@ static struct platform_driver mvsd_driver = {
},
 };
 
-module_platform_driver_probe(mvsd_driver, mvsd_probe);
+module_platform_driver(mvsd_driver);
 
 /* maximum card clock frequency (default 50MHz) */
 module_param(maxfreq, int, 0);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 6/7] usb: phy: gpio-vbus: fix deferred probe from __init

2013-09-23 Thread Johan Hovold
Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
and 04bf3011 (regulator: Support driver probe deferral) this driver
might return -EPROBE_DEFER if a gpio_request or regulator_get fails.

Cc: Felipe Balbi ba...@ti.com
Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/usb/phy/phy-gpio-vbus-usb.c | 11 +--
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/phy/phy-gpio-vbus-usb.c 
b/drivers/usb/phy/phy-gpio-vbus-usb.c
index b2f29c9..02799a5 100644
--- a/drivers/usb/phy/phy-gpio-vbus-usb.c
+++ b/drivers/usb/phy/phy-gpio-vbus-usb.c
@@ -241,7 +241,7 @@ static int gpio_vbus_set_suspend(struct usb_phy *phy, int 
suspend)
 
 /* platform driver interface */
 
-static int __init gpio_vbus_probe(struct platform_device *pdev)
+static int gpio_vbus_probe(struct platform_device *pdev)
 {
struct gpio_vbus_mach_info *pdata = dev_get_platdata(pdev-dev);
struct gpio_vbus_data *gpio_vbus;
@@ -349,7 +349,7 @@ err_gpio:
return err;
 }
 
-static int __exit gpio_vbus_remove(struct platform_device *pdev)
+static int gpio_vbus_remove(struct platform_device *pdev)
 {
struct gpio_vbus_data *gpio_vbus = platform_get_drvdata(pdev);
struct gpio_vbus_mach_info *pdata = dev_get_platdata(pdev-dev);
@@ -398,8 +398,6 @@ static const struct dev_pm_ops gpio_vbus_dev_pm_ops = {
 };
 #endif
 
-/* NOTE:  the gpio-vbus device may *NOT* be hotplugged */
-
 MODULE_ALIAS(platform:gpio-vbus);
 
 static struct platform_driver gpio_vbus_driver = {
@@ -410,10 +408,11 @@ static struct platform_driver gpio_vbus_driver = {
.pm = gpio_vbus_dev_pm_ops,
 #endif
},
-   .remove  = __exit_p(gpio_vbus_remove),
+   .probe  = gpio_vbus_probe,
+   .remove = gpio_vbus_remove,
 };
 
-module_platform_driver_probe(gpio_vbus_driver, gpio_vbus_probe);
+module_platform_driver(gpio_vbus_driver);
 
 MODULE_DESCRIPTION(simple GPIO controlled OTG transceiver driver);
 MODULE_AUTHOR(Philipp Zabel);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 4/7] pcmcia: at91_cf: fix deferred probe from __init

2013-09-23 Thread Johan Hovold
Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
this driver might return -EPROBE_DEFER if a gpio_request fails.

Cc: Jean-Christophe PLAGNIOL-VILLARD plagn...@jcrosoft.com
Cc: Nicolas Ferre nicolas.fe...@atmel.com
Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/pcmcia/at91_cf.c | 11 +--
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c
index b8f5acf..de24232 100644
--- a/drivers/pcmcia/at91_cf.c
+++ b/drivers/pcmcia/at91_cf.c
@@ -245,7 +245,7 @@ static int at91_cf_dt_init(struct platform_device *pdev)
 }
 #endif
 
-static int __init at91_cf_probe(struct platform_device *pdev)
+static int at91_cf_probe(struct platform_device *pdev)
 {
struct at91_cf_socket   *cf;
struct at91_cf_data *board = pdev-dev.platform_data;
@@ -354,7 +354,7 @@ fail0a:
return status;
 }
 
-static int __exit at91_cf_remove(struct platform_device *pdev)
+static int at91_cf_remove(struct platform_device *pdev)
 {
struct at91_cf_socket   *cf = platform_get_drvdata(pdev);
 
@@ -404,14 +404,13 @@ static struct platform_driver at91_cf_driver = {
.owner  = THIS_MODULE,
.of_match_table = of_match_ptr(at91_cf_dt_ids),
},
-   .remove = __exit_p(at91_cf_remove),
+   .probe  = at91_cf_probe,
+   .remove = at91_cf_remove,
.suspend= at91_cf_suspend,
.resume = at91_cf_resume,
 };
 
-/*--*/
-
-module_platform_driver_probe(at91_cf_driver, at91_cf_probe);
+module_platform_driver(at91_cf_driver);
 
 MODULE_DESCRIPTION(AT91 Compact Flash Driver);
 MODULE_AUTHOR(David Brownell);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 5/7] usb: gadget: pxa25x_udc: fix deferred probe from __init

2013-09-23 Thread Johan Hovold
Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
this driver might return -EPROBE_DEFER if a gpio_request fails.

Cc: Eric Miao eric.y.m...@gmail.com
Cc: Russell King li...@arm.linux.org.uk
Cc: Haojian Zhuang haojian.zhu...@gmail.com
Cc: Felipe Balbi ba...@ti.com
Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/usb/gadget/pxa25x_udc.c | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index cc92074..0ac6064 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2054,7 +2054,7 @@ static struct pxa25x_udc memory = {
 /*
  * probe - binds to the platform device
  */
-static int __init pxa25x_udc_probe(struct platform_device *pdev)
+static int pxa25x_udc_probe(struct platform_device *pdev)
 {
struct pxa25x_udc *dev = memory;
int retval, irq;
@@ -2203,7 +2203,7 @@ static void pxa25x_udc_shutdown(struct platform_device 
*_dev)
pullup_off();
 }
 
-static int __exit pxa25x_udc_remove(struct platform_device *pdev)
+static int pxa25x_udc_remove(struct platform_device *pdev)
 {
struct pxa25x_udc *dev = platform_get_drvdata(pdev);
 
@@ -2294,7 +2294,8 @@ static int pxa25x_udc_resume(struct platform_device *dev)
 
 static struct platform_driver udc_driver = {
.shutdown   = pxa25x_udc_shutdown,
-   .remove = __exit_p(pxa25x_udc_remove),
+   .probe  = pxa25x_udc_probe,
+   .remove = pxa25x_udc_remove,
.suspend= pxa25x_udc_suspend,
.resume = pxa25x_udc_resume,
.driver = {
@@ -2303,7 +2304,7 @@ static struct platform_driver udc_driver = {
},
 };
 
-module_platform_driver_probe(udc_driver, pxa25x_udc_probe);
+module_platform_driver(udc_driver);
 
 MODULE_DESCRIPTION(DRIVER_DESC);
 MODULE_AUTHOR(Frank Becker, Robert Schwebel, David Brownell);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 7/7] backlight: atmel-pwm-bl: fix deferred probe from __init

2013-09-23 Thread Johan Hovold
Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
this driver might return -EPROBE_DEFER if a gpio_request fails.

Cc: Richard Purdie rpur...@rpsys.net
Cc: Jingoo Han jg1@samsung.com
Cc: Jean-Christophe Plagniol-Villard plagn...@jcrosoft.com
Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/video/backlight/atmel-pwm-bl.c | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/video/backlight/atmel-pwm-bl.c 
b/drivers/video/backlight/atmel-pwm-bl.c
index 0393d82..f7447f7 100644
--- a/drivers/video/backlight/atmel-pwm-bl.c
+++ b/drivers/video/backlight/atmel-pwm-bl.c
@@ -118,7 +118,7 @@ static const struct backlight_ops atmel_pwm_bl_ops = {
.update_status  = atmel_pwm_bl_set_intensity,
 };
 
-static int __init atmel_pwm_bl_probe(struct platform_device *pdev)
+static int atmel_pwm_bl_probe(struct platform_device *pdev)
 {
struct backlight_properties props;
const struct atmel_pwm_bl_platform_data *pdata;
@@ -202,7 +202,7 @@ err_free_mem:
return retval;
 }
 
-static int __exit atmel_pwm_bl_remove(struct platform_device *pdev)
+static int atmel_pwm_bl_remove(struct platform_device *pdev)
 {
struct atmel_pwm_bl *pwmbl = platform_get_drvdata(pdev);
 
@@ -220,10 +220,11 @@ static struct platform_driver atmel_pwm_bl_driver = {
.name = atmel-pwm-bl,
},
/* REVISIT add suspend() and resume() */
-   .remove = __exit_p(atmel_pwm_bl_remove),
+   .probe = atmel_pwm_bl_probe,
+   .remove = atmel_pwm_bl_remove,
 };
 
-module_platform_driver_probe(atmel_pwm_bl_driver, atmel_pwm_bl_probe);
+module_platform_driver(atmel_pwm_bl_driver);
 
 MODULE_AUTHOR(Hans-Christian egtvedt hans-christian.egtv...@atmel.com);
 MODULE_DESCRIPTION(Atmel PWM backlight driver);
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/7] driver core: prevent deferred probe with platform_driver_probe

2013-09-23 Thread Johan Hovold
Prevent drivers relying on platform_driver_probe from requesting
deferred probing in order to avoid further futile probe attempts (either
the driver has been unregistered or its probe function has been set to
platform_drv_probe_fail when probing is retried).

Note that several platform drivers currently return subsystem errors
from probe and that these can include -EPROBE_DEFER (e.g. if a gpio
request fails).

Add a warning to platform_drv_probe that can be used to catch drivers
that inadvertently request probe deferral while using
platform_driver_probe.

Signed-off-by: Johan Hovold jhov...@gmail.com
---
 drivers/base/platform.c | 17 +
 include/linux/platform_device.h |  1 +
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index 4f8bef3..47051cd 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -488,6 +488,11 @@ static int platform_drv_probe(struct device *_dev)
if (ret  ACPI_HANDLE(_dev))
acpi_dev_pm_detach(_dev, true);
 
+   if (drv-prevent_deferred_probe  ret == -EPROBE_DEFER) {
+   dev_warn(_dev, probe deferral not supported\n);
+   ret = -ENXIO;
+   }
+
return ret;
 }
 
@@ -553,8 +558,7 @@ EXPORT_SYMBOL_GPL(platform_driver_unregister);
 /**
  * platform_driver_probe - register driver for non-hotpluggable device
  * @drv: platform driver structure
- * @probe: the driver probe routine, probably from an __init section,
- * must not return -EPROBE_DEFER.
+ * @probe: the driver probe routine, probably from an __init section
  *
  * Use this instead of platform_driver_register() when you know the device
  * is not hotpluggable and has already been registered, and you want to
@@ -565,8 +569,7 @@ EXPORT_SYMBOL_GPL(platform_driver_unregister);
  * into system-on-chip processors, where the controller devices have been
  * configured as part of board setup.
  *
- * This is incompatible with deferred probing so probe() must not
- * return -EPROBE_DEFER.
+ * Note that this is incompatible with deferred probing.
  *
  * Returns zero if the driver registered and bound to a device, else returns
  * a negative error code and with the driver not registered.
@@ -576,6 +579,12 @@ int __init_or_module platform_driver_probe(struct 
platform_driver *drv,
 {
int retval, code;
 
+   /*
+* Prevent driver from requesting probe deferral to avoid further
+* futile probe attempts.
+*/
+   drv-prevent_deferred_probe = true;
+
/* make sure driver won't have bind/unbind attributes */
drv-driver.suppress_bind_attrs = true;
 
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index ce8e4ff..16f6654 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -178,6 +178,7 @@ struct platform_driver {
int (*resume)(struct platform_device *);
struct device_driver driver;
const struct platform_device_id *id_table;
+   bool prevent_deferred_probe;
 };
 
 #define to_platform_driver(drv)(container_of((drv), struct 
platform_driver, \
-- 
1.8.3.2

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: usbtest: bmAttributes would better be masked

2013-09-23 Thread Alan Stern
On Mon, 23 Sep 2013, Huang Rui wrote:

 When transfer type is isochronous, the other bits (bits 5..2) of bmAttributes 
 in
 endpoint descriptor might not be set zero. So it's better to mask bmAttributes
 with USB_ENDPOINT_XFERTYPE_MASK to judge the transfter type later.
 
 Signed-off-by: Huang Rui ray.hu...@amd.com
 ---
  drivers/usb/misc/usbtest.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
 index aa28ac8..c69f199 100644
 --- a/drivers/usb/misc/usbtest.c
 +++ b/drivers/usb/misc/usbtest.c
 @@ -120,7 +120,8 @@ get_endpoints(struct usbtest_dev *dev, struct 
 usb_interface *intf)
   struct usb_host_endpoint*e;
  
   e = alt-endpoint + ep;
 - switch (e-desc.bmAttributes) {
 + switch (e-desc.bmAttributes 
 + USB_ENDPOINT_XFERTYPE_MASK) {
   case USB_ENDPOINT_XFER_BULK:
   break;
   case USB_ENDPOINT_XFER_ISOC:

Use usb_endpoint_type() instead of doing this by hand.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 4/5] dma: cppi41: only allocate descriptor memory once

2013-09-23 Thread Sebastian Andrzej Siewior
On 09/23/2013 06:17 AM, Vinod Koul wrote:
 Looks fine, Sebastian cna you test it pls

Just noticed that you already applied some of them. I just got back
after a few weeks of. Will review  test as soon as I get to it.

 
 ~Vinod
 

Sebastian
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/4] usb: musb: am335x: Do not remove the session bit HOST-only mode

2013-09-23 Thread Sebastian Andrzej Siewior
On 09/20/2013 05:45 PM, Felipe Balbi wrote:
 
 Acked-by: Felipe Balbi ba...@ti.com
 

Those four patches went already in, for instance:

commit 781f17983015dae33324e34d1bb831e715fa04d4
Author: Sebastian Andrzej Siewior bige...@linutronix.de
AuthorDate: Tue Aug 20 18:35:49 2013 +0200
Commit: Felipe Balbi ba...@ti.com
CommitDate: Tue Aug 27 14:18:41 2013 -0500

usb: musb: am335x-evm: Do not remove the session bit HOST-only mode


Sebastian
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH]fsl/usb: Workarourd for USB erratum-A005697

2013-09-23 Thread Alan Stern
On Fri, 20 Sep 2013, Mehresh Ramneek-B31383 wrote:

 From: Alan Stern [mailto:st...@rowland.harvard.edu] 
 Sent: Thursday, September 19, 2013 7:03 PM
 To: Mehresh Ramneek-B31383
 Cc: linux-usb@vger.kernel.org
 Subject: Re: [PATCH]fsl/usb: Workarourd for USB erratum-A005697
 
 On Thu, 19 Sep 2013, Ramneek Mehresh wrote:
 
  As per USB specification, in Suspend state the status bit does not 
  change until the port is suspended. However, there may be a delay in 
  suspending a port if there is a transaction currently in progress on 
  the bus.
  
  In the USBDR controller, the PORTSCx[SUSP] bit changes immediately 
  when the application sets it and not when the port is actually 
  suspended
  
  Workaround for this issue involves waiting for a minimum of 10ms to 
  allow the controller to go into SUSPEND state before proceeding ahead
 
 Why is this workaround needed?  Does anything go wrong if it isn't applied?
 [Ramneek]: This workaround is needed because we have this issue with the 
 controller.
 In some protocols like HNP, a notification needs to be sent to another OTG 
 device
 as soon as current controller port goes into SUSPEND state. However, this 
 notification could be false if the port is still transmitting some data and 
 the
 controller informs system s/w that the port is already in suspend state.

Which subroutine in which source file sends the HNP notification?

  --- a/drivers/usb/host/ehci-hub.c
  +++ b/drivers/usb/host/ehci-hub.c
  @@ -284,6 +284,8 @@ static int ehci_bus_suspend (struct usb_hcd *hcd)
  else if ((t1  PORT_PE)  !(t1  PORT_SUSPEND)) {
  t2 |= PORT_SUSPEND;
  set_bit(port, ehci-bus_suspended);
  +   if (ehci_has_fsl_susp_errata(ehci))
  +   usleep_range(1, 2);
  }

This is the wrong place to add a delay.  For one thing, this isn't 
where the port gets put into suspend -- that occurs about 17 lines 
later.

For another, ehci_bus_suspend() gets called when the root hub is 
suspended.  But you want to implement this delay when the port gets 
suspended, which is in ehci_hub_control().

Also, you shouldn't use usleep_range().  Call ehci_handshake() instead.  
And be certain to drop ehci-lock while you are waiting for the port to 
go into suspend.  10 ms is too long to hold a spinlock.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/7] driver core: prevent deferred probe with platform_driver_probe

2013-09-23 Thread Sascha Hauer
On Mon, Sep 23, 2013 at 04:27:25PM +0200, Johan Hovold wrote:
 Deferred probing cannot be used with platform_driver_probe as by the
 time probing is retried either the driver has been unregistered or its
 probe function has been set to platform_drv_probe_fail.
 
 With commit e9354576 (gpiolib: Defer failed gpio requests by default)
 the gpio subsystem started returning -EPROBE_DEFER, which in turn
 several platform drivers using platform_driver_probe return to driver
 core. Other subsystems (e.g. regulator) has since started doing the
 same.
 
 The first patch in this series prevents platform drivers using
 platform_driver_probe from requesting probe deferral while warning that
 it is not supported.
 
 The remaining patches move six platform-driver probe functions that rely
 on gpio_request out of __init. There are likely other probe functions
 that might return -EPROBE_DEFER and should be moved out of __init as
 well.

As usually when I read this I wonder why platform_driver_probe exists
anyway. The only advantage I can think off is that the probe functions
are in __init and thus can be disposed of later. Now you remove the
__init annotations from these probe functions. Wouldn't it be better to
convert the drivers to regular platform_driver_register instead?

Sascha

-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: usbtest: bmAttributes would better be masked

2013-09-23 Thread Huang Rui
On Mon, Sep 23, 2013 at 10:32:30AM -0400, Alan Stern wrote:
 On Mon, 23 Sep 2013, Huang Rui wrote:
 
  When transfer type is isochronous, the other bits (bits 5..2) of 
  bmAttributes in
  endpoint descriptor might not be set zero. So it's better to mask 
  bmAttributes
  with USB_ENDPOINT_XFERTYPE_MASK to judge the transfter type later.
  
  Signed-off-by: Huang Rui ray.hu...@amd.com
  ---
   drivers/usb/misc/usbtest.c | 3 ++-
   1 file changed, 2 insertions(+), 1 deletion(-)
  
  diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
  index aa28ac8..c69f199 100644
  --- a/drivers/usb/misc/usbtest.c
  +++ b/drivers/usb/misc/usbtest.c
  @@ -120,7 +120,8 @@ get_endpoints(struct usbtest_dev *dev, struct 
  usb_interface *intf)
  struct usb_host_endpoint*e;
   
  e = alt-endpoint + ep;
  -   switch (e-desc.bmAttributes) {
  +   switch (e-desc.bmAttributes 
  +   USB_ENDPOINT_XFERTYPE_MASK) {
  case USB_ENDPOINT_XFER_BULK:
  break;
  case USB_ENDPOINT_XFER_ISOC:
 
 Use usb_endpoint_type() instead of doing this by hand.
 

Got it, will update soon.

Thanks,
Rui

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/7] driver core: prevent deferred probe with platform_driver_probe

2013-09-23 Thread Johan Hovold
On Mon, Sep 23, 2013 at 04:50:29PM +0200, Sascha Hauer wrote:
 On Mon, Sep 23, 2013 at 04:27:25PM +0200, Johan Hovold wrote:
  Deferred probing cannot be used with platform_driver_probe as by the
  time probing is retried either the driver has been unregistered or its
  probe function has been set to platform_drv_probe_fail.
  
  With commit e9354576 (gpiolib: Defer failed gpio requests by default)
  the gpio subsystem started returning -EPROBE_DEFER, which in turn
  several platform drivers using platform_driver_probe return to driver
  core. Other subsystems (e.g. regulator) has since started doing the
  same.
  
  The first patch in this series prevents platform drivers using
  platform_driver_probe from requesting probe deferral while warning that
  it is not supported.
  
  The remaining patches move six platform-driver probe functions that rely
  on gpio_request out of __init. There are likely other probe functions
  that might return -EPROBE_DEFER and should be moved out of __init as
  well.
 
 As usually when I read this I wonder why platform_driver_probe exists
 anyway. The only advantage I can think off is that the probe functions
 are in __init and thus can be disposed of later. Now you remove the
 __init annotations from these probe functions. Wouldn't it be better to
 convert the drivers to regular platform_driver_register instead?

Perhaps that paragraph was a bit unclear: I move them out of __init
_and_ use platform_driver_register instead of platform_driver_probe as
well.

Johan
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 0/7] driver core: prevent deferred probe with platform_driver_probe

2013-09-23 Thread Sascha Hauer
On Mon, Sep 23, 2013 at 05:20:18PM +0200, Johan Hovold wrote:
 On Mon, Sep 23, 2013 at 04:50:29PM +0200, Sascha Hauer wrote:
  On Mon, Sep 23, 2013 at 04:27:25PM +0200, Johan Hovold wrote:
   Deferred probing cannot be used with platform_driver_probe as by the
   time probing is retried either the driver has been unregistered or its
   probe function has been set to platform_drv_probe_fail.
   
   With commit e9354576 (gpiolib: Defer failed gpio requests by default)
   the gpio subsystem started returning -EPROBE_DEFER, which in turn
   several platform drivers using platform_driver_probe return to driver
   core. Other subsystems (e.g. regulator) has since started doing the
   same.
   
   The first patch in this series prevents platform drivers using
   platform_driver_probe from requesting probe deferral while warning that
   it is not supported.
   
   The remaining patches move six platform-driver probe functions that rely
   on gpio_request out of __init. There are likely other probe functions
   that might return -EPROBE_DEFER and should be moved out of __init as
   well.
  
  As usually when I read this I wonder why platform_driver_probe exists
  anyway. The only advantage I can think off is that the probe functions
  are in __init and thus can be disposed of later. Now you remove the
  __init annotations from these probe functions. Wouldn't it be better to
  convert the drivers to regular platform_driver_register instead?
 
 Perhaps that paragraph was a bit unclear: I move them out of __init
 _and_ use platform_driver_register instead of platform_driver_probe as
 well.

Oh yes, I should have looked closer. Sorry for the noise.

Sascha

-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2] usb: usbtest: bmAttributes would better be masked

2013-09-23 Thread Huang Rui
When transfer type is isochronous, the other bits (bits 5..2) of
bmAttributes in endpoint descriptor might not be set zero. So it's better
to use usb_endpoint_type routine to mask bmAttributes with
USB_ENDPOINT_XFERTYPE_MASK to judge the transfter type later.

Signed-off-by: Huang Rui ray.hu...@amd.com
---

Changes from v1 - v2:
- Use usb_endpoint_type routine instead of doing by hand.

 drivers/usb/misc/usbtest.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
index aa28ac8..3e91d3e9 100644
--- a/drivers/usb/misc/usbtest.c
+++ b/drivers/usb/misc/usbtest.c
@@ -120,7 +120,7 @@ get_endpoints(struct usbtest_dev *dev, struct usb_interface 
*intf)
struct usb_host_endpoint*e;
 
e = alt-endpoint + ep;
-   switch (e-desc.bmAttributes) {
+   switch (usb_endpoint_type(e-desc)) {
case USB_ENDPOINT_XFER_BULK:
break;
case USB_ENDPOINT_XFER_ISOC:
-- 
1.7.11.7


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/7] pcmcia: at91_cf: fix deferred probe from __init

2013-09-23 Thread Nicolas Ferre

On 23/09/2013 16:27, Johan Hovold :

Move probe out of __init section and don't use platform_driver_probe
which cannot be used with deferred probing.

Since commit e9354576 (gpiolib: Defer failed gpio requests by default)
this driver might return -EPROBE_DEFER if a gpio_request fails.

Cc: Jean-Christophe PLAGNIOL-VILLARD plagn...@jcrosoft.com
Cc: Nicolas Ferre nicolas.fe...@atmel.com


Acked-by: Nicolas Ferre nicolas.fe...@atmel.com

Thanks Johan.


Signed-off-by: Johan Hovold jhov...@gmail.com
---
  drivers/pcmcia/at91_cf.c | 11 +--
  1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c
index b8f5acf..de24232 100644
--- a/drivers/pcmcia/at91_cf.c
+++ b/drivers/pcmcia/at91_cf.c
@@ -245,7 +245,7 @@ static int at91_cf_dt_init(struct platform_device *pdev)
  }
  #endif

-static int __init at91_cf_probe(struct platform_device *pdev)
+static int at91_cf_probe(struct platform_device *pdev)
  {
struct at91_cf_socket   *cf;
struct at91_cf_data *board = pdev-dev.platform_data;
@@ -354,7 +354,7 @@ fail0a:
return status;
  }

-static int __exit at91_cf_remove(struct platform_device *pdev)
+static int at91_cf_remove(struct platform_device *pdev)
  {
struct at91_cf_socket   *cf = platform_get_drvdata(pdev);

@@ -404,14 +404,13 @@ static struct platform_driver at91_cf_driver = {
.owner  = THIS_MODULE,
.of_match_table = of_match_ptr(at91_cf_dt_ids),
},
-   .remove = __exit_p(at91_cf_remove),
+   .probe  = at91_cf_probe,
+   .remove = at91_cf_remove,
.suspend= at91_cf_suspend,
.resume = at91_cf_resume,
  };

-/*--*/
-
-module_platform_driver_probe(at91_cf_driver, at91_cf_probe);
+module_platform_driver(at91_cf_driver);

  MODULE_DESCRIPTION(AT91 Compact Flash Driver);
  MODULE_AUTHOR(David Brownell);




--
Nicolas Ferre
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[resolved] No keyboard and mouse usb detected at startup.

2013-09-23 Thread HacKurx

It looks like your system did not load the ohci-pci driver.  Is
CONFIG_USB_OHCI_HCD_PCI enabled?


Thanks my problem was there. As I do not have PCI card (Peripheral 
Component Interconnect) I had not enabled this option thinking I didn't 
need that...


Thank you very much for your help and for your work.

--
Best regards,

HacKurx
www.hackurx.info

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] xhci: Fix race between ep halt and URB cancellation

2013-09-23 Thread Sarah Sharp
Thanks Florian.  I was waiting for after the 3.12 merge window to close
to send Greg bug fixes.  I'm queuing this up for test today, and will
send it out once it passes.

Sarah Sharp

On Sun, Sep 22, 2013 at 09:09:54PM +0200, Florian Wolter wrote:
 Hi Sarah,
 
 the described Problem also exisits on actual Linux Kernel 3.12-rc so I 
 rebased my patch to this.
 --
 
 
 The halted state of a endpoint cannot be cleared over CLEAR_HALT from a
 user process, because the stopped_td variable was overwritten in the 
 handle_stopped_endpoint() function. So the xhci_endpoint_reset() function 
 will 
 refuse the reset and communication with device can not run over this endpoint.
 https://bugzilla.kernel.org/show_bug.cgi?id=60699
 
 
 Signed-off-by: Florian Wolter woll...@web.de
 ---
  drivers/usb/host/xhci-ring.c |8 ++--
  1 file changed, 6 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
 index c47f90e..411da1f 100644
 --- a/drivers/usb/host/xhci-ring.c
 +++ b/drivers/usb/host/xhci-ring.c
 @@ -859,8 +859,12 @@ remove_finished_td:
   /* Otherwise ring the doorbell(s) to restart queued transfers */
   ring_doorbell_for_active_rings(xhci, slot_id, ep_index);
   }
 - ep-stopped_td = NULL;
 - ep-stopped_trb = NULL;
 +
 + /* Clear stopped_td and stopped_trb if endpoint is not halted */
 + if (!(ep-ep_state  EP_HALTED)) {
 + ep-stopped_td = NULL;
 + ep-stopped_trb = NULL;
 + }
  
   /*
* Drop the lock and complete the URBs in the cancelled TD list.
 -- 
 1.7.10.4
 
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] usb: usbtest: bmAttributes would better be masked

2013-09-23 Thread Alan Stern
On Tue, 24 Sep 2013, Huang Rui wrote:

 When transfer type is isochronous, the other bits (bits 5..2) of
 bmAttributes in endpoint descriptor might not be set zero. So it's better
 to use usb_endpoint_type routine to mask bmAttributes with
 USB_ENDPOINT_XFERTYPE_MASK to judge the transfter type later.
 
 Signed-off-by: Huang Rui ray.hu...@amd.com
 ---
 
 Changes from v1 - v2:
 - Use usb_endpoint_type routine instead of doing by hand.
 
  drivers/usb/misc/usbtest.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c
 index aa28ac8..3e91d3e9 100644
 --- a/drivers/usb/misc/usbtest.c
 +++ b/drivers/usb/misc/usbtest.c
 @@ -120,7 +120,7 @@ get_endpoints(struct usbtest_dev *dev, struct 
 usb_interface *intf)
   struct usb_host_endpoint*e;
  
   e = alt-endpoint + ep;
 - switch (e-desc.bmAttributes) {
 + switch (usb_endpoint_type(e-desc)) {
   case USB_ENDPOINT_XFER_BULK:
   break;
   case USB_ENDPOINT_XFER_ISOC:

Acked-by: Alan Stern st...@rowland.harvard.edu

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[GIT PATCH] USB fixes for 3.12-rc2

2013-09-23 Thread Greg KH
The following changes since commit 272b98c6455f00884f0350f775c5342358ebb73f:

  Linux 3.12-rc1 (2013-09-16 16:17:51 -0400)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/ 
tags/usb-3.12-rc2

for you to fetch changes up to 42f4891ca29a3c1535692a24acefb7015bbbc077:

  Merge tag 'fixes-for-v3.12-rc2' of 
git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus 
(2013-09-17 13:00:43 -0700)



USB fixes for 3.12-rc2

Here are a number of small USB fixes for 3.12-rc2.

One is a revert of a EHCI change that isn't quite ready for 3.12.  Others are
minor things, gadget fixes, Kconfig fixes, and some quirks and documentation
updates.

All have been in linux-next for a bit.

Signed-off-by: Greg Kroah-Hartman gre...@linuxfoundation.org


Alan Stern (1):
  usb: gadget: fix a bug and a WARN_ON in dummy-hcd

Alexey Khoroshilov (1):
  usb: gadget: mv_u3d_core: fix violation of locking discipline in 
mv_u3d_ep_disable()

Andrzej Pietrasiewicz (1):
  usb: gadget: cdc2: fix conversion to new interface of f_ecm

Chanho Park (1):
  usb: s3c-hsotg: do not disconnect gadget when receiving ErlySusp intr

Chen Gang (1):
  usb: gadget: add '__ref' for rndis_config_register() and 
cdc_config_register()

Dave Jones (2):
  USB: fix typo in usb serial simple driver Kconfig
  USB: Faraday fotg210: fix email addresses

David Cohen (1):
  usb: dwc3: gadget: avoid memory leak when failing to allocate all eps

Frank Schäfer (1):
  USB: pl2303: distinguish between original and cloned HX chips

Greg Kroah-Hartman (2):
  Revert USB: EHCI: support running URB giveback in tasklet context
  Merge tag 'fixes-for-v3.12-rc2' of git://git.kernel.org/.../balbi/usb 
into usb-linus

Heikki Krogerus (2):
  usb: dwc3: pci: add support for BayTrail
  usb: dwc3: remove extcon dependency

Marek Szyprowski (1):
  usb: s3c-hsotg: fix unregistration function

Peter Oh (1):
  usb: gadget: f_mass_storage: reset endpoint driver data when disabled

Sachin Kamat (4):
  usb: phy: omap-usb3: Fix return value
  usb: gadget: f_ecm: Staticize ecm_alloc
  usb: gadget: f_eem: Staticize eem_alloc
  usb: host: fsl-mph-dr-of: Staticize local symbols

 drivers/usb/dwc3/Kconfig|  1 -
 drivers/usb/dwc3/dwc3-pci.c |  2 ++
 drivers/usb/dwc3/gadget.c   |  6 ++
 drivers/usb/gadget/cdc2.c   | 19 +---
 drivers/usb/gadget/dummy_hcd.c  |  7 +++---
 drivers/usb/gadget/f_ecm.c  |  2 +-
 drivers/usb/gadget/f_eem.c  |  2 +-
 drivers/usb/gadget/f_mass_storage.c |  2 ++
 drivers/usb/gadget/fotg210-udc.c|  2 +-
 drivers/usb/gadget/fusb300_udc.c|  2 +-
 drivers/usb/gadget/multi.c  |  8 +++
 drivers/usb/gadget/mv_u3d_core.c|  3 +++
 drivers/usb/gadget/s3c-hsotg.c  | 13 ---
 drivers/usb/host/ehci-fsl.c |  2 +-
 drivers/usb/host/ehci-grlib.c   |  2 +-
 drivers/usb/host/ehci-hcd.c |  2 +-
 drivers/usb/host/ehci-mv.c  |  2 +-
 drivers/usb/host/ehci-octeon.c  |  2 +-
 drivers/usb/host/ehci-pmcmsp.c  |  2 +-
 drivers/usb/host/ehci-ppc-of.c  |  2 +-
 drivers/usb/host/ehci-ps3.c |  2 +-
 drivers/usb/host/ehci-q.c   |  5 +
 drivers/usb/host/ehci-sead3.c   |  2 +-
 drivers/usb/host/ehci-sh.c  |  2 +-
 drivers/usb/host/ehci-tilegx.c  |  2 +-
 drivers/usb/host/ehci-w90x900.c |  2 +-
 drivers/usb/host/ehci-xilinx-of.c   |  2 +-
 drivers/usb/host/fsl-mph-dr-of.c|  6 +++---
 drivers/usb/phy/phy-omap-usb3.c |  2 +-
 drivers/usb/serial/Kconfig  |  2 +-
 drivers/usb/serial/pl2303.c | 43 +++--
 31 files changed, 81 insertions(+), 72 deletions(-)
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 0/2] usb: implement AMD remote wakeup quirk

2013-09-23 Thread Alan Stern
On Mon, 16 Sep 2013, Huang Rui wrote:

 Hi Greg, Sarah, Alan,
 
 The following patches are required to resolve remote wake issues with
 certain devices.
 
 Issue description:
 If the remote wake is issued from the device in a specific timing
 condition while the system is entering sleep state then it may cause
 system to auto wake on subsequent sleep cycle.
 
 Root cause:
 Host controller rebroadcasts the Resume signal  100 µseconds after
 receiving the original resume event from the device. For proper
 function, some devices may require the rebroadcast of resume event
 within the USB spec of 100µS.
 
 Reproduce steps:
 1. Enable remote wakeup for usb mouse.
 2. Execute S3.
 3. Click mouse _intensely_ (more than 10 times) to wake the system up.
 4. Then execute S3 again.
 5. Observe that the system auto wake up.
 
 [Q] Why the special devices are only mice? Would high speed devices
 such as 3G modem or USB Bluetooth adapter trigger this issue?
 - Current this sensitivity is only confined to devices that use Pixart
   controllers. This controller is designed for use with LS mouse
 devices only. We have not observed any other devices failing. There
 may be a small risk for other devices also but this patch (reset
 device in resume phase) will cover the cases if required.
 
 [Q] Shouldn’t the resume signal be sent within 100 us for every
 device?
 - The Host controller may not send the resume signal within 100us,
   this our host controller specification change. This is why we
 require the patch to prevent side effects on certain known devices.
 
 [Q] Why would clicking mouse INTENSELY to wake the system up trigger
 this issue?
 - This behavior is specific to the devices that use Pixart controller.
   It is timing dependent on when the resume event is triggered during
 the sleep state.
 
 [Q] Is it a host controller issue or mouse?
 - It is the host controller behavior during resume that triggers the
   device incorrect behavior on the next resume.
 
 - Patch 1 refactors AMD quirk to abstract chipset types.
 - Patch 2 implements AMD remote wakeup quirk.
 They are generated on gregkh/usb usb-next.
 
 Changes from v1 - v2:
 - Add reproduce steps.
 - Add a patch to put the changes of core/hub.c and pci-quirks into one
   patch.
 - Remove all the split strings.
 - Refactor usb_amd_remote_wakeup_quirk to save a variable and less
   codes.
 - Remove 10ms delay in spinlock during xhci reset port by mouse.
 - Add an extra tab to algin to all quirks macros.
 - Remove backport request.
 - Add descriptions of the fixes and how they work.
 - Summarized questions from Sarah and Alan.
 
 Changes from v2 - v3:
 - Split first patch into two, the one add all the issue USB mice with
   vendor id and product id in core/quirk.c, the other one is for filtering
 the special AMD platforms.
 - Remove is_usb_mouse function, as Greg required that don't use device type
   for filtering.
 
 Changes from v3 - v4:
 - Refactor AMD pci quirk to abstract out chipset types to list generation
   with a enumeration type and revision as Greg's suggestion.
 - Remove xhci and ohci level codes.
 - Implement remote wakeup quirk at core level as Alan's suggestion.

This version of the patch set looks good.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] xhci: fix write to USB3_PSSEN and XUSB2PRM pci config registers

2013-09-23 Thread Xenia Ragiadakou

On 09/23/2013 07:45 PM, Sarah Sharp wrote:

On Fri, Sep 20, 2013 at 07:45:53PM +0300, Xenia Ragiadakou wrote:

The function pci_write_config_dword() sets the appropriate byteordering
internally so the value argument should not be converted to little-endian.
This bug was found by sparse.

Can you give the exact error or warning message that sparse gave?


Yes, sure.

drivers/usb/host/pci-quirks.c:802:25: warning: incorrect type in 
argument 3 (different base types)
drivers/usb/host/pci-quirks.c:802:25:expected unsigned int 
[unsigned] [usertype] val
drivers/usb/host/pci-quirks.c:802:25:got restricted __le32 
[usertype] noident
drivers/usb/host/pci-quirks.c:824:25: warning: incorrect type in 
argument 3 (different base types)
drivers/usb/host/pci-quirks.c:824:25:expected unsigned int 
[unsigned] [usertype] val
drivers/usb/host/pci-quirks.c:824:25:got restricted __le32 
[usertype] noident




I ask because this description sounded odd to Greg and I when we met
last week at LinuxCon North America.  I've tried to track this down to
see where the code might be converting the value from CPU format to
little endian, and I don't see it.

AFAICT, pci_write_config_dword() is defined in include/linux/pci.h, and
calls pci_bus_write_config_dword():

static inline int pci_write_config_dword(const struct pci_dev *dev, int where,
  u32 val)
{
 return pci_bus_write_config_dword(dev-bus, dev-devfn, where, val);
}

pci_bus_write_config_dword is defined as a macro in drivers/pci/access.h:

#define PCI_OP_WRITE(size,type,len) \
int pci_bus_write_config_##size \
 (struct pci_bus *bus, unsigned int devfn, int pos, type value)  \
{   \
 int res;\
 unsigned long flags;\
 if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;   \
 raw_spin_lock_irqsave(pci_lock, flags);\
 res = bus-ops-write(bus, devfn, pos, len, value); \
 raw_spin_unlock_irqrestore(pci_lock, flags);   \
 return res; \
}

That macro simply calls the write function for whatever PCI bus driver
is installed.  Note that bus driver can be different than the standard
bus driver.  I don't see any conversion to little endian here, so that
means each bus driver would have to convert it.

I can dig deeper into each .write function, but if the conversion isn't
done at the upper layers, it's possible someone will create a .write
function without the conversion to little endian.

Am I missing something?


I had in mind that the pci_ops .read and .write defined by the PCI 
driver will take care of consistent byteorder access to the 
configuration registers. At least, that was what i understood after 
reading the
chapter on PCI of Linux Device Drivers (more specifically for 
pci_write_config_* functions, it states that The word and dword 
functions convert the value to little-endian before writing to the 
peripheral device.).


regards,
ksenia


Signed-off-by: Xenia Ragiadakou burzalod...@gmail.com
---
  drivers/usb/host/pci-quirks.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
index 2c76ef1..08ef282 100644
--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -799,7 +799,7 @@ void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev)
 * switchable ports.
 */
pci_write_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,
-   cpu_to_le32(ports_available));
+   ports_available);
  
  	pci_read_config_dword(xhci_pdev, USB_INTEL_USB3_PSSEN,

ports_available);
@@ -821,7 +821,7 @@ void usb_enable_intel_xhci_ports(struct pci_dev *xhci_pdev)
 * host.
 */
pci_write_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,
-   cpu_to_le32(ports_available));
+   ports_available);
  
  	pci_read_config_dword(xhci_pdev, USB_INTEL_XUSB2PR,

ports_available);
--
1.8.3.4

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 2/9] usb: phy: nop: Don't use regulator framework for RESET line

2013-09-23 Thread Roger Quadros
Hi Felipe,

There is an issue with this patch and is shown below.
I will send a v3 for this.

On 08/15/2013 01:18 PM, Roger Quadros wrote:
 Modelling the RESET line as a regulator supply wasn't a good idea
 as it kind of abuses the regulator framework and also makes adaptation
 code more complex.
 
 Instead, manage the RESET gpio line directly in the driver. Update
 the device tree binding information.
 
 This also makes us easy to migrate to a dedicated GPIO RESET controller
 whenever it becomes available.
 
 Signed-off-by: Roger Quadros rog...@ti.com
 ---
  .../devicetree/bindings/usb/usb-nop-xceiv.txt  |7 +-
  drivers/usb/phy/phy-nop.c  |   71 ++-
  2 files changed, 55 insertions(+), 23 deletions(-)
 
 diff --git a/Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt 
 b/Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt
 index d7e2726..1bd37fa 100644
 --- a/Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt
 +++ b/Documentation/devicetree/bindings/usb/usb-nop-xceiv.txt
 @@ -15,7 +15,7 @@ Optional properties:
  
  - vcc-supply: phandle to the regulator that provides RESET to the PHY.
  
 -- reset-supply: phandle to the regulator that provides power to the PHY.
 +- reset-gpios: Should specify the GPIO for reset.
  
  Example:
  
 @@ -25,10 +25,9 @@ Example:
   clocks = osc 0;
   clock-names = main_clk;
   vcc-supply = hsusb1_vcc_regulator;
 - reset-supply = hsusb1_reset_regulator;
 + reset-gpios = gpio1 7 GPIO_ACTIVE_LOW;
   };
  
  hsusb1_phy is a NOP USB PHY device that gets its clock from an oscillator
  and expects that clock to be configured to 19.2MHz by the NOP PHY driver.
 -hsusb1_vcc_regulator provides power to the PHY and hsusb1_reset_regulator
 -controls RESET.
 +hsusb1_vcc_regulator provides power to the PHY and GPIO 7 controls RESET.
 diff --git a/drivers/usb/phy/phy-nop.c b/drivers/usb/phy/phy-nop.c
 index 55445e5d..1f88c32 100644
 --- a/drivers/usb/phy/phy-nop.c
 +++ b/drivers/usb/phy/phy-nop.c
 @@ -35,6 +35,9 @@
  #include linux/clk.h
  #include linux/regulator/consumer.h
  #include linux/of.h
 +#include linux/of_gpio.h
 +#include linux/gpio.h
 +#include linux/delay.h
  
  struct nop_usb_xceiv {
   struct usb_phy phy;
 @@ -42,6 +45,8 @@ struct nop_usb_xceiv {
   struct clk *clk;
   struct regulator *vcc;
   struct regulator *reset;
 + int gpio_reset;
 + bool reset_active_low;
  };
  
  static struct platform_device *pd;
 @@ -70,6 +75,23 @@ static int nop_set_suspend(struct usb_phy *x, int suspend)
   return 0;
  }
  
 +static void nop_reset_set(struct nop_usb_xceiv *nop, int asserted)
 +{
 + int value;
 +
 + if (!gpio_is_valid(nop-gpio_reset))
 + return;
 +
 + value = asserted;
 + if (nop-reset_active_low)
 + value = !value;
 +
 + gpio_set_value_cansleep(nop-gpio_reset, value);
 +
 + if (!asserted)
 + usleep_range(1, 2);
 +}
 +
  static int nop_init(struct usb_phy *phy)
  {
   struct nop_usb_xceiv *nop = dev_get_drvdata(phy-dev);
 @@ -82,11 +104,8 @@ static int nop_init(struct usb_phy *phy)
   if (!IS_ERR(nop-clk))
   clk_enable(nop-clk);
  
 - if (!IS_ERR(nop-reset)) {
 - /* De-assert RESET */
 - if (regulator_enable(nop-reset))
 - dev_err(phy-dev, Failed to de-assert reset\n);
 - }
 + /* De-assert RESET */
 + nop_reset_set(nop, 0);
  
   return 0;
  }
 @@ -95,11 +114,8 @@ static void nop_shutdown(struct usb_phy *phy)
  {
   struct nop_usb_xceiv *nop = dev_get_drvdata(phy-dev);
  
 - if (!IS_ERR(nop-reset)) {
 - /* Assert RESET */
 - if (regulator_disable(nop-reset))
 - dev_err(phy-dev, Failed to assert reset\n);
 - }
 + /* Assert RESET */
 + nop_reset_set(nop, 1);
  
   if (!IS_ERR(nop-clk))
   clk_disable(nop-clk);
 @@ -148,7 +164,6 @@ static int nop_usb_xceiv_probe(struct platform_device 
 *pdev)
   int err;
   u32 clk_rate = 0;
   bool needs_vcc = false;
 - bool needs_reset = false;
  
   nop = devm_kzalloc(pdev-dev, sizeof(*nop), GFP_KERNEL);
   if (!nop)
 @@ -159,20 +174,28 @@ static int nop_usb_xceiv_probe(struct platform_device 
 *pdev)
   if (!nop-phy.otg)
   return -ENOMEM;
  
 + nop-reset_active_low = true;   /* default behaviour */
 +
   if (dev-of_node) {
   struct device_node *node = dev-of_node;
 + enum of_gpio_flags flags;
  
   if (of_property_read_u32(node, clock-frequency, clk_rate))
   clk_rate = 0;
  
   needs_vcc = of_property_read_bool(node, vcc-supply);
 - needs_reset = of_property_read_bool(node, reset-supply);
 + nop-gpio_reset = of_get_named_gpio_flags(node, reset-gpios,
 + 0, flags);
 

Re: [PATCH 4/4] RX-51: Add platform function and data for bq24150a charger

2013-09-23 Thread Tony Lindgren
* Pali Rohár pali.ro...@gmail.com [130920 12:29]:
 On Sunday 08 September 2013 10:50:39 Pali Rohár wrote:
  This patch will register bq24150a charger in RX-51 board data.
  Patch also adding platform function between isp1704 and
  bq2415x drivers for detecting charger type.
  
  So finally charging battery on Nokia N900 (RX-51) working
  automatically without any proprietary Nokia bits in userspace.
...
 
  @@ -277,6 +316,7 @@ static void rx51_charger_set_power(bool
  on)
  
   static struct isp1704_charger_data rx51_charger_data = {
  .set_power  = rx51_charger_set_power,
  +   .set_current= rx51_charger_set_current,
   };

We want to get rid of the platform data callbacks here,
there no longer any need to keep these under arch/arm.

 Tony, can you look and review this board patch?

Yes, looks like this can all be done in the driver nowadays.
You can use drivers/reset for the set_power. Or if it's really
controlling the regulator, then the regulator framework. The
info can be passed in a .dts file for those.

The .set_current you can do in the driver based on the
compatible flag.
 
 I think that this patch series it the most important for Nokia 
 N900, because it finally bringing charging support. And without 
 charging battery it very hard to use phone which has power supply 
 only from battery.

Right, let's get this driver updated to use the device tree
based init and that way this file is no longer needed.
I would like to $ grep -i grandmom ~/.phonebook | call too :)

I forgot how this charger is wired up, but maybe take a
look at commit d7bf353f (bq24190_charger: Add support for TI
BQ24190 Battery Charger) for the DT parts.

Regards,

Tony
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


ehci-pci D3cold logspam

2013-09-23 Thread Andy Lutomirski
I've been getting this on several recent kernel revisions.  Is it
interesting?  If so, I'm happy to help diagnose it.  If not, can the
message be killed or severely ratelimited?  I'm getting so much of
this that it tends to overflow the log ring.

[  287.344991] ehci-pci :00:1d.0: power state changed by ACPI to D0
[  287.445433] ehci-pci :00:1d.0: setting latency timer to 64
[  287.446255] ehci-pci :00:1a.0: power state changed by ACPI to D0
[  287.456094] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
[  287.547205] ehci-pci :00:1a.0: setting latency timer to 64
[  287.557890] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
[  290.126910] ehci-pci :00:1d.0: power state changed by ACPI to D0
[  290.227958] ehci-pci :00:1d.0: setting latency timer to 64
[  290.228416] ehci-pci :00:1a.0: power state changed by ACPI to D0
[  290.238749] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
[  290.328904] ehci-pci :00:1a.0: setting latency timer to 64
[  290.339565] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
[  292.214834] ehci-pci :00:1d.0: power state changed by ACPI to D0
[  292.315458] ehci-pci :00:1d.0: setting latency timer to 64
[  292.315908] ehci-pci :00:1a.0: power state changed by ACPI to D0
[  292.326262] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
[  292.416487] ehci-pci :00:1a.0: setting latency timer to 64
[  292.431075] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
[  295.458048] ehci-pci :00:1d.0: power state changed by ACPI to D0
[  295.558613] ehci-pci :00:1d.0: setting latency timer to 64
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 36/51] DMA-API: usb: use dma_set_coherent_mask()

2013-09-23 Thread Russell King - ARM Linux
On Mon, Sep 23, 2013 at 02:27:39PM -0400, Alan Stern wrote:
 On Thu, 19 Sep 2013, Russell King wrote:
 
  The correct way for a driver to specify the coherent DMA mask is
  not to directly access the field in the struct device, but to use
  dma_set_coherent_mask().  Only arch and bus code should access this
  member directly.
  
  Convert all direct write accesses to using the correct API.
  
  Signed-off-by: Russell King rmk+ker...@arm.linux.org.uk
 
  diff --git a/drivers/usb/host/ehci-platform.c 
  b/drivers/usb/host/ehci-platform.c
  index f6b790c..5b0cd2d 100644
  --- a/drivers/usb/host/ehci-platform.c
  +++ b/drivers/usb/host/ehci-platform.c
 
  @@ -91,8 +91,9 @@ static int ehci_platform_probe(struct platform_device 
  *dev)
  dev-dev.platform_data = ehci_platform_defaults;
  if (!dev-dev.dma_mask)
  dev-dev.dma_mask = dev-dev.coherent_dma_mask;
  -   if (!dev-dev.coherent_dma_mask)
  -   dev-dev.coherent_dma_mask = DMA_BIT_MASK(32);
  +   err = dma_set_coherent_mask(dev-dev, DMA_BIT_MASK(32));
  +   if (err)
  +   return err;
   
  pdata = dev_get_platdata(dev-dev);
 
 ehci-platform.c is a generic file, intended for use by multiple
 platforms.  Is it not possible that on some platforms, the arch or bus
 code may already have initialized the DMA masks?  Isn't something like 
 this (i.e., DMA bindings) planned for Device Tree?
 
 By eliminating the tests above and calling dma_set_coherent_mask or
 dma_coerce_mask_and_coherent unconditionally, this patch (and the next)
 would overwrite those initial settings.
 
 I don't know to what extent the same may be true for the other,
 platform-specific, drivers changed by this patch.  But it's something 
 to be aware of.

Please check the DMA API documentation:

=
For correct operation, you must interrogate the kernel in your device
probe routine to see if the DMA controller on the machine can properly
support the DMA addressing limitation your device has.  It is good
style to do this even if your device holds the default setting,
because this shows that you did think about these issues wrt. your
device.

The query is performed via a call to dma_set_mask():

int dma_set_mask(struct device *dev, u64 mask);

The query for consistent allocations is performed via a call to
dma_set_coherent_mask():

int dma_set_coherent_mask(struct device *dev, u64 mask);
=

So, All drivers which use DMA are supposed to issue the appropriate
calls to check the DMA masks before they perform DMA, even if the
default is correct.

And yes, this is all part of sorting out the DT mess - we should
start not from the current mess (which is really totally haphazard)
but from the well established position of how the DMA API _should_
be used.  What that means is that all drivers should be issuing
these calls as appropriate today.

The default mask setup when the device is created is just that -
it's a default mask, and it should not be used to decide anything
about the device.  That's something which the driver should compute
on its own accord and then inform the various other layers via the
appropriate call.

Remember, on PCI, even when we have 64-bit, we do not declare PCI
devices with a 64-bit DMA mask: that's up to PCI device drivers to
_try_ to set a 64-bit DMA mask, which when successful _allows_ them
to use 64-bit DMA.  If it fails, they have to only use 32-bit.  If
they want a smaller mask, the _driver_ has to set the smaller mask,
not the device creating code.

The reason we're into this (particularly on ARM) is that we got lazy
because we could get by with declaring a DMA mask at device creation
time, since all devices were statically declared.  Now it's time to
get rid of those old lazy ways and start doing things correctly and
to the requirements of the APIs.
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: ehci-pci D3cold logspam

2013-09-23 Thread Alan Stern
On Mon, 23 Sep 2013, Andy Lutomirski wrote:

 I've been getting this on several recent kernel revisions.  Is it
 interesting?  If so, I'm happy to help diagnose it.  If not, can the
 message be killed or severely ratelimited?  I'm getting so much of
 this that it tends to overflow the log ring.

It's interesting only if you care about when your EHCI controllers get
resumed and suspended.  In this case, it's not clear why the
transitions happen so rapidly.  It looks like some sort of polling
is going on at roughly 2-second intervals.

 [  287.344991] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  287.445433] ehci-pci :00:1d.0: setting latency timer to 64
 [  287.446255] ehci-pci :00:1a.0: power state changed by ACPI to D0
 [  287.456094] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
 [  287.547205] ehci-pci :00:1a.0: setting latency timer to 64
 [  287.557890] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
 [  290.126910] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  290.227958] ehci-pci :00:1d.0: setting latency timer to 64
 [  290.228416] ehci-pci :00:1a.0: power state changed by ACPI to D0
 [  290.238749] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
 [  290.328904] ehci-pci :00:1a.0: setting latency timer to 64
 [  290.339565] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
 [  292.214834] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  292.315458] ehci-pci :00:1d.0: setting latency timer to 64
 [  292.315908] ehci-pci :00:1a.0: power state changed by ACPI to D0
 [  292.326262] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
 [  292.416487] ehci-pci :00:1a.0: setting latency timer to 64
 [  292.431075] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
 [  295.458048] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  295.558613] ehci-pci :00:1d.0: setting latency timer to 64

This question should be addressed to the PCI mailing list (cc'ed), as
those two messages are generated by
drivers/pci/pci-acpi.c:acpi_pci_set_power_state() and
drivers/pci/pci.c:pcibios_set_master() respectively.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Mx28 USB workaround for errata

2013-09-23 Thread Robert Hodaszi

Hi,

I had a lot of USB errors on i.mx28. I could reproduce it most easily 
with USB-serial adapters, and USB modems (CDC and WWAN drivers). If I 
sent some data to the TTY port with the echo command in a loop (so 
basically open the port, send data, and close the port), all of the 
devices were dropped down from the root hub. (Later I found, it is 
enough to just periodically open and close the TTY port.)


The reason was an mx28 errata: ENGR119653 USB: ARM to USB register 
error issue


Freescale issued a patch for 2.6.35 to workaround this problem last 
year. I ported this patch. However, it is not totally device tree 
compatible. I mean, this patch is only needed for mx28, not for the 
other SOCs using chipidea, and I used ifdefs. So you can't compile a 
kernel both for mx28 and e.g. for mx23. If you check the patch, you see, 
that it is modifying the lowest layer, the writel() function; it is 
changing it to an SWP instruction. According the errata, I need to use 
SWP instructions to write USB registers.


So I'm curious, what other possibilities do I have to make this patch 
device tree compatible? I mean, I can't check the machine's type on each 
USB register writing. Then I could use function pointers for register 
writing function, or weak aliases somehow. But that would causes an 
overhead because of the additional function calling, instead of simple 
inline assembly codes.


What's the standard way in this case? Or should I just leave the patch 
as it is?



Robert Hodaszi



From de71990cd37a973a598ba8924d415696ea5dabdf Mon Sep 17 00:00:00 2001
From: Robert Hodaszi robert.hoda...@digi.com
Date: Mon, 23 Sep 2013 18:07:18 +0200
Subject: [PATCH] usb: chipidea: implement workaround for i.mx28 errata
 ENGR119653: USB: ARM to USB register error issue

From the i.mx28 Errata:

ENGR119653 USB: ARM to USB register error issue

Description:
The ARM writes a data error to the USB core register unless SRM SWP 
instruction is used.

The issue occurs when all of the following conditions are met:
1. Last AHB access is to the non-USB AHB slave
2. Current AHB access is to the USB
3. These two accesses are back-to-back
4. The last data phase of the last AHB access has a wait state
5. Only happens when D-cache is enabled

Projected Impact:
The USB register does not get correct data when writing to the USB slave 
through the AHB bus

when D-cache is enabled.

Workaround:
All USB register write operations must use the ARM SWP instruction.

Projected Solution:
No fix scheduled.

Signed-off-by: Robert Hodaszi robert.hoda...@digi.com
---
 drivers/usb/chipidea/ci.h |   13 +
 drivers/usb/host/ehci.h   |9 +
 2 files changed, 22 insertions(+)

diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
index 1c94fc5..1ba7428 100644
--- a/drivers/usb/chipidea/ci.h
+++ b/drivers/usb/chipidea/ci.h
@@ -25,6 +25,19 @@
 #define CI_HDRC_PAGE_SIZE  4096ul /* page size for TD's */
 #define ENDPT_MAX  32

+#ifdef CONFIG_SOC_IMX28
+/* Fix errata ENGR119653 for i.mx28 */
+static inline void safe_writel(u32 val32, volatile u32 *addr)
+{
+   __asm__ (swp %0, %0, [%1] : : r(val32), r(addr));
+}
+
+#undef iowrite32
+#undef writel
+#define iowrite32(v, addr) safe_writel(v, addr)
+#define writel(v, addr) safe_writel(v, addr)
+#endif
+

/**
  * STRUCTURES

*/
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index 7c978b2..34dbec0 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -675,6 +675,13 @@ static inline unsigned int ehci_readl(const struct 
ehci_hcd *ehci,

 #endif
 }

+#ifdef CONFIG_SOC_IMX28
+static inline void fsl_safe_writel(u32 val32, volatile u32 *addr)
+{
+   __asm__ (swp %0, %0, [%1] : : r(val32), r(addr));
+}
+#endif
+
 static inline void ehci_writel(const struct ehci_hcd *ehci,
const unsigned int val, __u32 __iomem *regs)
 {
@@ -682,6 +689,8 @@ static inline void ehci_writel(const struct ehci_hcd 
*ehci,

ehci_big_endian_mmio(ehci) ?
writel_be(val, regs) :
writel(val, regs);
+#elif defined(CONFIG_SOC_IMX28)
+   fsl_safe_writel(val, regs);
 #else
writel(val, regs);
 #endif



--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] usb: dwc3: gadget: don't request IRQs in atomic

2013-09-23 Thread Felipe Balbi
mainline commit b0d7ffd44ba9cd2dfbf299674418193a5f9ed21a

We cannot request an IRQ with spinlocks held
as that would trigger a sleeping inside
spinlock warning.

Cc: sta...@vger.kernel.org # v3.10 v3.11
Reported-by: Stephen Boyd sb...@codeaurora.org
Signed-off-by: Felipe Balbi ba...@ti.com
---

Paul reported that this patch wasn't on v3.11 so I cherry-picked
on top of v3.11.1 and it applies cleanly.

Let me know if you have issues applying to that tree and
I'll fix it up.

 drivers/usb/dwc3/gadget.c | 39 ++-
 1 file changed, 22 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index f77083f..14d28d6 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1508,6 +1508,15 @@ static int dwc3_gadget_start(struct usb_gadget *g,
int irq;
u32 reg;
 
+   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
+   ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt,
+   IRQF_SHARED | IRQF_ONESHOT, dwc3, dwc);
+   if (ret) {
+   dev_err(dwc-dev, failed to request irq #%d -- %d\n,
+   irq, ret);
+   goto err0;
+   }
+
spin_lock_irqsave(dwc-lock, flags);
 
if (dwc-gadget_driver) {
@@ -1515,7 +1524,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
dwc-gadget.name,
dwc-gadget_driver-driver.name);
ret = -EBUSY;
-   goto err0;
+   goto err1;
}
 
dwc-gadget_driver  = driver;
@@ -1551,42 +1560,38 @@ static int dwc3_gadget_start(struct usb_gadget *g,
ret = __dwc3_gadget_ep_enable(dep, dwc3_gadget_ep0_desc, NULL, false);
if (ret) {
dev_err(dwc-dev, failed to enable %s\n, dep-name);
-   goto err0;
+   goto err2;
}
 
dep = dwc-eps[1];
ret = __dwc3_gadget_ep_enable(dep, dwc3_gadget_ep0_desc, NULL, false);
if (ret) {
dev_err(dwc-dev, failed to enable %s\n, dep-name);
-   goto err1;
+   goto err3;
}
 
/* begin to receive SETUP packets */
dwc-ep0state = EP0_SETUP_PHASE;
dwc3_ep0_out_start(dwc);
 
-   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
-   ret = request_threaded_irq(irq, dwc3_interrupt, dwc3_thread_interrupt,
-   IRQF_SHARED | IRQF_ONESHOT, dwc3, dwc);
-   if (ret) {
-   dev_err(dwc-dev, failed to request irq #%d -- %d\n,
-   irq, ret);
-   goto err1;
-   }
-
dwc3_gadget_enable_irq(dwc);
 
spin_unlock_irqrestore(dwc-lock, flags);
 
return 0;
 
-err1:
+err3:
__dwc3_gadget_ep_disable(dwc-eps[0]);
 
-err0:
+err2:
dwc-gadget_driver = NULL;
+
+err1:
spin_unlock_irqrestore(dwc-lock, flags);
 
+   free_irq(irq, dwc);
+
+err0:
return ret;
 }
 
@@ -1600,9 +1605,6 @@ static int dwc3_gadget_stop(struct usb_gadget *g,
spin_lock_irqsave(dwc-lock, flags);
 
dwc3_gadget_disable_irq(dwc);
-   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
-   free_irq(irq, dwc);
-
__dwc3_gadget_ep_disable(dwc-eps[0]);
__dwc3_gadget_ep_disable(dwc-eps[1]);
 
@@ -1610,6 +1612,9 @@ static int dwc3_gadget_stop(struct usb_gadget *g,
 
spin_unlock_irqrestore(dwc-lock, flags);
 
+   irq = platform_get_irq(to_platform_device(dwc-dev), 0);
+   free_irq(irq, dwc);
+
return 0;
 }
 
-- 
1.8.3.4.840.g6a90778

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: gadget LLVMLinux: Removing the use of VLAIS from the gadget driver

2013-09-23 Thread Felipe Balbi
Hi,

On Thu, Sep 05, 2013 at 08:07:11PM -0400, Behan Webster wrote:
 Replying to my patch email just in case it was missed before.

I remember there was a discussion of not dropping variable length array
support, wasn't there ?

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v4 1/3] usb: dwc3: msm: Add device tree binding information

2013-09-23 Thread Felipe Balbi
Hi,

On Tue, Aug 20, 2013 at 12:56:03PM +0300, Ivan T. Ivanov wrote:
 From: Ivan T. Ivanov iiva...@mm-sol.com
 
 MSM USB3.0 core wrapper consist of USB3.0 IP from Synopsys
 (SNPS) and HS, SS PHY's control and configuration registers.
 
 It could operate in device mode (SS, HS, FS) and host
 mode (SS, HS, FS, LS).
 
 Signed-off-by: Ivan T. Ivanov iiva...@mm-sol.com

Any acks for the DT part ? This patch has been pending forever.

 ---
  .../devicetree/bindings/usb/msm-ssusb.txt  |  104 
 
  1 file changed, 104 insertions(+)
  create mode 100644 Documentation/devicetree/bindings/usb/msm-ssusb.txt
 
 diff --git a/Documentation/devicetree/bindings/usb/msm-ssusb.txt 
 b/Documentation/devicetree/bindings/usb/msm-ssusb.txt
 new file mode 100644
 index 000..cacbd3b
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/usb/msm-ssusb.txt
 @@ -0,0 +1,104 @@
 +MSM SuperSpeed DWC3 USB SoC controller
 +
 +
 +DWC3 Highspeed USB PHY
 +==
 +Required properities :
 +- compatible : sould be qcom,dwc3-hsphy;
 +- reg : offset and length of the register set in the memory map
 +- clocks : phandles to clock instances of the device tree nodes
 +- clock-names :
 + xo : External reference clock 19 MHz
 + sleep_a : Sleep clock, used when USB3 core goes into low
 + power mode (U3).
 +supply-name-supply : phandle to the regulator device tree node
 +Required supply-name are:
 + v1p8 : 1.8v supply for HSPHY
 + v3p3 : 3.3v supply for HSPHY
 + vbus : vbus supply for host mode
 + vddcx : vdd supply for HS-PHY digital circuit operation
 +
 +DWC3 Superspeed USB PHY
 +===
 +Required properities :
 +- compatible : sould be qcom,dwc3-ssphy;
 +- reg : offset and length of the register set in the memory map
 +- clocks : phandles to clock instances of the device tree nodes
 +- clock-names :
 + xo : External reference clock 19 MHz
 + ref : Reference clock - used in host mode.
 +supply-name-supply : phandle to the regulator device tree node
 +Required supply-name are:
 + v1p8 : 1.8v supply for SS-PHY
 + vddcx : vdd supply for SS-PHY digital circuit operation
 +
 +DWC3 controller wrapper
 +===
 +Required properties :
 +- compatible : should be qcom,dwc3
 +- reg : offset and length of the register set in the memory map
 + offset and length of the TCSR register for routing USB
 + signals to either picoPHY0 or picoPHY1.
 +- clocks : phandles to clock instances of the device tree nodes
 +- clock-names :
 + core : Master/Core clock, have to be = 125 MHz for SS
 + operation and = 60MHz for HS operation
 + iface : System bus AXI clock
 + sleep : Sleep clock, used when USB3 core goes into low
 + power mode (U3).
 + utmi : Generated by HS-PHY. Used to clock the low power
 + parts of thr HS Link layer.
 +Optional properties :
 +- gdsc-supply : phandle to the globally distributed switch controller
 +  regulator node to the USB controller.
 +Required child node:
 +A child node must exist to represent the core DWC3 IP block. The name of
 +the node is not important. The content of the node is defined in dwc3.txt.
 +
 +Example device nodes:
 +
 + dwc3_hsphy: phy@f92f8800 {
 + compatible = qcom,dwc3-hsphy;
 + reg = 0xf92f8800 0x30;
 +
 + clocks = cxo, usb2a_phy_sleep_cxc;
 + clock-names = xo, sleep_a;
 +
 + vbus-supply = supply;
 + vddcx-supply = supply;
 + v1p8-supply = supply;
 + v3p3-supply = supply;
 + };
 +
 + dwc3_ssphy: phy@f92f8830 {
 + compatible = qcom,dwc3-ssphy;
 + reg = 0xf92f8830 0x30;
 +
 + clocks = cxo, usb30_mock_utmi_cxc;
 + clock-names = xo, ref;
 +
 + vddcx-supply = supply;
 + v1p8-supply = supply;
 + };
 +
 + usb@fd4ab000 {
 + compatible = qcom,dwc3;
 + #address-cells = 1;
 + #size-cells = 1;
 + reg = 0xfd4ab000 0x4;
 +
 + clocks = usb30_master_cxc, sys_noc_usb3_axi_cxc,
 + usb30_sleep_cxc, usb30_mock_utmi_cxc;
 + clock-names = core, iface, sleep, utmi;
 +
 + gdsc-supply = supply;
 +
 + ranges;
 + dwc3@f920 {
 + compatible = snps,dwc3;
 + reg = 0xf920 0xcd00;
 + interrupts = 0 131 0;
 + usb-phy = dwc3_hsphy, dwc3_ssphy;
 + tx-fifo-resize;
 + };
 + };
 -- 
 1.7.9.5
 

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v5 2/3] usb: phy: Add Qualcomm SS-USB and HS-USB drivers for DW PHY's

2013-09-23 Thread Felipe Balbi
Hi,

On Wed, Aug 21, 2013 at 04:29:45PM +0300, Ivan T. Ivanov wrote:
 From: Ivan T. Ivanov iiva...@mm-sol.com
 
 These drivers handles control and configuration of the HS
 and SS USB PHY transceivers. They are part of the driver
 which manage Synopsys DesignWare USB3 controller stack
 inside Qualcomm SoC's.
 
 Signed-off-by: Ivan T. Ivanov iiva...@mm-sol.com

I can take this one if DT folks agree with bindings proposed on previous
patch.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v5 1/3] usb: dwc3: msm: Add device tree binding information

2013-09-23 Thread Felipe Balbi
Hi,

On Wed, Aug 21, 2013 at 04:29:44PM +0300, Ivan T. Ivanov wrote:
 From: Ivan T. Ivanov iiva...@mm-sol.com
 
 MSM USB3.0 core wrapper consist of USB3.0 IP from Synopsys
 (SNPS) and HS, SS PHY's control and configuration registers.
 
 It could operate in device mode (SS, HS, FS) and host
 mode (SS, HS, FS, LS).
 
 Signed-off-by: Ivan T. Ivanov iiva...@mm-sol.com

and here's a new version from same patch

 ---
  .../devicetree/bindings/usb/msm-ssusb.txt  |  104 
 
  1 file changed, 104 insertions(+)
  create mode 100644 Documentation/devicetree/bindings/usb/msm-ssusb.txt
 
 diff --git a/Documentation/devicetree/bindings/usb/msm-ssusb.txt 
 b/Documentation/devicetree/bindings/usb/msm-ssusb.txt
 new file mode 100644
 index 000..f57ba8d
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/usb/msm-ssusb.txt
 @@ -0,0 +1,104 @@
 +MSM SuperSpeed DWC3 USB SoC controller
 +
 +
 +MSM DW Highspeed USB PHY
 +
 +Required properities :
 +- compatible : sould be qcom,dw-hsphy;
 +- reg : offset and length of the register set in the memory map
 +- clocks : phandles to clock instances of the device tree nodes
 +- clock-names :
 + xo : External reference clock 19 MHz
 + sleep_a : Sleep clock, used when USB3 core goes into low
 + power mode (U3).
 +supply-name-supply : phandle to the regulator device tree node
 +Required supply-name are:
 + v1p8 : 1.8v supply for HSPHY
 + v3p3 : 3.3v supply for HSPHY
 + vbus : vbus supply for host mode
 + vddcx : vdd supply for HS-PHY digital circuit operation
 +
 +MSM DW Superspeed USB PHY
 +=
 +Required properities :
 +- compatible : sould be qcom,dw-ssphy;
 +- reg : offset and length of the register set in the memory map
 +- clocks : phandles to clock instances of the device tree nodes
 +- clock-names :
 + xo : External reference clock 19 MHz
 + ref : Reference clock - used in host mode.
 +supply-name-supply : phandle to the regulator device tree node
 +Required supply-name are:
 + v1p8 : 1.8v supply for SS-PHY
 + vddcx : vdd supply for SS-PHY digital circuit operation
 +
 +MSM DWC3 controller wrapper
 +===
 +Required properties :
 +- compatible : should be qcom,dwc3
 +- reg : offset and length of the register set in the memory map
 + offset and length of the TCSR register for routing USB
 + signals to either picoPHY0 or picoPHY1.
 +- clocks : phandles to clock instances of the device tree nodes
 +- clock-names :
 + core : Master/Core clock, have to be = 125 MHz for SS
 + operation and = 60MHz for HS operation
 + iface : System bus AXI clock
 + sleep : Sleep clock, used when USB3 core goes into low
 + power mode (U3).
 + utmi : Generated by HS-PHY. Used to clock the low power
 + parts of thr HS Link layer.
 +Optional properties :
 +- gdsc-supply : phandle to the globally distributed switch controller
 +  regulator node to the USB controller.
 +Required child node:
 +A child node must exist to represent the core DWC3 IP block. The name of
 +the node is not important. The content of the node is defined in dwc3.txt.
 +
 +Example device nodes:
 +
 + dw_hsphy: phy@f92f8800 {
 + compatible = qcom,dw-hsphy;
 + reg = 0xf92f8800 0x30;
 +
 + clocks = cxo, usb2a_phy_sleep_cxc;
 + clock-names = xo, sleep_a;
 +
 + vbus-supply = supply;
 + vddcx-supply = supply;
 + v1p8-supply = supply;
 + v3p3-supply = supply;
 + };
 +
 + dw_ssphy: phy@f92f8830 {
 + compatible = qcom,dw-ssphy;
 + reg = 0xf92f8830 0x30;
 +
 + clocks = cxo, usb30_mock_utmi_cxc;
 + clock-names = xo, ref;
 +
 + vddcx-supply = supply;
 + v1p8-supply = supply;
 + };
 +
 + usb@fd4ab000 {
 + compatible = qcom,dwc3;
 + #address-cells = 1;
 + #size-cells = 1;
 + reg = 0xfd4ab000 0x4;
 +
 + clocks = usb30_master_cxc, sys_noc_usb3_axi_cxc,
 + usb30_sleep_cxc, usb30_mock_utmi_cxc;
 + clock-names = core, iface, sleep, utmi;
 +
 + gdsc-supply = supply;
 +
 + ranges;
 + dwc3@f920 {
 + compatible = snps,dwc3;
 + reg = 0xf920 0xcd00;
 + interrupts = 0 131 0;
 + usb-phy = dw_hsphy, dw_ssphy;
 + tx-fifo-resize;
 + };
 + };
 -- 
 1.7.9.5
 

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v6 8/8] ARM: dts: omap5: update omap-control-usb node

2013-09-23 Thread Felipe Balbi
On Mon, Aug 26, 2013 at 06:08:33PM +0300, Roger Quadros wrote:
 Split USB2 PHY and USB3 PHY into separate omap-control-usb
 nodes. Get rid of ti,type property.
 
 CC: Benoit Cousson bcous...@baylibre.com
 Signed-off-by: Roger Quadros rog...@ti.com

Benoit ? ping here too...

-- 
balbi


signature.asc
Description: Digital signature


Re: Mx28 USB workaround for errata

2013-09-23 Thread Alan Stern
On Mon, 23 Sep 2013, Robert Hodaszi wrote:

 Hi,
 
 I had a lot of USB errors on i.mx28. I could reproduce it most easily 
 with USB-serial adapters, and USB modems (CDC and WWAN drivers). If I 
 sent some data to the TTY port with the echo command in a loop (so 
 basically open the port, send data, and close the port), all of the 
 devices were dropped down from the root hub. (Later I found, it is 
 enough to just periodically open and close the TTY port.)
 
 The reason was an mx28 errata: ENGR119653 USB: ARM to USB register 
 error issue
 
 Freescale issued a patch for 2.6.35 to workaround this problem last 
 year. I ported this patch. However, it is not totally device tree 
 compatible. I mean, this patch is only needed for mx28, not for the 
 other SOCs using chipidea, and I used ifdefs. So you can't compile a 
 kernel both for mx28 and e.g. for mx23. If you check the patch, you see, 
 that it is modifying the lowest layer, the writel() function; it is 
 changing it to an SWP instruction. According the errata, I need to use 
 SWP instructions to write USB registers.

Presumably you _could_ use the SWP instructions for other SOCs, but 
they would slow down the driver.  Right?

 So I'm curious, what other possibilities do I have to make this patch 
 device tree compatible? I mean, I can't check the machine's type on each 
 USB register writing.

Actually you can.  See the definition of ehci_writel for an example.

 Then I could use function pointers for register 
 writing function, or weak aliases somehow. But that would causes an 
 overhead because of the additional function calling, instead of simple 
 inline assembly codes.
 
 What's the standard way in this case? Or should I just leave the patch 
 as it is?

Let's see what the Freescale and ChipIdea maintainers suggest.

Alan Stern

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: gadget LLVMLinux: Removing the use of VLAIS from the gadget driver

2013-09-23 Thread Behan Webster

On 09/23/13 14:30, Felipe Balbi wrote:

Hi,

On Thu, Sep 05, 2013 at 08:07:11PM -0400, Behan Webster wrote:

Replying to my patch email just in case it was missed before.

I remember there was a discussion of not dropping variable length array
support, wasn't there ?
There was mostly an objection to the implementation of that patch. The 
new patch follows the advice given by the linux-usb list members at that 
time.


There is increasing interest from various kernel devs (including 
maintainers and above) to be able to use clang to compile the Linux 
kernel. The removal of the use of VLAIS in the kernel is a step in 
allowing that to happen.


Andrzej Pietrasiewicz attended the LLVM microconference at Plumbers last 
week and accepted the USB gadget patch.


Thanks,

Behan

--
Behan Webster
beh...@converseincode.com

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: gadget LLVMLinux: Removing the use of VLAIS from the gadget driver

2013-09-23 Thread Linus Torvalds
On Mon, Sep 23, 2013 at 12:30 PM, Felipe Balbi ba...@ti.com wrote:

 I remember there was a discussion of not dropping variable length array
 support, wasn't there ?

We should definitely drop it. The feature is an abomination. I thought
gcc only allowed them at the end of structs, in the middle of a struct
it's just f*cking insane beyond belief.

That said, for *this* particular case, that USB widget driver already
does a ton of small kmalloc's and then remembers the addresses
independently. People may not care about performance, but it *might*
be a good idea to just do one kmalloc()/kfree(), and then still have
those pointer variables, but just be offsets within that one
allocation.

That's what gcc has to basically do for that thing internally
*anyway*, just hidden behind a horrible construct that should never
have existed.

  Linus
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v6 7/8] ARM: dts: omap4: update omap-control-usb nodes

2013-09-23 Thread Felipe Balbi
Hi,

On Mon, Aug 26, 2013 at 06:08:32PM +0300, Roger Quadros wrote:
 Split otghs_ctrl and USB2 PHY power down into separate
 omap-control-usb nodes. Get rid of ti,type property.
 
 Also get rid of ti,has-mailbox property from usb_otg_hs
 node and provide the ctrl-module phandle.
 
 CC: Benoit Cousson bcous...@baylibre.com
 Signed-off-by: Roger Quadros rog...@ti.com

Benoit ? Any comments here ?

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH] usb: gadget LLVMLinux: Removing the use of VLAIS from the gadget driver

2013-09-23 Thread Behan Webster

On 09/23/13 15:08, Linus Torvalds wrote:

On Mon, Sep 23, 2013 at 12:30 PM, Felipe Balbi ba...@ti.com wrote:

I remember there was a discussion of not dropping variable length array
support, wasn't there ?

We should definitely drop it. The feature is an abomination. I thought
gcc only allowed them at the end of structs, in the middle of a struct
it's just f*cking insane beyond belief.

That said, for *this* particular case, that USB widget driver already
does a ton of small kmalloc's and then remembers the addresses
independently. People may not care about performance, but it *might*
be a good idea to just do one kmalloc()/kfree(), and then still have
those pointer variables, but just be offsets within that one
allocation.

That's what gcc has to basically do for that thing internally
*anyway*, just hidden behind a horrible construct that should never
have existed.

We can certainly do that instead.

I believe I already have a version of the patch which does just that 
(without using macros). I will post it for comment.


Thanks,

Behan

--
Behan Webster
beh...@converseincode.com

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] USB: Removing the use of VLAIS from the gadget driver

2013-09-23 Thread Felipe Balbi
Hi,

On Thu, Aug 01, 2013 at 09:35:44PM -0400, beh...@converseincode.com wrote:
 From: Behan Webster beh...@converseincode.com
 
 The use of variable length arrays in structs (VLAIS) in the Linux Kernel code
 precludes the use of compilers which don't implement VLAIS (for instance the
 Clang compiler). This patch removes the use of VLAIS in the gadget driver.
 
 Signed-off-by: Mark Charlebois charl...@gmail.com
 Signed-off-by: Behan Webster beh...@converseincode.com
 ---
  drivers/usb/gadget/f_fs.c | 128 
 +++---
  1 file changed, 76 insertions(+), 52 deletions(-)
 
 diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
 index f394f29..4b872c4 100644
 --- a/drivers/usb/gadget/f_fs.c
 +++ b/drivers/usb/gadget/f_fs.c
 @@ -30,7 +30,6 @@
  
  #define FUNCTIONFS_MAGIC 0xa647361 /* Chosen by a honest dice roll ;) */
  
 -
  /* Debugging 
 /
  
  #ifdef VERBOSE_DEBUG
 @@ -214,6 +213,8 @@ struct ffs_data {
   /* ids in stringtabs are set in functionfs_bind() */
   const void  *raw_strings;
   struct usb_gadget_strings   **stringtabs;
 + struct usb_gadget_strings   *stringtab;
 + struct usb_string   *strings;
  
   /*
* File system's super block, write once when file system is
 @@ -263,7 +264,10 @@ struct ffs_function {
  
   struct ffs_ep   *eps;
   u8  eps_revmap[16];
 + struct usb_descriptor_header**fs_descs;
 + struct usb_descriptor_header**hs_descs;
   short   *interfaces_nums;
 + char*raw_descs;
  
   struct usb_function function;
  };
 @@ -1345,6 +1349,8 @@ static void ffs_data_clear(struct ffs_data *ffs)
   kfree(ffs-raw_descs);
   kfree(ffs-raw_strings);
   kfree(ffs-stringtabs);
 + kfree(ffs-stringtab);
 + kfree(ffs-strings);
  }
  
  static void ffs_data_reset(struct ffs_data *ffs)
 @@ -1357,6 +1363,8 @@ static void ffs_data_reset(struct ffs_data *ffs)
   ffs-raw_descs = NULL;
   ffs-raw_strings = NULL;
   ffs-stringtabs = NULL;
 + ffs-stringtab = NULL;
 + ffs-strings = NULL;
  
   ffs-raw_descs_length = 0;
   ffs-raw_fs_descs_length = 0;
 @@ -1528,12 +1536,10 @@ static void ffs_func_free(struct ffs_function *func)
   ffs_data_put(func-ffs);
  
   kfree(func-eps);
 - /*
 -  * eps and interfaces_nums are allocated in the same chunk so
 -  * only one free is required.  Descriptors are also allocated
 -  * in the same chunk.
 -  */
 -
 + kfree(func-fs_descs);
 + kfree(func-hs_descs);
 + kfree(func-interfaces_nums);
 + kfree(func-raw_descs);
   kfree(func);
  }
  
 @@ -1907,33 +1913,35 @@ static int __ffs_data_got_strings(struct ffs_data 
 *ffs,
   return 0;
   }
  
 - /* Allocate everything in one chunk so there's less maintenance. */
   {
 - struct {
 - struct usb_gadget_strings *stringtabs[lang_count + 1];
 - struct usb_gadget_strings stringtab[lang_count];
 - struct usb_string strings[lang_count*(needed_count+1)];
 - } *d;
   unsigned i = 0;
 -
 - d = kmalloc(sizeof *d, GFP_KERNEL);
 - if (unlikely(!d)) {
 + usb_gadget_strings **stringtabs = NULL;
 + usb_gadget_strings *stringtab = NULL;
 + usb_string *strings = NULL;

did you compile this patch ?

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v3 1/1] usb: gadget: zero: Add flexible auto remote wakeup test method

2013-09-23 Thread Felipe Balbi
On Thu, Sep 19, 2013 at 08:38:23PM +0800, Peter Chen wrote:
 On Thu, Sep 19, 2013 at 09:24:15AM +0200, Daniele Forsi wrote:
  2013/9/19 Peter Chen:
  
   +   milliseconds to increase successive wakup delays);
  
  there's a typo: s/wakup/wakeup/
  
 
 Thanks, I think I need check more carefully for typo error

I fixed this one when applying. Thanks

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v3] davinci: fix resources passed to MUSB driver for DM6467

2013-09-23 Thread Felipe Balbi
Hi,

On Sun, Sep 22, 2013 at 01:43:58AM +0400, Sergei Shtylyov wrote:
 After commit 09fc7d22b024692b2fe8a943b246de1af307132b (usb: musb: fix 
 incorrect
 usage of  resource pointer), CPPI DMA driver on DaVinci DM6467 can't detect 
 its
 dedicated IRQ and so the MUSB IRQ  is erroneously used instead. This is 
 because
 only 2 resources are passed to the MUSB driver from the DaVinci glue layer,  
 so
 fix  this by always copying 3 resources (it's  safe since a placeholder for 
 the
 3rd resource is always  there) and passing 'pdev-num_resources' instead of 
 the
 size of musb_resources[] to platform_device_add_resources().
 
 Signed-off-by: Sergei Shtylyov sergei.shtyl...@cogentembedded.com
 Cc: sta...@vger.kernel.org # 3.11+
 
 ---
 The patch is against the 'fixes' branch of Felipe Balbi's 'usb.git' repo.
 
 Changes in version 3:
 - fixed the size of musb_resources[] in davinci_probe().
 
 Changes in version 2:
 - resolved reject.
 
  drivers/usb/musb/davinci.c |   13 +++--
  1 file changed, 11 insertions(+), 2 deletions(-)
 
 Index: usb/drivers/usb/musb/davinci.c
 ===
 --- usb.orig/drivers/usb/musb/davinci.c
 +++ usb/drivers/usb/musb/davinci.c
 @@ -509,7 +509,7 @@ static u64 davinci_dmamask = DMA_BIT_MAS
  
  static int davinci_probe(struct platform_device *pdev)
  {
 - struct resource musb_resources[2];
 + struct resource musb_resources[3];

why don't you kcalloc this array based on pdev-num_resources ?

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH] xhci: fix write to USB3_PSSEN and XUSB2PRM pci config registers

2013-09-23 Thread Greg KH
On Mon, Sep 23, 2013 at 09:06:54PM +0300, Xenia Ragiadakou wrote:
 On 09/23/2013 07:45 PM, Sarah Sharp wrote:
 On Fri, Sep 20, 2013 at 07:45:53PM +0300, Xenia Ragiadakou wrote:
 The function pci_write_config_dword() sets the appropriate byteordering
 internally so the value argument should not be converted to little-endian.
 This bug was found by sparse.
 Can you give the exact error or warning message that sparse gave?
 
 Yes, sure.
 
 drivers/usb/host/pci-quirks.c:802:25: warning: incorrect type in
 argument 3 (different base types)
 drivers/usb/host/pci-quirks.c:802:25:expected unsigned int
 [unsigned] [usertype] val
 drivers/usb/host/pci-quirks.c:802:25:got restricted __le32
 [usertype] noident
 drivers/usb/host/pci-quirks.c:824:25: warning: incorrect type in
 argument 3 (different base types)
 drivers/usb/host/pci-quirks.c:824:25:expected unsigned int
 [unsigned] [usertype] val
 drivers/usb/host/pci-quirks.c:824:25:got restricted __le32
 [usertype] noident
 
 
 I ask because this description sounded odd to Greg and I when we met
 last week at LinuxCon North America.  I've tried to track this down to
 see where the code might be converting the value from CPU format to
 little endian, and I don't see it.
 
 AFAICT, pci_write_config_dword() is defined in include/linux/pci.h, and
 calls pci_bus_write_config_dword():
 
 static inline int pci_write_config_dword(const struct pci_dev *dev, int 
 where,
   u32 val)
 {
  return pci_bus_write_config_dword(dev-bus, dev-devfn, where, val);
 }
 
 pci_bus_write_config_dword is defined as a macro in drivers/pci/access.h:
 
 #define PCI_OP_WRITE(size,type,len) \
 int pci_bus_write_config_##size \
  (struct pci_bus *bus, unsigned int devfn, int pos, type value)  \
 {   \
  int res;\
  unsigned long flags;\
  if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;   \
  raw_spin_lock_irqsave(pci_lock, flags);\
  res = bus-ops-write(bus, devfn, pos, len, value); \
  raw_spin_unlock_irqrestore(pci_lock, flags);   \
  return res; \
 }
 
 That macro simply calls the write function for whatever PCI bus driver
 is installed.  Note that bus driver can be different than the standard
 bus driver.  I don't see any conversion to little endian here, so that
 means each bus driver would have to convert it.
 
 I can dig deeper into each .write function, but if the conversion isn't
 done at the upper layers, it's possible someone will create a .write
 function without the conversion to little endian.
 
 Am I missing something?
 
 I had in mind that the pci_ops .read and .write defined by the PCI
 driver will take care of consistent byteorder access to the
 configuration registers. At least, that was what i understood after
 reading the
 chapter on PCI of Linux Device Drivers (more specifically for
 pci_write_config_* functions, it states that The word and dword
 functions convert the value to little-endian before writing to the
 peripheral device.).

Hm, I wrote that paragraph (or at least I think I did), but I sure
didn't remember this at all...

Hm, wait, I do see this happening for the PowerPC cell PCI code, so it
might happen somewhere burried in the platform-specific code for
different arches.  You will not see it happen on x86 as there's no need
to swap any bytes around.

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3] davinci: fix resources passed to MUSB driver for DM6467

2013-09-23 Thread Sergei Shtylyov

Hello.

On 09/24/2013 12:42 AM, Felipe Balbi wrote:


After commit 09fc7d22b024692b2fe8a943b246de1af307132b (usb: musb: fix incorrect
usage of  resource pointer), CPPI DMA driver on DaVinci DM6467 can't detect its
dedicated IRQ and so the MUSB IRQ  is erroneously used instead. This is because
only 2 resources are passed to the MUSB driver from the DaVinci glue layer,  so
fix  this by always copying 3 resources (it's  safe since a placeholder for the
3rd resource is always  there) and passing 'pdev-num_resources' instead of the
size of musb_resources[] to platform_device_add_resources().



Signed-off-by: Sergei Shtylyov sergei.shtyl...@cogentembedded.com
Cc: sta...@vger.kernel.org # 3.11+



---
The patch is against the 'fixes' branch of Felipe Balbi's 'usb.git' repo.



Changes in version 3:
- fixed the size of musb_resources[] in davinci_probe().



Changes in version 2:
- resolved reject.



  drivers/usb/musb/davinci.c |   13 +++--
  1 file changed, 11 insertions(+), 2 deletions(-)



Index: usb/drivers/usb/musb/davinci.c
===
--- usb.orig/drivers/usb/musb/davinci.c
+++ usb/drivers/usb/musb/davinci.c
@@ -509,7 +509,7 @@ static u64 davinci_dmamask = DMA_BIT_MAS

  static int davinci_probe(struct platform_device *pdev)
  {
-   struct resource musb_resources[2];
+   struct resource musb_resources[3];



why don't you kcalloc this array based on pdev-num_resources ?


   I just followed your approach. And I don't see why abusing the heap is any 
better (the resources will be kmemdup()ed anyway upon adding them to device) 
when I know there's no more than 3 resources...


WBR, Sergei

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 0/2] staging: dwc2: add microframe scheduler

2013-09-23 Thread Paul Zimmerman
Here is the third version of the microframe scheduler patch. This
version removes the NAK holdoff patch from the series, since it
was effectively a no-op as pointed out by Matthijs. It also splits
out into a separate patch one hunk which was not part of the
downstream patch. It also acknowledges denx.de as the original
source of the patch.

There were some style-related comments from Dan Carpenter, but I
would prefer to have those as an additional patch, once we have
this known-good code added to the driver.

v2: Split unrelated changes into separate patches per Matthijs
Kooijman.

v1: Original submission.

Paul Zimmerman (2):
  staging: dwc2: validate urb-actual_length for OUT endpoints
  staging: dwc2: add microframe scheduler from downstream Pi kernel

 drivers/staging/dwc2/core.c  |  21 +
 drivers/staging/dwc2/core.h  |   7 ++
 drivers/staging/dwc2/hcd.c   |  54 ---
 drivers/staging/dwc2/hcd.h   |   3 +
 drivers/staging/dwc2/hcd_ddma.c  |  13 ++-
 drivers/staging/dwc2/hcd_intr.c  |  29 +++---
 drivers/staging/dwc2/hcd_queue.c | 199 ---
 drivers/staging/dwc2/pci.c   |   1 +
 8 files changed, 285 insertions(+), 42 deletions(-)

-- 
1.8.2.rc0.16.g20a599e

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v3 2/2] staging: dwc2: add microframe scheduler from downstream Pi kernel

2013-09-23 Thread Paul Zimmerman
From: Dom Cobley popcorn...@gmail.com

The transfer scheduler in the dwc2 driver is pretty basic, not to
mention buggy. It works fairly well with just a couple of devices
plugged in, but if you add, say, multiple devices with periodic
endpoints, the scheduler breaks down and can't even enumerate all
the devices.

To improve this, import the microframe scheduler patch from the
driver in the downstream Raspberry Pi kernel, which is based on
the Synopsys vendor driver. The original patch came from Denx
(http://git.denx.de/?p=linux-denx.git) and was commited to the
raspberrypi.org git tree by popcornmix (Dom Cobley).

I have added a driver parameter for this, enabled by default, in
case anyone has problems with it and needs to disable it. I don't
think we should add a DT binding for that, though, since I plan
to remove the option once any bugs are fixed.

[raspberrypi.org patch from Dom Cobley]
Signed-off-by: Dom Cobley popcorn...@gmail.com
[adapted to dwc2 driver by Paul Zimmerman]
Signed-off-by: Paul Zimmerman pa...@synopsys.com
---
 drivers/staging/dwc2/core.c  |  21 +
 drivers/staging/dwc2/core.h  |   7 ++
 drivers/staging/dwc2/hcd.c   |  50 +++---
 drivers/staging/dwc2/hcd.h   |   3 +
 drivers/staging/dwc2/hcd_ddma.c  |  13 ++-
 drivers/staging/dwc2/hcd_intr.c  |  29 +++---
 drivers/staging/dwc2/hcd_queue.c | 199 ---
 drivers/staging/dwc2/pci.c   |   1 +
 8 files changed, 281 insertions(+), 42 deletions(-)

diff --git a/drivers/staging/dwc2/core.c b/drivers/staging/dwc2/core.c
index 8dbd174..9140f5e 100644
--- a/drivers/staging/dwc2/core.c
+++ b/drivers/staging/dwc2/core.c
@@ -2736,6 +2736,26 @@ int dwc2_get_hwparams(struct dwc2_hsotg *hsotg)
return 0;
 }
 
+int dwc2_set_param_uframe_sched(struct dwc2_hsotg *hsotg, int val)
+{
+   int retval = 0;
+
+   if (DWC2_PARAM_TEST(val, 0, 1)) {
+   if (val = 0) {
+   dev_err(hsotg-dev,
+   '%d' invalid for parameter uframe_sched\n,
+   val);
+   dev_err(hsotg-dev, uframe_sched must be 0 or 1\n);
+   }
+   val = 1;
+   dev_dbg(hsotg-dev, Setting uframe_sched to %d\n, val);
+   retval = -EINVAL;
+   }
+
+   hsotg-core_params-uframe_sched = val;
+   return retval;
+}
+
 /*
  * This function is called during module intialization to pass module 
parameters
  * for the DWC_otg core. It returns non-0 if any parameters are invalid.
@@ -2782,6 +2802,7 @@ int dwc2_set_parameters(struct dwc2_hsotg *hsotg,
retval |= dwc2_set_param_reload_ctl(hsotg, params-reload_ctl);
retval |= dwc2_set_param_ahbcfg(hsotg, params-ahbcfg);
retval |= dwc2_set_param_otg_ver(hsotg, params-otg_ver);
+   retval |= dwc2_set_param_uframe_sched(hsotg, params-uframe_sched);
 
return retval;
 }
diff --git a/drivers/staging/dwc2/core.h b/drivers/staging/dwc2/core.h
index 9102f66..f7ba34b 100644
--- a/drivers/staging/dwc2/core.h
+++ b/drivers/staging/dwc2/core.h
@@ -188,6 +188,7 @@ enum dwc2_lx_state {
  *  bits defined by GAHBCFG_CTRL_MASK are controlled
  *  by the driver and are ignored in this
  *  configuration value.
+ * @uframe_sched:   True to enable the microframe scheduler
  *
  * The following parameters may be specified when starting the module. These
  * parameters define how the DWC_otg controller should be configured. A
@@ -224,6 +225,7 @@ struct dwc2_core_params {
int ts_dline;
int reload_ctl;
int ahbcfg;
+   int uframe_sched;
 };
 
 /**
@@ -370,6 +372,7 @@ struct dwc2_hw_params {
  *  This value is in microseconds per (micro)frame. The
  *  assumption is that all periodic transfers may occur in
  *  the same (micro)frame.
+ * @frame_usecs:Internal variable used by the microframe scheduler
  * @frame_number:   Frame number read from the core at SOF. The value 
ranges
  *  from 0 to HFNUM_MAX_FRNUM.
  * @periodic_qh_count:  Count of periodic QHs, if using several eps. Used for
@@ -382,6 +385,8 @@ struct dwc2_hw_params {
  *  host channel is available for non-periodic 
transactions.
  * @non_periodic_channels: Number of host channels assigned to non-periodic
  *  transfers
+ * @available_host_channels Number of host channels available for the 
microframe
+ *  scheduler to use
  * @hc_ptr_array:   Array of pointers to the host channel descriptors.
  *  Allows accessing a host channel descriptor given the
  *  host channel number. This is useful in interrupt
@@ -436,6 +441,7 @@ struct dwc2_hsotg {
struct list_head periodic_sched_assigned;
struct list_head periodic_sched_queued;
u16 periodic_usecs;
+   

EHCI bus glue driver works for storage, fails for a WiFi module

2013-09-23 Thread Arokux X
Hi,

recently I was working on porting EHCI HCD bus glue driver from the
vendors kernel tree to the mainline [1]. I've got the storage (USB
stick and USB external hard drive) working and was happy. However it
does not work completely. Specifically something goes wrong if WiFi
module is talked to. This WiFi module is on-board and connected
through USB. The WiFi module is correctly identified and the rtl8192cu
driver manages to output something, but issuing

ip link set wlan0 up

will cause an error, see the output of the dmesg [2].

Note, the same hardware works with vendor's tree EHCI bus glue driver
and rtl8192cu, so hardware is ok.

Maybe using a fact that my driver works for the storage but fails for
the WiFi module you could help me identify the problem in it?

By the way, the output of the lsusb - looks identical in both
cases (with my driver and vendor's) [3].

Thank you,
Arokux


[1] 
https://github.com/arokux/linux/commit/da09a5739d610d10aeabc0ac852ecb5b8eaee8d9
[2] http://sprunge.us/Qihe
[3] http://sprunge.us/NKXc
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: ehci-pci D3cold logspam

2013-09-23 Thread Bjorn Helgaas
[+cc Rafael, linux-pm]

On Mon, Sep 23, 2013 at 1:36 PM, Alan Stern st...@rowland.harvard.edu wrote:
 On Mon, 23 Sep 2013, Andy Lutomirski wrote:

 I've been getting this on several recent kernel revisions.  Is it
 interesting?  If so, I'm happy to help diagnose it.  If not, can the
 message be killed or severely ratelimited?  I'm getting so much of
 this that it tends to overflow the log ring.

 It's interesting only if you care about when your EHCI controllers get
 resumed and suspended.  In this case, it's not clear why the
 transitions happen so rapidly.  It looks like some sort of polling
 is going on at roughly 2-second intervals.

 [  287.344991] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  287.445433] ehci-pci :00:1d.0: setting latency timer to 64
 [  287.446255] ehci-pci :00:1a.0: power state changed by ACPI to D0
 [  287.456094] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
 [  287.547205] ehci-pci :00:1a.0: setting latency timer to 64
 [  287.557890] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
 [  290.126910] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  290.227958] ehci-pci :00:1d.0: setting latency timer to 64
 [  290.228416] ehci-pci :00:1a.0: power state changed by ACPI to D0
 [  290.238749] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
 [  290.328904] ehci-pci :00:1a.0: setting latency timer to 64
 [  290.339565] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
 [  292.214834] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  292.315458] ehci-pci :00:1d.0: setting latency timer to 64
 [  292.315908] ehci-pci :00:1a.0: power state changed by ACPI to D0
 [  292.326262] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
 [  292.416487] ehci-pci :00:1a.0: setting latency timer to 64
 [  292.431075] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
 [  295.458048] ehci-pci :00:1d.0: power state changed by ACPI to D0
 [  295.558613] ehci-pci :00:1d.0: setting latency timer to 64

 This question should be addressed to the PCI mailing list (cc'ed), as
 those two messages are generated by
 drivers/pci/pci-acpi.c:acpi_pci_set_power_state() and
 drivers/pci/pci.c:pcibios_set_master() respectively.

d010e5769 (PCI / ACPI: Use dev_dbg() instead of dev_info() in
acpi_pci_set_power_state()) might be part of the solution.  That was
done in response to https://bugzilla.kernel.org/show_bug.cgi?id=60636,
which looks basically the same as your complaint.

But if we are indeed polling every two seconds, even a dev_dbg() seems
like overkill to me.  Rafael or Lan can probably provide a better
answer here.

As for the setting latency timer messages, I really doubt those are
useful to anybody.  If nobody objects, I'll just drop it, e.g.:

diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b821a62..55a947b 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -2854,7 +2854,7 @@ void __weak pcibios_set_master(struct pci_dev *dev)
lat = pcibios_max_latency;
else
return;
-   dev_printk(KERN_DEBUG, dev-dev, setting latency timer to %d\n, lat);
+
pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
 }
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] xhci: fix write to USB3_PSSEN and XUSB2PRM pci config registers

2013-09-23 Thread Bjorn Helgaas
On Mon, Sep 23, 2013 at 3:49 PM, Greg KH g...@kroah.com wrote:
 On Mon, Sep 23, 2013 at 09:06:54PM +0300, Xenia Ragiadakou wrote:
 On 09/23/2013 07:45 PM, Sarah Sharp wrote:
 On Fri, Sep 20, 2013 at 07:45:53PM +0300, Xenia Ragiadakou wrote:
 The function pci_write_config_dword() sets the appropriate byteordering
 internally so the value argument should not be converted to little-endian.
 This bug was found by sparse.
 Can you give the exact error or warning message that sparse gave?

 Yes, sure.

 drivers/usb/host/pci-quirks.c:802:25: warning: incorrect type in
 argument 3 (different base types)
 drivers/usb/host/pci-quirks.c:802:25:expected unsigned int
 [unsigned] [usertype] val
 drivers/usb/host/pci-quirks.c:802:25:got restricted __le32
 [usertype] noident
 drivers/usb/host/pci-quirks.c:824:25: warning: incorrect type in
 argument 3 (different base types)
 drivers/usb/host/pci-quirks.c:824:25:expected unsigned int
 [unsigned] [usertype] val
 drivers/usb/host/pci-quirks.c:824:25:got restricted __le32
 [usertype] noident

 
 I ask because this description sounded odd to Greg and I when we met
 last week at LinuxCon North America.  I've tried to track this down to
 see where the code might be converting the value from CPU format to
 little endian, and I don't see it.
 
 AFAICT, pci_write_config_dword() is defined in include/linux/pci.h, and
 calls pci_bus_write_config_dword():
 
 static inline int pci_write_config_dword(const struct pci_dev *dev, int 
 where,
   u32 val)
 {
  return pci_bus_write_config_dword(dev-bus, dev-devfn, where, 
  val);
 }
 
 pci_bus_write_config_dword is defined as a macro in drivers/pci/access.h:
 
 #define PCI_OP_WRITE(size,type,len) \
 int pci_bus_write_config_##size \
  (struct pci_bus *bus, unsigned int devfn, int pos, type value)  \
 {   \
  int res;\
  unsigned long flags;\
  if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;   \
  raw_spin_lock_irqsave(pci_lock, flags);\
  res = bus-ops-write(bus, devfn, pos, len, value); \
  raw_spin_unlock_irqrestore(pci_lock, flags);   \
  return res; \
 }
 
 That macro simply calls the write function for whatever PCI bus driver
 is installed.  Note that bus driver can be different than the standard
 bus driver.  I don't see any conversion to little endian here, so that
 means each bus driver would have to convert it.
 
 I can dig deeper into each .write function, but if the conversion isn't
 done at the upper layers, it's possible someone will create a .write
 function without the conversion to little endian.
 
 Am I missing something?

 I had in mind that the pci_ops .read and .write defined by the PCI
 driver will take care of consistent byteorder access to the
 configuration registers. At least, that was what i understood after
 reading the
 chapter on PCI of Linux Device Drivers (more specifically for
 pci_write_config_* functions, it states that The word and dword
 functions convert the value to little-endian before writing to the
 peripheral device.).

 Hm, I wrote that paragraph (or at least I think I did), but I sure
 didn't remember this at all...

 Hm, wait, I do see this happening for the PowerPC cell PCI code, so it
 might happen somewhere burried in the platform-specific code for
 different arches.  You will not see it happen on x86 as there's no need
 to swap any bytes around.

Greg, with regard to Xenia's patch, is this an ack or a nack?  Since
you didn't include an Acked-by line, I assume you think Xenia's
patch is unnecessary.  In that case, is there any way to shut sparse
up so it doesn't complain about this?

Bjorn
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: dwc3: gadget: don't request IRQs in atomic

2013-09-23 Thread Felipe Balbi
Hi,

On Mon, Sep 23, 2013 at 02:06:12PM -0700, Greg KH wrote:
 On Mon, Sep 23, 2013 at 02:26:29PM -0500, Felipe Balbi wrote:
  mainline commit b0d7ffd44ba9cd2dfbf299674418193a5f9ed21a
  
  We cannot request an IRQ with spinlocks held
  as that would trigger a sleeping inside
  spinlock warning.
  
  Cc: sta...@vger.kernel.org # v3.10 v3.11
  Reported-by: Stephen Boyd sb...@codeaurora.org
  Signed-off-by: Felipe Balbi ba...@ti.com
  ---
  
  Paul reported that this patch wasn't on v3.11 so I cherry-picked
  on top of v3.11.1 and it applies cleanly.
 
 It wasn't there yet as it was still in my queue, I've now applied it,
 thanks.

Alright, thanks... sorry to bother :-)

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v5 1/3] usb: dwc3: msm: Add device tree binding information

2013-09-23 Thread Stephen Warren
On 09/23/2013 01:32 PM, Felipe Balbi wrote:
 Hi,
 
 On Wed, Aug 21, 2013 at 04:29:44PM +0300, Ivan T. Ivanov wrote:
 From: Ivan T. Ivanov iiva...@mm-sol.com
 
 MSM USB3.0 core wrapper consist of USB3.0 IP from Synopsys (SNPS)
 and HS, SS PHY's control and configuration registers.
 
 It could operate in device mode (SS, HS, FS) and host mode (SS,
 HS, FS, LS).
 
 Signed-off-by: Ivan T. Ivanov iiva...@mm-sol.com
 
 and here's a new version from same patch

The binding looks pretty simple, so I don't think it's too contentious.

 diff --git a/Documentation/devicetree/bindings/usb/msm-ssusb.txt
 b/Documentation/devicetree/bindings/usb/msm-ssusb.txt

 +MSM DWC3 controller wrapper

 +Optional properties : +- gdsc-supply : phandle to the globally
 distributed switch controller +  regulator node to the USB
 controller.

If that's a regulator node, why not use xxx-supply properties to
interface with it?

Aside from that, the binding,
Acked-by: Stephen Warren swar...@nvidia.com
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] USB: Removing the use of VLAIS from the gadget driver

2013-09-23 Thread Behan Webster

On 09/23/13 16:24, Felipe Balbi wrote:

Hi,

On Thu, Aug 01, 2013 at 09:35:44PM -0400, beh...@converseincode.com wrote:

From: Behan Webster beh...@converseincode.com

The use of variable length arrays in structs (VLAIS) in the Linux Kernel code
precludes the use of compilers which don't implement VLAIS (for instance the
Clang compiler). This patch removes the use of VLAIS in the gadget driver.

Signed-off-by: Mark Charlebois charl...@gmail.com
Signed-off-by: Behan Webster beh...@converseincode.com
---
  drivers/usb/gadget/f_fs.c | 128 +++---
  1 file changed, 76 insertions(+), 52 deletions(-)

diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
index f394f29..4b872c4 100644
--- a/drivers/usb/gadget/f_fs.c
+++ b/drivers/usb/gadget/f_fs.c
@@ -30,7 +30,6 @@
  
  #define FUNCTIONFS_MAGIC	0xa647361 /* Chosen by a honest dice roll ;) */
  
-

  /* Debugging /
  
  #ifdef VERBOSE_DEBUG

@@ -214,6 +213,8 @@ struct ffs_data {
/* ids in stringtabs are set in functionfs_bind() */
const void  *raw_strings;
struct usb_gadget_strings   **stringtabs;
+   struct usb_gadget_strings   *stringtab;
+   struct usb_string   *strings;
  
  	/*

 * File system's super block, write once when file system is
@@ -263,7 +264,10 @@ struct ffs_function {
  
  	struct ffs_ep			*eps;

u8  eps_revmap[16];
+   struct usb_descriptor_header**fs_descs;
+   struct usb_descriptor_header**hs_descs;
short   *interfaces_nums;
+   char*raw_descs;
  
  	struct usb_function		function;

  };
@@ -1345,6 +1349,8 @@ static void ffs_data_clear(struct ffs_data *ffs)
kfree(ffs-raw_descs);
kfree(ffs-raw_strings);
kfree(ffs-stringtabs);
+   kfree(ffs-stringtab);
+   kfree(ffs-strings);
  }
  
  static void ffs_data_reset(struct ffs_data *ffs)

@@ -1357,6 +1363,8 @@ static void ffs_data_reset(struct ffs_data *ffs)
ffs-raw_descs = NULL;
ffs-raw_strings = NULL;
ffs-stringtabs = NULL;
+   ffs-stringtab = NULL;
+   ffs-strings = NULL;
  
  	ffs-raw_descs_length = 0;

ffs-raw_fs_descs_length = 0;
@@ -1528,12 +1536,10 @@ static void ffs_func_free(struct ffs_function *func)
ffs_data_put(func-ffs);
  
  	kfree(func-eps);

-   /*
-* eps and interfaces_nums are allocated in the same chunk so
-* only one free is required.  Descriptors are also allocated
-* in the same chunk.
-*/
-
+   kfree(func-fs_descs);
+   kfree(func-hs_descs);
+   kfree(func-interfaces_nums);
+   kfree(func-raw_descs);
kfree(func);
  }
  
@@ -1907,33 +1913,35 @@ static int __ffs_data_got_strings(struct ffs_data *ffs,

return 0;
}
  
-	/* Allocate everything in one chunk so there's less maintenance. */

{
-   struct {
-   struct usb_gadget_strings *stringtabs[lang_count + 1];
-   struct usb_gadget_strings stringtab[lang_count];
-   struct usb_string strings[lang_count*(needed_count+1)];
-   } *d;
unsigned i = 0;
-
-   d = kmalloc(sizeof *d, GFP_KERNEL);
-   if (unlikely(!d)) {
+   usb_gadget_strings **stringtabs = NULL;
+   usb_gadget_strings *stringtab = NULL;
+   usb_string *strings = NULL;

did you compile this patch ?

Appologies. The patch as posted has a bug which was fixed after sending 
it to the list.


Andrzej Pietrasiewicz andrze...@samsung.com has the fixed one. Will 
send the fixed one to the list too.


Behan

--
Behan Webster
beh...@converseincode.com

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] usb: LLVMLinux: Remove VLAIS from USB gadget

2013-09-23 Thread charlebm
From: Mark Charlebois charl...@gmail.com


The use of variable length arrays in structs (VLAIS) in the Linux Kernel code
precludes the use of compilers which don't implement VLAIS (for instance the
Clang compiler). This patch removes the use of VLAIS in the gadget driver.

This version has been tested to compile cleanly. 

Signed-off-by: Mark Charlebois charl...@gmail.com
Signed-off-by: Behan Webster beh...@converseincode.com
---
 drivers/usb/gadget/f_fs.c | 128 +++---
 1 file changed, 76 insertions(+), 52 deletions(-)

--- linux.orig/drivers/usb/gadget/f_fs.c
+++ linux/drivers/usb/gadget/f_fs.c
@@ -30,7 +30,6 @@
 
 #define FUNCTIONFS_MAGIC   0xa647361 /* Chosen by a honest dice roll ;) */
 
-
 /* Debugging /
 
 #ifdef VERBOSE_DEBUG
@@ -214,6 +213,8 @@
/* ids in stringtabs are set in functionfs_bind() */
const void  *raw_strings;
struct usb_gadget_strings   **stringtabs;
+   struct usb_gadget_strings   *stringtab;
+   struct usb_string   *strings;
 
/*
 * File system's super block, write once when file system is
@@ -263,7 +264,10 @@
 
struct ffs_ep   *eps;
u8  eps_revmap[16];
+   struct usb_descriptor_header**fs_descs;
+   struct usb_descriptor_header**hs_descs;
short   *interfaces_nums;
+   char*raw_descs;
 
struct usb_function function;
 };
@@ -1345,6 +1349,8 @@
kfree(ffs-raw_descs);
kfree(ffs-raw_strings);
kfree(ffs-stringtabs);
+   kfree(ffs-stringtab);
+   kfree(ffs-strings);
 }
 
 static void ffs_data_reset(struct ffs_data *ffs)
@@ -1357,6 +1363,8 @@
ffs-raw_descs = NULL;
ffs-raw_strings = NULL;
ffs-stringtabs = NULL;
+   ffs-stringtab = NULL;
+   ffs-strings = NULL;
 
ffs-raw_descs_length = 0;
ffs-raw_fs_descs_length = 0;
@@ -1528,12 +1536,10 @@
ffs_data_put(func-ffs);
 
kfree(func-eps);
-   /*
-* eps and interfaces_nums are allocated in the same chunk so
-* only one free is required.  Descriptors are also allocated
-* in the same chunk.
-*/
-
+   kfree(func-fs_descs);
+   kfree(func-hs_descs);
+   kfree(func-interfaces_nums);
+   kfree(func-raw_descs);
kfree(func);
 }
 
@@ -1877,8 +1883,9 @@
  char *const _data, size_t len)
 {
u32 str_count, needed_count, lang_count;
-   struct usb_gadget_strings **stringtabs, *t;
-   struct usb_string *strings, *s;
+   struct usb_gadget_strings *t, **stringtabs = NULL;
+   struct usb_gadget_strings *stringtab = NULL;
+   struct usb_string *s, *strings = NULL;
const char *data = _data;
 
ENTER();
@@ -1907,33 +1914,33 @@
return 0;
}
 
-   /* Allocate everything in one chunk so there's less maintenance. */
{
-   struct {
-   struct usb_gadget_strings *stringtabs[lang_count + 1];
-   struct usb_gadget_strings stringtab[lang_count];
-   struct usb_string strings[lang_count*(needed_count+1)];
-   } *d;
unsigned i = 0;
-
-   d = kmalloc(sizeof *d, GFP_KERNEL);
-   if (unlikely(!d)) {
+   struct usb_gadget_strings **b;
+
+   stringtabs = kmalloc(sizeof(*stringtabs)*(lang_count + 1),
+   GFP_KERNEL);
+   stringtab = kmalloc(sizeof(*stringtab)*(lang_count),
+   GFP_KERNEL);
+   strings = kmalloc(sizeof(*strings)
+   * (lang_count * (needed_count + 1)), GFP_KERNEL);
+   if (unlikely(!stringtabs || !stringtab || !strings)) {
+   kfree(stringtabs);
+   kfree(stringtab);
+   kfree(strings);
kfree(_data);
return -ENOMEM;
}
-
-   stringtabs = d-stringtabs;
-   t = d-stringtab;
+   b = stringtabs;
+   t = stringtab;
i = lang_count;
do {
-   *stringtabs++ = t++;
+   *b++ = t++;
} while (--i);
-   *stringtabs = NULL;
+   *b = NULL;
 
-   stringtabs = d-stringtabs;
-   t = d-stringtab;
-   s = d-strings;
-   strings = s;
+   t = stringtab;
+   s = strings;
}
 
/* For each language */
@@ -1991,12 +1998,16 @@
 
/* Done! */
ffs-stringtabs = stringtabs;
+   ffs-stringtab = stringtab;
+   ffs-strings = strings;
ffs-raw_strings = _data;
 
   

Re: ehci-pci D3cold logspam

2013-09-23 Thread Rafael J. Wysocki
On Monday, September 23, 2013 04:28:49 PM Bjorn Helgaas wrote:
 [+cc Rafael, linux-pm]
 
 On Mon, Sep 23, 2013 at 1:36 PM, Alan Stern st...@rowland.harvard.edu wrote:
  On Mon, 23 Sep 2013, Andy Lutomirski wrote:
 
  I've been getting this on several recent kernel revisions.  Is it
  interesting?  If so, I'm happy to help diagnose it.  If not, can the
  message be killed or severely ratelimited?  I'm getting so much of
  this that it tends to overflow the log ring.
 
  It's interesting only if you care about when your EHCI controllers get
  resumed and suspended.  In this case, it's not clear why the
  transitions happen so rapidly.  It looks like some sort of polling
  is going on at roughly 2-second intervals.
 
  [  287.344991] ehci-pci :00:1d.0: power state changed by ACPI to D0
  [  287.445433] ehci-pci :00:1d.0: setting latency timer to 64
  [  287.446255] ehci-pci :00:1a.0: power state changed by ACPI to D0
  [  287.456094] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
  [  287.547205] ehci-pci :00:1a.0: setting latency timer to 64
  [  287.557890] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
  [  290.126910] ehci-pci :00:1d.0: power state changed by ACPI to D0
  [  290.227958] ehci-pci :00:1d.0: setting latency timer to 64
  [  290.228416] ehci-pci :00:1a.0: power state changed by ACPI to D0
  [  290.238749] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
  [  290.328904] ehci-pci :00:1a.0: setting latency timer to 64
  [  290.339565] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
  [  292.214834] ehci-pci :00:1d.0: power state changed by ACPI to D0
  [  292.315458] ehci-pci :00:1d.0: setting latency timer to 64
  [  292.315908] ehci-pci :00:1a.0: power state changed by ACPI to D0
  [  292.326262] ehci-pci :00:1d.0: power state changed by ACPI to D3cold
  [  292.416487] ehci-pci :00:1a.0: setting latency timer to 64
  [  292.431075] ehci-pci :00:1a.0: power state changed by ACPI to D3cold
  [  295.458048] ehci-pci :00:1d.0: power state changed by ACPI to D0
  [  295.558613] ehci-pci :00:1d.0: setting latency timer to 64
 
  This question should be addressed to the PCI mailing list (cc'ed), as
  those two messages are generated by
  drivers/pci/pci-acpi.c:acpi_pci_set_power_state() and
  drivers/pci/pci.c:pcibios_set_master() respectively.
 
 d010e5769 (PCI / ACPI: Use dev_dbg() instead of dev_info() in
 acpi_pci_set_power_state()) might be part of the solution.  That was
 done in response to https://bugzilla.kernel.org/show_bug.cgi?id=60636,
 which looks basically the same as your complaint.
 
 But if we are indeed polling every two seconds, even a dev_dbg() seems
 like overkill to me.  Rafael or Lan can probably provide a better
 answer here.

I'd like to be able to see if ACPI PM is called for devices at least in
debug mode.  Otherwise it's difficult to say why things don't work sometimes.

Thanks,
Rafael

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] usb: LLVMLinux: Remove VLAIS from USB gadget

2013-09-23 Thread Behan Webster

On 09/23/13 18:53, charl...@gmail.com wrote:

From: Mark Charlebois charl...@gmail.com


The use of variable length arrays in structs (VLAIS) in the Linux Kernel code
precludes the use of compilers which don't implement VLAIS (for instance the
Clang compiler). This patch removes the use of VLAIS in the gadget driver.

This version has been tested to compile cleanly.

Signed-off-by: Mark Charlebois charl...@gmail.com
Signed-off-by: Behan Webster beh...@converseincode.com


This is the fixed patch which was sent to Andrzej Pietrasiewicz.

Behan

--
Behan Webster
beh...@converseincode.com

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 0/4] usb: xhci: change default enumeration scheme and trivial cleanups

2013-09-23 Thread Dan Williams
Patch 4 is the only interesting one and adds support for the default
enumeration scheme used by legacy hosts, details in the changelog.  The
others are just random cleanup items.

The original discussion for patch 4 can be found here:

http://marc.info/?l=linux-usbm=135906806229309w=2

This is all 3.13 material.  We may want the enumeration change in
-stable at some point, but for now it needs more exposure.

Comments welcome.

--
Dan


---

Dan Williams (4):
  usb: hub_activate kill an 'else'
  usb: xhci: kill a conditional when toggling cycle
  usb: xhci: remove the unused -address field
  usb: xhci: change enumeration scheme to 'new scheme' by default


 drivers/usb/core/hub.c   |   33 -
 drivers/usb/host/xhci-pci.c  |1 +
 drivers/usb/host/xhci-plat.c |1 +
 drivers/usb/host/xhci-ring.c |8 
 drivers/usb/host/xhci.c  |   29 +
 drivers/usb/host/xhci.h  |   13 ++---
 include/linux/usb/hcd.h  |2 ++
 7 files changed, 59 insertions(+), 28 deletions(-)
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/4] usb: hub_activate kill an 'else'

2013-09-23 Thread Dan Williams
Remove a few extra lines and make it clear that all implementations
disable the port by sharing the same line of code.

Cc: Alan Stern st...@rowland.harvard.edu
Signed-off-by: Dan Williams dan.j.willi...@intel.com
---
 drivers/usb/core/hub.c |   11 ---
 1 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 5d859fc..69bbb51 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -1107,16 +1107,13 @@ static void hub_activate(struct usb_hub *hub, enum 
hub_activation_type type)
/*
 * USB3 protocol ports will automatically transition
 * to Enabled state when detect an USB3.0 device attach.
-* Do not disable USB3 protocol ports.
+* Do not disable USB3 protocol ports, just pretend
+* power was lost
 */
-   if (!hub_is_superspeed(hdev)) {
+   portstatus = ~USB_PORT_STAT_ENABLE;
+   if (!hub_is_superspeed(hdev))
usb_clear_port_feature(hdev, port1,
   USB_PORT_FEAT_ENABLE);
-   portstatus = ~USB_PORT_STAT_ENABLE;
-   } else {
-   /* Pretend that power was lost for USB3 devs */
-   portstatus = ~USB_PORT_STAT_ENABLE;
-   }
}
 
/* Clear status-change flags; we'll debounce later */

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/4] usb: xhci: kill a conditional when toggling cycle

2013-09-23 Thread Dan Williams
Perform an unconditional toggle of the cycle bit with 'xor'.

Signed-off-by: Dan Williams dan.j.willi...@intel.com
---
 drivers/usb/host/xhci-ring.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 411da1f..7c043ec 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -168,7 +168,7 @@ static void inc_deq(struct xhci_hcd *xhci, struct xhci_ring 
*ring)
if (ring-type == TYPE_EVENT 
last_trb_on_last_seg(xhci, ring,
ring-deq_seg, ring-dequeue)) {
-   ring-cycle_state = (ring-cycle_state ? 0 : 1);
+   ring-cycle_state ^= 1;
}
ring-deq_seg = ring-deq_seg-next;
ring-dequeue = ring-deq_seg-trbs;

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/4] usb: xhci: remove the unused -address field

2013-09-23 Thread Dan Williams
Only used for debug output, so we don't need to save it.

Signed-off-by: Dan Williams dan.j.willi...@intel.com
---
 drivers/usb/host/xhci.c |   10 ++
 drivers/usb/host/xhci.h |2 --
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 49b6edb..763d0a5 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -3724,9 +3724,6 @@ disable_slot:
  * the device).
  * We should be protected by the usb_address0_mutex in khubd's hub_port_init, 
so
  * we should only issue and wait on one address command at the same time.
- *
- * We add one to the device address issued by the hardware because the USB core
- * uses address 1 for the root hubs (even though they're not really devices).
  */
 int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev)
 {
@@ -3871,16 +3868,13 @@ int xhci_address_device(struct usb_hcd *hcd, struct 
usb_device *udev)
slot_ctx = xhci_get_slot_ctx(xhci, virt_dev-out_ctx);
trace_xhci_address_ctx(xhci, virt_dev-out_ctx,
slot_ctx-dev_info  27);
-   /* Use kernel assigned address for devices; store xHC assigned
-* address locally. */
-   virt_dev-address = (le32_to_cpu(slot_ctx-dev_state)  DEV_ADDR_MASK)
-   + 1;
/* Zero the input context control for later use */
ctrl_ctx-add_flags = 0;
ctrl_ctx-drop_flags = 0;
 
xhci_dbg_trace(xhci, trace_xhci_dbg_address,
-   Internal device address = %d, virt_dev-address);
+  Internal device address = %d,
+  le32_to_cpu(slot_ctx-dev_state)  DEV_ADDR_MASK);
 
return 0;
 }
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 46aa148..6c7aa90 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -934,8 +934,6 @@ struct xhci_virt_device {
/* Rings saved to ensure old alt settings can be re-instated */
struct xhci_ring**ring_cache;
int num_rings_cached;
-   /* Store xHC assigned device address */
-   int address;
 #defineXHCI_MAX_RINGS_CACHED   31
struct xhci_virt_ep eps[31];
struct completion   cmd_completion;

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 4/4] usb: xhci: change enumeration scheme to 'new scheme' by default

2013-09-23 Thread Dan Williams
Change the enumeration scheme for xhci attached devices from:

   SetAddress
   GetDescriptor(8)
   GetDescriptor(18)

...to:

   GetDescriptor(64)
   SetAddress
   GetDescriptor(18)

...as some devices misbehave when encountering a SetAddress command
prior to GetDescriptor.  There are known devices that require this
enumeration scheme but is unknown how much, if any, regression there
will be of xhci-attached devices that can not tolerate the change.  For
now, follow the ehci case and enable 'new scheme' by default.  Of course
the existing 'old_scheme_first' and 'use_both_schemes' usbcore module
parameters are available to debug / workaround regressions.

To support this enumeration scheme on xhci the AddressDevice operation
needs to be performed twice.  The first instance of the command enables
the HC's device and slot context info for the device, but omits sending
the device a SetAddress command (BSR == block set address request).
Then, after GetDescriptor completes, follow up with the full
AddressDevice+SetAddress operation.

Reported-by: David Moore david.mo...@gmail.com
Suggested-by: Sarah Sharp sarah.a.sh...@linux.intel.com
Signed-off-by: Dan Williams dan.j.willi...@intel.com
---
 drivers/usb/core/hub.c   |   22 --
 drivers/usb/host/xhci-pci.c  |1 +
 drivers/usb/host/xhci-plat.c |1 +
 drivers/usb/host/xhci-ring.c |6 +++---
 drivers/usb/host/xhci.c  |   19 +++
 drivers/usb/host/xhci.h  |   11 ++-
 include/linux/usb/hcd.h  |2 ++
 7 files changed, 52 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 69bbb51..355a09d 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -3943,6 +3943,20 @@ static int hub_set_address(struct usb_device *udev, int 
devnum)
return retval;
 }
 
+static int hub_enable_device(struct usb_device *udev)
+{
+   struct usb_hcd *hcd = bus_to_hcd(udev-bus);
+
+   if (!hcd-driver-enable_device)
+   return 0;
+   if (udev-state == USB_STATE_ADDRESS)
+   return 0;
+   if (udev-state != USB_STATE_DEFAULT)
+   return -EINVAL;
+
+   return hcd-driver-enable_device(hcd, udev);
+}
+
 /* Reset device, (re)assign address, get device descriptor.
  * Device connection must be stable, no more debouncing needed.
  * Returns device in USB_STATE_ADDRESS, except on error.
@@ -4063,7 +4077,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device 
*udev, int port1,
 * value.
 */
for (i = 0; i  GET_DESCRIPTOR_TRIES; (++i, msleep(100))) {
-   if (USE_NEW_SCHEME(retry_counter)  !(hcd-driver-flags  
HCD_USB3)) {
+   if (USE_NEW_SCHEME(retry_counter)) {
struct usb_device_descriptor *buf;
int r = 0;
 
@@ -4074,6 +4088,10 @@ hub_port_init (struct usb_hub *hub, struct usb_device 
*udev, int port1,
continue;
}
 
+   retval = hub_enable_device(udev);
+   if (retval  0)
+   goto fail;
+
/* Retry on all errors; some devices are flakey.
 * 255 is for WUSB devices, we actually need to use
 * 512 (WUSB1.0[4.8.1]).
@@ -4155,7 +4173,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device 
*udev, int port1,
 *  - read ep0 maxpacket even for high and low speed,
 */
msleep(10);
-   if (USE_NEW_SCHEME(retry_counter)  
!(hcd-driver-flags  HCD_USB3))
+   if (USE_NEW_SCHEME(retry_counter))
break;
}
 
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index c2d4950..df564d1 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -306,6 +306,7 @@ static const struct hc_driver xhci_pci_hc_driver = {
.check_bandwidth =  xhci_check_bandwidth,
.reset_bandwidth =  xhci_reset_bandwidth,
.address_device =   xhci_address_device,
+   .enable_device =xhci_enable_device,
.update_hub_device =xhci_update_hub_device,
.reset_device = xhci_discover_or_reset_device,
 
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index d9c169f..5413861 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -69,6 +69,7 @@ static const struct hc_driver xhci_plat_xhci_driver = {
.check_bandwidth =  xhci_check_bandwidth,
.reset_bandwidth =  xhci_reset_bandwidth,
.address_device =   xhci_address_device,
+   .enable_device =xhci_enable_device,
.update_hub_device =xhci_update_hub_device,
.reset_device = xhci_discover_or_reset_device,
 
diff --git a/drivers/usb/host/xhci-ring.c 

Re: [PATCH v3 0/2] staging: dwc2: add microframe scheduler

2013-09-23 Thread Dan Carpenter
On Mon, Sep 23, 2013 at 02:23:32PM -0700, Paul Zimmerman wrote:
 There were some style-related comments from Dan Carpenter, but I
 would prefer to have those as an additional patch, once we have
 this known-good code added to the driver.
 

Sure.  Just add a link to the TODO list so we don't forget.

http://www.mail-archive.com/linux-usb@vger.kernel.org/msg26650.html

regards,
dan carpenter
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 0/2] usb: implement AMD remote wakeup quirk

2013-09-23 Thread Sarah Sharp
On Mon, Sep 23, 2013 at 12:43:15PM -0400, Alan Stern wrote:
 This version of the patch set looks good.
 
 Alan Stern

Looks fine to me as well.

Acked-by: Sarah Sharp sarah.a.sh...@linux.intel.com
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] staging: dwc2: add TODO file

2013-09-23 Thread Paul Zimmerman
Add TODO file for DWC2 driver

Signed-off-by: Paul Zimmerman pa...@synopsys.com
---
Greg, this should be applied after the microframe scheduler patch,
since it assumes that one has already been applied.

 drivers/staging/dwc2/TODO | 33 +
 1 file changed, 33 insertions(+)
 create mode 100644 drivers/staging/dwc2/TODO

diff --git a/drivers/staging/dwc2/TODO b/drivers/staging/dwc2/TODO
new file mode 100644
index 000..282470d
--- /dev/null
+++ b/drivers/staging/dwc2/TODO
@@ -0,0 +1,33 @@
+TODO:
+   - Dan Carpenter would like to see some cleanups to the microframe
+ scheduler code:
+ http://www.mail-archive.com/linux-usb@vger.kernel.org/msg26650.html
+
+   - Should merge the NAK holdoff patch from Raspberry Pi
+ (http://marc.info/?l=linux-usbm=137625067103833). But as it stands
+ that patch is incomplete, it needs more investigation to see if it
+ can be made to work for non-Raspberry Pi platforms that lack the
+ special FIQ interrupt that the Pi has. Without this patch, the driver
+ has a high interrupt rate (8K/sec).
+
+   - The Raspberry Pi platform needs to have support for its FIQ interrupt
+ added, to get the same level of functionality as the downstream
+ driver. The raspberrypi.org developers have indicated they are
+ willing to help with that.
+
+   - Some of the default driver parameters (see 'struct dwc2_core_params'
+ in core.h) won't work for many platforms. So DT attributes will need
+ to be added for some of these. But that can be done as-needed as new
+ platforms are added.
+
+   - Eventually the driver should be merged with the s3c-hsotg peripheral
+ mode driver, so that both modes of operation can be supported with a
+ single driver. But I think that can wait till after the driver has
+ been moved to mainline.
+
+   - After that, OTG support can be added. I'm not sure how much demand
+ there is for that, though, so I have that as a low priority.
+
+Please send any patches for this driver to Paul Zimmerman pa...@synopsys.com
+and Greg Kroah-Hartman gre...@linuxfoundation.org. And please CC linux-usb
+linux-usb@vger.kernel.org too.
-- 
1.8.2.rc0.16.g20a599e

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] xhci: fix write to USB3_PSSEN and XUSB2PRM pci config registers

2013-09-23 Thread Sarah Sharp
On Mon, Sep 23, 2013 at 02:49:07PM -0700, Greg KH wrote:
 On Mon, Sep 23, 2013 at 04:38:22PM -0500, Bjorn Helgaas wrote:
  On Mon, Sep 23, 2013 at 3:49 PM, Greg KH g...@kroah.com wrote:
   On Mon, Sep 23, 2013 at 09:06:54PM +0300, Xenia Ragiadakou wrote:
   I had in mind that the pci_ops .read and .write defined by the PCI
   driver will take care of consistent byteorder access to the
   configuration registers. At least, that was what i understood after
   reading the
   chapter on PCI of Linux Device Drivers (more specifically for
   pci_write_config_* functions, it states that The word and dword
   functions convert the value to little-endian before writing to the
   peripheral device.).
  
   Hm, I wrote that paragraph (or at least I think I did), but I sure
   didn't remember this at all...
  
   Hm, wait, I do see this happening for the PowerPC cell PCI code, so it
   might happen somewhere burried in the platform-specific code for
   different arches.  You will not see it happen on x86 as there's no need
   to swap any bytes around.
  
  Greg, with regard to Xenia's patch, is this an ack or a nack?  Since
  you didn't include an Acked-by line, I assume you think Xenia's
  patch is unnecessary.  In that case, is there any way to shut sparse
  up so it doesn't complain about this?
 
 At this point in time, I don't remember what the original patch looked
 like, and as it's an xhci patch, Sarah needs to ack it, not me :)

Greg: So you're saying that there isn't a need to convert values from
CPU byte-ordering to little endian byte-ordering before passing them on
to pci_write_config_*?

If so, then yes, Xenia's patch is fine and I'll pull that into my xHCI
tree.

Sarah Sharp
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Mx28 USB workaround for errata

2013-09-23 Thread Fabio Estevam
Adding Peter and Marek.


On Mon, Sep 23, 2013 at 4:58 PM, Alan Stern st...@rowland.harvard.edu wrote:
 On Mon, 23 Sep 2013, Robert Hodaszi wrote:

 Hi,

 I had a lot of USB errors on i.mx28. I could reproduce it most easily
 with USB-serial adapters, and USB modems (CDC and WWAN drivers). If I
 sent some data to the TTY port with the echo command in a loop (so
 basically open the port, send data, and close the port), all of the
 devices were dropped down from the root hub. (Later I found, it is
 enough to just periodically open and close the TTY port.)

 The reason was an mx28 errata: ENGR119653 USB: ARM to USB register
 error issue

Peter, does this erratum only affect mx28?


 Freescale issued a patch for 2.6.35 to workaround this problem last
 year. I ported this patch. However, it is not totally device tree
 compatible. I mean, this patch is only needed for mx28, not for the
 other SOCs using chipidea, and I used ifdefs. So you can't compile a
 kernel both for mx28 and e.g. for mx23. If you check the patch, you see,
 that it is modifying the lowest layer, the writel() function; it is
 changing it to an SWP instruction. According the errata, I need to use
 SWP instructions to write USB registers.

 Presumably you _could_ use the SWP instructions for other SOCs, but
 they would slow down the driver.  Right?

 So I'm curious, what other possibilities do I have to make this patch
 device tree compatible? I mean, I can't check the machine's type on each
 USB register writing.

 Actually you can.  See the definition of ehci_writel for an example.

 Then I could use function pointers for register
 writing function, or weak aliases somehow. But that would causes an
 overhead because of the additional function calling, instead of simple
 inline assembly codes.

 What's the standard way in this case? Or should I just leave the patch
 as it is?

 Let's see what the Freescale and ChipIdea maintainers suggest.

 Alan Stern
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] xhci: fix write to USB3_PSSEN and XUSB2PRM pci config registers

2013-09-23 Thread Greg KH
On Mon, Sep 23, 2013 at 05:23:07PM -0700, Sarah Sharp wrote:
 On Mon, Sep 23, 2013 at 02:49:07PM -0700, Greg KH wrote:
  On Mon, Sep 23, 2013 at 04:38:22PM -0500, Bjorn Helgaas wrote:
   On Mon, Sep 23, 2013 at 3:49 PM, Greg KH g...@kroah.com wrote:
On Mon, Sep 23, 2013 at 09:06:54PM +0300, Xenia Ragiadakou wrote:
I had in mind that the pci_ops .read and .write defined by the PCI
driver will take care of consistent byteorder access to the
configuration registers. At least, that was what i understood after
reading the
chapter on PCI of Linux Device Drivers (more specifically for
pci_write_config_* functions, it states that The word and dword
functions convert the value to little-endian before writing to the
peripheral device.).
   
Hm, I wrote that paragraph (or at least I think I did), but I sure
didn't remember this at all...
   
Hm, wait, I do see this happening for the PowerPC cell PCI code, so it
might happen somewhere burried in the platform-specific code for
different arches.  You will not see it happen on x86 as there's no need
to swap any bytes around.
   
   Greg, with regard to Xenia's patch, is this an ack or a nack?  Since
   you didn't include an Acked-by line, I assume you think Xenia's
   patch is unnecessary.  In that case, is there any way to shut sparse
   up so it doesn't complain about this?
  
  At this point in time, I don't remember what the original patch looked
  like, and as it's an xhci patch, Sarah needs to ack it, not me :)
 
 Greg: So you're saying that there isn't a need to convert values from
 CPU byte-ordering to little endian byte-ordering before passing them on
 to pci_write_config_*?

That is correct.  Xenia, thanks for figuring this out, nice job.

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: Mx28 USB workaround for errata

2013-09-23 Thread Chen Peter-B29397
 
  The reason was an mx28 errata: ENGR119653 USB: ARM to USB register
  error issue
 
 Peter, does this erratum only affect mx28?

Yes

 
  Freescale issued a patch for 2.6.35 to workaround this problem last
  year. I ported this patch. However, it is not totally device tree
  compatible. I mean, this patch is only needed for mx28, not for the
  other SOCs using chipidea, and I used ifdefs. So you can't compile a
  kernel both for mx28 and e.g. for mx23. If you check the patch, you
 see,
  that it is modifying the lowest layer, the writel() function; it is
  changing it to an SWP instruction. According the errata, I need to use
  SWP instructions to write USB registers.
 
  Presumably you _could_ use the SWP instructions for other SOCs, but
  they would slow down the driver.  Right?
 
  So I'm curious, what other possibilities do I have to make this patch
  device tree compatible? I mean, I can't check the machine's type on
 each
  USB register writing.
 
  Actually you can.  See the definition of ehci_writel for an example.
 
  Then I could use function pointers for register
  writing function, or weak aliases somehow. But that would causes an
  overhead because of the additional function calling, instead of simple
  inline assembly codes.
 
  What's the standard way in this case? Or should I just leave the patch
  as it is?
 
  Let's see what the Freescale and ChipIdea maintainers suggest.
 
I will try to submit patches for both ehci and chipidea driver.

Best regards,
Peter



[PATCH 0/3] Chipidea PHY and low power mode change

2013-09-23 Thread Peter Chen
Hi Greg,

The this serial includes PHY operation change (move to common
code) and low power mode supported, it is based on:
http://marc.info/?l=linux-usbm=137939293826025w=2.

Peter Chen (3):
  usb: chipidea: move PHY operation to core
  usb: chipidea: imx: remove PHY operations
  usb: chipidea: add ci_hdrc_enter_lpm API

 drivers/usb/chipidea/bits.h|1 +
 drivers/usb/chipidea/ci_hdrc_imx.c |   21 ++
 drivers/usb/chipidea/core.c|   81 +---
 drivers/usb/chipidea/udc.c |   39 +-
 4 files changed, 81 insertions(+), 61 deletions(-)


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v2 2/5] usb: chipidea: usbmisc_imx: Using regmap to access register

2013-09-23 Thread Peter Chen
Signed-off-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/chipidea/usbmisc_imx.c |   71 +---
 1 files changed, 34 insertions(+), 37 deletions(-)

diff --git a/drivers/usb/chipidea/usbmisc_imx.c 
b/drivers/usb/chipidea/usbmisc_imx.c
index ac5a461..545efbf 100644
--- a/drivers/usb/chipidea/usbmisc_imx.c
+++ b/drivers/usb/chipidea/usbmisc_imx.c
@@ -15,6 +15,7 @@
 #include linux/err.h
 #include linux/io.h
 #include linux/delay.h
+#include linux/regmap.h
 
 #include ci_hdrc_imx.h
 
@@ -34,10 +35,10 @@
 
 struct imx_usbmisc {
void __iomem *base;
-   spinlock_t lock;
struct clk *clk;
struct usbmisc_usb_device usbdev[USB_DEV_MAX];
const struct usbmisc_ops *ops;
+   struct regmap *regmap;
 };
 
 static struct imx_usbmisc *usbmisc;
@@ -66,21 +67,16 @@ static struct usbmisc_usb_device *get_usbdev(struct device 
*dev)
 static int usbmisc_imx25_post(struct device *dev)
 {
struct usbmisc_usb_device *usbdev;
-   void __iomem *reg;
-   unsigned long flags;
-   u32 val;
 
usbdev = get_usbdev(dev);
if (IS_ERR(usbdev))
return PTR_ERR(usbdev);
 
-   reg = usbmisc-base + MX25_USB_PHY_CTRL_OFFSET;
-
if (usbdev-evdo) {
-   spin_lock_irqsave(usbmisc-lock, flags);
-   val = readl(reg);
-   writel(val | MX25_BM_EXTERNAL_VBUS_DIVIDER, reg);
-   spin_unlock_irqrestore(usbmisc-lock, flags);
+   regmap_update_bits(usbmisc-regmap,
+   MX25_USB_PHY_CTRL_OFFSET,
+   MX25_BM_EXTERNAL_VBUS_DIVIDER,
+   MX25_BM_EXTERNAL_VBUS_DIVIDER);
usleep_range(5000, 1); /* needed to stabilize voltage */
}
 
@@ -90,37 +86,33 @@ static int usbmisc_imx25_post(struct device *dev)
 static int usbmisc_imx53_init(struct device *dev)
 {
struct usbmisc_usb_device *usbdev;
-   void __iomem *reg = NULL;
-   unsigned long flags;
-   u32 val = 0;
+   unsigned int reg = 0, val = 0;
 
usbdev = get_usbdev(dev);
if (IS_ERR(usbdev))
return PTR_ERR(usbdev);
 
if (usbdev-disable_oc) {
-   spin_lock_irqsave(usbmisc-lock, flags);
switch (usbdev-index) {
case 0:
-   reg = usbmisc-base + MX53_USB_OTG_PHY_CTRL_0_OFFSET;
-   val = readl(reg) | MX53_BM_OVER_CUR_DIS_OTG;
+   reg = MX53_USB_OTG_PHY_CTRL_0_OFFSET;
+   val = MX53_BM_OVER_CUR_DIS_OTG;
break;
case 1:
-   reg = usbmisc-base + MX53_USB_OTG_PHY_CTRL_0_OFFSET;
-   val = readl(reg) | MX53_BM_OVER_CUR_DIS_H1;
+   reg = MX53_USB_OTG_PHY_CTRL_0_OFFSET;
+   val = MX53_BM_OVER_CUR_DIS_H1;
break;
case 2:
-   reg = usbmisc-base + MX53_USB_UH2_CTRL_OFFSET;
-   val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx;
+   reg = MX53_USB_UH2_CTRL_OFFSET;
+   val = MX53_BM_OVER_CUR_DIS_UHx;
break;
case 3:
-   reg = usbmisc-base + MX53_USB_UH3_CTRL_OFFSET;
-   val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx;
+   reg = MX53_USB_UH3_CTRL_OFFSET;
+   val = MX53_BM_OVER_CUR_DIS_UHx;
break;
}
-   if (reg  val)
-   writel(val, reg);
-   spin_unlock_irqrestore(usbmisc-lock, flags);
+   if (usbdev-index = 0  usbdev-index = 3)
+   regmap_update_bits(usbmisc-regmap, reg, val, val);
}
 
return 0;
@@ -128,22 +120,15 @@ static int usbmisc_imx53_init(struct device *dev)
 
 static int usbmisc_imx6q_init(struct device *dev)
 {
-
struct usbmisc_usb_device *usbdev;
-   unsigned long flags;
-   u32 reg;
 
usbdev = get_usbdev(dev);
if (IS_ERR(usbdev))
return PTR_ERR(usbdev);
 
-   if (usbdev-disable_oc) {
-   spin_lock_irqsave(usbmisc-lock, flags);
-   reg = readl(usbmisc-base + usbdev-index * 4);
-   writel(reg | MX6_BM_OVER_CUR_DIS,
-   usbmisc-base + usbdev-index * 4);
-   spin_unlock_irqrestore(usbmisc-lock, flags);
-   }
+   if (usbdev-disable_oc)
+   regmap_update_bits(usbmisc-regmap, usbdev-index * 4,
+   MX6_BM_OVER_CUR_DIS, MX6_BM_OVER_CUR_DIS);
 
return 0;
 }
@@ -177,6 +162,12 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
 };
 MODULE_DEVICE_TABLE(of, usbmisc_imx_dt_ids);
 
+static struct regmap_config usbmisc_regmap_config = {
+   .reg_bits = 32,
+   .val_bits = 32,
+   .reg_stride = 4,
+};
+

[PATCH v2 1/5] usb: chipidea: imx: rename the DT doc name

2013-09-23 Thread Peter Chen
To reflect source file name change

Signed-off-by: Peter Chen peter.c...@freescale.com
---
 .../devicetree/bindings/usb/ci13xxx-imx.txt|   31 
 .../devicetree/bindings/usb/ci_hdrc_imx.txt|   31 
 Documentation/devicetree/bindings/usb/mxs-phy.txt  |   13 
 .../devicetree/bindings/usb/phy-mxs-usb.txt|   13 
 4 files changed, 44 insertions(+), 44 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt 
b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
deleted file mode 100644
index b4b5b79..000
--- a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-* Freescale i.MX ci13xxx usb controllers
-
-Required properties:
-- compatible: Should be fsl,imx27-usb
-- reg: Should contain registers location and length
-- interrupts: Should contain controller interrupt
-
-Recommended properies:
-- phy_type: the type of the phy connected to the core. Should be one
-  of utmi, utmi_wide, ulpi, serial or hsic. Without this
-  property the PORTSC register won't be touched
-- dr_mode: One of host, peripheral or otg. Defaults to otg
-
-Optional properties:
-- fsl,usbphy: phandler of usb phy that connects to the only one port
-- fsl,usbmisc: phandler of non-core register device, with one argument
-  that indicate usb controller index
-- vbus-supply: regulator for vbus
-- disable-over-current: disable over current detect
-- external-vbus-divider: enables off-chip resistor divider for Vbus
-
-Examples:
-usb@02184000 { /* USB OTG */
-   compatible = fsl,imx6q-usb, fsl,imx27-usb;
-   reg = 0x02184000 0x200;
-   interrupts = 0 43 0x04;
-   fsl,usbphy = usbphy1;
-   fsl,usbmisc = usbmisc 0;
-   disable-over-current;
-   external-vbus-divider;
-};
diff --git a/Documentation/devicetree/bindings/usb/ci_hdrc_imx.txt 
b/Documentation/devicetree/bindings/usb/ci_hdrc_imx.txt
new file mode 100644
index 000..b4b5b79
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/ci_hdrc_imx.txt
@@ -0,0 +1,31 @@
+* Freescale i.MX ci13xxx usb controllers
+
+Required properties:
+- compatible: Should be fsl,imx27-usb
+- reg: Should contain registers location and length
+- interrupts: Should contain controller interrupt
+
+Recommended properies:
+- phy_type: the type of the phy connected to the core. Should be one
+  of utmi, utmi_wide, ulpi, serial or hsic. Without this
+  property the PORTSC register won't be touched
+- dr_mode: One of host, peripheral or otg. Defaults to otg
+
+Optional properties:
+- fsl,usbphy: phandler of usb phy that connects to the only one port
+- fsl,usbmisc: phandler of non-core register device, with one argument
+  that indicate usb controller index
+- vbus-supply: regulator for vbus
+- disable-over-current: disable over current detect
+- external-vbus-divider: enables off-chip resistor divider for Vbus
+
+Examples:
+usb@02184000 { /* USB OTG */
+   compatible = fsl,imx6q-usb, fsl,imx27-usb;
+   reg = 0x02184000 0x200;
+   interrupts = 0 43 0x04;
+   fsl,usbphy = usbphy1;
+   fsl,usbmisc = usbmisc 0;
+   disable-over-current;
+   external-vbus-divider;
+};
diff --git a/Documentation/devicetree/bindings/usb/mxs-phy.txt 
b/Documentation/devicetree/bindings/usb/mxs-phy.txt
deleted file mode 100644
index 5835b27..000
--- a/Documentation/devicetree/bindings/usb/mxs-phy.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-* Freescale MXS USB Phy Device
-
-Required properties:
-- compatible: Should be fsl,imx23-usbphy
-- reg: Should contain registers location and length
-- interrupts: Should contain phy interrupt
-
-Example:
-usbphy1: usbphy@020c9000 {
-   compatible = fsl,imx6q-usbphy, fsl,imx23-usbphy;
-   reg = 0x020c9000 0x1000;
-   interrupts = 0 44 0x04;
-};
diff --git a/Documentation/devicetree/bindings/usb/phy-mxs-usb.txt 
b/Documentation/devicetree/bindings/usb/phy-mxs-usb.txt
new file mode 100644
index 000..5835b27
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/phy-mxs-usb.txt
@@ -0,0 +1,13 @@
+* Freescale MXS USB Phy Device
+
+Required properties:
+- compatible: Should be fsl,imx23-usbphy
+- reg: Should contain registers location and length
+- interrupts: Should contain phy interrupt
+
+Example:
+usbphy1: usbphy@020c9000 {
+   compatible = fsl,imx6q-usbphy, fsl,imx23-usbphy;
+   reg = 0x020c9000 0x1000;
+   interrupts = 0 44 0x04;
+};
-- 
1.7.1


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 3/3] usb: chipidea: add ci_hdrc_enter_lpm API

2013-09-23 Thread Peter Chen
This API is used to let the PHY enter/leave low power mode.
Before the controller going to work(at probe/resume), it needs to let
the PHY leave low power mode.
After the controller stopping working(at remove/suspend), it needs to
let the PHY enter low power mode to save power consumption.

Signed-off-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/chipidea/bits.h |1 +
 drivers/usb/chipidea/core.c |   24 
 2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/chipidea/bits.h b/drivers/usb/chipidea/bits.h
index 464584c..a857131 100644
--- a/drivers/usb/chipidea/bits.h
+++ b/drivers/usb/chipidea/bits.h
@@ -48,6 +48,7 @@
 #define PORTSC_SUSP   BIT(7)
 #define PORTSC_HSPBIT(9)
 #define PORTSC_PTC(0x0FUL  16)
+#define PORTSC_PHCD(d)   ((d) ? BIT(22) : BIT(23))
 /* PTS and PTW for non lpm version only */
 #define PORTSC_PTS(d)  \
(u32)d)  0x3)  30) | (((d)  0x4) ? BIT(25) : 0))
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index b20286d..06204b7 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -172,6 +172,27 @@ u8 hw_port_test_get(struct ci_hdrc *ci)
return hw_read(ci, OP_PORTSC, PORTSC_PTC)  __ffs(PORTSC_PTC);
 }
 
+/* The PHY enters/leaves low power mode */
+static void ci_hdrc_enter_lpm(struct ci_hdrc *ci, bool enable)
+{
+   enum ci_hw_regs reg = ci-hw_bank.lpm ? OP_DEVLC : OP_PORTSC;
+   bool lpm = !!(hw_read(ci, reg, PORTSC_PHCD(ci-hw_bank.lpm)));
+
+   if (enable  !lpm) {
+   hw_write(ci, reg, PORTSC_PHCD(ci-hw_bank.lpm),
+   PORTSC_PHCD(ci-hw_bank.lpm));
+   } else  if (!enable  lpm) {
+   hw_write(ci, reg, PORTSC_PHCD(ci-hw_bank.lpm),
+   0);
+   /* 
+* The controller needs at least 1ms to reflect
+* PHY's status, the PHY also needs some time (less
+* than 1ms) to leave low power mode.
+*/
+   usleep_range(1500, 2000);
+   }
+}
+
 static int hw_device_init(struct ci_hdrc *ci, void __iomem *base)
 {
u32 reg;
@@ -199,6 +220,8 @@ static int hw_device_init(struct ci_hdrc *ci, void __iomem 
*base)
if (ci-hw_ep_max  ENDPT_MAX)
return -ENODEV;
 
+   ci_hdrc_enter_lpm(ci, false);
+
/* Disable all interrupts bits */
hw_write(ci, OP_USBINTR, 0x, 0);
 
@@ -648,6 +671,7 @@ static int ci_hdrc_remove(struct platform_device *pdev)
dbg_remove_files(ci);
free_irq(ci-irq, ci);
ci_role_destroy(ci);
+   ci_hdrc_enter_lpm(ci, true);
ci_usb_phy_destroy(ci);
kfree(ci-hw_bank.regmap);
 
-- 
1.7.1


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 1/3] usb: chipidea: move PHY operation to core

2013-09-23 Thread Peter Chen
PHY operations are common, so move them to core.

Signed-off-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/chipidea/core.c |   57 ++
 drivers/usb/chipidea/udc.c  |   39 +
 2 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index c47a6b4..b20286d 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -474,6 +474,33 @@ static void ci_get_otg_capable(struct ci_hdrc *ci)
}
 }
 
+static int ci_usb_phy_init(struct ci_hdrc *ci)
+{
+   if (ci-platdata-phy) {
+   ci-transceiver = ci-platdata-phy;
+   return usb_phy_init(ci-transceiver);
+   } else {
+   ci-global_phy = true;
+   ci-transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
+   if (IS_ERR(ci-transceiver))
+   ci-transceiver = NULL;
+
+   return 0;
+   }
+}
+
+static void ci_usb_phy_destroy(struct ci_hdrc *ci)
+{
+   if (!ci-transceiver)
+   return;
+
+   otg_set_peripheral(ci-transceiver-otg, NULL);
+   if (ci-global_phy)
+   usb_put_phy(ci-transceiver);
+   else
+   usb_phy_shutdown(ci-transceiver);
+}
+
 static int ci_hdrc_probe(struct platform_device *pdev)
 {
struct device   *dev = pdev-dev;
@@ -501,10 +528,6 @@ static int ci_hdrc_probe(struct platform_device *pdev)
 
ci-dev = dev;
ci-platdata = dev-platform_data;
-   if (ci-platdata-phy)
-   ci-transceiver = ci-platdata-phy;
-   else
-   ci-global_phy = true;
 
ret = hw_device_init(ci, base);
if (ret  0) {
@@ -512,12 +535,19 @@ static int ci_hdrc_probe(struct platform_device *pdev)
return -ENODEV;
}
 
+   ret = ci_usb_phy_init(ci);
+   if (ret) {
+   dev_err(dev, unable to init phy: %d\n, ret);
+   return ret;
+   }
+
ci-hw_bank.phys = res-start;
 
ci-irq = platform_get_irq(pdev, 0);
if (ci-irq  0) {
dev_err(dev, missing IRQ\n);
-   return -ENODEV;
+   ret = -ENODEV;
+   goto destroy_phy;
}
 
ci_get_otg_capable(ci);
@@ -536,11 +566,23 @@ static int ci_hdrc_probe(struct platform_device *pdev)
ret = ci_hdrc_gadget_init(ci);
if (ret)
dev_info(dev, doesn't support gadget\n);
+   if (!ret  ci-transceiver) {
+   ret = otg_set_peripheral(ci-transceiver-otg,
+   ci-gadget);
+   /*
+* If we implement all USB functions using chipidea 
drivers,
+* it doesn't need to call above API, meanwhile, if we 
only
+* use gadget function, calling above API is useless.
+*/
+   if (ret  ret != -ENOTSUPP)
+   goto destroy_phy;
+   }
}
 
if (!ci-roles[CI_ROLE_HOST]  !ci-roles[CI_ROLE_GADGET]) {
dev_err(dev, no supported roles\n);
-   return -ENODEV;
+   ret = -ENODEV;
+   goto destroy_phy;
}
 
if (ci-is_otg) {
@@ -593,6 +635,8 @@ static int ci_hdrc_probe(struct platform_device *pdev)
free_irq(ci-irq, ci);
 stop:
ci_role_destroy(ci);
+destroy_phy:
+   ci_usb_phy_destroy(ci);
 
return ret;
 }
@@ -604,6 +648,7 @@ static int ci_hdrc_remove(struct platform_device *pdev)
dbg_remove_files(ci);
free_irq(ci-irq, ci);
ci_role_destroy(ci);
+   ci_usb_phy_destroy(ci);
kfree(ci-hw_bank.regmap);
 
return 0;
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index b157c95..2bb7d18 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -20,7 +20,6 @@
 #include linux/pm_runtime.h
 #include linux/usb/ch9.h
 #include linux/usb/gadget.h
-#include linux/usb/otg.h
 #include linux/usb/chipidea.h
 
 #include ci.h
@@ -1790,34 +1789,9 @@ static int udc_start(struct ci_hdrc *ci)
 
ci-gadget.ep0 = ci-ep0in-ep;
 
-   if (ci-global_phy) {
-   ci-transceiver = usb_get_phy(USB_PHY_TYPE_USB2);
-   if (IS_ERR(ci-transceiver))
-   ci-transceiver = NULL;
-   }
-
-   if (ci-platdata-flags  CI_HDRC_REQUIRE_TRANSCEIVER) {
-   if (ci-transceiver == NULL) {
-   retval = -ENODEV;
-   goto destroy_eps;
-   }
-   }
-
-   if (ci-transceiver) {
-   retval = otg_set_peripheral(ci-transceiver-otg,
-   ci-gadget);
-   /*
-* If we implement all USB functions using chipidea drivers,
-* it doesn't 

[PATCH 2/3] usb: chipidea: imx: remove PHY operations

2013-09-23 Thread Peter Chen
Since the PHY operations are moved to core, delete the related
code at glue layer.

Signed-off-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/chipidea/ci_hdrc_imx.c |   21 -
 1 files changed, 4 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c 
b/drivers/usb/chipidea/ci_hdrc_imx.c
index be822a2..023d3cb 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -108,14 +108,8 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
}
 
data-phy = devm_usb_get_phy_by_phandle(pdev-dev, fsl,usbphy, 0);
-   if (!IS_ERR(data-phy)) {
-   ret = usb_phy_init(data-phy);
-   if (ret) {
-   dev_err(pdev-dev, unable to init phy: %d\n, ret);
-   goto err_clk;
-   }
-   } else if (PTR_ERR(data-phy) == -EPROBE_DEFER) {
-   ret = -EPROBE_DEFER;
+   if (IS_ERR(data-phy)) {
+   ret = PTR_ERR(data-phy);
goto err_clk;
}
 
@@ -131,7 +125,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
if (ret) {
dev_err(pdev-dev, usbmisc init failed, ret=%d\n,
ret);
-   goto err_phy;
+   goto err_clk;
}
}
 
@@ -143,7 +137,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
dev_err(pdev-dev,
Can't register ci_hdrc platform device, err=%d\n,
ret);
-   goto err_phy;
+   goto err_clk;
}
 
if (data-usbmisc_data) {
@@ -164,9 +158,6 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
 
 disable_device:
ci_hdrc_remove_device(data-ci_pdev);
-err_phy:
-   if (data-phy)
-   usb_phy_shutdown(data-phy);
 err_clk:
clk_disable_unprepare(data-clk);
return ret;
@@ -178,10 +169,6 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev)
 
pm_runtime_disable(pdev-dev);
ci_hdrc_remove_device(data-ci_pdev);
-
-   if (data-phy)
-   usb_phy_shutdown(data-phy);
-
clk_disable_unprepare(data-clk);
 
return 0;
-- 
1.7.1


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 1/5] usb: chipidea: imx: rename the DT doc name

2013-09-23 Thread Peter Chen
On Tue, Sep 24, 2013 at 12:46:52PM +0800, Peter Chen wrote:

Sorry, sending wrongly, please skip it

-- 

Best Regards,
Peter Chen

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 2/5] usb: chipidea: usbmisc_imx: Using regmap to access register

2013-09-23 Thread Peter Chen
On Tue, Sep 24, 2013 at 12:46:53PM +0800, Peter Chen wrote:

Sorry, sending wrongly, please skip it

 Signed-off-by: Peter Chen peter.c...@freescale.com
 ---
  drivers/usb/chipidea/usbmisc_imx.c |   71 
 +---
  1 files changed, 34 insertions(+), 37 deletions(-)
 
 diff --git a/drivers/usb/chipidea/usbmisc_imx.c 
 b/drivers/usb/chipidea/usbmisc_imx.c
 index ac5a461..545efbf 100644
 --- a/drivers/usb/chipidea/usbmisc_imx.c
 +++ b/drivers/usb/chipidea/usbmisc_imx.c
 @@ -15,6 +15,7 @@
  #include linux/err.h
  #include linux/io.h
  #include linux/delay.h
 +#include linux/regmap.h
  
  #include ci_hdrc_imx.h
  
 @@ -34,10 +35,10 @@
  
  struct imx_usbmisc {
   void __iomem *base;
 - spinlock_t lock;
   struct clk *clk;
   struct usbmisc_usb_device usbdev[USB_DEV_MAX];
   const struct usbmisc_ops *ops;
 + struct regmap *regmap;
  };
  
  static struct imx_usbmisc *usbmisc;
 @@ -66,21 +67,16 @@ static struct usbmisc_usb_device *get_usbdev(struct 
 device *dev)
  static int usbmisc_imx25_post(struct device *dev)
  {
   struct usbmisc_usb_device *usbdev;
 - void __iomem *reg;
 - unsigned long flags;
 - u32 val;
  
   usbdev = get_usbdev(dev);
   if (IS_ERR(usbdev))
   return PTR_ERR(usbdev);
  
 - reg = usbmisc-base + MX25_USB_PHY_CTRL_OFFSET;
 -
   if (usbdev-evdo) {
 - spin_lock_irqsave(usbmisc-lock, flags);
 - val = readl(reg);
 - writel(val | MX25_BM_EXTERNAL_VBUS_DIVIDER, reg);
 - spin_unlock_irqrestore(usbmisc-lock, flags);
 + regmap_update_bits(usbmisc-regmap,
 + MX25_USB_PHY_CTRL_OFFSET,
 + MX25_BM_EXTERNAL_VBUS_DIVIDER,
 + MX25_BM_EXTERNAL_VBUS_DIVIDER);
   usleep_range(5000, 1); /* needed to stabilize voltage */
   }
  
 @@ -90,37 +86,33 @@ static int usbmisc_imx25_post(struct device *dev)
  static int usbmisc_imx53_init(struct device *dev)
  {
   struct usbmisc_usb_device *usbdev;
 - void __iomem *reg = NULL;
 - unsigned long flags;
 - u32 val = 0;
 + unsigned int reg = 0, val = 0;
  
   usbdev = get_usbdev(dev);
   if (IS_ERR(usbdev))
   return PTR_ERR(usbdev);
  
   if (usbdev-disable_oc) {
 - spin_lock_irqsave(usbmisc-lock, flags);
   switch (usbdev-index) {
   case 0:
 - reg = usbmisc-base + MX53_USB_OTG_PHY_CTRL_0_OFFSET;
 - val = readl(reg) | MX53_BM_OVER_CUR_DIS_OTG;
 + reg = MX53_USB_OTG_PHY_CTRL_0_OFFSET;
 + val = MX53_BM_OVER_CUR_DIS_OTG;
   break;
   case 1:
 - reg = usbmisc-base + MX53_USB_OTG_PHY_CTRL_0_OFFSET;
 - val = readl(reg) | MX53_BM_OVER_CUR_DIS_H1;
 + reg = MX53_USB_OTG_PHY_CTRL_0_OFFSET;
 + val = MX53_BM_OVER_CUR_DIS_H1;
   break;
   case 2:
 - reg = usbmisc-base + MX53_USB_UH2_CTRL_OFFSET;
 - val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx;
 + reg = MX53_USB_UH2_CTRL_OFFSET;
 + val = MX53_BM_OVER_CUR_DIS_UHx;
   break;
   case 3:
 - reg = usbmisc-base + MX53_USB_UH3_CTRL_OFFSET;
 - val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx;
 + reg = MX53_USB_UH3_CTRL_OFFSET;
 + val = MX53_BM_OVER_CUR_DIS_UHx;
   break;
   }
 - if (reg  val)
 - writel(val, reg);
 - spin_unlock_irqrestore(usbmisc-lock, flags);
 + if (usbdev-index = 0  usbdev-index = 3)
 + regmap_update_bits(usbmisc-regmap, reg, val, val);
   }
  
   return 0;
 @@ -128,22 +120,15 @@ static int usbmisc_imx53_init(struct device *dev)
  
  static int usbmisc_imx6q_init(struct device *dev)
  {
 -
   struct usbmisc_usb_device *usbdev;
 - unsigned long flags;
 - u32 reg;
  
   usbdev = get_usbdev(dev);
   if (IS_ERR(usbdev))
   return PTR_ERR(usbdev);
  
 - if (usbdev-disable_oc) {
 - spin_lock_irqsave(usbmisc-lock, flags);
 - reg = readl(usbmisc-base + usbdev-index * 4);
 - writel(reg | MX6_BM_OVER_CUR_DIS,
 - usbmisc-base + usbdev-index * 4);
 - spin_unlock_irqrestore(usbmisc-lock, flags);
 - }
 + if (usbdev-disable_oc)
 + regmap_update_bits(usbmisc-regmap, usbdev-index * 4,
 + MX6_BM_OVER_CUR_DIS, MX6_BM_OVER_CUR_DIS);
  
   return 0;
  }
 @@ -177,6 +162,12 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
  };
  MODULE_DEVICE_TABLE(of, usbmisc_imx_dt_ids);
  
 +static struct regmap_config usbmisc_regmap_config = {
 +