Re: [PATCH v3] cdc-acm: ensure that termios get set when the port is activated

2014-10-30 Thread Johan Hovold
On Wed, Oct 29, 2014 at 08:53:14PM -0400, Jim Paris wrote:
> The driver wasn't properly configuring the hardware for the current
> termios settings under all conditions.  Ensure that termios are
> written to the device when the port is activated.
> 
> Signed-off-by: Jim Paris 
> ---
> 
> Switched to Johan's suggestion of using a prototype rather than moving
> acm_tty_set_termios.  This depends on his patch in order to get proper
> DTR handling.
> 
> Thanks,
> Jim 
> 
> ---
>  drivers/usb/class/cdc-acm.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
> index e934e19f49f5..d2cd1b6d02a7 100644
> --- a/drivers/usb/class/cdc-acm.c
> +++ b/drivers/usb/class/cdc-acm.c
> @@ -58,6 +58,9 @@ static struct usb_driver acm_driver;
>  static struct tty_driver *acm_tty_driver;
>  static struct acm *acm_table[ACM_TTY_MINORS];
>  
> +static void acm_tty_set_termios(struct tty_struct *tty,
> + struct ktermios *termios_old);
> +

Nit: Would you mind placing the prototype after all data declarations
(i.e. below acm_table_lock)?

>  static DEFINE_MUTEX(acm_table_lock);

Thanks,
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] USB: cdc-acm: add device id for GW Instek AFG-2225

2014-10-30 Thread Oliver Neukum
On Thu, 2014-10-30 at 02:19 +0100, Peter Stuge wrote:
> Oliver Neukum wrote:
> > Then I guess I'll take no further action in kernel space.
> 
> I for one would like the kernel messages to be less prominent, if
> they stay at all.

I am removing them.

Regards
Oliver


--
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: cdc-acm: only raise DTR on transitions from B0

2014-10-30 Thread Oliver Neukum
On Wed, 2014-10-29 at 16:58 +0100, Johan Hovold wrote:
> On Wed, Oct 29, 2014 at 11:56:02PM +0800, Greg Kroah-Hartman wrote:

> > This should go to older kernels as well, right?
> 
> Yes, if you want.
> 
> It's fixing handling of B0, but I doubt many people care (hence the
> missing stable tag). Note that set_termios is currently not called
> during open() (but Jim's patch will be relying on this one).

It may not hit many people, but whom it hits, it hits hard. It
should go into stable.

Regards
Oliver


--
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: dogfooding fedora 21 - usb printers & mtp devices

2014-10-30 Thread Hans de Goede
Hi,

On 10/29/2014 11:32 PM, Alon Levy wrote:
> Hey, how are you? have you noticed problems with $SUBJECT? I have a
> continuously disconnecting printer. Using XHCI (T440p) getting a repeat of:
> 
> [105574.775812] usblp 3-6:1.0: usblp0: USB Bidirectional printer dev 27
> if 0 alt 0 proto 2 vid 0x03F0 pid 0x3F17
> [105579.001841] usb 3-6: USB disconnect, device number 27
> 
> And with the MTP device (a sony player) there are multiple problems, but
> a recent regression is now the major one, from just not working
> correctly (could copy files but the device would not play them) now it
> never properly gets a configuration:
> https://github.com/alon/kernel-bug-reports/issues/1
> 
> I didn't manage to really google any of these properly, which is why I'm
> asking you, in case you have the cycles to give me some pointers.

I'm not aware of any issues with such devices. For the printer problem
you should probably send a detailed bug report to linux-usb 


For the mtp regression you should probably first try to pinpoint the cause, try
downgrading the kernel to a known working f20 kernel, if that does not help, the
cause likely is some userspace component (e.g. libmtp).

Regards,

Hans
--
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 v4 19/20] usb: dwc3: add support for AMD Nolan platform

2014-10-30 Thread Huang Rui
This patch adds support for AMD Nolan (NL) FPGA and SoC platform.

Cc: Jason Chang 
Signed-off-by: Huang Rui 
---
 drivers/usb/dwc3/dwc3-pci.c | 23 +++
 1 file changed, 23 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index ada975f..257fb3f9e 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -145,6 +145,28 @@ static int dwc3_pci_probe(struct pci_dev *pci,
res[1].name = "dwc_usb3";
res[1].flags= IORESOURCE_IRQ;
 
+   if (pci->vendor == PCI_VENDOR_ID_AMD &&
+   pci->device == PCI_DEVICE_ID_AMD_NL_USB) {
+   dwc3_pdata.has_lpm_erratum = true;
+   dwc3_pdata.lpm_nyet_threshold = 0xf;
+
+   dwc3_pdata.u2exit_lfps_quirk = true;
+   dwc3_pdata.u2ss_inp3_quirk = true;
+   dwc3_pdata.req_p1p2p3_quirk = true;
+   dwc3_pdata.del_p1p2p3_quirk = true;
+   dwc3_pdata.del_phy_power_chg_quirk = true;
+   dwc3_pdata.lfps_filter_quirk = true;
+   dwc3_pdata.rx_detect_poll_quirk = true;
+
+   dwc3_pdata.tx_de_emphasis_quirk = true;
+   dwc3_pdata.tx_de_emphasis = 1;
+
+   /* FIXME these quirks should move when AMD NL taps out */
+   dwc3_pdata.disable_scramble_quirk = true;
+   dwc3_pdata.dis_u3_susphy_quirk = true;
+   dwc3_pdata.dis_u2_susphy_quirk = true;
+   }
+
ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res));
if (ret) {
dev_err(dev, "couldn't add resources to dwc3 device\n");
@@ -194,6 +216,7 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BSW), },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BYT), },
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_MRFLD), },
+   { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB), },
{  }/* Terminating Entry */
 };
 MODULE_DEVICE_TABLE(pci, dwc3_pci_id_table);
-- 
1.9.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 v4 18/20] PCI: Prevent xHCI driver from claiming AMD Nolan USB3 DRD device

2014-10-30 Thread Huang Rui
The AMD Nolan (NL) SoC contains a DesignWare USB3 Dual-Role Device that can
be operated either as a USB Host or a USB Device.  In the AMD NL platform,
this device ([1022:7912]) has a class code of PCI_CLASS_SERIAL_USB_XHCI
(0x0c0330), which means the xhci driver will claim it.

But the dwc3 driver is a more specific driver for this device, and we'd
prefer to use it instead of xhci.  To prevent xhci from claiming the
device, change the class code to 0x0c03fe, which the PCI r3.0 spec defines
as "USB device (not host controller)".  The dwc3 driver can then claim it
based on its Vendor and Device ID.

Suggested-by: Heikki Krogerus 
Acked-by: Bjorn Helgaas 
Cc: Jason Chang 
Signed-off-by: Huang Rui 
---
 drivers/pci/quirks.c | 20 
 1 file changed, 20 insertions(+)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 90acb32..ed6f89b 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -379,6 +379,26 @@ static void quirk_ati_exploding_mce(struct pci_dev *dev)
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS100,   
quirk_ati_exploding_mce);
 
 /*
+ * In the AMD NL platform, this device ([1022:7912]) has a class code of
+ * PCI_CLASS_SERIAL_USB_XHCI (0x0c0330), which means the xhci driver will
+ * claim it.
+ * But the dwc3 driver is a more specific driver for this device, and we'd
+ * prefer to use it instead of xhci. To prevent xhci from claiming the
+ * device, change the class code to 0x0c03fe, which the PCI r3.0 spec
+ * defines as "USB device (not host controller)". The dwc3 driver can then
+ * claim it based on its Vendor and Device ID.
+ */
+static void quirk_amd_nl_class(struct pci_dev *pdev)
+{
+   /*
+* Use 'USB Device' (0x0c03fe) instead of PCI header provided
+*/
+   pdev->class = 0x0c03fe;
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_NL_USB,
+   quirk_amd_nl_class);
+
+/*
  * Let's make the southbridge information explicit instead
  * of having to worry about people probing the ACPI areas,
  * for example.. (Yes, it happens, and if you read the wrong
-- 
1.9.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 v4 17/20] PCI: Add support for AMD Nolan USB3 DRD

2014-10-30 Thread Huang Rui
This patch adds PCI id for USB3 Dual-Role Device of AMD Nolan (NL) SoC.
It will be used for PCI quirks and DWC3 device driver.

Signed-off-by: Jason Chang 
Signed-off-by: Huang Rui 
Acked-by: Bjorn Helgaas 
---
 include/linux/pci_ids.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 1fa99a3..5decad7 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -562,6 +562,7 @@
 #define PCI_DEVICE_ID_AMD_8131_BRIDGE  0x7450
 #define PCI_DEVICE_ID_AMD_8131_APIC0x7451
 #define PCI_DEVICE_ID_AMD_8132_BRIDGE  0x7458
+#define PCI_DEVICE_ID_AMD_NL_USB   0x7912
 #define PCI_DEVICE_ID_AMD_CS5535_IDE0x208F
 #define PCI_DEVICE_ID_AMD_CS5536_ISA0x2090
 #define PCI_DEVICE_ID_AMD_CS5536_FLASH  0x2091
-- 
1.9.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 v4 20/20] usb: dwc3: make HIRD threshold configurable

2014-10-30 Thread Huang Rui
HIRD threshold should be configurable by different platforms.

>From DesignWare databook:
When HIRD_Threshold[4] is set to 1b1 and HIRD value is greater than or
equal to the value in HIRD_Threshold[3:0], dwc3 asserts output signals
utmi_l1_suspend_n to put PHY into Deep Low-Power mode in L1.

When HIRD_Threshold[4] is set to 1b0 or the HIRD value is less than
HIRD_Threshold[3:0], dwc3 asserts output signals utmi_sleep_n on L1.

Signed-off-by: Huang Rui 
---
 Documentation/devicetree/bindings/usb/dwc3.txt |  3 +++
 drivers/usb/dwc3/core.c| 17 +
 drivers/usb/dwc3/core.h|  6 ++
 drivers/usb/dwc3/gadget.c  |  6 +-
 drivers/usb/dwc3/platform_data.h   |  3 +++
 5 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index feaf2c8..5b99755 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -34,6 +34,9 @@ Optional properties:
LTSSM during USB3 Compliance mode.
  - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
  - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy.
+ - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal
+   utmi_l1_suspend_n, false when asserts utmi_sleep_n
+ - snps,hird-threshold: HIRD threshold
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index a28ed1c..f4172ab 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -729,6 +729,7 @@ static int dwc3_probe(struct platform_device *pdev)
struct dwc3 *dwc;
u8  lpm_nyet_threshold;
u8  tx_de_emphasis;
+   u8  hird_threshold;
 
int ret;
 
@@ -790,12 +791,22 @@ static int dwc3_probe(struct platform_device *pdev)
/* default to -3.5dB de-emphasis */
tx_de_emphasis = 1;
 
+   /*
+* defalut to assert utmi_sleep_n and use maximum allowed HIRD
+* threshold value of 0b1100
+*/
+   hird_threshold = 12;
+
if (node) {
dwc->maximum_speed = of_usb_get_maximum_speed(node);
dwc->has_lpm_erratum = of_property_read_bool(node,
"snps,has-lpm-erratum");
of_property_read_u8(node, "snps,lpm-nyet-threshold",
&lpm_nyet_threshold);
+   dwc->is_utmi_l1_suspend = of_property_read_bool(node,
+   "snps,is-utmi-l1-suspend");
+   of_property_read_u8(node, "snps,hird-threshold",
+   &hird_threshold);
 
dwc->needs_fifo_resize = of_property_read_bool(node,
"tx-fifo-resize");
@@ -831,6 +842,9 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
if (pdata->lpm_nyet_threshold)
lpm_nyet_threshold = pdata->lpm_nyet_threshold;
+   dwc->is_utmi_l1_suspend = pdata->is_utmi_l1_suspend;
+   if (pdata->hird_threshold)
+   hird_threshold = pdata->hird_threshold;
 
dwc->needs_fifo_resize = pdata->tx_fifo_resize;
dwc->dr_mode = pdata->dr_mode;
@@ -858,6 +872,9 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->lpm_nyet_threshold = lpm_nyet_threshold;
dwc->tx_de_emphasis = tx_de_emphasis;
 
+   dwc->hird_threshold = hird_threshold
+   | (dwc->is_utmi_l1_suspend << 4);
+
ret = dwc3_core_get_phy(dwc);
if (ret)
return ret;
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 8b6c308..2c90139 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -675,12 +675,16 @@ struct dwc3_scratchpad_array {
  * @test_mode: true when we're entering a USB test mode
  * @test_mode_nr: test feature selector
  * @lpm_nyet_threshold: LPM NYET response threshold
+ * @hird_threshold: HIRD threshold
  * @delayed_status: true when gadget driver asks for delayed status
  * @ep0_bounced: true when we used bounce buffer
  * @ep0_expect_in: true when we expect a DATA IN transfer
  * @has_hibernation: true when dwc3 was configured with Hibernation
  * @has_lpm_erratum: true when core was configured with LPM Erratum. Note that
  * there's now way for software to detect this in runtime.
+ * @is_utmi_l1_suspend: the core asserts output signal
+ * 0   - utmi_sleep_n
+ * 1   - utmi_l1_suspend_n
  * @is_selfpowered: true when we are selfpowered
  * @is_fpga: true when we are using the FPGA board
  * @needs_fifo_resize: not all users might want

[PATCH v4 16/20] usb: dwc3: add disable usb2 suspend phy quirk

2014-10-30 Thread Huang Rui
This patch adds disable usb2 suspend phy quirk, and some special platforms
can configure that if it is needed.

Signed-off-by: Huang Rui 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 1 +
 drivers/usb/dwc3/core.c| 7 +++
 drivers/usb/dwc3/core.h| 2 ++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 3720fca..feaf2c8 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -33,6 +33,7 @@ Optional properties:
  - snps,tx_de_emphasis: the value driven to the PHY is controlled by the
LTSSM during USB3 Compliance mode.
  - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
+ - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index fdc715a..a28ed1c 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -423,6 +423,10 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->revision > DWC3_REVISION_194A)
reg |= DWC3_GUSB2PHYCFG_SUSPHY;
 
+   /* FIXME will move FPGA flag when AMD NL taps out */
+   if (dwc->dis_u2_susphy_quirk && dwc->is_fpga)
+   reg &= ~DWC3_GUSB2PHYCFG_SUSPHY;
+
dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
 
mdelay(100);
@@ -815,6 +819,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,rx_detect_poll_quirk");
dwc->dis_u3_susphy_quirk = of_property_read_bool(node,
"snps,dis_u3_susphy_quirk");
+   dwc->dis_u2_susphy_quirk = of_property_read_bool(node,
+   "snps,dis_u2_susphy_quirk");
 
dwc->tx_de_emphasis_quirk = of_property_read_bool(node,
"snps,tx_de_emphasis_quirk");
@@ -838,6 +844,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->lfps_filter_quirk = pdata->lfps_filter_quirk;
dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk;
dwc->dis_u3_susphy_quirk = pdata->dis_u3_susphy_quirk;
+   dwc->dis_u2_susphy_quirk = pdata->dis_u2_susphy_quirk;
 
dwc->tx_de_emphasis_quirk = pdata->tx_de_emphasis_quirk;
if (pdata->tx_de_emphasis)
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index be793f7..8b6c308 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -698,6 +698,7 @@ struct dwc3_scratchpad_array {
  * @lfps_filter_quirk: set if we enable LFPS filter quirk
  * @rx_detect_poll_quirk: set if we enable rx_detect to polling LFPS quirk
  * @dis_u3_susphy_quirk: set if we disable usb3 suspend phy
+ * @dis_u2_susphy_quirk: set if we disable usb2 suspend phy
  * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk
  * @tx_de_emphasis: Tx de-emphasis value
  * 0   - -6dB de-emphasis
@@ -820,6 +821,7 @@ struct dwc3 {
unsignedlfps_filter_quirk:1;
unsignedrx_detect_poll_quirk:1;
unsigneddis_u3_susphy_quirk:1;
+   unsigneddis_u2_susphy_quirk:1;
 
unsignedtx_de_emphasis_quirk:1;
unsignedtx_de_emphasis:2;
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index 0f1d5ad..245300b 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -37,6 +37,7 @@ struct dwc3_platform_data {
unsigned lfps_filter_quirk:1;
unsigned rx_detect_poll_quirk:1;
unsigned dis_u3_susphy_quirk:1;
+   unsigned dis_u2_susphy_quirk:1;
 
unsigned tx_de_emphasis_quirk:1;
unsigned tx_de_emphasis:2;
-- 
1.9.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 v4 13/20] usb: dwc3: set SUSPHY bit for all cores

2014-10-30 Thread Huang Rui
It is recommended to set USB3 and USB2 SUSPHY bits to '1' after the core
initialization is completed above the dwc3 revision 1.94a.

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 drivers/usb/dwc3/core.c | 24 
 1 file changed, 24 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 11b0ab08..e02c3b0 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -374,6 +374,15 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
 
reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
 
+   /*
+* Above 1.94a, it is recommended to set DWC3_GUSB3PIPECTL_SUSPHY
+* to '0' during coreConsultant configuration. So default value
+* will be '0' when the core is reset. Application needs to set it
+* to '1' after the core initialization is completed.
+*/
+   if (dwc->revision > DWC3_REVISION_194A)
+   reg |= DWC3_GUSB3PIPECTL_SUSPHY;
+
if (dwc->u2ss_inp3_quirk)
reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
 
@@ -395,6 +404,21 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
+
+   reg = dwc3_readl(dwc->regs, DWC3_GUSB2PHYCFG(0));
+
+   /*
+* Above 1.94a, it is recommended to set DWC3_GUSB2PHYCFG_SUSPHY to
+* '0' during coreConsultant configuration. So default value will
+* be '0' when the core is reset. Application needs to set it to
+* '1' after the core initialization is completed.
+*/
+   if (dwc->revision > DWC3_REVISION_194A)
+   reg |= DWC3_GUSB2PHYCFG_SUSPHY;
+
+   dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
+
+   mdelay(100);
 }
 
 /**
-- 
1.9.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 v4 14/20] usb: dwc3: add Tx de-emphasis quirk

2014-10-30 Thread Huang Rui
This patch adds Tx de-emphasis quirk, and the Tx de-emphasis value is
configurable according to PIPE3 specification.

Value   Description
0   -6dB de-emphasis
1   -3.5dB de-emphasis
2   No de-emphasis
3   Reserved

It can be configured on DT or platform data.

Signed-off-by: Huang Rui 
---
 Documentation/devicetree/bindings/usb/dwc3.txt |  3 +++
 drivers/usb/dwc3/core.c| 17 +
 drivers/usb/dwc3/core.h| 11 +++
 drivers/usb/dwc3/platform_data.h   |  3 +++
 4 files changed, 34 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 38bac28..a9e54ae 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -29,6 +29,9 @@ Optional properties:
  - snps,lfps_filter_quirk: when set core will filter LFPS reception.
  - snps,rx_detect_poll_quirk: when set core will disable a 400us delay to start
Polling LFPS after RX.Detect.
+ - snps,tx_de_emphasis_quirk: when set core will set Tx de-emphasis value.
+ - snps,tx_de_emphasis: the value driven to the PHY is controlled by the
+   LTSSM during USB3 Compliance mode.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index e02c3b0..b55fa5b 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -401,6 +401,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->rx_detect_poll_quirk)
reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL;
 
+   if (dwc->tx_de_emphasis_quirk)
+   reg |= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc->tx_de_emphasis);
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -717,6 +720,7 @@ static int dwc3_probe(struct platform_device *pdev)
struct resource *res;
struct dwc3 *dwc;
u8  lpm_nyet_threshold;
+   u8  tx_de_emphasis;
 
int ret;
 
@@ -775,6 +779,9 @@ static int dwc3_probe(struct platform_device *pdev)
/* default to highest possible threshold */
lpm_nyet_threshold = 0xff;
 
+   /* default to -3.5dB de-emphasis */
+   tx_de_emphasis = 1;
+
if (node) {
dwc->maximum_speed = of_usb_get_maximum_speed(node);
dwc->has_lpm_erratum = of_property_read_bool(node,
@@ -802,6 +809,11 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,lfps_filter_quirk");
dwc->rx_detect_poll_quirk = of_property_read_bool(node,
"snps,rx_detect_poll_quirk");
+
+   dwc->tx_de_emphasis_quirk = of_property_read_bool(node,
+   "snps,tx_de_emphasis_quirk");
+   of_property_read_u8(node, "snps,tx_de_emphasis",
+   &tx_de_emphasis);
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -819,6 +831,10 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk;
dwc->lfps_filter_quirk = pdata->lfps_filter_quirk;
dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk;
+
+   dwc->tx_de_emphasis_quirk = pdata->tx_de_emphasis_quirk;
+   if (pdata->tx_de_emphasis)
+   tx_de_emphasis = pdata->tx_de_emphasis;
}
 
/* default to superspeed if no maximum_speed passed */
@@ -826,6 +842,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->maximum_speed = USB_SPEED_SUPER;
 
dwc->lpm_nyet_threshold = lpm_nyet_threshold;
+   dwc->tx_de_emphasis = tx_de_emphasis;
 
ret = dwc3_core_get_phy(dwc);
if (ret)
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index eeef976..469ee13 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -185,6 +185,8 @@
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
 #define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9)
 #define DWC3_GUSB3PIPECTL_RX_DETOPOLL  (1 << 8)
+#define DWC3_GUSB3PIPECTL_TX_DEEPH_MASKDWC3_GUSB3PIPECTL_TX_DEEPH(3)
+#define DWC3_GUSB3PIPECTL_TX_DEEPH(n)  ((n) << 1)
 
 /* Global TX Fifo Size Register */
 #define DWC3_GTXFIFOSIZ_TXFDEF(n)  ((n) & 0x)
@@ -695,6 +697,12 @@ struct dwc3_scratchpad_array {
  * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk
  * @lfps_filter_quirk: set if we enable LFPS filter quirk
  * @rx_detect_poll_quirk: set if we enable rx_detect to polling LFPS quirk
+ * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk
+ * @tx_de_emphasis: Tx de-emphasis v

[PATCH v4 15/20] usb: dwc3: add disable usb3 suspend phy quirk

2014-10-30 Thread Huang Rui
This patch adds disable usb3 suspend phy quirk, and some special platforms
can configure that if it is needed.

Signed-off-by: Huang Rui 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 1 +
 drivers/usb/dwc3/core.c| 7 +++
 drivers/usb/dwc3/core.h| 2 ++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index a9e54ae..3720fca 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -32,6 +32,7 @@ Optional properties:
  - snps,tx_de_emphasis_quirk: when set core will set Tx de-emphasis value.
  - snps,tx_de_emphasis: the value driven to the PHY is controlled by the
LTSSM during USB3 Compliance mode.
+ - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index b55fa5b..fdc715a 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -404,6 +404,10 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->tx_de_emphasis_quirk)
reg |= DWC3_GUSB3PIPECTL_TX_DEEPH(dwc->tx_de_emphasis);
 
+   /* FIXME will move FPGA flag when AMD NL taps out */
+   if (dwc->dis_u3_susphy_quirk && dwc->is_fpga)
+   reg &= ~DWC3_GUSB3PIPECTL_SUSPHY;
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -809,6 +813,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,lfps_filter_quirk");
dwc->rx_detect_poll_quirk = of_property_read_bool(node,
"snps,rx_detect_poll_quirk");
+   dwc->dis_u3_susphy_quirk = of_property_read_bool(node,
+   "snps,dis_u3_susphy_quirk");
 
dwc->tx_de_emphasis_quirk = of_property_read_bool(node,
"snps,tx_de_emphasis_quirk");
@@ -831,6 +837,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk;
dwc->lfps_filter_quirk = pdata->lfps_filter_quirk;
dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk;
+   dwc->dis_u3_susphy_quirk = pdata->dis_u3_susphy_quirk;
 
dwc->tx_de_emphasis_quirk = pdata->tx_de_emphasis_quirk;
if (pdata->tx_de_emphasis)
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 469ee13..be793f7 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -697,6 +697,7 @@ struct dwc3_scratchpad_array {
  * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk
  * @lfps_filter_quirk: set if we enable LFPS filter quirk
  * @rx_detect_poll_quirk: set if we enable rx_detect to polling LFPS quirk
+ * @dis_u3_susphy_quirk: set if we disable usb3 suspend phy
  * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk
  * @tx_de_emphasis: Tx de-emphasis value
  * 0   - -6dB de-emphasis
@@ -818,6 +819,7 @@ struct dwc3 {
unsigneddel_phy_power_chg_quirk:1;
unsignedlfps_filter_quirk:1;
unsignedrx_detect_poll_quirk:1;
+   unsigneddis_u3_susphy_quirk:1;
 
unsignedtx_de_emphasis_quirk:1;
unsignedtx_de_emphasis:2;
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index e1ab900..0f1d5ad 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -36,6 +36,7 @@ struct dwc3_platform_data {
unsigned del_phy_power_chg_quirk:1;
unsigned lfps_filter_quirk:1;
unsigned rx_detect_poll_quirk:1;
+   unsigned dis_u3_susphy_quirk:1;
 
unsigned tx_de_emphasis_quirk:1;
unsigned tx_de_emphasis:2;
-- 
1.9.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 v4 10/20] usb: dwc3: add delay phy power change quirk

2014-10-30 Thread Huang Rui
This patch adds delay PHY power change from P0 to P1/P2/P3 when link state
changing from U0 to U1/U2/U3 respectively, and some special platforms can
configure that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 2 ++
 drivers/usb/dwc3/core.c| 6 ++
 drivers/usb/dwc3/core.h| 3 +++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 12 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index a406bb5..216cc35 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -24,6 +24,8 @@ Optional properties:
P1/P2/P3 transition sequence.
  - snps,del_p1p2p3_quirk: when set core will delay P1/P2/P3 until a certain
amount of 8B10B errors occur.
+ - snps,del_phy_power_chg_quirk: when set core will delay PHY power change
+   from P0 to P1/P2/P3.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 4429de7..deceb7c 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -383,6 +383,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->del_p1p2p3_quirk)
reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN;
 
+   if (dwc->del_phy_power_chg_quirk)
+   reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE;
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -763,6 +766,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,req_p1p2p3_quirk");
dwc->del_p1p2p3_quirk = of_property_read_bool(node,
"snps,del_p1p2p3_quirk");
+   dwc->del_phy_power_chg_quirk = of_property_read_bool(node,
+   "snps,del_phy_power_chg_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -777,6 +782,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk;
dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk;
dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk;
+   dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 750e473..176f3f1 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -181,6 +181,7 @@
 #define DWC3_GUSB3PIPECTL_DEP1P2P3(n)  ((n) << 19)
 #define DWC3_GUSB3PIPECTL_DEP1P2P3_MASKDWC3_GUSB3PIPECTL_DEP1P2P3(7)
 #define DWC3_GUSB3PIPECTL_DEP1P2P3_EN  DWC3_GUSB3PIPECTL_DEP1P2P3(1)
+#define DWC3_GUSB3PIPECTL_DEPOCHANGE   (1 << 18)
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
 
 /* Global TX Fifo Size Register */
@@ -689,6 +690,7 @@ struct dwc3_scratchpad_array {
  * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
  * @req_p1p2p3_quirk: set if we enable request P1/P2/P3 quirk
  * @del_p1p2p3_quirk: set if we enable delay P1/P2/P3 quirk
+ * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -801,6 +803,7 @@ struct dwc3 {
unsignedu2ss_inp3_quirk:1;
unsignedreq_p1p2p3_quirk:1;
unsigneddel_p1p2p3_quirk:1;
+   unsigneddel_phy_power_chg_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index a421cec..ae67151 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -33,4 +33,5 @@ struct dwc3_platform_data {
unsigned u2ss_inp3_quirk:1;
unsigned req_p1p2p3_quirk:1;
unsigned del_p1p2p3_quirk:1;
+   unsigned del_phy_power_chg_quirk:1;
 };
-- 
1.9.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 v4 07/20] usb: dwc3: add P3 in U2 SS Inactive quirk

2014-10-30 Thread Huang Rui
This patch adds P3 in U2 SS Inactive quirk, and some special platforms can
configure that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt |  1 +
 drivers/usb/dwc3/core.c| 23 +++
 drivers/usb/dwc3/core.h|  3 +++
 drivers/usb/dwc3/platform_data.h   |  1 +
 4 files changed, 28 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 79ed37c..f714357 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -19,6 +19,7 @@ Optional properties:
  - snps,has-lpm-erratum: true when DWC3 was configured with LPM Erratum enabled
  - snps,lpm-nyet-threshold: LPM NYET threshold
  - snps,u2exit_lfps_quirk: set if we want to enable U2Exit LFPS quirk
+ - snps,u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 6d1f09f..0a935cb 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -365,6 +365,24 @@ static void dwc3_cache_hwparams(struct dwc3 *dwc)
 }
 
 /**
+ * dwc3_phy_setup - Configure USB PHY Interface of DWC3 Core
+ * @dwc: Pointer to our controller context structure
+ */
+static void dwc3_phy_setup(struct dwc3 *dwc)
+{
+   u32 reg;
+
+   reg = dwc3_readl(dwc->regs, DWC3_GUSB3PIPECTL(0));
+
+   if (dwc->u2ss_inp3_quirk)
+   reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
+
+   dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
+
+   mdelay(100);
+}
+
+/**
  * dwc3_core_init - Low-level initialization of DWC3 Core
  * @dwc: Pointer to our controller context structure
  *
@@ -486,6 +504,8 @@ static int dwc3_core_init(struct dwc3 *dwc)
 
dwc3_writel(dwc->regs, DWC3_GCTL, reg);
 
+   dwc3_phy_setup(dwc);
+
ret = dwc3_alloc_scratch_buffers(dwc);
if (ret)
goto err1;
@@ -731,6 +751,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,disable_scramble_quirk");
dwc->u2exit_lfps_quirk = of_property_read_bool(node,
"snps,u2exit_lfps_quirk");
+   dwc->u2ss_inp3_quirk = of_property_read_bool(node,
+   "snps,u2ss_inp3_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -742,6 +764,7 @@ static int dwc3_probe(struct platform_device *pdev)
 
dwc->disable_scramble_quirk = pdata->disable_scramble_quirk;
dwc->u2exit_lfps_quirk = pdata->u2exit_lfps_quirk;
+   dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 45130a1..3843511 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -176,6 +176,7 @@
 
 /* Global USB3 PIPE Control Register */
 #define DWC3_GUSB3PIPECTL_PHYSOFTRST   (1 << 31)
+#define DWC3_GUSB3PIPECTL_U2SSINP3OK   (1 << 29)
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
 
 /* Global TX Fifo Size Register */
@@ -681,6 +682,7 @@ struct dwc3_scratchpad_array {
  * @three_stage_setup: set if we perform a three phase setup
  * @disable_scramble_quirk: set if we enable the disable scramble quirk
  * @u2exit_lfps_quirk: set if we enable U2Exit LFPS quirk
+ * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -790,6 +792,7 @@ struct dwc3 {
 
unsigneddisable_scramble_quirk:1;
unsignedu2exit_lfps_quirk:1;
+   unsignedu2ss_inp3_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index 3f21591..cf92c81 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -30,4 +30,5 @@ struct dwc3_platform_data {
unsigned disable_scramble_quirk:1;
unsigned has_lpm_erratum:1;
unsigned u2exit_lfps_quirk:1;
+   unsigned u2ss_inp3_quirk:1;
 };
-- 
1.9.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 v4 11/20] usb: dwc3: add LFPS filter quirk

2014-10-30 Thread Huang Rui
This patch adds LFPS filter quirk, and some special platforms can configure
that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 1 +
 drivers/usb/dwc3/core.c| 6 ++
 drivers/usb/dwc3/core.h| 3 +++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 216cc35..0647100 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -26,6 +26,7 @@ Optional properties:
amount of 8B10B errors occur.
  - snps,del_phy_power_chg_quirk: when set core will delay PHY power change
from P0 to P1/P2/P3.
+ - snps,lfps_filter_quirk: when set core will filter LFPS reception.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index deceb7c..ae7ff8f 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -386,6 +386,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->del_phy_power_chg_quirk)
reg |= DWC3_GUSB3PIPECTL_DEPOCHANGE;
 
+   if (dwc->lfps_filter_quirk)
+   reg |= DWC3_GUSB3PIPECTL_LFPSFILT;
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -768,6 +771,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,del_p1p2p3_quirk");
dwc->del_phy_power_chg_quirk = of_property_read_bool(node,
"snps,del_phy_power_chg_quirk");
+   dwc->lfps_filter_quirk = of_property_read_bool(node,
+   "snps,lfps_filter_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -783,6 +788,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk;
dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk;
dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk;
+   dwc->lfps_filter_quirk = pdata->lfps_filter_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 176f3f1..cf9dd73 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -183,6 +183,7 @@
 #define DWC3_GUSB3PIPECTL_DEP1P2P3_EN  DWC3_GUSB3PIPECTL_DEP1P2P3(1)
 #define DWC3_GUSB3PIPECTL_DEPOCHANGE   (1 << 18)
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
+#define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9)
 
 /* Global TX Fifo Size Register */
 #define DWC3_GTXFIFOSIZ_TXFDEF(n)  ((n) & 0x)
@@ -691,6 +692,7 @@ struct dwc3_scratchpad_array {
  * @req_p1p2p3_quirk: set if we enable request P1/P2/P3 quirk
  * @del_p1p2p3_quirk: set if we enable delay P1/P2/P3 quirk
  * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk
+ * @lfps_filter_quirk: set if we enable LFPS filter quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -804,6 +806,7 @@ struct dwc3 {
unsignedreq_p1p2p3_quirk:1;
unsigneddel_p1p2p3_quirk:1;
unsigneddel_phy_power_chg_quirk:1;
+   unsignedlfps_filter_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index ae67151..dad0211 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -34,4 +34,5 @@ struct dwc3_platform_data {
unsigned req_p1p2p3_quirk:1;
unsigned del_p1p2p3_quirk:1;
unsigned del_phy_power_chg_quirk:1;
+   unsigned lfps_filter_quirk:1;
 };
-- 
1.9.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 v4 12/20] usb: dwc3: add rx_detect to polling LFPS quirk

2014-10-30 Thread Huang Rui
This patch adds RX_DETECT to Polling.LFPS control quirk, and some special
platforms can configure that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 2 ++
 drivers/usb/dwc3/core.c| 6 ++
 drivers/usb/dwc3/core.h| 3 +++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 12 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 0647100..38bac28 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -27,6 +27,8 @@ Optional properties:
  - snps,del_phy_power_chg_quirk: when set core will delay PHY power change
from P0 to P1/P2/P3.
  - snps,lfps_filter_quirk: when set core will filter LFPS reception.
+ - snps,rx_detect_poll_quirk: when set core will disable a 400us delay to start
+   Polling LFPS after RX.Detect.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index ae7ff8f..11b0ab08 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -389,6 +389,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->lfps_filter_quirk)
reg |= DWC3_GUSB3PIPECTL_LFPSFILT;
 
+   if (dwc->rx_detect_poll_quirk)
+   reg |= DWC3_GUSB3PIPECTL_RX_DETOPOLL;
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -773,6 +776,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,del_phy_power_chg_quirk");
dwc->lfps_filter_quirk = of_property_read_bool(node,
"snps,lfps_filter_quirk");
+   dwc->rx_detect_poll_quirk = of_property_read_bool(node,
+   "snps,rx_detect_poll_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -789,6 +794,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk;
dwc->del_phy_power_chg_quirk = pdata->del_phy_power_chg_quirk;
dwc->lfps_filter_quirk = pdata->lfps_filter_quirk;
+   dwc->rx_detect_poll_quirk = pdata->rx_detect_poll_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index cf9dd73..eeef976 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -184,6 +184,7 @@
 #define DWC3_GUSB3PIPECTL_DEPOCHANGE   (1 << 18)
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
 #define DWC3_GUSB3PIPECTL_LFPSFILT (1 << 9)
+#define DWC3_GUSB3PIPECTL_RX_DETOPOLL  (1 << 8)
 
 /* Global TX Fifo Size Register */
 #define DWC3_GTXFIFOSIZ_TXFDEF(n)  ((n) & 0x)
@@ -693,6 +694,7 @@ struct dwc3_scratchpad_array {
  * @del_p1p2p3_quirk: set if we enable delay P1/P2/P3 quirk
  * @del_phy_power_chg_quirk: set if we enable delay phy power change quirk
  * @lfps_filter_quirk: set if we enable LFPS filter quirk
+ * @rx_detect_poll_quirk: set if we enable rx_detect to polling LFPS quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -807,6 +809,7 @@ struct dwc3 {
unsigneddel_p1p2p3_quirk:1;
unsigneddel_phy_power_chg_quirk:1;
unsignedlfps_filter_quirk:1;
+   unsignedrx_detect_poll_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index dad0211..4a0f06b 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -35,4 +35,5 @@ struct dwc3_platform_data {
unsigned del_p1p2p3_quirk:1;
unsigned del_phy_power_chg_quirk:1;
unsigned lfps_filter_quirk:1;
+   unsigned rx_detect_poll_quirk:1;
 };
-- 
1.9.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 v4 09/20] usb: dwc3: add delay P1/P2/P3 quirk

2014-10-30 Thread Huang Rui
This patch adds delay P0 to P1/P2/P3 quirk for U2/U2/U3, and some special
platforms can configure that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 2 ++
 drivers/usb/dwc3/core.c| 6 ++
 drivers/usb/dwc3/core.h| 5 +
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 14 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 9de11fd..a406bb5 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -22,6 +22,8 @@ Optional properties:
  - snps,u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
  - snps,req_p1p2p3_quirk: when set, the core will always request for
P1/P2/P3 transition sequence.
+ - snps,del_p1p2p3_quirk: when set core will delay P1/P2/P3 until a certain
+   amount of 8B10B errors occur.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index e951984..4429de7 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -380,6 +380,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->req_p1p2p3_quirk)
reg |= DWC3_GUSB3PIPECTL_REQP1P2P3;
 
+   if (dwc->del_p1p2p3_quirk)
+   reg |= DWC3_GUSB3PIPECTL_DEP1P2P3_EN;
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -758,6 +761,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,u2ss_inp3_quirk");
dwc->req_p1p2p3_quirk = of_property_read_bool(node,
"snps,req_p1p2p3_quirk");
+   dwc->del_p1p2p3_quirk = of_property_read_bool(node,
+   "snps,del_p1p2p3_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -771,6 +776,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->u2exit_lfps_quirk = pdata->u2exit_lfps_quirk;
dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk;
dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk;
+   dwc->del_p1p2p3_quirk = pdata->del_p1p2p3_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index cbb8593..750e473 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -178,6 +178,9 @@
 #define DWC3_GUSB3PIPECTL_PHYSOFTRST   (1 << 31)
 #define DWC3_GUSB3PIPECTL_U2SSINP3OK   (1 << 29)
 #define DWC3_GUSB3PIPECTL_REQP1P2P3(1 << 24)
+#define DWC3_GUSB3PIPECTL_DEP1P2P3(n)  ((n) << 19)
+#define DWC3_GUSB3PIPECTL_DEP1P2P3_MASKDWC3_GUSB3PIPECTL_DEP1P2P3(7)
+#define DWC3_GUSB3PIPECTL_DEP1P2P3_EN  DWC3_GUSB3PIPECTL_DEP1P2P3(1)
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
 
 /* Global TX Fifo Size Register */
@@ -685,6 +688,7 @@ struct dwc3_scratchpad_array {
  * @u2exit_lfps_quirk: set if we enable U2Exit LFPS quirk
  * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
  * @req_p1p2p3_quirk: set if we enable request P1/P2/P3 quirk
+ * @del_p1p2p3_quirk: set if we enable delay P1/P2/P3 quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -796,6 +800,7 @@ struct dwc3 {
unsignedu2exit_lfps_quirk:1;
unsignedu2ss_inp3_quirk:1;
unsignedreq_p1p2p3_quirk:1;
+   unsigneddel_p1p2p3_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index d3e6ec2..a421cec 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -32,4 +32,5 @@ struct dwc3_platform_data {
unsigned u2exit_lfps_quirk:1;
unsigned u2ss_inp3_quirk:1;
unsigned req_p1p2p3_quirk:1;
+   unsigned del_p1p2p3_quirk:1;
 };
-- 
1.9.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 v4 08/20] usb: dwc3: add request P1/P2/P3 quirk

2014-10-30 Thread Huang Rui
This patch adds request P1/P2/P3 quirk for U2/U2/U3, and some special
platforms can configure that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 2 ++
 drivers/usb/dwc3/core.c| 6 ++
 drivers/usb/dwc3/core.h| 3 +++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 12 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index f714357..9de11fd 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -20,6 +20,8 @@ Optional properties:
  - snps,lpm-nyet-threshold: LPM NYET threshold
  - snps,u2exit_lfps_quirk: set if we want to enable U2Exit LFPS quirk
  - snps,u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
+ - snps,req_p1p2p3_quirk: when set, the core will always request for
+   P1/P2/P3 transition sequence.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 0a935cb..e951984 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -377,6 +377,9 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
if (dwc->u2ss_inp3_quirk)
reg |= DWC3_GUSB3PIPECTL_U2SSINP3OK;
 
+   if (dwc->req_p1p2p3_quirk)
+   reg |= DWC3_GUSB3PIPECTL_REQP1P2P3;
+
dwc3_writel(dwc->regs, DWC3_GUSB3PIPECTL(0), reg);
 
mdelay(100);
@@ -753,6 +756,8 @@ static int dwc3_probe(struct platform_device *pdev)
"snps,u2exit_lfps_quirk");
dwc->u2ss_inp3_quirk = of_property_read_bool(node,
"snps,u2ss_inp3_quirk");
+   dwc->req_p1p2p3_quirk = of_property_read_bool(node,
+   "snps,req_p1p2p3_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -765,6 +770,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->disable_scramble_quirk = pdata->disable_scramble_quirk;
dwc->u2exit_lfps_quirk = pdata->u2exit_lfps_quirk;
dwc->u2ss_inp3_quirk = pdata->u2ss_inp3_quirk;
+   dwc->req_p1p2p3_quirk = pdata->req_p1p2p3_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 3843511..cbb8593 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -177,6 +177,7 @@
 /* Global USB3 PIPE Control Register */
 #define DWC3_GUSB3PIPECTL_PHYSOFTRST   (1 << 31)
 #define DWC3_GUSB3PIPECTL_U2SSINP3OK   (1 << 29)
+#define DWC3_GUSB3PIPECTL_REQP1P2P3(1 << 24)
 #define DWC3_GUSB3PIPECTL_SUSPHY   (1 << 17)
 
 /* Global TX Fifo Size Register */
@@ -683,6 +684,7 @@ struct dwc3_scratchpad_array {
  * @disable_scramble_quirk: set if we enable the disable scramble quirk
  * @u2exit_lfps_quirk: set if we enable U2Exit LFPS quirk
  * @u2ss_inp3_quirk: set if we enable P3 OK for U2/SS Inactive quirk
+ * @req_p1p2p3_quirk: set if we enable request P1/P2/P3 quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -793,6 +795,7 @@ struct dwc3 {
unsigneddisable_scramble_quirk:1;
unsignedu2exit_lfps_quirk:1;
unsignedu2ss_inp3_quirk:1;
+   unsignedreq_p1p2p3_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index cf92c81..d3e6ec2 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -31,4 +31,5 @@ struct dwc3_platform_data {
unsigned has_lpm_erratum:1;
unsigned u2exit_lfps_quirk:1;
unsigned u2ss_inp3_quirk:1;
+   unsigned req_p1p2p3_quirk:1;
 };
-- 
1.9.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 v4 05/20] usb: dwc3: add lpm erratum support

2014-10-30 Thread Huang Rui
When parameter DWC_USB3_LPM_ERRATA_ENABLE is enabled in Advanced
Configuration of coreConsultant, support of xHCI BESL Errata Dated
10/19/2011 is enabled in host mode. In device mode it adds the capability
to send NYET response threshold based on the BESL value received in the LPM
token, and the threshold is configurable for each SoC platform.

This patch adds an entry that soc platform is able to define the lpm
capacity with their own device tree or bus glue layer.

[ ba...@ti.com : added devicetree documentation, spelled threshold
completely, made sure threshold is only applied to
proper core revisions. ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt |  2 ++
 drivers/usb/dwc3/core.c| 16 +++-
 drivers/usb/dwc3/core.h| 26 +-
 drivers/usb/dwc3/gadget.c  | 13 +
 drivers/usb/dwc3/platform_data.h   |  3 +++
 5 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 8ec2256..2b0c1f2 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -16,6 +16,8 @@ Optional properties:
  - tx-fifo-resize: determines if the FIFO *has* to be reallocated.
  - snps,disable_scramble_quirk: true when SW should disable data scrambling.
Only really useful for FPGA builds.
+ - snps,has-lpm-erratum: true when DWC3 was configured with LPM Erratum enabled
+ - snps,lpm-nyet-threshold: LPM NYET threshold
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index fae095f..2ac96e4 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -654,6 +654,7 @@ static int dwc3_probe(struct platform_device *pdev)
struct device_node  *node = dev->of_node;
struct resource *res;
struct dwc3 *dwc;
+   u8  lpm_nyet_threshold;
 
int ret;
 
@@ -709,16 +710,27 @@ static int dwc3_probe(struct platform_device *pdev)
 */
res->start -= DWC3_GLOBALS_REGS_START;
 
+   /* default to highest possible threshold */
+   lpm_nyet_threshold = 0xff;
+
if (node) {
dwc->maximum_speed = of_usb_get_maximum_speed(node);
+   dwc->has_lpm_erratum = of_property_read_bool(node,
+   "snps,has-lpm-erratum");
+   of_property_read_u8(node, "snps,lpm-nyet-threshold",
+   &lpm_nyet_threshold);
 
-   dwc->needs_fifo_resize = of_property_read_bool(node, 
"tx-fifo-resize");
+   dwc->needs_fifo_resize = of_property_read_bool(node,
+   "tx-fifo-resize");
dwc->dr_mode = of_usb_get_dr_mode(node);
 
dwc->disable_scramble_quirk = of_property_read_bool(node,
"snps,disable_scramble_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
+   dwc->has_lpm_erratum = pdata->has_lpm_erratum;
+   if (pdata->lpm_nyet_threshold)
+   lpm_nyet_threshold = pdata->lpm_nyet_threshold;
 
dwc->needs_fifo_resize = pdata->tx_fifo_resize;
dwc->dr_mode = pdata->dr_mode;
@@ -730,6 +742,8 @@ static int dwc3_probe(struct platform_device *pdev)
if (dwc->maximum_speed == USB_SPEED_UNKNOWN)
dwc->maximum_speed = USB_SPEED_SUPER;
 
+   dwc->lpm_nyet_threshold = lpm_nyet_threshold;
+
ret = dwc3_core_get_phy(dwc);
if (ret)
return ret;
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 56bada6..34f1e08 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -246,16 +246,19 @@
 #define DWC3_DCTL_TRGTULST_SS_INACT(DWC3_DCTL_TRGTULST(6))
 
 /* These apply for core versions 1.94a and later */
-#define DWC3_DCTL_KEEP_CONNECT (1 << 19)
-#define DWC3_DCTL_L1_HIBER_EN  (1 << 18)
-#define DWC3_DCTL_CRS  (1 << 17)
-#define DWC3_DCTL_CSS  (1 << 16)
+#define DWC3_DCTL_LPM_ERRATA_MASK  DWC3_DCTL_LPM_ERRATA(0xf)
+#define DWC3_DCTL_LPM_ERRATA(n)((n) << 20)
 
-#define DWC3_DCTL_INITU2ENA(1 << 12)
-#define DWC3_DCTL_ACCEPTU2ENA  (1 << 11)
-#define DWC3_DCTL_INITU1ENA(1 << 10)
-#define DWC3_DCTL_ACCEPTU1ENA  (1 << 9)
-#define DWC3_DCTL_TSTCTRL_MASK (0xf << 1)
+#define DWC3_DCTL_KEEP_CONNECT (1 << 19)
+#define DWC3_DCTL_L1_HIBER_EN  (1 << 18)
+#define DWC3_DCTL_CRS  (1 << 17)
+#define DWC3_DCTL_CSS  (1 << 16)
+
+#define DWC3_DCTL_INITU2ENA(1 << 12)
+#define DWC3_DCTL_ACCEPTU2ENA  (1 << 11)
+#define DWC3_D

[PATCH v4 06/20] usb: dwc3: add U2Exit LFPS quirk

2014-10-30 Thread Huang Rui
This patch adds U2Exit LFPS quirk, and some special platforms can configure
that if it is needed.

[ ba...@ti.com : added DeviceTree binding documentation ]

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt | 1 +
 drivers/usb/dwc3/core.c| 6 ++
 drivers/usb/dwc3/core.h| 3 +++
 drivers/usb/dwc3/platform_data.h   | 1 +
 4 files changed, 11 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 2b0c1f2..79ed37c 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -18,6 +18,7 @@ Optional properties:
Only really useful for FPGA builds.
  - snps,has-lpm-erratum: true when DWC3 was configured with LPM Erratum enabled
  - snps,lpm-nyet-threshold: LPM NYET threshold
+ - snps,u2exit_lfps_quirk: set if we want to enable U2Exit LFPS quirk
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 2ac96e4..6d1f09f 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -470,6 +470,9 @@ static int dwc3_core_init(struct dwc3 *dwc)
else
reg &= ~DWC3_GCTL_DISSCRAMBLE;
 
+   if (dwc->u2exit_lfps_quirk)
+   reg |= DWC3_GCTL_U2EXIT_LFPS;
+
/*
 * WORKAROUND: DWC3 revisions <1.90a have a bug
 * where the device can fail to connect at SuperSpeed
@@ -726,6 +729,8 @@ static int dwc3_probe(struct platform_device *pdev)
 
dwc->disable_scramble_quirk = of_property_read_bool(node,
"snps,disable_scramble_quirk");
+   dwc->u2exit_lfps_quirk = of_property_read_bool(node,
+   "snps,u2exit_lfps_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
@@ -736,6 +741,7 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->dr_mode = pdata->dr_mode;
 
dwc->disable_scramble_quirk = pdata->disable_scramble_quirk;
+   dwc->u2exit_lfps_quirk = pdata->u2exit_lfps_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 34f1e08..45130a1 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -166,6 +166,7 @@
 #define DWC3_GCTL_SCALEDOWN(n) ((n) << 4)
 #define DWC3_GCTL_SCALEDOWN_MASK   DWC3_GCTL_SCALEDOWN(3)
 #define DWC3_GCTL_DISSCRAMBLE  (1 << 3)
+#define DWC3_GCTL_U2EXIT_LFPS  (1 << 2)
 #define DWC3_GCTL_GBLHIBERNATIONEN (1 << 1)
 #define DWC3_GCTL_DSBLCLKGTNG  (1 << 0)
 
@@ -679,6 +680,7 @@ struct dwc3_scratchpad_array {
  * @start_config_issued: true when StartConfig command has been issued
  * @three_stage_setup: set if we perform a three phase setup
  * @disable_scramble_quirk: set if we enable the disable scramble quirk
+ * @u2exit_lfps_quirk: set if we enable U2Exit LFPS quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -787,6 +789,7 @@ struct dwc3 {
unsignedthree_stage_setup:1;
 
unsigneddisable_scramble_quirk:1;
+   unsignedu2exit_lfps_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index e128308..3f21591 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -29,4 +29,5 @@ struct dwc3_platform_data {
 
unsigned disable_scramble_quirk:1;
unsigned has_lpm_erratum:1;
+   unsigned u2exit_lfps_quirk:1;
 };
-- 
1.9.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 v4 01/20] usb: dwc3: enable hibernation if to be supported

2014-10-30 Thread Huang Rui
It enables hibernation if the function is set in coreConsultant.

Suggested-by: Felipe Balbi 
Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 drivers/usb/dwc3/core.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index fa396fc..5a47482 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -447,8 +447,14 @@ static int dwc3_core_init(struct dwc3 *dwc)
reg &= ~DWC3_GCTL_DSBLCLKGTNG;
break;
case DWC3_GHWPARAMS1_EN_PWROPT_HIB:
-   /* enable hibernation here */
dwc->nr_scratch = DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(hwparams4);
+   /*
+* Enable hibernation here.
+*
+* Enabling this bit so that host-mode hibernation will
+* work, device-mode hibernation is not implemented yet.
+*/
+   reg |= DWC3_GCTL_GBLHIBERNATIONEN;
break;
default:
dev_dbg(dwc->dev, "No power optimization available\n");
-- 
1.9.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 v4 04/20] usb: dwc3: add disable scramble quirk

2014-10-30 Thread Huang Rui
This patch adds disable scramble quirk, and it only needs to be enabled at
FPGA board on some vendor platforms.

[Note] In DesignWare databook, HW designer describes:
disscramble = disable scramble

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 Documentation/devicetree/bindings/usb/dwc3.txt |  2 ++
 drivers/usb/dwc3/core.c| 11 ++-
 drivers/usb/dwc3/core.h|  3 +++
 drivers/usb/dwc3/platform_data.h   |  2 ++
 4 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
b/Documentation/devicetree/bindings/usb/dwc3.txt
index 471366d..8ec2256 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -14,6 +14,8 @@ Optional properties:
  - phys: from the *Generic PHY* bindings
  - phy-names: from the *Generic PHY* bindings
  - tx-fifo-resize: determines if the FIFO *has* to be reallocated.
+ - snps,disable_scramble_quirk: true when SW should disable data scrambling.
+   Only really useful for FPGA builds.
 
 This is usually a subnode to DWC3 glue to which it is connected.
 
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index c8ae098..fae095f 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -422,7 +422,6 @@ static int dwc3_core_init(struct dwc3 *dwc)
 
reg = dwc3_readl(dwc->regs, DWC3_GCTL);
reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
-   reg &= ~DWC3_GCTL_DISSCRAMBLE;
 
switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams1)) {
case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
@@ -466,6 +465,11 @@ static int dwc3_core_init(struct dwc3 *dwc)
dwc->is_fpga = true;
}
 
+   if (dwc->disable_scramble_quirk && dwc->is_fpga)
+   reg |= DWC3_GCTL_DISSCRAMBLE;
+   else
+   reg &= ~DWC3_GCTL_DISSCRAMBLE;
+
/*
 * WORKAROUND: DWC3 revisions <1.90a have a bug
 * where the device can fail to connect at SuperSpeed
@@ -710,11 +714,16 @@ static int dwc3_probe(struct platform_device *pdev)
 
dwc->needs_fifo_resize = of_property_read_bool(node, 
"tx-fifo-resize");
dwc->dr_mode = of_usb_get_dr_mode(node);
+
+   dwc->disable_scramble_quirk = of_property_read_bool(node,
+   "snps,disable_scramble_quirk");
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
 
dwc->needs_fifo_resize = pdata->tx_fifo_resize;
dwc->dr_mode = pdata->dr_mode;
+
+   dwc->disable_scramble_quirk = pdata->disable_scramble_quirk;
}
 
/* default to superspeed if no maximum_speed passed */
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index f6ee623..56bada6 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -672,6 +672,7 @@ struct dwc3_scratchpad_array {
  * @setup_packet_pending: true when there's a Setup Packet in FIFO. Workaround
  * @start_config_issued: true when StartConfig command has been issued
  * @three_stage_setup: set if we perform a three phase setup
+ * @disable_scramble_quirk: set if we enable the disable scramble quirk
  */
 struct dwc3 {
struct usb_ctrlrequest  *ctrl_req;
@@ -776,6 +777,8 @@ struct dwc3 {
unsignedsetup_packet_pending:1;
unsignedstart_config_issued:1;
unsignedthree_stage_setup:1;
+
+   unsigneddisable_scramble_quirk:1;
 };
 
 /* -- 
*/
diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h
index 7db34f0..9209d02 100644
--- a/drivers/usb/dwc3/platform_data.h
+++ b/drivers/usb/dwc3/platform_data.h
@@ -24,4 +24,6 @@ struct dwc3_platform_data {
enum usb_device_speed maximum_speed;
enum usb_dr_mode dr_mode;
bool tx_fifo_resize;
+
+   unsigned disable_scramble_quirk:1;
 };
-- 
1.9.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 v4 03/20] usb: dwc3: initialize platform data at pci glue layer

2014-10-30 Thread Huang Rui
This patch initializes platform data at pci glue layer, and SoCs x86-based
platform vendor is able to define their flags in platform data at bus glue
layer. Then do some independent behaviors at dwc3 core level.

Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 drivers/usb/dwc3/dwc3-pci.c | 9 +
 1 file changed, 9 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index a36cf66..ada975f 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -25,6 +25,8 @@
 #include 
 #include 
 
+#include "platform_data.h"
+
 /* FIXME define these in  */
 #define PCI_VENDOR_ID_SYNOPSYS 0x16c3
 #define PCI_DEVICE_ID_SYNOPSYS_HAPSUSB30xabcd
@@ -102,6 +104,9 @@ static int dwc3_pci_probe(struct pci_dev *pci,
struct dwc3_pci *glue;
int ret;
struct device   *dev = &pci->dev;
+   struct dwc3_platform_data dwc3_pdata;
+
+   memset(&dwc3_pdata, 0x00, sizeof(dwc3_pdata));
 
glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
if (!glue)
@@ -148,6 +153,10 @@ static int dwc3_pci_probe(struct pci_dev *pci,
 
pci_set_drvdata(pci, glue);
 
+   ret = platform_device_add_data(dwc3, &dwc3_pdata, sizeof(dwc3_pdata));
+   if (ret)
+   goto err3;
+
dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask);
 
dwc3->dev.dma_mask = dev->dma_mask;
-- 
1.9.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 v4 00/20] usb: dwc3: add support for AMD Nolan SoC

2014-10-30 Thread Huang Rui
Hi,

The series of patches add AMD Nolan (NL) SoC support for DesignWare USB3
OTG IP with PCI bus glue layer. This controller supported hibernation, LPM
erratum and used the 2.80a IP version and amd own phy. Current
implementation support both simulation and SoC platform. And already tested
with gadget zero and msc tool. It works well on file storage gadget.


These patches are generated on balbi/testing/next

Changes from v3 -> v4
- Add comment on hibernation patch
- Fix typos of commit log and comments
- Remove WARN_ON for temporary solution of FPGA board
- Rename tx deemph to tx de-emphasis
- Add documentation under Documentation/devicetree/bindings/usb/dwc3.txt
- Check FPGA flag on usb3 and usb2 suspend phy quirk
- Refine description of PCI quirk patch
- Remove amd_nl_plat flag at dwc3 structure
- Make HIRD threshold configurable

Changes from v2 -> v3
- Confirmed these quirks will be needed in product level
- Move AMD configuration patch to the last one with all quirk flags
- Make all quirks as 1-bit field instead of single-bits on a 32-bit
  variable
- Add all quirks DeviceTree counterparts
- Make LPM erratum configurable
- Add PCI ID into pci_ids.h because it will be used both on PCI and DWC3
  device driver.

Changes from v1 -> v2
- Remove dual role function temporarily
- Add pci quirk to avoid to bind with xhci driver
- Distinguish between simulation board and soc
- Break down all the special quirks


Patch 1:
- Enable hibernation

Patch 2:
- Distinguish between simulation board and SoC

Patch 3:
- Initialize platform data at pci glue layer

Patch 4 - 16:
- Break down all the special quirks

Patch 17:
- Add PCI device ID of AMD NL USB3 DRD

Patch 18:
- Prevent xHCI driver from claiming AMD NL USB3 DRD device

Patch 19:
- Add support AMD NL USB3 DRD for dwc3 driver

Patch 20:
- Make HIRD threshold configurable

Patch set already passed all the MSC testing on simulation board with low
clock frequency, so the speed will slower than true SoC. Detailed result
without verbose debug option is below:

root@hr-bak:/home/ray/felipe/usb-tools# ./msc.sh -o /dev/sdb1
Starting test suite: 2014??? 10??? 30??? ? 15:42:32 CST
test 0a: simple 4k read/write
test  0: sent   3.91 MB read   7.43 MB/s write   6.45 MB/s ... 
success
test 0b: simple 8k read/write
test  0: sent   7.81 MB read  10.10 MB/s write   8.92 MB/s ... 
success
test 0c: simple 16k read/write
test  0: sent  15.62 MB read  15.22 MB/s write  12.02 MB/s ... 
success
test 0d: simple 32k read/write
test  0: sent  31.25 MB read  19.30 MB/s write  16.65 MB/s ... 
success
test 0e: simple 64k read/write
test  0: sent  62.50 MB read  22.43 MB/s write  16.04 MB/s ... 
success
test 1: simple 1-sector read/write
test  1: sent 500.00 kB read   1.27 MB/s write   1.04 MB/s ... 
success
test 2: simple 8-sectors read/write
test  2: sent   3.91 MB read   7.39 MB/s write   6.35 MB/s ... 
success
test 3: simple 32-sectors read/write
test  3: sent  15.62 MB read  15.26 MB/s write  12.42 MB/s ... 
success
test 4: simple 64-sectors read/write
test  4: sent  31.25 MB read  19.56 MB/s write  16.83 MB/s ... 
success
test 5a: scatter/gather for 2-sectors buflen 4k
test  5: sent1000.00 kB read   2.53 MB/s write   1.89 MB/s ... 
success
test 5b: scatter/gather for 2-sectors buflen 8k
test  5: sent1000.00 kB read   2.52 MB/s write   1.87 MB/s ... 
success
test 5c: scatter/gather for 2-sectors buflen 16k
test  5: sent1000.00 kB read   2.53 MB/s write   1.85 MB/s ... 
success
test 5d: scatter/gather for 2-sectors buflen 32k
test  5: sent1000.00 kB read   2.47 MB/s write   2.08 MB/s ... 
success
test 5e: scatter/gather for 2-sectors buflen 64k
test  5: sent1000.00 kB read   2.48 MB/s write   2.09 MB/s ... 
success
test 6a: scatter/gather for 8-sectors buflen 4k
test  6: sent   3.91 MB read   7.05 MB/s write   6.31 MB/s ... 
success
test 6b: scatter/gather for 8-sectors buflen 8k
test  6: sent   3.91 MB read   7.43 MB/s write   6.39 MB/s ... 
success
test 6c: scatter/gather for 8-sectors buflen 16k
test  6: sent   3.91 MB read   7.66 MB/s write   6.27 MB/s ... 
success
test 6d: scatter/gather for 8-sectors buflen 32k
test  6: sent   3.91 MB read   7.71 MB/s write   6.30 MB/s ... 
success
test 6e: scatter/gather for 8-sectors buflen 64k
test  6: sent   3.91 MB read   7.38 MB/s write   6.46 MB/s ... 
success
test 7a: scatter/gather for 32-sectors buflen 16k
test  7: sent  15.62 MB read  14.56 MB/s write  11.90 MB/s ... 
success
test 7b: scatter/gather for 32-sectors buflen 32k
test  7: sent  15.62 MB read  15.16 MB/s write  12.02 MB/s ... 
success
test 7c: scatter/gather for 32-sectors buflen 64k
test  7: sent  15.62 MB read  15.29 MB/s write  12.03 MB/s ... 
success
test 8a: scatter/gather for 64-sectors buflen 32k
tes

[PATCH v4 02/20] usb: dwc3: add a flag to check if it is FPGA board

2014-10-30 Thread Huang Rui
Some chip vendor is on pre-silicon phase, which needs to use the simulation
board. It should have the same product and vendor id with the true SoC, but
might have some minor different configurations.

Below thread discussion proposes to find a method to distinguish between
simulation board and SoC.

http://marc.info/?l=linux-usb&m=141194772206369&w=2

In Advanced Configuration of coreConsultant, there is the parameter of
DWC_USB_EN_FPGA. This bit has the function we need. And it would response
as 7 bit of GHWPARAMS6 register. So it's able to check this functional bit
to confirm if works on FPGA board.

Reported-by: Felipe Balbi 
Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
---
 drivers/usb/dwc3/core.c | 6 ++
 drivers/usb/dwc3/core.h | 5 +
 2 files changed, 11 insertions(+)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 5a47482..c8ae098 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -460,6 +460,12 @@ static int dwc3_core_init(struct dwc3 *dwc)
dev_dbg(dwc->dev, "No power optimization available\n");
}
 
+   /* check if current dwc3 is on simulation board */
+   if (dwc->hwparams.hwparams6 & DWC3_GHWPARAMS6_EN_FPGA) {
+   dev_dbg(dwc->dev, "it is on FPGA board\n");
+   dwc->is_fpga = true;
+   }
+
/*
 * WORKAROUND: DWC3 revisions <1.90a have a bug
 * where the device can fail to connect at SuperSpeed
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index a715ee1..f6ee623 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -210,6 +210,9 @@
 #define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n)   (((n) & (0x0f << 13)) >> 13)
 #define DWC3_MAX_HIBER_SCRATCHBUFS 15
 
+/* Global HWPARAMS6 Register */
+#define DWC3_GHWPARAMS6_EN_FPGA(1 << 7)
+
 /* Device Configuration Register */
 #define DWC3_DCFG_DEVADDR(addr)((addr) << 3)
 #define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f)
@@ -662,6 +665,7 @@ struct dwc3_scratchpad_array {
  * @ep0_expect_in: true when we expect a DATA IN transfer
  * @has_hibernation: true when dwc3 was configured with Hibernation
  * @is_selfpowered: true when we are selfpowered
+ * @is_fpga: true when we are using the FPGA board
  * @needs_fifo_resize: not all users might want fifo resizing, flag it
  * @pullups_connected: true when Run/Stop bit is set
  * @resize_fifos: tells us it's ok to reconfigure our TxFIFO sizes.
@@ -765,6 +769,7 @@ struct dwc3 {
unsignedep0_expect_in:1;
unsignedhas_hibernation:1;
unsignedis_selfpowered:1;
+   unsignedis_fpga:1;
unsignedneeds_fifo_resize:1;
unsignedpullups_connected:1;
unsignedresize_fifos:1;
-- 
1.9.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 v3 0/4] usb: renesas_usbhs: fixes this driver in gadget mode (part2)

2014-10-30 Thread Yoshihiro Shimoda
If we tested this driver as gadget, some issues below happened:
 - Oops happened if g_audio.
 - A usb enumeration may fail if we do insmod during connected the usb cable.
 - A transaction will not finish if g_zero.
 - A usb enumeration may fail after we re-connected the usb cable.

This patch serias fixes them.
This patch serias is based on Felipe's usb.git / testing/fixes branch.
(commit id: 9f2104db129512fd2ee086c8a616d296d1afbb75)

Changes from v2:
 - Use USBHSG_STATUS_ instead of a new variable in patch 2.

Changes from v1:
 - Rebase this patch serias for the latest testing/fixes branch.
 - Add "From:" in patch 1 and 2.
 - Add "Cc: " in patch 1.

*** BLURB HERE ***

Yoshihiro Shimoda (4):
  usb: renesas_usbhs: gadget: fix NULL pointer dereference in
ep_disable()
  usb: renesas_usbhs: gadget: fix the behavior of pullup
  usb: renesas_usbhs: fix the timing of dcp_control_transfer_done
  usb: renesas_usbhs: fix usbhs_pipe_clear() for DCP PIPE

 drivers/usb/renesas_usbhs/common.c |6 +++--
 drivers/usb/renesas_usbhs/fifo.c   |   34 ++--
 drivers/usb/renesas_usbhs/fifo.h   |1 +
 drivers/usb/renesas_usbhs/mod_gadget.c |   38 ++--
 drivers/usb/renesas_usbhs/mod_host.c   |2 +-
 drivers/usb/renesas_usbhs/pipe.c   |8 +--
 6 files changed, 66 insertions(+), 23 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


[PATCH v3 2/4] usb: renesas_usbhs: gadget: fix the behavior of pullup

2014-10-30 Thread Yoshihiro Shimoda
From: Takeshi Kihara 

This patch fixes an issue that this driver always enable the D+ pullup
after it detected the VBUS connection even though this usb controller
can control the D+ pullup timing by software. So, this driver should
enable the D+ pullup after a gadget driver called usb_gadget_connect().

Signed-off-by: Takeshi Kihara 
Signed-off-by: Kazuya Mizuguchi 
Signed-off-by: Yoshihiro Shimoda 
---
 drivers/usb/renesas_usbhs/common.c |6 --
 drivers/usb/renesas_usbhs/mod_gadget.c |   30 +-
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/common.c 
b/drivers/usb/renesas_usbhs/common.c
index b3b6813..7099f17 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -126,13 +126,15 @@ void usbhs_sys_host_ctrl(struct usbhs_priv *priv, int 
enable)
 void usbhs_sys_function_ctrl(struct usbhs_priv *priv, int enable)
 {
u16 mask = DCFM | DRPD | DPRPU | HSE | USBE;
-   u16 val  = DPRPU | HSE | USBE;
+   u16 val  = HSE | USBE;
 
/*
 * if enable
 *
 * - select Function mode
-* - D+ Line Pull-up
+* - D+ Line Pull-up is disabled
+*  When D+ Line Pull-up is enabled,
+*  calling usbhs_sys_function_pullup(,1)
 */
usbhs_bset(priv, SYSCFG, mask, enable ? val : 0);
 }
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
b/drivers/usb/renesas_usbhs/mod_gadget.c
index 2d0903f..daecf74 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -56,6 +56,7 @@ struct usbhsg_gpriv {
 #define USBHSG_STATUS_REGISTERD(1 << 1)
 #define USBHSG_STATUS_WEDGE(1 << 2)
 #define USBHSG_STATUS_SELF_POWERED (1 << 3)
+#define USBHSG_STATUS_SOFT_CONNECT (1 << 4)
 };
 
 struct usbhsg_recip_handle {
@@ -726,6 +727,25 @@ static struct usb_ep_ops usbhsg_ep_ops = {
 };
 
 /*
+ * pullup control
+ */
+static int usbhsg_can_pullup(struct usbhs_priv *priv)
+{
+   struct usbhsg_gpriv *gpriv = usbhsg_priv_to_gpriv(priv);
+
+   return gpriv->driver &&
+  usbhsg_status_has(gpriv, USBHSG_STATUS_SOFT_CONNECT);
+}
+
+static void usbhsg_update_pullup(struct usbhs_priv *priv)
+{
+   if (usbhsg_can_pullup(priv))
+   usbhs_sys_function_pullup(priv, 1);
+   else
+   usbhs_sys_function_pullup(priv, 0);
+}
+
+/*
  * usb module start/end
  */
 static int usbhsg_try_start(struct usbhs_priv *priv, u32 status)
@@ -775,6 +795,7 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 
status)
 * - usb module
 */
usbhs_sys_function_ctrl(priv, 1);
+   usbhsg_update_pullup(priv);
 
/*
 * enable irq callback
@@ -881,8 +902,15 @@ static int usbhsg_pullup(struct usb_gadget *gadget, int 
is_on)
 {
struct usbhsg_gpriv *gpriv = usbhsg_gadget_to_gpriv(gadget);
struct usbhs_priv *priv = usbhsg_gpriv_to_priv(gpriv);
+   unsigned long flags;
 
-   usbhs_sys_function_pullup(priv, is_on);
+   usbhs_lock(priv, flags);
+   if (is_on)
+   usbhsg_status_set(gpriv, USBHSG_STATUS_SOFT_CONNECT);
+   else
+   usbhsg_status_clr(gpriv, USBHSG_STATUS_SOFT_CONNECT);
+   usbhsg_update_pullup(priv);
+   usbhs_unlock(priv, flags);
 
return 0;
 }
-- 
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


[PATCH v3 1/4] usb: renesas_usbhs: gadget: fix NULL pointer dereference in ep_disable()

2014-10-30 Thread Yoshihiro Shimoda
From: Kazuya Mizuguchi 

This patch fixes an issue that the NULL pointer dereference happens
when we uses g_audio driver. Since the g_audio driver will call
usb_ep_disable() in afunc_set_alt() before it calls usb_ep_enable(),
the uep->pipe of renesas usbhs driver will be NULL. So, this patch
adds a condition to avoid the oops.

Signed-off-by: Kazuya Mizuguchi 
Signed-off-by: Takeshi Kihara 
Signed-off-by: Yoshihiro Shimoda 
Cc: 
---
 drivers/usb/renesas_usbhs/mod_gadget.c |3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
b/drivers/usb/renesas_usbhs/mod_gadget.c
index 2d17c10..2d0903f 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -602,6 +602,9 @@ static int usbhsg_ep_disable(struct usb_ep *ep)
struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
 
+   if (!uep || !uep->pipe)
+   return -EINVAL;
+
usbhsg_pipe_disable(uep);
usbhs_pipe_free(pipe);
 
-- 
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


[PATCH v3 3/4] usb: renesas_usbhs: fix the timing of dcp_control_transfer_done

2014-10-30 Thread Yoshihiro Shimoda
According to the datasheet, this driver should clear the INTSTS0.CTRT
bit before this controller detects the next stage transition. Otherwise,
the driver may not be able to clear the bit after the controller went to
the next stage transition. After that, the driver will not be able to
clear the INTSTS0.VALID, and a usb control transfer will not finish
finally.

If we use the testusb tool, it is easy to reproduce this issue:

 # testusb -a -t 10

Since the previous code handled a data stage and a status stage in
the usbhsf_pio_try_push(), it may not clear the INTSTS0.CTRT at the
right timing.
So, this patch change the timing of usbhs_dcp_control_transfer_done()
to the usbhsg_irq_ctrl_stage().

Signed-off-by: Yoshihiro Shimoda 
---
 drivers/usb/renesas_usbhs/fifo.c   |   16 
 drivers/usb/renesas_usbhs/mod_gadget.c |3 +++
 2 files changed, 3 insertions(+), 16 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
index b0c97a3..0e07925 100644
--- a/drivers/usb/renesas_usbhs/fifo.c
+++ b/drivers/usb/renesas_usbhs/fifo.c
@@ -577,14 +577,6 @@ static int usbhsf_pio_try_push(struct usbhs_pkt *pkt, int 
*is_done)
usbhs_pipe_number(pipe),
pkt->length, pkt->actual, *is_done, pkt->zero);
 
-   /*
-* Transmission end
-*/
-   if (*is_done) {
-   if (usbhs_pipe_is_dcp(pipe))
-   usbhs_dcp_control_transfer_done(pipe);
-   }
-
usbhsf_fifo_unselect(pipe, fifo);
 
return 0;
@@ -722,14 +714,6 @@ usbhs_fifo_read_end:
usbhs_pipe_number(pipe),
pkt->length, pkt->actual, *is_done, pkt->zero);
 
-   /*
-* Transmission end
-*/
-   if (*is_done) {
-   if (usbhs_pipe_is_dcp(pipe))
-   usbhs_dcp_control_transfer_done(pipe);
-   }
-
 usbhs_fifo_read_busy:
usbhsf_fifo_unselect(pipe, fifo);
 
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
b/drivers/usb/renesas_usbhs/mod_gadget.c
index daecf74..c46641a 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -485,6 +485,9 @@ static int usbhsg_irq_ctrl_stage(struct usbhs_priv *priv,
case NODATA_STATUS_STAGE:
pipe->handler = &usbhs_ctrl_stage_end_handler;
break;
+   case READ_STATUS_STAGE:
+   case WRITE_STATUS_STAGE:
+   usbhs_dcp_control_transfer_done(pipe);
default:
return ret;
}
-- 
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


[PATCH v3 4/4] usb: renesas_usbhs: fix usbhs_pipe_clear() for DCP PIPE

2014-10-30 Thread Yoshihiro Shimoda
Since the DCPCTR doesn't have the ACLRM bit, the usbus_pipe_clear()
should not call the usbhsp_pipectrl_set() with ACLRM.
So, this patch fixes this issue to add the usbhs_fifo_clear_dcp()
in fifo.c because the controller needs the CFIFO to clear the
the DCP PIPE.

Signed-off-by: Yoshihiro Shimoda 
---
 drivers/usb/renesas_usbhs/fifo.c   |   18 ++
 drivers/usb/renesas_usbhs/fifo.h   |1 +
 drivers/usb/renesas_usbhs/mod_gadget.c |2 +-
 drivers/usb/renesas_usbhs/mod_host.c   |2 +-
 drivers/usb/renesas_usbhs/pipe.c   |8 ++--
 5 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c
index 0e07925..9b48384 100644
--- a/drivers/usb/renesas_usbhs/fifo.c
+++ b/drivers/usb/renesas_usbhs/fifo.c
@@ -1160,6 +1160,24 @@ static void usbhsf_dma_complete(void *arg)
usbhs_pipe_number(pipe), ret);
 }
 
+void usbhs_fifo_clear_dcp(struct usbhs_pipe *pipe)
+{
+   struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe);
+   struct usbhs_fifo *fifo = usbhsf_get_cfifo(priv); /* CFIFO */
+
+   /* clear DCP FIFO of transmission */
+   if (usbhsf_fifo_select(pipe, fifo, 1) < 0)
+   return;
+   usbhsf_fifo_clear(pipe, fifo);
+   usbhsf_fifo_unselect(pipe, fifo);
+
+   /* clear DCP FIFO of reception */
+   if (usbhsf_fifo_select(pipe, fifo, 0) < 0)
+   return;
+   usbhsf_fifo_clear(pipe, fifo);
+   usbhsf_fifo_unselect(pipe, fifo);
+}
+
 /*
  * fifo init
  */
diff --git a/drivers/usb/renesas_usbhs/fifo.h b/drivers/usb/renesas_usbhs/fifo.h
index a168a17..79ad5f9 100644
--- a/drivers/usb/renesas_usbhs/fifo.h
+++ b/drivers/usb/renesas_usbhs/fifo.h
@@ -74,6 +74,7 @@ int usbhs_fifo_probe(struct usbhs_priv *priv);
 void usbhs_fifo_remove(struct usbhs_priv *priv);
 void usbhs_fifo_init(struct usbhs_priv *priv);
 void usbhs_fifo_quit(struct usbhs_priv *priv);
+void usbhs_fifo_clear_dcp(struct usbhs_pipe *pipe);
 
 /*
  * packet info
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
b/drivers/usb/renesas_usbhs/mod_gadget.c
index c46641a..878334d 100644
--- a/drivers/usb/renesas_usbhs/mod_gadget.c
+++ b/drivers/usb/renesas_usbhs/mod_gadget.c
@@ -782,9 +782,9 @@ static int usbhsg_try_start(struct usbhs_priv *priv, u32 
status)
/*
 * pipe initialize and enable DCP
 */
+   usbhs_fifo_init(priv);
usbhs_pipe_init(priv,
usbhsg_dma_map_ctrl);
-   usbhs_fifo_init(priv);
 
/* dcp init instead of usbhsg_ep_enable() */
dcp->pipe   = usbhs_dcp_malloc(priv);
diff --git a/drivers/usb/renesas_usbhs/mod_host.c 
b/drivers/usb/renesas_usbhs/mod_host.c
index 10e1ded..f0d3231 100644
--- a/drivers/usb/renesas_usbhs/mod_host.c
+++ b/drivers/usb/renesas_usbhs/mod_host.c
@@ -1474,9 +1474,9 @@ static int usbhsh_start(struct usbhs_priv *priv)
/*
 * pipe initialize and enable DCP
 */
+   usbhs_fifo_init(priv);
usbhs_pipe_init(priv,
usbhsh_dma_map_ctrl);
-   usbhs_fifo_init(priv);
usbhsh_pipe_init_for_host(priv);
 
/*
diff --git a/drivers/usb/renesas_usbhs/pipe.c b/drivers/usb/renesas_usbhs/pipe.c
index 040bcef..007f45a 100644
--- a/drivers/usb/renesas_usbhs/pipe.c
+++ b/drivers/usb/renesas_usbhs/pipe.c
@@ -618,8 +618,12 @@ void usbhs_pipe_data_sequence(struct usbhs_pipe *pipe, int 
sequence)
 
 void usbhs_pipe_clear(struct usbhs_pipe *pipe)
 {
-   usbhsp_pipectrl_set(pipe, ACLRM, ACLRM);
-   usbhsp_pipectrl_set(pipe, ACLRM, 0);
+   if (usbhs_pipe_is_dcp(pipe)) {
+   usbhs_fifo_clear_dcp(pipe);
+   } else {
+   usbhsp_pipectrl_set(pipe, ACLRM, ACLRM);
+   usbhsp_pipectrl_set(pipe, ACLRM, 0);
+   }
 }
 
 static struct usbhs_pipe *usbhsp_get_pipe(struct usbhs_priv *priv, u32 type)
-- 
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 v4 01/20] usb: dwc3: enable hibernation if to be supported

2014-10-30 Thread Arnd Bergmann
On Thursday 30 October 2014 18:08:26 Huang Rui wrote:
> It enables hibernation if the function is set in coreConsultant.
> 
> Suggested-by: Felipe Balbi 
> Signed-off-by: Huang Rui 
> Signed-off-by: Felipe Balbi 
> 

Something went wrong with the Signed-off-by lines here. 
You should never add someone else's Signed-off-by below yours.

I took a brief look at the entire series and the patches all look good
to me, but you have made the same mistake with the Signed-off-by
multiple times.

Arnd
--
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/6] usb: chipidea: setup ci_hdrc_platform_data in core driver

2014-10-30 Thread Antoine Tenart
Hello,

This series introduce the ci_hdrc_get_platdata function to help setting up the
ChipIdea internal ci_hdrc_platform_data structure. This helps avoiding
duplicating code.

This series comes from a duscission on Berlin's USB pacthes where it was asked
to move the PHY phandle handling in the ChipIdea core[1].

With the introduction of the ci_hdrc_get_platdata function, the old
ci_get_platdata function is removed. Changes in ChipIdea drivers have also been
made.

This series is needed for the Berlin USB support and has been tested with an
updated version of the USB Berlin driver (not in mainline yet).

Thanks,

Antoine

[1] 
http://lists.infradead.org/pipermail/linux-arm-kernel/2014-October/292383.html

Antoine Tenart (6):
  usb: chipidea: add a core function to setup ci_hdrc_platform_data
  usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_imx
  usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_msm
  usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_pci
  usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_zevio
  usb: chipidea: remove obsolete ci_get_platdata function

 drivers/usb/chipidea/ci_hdrc_imx.c   |  14 ++--
 drivers/usb/chipidea/ci_hdrc_msm.c   |  10 ++-
 drivers/usb/chipidea/ci_hdrc_pci.c   |  12 ++-
 drivers/usb/chipidea/ci_hdrc_zevio.c |   8 +-
 drivers/usb/chipidea/core.c  | 146 ---
 include/linux/usb/chipidea.h |   2 +
 6 files changed, 150 insertions(+), 42 deletions(-)

-- 
2.1.0

--
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/6] usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_zevio

2014-10-30 Thread Antoine Tenart
Use the newly introduced ci_hdrc_get_platdata function to help setup the
chipidea internal ci_hdrc_platform_data structure.

Signed-off-by: Antoine Tenart 
---
 drivers/usb/chipidea/ci_hdrc_zevio.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/chipidea/ci_hdrc_zevio.c 
b/drivers/usb/chipidea/ci_hdrc_zevio.c
index 3bf6489ef5ec..d50a6d9038bd 100644
--- a/drivers/usb/chipidea/ci_hdrc_zevio.c
+++ b/drivers/usb/chipidea/ci_hdrc_zevio.c
@@ -25,12 +25,16 @@ static struct ci_hdrc_platform_data ci_hdrc_zevio_platdata 
= {
 static int ci_hdrc_zevio_probe(struct platform_device *pdev)
 {
struct platform_device *ci_pdev;
+   struct ci_hdrc_platform_data *ci_pdata;
 
dev_dbg(&pdev->dev, "ci_hdrc_zevio_probe\n");
 
+   ci_pdata = ci_hdrc_get_platdata(&pdev->dev, &ci_hdrc_zevio_platdata);
+   if (IS_ERR(ci_pdata))
+   return PTR_ERR(ci_pdata);
+
ci_pdev = ci_hdrc_add_device(&pdev->dev,
-   pdev->resource, pdev->num_resources,
-   &ci_hdrc_zevio_platdata);
+   pdev->resource, pdev->num_resources, ci_pdata);
 
if (IS_ERR(ci_pdev)) {
dev_err(&pdev->dev, "ci_hdrc_add_device failed!\n");
-- 
2.1.0

--
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/6] usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_pci

2014-10-30 Thread Antoine Tenart
Use the newly introduced ci_hdrc_get_platdata function to help setup the
chipidea internal ci_hdrc_platform_data structure.

Signed-off-by: Antoine Tenart 
---
 drivers/usb/chipidea/ci_hdrc_pci.c | 12 +---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/chipidea/ci_hdrc_pci.c 
b/drivers/usb/chipidea/ci_hdrc_pci.c
index 241ae3444fde..d2ffc651b650 100644
--- a/drivers/usb/chipidea/ci_hdrc_pci.c
+++ b/drivers/usb/chipidea/ci_hdrc_pci.c
@@ -51,16 +51,22 @@ static struct ci_hdrc_platform_data penwell_pci_platdata = {
 static int ci_hdrc_pci_probe(struct pci_dev *pdev,
   const struct pci_device_id *id)
 {
-   struct ci_hdrc_platform_data *platdata = (void *)id->driver_data;
+   struct ci_hdrc_platform_data *ci_pdata_default =
+   (void *)id->driver_data;
+   struct ci_hdrc_platform_data *ci_pdata;
struct platform_device *plat_ci;
struct resource res[3];
int retval = 0, nres = 2;
 
-   if (!platdata) {
+   if (!ci_pdata_default) {
dev_err(&pdev->dev, "device doesn't provide driver data\n");
return -ENODEV;
}
 
+   ci_pdata = ci_hdrc_get_platdata(&pdev->dev, ci_pdata_default);
+   if (IS_ERR(ci_pdata))
+   return PTR_ERR(ci_pdata);
+
retval = pcim_enable_device(pdev);
if (retval)
return retval;
@@ -80,7 +86,7 @@ static int ci_hdrc_pci_probe(struct pci_dev *pdev,
res[1].start= pdev->irq;
res[1].flags= IORESOURCE_IRQ;
 
-   plat_ci = ci_hdrc_add_device(&pdev->dev, res, nres, platdata);
+   plat_ci = ci_hdrc_add_device(&pdev->dev, res, nres, ci_pdata);
if (IS_ERR(plat_ci)) {
dev_err(&pdev->dev, "ci_hdrc_add_device failed!\n");
return PTR_ERR(plat_ci);
-- 
2.1.0

--
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/6] usb: chipidea: add a core function to setup ci_hdrc_platform_data

2014-10-30 Thread Antoine Tenart
Add a function into the chipidea core to help drivers setup the internal
ci_hdrc_platform_data structure. This helps not duplicating common code.

The ci_hdrc_get_platdata function only setup non filled members of the
structure so that is is possible to give an already filled one. This is
what the ci_pdata_default parameter is for.

Signed-off-by: Antoine Tenart 
---
 drivers/usb/chipidea/core.c  | 129 +++
 include/linux/usb/chipidea.h |   2 +
 2 files changed, 131 insertions(+)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index ba0ac2723098..0ad55c10a903 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -535,6 +535,135 @@ static int ci_get_platdata(struct device *dev,
return 0;
 }
 
+/*
+ * Getting a PHY or an USB PHY is optional:
+ * If no PHY or USB PHY is found, or if their subsystems aren't enabled,
+ * PHY and/or USB PHY will be set to NULL. Otherwise returns an error.
+ */
+static int ci_hdrc_get_phy(struct device *dev,
+  struct ci_hdrc_platform_data *ci_pdata)
+{
+   ci_pdata->phy = devm_phy_get(dev, "usb");
+   ci_pdata->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
+
+   if (PTR_ERR(ci_pdata->phy) == -EPROBE_DEFER ||
+   PTR_ERR(ci_pdata->usb_phy) == -EPROBE_DEFER)
+   return -EPROBE_DEFER;
+
+   if (IS_ERR(ci_pdata->phy)) {
+   if (PTR_ERR(ci_pdata->phy) == -ENOSYS ||
+   PTR_ERR(ci_pdata->phy) == -ENODEV) {
+   ci_pdata->phy = NULL;
+   } else {
+   dev_err(dev, "Could not get PHY: %ld\n",
+   PTR_ERR(ci_pdata->phy));
+   return PTR_ERR(ci_pdata->phy);
+   }
+   }
+
+   if (IS_ERR(ci_pdata->usb_phy)) {
+   if (PTR_ERR(ci_pdata->usb_phy) == -ENXIO ||
+   PTR_ERR(ci_pdata->usb_phy) == -ENODEV) {
+   ci_pdata->usb_phy = NULL;
+   } else {
+   dev_err(dev, "Could not get USB PHY: %ld\n",
+   PTR_ERR(ci_pdata->usb_phy));
+   return PTR_ERR(ci_pdata->usb_phy);
+   }
+   }
+
+   return 0;
+}
+
+static int ci_hdrc_get_usb_phy_mode(struct device *dev,
+   struct ci_hdrc_platform_data *ci_pdata)
+{
+   if (!ci_pdata->phy_mode)
+   ci_pdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
+
+   if (!ci_pdata->dr_mode)
+   ci_pdata->dr_mode = of_usb_get_dr_mode(dev->of_node);
+
+   if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
+   ci_pdata->flags |= CI_HDRC_FORCE_FULLSPEED;
+
+   return 0;
+}
+
+/*
+ * Getting a regulator is optional:
+ * If no regulator is found, or if the regulator subsystem isn't enabled,
+ * the regulator will be set to NULL. Otherwise returns an error.
+ */
+static int ci_hdrc_get_regulator(struct device *dev,
+struct ci_hdrc_platform_data *ci_pdata)
+{
+   ci_pdata->reg_vbus = devm_regulator_get(dev, "vbus");
+
+   if (IS_ERR(ci_pdata->reg_vbus)) {
+   if (PTR_ERR(ci_pdata->reg_vbus) == -EPROBE_DEFER)
+   return -EPROBE_DEFER;
+
+   if (PTR_ERR(ci_pdata->reg_vbus) == -ENODEV) {
+   ci_pdata->reg_vbus = NULL;
+   } else {
+   dev_err(dev, "Could not get regulator for vbus: %ld\n",
+   PTR_ERR(ci_pdata->reg_vbus));
+   return PTR_ERR(ci_pdata->reg_vbus);
+   }
+   }
+
+   return 0;
+}
+
+struct ci_hdrc_platform_data *ci_hdrc_get_platdata(struct device *dev,
+   struct ci_hdrc_platform_data *ci_pdata_default)
+{
+   struct ci_hdrc_platform_data *ci_pdata;
+   int ret;
+
+   if (!ci_pdata_default) {
+   ci_pdata = devm_kzalloc(dev, sizeof(*ci_pdata), GFP_KERNEL);
+   if (!ci_pdata)
+   return ERR_PTR(-ENOMEM);
+   } else {
+   ci_pdata = ci_pdata_default;
+   }
+
+   if (!ci_pdata->name)
+   ci_pdata->name = dev_name(dev);
+
+   if (!ci_pdata->phy && !ci_pdata->usb_phy) {
+   ret = ci_hdrc_get_phy(dev, ci_pdata);
+   if (ret)
+   return ERR_PTR(ret);
+   }
+
+   if (ci_pdata->usb_phy) {
+   ret = ci_hdrc_get_usb_phy_mode(dev, ci_pdata);
+   if (ret)
+   return ERR_PTR(ret);
+   }
+
+   if (ci_pdata->dr_mode == USB_DR_MODE_UNKNOWN)
+   ci_pdata->dr_mode = USB_DR_MODE_OTG;
+
+   if (ci_pdata->dr_mode != USB_DR_MODE_PERIPHERAL) {
+   if (!ci_pdata->reg_vbus) {
+   ret = ci_hdrc_get_regulator(dev, ci_pdata);
+   

[PATCH 6/6] usb: chipidea: remove obsolete ci_get_platdata function

2014-10-30 Thread Antoine Tenart
The addition of the ci_hdrc_get_platdata function makes the use of
ci_get_platdata obsolete. Remove it.

Signed-off-by: Antoine Tenart 
---
 drivers/usb/chipidea/core.c | 41 -
 1 file changed, 41 deletions(-)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 0ad55c10a903..8562a9c6154d 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -498,43 +498,6 @@ static irqreturn_t ci_irq(int irq, void *data)
return ret;
 }
 
-static int ci_get_platdata(struct device *dev,
-   struct ci_hdrc_platform_data *platdata)
-{
-   if (!platdata->phy_mode)
-   platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);
-
-   if (!platdata->dr_mode)
-   platdata->dr_mode = of_usb_get_dr_mode(dev->of_node);
-
-   if (platdata->dr_mode == USB_DR_MODE_UNKNOWN)
-   platdata->dr_mode = USB_DR_MODE_OTG;
-
-   if (platdata->dr_mode != USB_DR_MODE_PERIPHERAL) {
-   /* Get the vbus regulator */
-   platdata->reg_vbus = devm_regulator_get(dev, "vbus");
-   if (PTR_ERR(platdata->reg_vbus) == -EPROBE_DEFER) {
-   return -EPROBE_DEFER;
-   } else if (PTR_ERR(platdata->reg_vbus) == -ENODEV) {
-   /* no vbus regualator is needed */
-   platdata->reg_vbus = NULL;
-   } else if (IS_ERR(platdata->reg_vbus)) {
-   dev_err(dev, "Getting regulator error: %ld\n",
-   PTR_ERR(platdata->reg_vbus));
-   return PTR_ERR(platdata->reg_vbus);
-   }
-   /* Get TPL support */
-   if (!platdata->tpl_support)
-   platdata->tpl_support =
-   of_usb_host_tpl_support(dev->of_node);
-   }
-
-   if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
-   platdata->flags |= CI_HDRC_FORCE_FULLSPEED;
-
-   return 0;
-}
-
 /*
  * Getting a PHY or an USB PHY is optional:
  * If no PHY or USB PHY is found, or if their subsystems aren't enabled,
@@ -673,10 +636,6 @@ struct platform_device *ci_hdrc_add_device(struct device 
*dev,
struct platform_device *pdev;
int id, ret;
 
-   ret = ci_get_platdata(dev, platdata);
-   if (ret)
-   return ERR_PTR(ret);
-
id = ida_simple_get(&ci_ida, 0, 0, GFP_KERNEL);
if (id < 0)
return ERR_PTR(id);
-- 
2.1.0

--
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/6] usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_imx

2014-10-30 Thread Antoine Tenart
Use the newly introduced ci_hdrc_get_platdata function to help setup the
chipidea internal ci_hdrc_platform_data structure.

Signed-off-by: Antoine Tenart 
---
 drivers/usb/chipidea/ci_hdrc_imx.c | 14 +-
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c 
b/drivers/usb/chipidea/ci_hdrc_imx.c
index 6f8b1b1045b5..25f3b465cb73 100644
--- a/drivers/usb/chipidea/ci_hdrc_imx.c
+++ b/drivers/usb/chipidea/ci_hdrc_imx.c
@@ -103,7 +103,8 @@ static struct imx_usbmisc_data 
*usbmisc_get_init_data(struct device *dev)
 static int ci_hdrc_imx_probe(struct platform_device *pdev)
 {
struct ci_hdrc_imx_data *data;
-   struct ci_hdrc_platform_data pdata = {
+   struct ci_hdrc_platform_data *ci_pdata;
+   struct ci_hdrc_platform_data ci_pdata_default = {
.name   = dev_name(&pdev->dev),
.capoffset  = DEF_CAPOFFSET,
.flags  = CI_HDRC_REQUIRE_TRANSCEIVER |
@@ -114,6 +115,10 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
of_match_device(ci_hdrc_imx_dt_ids, &pdev->dev);
const struct ci_hdrc_imx_platform_flag *imx_platform_flag = of_id->data;
 
+   ci_pdata = ci_hdrc_get_platdata(&pdev->dev, &ci_pdata_default);
+   if (IS_ERR(ci_pdata))
+   return PTR_ERR(ci_pdata);
+
data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
if (!data) {
dev_err(&pdev->dev, "Failed to allocate ci_hdrc-imx data!\n");
@@ -147,10 +152,10 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
goto err_clk;
}
 
-   pdata.usb_phy = data->phy;
+   ci_pdata->usb_phy = data->phy;
 
if (imx_platform_flag->flags & CI_HDRC_IMX_IMX28_WRITE_FIX)
-   pdata.flags |= CI_HDRC_IMX28_WRITE_FIX;
+   ci_pdata->flags |= CI_HDRC_IMX28_WRITE_FIX;
 
ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
if (ret)
@@ -166,8 +171,7 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev)
}
 
data->ci_pdev = ci_hdrc_add_device(&pdev->dev,
-   pdev->resource, pdev->num_resources,
-   &pdata);
+   pdev->resource, pdev->num_resources, ci_pdata);
if (IS_ERR(data->ci_pdev)) {
ret = PTR_ERR(data->ci_pdev);
dev_err(&pdev->dev,
-- 
2.1.0

--
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/6] usb: chipidea: use ci_hdrc_get_platdata in ci_hdrc_msm

2014-10-30 Thread Antoine Tenart
Use the newly introduced ci_hdrc_get_platdata function to help setup the
chipidea internal ci_hdrc_platform_data structure.

Signed-off-by: Antoine Tenart 
---
 drivers/usb/chipidea/ci_hdrc_msm.c | 10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/chipidea/ci_hdrc_msm.c 
b/drivers/usb/chipidea/ci_hdrc_msm.c
index 3edf969ed797..32eeab404911 100644
--- a/drivers/usb/chipidea/ci_hdrc_msm.c
+++ b/drivers/usb/chipidea/ci_hdrc_msm.c
@@ -55,10 +55,15 @@ static struct ci_hdrc_platform_data ci_hdrc_msm_platdata = {
 static int ci_hdrc_msm_probe(struct platform_device *pdev)
 {
struct platform_device *plat_ci;
+   struct ci_hdrc_platform_data *ci_pdata;
struct usb_phy *phy;
 
dev_dbg(&pdev->dev, "ci_hdrc_msm_probe\n");
 
+   ci_pdata = ci_hdrc_get_platdata(&pdev->dev, &ci_hdrc_msm_platdata);
+   if (IS_ERR(ci_pdata))
+   return PTR_ERR(ci_pdata);
+
/*
 * OTG(PHY) driver takes care of PHY initialization, clock management,
 * powering up VBUS, mapping of registers address space and power
@@ -68,11 +73,10 @@ static int ci_hdrc_msm_probe(struct platform_device *pdev)
if (IS_ERR(phy))
return PTR_ERR(phy);
 
-   ci_hdrc_msm_platdata.usb_phy = phy;
+   ci_pdata->usb_phy = phy;
 
plat_ci = ci_hdrc_add_device(&pdev->dev,
-   pdev->resource, pdev->num_resources,
-   &ci_hdrc_msm_platdata);
+   pdev->resource, pdev->num_resources, ci_pdata);
if (IS_ERR(plat_ci)) {
dev_err(&pdev->dev, "ci_hdrc_add_device failed!\n");
return PTR_ERR(plat_ci);
-- 
2.1.0

--
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 01/20] usb: dwc3: enable hibernation if to be supported

2014-10-30 Thread Huang Rui
On Thu, Oct 30, 2014 at 12:35:56PM +0100, Arnd Bergmann wrote:
> On Thursday 30 October 2014 18:08:26 Huang Rui wrote:
> > It enables hibernation if the function is set in coreConsultant.
> > 
> > Suggested-by: Felipe Balbi 
> > Signed-off-by: Huang Rui 
> > Signed-off-by: Felipe Balbi 
> > 
> 
> Something went wrong with the Signed-off-by lines here. 
> You should never add someone else's Signed-off-by below yours.
> 
> I took a brief look at the entire series and the patches all look good
> to me, but you have made the same mistake with the Signed-off-by
> multiple times.
> 

Actually, this patch is applied at testing branch, so Felipe added his
Signed-off-by. Please see:

http://git.kernel.org/cgit/linux/kernel/git/balbi/usb.git/commit/?h=testing/next&id=5c9669f92c9441d134f7776274e9afb71c246acc

I just update some comment description in V4.

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 1/6] usb: chipidea: setup ci_hdrc_platform_data in core driver

2014-10-30 Thread Antoine Tenart
On Thu, Oct 30, 2014 at 12:36:41PM +0100, Antoine Tenart wrote:
> Hello,
> 
> This series introduce the ci_hdrc_get_platdata function to help setting up the
> ChipIdea internal ci_hdrc_platform_data structure. This helps avoiding
> duplicating code.
> 
> This series comes from a duscission on Berlin's USB pacthes where it was asked
> to move the PHY phandle handling in the ChipIdea core[1].
> 
> With the introduction of the ci_hdrc_get_platdata function, the old
> ci_get_platdata function is removed. Changes in ChipIdea drivers have also 
> been
> made.
> 
> This series is needed for the Berlin USB support and has been tested with an
> updated version of the USB Berlin driver (not in mainline yet).
> 
> Thanks,
> 
> Antoine
> 
> [1] 
> http://lists.infradead.org/pipermail/linux-arm-kernel/2014-October/292383.html
> 

Of course, this is the cover letter so it should be [PATCH 0/6].

This series depends on the generic PHY framework support in USB and CI:
https://lkml.org/lkml/2014/10/28/807


Antoine

-- 
Antoine Ténart, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.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: kobil_sct: Remove unused transfer buffer allocs

2014-10-30 Thread Johan Hovold
Hi Peter,

Forgot to reply to this one.

On Wed, Oct 22, 2014 at 07:40:20AM -0400, Peter Hurley wrote:
> On 10/19/2014 01:12 PM, Johan Hovold wrote:
> > [ +CC: Jiri, Alan, linux-serial ]
> > 
> > On Thu, Oct 16, 2014 at 02:09:29PM -0400, Peter Hurley wrote:
> >> On 10/16/2014 01:59 PM, Peter Hurley wrote:

> >>> @@ -541,10 +531,6 @@ static int kobil_ioctl(struct tty_struct *tty,
> >>>  
> >>>   switch (cmd) {
> >>>   case TCFLSH:
> >>> - transfer_buffer = kmalloc(transfer_buffer_length, GFP_KERNEL);
> >>> - if (!transfer_buffer)
> >>> - return -ENOBUFS;
> >>> -
> >>>   result = usb_control_msg(port->serial->dev,
> >>> usb_sndctrlpipe(port->serial->dev, 0),
> >>> SUSBCRequest_Misc,
> >>> @@ -559,7 +545,6 @@ static int kobil_ioctl(struct tty_struct *tty,
> >>>   dev_dbg(&port->dev,
> >>>   "%s - Send reset_all_queues (FLUSH) URB returns: %i\n",
> >>>   __func__, result);
> >>> - kfree(transfer_buffer);
> >>>   return (result < 0) ? -EIO: 0;
> >>^^^
> >> Returning 0 is almost certainly wrong; no further processing for
> >> TCFLSH is performed.
> > 
> > Indeed.
> > 
> >> Only this driver returns 0 (of all the tty drivers in mainline).
> >>
> >> Returning -ENOIOCTLCMD allows further processing to continue;
> >> especially the line discipline's input flushing, if TCIFLUSH/TCIOFLUSH.
> > 
> > That doesn't seem like a very good idea, and only two *staging* drivers
> > try to play such games (i.e. pretending not to implement the ioctl) as
> > far as I can see.
> 
> Well, returning EIONOCTLCMD is the standard method of ioctl passthrough
> from driver to line discipline.

I disagree with you there. AFAICS only these two staging drivers are
abusing the meaning of EIONOCTLCMD (unrecognised ioctl) to have the
line discipline also act on the ioctl.

> Since driver 'input buffer' flushing is not currently supported by the
> core, this seems the only available workaround.

That is true. But I doubt we should use these two staging drivers as a
model for how this should be handled, if it's at all needed.

> > The only non-staging tty driver which appears to implement TCFLSH,
> > ipwireless, calls tty_perform_flush directly to flush the ldisc buffers.
> > That doesn't seem right either.
> 
> I'm not sure why ipwireless does this; I can only guess that it's a
> workaround for some line discipline that doesn't use n_tty_ioctl_helper().
> 
> > Shouldn't this be fixed by removing TCFLSH from these tty drivers'
> > ioctl callbacks and implementing flush_buffer()?
> >
> > The staging drivers also flush a device input buffer, which could be
> > done in a new callback if at all needed.
> 
> Yeah, that's why the Digi staging drivers are trapping TCFLSH; so they
> can clear input buffers on TCIFLUSH/TCIOFLUSH.
> 
> I'd like to better understand the hardware and driver before extending
> the core interface; this driver may not even run.

Agreed.

> For example, this driver clears its 'input buffer' for
> tcsetattr(TCSADRAIN or TCSAFLUSH). But that doesn't make sense considering
> that the flip buffers could have data in them that isn't flushed; the tty
> core doesn't dump the flip buffers because 'input processing' has not
> happened on that data.
> 
> I think when/if these drivers are promoted is when/if the core interface
> should address this. Just my opinion, though :)

I agree.

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] USB: kobil_sct: Remove unused transfer buffer allocs

2014-10-30 Thread Peter Hurley
On 10/30/2014 08:08 AM, Johan Hovold wrote:
> Hi Peter,
> 
> Forgot to reply to this one.
> 
> On Wed, Oct 22, 2014 at 07:40:20AM -0400, Peter Hurley wrote:
>> On 10/19/2014 01:12 PM, Johan Hovold wrote:
>>> [ +CC: Jiri, Alan, linux-serial ]
>>>
>>> On Thu, Oct 16, 2014 at 02:09:29PM -0400, Peter Hurley wrote:
 On 10/16/2014 01:59 PM, Peter Hurley wrote:
> 
> @@ -541,10 +531,6 @@ static int kobil_ioctl(struct tty_struct *tty,
>  
>   switch (cmd) {
>   case TCFLSH:
> - transfer_buffer = kmalloc(transfer_buffer_length, GFP_KERNEL);
> - if (!transfer_buffer)
> - return -ENOBUFS;
> -
>   result = usb_control_msg(port->serial->dev,
> usb_sndctrlpipe(port->serial->dev, 0),
> SUSBCRequest_Misc,
> @@ -559,7 +545,6 @@ static int kobil_ioctl(struct tty_struct *tty,
>   dev_dbg(&port->dev,
>   "%s - Send reset_all_queues (FLUSH) URB returns: %i\n",
>   __func__, result);
> - kfree(transfer_buffer);
>   return (result < 0) ? -EIO: 0;
^^^
 Returning 0 is almost certainly wrong; no further processing for
 TCFLSH is performed.
>>>
>>> Indeed.
>>>
 Only this driver returns 0 (of all the tty drivers in mainline).

 Returning -ENOIOCTLCMD allows further processing to continue;
 especially the line discipline's input flushing, if TCIFLUSH/TCIOFLUSH.
>>>
>>> That doesn't seem like a very good idea, and only two *staging* drivers
>>> try to play such games (i.e. pretending not to implement the ioctl) as
>>> far as I can see.
>>
>> Well, returning EIONOCTLCMD is the standard method of ioctl passthrough
>> from driver to line discipline.
> 
> I disagree with you there. AFAICS only these two staging drivers are
> abusing the meaning of EIONOCTLCMD (unrecognised ioctl) to have the
> line discipline also act on the ioctl.

Sorry, I wasn't as clear as I should have been here.

My point was that every driver gets ioctl(TCFLSH) and returns ENOIOCTLCMD
so that the line discipline will handle it. You're absolutely correct, in
that, only these drivers (and ipwireless) doing anything with TCFLSH

>> Since driver 'input buffer' flushing is not currently supported by the
>> core, this seems the only available workaround.
> 
> That is true. But I doubt we should use these two staging drivers as a
> model for how this should be handled, if it's at all needed.

Right. My comments implied approval of the design, which I don't.

The main problem with the existing design is that it allows for a
significant variation in how ioctl(WHATEVER) is handled by various
driver/ldisc combinations. That's a bad thing because it makes
audit/review really time-consuming and makes changes prone to userspace
regressions.

Regards,
Peter Hurley
--
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 RESEND V4 2/9] mailbox: Add NVIDIA Tegra XUSB mailbox driver

2014-10-30 Thread Thierry Reding
On Wed, Oct 29, 2014 at 11:02:36AM -0700, Andrew Bresticker wrote:
[...]
> > Maybe something like this patch would be more correct in handling
> > this:
> >
> > diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
> > index afcb430508ec..85691a7d8ca6 100644
> > --- a/drivers/mailbox/mailbox.c
> > +++ b/drivers/mailbox/mailbox.c
> > @@ -117,10 +117,11 @@ static void poll_txdone(unsigned long data)
> > struct mbox_chan *chan = &mbox->chans[i];
> >
> > if (chan->active_req && chan->cl) {
> > -   resched = true;
> > txdone = chan->mbox->ops->last_tx_done(chan);
> > if (txdone)
> > tx_tick(chan, 0);
> > +   else
> > +   resched = true;
> > }
> > }
> 
> ... but we still need to re-arm the timer if tx_tick() submits another
> message.  Perhaps the better thing to do is to have msg_submit() arm
> the timer.

I think we need both. If the last transmission isn't done yet we still
want to keep polling. And we also want to poll if a new message is sent
subsequently.

Perhaps it would be as easy as moving the poll handling code from
mbox_send_message() (if (chan->txdone_method == TXDONE_BY_POLL)) into
msg_submit()? That has the additional advantage of being able to omit
the polling when an error happens during the mbox' .send_data().

> >> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >> + if (!res)
> >> + return -ENODEV;
> >> + mbox->regs = devm_ioremap(&pdev->dev, res->start, 
> >> resource_size(res));
> >> + if (!mbox->regs)
> >> + return -ENOMEM;
> >
> > This doesn't look right. Upon closer inspection, the reason why you
> > don't use devm_request_resource() is because these registers are shared
> > with the XHCI controller.
> >
> > Perhaps a better design would be for the XHCI driver to expose the
> > mailbox rather than split it off into a separate driver.
> 
> Well that's what I had originally, but then it was suggested I make it
> a separate driver.
> 
> Stephen also brought this up during review and suggested that some
> sort of MFD would be the best way to structure this, but was fine with
> the way I have it now.  I can move this driver around (again) if you
> feel that strongly about it...

We've had this discussion only recently about the memory controller
driver. It used to be that there were separate drivers for the memory
controller part and the IOMMU part. But that resulted in hilarious DT
bindings. Granted, most of the issues had to do with unfortunate inter-
leaving of register regions, but generally I think there's nothing wrong
with exposing multiple interfaces from a single driver.

The downside of course is that you have to choose which subsystem is the
primary one and then get it merged via that tree. There's also a problem
in that the driver is now in a different directory than the others, so a
subsystem-wide change may not notice the "out-of-place" driver. But I
think we have pretty good tools to help with this type of thing.

Also, managing all the resources (regulators, clocks, resets, ...) that
a hardware block requires is much easier to do in a single driver than
spread over several. MFD could be an option somewhere halfway between
the two but also has some downsides. Most importantly it isn't going to
scale in the long run.

> >> diff --git a/include/soc/tegra/xusb.h b/include/soc/tegra/xusb.h
> >> new file mode 100644
> >> index 000..cfe211d
> >> --- /dev/null
> >> +++ b/include/soc/tegra/xusb.h
> >
> > Perhaps this should really be named xusb-mbox.h?
> 
> I'd prefer to leave it as xusb.h so that any other XUSB-related
> definitions can be left here.

Okay, that makes sense given that the mbox really is part of the larger
XUSB block.

Thierry


pgpLWf84m7vJo.pgp
Description: PGP signature


Re: [PATCH usb 00/32] cleanup on resource check

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 09:08:45AM +0530, Varka Bhadram wrote:
> On 10/30/2014 09:05 AM, Varka Bhadram wrote:
> >Hi Balbi,
> >
> >On 10/30/2014 08:13 AM, Felipe Balbi wrote:
> >
> >>Hi,
> >>
> >>On Thu, Oct 30, 2014 at 06:42:08AM +0530, Varka Bhadram wrote:
> >>>On Thursday 30 October 2014 02:43 AM, Alan Stern wrote:
> On Wed, 29 Oct 2014, Varka Bhadram wrote:
> 
> >This series removes the duplication of sanity check for
> >platform_get_resource() return resource. It will be checked
> >with devm_ioremap_resource()
> >
> >This series based on usb/master.
> >
> >Varka Bhadram (32):
> >   host: ehci-atmel: remove duplicate check on resource
> >   host: ehci-exynos: remove duplicate check on resource
> >   host: ehci-fsl: remove duplicate check on resource
> >   dwc3: core: remove duplicate check on resource
> >   dwc3: dwc3-keystone: remove duplicate check on resource
> >   renesas_usbhs: common: remove duplicate check on resource
> >   phy: phy-rcar-usb: remove duplicate check on resource
> >   musb: musb_dsps: remove duplicate check on resource
> >   musb: musb_core: remove duplicate check on resource
> >   host: xhci-plat: remove duplicate check on resource
> >   host: uhci-platform: remove duplicate check on resource
> >   host: ohci-st: remove duplicate check on resource
> >   host: ohci-spear: remove duplicate check on resource
> >   host: ehci-sh: remove duplicate check on resource
> >   host: ohci-pxa27x: remove duplicate check on resource
> >   host: ohci-platform: remove duplicate check on resource
> >   host: ohci-octeon: remove duplicate check on resource
> >   host: ohci-jz4740: remove duplicate check on resource
> >   host: ohci-exynos: remove duplicate check on resource
> >   host: ohci-da8xx: remove duplicate check on resource
> >   host: ohci-at91: remove duplicate check on resource
> >   host: ehci-w90x900: remove duplicate check on resource
> >   host: ehci-tegra: remove duplicate check on resource
> >   host: ehci-st: remove duplicate check on resource
> >   host: ehci-spear: remove duplicate check on resource
> >   host: ehci-sead3: remove duplicate check on resource
> >   host: ehci-platform: remove duplicate check on resource
> >   host: ehci-orion: remove duplicate check on resource
> >   host: ehci-octeon: remove duplicate check on resource
> >   host: ehci-mxc: remove duplicate check on resource
> >   host: ehci-mv: remove duplicate check on resource
> >   host: ehci-msm: remove duplicate check on resource
> For all the ehci, ohci, and uhci changes:
> 
> Acked-by: Alan Stern 
> >>>Thanx for your ACK.
> >>>
> I didn't look carefully at the others, but the dwc3-core patch (4/32)
> definitely seemed wrong.
> 
> >>>I don't find any wrong in the code.
> >>Really ? Look more carefuly
> >>
> >>>static int dwc3_probe(struct platform_device *pdev)
> >>>{
> >>>struct device*dev = &pdev->dev;
> >>>struct dwc3_platform_data *pdata = dev_get_platdata(dev);
> >>>struct device_node*node = dev->of_node;
> >>>struct resource*res;
> >>>struct dwc3*dwc;
> >>>
> >>>intret;
> >>>
> >>>void __iomem*regs;
> >>>void*mem;
> >>>
> >>>mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK,
> >>>GFP_KERNEL);
> >>>if (!mem)
> >>>return -ENOMEM;
> >>>
> >>>dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1);
> >>>dwc->mem = mem;
> >>>dwc->dev = dev;
> >>>
> >>>res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> >>>if (!res) {
> >>>dev_err(dev, "missing IRQ\n");
> >>>return -ENODEV;
> >>>}
> >>>dwc->xhci_resources[1].start = res->start;
> >>>dwc->xhci_resources[1].end = res->end;
> >>>dwc->xhci_resources[1].flags = res->flags;
> >>>dwc->xhci_resources[1].name = res->name;
> >>>
> >>>res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >>>/*
> >>> * Request memory region but exclude xHCI regs,
> >>> * since it will be requested by the xhci-plat driver.
> >>> */
> >>>regs = devm_ioremap_resource(dev, res);
> >>because you moved this call here...
> >>
> >>>if (IS_ERR(regs))
> >>>return PTR_ERR(regs);
> >>>
> >>>dwc->xhci_resources[0].start = res->start;
> >>>dwc->xhci_resources[0].end = dwc->xhci_resources[0].start +
> >>>DWC3_XHCI_REGS_END;
> >>>dwc->xhci_resources[0].flags = res->flags;
> >>>dwc->xhci_resources[0].name = res->name;
> >>>
> >>>res->start += DWC3_GLOBALS_REGS_START;
> >>... before doing this, you're now ioremapping the entire space
> >>*INCLUDING* the XHCI address space, which means that you have just
> >>broken every single platform using this driver in host mode.
> >>
> >In that case, i will drop this patch.
> >
> >Is other patches are fine except #04/32 patch..?
> >
> Can i add yo

Re: [PATCH RESEND V4 4/9] pinctrl: tegra-xusb: Add USB PHY support

2014-10-30 Thread Thierry Reding
On Wed, Oct 29, 2014 at 12:43:36PM -0700, Andrew Bresticker wrote:
> >> diff --git a/drivers/pinctrl/pinctrl-tegra-xusb.c 
> >> b/drivers/pinctrl/pinctrl-tegra-xusb.c
[...]
> >> +
> >> + for (i = 0; i < TEGRA_XUSB_USB3_PHYS; i++) {
> >> + if (phy == padctl->phys[TEGRA_XUSB_PADCTL_USB3_P0 + i])
> >> + break;
> >
> > You could simply return i here and then BUG_ON unconditionally.
> >
> >> + }
> >> + BUG_ON(i == TEGRA_XUSB_USB3_PHYS);
> >> +
> >> + return i;
> >> +}
> >
> > Actually, thinking about it some more, perhaps making this a WARN_ON()
> > and returning an error so that we can continue and propagate the error
> > would be more useful. BUG_ON() will completely hang the kernel with no
> > way out but rebooting. WARN_ON() will give a hint about something being
> > wrong and returning an error will allow the kernel to continue to run,
> > which might be the only way to diagnose and fix the problem, even if it
> > means that USB 3.0 support will be disabled.
> 
> I felt like BUG_ON is more appropriate here.  Hitting this case means
> there's a bug in the PHY core or a driver has passed a bogus pointer
> and the stack dump produced by the BUG_ON should make it obvious as to
> what the issue is.  I don't feel too strongly about it though.

The problem with BUG_ON() is that you won't be able to go any further.
So if this were to happen on a device with no serial you might not even
get to a point where you actually see an error message. Handling this
more gracefully by propagating the error code and failing .probe() does
not seem overly complicated and the WARN_ON() output will hopefully
still be noticed (it probably will be after the user can't get USB to
work).

Consider for example the case where a user has only one device to test
and report bugs on. If we crash the device using BUG_ON() they may not
be able to report a bug at all (or recover by reverting to some known
good kernel version). A WARN_ON() will hopefully be enough to get
noticed and unless users rely on XUSB for the root filesystem they'd
still be able to open up a web browser and file a bug report with the
oops attached.

> >> + u32 value, offset;
> >> +
> >> + padctl->usb3_ports[port].context_saved = true;
> >
> > What's the purpose of saving the context here? This seems to be
> > triggered by a request from XUSB, but it's then restored when the PHY is
> > powered on. How does that even happen? Won't the PHY stay powered all
> > the time? Or shouldn't the context be saved when powering off the PHY?
> 
> Right, context is saved when requested by the XUSB controller and
> restored on power on.  This is used during runtime power-gating or LP0
> where the PHYs are powered off and on and this context is lost.
> Neither of these are currently implemented by the host driver,
> however.
> 
> As far as why the context is saved upon request and not at power off,
> I'm not sure.  I've observed that these messages come in when a USB3.0
> device is enumerated.  Perhaps the XUSB controller is doing some sort
> of tuning.

I see. Perhaps these values are calibrated by the firmware? In that case
I guess it could redo the calibration. I'll see if I can find out why it
is necessary to store this.

> 
> >> @@ -936,6 +2098,18 @@ static int tegra_xusb_padctl_probe(struct 
> >> platform_device *pdev)
> >>   goto unregister;
> >>   }
> >>
> >> + INIT_WORK(&padctl->mbox_req_work, tegra_xusb_phy_mbox_work);
> >> + padctl->mbox_client.dev = &pdev->dev;
> >> + padctl->mbox_client.tx_block = true;
> >> + padctl->mbox_client.tx_tout = 0;
> >> + padctl->mbox_client.rx_callback = tegra_xusb_phy_mbox_rx;
> >> + padctl->mbox_chan = mbox_request_channel(&padctl->mbox_client, 0);
> >> + if (IS_ERR(padctl->mbox_chan)) {
> >> + err = PTR_ERR(padctl->mbox_chan);
> >> + dev_err(&pdev->dev, "failed to request mailbox: %d\n", err);
> >> + goto unregister;
> >> + }
> >
> > I think this should be done before the registering the PHY provider so
> > that we don't expose one (even for only a very short time) before we
> > haven't made sure that it can be used.
> >
> > Also, this effectively makes the mailbox mandatory, which means that the
> > above code is going to break on older DTBs. So I think we have no choice
> > but to make mailbox (and hence XUSB) support optional.
> 
> I understand the need for binding stability, but it's not like these
> bindings have been around for very long (a release or two?) and this
> series has existed for almost the same amount of time.  Are there
> really any DTBs out there that are going to break because of this?

Every DTB created from a kernel version that has the original binding
but not the one modified as part of this series is going to break. Last
time I checked there weren't any exceptions to this rule. Note, though,
that the rule is that existing functionality must not break. That is,
SATA and PCIe should 

Re: [PATCH RESEND V4 5/9] of: Add NVIDIA Tegra xHCI controller binding

2014-10-30 Thread Thierry Reding
On Wed, Oct 29, 2014 at 09:37:14AM -0700, Andrew Bresticker wrote:
> On Wed, Oct 29, 2014 at 2:43 AM, Thierry Reding
>  wrote:
> > On Tue, Oct 28, 2014 at 03:27:50PM -0700, Andrew Bresticker wrote:
> > [...]
> >> diff --git 
> >> a/Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt
> >>  
> >> b/Documentation/devicetree/bindings/pinctrl/nvidia,tegra124-xusb-padctl.txt
> > [...]
> >> +Optional properties:
> >> +---
> >> +- vbus-{0,1,2}-supply: VBUS regulator for the corresponding UTMI pad.
> >> +- vddio-hsic-supply: VDDIO regulator for the HSIC pads.
> >> +- nvidia,usb3-port-{0,1}-lane: PCIe/SATA lane to which the corresponding 
> >> USB3
> >> +  port is mapped.  See  for the 
> >> list
> >> +  of valid values.
> >
> > I dislike how we now need to provide a list of all pins in the header
> > file, where previously we used strings for this. This could become very
> > ugly if the set of pins changes in future generations of this IP block.
> >
> > Could we instead derive this from the pinmux nodes? For example you have
> > this in the example below:
> >
> > usb3p0 {
> > nvidia,lanes = "pcie-0";
> > ...
> > };
> >
> > Perhaps what we need is to either key off the node name or add another
> > property, such as:
> >
> > nvidia,usb3-port = <0>;
> >
> > This would match the nvidia,usb2-port property that you've added below.
> 
> That is actually how I described the USB3 port to SS lane mapping
> originally, but in review of an earlier version of this series,
> Stephen suggested that I make it a separate, not pinconfig property
> since it wasn't a value written directly to the hardware.  I'm fine
> with changing it back as the pinconfig property makes more sense to me
> as well.

Hmm... I had considered it a mux option of the specific lane. If the
function is usb3, it'd still need to be muxed to one of the ports. So
it's additional information associated with the usb3 function.

I did look through the driver changes and can't really make out which
part of the code actually performs this assignment. Can you point me to
it?

Thierry


pgpaADdjFNOFz.pgp
Description: PGP signature


Re: [PATCHv6 1/8] usb: dwc2: Update the gadget driver to use common dwc2_hsotg structure

2014-10-30 Thread Felipe Balbi
On Tue, Oct 28, 2014 at 06:25:42PM -0500, dingu...@opensource.altera.com wrote:
> From: Dinh Nguyen 
> 
> Adds the gadget data structure and appropriate data structure pointers
> to the common dwc2_hsotg data structure. To keep the driver data
> dereference code looking clean, the gadget variable declares are only 
> available
> for peripheral and dual-role mode. This is needed so that the dwc2_hsotg data
> structure can be used by the hcd and gadget drivers.
> 
> Updates gadget.c to use the dwc2_hsotg data structure and gadget pointers
> that have been moved into the common dwc2_hsotg structure.
> 
> Signed-off-by: Dinh Nguyen 
> Signed-off-by: Paul Zimmerman 
> ---
> v5: Keep the changes to mininum and maintain hcd and gadget driver to build
> and work separately. Use IS_ENABLED() instead of #if defined
> v3: Updated with paulz's suggestion to avoid double pointers.
> v2: Left the function parameter name as 'hsotg' and just changed its type.
> ---
>  drivers/usb/dwc2/core.h   | 156 
> --
>  drivers/usb/dwc2/gadget.c | 145 +-
>  2 files changed, 154 insertions(+), 147 deletions(-)
> 
> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
> index 55c90c5..96c283d 100644
> --- a/drivers/usb/dwc2/core.h
> +++ b/drivers/usb/dwc2/core.h
> @@ -84,7 +84,7 @@ static const char * const s3c_hsotg_supply_names[] = {
>   */
>  #define EP0_MPS_LIMIT   64
>  
> -struct s3c_hsotg;
> +struct dwc2_hsotg;
>  struct s3c_hsotg_req;
>  
>  /**
> @@ -130,7 +130,7 @@ struct s3c_hsotg_req;
>  struct s3c_hsotg_ep {
>   struct usb_ep   ep;
>   struct list_headqueue;
> - struct s3c_hsotg*parent;
> + struct dwc2_hsotg   *parent;
>   struct s3c_hsotg_req*req;
>   struct dentry   *debugfs;
>  
> @@ -155,67 +155,6 @@ struct s3c_hsotg_ep {
>  };
>  
>  /**
> - * struct s3c_hsotg - driver state.
> - * @dev: The parent device supplied to the probe function
> - * @driver: USB gadget driver
> - * @phy: The otg phy transceiver structure for phy control.
> - * @uphy: The otg phy transceiver structure for old USB phy control.
> - * @plat: The platform specific configuration data. This can be removed once
> - * all SoCs support usb transceiver.
> - * @regs: The memory area mapped for accessing registers.
> - * @irq: The IRQ number we are using
> - * @supplies: Definition of USB power supplies
> - * @phyif: PHY interface width
> - * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos.
> - * @num_of_eps: Number of available EPs (excluding EP0)
> - * @debug_root: root directrory for debugfs.
> - * @debug_file: main status file for debugfs.
> - * @debug_fifo: FIFO status file for debugfs.
> - * @ep0_reply: Request used for ep0 reply.
> - * @ep0_buff: Buffer for EP0 reply data, if needed.
> - * @ctrl_buff: Buffer for EP0 control requests.
> - * @ctrl_req: Request for EP0 control packets.
> - * @setup: NAK management for EP0 SETUP
> - * @last_rst: Time of last reset
> - * @eps: The endpoints being supplied to the gadget framework
> - */
> -struct s3c_hsotg {
> - struct device*dev;
> - struct usb_gadget_driver *driver;
> - struct phy   *phy;
> - struct usb_phy   *uphy;
> - struct s3c_hsotg_plat*plat;
> -
> - spinlock_t  lock;
> -
> - void __iomem*regs;
> - int irq;
> - struct clk  *clk;
> -
> - struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
> -
> - u32 phyif;
> - int fifo_mem;
> - unsigned intdedicated_fifos:1;
> - unsigned char   num_of_eps;
> - u32 fifo_map;
> -
> - struct dentry   *debug_root;
> - struct dentry   *debug_file;
> - struct dentry   *debug_fifo;
> -
> - struct usb_request  *ep0_reply;
> - struct usb_request  *ctrl_req;
> - u8  ep0_buff[8];
> - u8  ctrl_buff[8];
> -
> - struct usb_gadget   gadget;
> - unsigned intsetup;
> - unsigned long   last_rst;
> - struct s3c_hsotg_ep *eps;
> -};
> -
> -/**
>   * struct s3c_hsotg_req - data transfer request
>   * @req: The USB gadget request
>   * @queue: The list of requests for the endpoint this is queued for.
> @@ -229,6 +168,7 @@ struct s3c_hsotg_req {
>   unsigned char   mapped;
>  };
>  
> +#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || 
> IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
>  #define call_gadget(_hs, _entry) \
>  do { \
>   if ((_hs)->gadget.speed != USB_SPEED_UNKNOWN && \
> @@ -238,6 +178,9 @@ do { \
>   spin_lock(&_hs->lock); \
>   } \
>  } while (0)
> +#else
> +#define call_gadget(_hs, _entry) do {} while (0)
> +#endif
>  
>  struct dwc2_hsotg;
>  struct dwc2_host_chan;
> @@ -495,11 +43

Re: [PATCHv6 2/8] usb: dwc2: Move gadget probe function into platform code

2014-10-30 Thread Felipe Balbi
On Tue, Oct 28, 2014 at 06:25:43PM -0500, dingu...@opensource.altera.com wrote:
> From: Dinh Nguyen 
> 
> This patch will aggregate the probing of gadget/hcd driver into platform.c.
> The gadget probe funtion is converted into gadget_init that is now only
> responsible for gadget only initialization. All the gadget resources is now

s/resources is/resources are

> handled by platform.c
> 
> Since the host workqueue will not get initialized if the driver is configured
> for peripheral mode only. Thus we need to check for wq_otg before calling
> queue_work().

this period character in the middle of the sentence doesn't make sense,
perhaps a comma is what you want ? The sentence can be improved too:

"Since the host workqueue will not get initialized if the drier is
configured for peripheral mode only, we add a check for wq_otg before
calling queue_work()."

> Also, we move spin_lock_init to common location for both host and gadget that
> is either in platform.c or pci.c.
> 
> We also ove suspend/resume code to common platform code, and update it to use
> the new PM API (struct dev_pm_ops).

updating to dev_pm_ops should really be a separate patch.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCHv6 4/8] usb: dwc2: Update common interrupt handler to call gadget interrupt handler

2014-10-30 Thread Felipe Balbi
Hi,

On Tue, Oct 28, 2014 at 06:25:45PM -0500, dingu...@opensource.altera.com wrote:
> From: Dinh Nguyen 
> 
> Make dwc2_handle_common_intr call the gadget interrupt function when operating
> in peripheral mode. Remove the spinlock functions in s3c_hsotg_irq as
> dwc2_handle_common_intr() already has the spinlocks.
> 
> Move the registeration of the IRQ to common code for platform and PCI.
> 
> Remove duplicate interrupt conditions that was in gadget, as those are handled
> by dwc2 common interrupt handler.
> 
> Signed-off-by: Dinh Nguyen 
> Acked-by: Paul Zimmerman 
> ---
> v5: remove individual devm_request_irq from gadget and hcd, and place a
> single devm_request_irq in platform and pci.
> v2: Keep interrupt handler for host and peripheral modes separate
> ---
>  drivers/usb/dwc2/core.c  | 10 
>  drivers/usb/dwc2/core.h  |  3 +++
>  drivers/usb/dwc2/core_intr.c |  3 +++
>  drivers/usb/dwc2/gadget.c| 57 
> ++--
>  drivers/usb/dwc2/pci.c   |  6 +
>  drivers/usb/dwc2/platform.c  |  9 +++
>  6 files changed, 23 insertions(+), 65 deletions(-)
> 
> diff --git a/drivers/usb/dwc2/core.c b/drivers/usb/dwc2/core.c
> index d926945..7605850b 100644
> --- a/drivers/usb/dwc2/core.c
> +++ b/drivers/usb/dwc2/core.c
> @@ -458,16 +458,6 @@ int dwc2_core_init(struct dwc2_hsotg *hsotg, bool 
> select_phy, int irq)
>   /* Clear the SRP success bit for FS-I2c */
>   hsotg->srp_success = 0;
>  
> - if (irq >= 0) {
> - dev_dbg(hsotg->dev, "registering common handler for irq%d\n",
> - irq);
> - retval = devm_request_irq(hsotg->dev, irq,
> -   dwc2_handle_common_intr, IRQF_SHARED,
> -   dev_name(hsotg->dev), hsotg);
> - if (retval)
> - return retval;
> - }
> -
>   /* Enable common interrupts */
>   dwc2_enable_common_interrupts(hsotg);
>  
> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
> index 80d29c7..ec70862 100644
> --- a/drivers/usb/dwc2/core.h
> +++ b/drivers/usb/dwc2/core.h
> @@ -967,6 +967,7 @@ extern int s3c_hsotg_suspend(struct dwc2_hsotg *dwc2);
>  extern int s3c_hsotg_resume(struct dwc2_hsotg *dwc2);
>  extern int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq);
>  extern void s3c_hsotg_core_init(struct dwc2_hsotg *dwc2);
> +irqreturn_t s3c_hsotg_irq(int irq, void *pw);
>  #else
>  static inline int s3c_hsotg_remove(struct dwc2_hsotg *dwc2)
>  { return 0; }
> @@ -977,6 +978,8 @@ static inline int s3c_hsotg_resume(struct dwc2_hsotg 
> *dwc2)
>  static inline int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int irq)
>  { return 0; }
>  static inline void s3c_hsotg_core_init(struct dwc2_hsotg *dwc2) {}
> +static inline irqreturn_t s3c_hsotg_irq(int irq, void *pw)
> +{ return IRQ_HANDLED; }
>  #endif
>  
>  #if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
> diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
> index b176c2f..b0c14e0 100644
> --- a/drivers/usb/dwc2/core_intr.c
> +++ b/drivers/usb/dwc2/core_intr.c
> @@ -474,6 +474,9 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev)
>  
>   spin_lock(&hsotg->lock);
>  
> + if (dwc2_is_device_mode(hsotg))
> + retval = s3c_hsotg_irq(irq, dev);
> +
>   gintsts = dwc2_read_common_intr(hsotg);
>   if (gintsts & ~GINTSTS_PRTINT)
>   retval = IRQ_HANDLED;
> diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
> index 19d1b03..202f8cc 100644
> --- a/drivers/usb/dwc2/gadget.c
> +++ b/drivers/usb/dwc2/gadget.c
> @@ -2257,14 +2257,13 @@ void s3c_hsotg_core_init(struct dwc2_hsotg *hsotg)
>   * @irq: The IRQ number triggered
>   * @pw: The pw value when registered the handler.
>   */
> -static irqreturn_t s3c_hsotg_irq(int irq, void *pw)
> +irqreturn_t s3c_hsotg_irq(int irq, void *pw)

why ? It would've been a lot easier to just make the IRQ line shared.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCHv6 5/8] usb: dwc2: Add call_gadget functions for perpheral mode interrupts

2014-10-30 Thread Felipe Balbi
On Tue, Oct 28, 2014 at 06:25:46PM -0500, dingu...@opensource.altera.com wrote:
> From: Dinh Nguyen 
> 
> Update the dwc2 wakeup and suspend interrupt functions to use call_gadget
> when the IP is in peripheral mode.

it seems like you're actually fixing a bug here. Those calls weren't
there before.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCHv6 6/8] usb: dwc2: gadget: Do not fail probe if there isn't a clock node

2014-10-30 Thread Felipe Balbi
Hi,

On Tue, Oct 28, 2014 at 06:25:47PM -0500, dingu...@opensource.altera.com wrote:
> From: Dinh Nguyen 
> 
> Since the dwc2 hcd driver is currently not looking for a clock node during
> init, we should not completely fail if there isn't a clock provided.
> For dual-role mode, we will only fail init for a non-clock node error. We
> then update the HCD to only call gadget funtions if there is a proper clock
> node.
> 
> Signed-off-by: Dinh Nguyen 
> ---
> v5: reworked to not access gadget functions from the hcd.
> ---
>  drivers/usb/dwc2/core.h  |  3 +--
>  drivers/usb/dwc2/core_intr.c |  9 ++---
>  drivers/usb/dwc2/hcd.c   |  3 ++-
>  drivers/usb/dwc2/platform.c  | 19 +++
>  4 files changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
> index ec70862..48120c8 100644
> --- a/drivers/usb/dwc2/core.h
> +++ b/drivers/usb/dwc2/core.h
> @@ -660,6 +660,7 @@ struct dwc2_hsotg {
>  #endif
>  #endif /* CONFIG_USB_DWC2_HOST || CONFIG_USB_DWC2_DUAL_ROLE */
>  
> + struct clk *clk;
>  #if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || 
> IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE)
>   /* Gadget structures */
>   struct usb_gadget_driver *driver;
> @@ -667,8 +668,6 @@ struct dwc2_hsotg {
>   struct usb_phy *uphy;
>   struct s3c_hsotg_plat *plat;
>  
> - struct clk *clk;
> -
>   struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
>  
>   u32 phyif;
> diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c
> index 1240875..1608037 100644
> --- a/drivers/usb/dwc2/core_intr.c
> +++ b/drivers/usb/dwc2/core_intr.c
> @@ -339,7 +339,8 @@ static void dwc2_handle_wakeup_detected_intr(struct 
> dwc2_hsotg *hsotg)
>   }
>   /* Change to L0 state */
>   hsotg->lx_state = DWC2_L0;
> - call_gadget(hsotg, resume);
> + if (!IS_ERR(hsotg->clk))
> + call_gadget(hsotg, resume);

instead of exposing the clock detail to the entire driver, add IS_ERR()
checks to resume and suspend instead. In fact, NULL is a valid clock, so
you might as well:

clk = clk_get(foo, bar);
if (IS_ERR(clk))
dwc->clk = NULL;
else
dwc->clk = clk;

Then you don't need any IS_ERR() checks sprinkled around the driver.

> @@ -400,7 +401,8 @@ static void dwc2_handle_usb_suspend_intr(struct 
> dwc2_hsotg *hsotg)
>   "DSTS.Suspend Status=%d HWCFG4.Power Optimize=%d\n",
>   !!(dsts & DSTS_SUSPSTS),
>   hsotg->hw_params.power_optimized);
> - call_gadget(hsotg, suspend);
> + if (!IS_ERR(hsotg->clk))
> + call_gadget(hsotg, suspend);
>   } else {
>   if (hsotg->op_state == OTG_STATE_A_PERIPHERAL) {
>   dev_dbg(hsotg->dev, "a_peripheral->a_host\n");
> @@ -477,7 +479,8 @@ irqreturn_t dwc2_handle_common_intr(int irq, void *dev)
>   spin_lock(&hsotg->lock);
>  
>   if (dwc2_is_device_mode(hsotg))
> - retval = s3c_hsotg_irq(irq, dev);
> + if (!IS_ERR(hsotg->clk))
> + retval = s3c_hsotg_irq(irq, dev);

wait a minute, if there is no clock we don't call the gadget interrupt
handler ? Why ? Who will disable the IRQ line ?

> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> index 44c609f..fa49c72 100644
> --- a/drivers/usb/dwc2/hcd.c
> +++ b/drivers/usb/dwc2/hcd.c
> @@ -1371,7 +1371,8 @@ static void dwc2_conn_id_status_change(struct 
> work_struct *work)
>   hsotg->op_state = OTG_STATE_B_PERIPHERAL;
>   dwc2_core_init(hsotg, false, -1);
>   dwc2_enable_global_interrupts(hsotg);
> - s3c_hsotg_core_init(hsotg);
> + if (!IS_ERR(hsotg->clk))
> + s3c_hsotg_core_init(hsotg);
>   } else {
>   /* A-Device connector (Host Mode) */
>   dev_dbg(hsotg->dev, "connId A\n");
> diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
> index 72f32f7..77c8417 100644
> --- a/drivers/usb/dwc2/platform.c
> +++ b/drivers/usb/dwc2/platform.c
> @@ -217,8 +217,17 @@ static int dwc2_driver_probe(struct platform_device *dev)
>  
>   spin_lock_init(&hsotg->lock);
>   retval = dwc2_gadget_init(hsotg, irq);
> - if (retval)
> - return retval;
> + if (retval) {
> + /*
> +  * We will not fail the driver initialization for dual-role
> +  * if no clock node is supplied. However, all gadget
> +  * functionality will be disabled if a clock node is not
> +  * provided. Host functionality will continue.
> +  * TO-DO: make clock node a requirement for the HCD.
> +  */
> + if (!IS_ERR(hsotg->clk))
> + return retval;
> + }

no here... this should have been taken care by dwc2_gadget_ini

Re: [PATCH v4 01/20] usb: dwc3: enable hibernation if to be supported

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 12:35:56PM +0100, Arnd Bergmann wrote:
> On Thursday 30 October 2014 18:08:26 Huang Rui wrote:
> > It enables hibernation if the function is set in coreConsultant.
> > 
> > Suggested-by: Felipe Balbi 
> > Signed-off-by: Huang Rui 
> > Signed-off-by: Felipe Balbi 
> > 
> 
> Something went wrong with the Signed-off-by lines here. 
> You should never add someone else's Signed-off-by below yours.
> 
> I took a brief look at the entire series and the patches all look good
> to me, but you have made the same mistake with the Signed-off-by
> multiple times.

there are no mistakes, I just asked Huang to resend what I had on my
testing/next because it had not been sent to devicetree mailing list.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v3 1/4] usb: renesas_usbhs: gadget: fix NULL pointer dereference in ep_disable()

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 07:30:16PM +0900, Yoshihiro Shimoda wrote:
> From: Kazuya Mizuguchi 
> 
> This patch fixes an issue that the NULL pointer dereference happens
> when we uses g_audio driver. Since the g_audio driver will call
> usb_ep_disable() in afunc_set_alt() before it calls usb_ep_enable(),
> the uep->pipe of renesas usbhs driver will be NULL. So, this patch
> adds a condition to avoid the oops.
> 
> Signed-off-by: Kazuya Mizuguchi 
> Signed-off-by: Takeshi Kihara 
> Signed-off-by: Yoshihiro Shimoda 
> Cc: 
> ---
>  drivers/usb/renesas_usbhs/mod_gadget.c |3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c 
> b/drivers/usb/renesas_usbhs/mod_gadget.c
> index 2d17c10..2d0903f 100644
> --- a/drivers/usb/renesas_usbhs/mod_gadget.c
> +++ b/drivers/usb/renesas_usbhs/mod_gadget.c
> @@ -602,6 +602,9 @@ static int usbhsg_ep_disable(struct usb_ep *ep)
>   struct usbhsg_uep *uep = usbhsg_ep_to_uep(ep);
>   struct usbhs_pipe *pipe = usbhsg_uep_to_pipe(uep);
>  
> + if (!uep || !uep->pipe)

how can uep ever be NULL ? Look at the definition of usbhsg_ep_to_uep():

#define usbhsg_ep_to_uep(e) container_of(e, struct 
usbhsg_uep, ep)

how can a container_of() ever return NULL ? What you should check if
"ep" (the argument to this function) being NULL.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCHv6 8/8] usb: dwc2: move usb_disabled() call to host driver only

2014-10-30 Thread Felipe Balbi
On Wed, Oct 29, 2014 at 08:35:24AM -0500, Dinh Nguyen wrote:
> 
> 
> On 10/28/14, 8:26 PM, Paul Zimmerman wrote:
> >> From: dingu...@opensource.altera.com 
> >> [mailto:dingu...@opensource.altera.com]
> >> Sent: Tuesday, October 28, 2014 4:26 PM
> >>
> >> Now that platform.c will get built for both Host and Gadget, if we leave 
> >> the
> >> usb_disabled() call in platform.c, it results in the following build error
> >> when (!USB && USB_GADGET) condition is met.
> >>
> >> ERROR: "usb_disabled" [drivers/usb/dwc2/dwc2_platform.ko] undefined!
> >>
> >> Since usb_disabled() is mostly used to disable USB host functionality, move
> >> the call the host portion for the DWC2 driver.
> >>
> >> Signed-off-by: Dinh Nguyen 
> >> ---
> >>  drivers/usb/dwc2/hcd.c  | 3 +++
> >>  drivers/usb/dwc2/platform.c | 3 ---
> >>  2 files changed, 3 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> >> index fa49c72..b741997 100644
> >> --- a/drivers/usb/dwc2/hcd.c
> >> +++ b/drivers/usb/dwc2/hcd.c
> >> @@ -2780,6 +2780,9 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
> >>int i, num_channels;
> >>int retval;
> >>
> >> +  if (usb_disabled())
> >> +  return -ENODEV;
> >> +
> >>dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n");
> >>
> >>/* Detect config values from hardware */
> >> diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
> >> index 77c8417..123cf54 100644
> >> --- a/drivers/usb/dwc2/platform.c
> >> +++ b/drivers/usb/dwc2/platform.c
> >> @@ -157,9 +157,6 @@ static int dwc2_driver_probe(struct platform_device 
> >> *dev)
> >>int retval;
> >>int irq;
> >>
> >> -  if (usb_disabled())
> >> -  return -ENODEV;
> >> -
> >>match = of_match_device(dwc2_of_match_table, &dev->dev);
> >>if (match && match->data) {
> >>params = match->data;
> > 
> > I'm confused. You are saying the build is broken until patch 8/8 is
> > applied? As always, that is not acceptable. You need to fix the
> > breakage at the point where it was introduced, not leave it broken
> > until the last patch in the series.
> > 
> 
> The build gets broken when patch 7/8 of is applied. That is the patch
> that finally allows platform.c to get built for host and gadget. I can
> fold this patch into patch 7/8.

then you invert things, make $subject patch 7 (or even patch 1) and
patch 7 becomes patch 8.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v4 01/20] usb: dwc3: enable hibernation if to be supported

2014-10-30 Thread Arnd Bergmann
On Thursday 30 October 2014 09:08:32 Felipe Balbi wrote:
> On Thu, Oct 30, 2014 at 12:35:56PM +0100, Arnd Bergmann wrote:
> > On Thursday 30 October 2014 18:08:26 Huang Rui wrote:
> > > It enables hibernation if the function is set in coreConsultant.
> > > 
> > > Suggested-by: Felipe Balbi 
> > > Signed-off-by: Huang Rui 
> > > Signed-off-by: Felipe Balbi 
> > > 
> > 
> > Something went wrong with the Signed-off-by lines here. 
> > You should never add someone else's Signed-off-by below yours.
> > 
> > I took a brief look at the entire series and the patches all look good
> > to me, but you have made the same mistake with the Signed-off-by
> > multiple times.
> 
> there are no mistakes, I just asked Huang to resend what I had on my
> testing/next because it had not been sent to devicetree mailing list.
> 

It's definitely a tricky question what the right Signed-off-by
chain is in this case, I guess strictly speaking it could have
been 

Suggested-by: Felipe Balbi 
Signed-off-by: Huang Rui 
Signed-off-by: Felipe Balbi 
Signed-off-by: Huang Rui 

which could correctly track where the patches went, but it's also
somewhat silly.

I would probably just have dropped the second Signed-off-by,
so that the last S-o-b in the patch matches the "From", as we expect.

It's definitely good to know that Huang Rui was not faking your
Signed-off-by but that you had actually provided it yourself.

Arnd
--
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 01/20] usb: dwc3: enable hibernation if to be supported

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 03:14:17PM +0100, Arnd Bergmann wrote:
> On Thursday 30 October 2014 09:08:32 Felipe Balbi wrote:
> > On Thu, Oct 30, 2014 at 12:35:56PM +0100, Arnd Bergmann wrote:
> > > On Thursday 30 October 2014 18:08:26 Huang Rui wrote:
> > > > It enables hibernation if the function is set in coreConsultant.
> > > > 
> > > > Suggested-by: Felipe Balbi 
> > > > Signed-off-by: Huang Rui 
> > > > Signed-off-by: Felipe Balbi 
> > > > 
> > > 
> > > Something went wrong with the Signed-off-by lines here. 
> > > You should never add someone else's Signed-off-by below yours.
> > > 
> > > I took a brief look at the entire series and the patches all look good
> > > to me, but you have made the same mistake with the Signed-off-by
> > > multiple times.
> > 
> > there are no mistakes, I just asked Huang to resend what I had on my
> > testing/next because it had not been sent to devicetree mailing list.
> > 
> 
> It's definitely a tricky question what the right Signed-off-by
> chain is in this case, I guess strictly speaking it could have
> been 
> 
> Suggested-by: Felipe Balbi 
> Signed-off-by: Huang Rui 
> Signed-off-by: Felipe Balbi 
> Signed-off-by: Huang Rui 
> 
> which could correctly track where the patches went, but it's also
> somewhat silly.

somewhat ? You don't need to be so black and white.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH] USB: simple: add Google simple serial SubClass support

2014-10-30 Thread Greg Kroah-Hartman
On Wed, Oct 29, 2014 at 02:21:56PM -0700, Anton Staaf wrote:
> Add support for Google devices that export simple serial
> interfaces using the vendor specific SubClass/Protocol pair
> 0x50/0x01.
> 
> Signed-off-by: Anton Staaf 
> 
> ---
>  drivers/usb/serial/usb-serial-simple.c | 11 +++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/usb/serial/usb-serial-simple.c 
> b/drivers/usb/serial/usb-serial-simple.c
> index fb79775..85bb973 100644
> --- a/drivers/usb/serial/usb-serial-simple.c
> +++ b/drivers/usb/serial/usb-serial-simple.c
> @@ -8,6 +8,7 @@
>   * Copyright (C) 2010 Zilogic Systems 
>   * Copyright (C) 2013 Wei Shuai 
>   * Copyright (C) 2013 Linux Foundation
> + * Copyright (C) 2014 Google, Inc.
>   *
>   *   This program is free software; you can redistribute it and/or
>   *   modify it under the terms of the GNU General Public License version

Based on advice from my lawyer, a change this size does not warrent a
copyright notice at the top of a file.  If your lawyers feel otherwise,
please let me know and I will be glad to discuss it with them.

So, care to resend this without this change to the file?

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


[PATCH v4] cdc-acm: ensure that termios get set when the port is activated

2014-10-30 Thread Jim Paris
The driver wasn't properly configuring the hardware for the current
termios settings under all conditions.  Ensure that termios are
written to the device when the port is activated.

Signed-off-by: Jim Paris 
---

Moved prototype.

Thanks,
Jim

---
 drivers/usb/class/cdc-acm.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index e934e19f49f5..d2cd1b6d02a7 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -58,6 +58,9 @@ static struct usb_driver acm_driver;
 static struct tty_driver *acm_tty_driver;
 static struct acm *acm_table[ACM_TTY_MINORS];
 
+static void acm_tty_set_termios(struct tty_struct *tty,
+   struct ktermios *termios_old);
+
 static DEFINE_MUTEX(acm_table_lock);
 
 /*
@@ -554,6 +557,8 @@ static int acm_port_activate(struct tty_port *port, struct 
tty_struct *tty)
goto error_submit_urb;
}
 
+   acm_tty_set_termios(tty, NULL);
+
/*
 * Unthrottle device in case the TTY was closed while throttled.
 */
-- 
2.1.0

--
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] cdc-acm: ensure that termios get set when the port is activated

2014-10-30 Thread Johan Hovold
On Thu, Oct 30, 2014 at 10:45:38AM -0400, Jim Paris wrote:
> The driver wasn't properly configuring the hardware for the current
> termios settings under all conditions.  Ensure that termios are
> written to the device when the port is activated.
> 
> Signed-off-by: Jim Paris 
> ---
> 
> Moved prototype.

You seem to have posted the old version again.

> ---
>  drivers/usb/class/cdc-acm.c | 5 +
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
> index e934e19f49f5..d2cd1b6d02a7 100644
> --- a/drivers/usb/class/cdc-acm.c
> +++ b/drivers/usb/class/cdc-acm.c
> @@ -58,6 +58,9 @@ static struct usb_driver acm_driver;
>  static struct tty_driver *acm_tty_driver;
>  static struct acm *acm_table[ACM_TTY_MINORS];
>  
> +static void acm_tty_set_termios(struct tty_struct *tty,
> + struct ktermios *termios_old);
> +
>  static DEFINE_MUTEX(acm_table_lock);

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


[PATCH v4-real] cdc-acm: ensure that termios get set when the port is activated

2014-10-30 Thread Jim Paris
The driver wasn't properly configuring the hardware for the current
termios settings under all conditions.  Ensure that termios are
written to the device when the port is activated.

Signed-off-by: Jim Paris 
---

Johan Hovold wrote:
> On Thu, Oct 30, 2014 at 10:45:38AM -0400, Jim Paris wrote:
> > Moved prototype.
> 
> You seem to have posted the old version again.

Doh.  Fixed.

Jim

---
 drivers/usb/class/cdc-acm.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index e934e19f49f5..6c358c5e05ab 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -60,6 +60,9 @@ static struct acm *acm_table[ACM_TTY_MINORS];
 
 static DEFINE_MUTEX(acm_table_lock);
 
+static void acm_tty_set_termios(struct tty_struct *tty,
+   struct ktermios *termios_old);
+
 /*
  * acm_table accessors
  */
@@ -554,6 +557,8 @@ static int acm_port_activate(struct tty_port *port, struct 
tty_struct *tty)
goto error_submit_urb;
}
 
+   acm_tty_set_termios(tty, NULL);
+
/*
 * Unthrottle device in case the TTY was closed while throttled.
 */
-- 
2.1.0

--
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


Question r/e zero byte bulk transfer on musb gadget (causes kernel panic)

2014-10-30 Thread Breton M. Saunders

Hi All,

  I want to ask what the correct USB behavior should be for a gadget 
attempting to perform a zero byte transfer (note transfer, not 
transaction) on a bulk-in endpoint should be:


  Background:
* Basically I've got a hacked up kernel; hardware is TI omap dm3730 
(an overo gumstix board).
* I use gadget fs (for which I've done major work to fix both 
gadgetfs and musb).

* I connect the overo board to a windows/linux/osx pc via its OTG port.

  I discovered that by writing a zero length packet to a bulk in 
endpoint I can cause a kernel panic in musb - basically I think it is 
trying to setup a DMA transaction with a "valid" pointer of zero bytes 
and blowing up.  I encountered this by writing a crappy user-land 
program (by accident).  Now I don't believe I should be able to panic 
the kernel from my stupid user program; so I could easily short-cut this 
so that gadgetfs disallows zero byte writes. I could also pursue this 
lower so that musb does not allow 0 length transactions - however, my 
question is more basic than that:


  Are zero length transfers from a device to the PC on a bulk endpoint 
sensible?


  I can see a case where a zero length transfer would cause a read 
thread in the host to be interrupted.


  Does musb/gadgetfs need to correctly support zero byte transfers, or 
is this a non-sensible suggestion?


Cheers,

-Brett
--
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 v2 01/29] host: ehci-atmel: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-atmel.c |   13 +++--
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/host/ehci-atmel.c b/drivers/usb/host/ehci-atmel.c
index ec9f7b7..56a8850 100644
--- a/drivers/usb/host/ehci-atmel.c
+++ b/drivers/usb/host/ehci-atmel.c
@@ -107,22 +107,15 @@ static int ehci_atmel_drv_probe(struct platform_device 
*pdev)
}
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev,
-   "Found HC with no register addr. Check %s setup!\n",
-   dev_name(&pdev->dev));
-   retval = -ENODEV;
-   goto fail_request_resource;
-   }
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto fail_request_resource;
}
 
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
+
iclk = devm_clk_get(&pdev->dev, "ehci_clk");
if (IS_ERR(iclk)) {
dev_err(&pdev->dev, "Error getting interface clock\n");
-- 
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


[PATCH usb v2 02/29] host: ohci-da8xx: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-da8xx.c |7 ++-
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/host/ohci-da8xx.c b/drivers/usb/host/ohci-da8xx.c
index df06be6..1c76999 100644
--- a/drivers/usb/host/ohci-da8xx.c
+++ b/drivers/usb/host/ohci-da8xx.c
@@ -313,16 +313,13 @@ static int usb_hcd_da8xx_probe(const struct hc_driver 
*driver,
return -ENOMEM;
 
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!mem)
-   return -ENODEV;
-   hcd->rsrc_start = mem->start;
-   hcd->rsrc_len = resource_size(mem);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, mem);
if (IS_ERR(hcd->regs)) {
error = PTR_ERR(hcd->regs);
goto err;
}
+   hcd->rsrc_start = mem->start;
+   hcd->rsrc_len = resource_size(mem);
 
ohci_hcd_init(hcd_to_ohci(hcd));
 
-- 
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


[PATCH usb v2 00/29] cleanup on resource check

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

This series removes the duplication of sanity check for
platform_get_resource() return resource. It will be checked 
with devm_ioremap_resource()

This entire series rebased on testing/fixes of [1].

[1]: http://git.kernel.org/cgit/linux/kernel/git/balbi/usb.git


changes since v1:
- removed broken patches
- added Ack of Alan Stern for all the ehci, ohci, and uhci changes.

Varka Bhadram (29):
  host: ehci-atmel: remove duplicate check on resource
  host: ohci-da8xx: remove duplicate check on resource
  host: ehci-tegra: remove duplicate check on resource
  host: ehci-w90x900: remove duplicate check on resource
  host: ohci-at91: remove duplicate check on resource
  host: ohci-exynos: remove duplicate check on resource
  host: ohci-jz4740: remove duplicate check on resource
  host: ohci-octeon: remove duplicate check on resource
  host: ohci-platform: remove duplicate check on resource
  host: ohci-pxa27x: remove duplicate check on resource
  host: ehci-sh: remove duplicate check on resource
  host: ohci-spear: remove duplicate check on resource
  host: ehci-msm: remove duplicate check on resource
  host: ehci-mv: remove duplicate check on resource
  host: ehci-mxc: remove duplicate check on resource
  host: ehci-octeon: remove duplicate check on resource
  host: ehci-orion: remove duplicate check on resource
  host: ehci-platform: remove duplicate check on resource
  host: ehci-sead3: remove duplicate check on resource
  host: ehci-spear: remove duplicate check on resource
  host: uhci-platform: remove duplicate check on resource
  host: xhci-plat: remove duplicate check on resource
  musb: musb_core: remove duplicate check on resource
  musb: musb_dsps: remove duplicate check on resource
  phy: phy-rcar-usb: remove duplicate check on resource
  renesas_usbhs: common: remove duplicate check on resource
  dwc3: dwc3-keystone: remove duplicate check on resource
  host: ehci-fsl: remove duplicate check on resource
  host: ehci-exynos: remove duplicate check on resource

 drivers/usb/dwc3/dwc3-keystone.c   |5 -
 drivers/usb/host/ehci-atmel.c  |   13 +++--
 drivers/usb/host/ehci-exynos.c |   11 +++
 drivers/usb/host/ehci-fsl.c|   12 +++-
 drivers/usb/host/ehci-msm.c|   10 ++
 drivers/usb/host/ehci-mv.c |   12 
 drivers/usb/host/ehci-mxc.c|   11 ++-
 drivers/usb/host/ehci-octeon.c |   12 +++-
 drivers/usb/host/ehci-orion.c  |   10 +-
 drivers/usb/host/ehci-platform.c   |   12 
 drivers/usb/host/ehci-sead3.c  |5 ++---
 drivers/usb/host/ehci-sh.c |   15 +++
 drivers/usb/host/ehci-spear.c  |9 ++---
 drivers/usb/host/ehci-tegra.c  |   10 +++---
 drivers/usb/host/ehci-w90x900.c|   13 +++--
 drivers/usb/host/ohci-at91.c   |   11 +++
 drivers/usb/host/ohci-da8xx.c  |7 ++-
 drivers/usb/host/ohci-exynos.c |   10 ++
 drivers/usb/host/ohci-jz4740.c |   13 +++--
 drivers/usb/host/ohci-octeon.c |   12 +++-
 drivers/usb/host/ohci-platform.c   |   13 -
 drivers/usb/host/ohci-pxa27x.c |   11 ++-
 drivers/usb/host/ohci-spear.c  |   11 +++
 drivers/usb/host/uhci-platform.c   |7 ---
 drivers/usb/host/xhci-plat.c   |   10 --
 drivers/usb/musb/musb_core.c   |4 ++--
 drivers/usb/musb/musb_dsps.c   |3 ---
 drivers/usb/phy/phy-rcar-usb.c |8 +++-
 drivers/usb/renesas_usbhs/common.c |3 ++-
 29 files changed, 71 insertions(+), 212 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


[PATCH usb v2 04/29] host: ehci-w90x900: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-w90x900.c |   13 +++--
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/host/ehci-w90x900.c b/drivers/usb/host/ehci-w90x900.c
index a9303af..4717bf2 100644
--- a/drivers/usb/host/ehci-w90x900.c
+++ b/drivers/usb/host/ehci-w90x900.c
@@ -42,27 +42,20 @@ static int usb_w90x900_probe(const struct hc_driver *driver,
int retval = 0, irq;
unsigned long val;
 
-
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   retval = -ENXIO;
-   goto err1;
-   }
-
hcd = usb_create_hcd(driver, &pdev->dev, "w90x900 EHCI");
if (!hcd) {
retval = -ENOMEM;
goto err1;
}
 
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
+   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto err2;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
ehci = hcd_to_ehci(hcd);
ehci->caps = hcd->regs;
-- 
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


[PATCH usb v2 05/29] host: ohci-at91: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-at91.c |   11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index e49eb4f..90666ea 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -137,12 +137,6 @@ static int usb_hcd_at91_probe(const struct hc_driver 
*driver,
struct resource *res;
int irq;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_dbg(dev, "hcd probe: missing memory resource\n");
-   return -ENXIO;
-   }
-
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_dbg(dev, "hcd probe: missing irq resource\n");
@@ -152,14 +146,15 @@ static int usb_hcd_at91_probe(const struct hc_driver 
*driver,
hcd = usb_create_hcd(driver, dev, "at91");
if (!hcd)
return -ENOMEM;
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
 
+   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(dev, res);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto err;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
iclk = devm_clk_get(dev, "ohci_clk");
if (IS_ERR(iclk)) {
-- 
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


[PATCH usb v2 03/29] host: ehci-tegra: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-tegra.c |   10 +++---
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index aaa0197..eb36b7a 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -460,18 +460,14 @@ static int tegra_ehci_probe(struct platform_device *pdev)
"nvidia,needs-double-reset");
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev, "Failed to get I/O memory\n");
-   err = -ENXIO;
-   goto cleanup_clk_en;
-   }
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
err = PTR_ERR(hcd->regs);
goto cleanup_clk_en;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
+
ehci->caps = hcd->regs + 0x100;
ehci->has_hostpc = soc_config->has_hostpc;
 
-- 
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


[PATCH usb v2 08/29] host: ohci-octeon: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-octeon.c |   12 +++-
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/host/ohci-octeon.c b/drivers/usb/host/ohci-octeon.c
index 15af895..20d861b 100644
--- a/drivers/usb/host/ohci-octeon.c
+++ b/drivers/usb/host/ohci-octeon.c
@@ -120,12 +120,6 @@ static int ohci_octeon_drv_probe(struct platform_device 
*pdev)
return -ENODEV;
}
 
-   res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (res_mem == NULL) {
-   dev_err(&pdev->dev, "No register space assigned\n");
-   return -ENODEV;
-   }
-
/* Ohci is a 32-bit device. */
ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
if (ret)
@@ -135,14 +129,14 @@ static int ohci_octeon_drv_probe(struct platform_device 
*pdev)
if (!hcd)
return -ENOMEM;
 
-   hcd->rsrc_start = res_mem->start;
-   hcd->rsrc_len = resource_size(res_mem);
-
+   res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
reg_base = devm_ioremap_resource(&pdev->dev, res_mem);
if (IS_ERR(reg_base)) {
ret = PTR_ERR(reg_base);
goto err1;
}
+   hcd->rsrc_start = res_mem->start;
+   hcd->rsrc_len = resource_size(res_mem);
 
ohci_octeon_hw_start();
 
-- 
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


[PATCH usb v2 06/29] host: ohci-exynos: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-exynos.c |   10 ++
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ohci-exynos.c b/drivers/usb/host/ohci-exynos.c
index d28b658..f601952 100644
--- a/drivers/usb/host/ohci-exynos.c
+++ b/drivers/usb/host/ohci-exynos.c
@@ -156,19 +156,13 @@ skip_phy:
goto fail_clk;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev, "Failed to get I/O memory\n");
-   err = -ENXIO;
-   goto fail_io;
-   }
-
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
err = PTR_ERR(hcd->regs);
goto fail_io;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
irq = platform_get_irq(pdev, 0);
if (!irq) {
-- 
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


[PATCH usb v2 09/29] host: ohci-platform: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-platform.c |   13 -
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
index 4369299..6c7f74b 100644
--- a/drivers/usb/host/ohci-platform.c
+++ b/drivers/usb/host/ohci-platform.c
@@ -149,12 +149,6 @@ static int ohci_platform_probe(struct platform_device *dev)
return irq;
}
 
-   res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0);
-   if (!res_mem) {
-   dev_err(&dev->dev, "no memory resource provided");
-   return -ENXIO;
-   }
-
hcd = usb_create_hcd(&ohci_platform_hc_driver, &dev->dev,
dev_name(&dev->dev));
if (!hcd)
@@ -236,14 +230,15 @@ static int ohci_platform_probe(struct platform_device 
*dev)
goto err_reset;
}
 
-   hcd->rsrc_start = res_mem->start;
-   hcd->rsrc_len = resource_size(res_mem);
-
+   res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&dev->dev, res_mem);
if (IS_ERR(hcd->regs)) {
err = PTR_ERR(hcd->regs);
goto err_power;
}
+   hcd->rsrc_start = res_mem->start;
+   hcd->rsrc_len = resource_size(res_mem);
+
err = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (err)
goto err_power;
-- 
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


[PATCH usb v2 07/29] host: ohci-jz4740: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-jz4740.c |   13 +++--
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/usb/host/ohci-jz4740.c b/drivers/usb/host/ohci-jz4740.c
index c2c221a..8ddd8f5 100644
--- a/drivers/usb/host/ohci-jz4740.c
+++ b/drivers/usb/host/ohci-jz4740.c
@@ -153,13 +153,6 @@ static int jz4740_ohci_probe(struct platform_device *pdev)
struct resource *res;
int irq;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-
-   if (!res) {
-   dev_err(&pdev->dev, "Failed to get platform resource\n");
-   return -ENOENT;
-   }
-
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
dev_err(&pdev->dev, "Failed to get platform irq\n");
@@ -174,14 +167,14 @@ static int jz4740_ohci_probe(struct platform_device *pdev)
 
jz4740_ohci = hcd_to_jz4740_hcd(hcd);
 
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
+   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto err_free;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
jz4740_ohci->clk = devm_clk_get(&pdev->dev, "uhc");
if (IS_ERR(jz4740_ohci->clk)) {
-- 
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


[PATCH usb v2 11/29] host: ehci-sh: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-sh.c |   15 +++
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/usb/host/ehci-sh.c b/drivers/usb/host/ehci-sh.c
index 9b9b9f5..4b2c3a7 100644
--- a/drivers/usb/host/ehci-sh.c
+++ b/drivers/usb/host/ehci-sh.c
@@ -86,15 +86,6 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
if (usb_disabled())
return -ENODEV;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev,
-   "Found HC with no register addr. Check %s setup!\n",
-   dev_name(&pdev->dev));
-   ret = -ENODEV;
-   goto fail_create_hcd;
-   }
-
irq = platform_get_irq(pdev, 0);
if (irq <= 0) {
dev_err(&pdev->dev,
@@ -114,14 +105,14 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
goto fail_create_hcd;
}
 
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
+   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto fail_request_resource;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
priv = devm_kzalloc(&pdev->dev, sizeof(struct ehci_sh_priv),
GFP_KERNEL);
-- 
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


[PATCH usb v2 12/29] host: ohci-spear: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-spear.c |   11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ohci-spear.c b/drivers/usb/host/ohci-spear.c
index 8d58766..4a54f9d 100644
--- a/drivers/usb/host/ohci-spear.c
+++ b/drivers/usb/host/ohci-spear.c
@@ -74,20 +74,15 @@ static int spear_ohci_hcd_drv_probe(struct platform_device 
*pdev)
}
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   retval = -ENODEV;
-   goto err_put_hcd;
-   }
-
-   hcd->rsrc_start = pdev->resource[0].start;
-   hcd->rsrc_len = resource_size(res);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto err_put_hcd;
}
 
+   hcd->rsrc_start = pdev->resource[0].start;
+   hcd->rsrc_len = resource_size(res);
+
sohci_p = to_spear_ohci(hcd);
sohci_p->clk = usbh_clk;
 
-- 
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


[PATCH usb v2 13/29] host: ehci-msm: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-msm.c |   10 ++
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ehci-msm.c b/drivers/usb/host/ehci-msm.c
index 9dc2118..9db74ca 100644
--- a/drivers/usb/host/ehci-msm.c
+++ b/drivers/usb/host/ehci-msm.c
@@ -88,19 +88,13 @@ static int ehci_msm_probe(struct platform_device *pdev)
}
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev, "Unable to get memory resource\n");
-   ret = -ENODEV;
-   goto put_hcd;
-   }
-
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto put_hcd;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
/*
 * OTG driver takes care of PHY initialization, clock management,
-- 
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


[PATCH usb v2 10/29] host: ohci-pxa27x: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ohci-pxa27x.c |   11 ++-
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c
index e68f3d0..1339981 100644
--- a/drivers/usb/host/ohci-pxa27x.c
+++ b/drivers/usb/host/ohci-pxa27x.c
@@ -447,20 +447,13 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, 
struct platform_device
return -ENOMEM;
 
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!r) {
-   pr_err("no resource of IORESOURCE_MEM");
-   retval = -ENXIO;
-   goto err;
-   }
-
-   hcd->rsrc_start = r->start;
-   hcd->rsrc_len = resource_size(r);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, r);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto err;
}
+   hcd->rsrc_start = r->start;
+   hcd->rsrc_len = resource_size(r);
 
/* initialize "struct pxa27x_ohci" */
pxa_ohci = to_pxa27x_ohci(hcd);
-- 
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


[PATCH usb v2 16/29] host: ehci-octeon: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-octeon.c |   12 +++-
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/host/ehci-octeon.c b/drivers/usb/host/ehci-octeon.c
index 9051439..2d0c4bc 100644
--- a/drivers/usb/host/ehci-octeon.c
+++ b/drivers/usb/host/ehci-octeon.c
@@ -106,12 +106,6 @@ static int ehci_octeon_drv_probe(struct platform_device 
*pdev)
return -ENODEV;
}
 
-   res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (res_mem == NULL) {
-   dev_err(&pdev->dev, "No register space assigned\n");
-   return -ENODEV;
-   }
-
/*
 * We can DMA from anywhere. But the descriptors must be in
 * the lower 4GB.
@@ -125,14 +119,14 @@ static int ehci_octeon_drv_probe(struct platform_device 
*pdev)
if (!hcd)
return -ENOMEM;
 
-   hcd->rsrc_start = res_mem->start;
-   hcd->rsrc_len = resource_size(res_mem);
-
+   res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&pdev->dev, res_mem);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto err1;
}
+   hcd->rsrc_start = res_mem->start;
+   hcd->rsrc_len = resource_size(res_mem);
 
ehci_octeon_start();
 
-- 
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


[PATCH usb v2 19/29] host: ehci-sead3: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-sead3.c |5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/host/ehci-sead3.c b/drivers/usb/host/ehci-sead3.c
index cf12676..9b6e8d0 100644
--- a/drivers/usb/host/ehci-sead3.c
+++ b/drivers/usb/host/ehci-sead3.c
@@ -110,14 +110,13 @@ static int ehci_hcd_sead3_drv_probe(struct 
platform_device *pdev)
return -ENOMEM;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto err1;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
/* Root hub has integrated TT. */
hcd->has_tt = 1;
-- 
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


[PATCH usb v2 25/29] phy: phy-rcar-usb: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
---
 drivers/usb/phy/phy-rcar-usb.c |8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/phy/phy-rcar-usb.c b/drivers/usb/phy/phy-rcar-usb.c
index 33265a5..e9f3a93 100644
--- a/drivers/usb/phy/phy-rcar-usb.c
+++ b/drivers/usb/phy/phy-rcar-usb.c
@@ -195,11 +195,9 @@ static int rcar_usb_phy_probe(struct platform_device *pdev)
return PTR_ERR(reg0);
 
res1 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-   if (res1) {
-   reg1 = devm_ioremap_resource(dev, res1);
-   if (IS_ERR(reg1))
-   return PTR_ERR(reg1);
-   }
+   reg1 = devm_ioremap_resource(dev, res1);
+   if (IS_ERR(reg1))
+   return PTR_ERR(reg1);
 
priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
if (!priv) {
-- 
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


[PATCH usb v2 14/29] host: ehci-mv: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-mv.c |   12 
 1 file changed, 12 deletions(-)

diff --git a/drivers/usb/host/ehci-mv.c b/drivers/usb/host/ehci-mv.c
index 08147c3..62797eb 100644
--- a/drivers/usb/host/ehci-mv.c
+++ b/drivers/usb/host/ehci-mv.c
@@ -170,12 +170,6 @@ static int mv_ehci_probe(struct platform_device *pdev)
}
 
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "phyregs");
-   if (r == NULL) {
-   dev_err(&pdev->dev, "no phy I/O memory resource defined\n");
-   retval = -ENODEV;
-   goto err_put_hcd;
-   }
-
ehci_mv->phy_regs = devm_ioremap_resource(&pdev->dev, r);
if (IS_ERR(ehci_mv->phy_regs)) {
retval = PTR_ERR(ehci_mv->phy_regs);
@@ -183,12 +177,6 @@ static int mv_ehci_probe(struct platform_device *pdev)
}
 
r = platform_get_resource_byname(pdev, IORESOURCE_MEM, "capregs");
-   if (!r) {
-   dev_err(&pdev->dev, "no I/O memory resource defined\n");
-   retval = -ENODEV;
-   goto err_put_hcd;
-   }
-
ehci_mv->cap_regs = devm_ioremap_resource(&pdev->dev, r);
if (IS_ERR(ehci_mv->cap_regs)) {
retval = PTR_ERR(ehci_mv->cap_regs);
-- 
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


[PATCH usb v2 22/29] host: xhci-plat: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/xhci-plat.c |   10 --
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index 3d78b0c..e68b4ec 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -83,9 +83,6 @@ static int xhci_plat_probe(struct platform_device *pdev)
if (irq < 0)
return -ENODEV;
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res)
-   return -ENODEV;
 
if (of_device_is_compatible(pdev->dev.of_node,
"marvell,armada-375-xhci") ||
@@ -109,15 +106,16 @@ static int xhci_plat_probe(struct platform_device *pdev)
if (!hcd)
return -ENOMEM;
 
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
+   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto put_hcd;
}
 
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
+
/*
 * Not all platforms have a clk so it is not an error if the
 * clock does not exists.
-- 
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


[PATCH usb v2 17/29] host: ehci-orion: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-orion.c |   10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c
index 22e15ca..36b4657 100644
--- a/drivers/usb/host/ehci-orion.c
+++ b/drivers/usb/host/ehci-orion.c
@@ -175,15 +175,6 @@ static int ehci_orion_drv_probe(struct platform_device 
*pdev)
goto err;
}
 
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev,
-   "Found HC with no register addr. Check %s setup!\n",
-   dev_name(&pdev->dev));
-   err = -ENODEV;
-   goto err;
-   }
-
/*
 * Right now device-tree probed devices don't get dma_mask
 * set. Since shared usb code relies on it, set it here for
@@ -193,6 +184,7 @@ static int ehci_orion_drv_probe(struct platform_device 
*pdev)
if (err)
goto err;
 
+   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(regs)) {
err = PTR_ERR(regs);
-- 
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


[PATCH usb v2 23/29] musb: musb_core: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
---
 drivers/usb/musb/musb_core.c |4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index b841ee0..55ebd4b 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -2080,10 +2080,10 @@ static int musb_probe(struct platform_device *pdev)
struct resource *iomem;
void __iomem*base;
 
-   iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!iomem || irq <= 0)
+   if (irq <= 0)
return -ENODEV;
 
+   iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_ioremap_resource(dev, iomem);
if (IS_ERR(base))
return PTR_ERR(base);
-- 
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


[PATCH usb v2 21/29] host: uhci-platform: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Also fix in accessing NULL if resource didn't get.

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/uhci-platform.c |7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/host/uhci-platform.c b/drivers/usb/host/uhci-platform.c
index b987f1d..081330c 100644
--- a/drivers/usb/host/uhci-platform.c
+++ b/drivers/usb/host/uhci-platform.c
@@ -86,14 +86,15 @@ static int uhci_hcd_platform_probe(struct platform_device 
*pdev)
return -ENOMEM;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto err_rmr;
}
+
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
+
uhci = hcd_to_uhci(hcd);
 
uhci->regs = hcd->regs;
-- 
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


[PATCH usb v2 27/29] dwc3: dwc3-keystone: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
---
 drivers/usb/dwc3/dwc3-keystone.c |5 -
 1 file changed, 5 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-keystone.c b/drivers/usb/dwc3/dwc3-keystone.c
index 7ec8495..dd8d2df 100644
--- a/drivers/usb/dwc3/dwc3-keystone.c
+++ b/drivers/usb/dwc3/dwc3-keystone.c
@@ -104,11 +104,6 @@ static int kdwc3_probe(struct platform_device *pdev)
kdwc->dev = dev;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(dev, "missing usbss resource\n");
-   return -EINVAL;
-   }
-
kdwc->usbss = devm_ioremap_resource(dev, res);
if (IS_ERR(kdwc->usbss))
return PTR_ERR(kdwc->usbss);
-- 
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


[PATCH usb v2 18/29] host: ehci-platform: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-platform.c |   12 
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
index 2f5b9ce..d6cbd61 100644
--- a/drivers/usb/host/ehci-platform.c
+++ b/drivers/usb/host/ehci-platform.c
@@ -164,11 +164,6 @@ static int ehci_platform_probe(struct platform_device *dev)
dev_err(&dev->dev, "no irq provided");
return irq;
}
-   res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0);
-   if (!res_mem) {
-   dev_err(&dev->dev, "no memory resource provided");
-   return -ENXIO;
-   }
 
hcd = usb_create_hcd(&ehci_platform_hc_driver, &dev->dev,
 dev_name(&dev->dev));
@@ -250,14 +245,15 @@ static int ehci_platform_probe(struct platform_device 
*dev)
goto err_reset;
}
 
-   hcd->rsrc_start = res_mem->start;
-   hcd->rsrc_len = resource_size(res_mem);
-
+   res_mem = platform_get_resource(dev, IORESOURCE_MEM, 0);
hcd->regs = devm_ioremap_resource(&dev->dev, res_mem);
if (IS_ERR(hcd->regs)) {
err = PTR_ERR(hcd->regs);
goto err_power;
}
+   hcd->rsrc_start = res_mem->start;
+   hcd->rsrc_len = resource_size(res_mem);
+
err = usb_add_hcd(hcd, irq, IRQF_SHARED);
if (err)
goto err_power;
-- 
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


[PATCH usb v2 15/29] host: ehci-mxc: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-mxc.c |   11 ++-
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c
index dbe5e4e..c7a9b31 100644
--- a/drivers/usb/host/ehci-mxc.c
+++ b/drivers/usb/host/ehci-mxc.c
@@ -69,20 +69,13 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
return -ENOMEM;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(dev, "Found HC with no register addr. Check setup!\n");
-   ret = -ENODEV;
-   goto err_alloc;
-   }
-
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
-
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
ret = PTR_ERR(hcd->regs);
goto err_alloc;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
hcd->has_tt = 1;
ehci = hcd_to_ehci(hcd);
-- 
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


[PATCH usb v2 29/29] host: ehci-exynos: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-exynos.c |   11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/host/ehci-exynos.c b/drivers/usb/host/ehci-exynos.c
index 7189f2e..c2777d2 100644
--- a/drivers/usb/host/ehci-exynos.c
+++ b/drivers/usb/host/ehci-exynos.c
@@ -188,20 +188,15 @@ skip_phy:
goto fail_clk;
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev, "Failed to get I/O memory\n");
-   err = -ENXIO;
-   goto fail_io;
-   }
-
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
err = PTR_ERR(hcd->regs);
goto fail_io;
}
 
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
+
irq = platform_get_irq(pdev, 0);
if (!irq) {
dev_err(&pdev->dev, "Failed to get IRQ\n");
-- 
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


[PATCH usb v2 28/29] host: ehci-fsl: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-fsl.c |   12 +++-
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
index 2d2ae8d..fb7bd0c 100644
--- a/drivers/usb/host/ehci-fsl.c
+++ b/drivers/usb/host/ehci-fsl.c
@@ -93,21 +93,15 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
}
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   dev_err(&pdev->dev,
-   "Found HC with no register addr. Check %s setup!\n",
-   dev_name(&pdev->dev));
-   retval = -ENODEV;
-   goto err2;
-   }
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto err2;
}
 
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
+
pdata->regs = hcd->regs;
 
if (pdata->power_budget)
-- 
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


[PATCH usb v2 24/29] musb: musb_dsps: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
---
 drivers/usb/musb/musb_dsps.c |3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index 48bc09e..965c552 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -447,9 +447,6 @@ static int dsps_musb_init(struct musb *musb)
int ret;
 
r = platform_get_resource_byname(parent, IORESOURCE_MEM, "control");
-   if (!r)
-   return -EINVAL;
-
reg_base = devm_ioremap_resource(dev, r);
if (IS_ERR(reg_base))
return PTR_ERR(reg_base);
-- 
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


[PATCH usb v2 26/29] renesas_usbhs: common: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
---
 drivers/usb/renesas_usbhs/common.c |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/renesas_usbhs/common.c 
b/drivers/usb/renesas_usbhs/common.c
index b3b6813..3ffd552 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -497,8 +497,9 @@ static int usbhs_probe(struct platform_device *pdev)
 
/* platform data */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+
irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-   if (!res || !irq_res) {
+   if (!irq_res) {
dev_err(&pdev->dev, "Not enough Renesas USB platform 
resources.\n");
return -ENODEV;
}
-- 
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


[PATCH usb v2 20/29] host: ehci-spear: remove duplicate check on resource

2014-10-30 Thread varkabhadram
From: Varka Bhadram 

Sanity check on resource happening with devm_ioremap_resource().

Signed-off-by: Varka Bhadram 
Acked-by: Alan Stern 
---
 drivers/usb/host/ehci-spear.c |9 ++---
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/host/ehci-spear.c b/drivers/usb/host/ehci-spear.c
index 1355ff0..34e1474 100644
--- a/drivers/usb/host/ehci-spear.c
+++ b/drivers/usb/host/ehci-spear.c
@@ -99,18 +99,13 @@ static int spear_ehci_hcd_drv_probe(struct platform_device 
*pdev)
}
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res) {
-   retval = -ENODEV;
-   goto err_put_hcd;
-   }
-
-   hcd->rsrc_start = res->start;
-   hcd->rsrc_len = resource_size(res);
hcd->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(hcd->regs)) {
retval = PTR_ERR(hcd->regs);
goto err_put_hcd;
}
+   hcd->rsrc_start = res->start;
+   hcd->rsrc_len = resource_size(res);
 
sehci = to_spear_ehci(hcd);
sehci->clk = usbh_clk;
-- 
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 1/7] usb: move the OTG state from the USB PHY to the OTG structure

2014-10-30 Thread Felipe Balbi
On Tue, Oct 28, 2014 at 05:35:35PM +0100, Antoine Tenart wrote:
> Before using the PHY framework instead of the USB PHY one, we need to
> move the OTG state into another place, since it won't be available when
> USB PHY isn't used. This patch moves the OTG state into the OTG
> structure, and makes all the needed modifications in the drivers
> using the OTG state.
> 
> Signed-off-by: Antoine Tenart 
> Acked-by: Peter Chen 

Acked-by: Felipe Balbi 

> ---
>  drivers/phy/phy-omap-usb2.c |  8 +---
>  drivers/usb/chipidea/debug.c|  2 +-
>  drivers/usb/chipidea/otg_fsm.c  | 12 ++---
>  drivers/usb/common/usb-otg-fsm.c|  8 ++--
>  drivers/usb/host/ohci-omap.c|  2 +-
>  drivers/usb/musb/am35x.c| 28 +--
>  drivers/usb/musb/blackfin.c | 18 +++
>  drivers/usb/musb/da8xx.c| 28 +--
>  drivers/usb/musb/davinci.c  | 18 +++
>  drivers/usb/musb/musb_core.c| 94 
> ++---
>  drivers/usb/musb/musb_dsps.c| 26 +-
>  drivers/usb/musb/musb_gadget.c  | 36 +++---
>  drivers/usb/musb/musb_host.c|  8 ++--
>  drivers/usb/musb/musb_virthub.c | 22 -
>  drivers/usb/musb/omap2430.c | 30 ++--
>  drivers/usb/musb/tusb6010.c | 40 
>  drivers/usb/musb/ux500.c| 10 ++--
>  drivers/usb/phy/phy-ab8500-usb.c| 10 ++--
>  drivers/usb/phy/phy-fsl-usb.c   | 10 ++--
>  drivers/usb/phy/phy-generic.c   |  4 +-
>  drivers/usb/phy/phy-gpio-vbus-usb.c | 10 ++--
>  drivers/usb/phy/phy-msm-usb.c   | 34 +++---
>  drivers/usb/phy/phy-mv-usb.c| 46 +-
>  include/linux/usb/otg.h |  2 +
>  include/linux/usb/phy.h |  1 -
>  25 files changed, 252 insertions(+), 255 deletions(-)
> 
> diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c
> index 8c842980834a..9f4093590f4c 100644
> --- a/drivers/phy/phy-omap-usb2.c
> +++ b/drivers/phy/phy-omap-usb2.c
> @@ -80,11 +80,9 @@ static int omap_usb_start_srp(struct usb_otg *otg)
>  
>  static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
>  {
> - struct usb_phy  *phy = otg->phy;
> -
>   otg->host = host;
>   if (!host)
> - phy->state = OTG_STATE_UNDEFINED;
> + otg->state = OTG_STATE_UNDEFINED;
>  
>   return 0;
>  }
> @@ -92,11 +90,9 @@ static int omap_usb_set_host(struct usb_otg *otg, struct 
> usb_bus *host)
>  static int omap_usb_set_peripheral(struct usb_otg *otg,
>   struct usb_gadget *gadget)
>  {
> - struct usb_phy  *phy = otg->phy;
> -
>   otg->gadget = gadget;
>   if (!gadget)
> - phy->state = OTG_STATE_UNDEFINED;
> + otg->state = OTG_STATE_UNDEFINED;
>  
>   return 0;
>  }
> diff --git a/drivers/usb/chipidea/debug.c b/drivers/usb/chipidea/debug.c
> index 795d6538d630..8878eea38d44 100644
> --- a/drivers/usb/chipidea/debug.c
> +++ b/drivers/usb/chipidea/debug.c
> @@ -220,7 +220,7 @@ static int ci_otg_show(struct seq_file *s, void *unused)
>  
>   /* -- State - */
>   seq_printf(s, "OTG state: %s\n\n",
> - usb_otg_state_string(ci->transceiver->state));
> + usb_otg_state_string(ci->transceiver->otg.state));
>  
>   /* -- State Machine Variables - */
>   seq_printf(s, "a_bus_drop: %d\n", fsm->a_bus_drop);
> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
> index caaabc58021e..8cb2508a6b71 100644
> --- a/drivers/usb/chipidea/otg_fsm.c
> +++ b/drivers/usb/chipidea/otg_fsm.c
> @@ -328,7 +328,7 @@ static void b_ssend_srp_tmout_func(void *ptr, unsigned 
> long indicator)
>   set_tmout(ci, indicator);
>  
>   /* only vbus fall below B_sess_vld in b_idle state */
> - if (ci->transceiver->state == OTG_STATE_B_IDLE)
> + if (ci->fsm.otg->state == OTG_STATE_B_IDLE)
>   ci_otg_queue_work(ci);
>  }
>  
> @@ -582,11 +582,11 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
>* when there is no gadget class driver
>*/
>   if (ci->fsm.id && !(ci->driver) &&
> - ci->transceiver->state < OTG_STATE_A_IDLE)
> + ci->fsm.otg->state < OTG_STATE_A_IDLE)
>   return 0;
>  
>   if (otg_statemachine(&ci->fsm)) {
> - if (ci->transceiver->state == OTG_STATE_A_IDLE) {
> + if (ci->fsm.otg->state == OTG_STATE_A_IDLE) {
>   /*
>* Further state change for cases:
>* a_idle to b_idle; or
> @@ -600,7 +600,7 @@ int ci_otg_fsm_work(struct ci_hdrc *ci)
>   ci_otg_queue_work(ci);
>   if (ci->id_event)
>   ci->id_event = false;
> - } else if (ci->transceiver->state == OTG_STATE_B_IDLE) {
> + } else if (ci->fsm.otg->state == OTG_STATE_B_IDLE) {
>   if (ci->fsm.b_sess_v

Re: [PATCH v7 2/7] usb: rename phy to usb_phy in OTG

2014-10-30 Thread Felipe Balbi
On Tue, Oct 28, 2014 at 05:35:36PM +0100, Antoine Tenart wrote:
> This patch prepares the introduction of the generic PHY support in the
> USB OTG common functions. The USB PHY member of the OTG structure is
> renamed to 'usb_phy' and modifications are done in all drivers accessing
> it. Renaming this pointer will allow to keep the compatibility for USB
> PHY drivers.
> 
> Signed-off-by: Antoine Tenart 

Acked-by: Felipe Balbi 

> ---
>  drivers/phy/phy-omap-usb2.c |  6 ++--
>  drivers/usb/chipidea/otg_fsm.c  |  2 +-
>  drivers/usb/phy/phy-ab8500-usb.c|  6 ++--
>  drivers/usb/phy/phy-fsl-usb.c   | 13 
>  drivers/usb/phy/phy-generic.c   |  2 +-
>  drivers/usb/phy/phy-gpio-vbus-usb.c |  4 +--
>  drivers/usb/phy/phy-isp1301-omap.c  | 10 +++---
>  drivers/usb/phy/phy-msm-usb.c   | 61 
> +++--
>  drivers/usb/phy/phy-mv-usb.c|  4 +--
>  drivers/usb/phy/phy-tahvo.c |  8 +++--
>  drivers/usb/phy/phy-ulpi.c  |  6 ++--
>  include/linux/usb/otg.h |  2 +-
>  12 files changed, 65 insertions(+), 59 deletions(-)
> 
> diff --git a/drivers/phy/phy-omap-usb2.c b/drivers/phy/phy-omap-usb2.c
> index 9f4093590f4c..32c3e86b4935 100644
> --- a/drivers/phy/phy-omap-usb2.c
> +++ b/drivers/phy/phy-omap-usb2.c
> @@ -60,7 +60,7 @@ EXPORT_SYMBOL_GPL(omap_usb2_set_comparator);
>  
>  static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled)
>  {
> - struct omap_usb *phy = phy_to_omapusb(otg->phy);
> + struct omap_usb *phy = phy_to_omapusb(otg->usb_phy);
>  
>   if (!phy->comparator)
>   return -ENODEV;
> @@ -70,7 +70,7 @@ static int omap_usb_set_vbus(struct usb_otg *otg, bool 
> enabled)
>  
>  static int omap_usb_start_srp(struct usb_otg *otg)
>  {
> - struct omap_usb *phy = phy_to_omapusb(otg->phy);
> + struct omap_usb *phy = phy_to_omapusb(otg->usb_phy);
>  
>   if (!phy->comparator)
>   return -ENODEV;
> @@ -251,7 +251,7 @@ static int omap_usb2_probe(struct platform_device *pdev)
>   otg->set_vbus   = omap_usb_set_vbus;
>   if (phy_data->flags & OMAP_USB2_HAS_START_SRP)
>   otg->start_srp  = omap_usb_start_srp;
> - otg->phy= &phy->phy;
> + otg->usb_phy= &phy->phy;
>  
>   platform_set_drvdata(pdev, phy);
>  
> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
> index 8cb2508a6b71..d8490e758a74 100644
> --- a/drivers/usb/chipidea/otg_fsm.c
> +++ b/drivers/usb/chipidea/otg_fsm.c
> @@ -788,7 +788,7 @@ int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
>   return -ENOMEM;
>   }
>  
> - otg->phy = ci->transceiver;
> + otg->usb_phy = ci->transceiver;
>   otg->gadget = &ci->gadget;
>   ci->fsm.otg = otg;
>   ci->transceiver->otg = ci->fsm.otg;
> diff --git a/drivers/usb/phy/phy-ab8500-usb.c 
> b/drivers/usb/phy/phy-ab8500-usb.c
> index 2d5250143ce1..3a802fa7dae2 100644
> --- a/drivers/usb/phy/phy-ab8500-usb.c
> +++ b/drivers/usb/phy/phy-ab8500-usb.c
> @@ -1056,7 +1056,7 @@ static int ab8500_usb_set_peripheral(struct usb_otg 
> *otg,
>   if (!otg)
>   return -ENODEV;
>  
> - ab = phy_to_ab(otg->phy);
> + ab = phy_to_ab(otg->usb_phy);
>  
>   ab->phy.otg->gadget = gadget;
>  
> @@ -1080,7 +1080,7 @@ static int ab8500_usb_set_host(struct usb_otg *otg, 
> struct usb_bus *host)
>   if (!otg)
>   return -ENODEV;
>  
> - ab = phy_to_ab(otg->phy);
> + ab = phy_to_ab(otg->usb_phy);
>  
>   ab->phy.otg->host = host;
>  
> @@ -1382,7 +1382,7 @@ static int ab8500_usb_probe(struct platform_device 
> *pdev)
>   ab->phy.set_power   = ab8500_usb_set_power;
>   ab->phy.otg->state  = OTG_STATE_UNDEFINED;
>  
> - otg->phy= &ab->phy;
> + otg->usb_phy= &ab->phy;
>   otg->set_host   = ab8500_usb_set_host;
>   otg->set_peripheral = ab8500_usb_set_peripheral;
>  
> diff --git a/drivers/usb/phy/phy-fsl-usb.c b/drivers/usb/phy/phy-fsl-usb.c
> index 15d7a81eece5..b7f36b212422 100644
> --- a/drivers/usb/phy/phy-fsl-usb.c
> +++ b/drivers/usb/phy/phy-fsl-usb.c
> @@ -499,7 +499,8 @@ int fsl_otg_start_host(struct otg_fsm *fsm, int on)
>  {
>   struct usb_otg *otg = fsm->otg;
>   struct device *dev;
> - struct fsl_otg *otg_dev = container_of(otg->phy, struct fsl_otg, phy);
> + struct fsl_otg *otg_dev =
> + container_of(otg->usb_phy, struct fsl_otg, phy);
>   u32 retval = 0;
>  
>   if (!otg->host)
> @@ -594,7 +595,7 @@ static int fsl_otg_set_host(struct usb_otg *otg, struct 
> usb_bus *host)
>   if (!otg)
>   return -ENODEV;
>  
> - otg_dev = container_of(otg->phy, struct fsl_otg, phy);
> + otg_dev = container_of(otg->usb_phy, struct fsl_otg, phy);
>   if (otg_dev != fsl_otg_dev)
>   return -ENODEV;
>  
> @@ -644,7 +645,7 @@ static int fsl_otg_set_peripheral(struct usb_otg *otg

Re: [PATCH v7 0/7] usb: add support for the generic PHY framework

2014-10-30 Thread Felipe Balbi
Hi,

On Tue, Oct 28, 2014 at 05:35:34PM +0100, Antoine Tenart wrote:
> The series can be found at:
> git://git.free-electrons.com:users/antoine-tenart/linux.git usb-phy
> 
> Changes since v6:
>   - rebased on top of v3.18-rc2
> 
> Changes since v5:
> - rebased on the latest version of Sergei's series[1]
> - fixed one modifiaction made in the wrong patch
> 
> Changes since v4:
> - reworked the PHY handling in ci_hdrc_probe()
> - fixed a rebase error
> 
> Changes since v3:
> - moved phy_exit() after phy_power_on()
> - fixed the PHY handling in ci_hdrc_probe()
> - some little fixes
> 
> Changes since v2:
> - rebased the series on top of v3.17-rc1
> - switched to devm_phy_get() to handle non DT cases
> - moved usb_otg into the ci_hdrc structure
> 
> Changes since v1:
> - rebased the series on top of [2] (generic PHY support for HCD)
> - split s/phy/usb_phy/ renaming and generic PHY support in separate
>   patches
> 
> [1] https://www.mail-archive.com/linux-usb%40vger.kernel.org/msg48068.html
> 
> Antoine Tenart (7):
>   usb: move the OTG state from the USB PHY to the OTG structure
>   usb: rename phy to usb_phy in OTG
>   usb: add support to the generic PHY framework in OTG
>   usb: allow to supply the PHY in the drivers when using HCD
>   usb: rename transceiver and phy to usb_phy in ChipIdea
>   usb: chipidea: move usb_otg into struct ci_hdrc
>   usb: chipidea: add support to the generic PHY framework in ChipIdea

quick question, who do you guys want this patchset to go through ? If
it's me, I can take them no problem.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v7 1/7] usb: move the OTG state from the USB PHY to the OTG structure

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 11:31:48AM -0500, Felipe Balbi wrote:
> On Tue, Oct 28, 2014 at 05:35:35PM +0100, Antoine Tenart wrote:
> > Before using the PHY framework instead of the USB PHY one, we need to
> > move the OTG state into another place, since it won't be available when
> > USB PHY isn't used. This patch moves the OTG state into the OTG
> > structure, and makes all the needed modifications in the drivers
> > using the OTG state.
> > 
> > Signed-off-by: Antoine Tenart 
> > Acked-by: Peter Chen 
> 
> Acked-by: Felipe Balbi 

fails to apply:

$ patch -p1 --dry-run < patch.diff 
checking file drivers/phy/phy-omap-usb2.c
checking file drivers/usb/chipidea/debug.c
checking file drivers/usb/chipidea/otg_fsm.c
checking file drivers/usb/common/usb-otg-fsm.c
checking file drivers/usb/host/ohci-omap.c
checking file drivers/usb/musb/am35x.c
checking file drivers/usb/musb/blackfin.c
checking file drivers/usb/musb/da8xx.c
checking file drivers/usb/musb/davinci.c
checking file drivers/usb/musb/musb_core.c
checking file drivers/usb/musb/musb_dsps.c
checking file drivers/usb/musb/musb_gadget.c
Hunk #3 succeeded at 1791 (offset -1 lines).
Hunk #4 succeeded at 1857 (offset -3 lines).
Hunk #5 FAILED at 1945.
Hunk #6 succeeded at 1968 (offset -7 lines).
Hunk #7 succeeded at 1982 (offset -7 lines).
Hunk #8 succeeded at 1994 (offset -7 lines).
Hunk #9 succeeded at 2012 (offset -7 lines).
Hunk #10 succeeded at 2043 (offset -7 lines).
Hunk #11 succeeded at 2118 (offset -7 lines).
1 out of 11 hunks FAILED
checking file drivers/usb/musb/musb_host.c
checking file drivers/usb/musb/musb_virthub.c
checking file drivers/usb/musb/omap2430.c
Hunk #6 succeeded at 180 (offset 1 line).
Hunk #7 succeeded at 192 (offset 1 line).
Hunk #8 succeeded at 201 (offset 1 line).
Hunk #9 succeeded at 266 (offset 1 line).
Hunk #10 succeeded at 280 (offset 1 line).
checking file drivers/usb/musb/tusb6010.c
checking file drivers/usb/musb/ux500.c
checking file drivers/usb/phy/phy-ab8500-usb.c
checking file drivers/usb/phy/phy-fsl-usb.c
checking file drivers/usb/phy/phy-generic.c
checking file drivers/usb/phy/phy-gpio-vbus-usb.c
checking file drivers/usb/phy/phy-msm-usb.c
Hunk #13 succeeded at 1769 (offset -6 lines).
checking file drivers/usb/phy/phy-mv-usb.c
Hunk #5 succeeded at 715 (offset -2 lines).
checking file include/linux/usb/otg.h
checking file include/linux/usb/phy.h

Please rebase on my testing/next and I'll take the series. When
rebasing, then add Peter's Tested-by/Acked-by where they're missing.

cheers

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v4 20/20] usb: dwc3: make HIRD threshold configurable

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 06:08:45PM +0800, Huang Rui wrote:
> HIRD threshold should be configurable by different platforms.
> 
> From DesignWare databook:
> When HIRD_Threshold[4] is set to 1b1 and HIRD value is greater than or
> equal to the value in HIRD_Threshold[3:0], dwc3 asserts output signals
> utmi_l1_suspend_n to put PHY into Deep Low-Power mode in L1.
> 
> When HIRD_Threshold[4] is set to 1b0 or the HIRD value is less than
> HIRD_Threshold[3:0], dwc3 asserts output signals utmi_sleep_n on L1.
> 
> Signed-off-by: Huang Rui 
> ---
>  Documentation/devicetree/bindings/usb/dwc3.txt |  3 +++
>  drivers/usb/dwc3/core.c| 17 +
>  drivers/usb/dwc3/core.h|  6 ++
>  drivers/usb/dwc3/gadget.c  |  6 +-
>  drivers/usb/dwc3/platform_data.h   |  3 +++
>  5 files changed, 30 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
> b/Documentation/devicetree/bindings/usb/dwc3.txt
> index feaf2c8..5b99755 100644
> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
> @@ -34,6 +34,9 @@ Optional properties:
>   LTSSM during USB3 Compliance mode.
>   - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
>   - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy.
> + - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal
> + utmi_l1_suspend_n, false when asserts utmi_sleep_n
> + - snps,hird-threshold: HIRD threshold
>  
>  This is usually a subnode to DWC3 glue to which it is connected.
>  
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index a28ed1c..f4172ab 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -729,6 +729,7 @@ static int dwc3_probe(struct platform_device *pdev)
>   struct dwc3 *dwc;
>   u8  lpm_nyet_threshold;
>   u8  tx_de_emphasis;
> + u8  hird_threshold;
>  
>   int ret;
>  
> @@ -790,12 +791,22 @@ static int dwc3_probe(struct platform_device *pdev)
>   /* default to -3.5dB de-emphasis */
>   tx_de_emphasis = 1;
>  
> + /*
> +  * defalut to assert utmi_sleep_n and use maximum allowed HIRD

default

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v4 19/20] usb: dwc3: add support for AMD Nolan platform

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 06:08:44PM +0800, Huang Rui wrote:
> This patch adds support for AMD Nolan (NL) FPGA and SoC platform.
> 
> Cc: Jason Chang 
> Signed-off-by: Huang Rui 
> ---
>  drivers/usb/dwc3/dwc3-pci.c | 23 +++
>  1 file changed, 23 insertions(+)
> 
> diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
> index ada975f..257fb3f9e 100644
> --- a/drivers/usb/dwc3/dwc3-pci.c
> +++ b/drivers/usb/dwc3/dwc3-pci.c
> @@ -145,6 +145,28 @@ static int dwc3_pci_probe(struct pci_dev *pci,
>   res[1].name = "dwc_usb3";
>   res[1].flags= IORESOURCE_IRQ;
>  
> + if (pci->vendor == PCI_VENDOR_ID_AMD &&
> + pci->device == PCI_DEVICE_ID_AMD_NL_USB) {
> + dwc3_pdata.has_lpm_erratum = true;
> + dwc3_pdata.lpm_nyet_threshold = 0xf;
> +
> + dwc3_pdata.u2exit_lfps_quirk = true;
> + dwc3_pdata.u2ss_inp3_quirk = true;
> + dwc3_pdata.req_p1p2p3_quirk = true;
> + dwc3_pdata.del_p1p2p3_quirk = true;
> + dwc3_pdata.del_phy_power_chg_quirk = true;
> + dwc3_pdata.lfps_filter_quirk = true;
> + dwc3_pdata.rx_detect_poll_quirk = true;
> +
> + dwc3_pdata.tx_de_emphasis_quirk = true;
> + dwc3_pdata.tx_de_emphasis = 1;
> +
> + /* FIXME these quirks should move when AMD NL taps out */

do you mean ?

/*
 * FIXME these quirks should be removed when AMD NL
 * tapes out
 */

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v4 16/20] usb: dwc3: add disable usb2 suspend phy quirk

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 06:08:41PM +0800, Huang Rui wrote:
> This patch adds disable usb2 suspend phy quirk, and some special platforms
> can configure that if it is needed.
> 
> Signed-off-by: Huang Rui 
> ---
>  Documentation/devicetree/bindings/usb/dwc3.txt | 1 +
>  drivers/usb/dwc3/core.c| 7 +++
>  drivers/usb/dwc3/core.h| 2 ++
>  drivers/usb/dwc3/platform_data.h   | 1 +
>  4 files changed, 11 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt 
> b/Documentation/devicetree/bindings/usb/dwc3.txt
> index 3720fca..feaf2c8 100644
> --- a/Documentation/devicetree/bindings/usb/dwc3.txt
> +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
> @@ -33,6 +33,7 @@ Optional properties:
>   - snps,tx_de_emphasis: the value driven to the PHY is controlled by the
>   LTSSM during USB3 Compliance mode.
>   - snps,dis_u3_susphy_quirk: when set core will disable USB3 suspend phy.
> + - snps,dis_u2_susphy_quirk: when set core will disable USB2 suspend phy.
>  
>  This is usually a subnode to DWC3 glue to which it is connected.
>  
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index fdc715a..a28ed1c 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -423,6 +423,10 @@ static void dwc3_phy_setup(struct dwc3 *dwc)
>   if (dwc->revision > DWC3_REVISION_194A)
>   reg |= DWC3_GUSB2PHYCFG_SUSPHY;
>  
> + /* FIXME will move FPGA flag when AMD NL taps out */

no need to mention AMD NL here. We still want to have is_fpga flag, just
dwc3-pci will be patches once AMD NL tapes out.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v4 14/20] usb: dwc3: add Tx de-emphasis quirk

2014-10-30 Thread Felipe Balbi
On Thu, Oct 30, 2014 at 06:08:39PM +0800, Huang Rui wrote:
> This patch adds Tx de-emphasis quirk, and the Tx de-emphasis value is
> configurable according to PIPE3 specification.
> 
> Value Description
> 0 -6dB de-emphasis
> 1 -3.5dB de-emphasis
> 2 No de-emphasis
> 3 Reserved
> 
> It can be configured on DT or platform data.
> 
> Signed-off-by: Huang Rui 

doesn't apply:

checking file Documentation/devicetree/bindings/usb/dwc3.txt
checking file drivers/usb/dwc3/core.c
Hunk #2 succeeded at 718 (offset -2 lines).
Hunk #3 succeeded at 777 (offset -2 lines).
Hunk #4 succeeded at 807 (offset -2 lines).
Hunk #5 succeeded at 829 (offset -2 lines).
Hunk #6 succeeded at 840 (offset -2 lines).
checking file drivers/usb/dwc3/core.h
Hunk #2 FAILED at 697.
1 out of 3 hunks FAILED
checking file drivers/usb/dwc3/platform_data.h

please rebase on testing/next

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH RESEND V4 2/9] mailbox: Add NVIDIA Tegra XUSB mailbox driver

2014-10-30 Thread Andrew Bresticker
On Thu, Oct 30, 2014 at 6:22 AM, Thierry Reding
 wrote:
> On Wed, Oct 29, 2014 at 11:02:36AM -0700, Andrew Bresticker wrote:
> [...]
>> > Maybe something like this patch would be more correct in handling
>> > this:
>> >
>> > diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
>> > index afcb430508ec..85691a7d8ca6 100644
>> > --- a/drivers/mailbox/mailbox.c
>> > +++ b/drivers/mailbox/mailbox.c
>> > @@ -117,10 +117,11 @@ static void poll_txdone(unsigned long data)
>> > struct mbox_chan *chan = &mbox->chans[i];
>> >
>> > if (chan->active_req && chan->cl) {
>> > -   resched = true;
>> > txdone = chan->mbox->ops->last_tx_done(chan);
>> > if (txdone)
>> > tx_tick(chan, 0);
>> > +   else
>> > +   resched = true;
>> > }
>> > }
>>
>> ... but we still need to re-arm the timer if tx_tick() submits another
>> message.  Perhaps the better thing to do is to have msg_submit() arm
>> the timer.
>
> I think we need both. If the last transmission isn't done yet we still
> want to keep polling. And we also want to poll if a new message is sent
> subsequently.
>
> Perhaps it would be as easy as moving the poll handling code from
> mbox_send_message() (if (chan->txdone_method == TXDONE_BY_POLL)) into
> msg_submit()? That has the additional advantage of being able to omit
> the polling when an error happens during the mbox' .send_data().

Yes, this is exactly what I've done :).
--
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


  1   2   3   >