Signed-off-by: John Crispin <blogic@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@44678
3c298f89-4303-0410-b956-
a3cf2f4a3e73
--- a/fs/yaffs2/yaffs_vfs.c
+++ b/fs/yaffs2/yaffs_vfs.c
--- a/fs/yaffs2/yaffs_vfs.c
+++ b/fs/yaffs2/yaffs_vfs.c
+@@ -796,13 +796,13 @@ static int yaffs_sync_object(struct file
static const struct file_operations yaffs_file_operations = {
.read = do_sync_read,
.write = do_sync_write,
static const struct file_operations yaffs_file_operations = {
.read = do_sync_read,
.write = do_sync_write,
.llseek = generic_file_llseek,
};
.llseek = generic_file_llseek,
};
+@@ -1050,7 +1050,7 @@ static int yaffs_readlink(struct dentry
if (!alias)
return -ENOMEM;
if (!alias)
return -ENOMEM;
--- a/arch/mips/lantiq/Kconfig
+++ b/arch/mips/lantiq/Kconfig
--- a/arch/mips/lantiq/Kconfig
+++ b/arch/mips/lantiq/Kconfig
+@@ -17,6 +17,7 @@ config SOC_XWAY
bool "XWAY"
select SOC_TYPE_XWAY
select HW_HAS_PCI
bool "XWAY"
select SOC_TYPE_XWAY
select HW_HAS_PCI
config SOC_FALCON
bool "FALCON"
config SOC_FALCON
bool "FALCON"
+@@ -37,6 +38,15 @@ config PCI_LANTIQ
bool "PCI Support"
depends on SOC_XWAY && PCI
bool "PCI Support"
depends on SOC_XWAY && PCI
depends on SOC_XWAY
--- a/arch/mips/lantiq/xway/sysctrl.c
+++ b/arch/mips/lantiq/xway/sysctrl.c
depends on SOC_XWAY
--- a/arch/mips/lantiq/xway/sysctrl.c
+++ b/arch/mips/lantiq/xway/sysctrl.c
+@@ -377,6 +377,8 @@ void __init ltq_soc_init(void)
PMU_PPE_EMA | PMU_PPE_TC | PMU_PPE_SLL01 |
PMU_PPE_QSB | PMU_PPE_TOP);
clkdev_add_pmu("1f203000.rcu", "gphy", 0, PMU_GPHY);
PMU_PPE_EMA | PMU_PPE_TC | PMU_PPE_SLL01 |
PMU_PPE_QSB | PMU_PPE_TOP);
clkdev_add_pmu("1f203000.rcu", "gphy", 0, PMU_GPHY);
ltq_ar9_fpi_hz(), CLOCK_250M);
--- a/arch/mips/pci/Makefile
+++ b/arch/mips/pci/Makefile
ltq_ar9_fpi_hz(), CLOCK_250M);
--- a/arch/mips/pci/Makefile
+++ b/arch/mips/pci/Makefile
+@@ -43,6 +43,8 @@ obj-$(CONFIG_SNI_RM) += fixup-sni.o ops
obj-$(CONFIG_LANTIQ) += fixup-lantiq.o
obj-$(CONFIG_PCI_LANTIQ) += pci-lantiq.o ops-lantiq.o
obj-$(CONFIG_SOC_RT3883) += pci-rt3883.o
obj-$(CONFIG_LANTIQ) += fixup-lantiq.o
obj-$(CONFIG_PCI_LANTIQ) += pci-lantiq.o ops-lantiq.o
obj-$(CONFIG_SOC_RT3883) += pci-rt3883.o
if (ltq_pci_plat_dev_init)
return ltq_pci_plat_dev_init(dev);
if (ltq_pci_plat_dev_init)
return ltq_pci_plat_dev_init(dev);
+@@ -25,5 +26,7 @@ int pcibios_plat_dev_init(struct pci_dev
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
{
+
--- a/arch/mips/pci/pci.c
+++ b/arch/mips/pci/pci.c
+
--- a/arch/mips/pci/pci.c
+++ b/arch/mips/pci/pci.c
+@@ -251,6 +251,31 @@ static int __init pcibios_init(void)
subsys_initcall(pcibios_init);
subsys_initcall(pcibios_init);
+
--- a/drivers/pci/pcie/aer/Kconfig
+++ b/drivers/pci/pcie/aer/Kconfig
+
--- a/drivers/pci/pcie/aer/Kconfig
+++ b/drivers/pci/pcie/aer/Kconfig
+@@ -19,6 +19,7 @@ config PCIEAER
config PCIE_ECRC
bool "PCI Express ECRC settings control"
depends on PCIEAER
config PCIE_ECRC
bool "PCI Express ECRC settings control"
depends on PCIEAER
(transaction layer end-to-end CRC checking).
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
(transaction layer end-to-end CRC checking).
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
+@@ -1160,6 +1160,8 @@ void pci_walk_bus(struct pci_bus *top, i
void *userdata);
int pci_cfg_space_size(struct pci_dev *dev);
unsigned char pci_bus_max_busnr(struct pci_bus *bus);
void *userdata);
int pci_cfg_space_size(struct pci_dev *dev);
unsigned char pci_bus_max_busnr(struct pci_bus *bus);
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
+@@ -198,6 +199,10 @@ static int m25p_probe(struct spi_device
enum read_mode mode = SPI_NOR_NORMAL;
char *flash_name = NULL;
int ret;
enum read_mode mode = SPI_NOR_NORMAL;
char *flash_name = NULL;
int ret;
data = dev_get_platdata(&spi->dev);
data = dev_get_platdata(&spi->dev);
+@@ -229,6 +234,8 @@ static int m25p_probe(struct spi_device
if (data && data->name)
flash->mtd.name = data->name;
if (data && data->name)
flash->mtd.name = data->name;
+#endif /* _PCI_ATH_FIXUP */
--- a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
+++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
+#endif /* _PCI_ATH_FIXUP */
--- a/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
+++ b/arch/mips/include/asm/mach-lantiq/xway/lantiq_soc.h
+@@ -90,5 +90,8 @@ int xrx200_gphy_boot(struct device *dev,
extern void ltq_pmu_enable(unsigned int module);
extern void ltq_pmu_disable(unsigned int module);
extern void ltq_pmu_enable(unsigned int module);
extern void ltq_pmu_disable(unsigned int module);
#endif /* _LTQ_XWAY_H__ */
--- a/arch/mips/lantiq/xway/Makefile
+++ b/arch/mips/lantiq/xway/Makefile
#endif /* _LTQ_XWAY_H__ */
--- a/arch/mips/lantiq/xway/Makefile
+++ b/arch/mips/lantiq/xway/Makefile
+@@ -2,4 +2,7 @@ obj-y := prom.o sysctrl.o clk.o reset.o
+device_initcall(of_ralink_eeprom_init);
--- a/drivers/net/ethernet/lantiq_etop.c
+++ b/drivers/net/ethernet/lantiq_etop.c
+device_initcall(of_ralink_eeprom_init);
--- a/drivers/net/ethernet/lantiq_etop.c
+++ b/drivers/net/ethernet/lantiq_etop.c
+@@ -161,7 +161,7 @@ struct ltq_etop_priv {
int mii_mode;
spinlock_t lock;
int mii_mode;
spinlock_t lock;
+@@ -840,7 +840,11 @@ ltq_etop_init(struct net_device *dev)
/* remapped base addr of the reset control unit */
static void __iomem *ltq_rcu_membase;
static struct device_node *ltq_rcu_np;
/* remapped base addr of the reset control unit */
static void __iomem *ltq_rcu_membase;
static struct device_node *ltq_rcu_np;
+@@ -200,6 +231,45 @@ static void ltq_machine_power_off(void)
static int __init mips_reboot_setup(void)
{
struct resource res;
static int __init mips_reboot_setup(void)
{
struct resource res;
+@@ -223,6 +293,9 @@ static int __init mips_reboot_setup(void
if (!ltq_rcu_membase)
panic("Failed to remap core memory");
if (!ltq_rcu_membase)
panic("Failed to remap core memory");
---- a/drivers/usb/dwc2/platform.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/platform.c 2015-02-09 19:22:41.974089626 +0200
+--- a/drivers/usb/dwc2/platform.c
++++ b/drivers/usb/dwc2/platform.c
@@ -40,6 +40,7 @@
#include <linux/device.h>
#include <linux/dma-mapping.h>
@@ -40,6 +40,7 @@
#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/platform_device.h>
#include <linux/usb/of.h>
#include <linux/platform_device.h>
#include <linux/usb/of.h>
+@@ -154,6 +155,7 @@ static int dwc2_driver_probe(struct plat
struct resource *res;
int retval;
int irq;
struct resource *res;
int retval;
int irq;
if (usb_disabled())
return -ENODEV;
if (usb_disabled())
return -ENODEV;
+@@ -173,6 +175,16 @@ static int dwc2_driver_probe(struct plat
defparams.dma_desc_enable = 0;
}
defparams.dma_desc_enable = 0;
}
---- a/drivers/usb/dwc2/platform.c 2015-02-09 19:37:34.553109992 +0200
-+++ b/drivers/usb/dwc2/platform.c 2015-02-09 19:38:30.090111260 +0200
-@@ -105,6 +105,34 @@
+--- a/drivers/usb/dwc2/platform.c
++++ b/drivers/usb/dwc2/platform.c
+@@ -106,6 +106,34 @@ static const struct dwc2_core_params par
/**
* dwc2_driver_remove() - Called when the DWC_otg core is unregistered with the
* DWC_otg driver
/**
* dwc2_driver_remove() - Called when the DWC_otg core is unregistered with the
* DWC_otg driver
+@@ -129,6 +157,7 @@ static int dwc2_driver_remove(struct pla
static const struct of_device_id dwc2_of_match_table[] = {
{ .compatible = "brcm,bcm2835-usb", .data = ¶ms_bcm2835 },
{ .compatible = "rockchip,rk3066-usb", .data = ¶ms_rk3066 },
static const struct of_device_id dwc2_of_match_table[] = {
{ .compatible = "brcm,bcm2835-usb", .data = ¶ms_bcm2835 },
{ .compatible = "rockchip,rk3066-usb", .data = ¶ms_rk3066 },
---- a/drivers/usb/dwc2/core.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/core.c 2015-02-09 19:34:42.863106075 +0200
-@@ -67,10 +67,10 @@
+--- a/drivers/usb/dwc2/core.c
++++ b/drivers/usb/dwc2/core.c
+@@ -67,10 +67,10 @@ static void dwc2_enable_common_interrupt
u32 intmsk;
/* Clear any pending OTG Interrupts */
u32 intmsk;
/* Clear any pending OTG Interrupts */
/* Enable the interrupts in the GINTMSK */
intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT;
/* Enable the interrupts in the GINTMSK */
intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT;
+@@ -81,7 +81,7 @@ static void dwc2_enable_common_interrupt
intmsk |= GINTSTS_CONIDSTSCHNG | GINTSTS_WKUPINT | GINTSTS_USBSUSP |
GINTSTS_SESSREQINT;
intmsk |= GINTSTS_CONIDSTSCHNG | GINTSTS_WKUPINT | GINTSTS_USBSUSP |
GINTSTS_SESSREQINT;
+@@ -104,10 +104,10 @@ static void dwc2_init_fs_ls_pclk_sel(str
}
dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val);
}
dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val);
+@@ -125,7 +125,7 @@ static int dwc2_core_reset(struct dwc2_h
/* Wait for AHB master IDLE state */
do {
usleep_range(20000, 40000);
/* Wait for AHB master IDLE state */
do {
usleep_range(20000, 40000);
if (++count > 50) {
dev_warn(hsotg->dev,
"%s() HANG! AHB Idle GRSTCTL=%0x\n",
if (++count > 50) {
dev_warn(hsotg->dev,
"%s() HANG! AHB Idle GRSTCTL=%0x\n",
+@@ -137,10 +137,10 @@ static int dwc2_core_reset(struct dwc2_h
/* Core Soft Reset */
count = 0;
greset |= GRSTCTL_CSFTRST;
/* Core Soft Reset */
count = 0;
greset |= GRSTCTL_CSFTRST;
if (++count > 50) {
dev_warn(hsotg->dev,
"%s() HANG! Soft Reset GRSTCTL=%0x\n",
if (++count > 50) {
dev_warn(hsotg->dev,
"%s() HANG! Soft Reset GRSTCTL=%0x\n",
+@@ -150,20 +150,20 @@ static int dwc2_core_reset(struct dwc2_h
} while (greset & GRSTCTL_CSFTRST);
if (hsotg->dr_mode == USB_DR_MODE_HOST) {
} while (greset & GRSTCTL_CSFTRST);
if (hsotg->dr_mode == USB_DR_MODE_HOST) {
+@@ -186,9 +186,9 @@ static int dwc2_fs_phy_init(struct dwc2_
*/
if (select_phy) {
dev_dbg(hsotg->dev, "FS PHY selected\n");
*/
if (select_phy) {
dev_dbg(hsotg->dev, "FS PHY selected\n");
/* Reset after a PHY select */
retval = dwc2_core_reset(hsotg);
/* Reset after a PHY select */
retval = dwc2_core_reset(hsotg);
+@@ -211,18 +211,18 @@ static int dwc2_fs_phy_init(struct dwc2_
dev_dbg(hsotg->dev, "FS PHY enabling I2C\n");
/* Program GUSBCFG.OtgUtmiFsSel to I2C */
dev_dbg(hsotg->dev, "FS PHY enabling I2C\n");
/* Program GUSBCFG.OtgUtmiFsSel to I2C */
+@@ -236,7 +236,7 @@ static int dwc2_hs_phy_init(struct dwc2_
if (!select_phy)
return 0;
if (!select_phy)
return 0;
/*
* HS PHY parameters. These parameters are preserved during soft reset
/*
* HS PHY parameters. These parameters are preserved during soft reset
+@@ -264,7 +264,7 @@ static int dwc2_hs_phy_init(struct dwc2_
/* Reset after setting the PHY parameters */
retval = dwc2_core_reset(hsotg);
/* Reset after setting the PHY parameters */
retval = dwc2_core_reset(hsotg);
+@@ -299,15 +299,15 @@ static int dwc2_phy_init(struct dwc2_hso
hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED &&
hsotg->core_params->ulpi_fs_ls > 0) {
dev_dbg(hsotg->dev, "Setting ULPI FSLS\n");
hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED &&
hsotg->core_params->ulpi_fs_ls > 0) {
dev_dbg(hsotg->dev, "Setting ULPI FSLS\n");
+@@ -315,7 +315,7 @@ static int dwc2_phy_init(struct dwc2_hso
static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
{
static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
{
switch (hsotg->hw_params.arch) {
case GHWCFG2_EXT_DMA_ARCH:
switch (hsotg->hw_params.arch) {
case GHWCFG2_EXT_DMA_ARCH:
+@@ -354,7 +354,7 @@ static int dwc2_gahbcfg_init(struct dwc2
if (hsotg->core_params->dma_enable > 0)
ahbcfg |= GAHBCFG_DMA_EN;
if (hsotg->core_params->dma_enable > 0)
ahbcfg |= GAHBCFG_DMA_EN;
+@@ -363,7 +363,7 @@ static void dwc2_gusbcfg_init(struct dwc
usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP);
switch (hsotg->hw_params.op_mode) {
usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP);
switch (hsotg->hw_params.op_mode) {
+@@ -391,7 +391,7 @@ static void dwc2_gusbcfg_init(struct dwc
+@@ -409,7 +409,7 @@ int dwc2_core_init(struct dwc2_hsotg *hs
dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
/* Set ULPI External VBUS bit if needed */
usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV;
/* Set ULPI External VBUS bit if needed */
usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV;
+@@ -422,7 +422,7 @@ int dwc2_core_init(struct dwc2_hsotg *hs
if (hsotg->core_params->ts_dline > 0)
usbcfg |= GUSBCFG_TERMSELDLPULSE;
if (hsotg->core_params->ts_dline > 0)
usbcfg |= GUSBCFG_TERMSELDLPULSE;
/* Reset the Controller */
retval = dwc2_core_reset(hsotg);
/* Reset the Controller */
retval = dwc2_core_reset(hsotg);
+@@ -448,11 +448,11 @@ int dwc2_core_init(struct dwc2_hsotg *hs
dwc2_gusbcfg_init(hsotg);
/* Program the GOTGCTL register */
dwc2_gusbcfg_init(hsotg);
/* Program the GOTGCTL register */
dev_dbg(hsotg->dev, "OTG VER PARAM: %d\n", hsotg->core_params->otg_ver);
/* Clear the SRP success bit for FS-I2c */
dev_dbg(hsotg->dev, "OTG VER PARAM: %d\n", hsotg->core_params->otg_ver);
/* Clear the SRP success bit for FS-I2c */
+@@ -498,16 +498,16 @@ void dwc2_enable_host_interrupts(struct
dev_dbg(hsotg->dev, "%s()\n", __func__);
/* Disable all interrupts */
dev_dbg(hsotg->dev, "%s()\n", __func__);
/* Disable all interrupts */
+@@ -517,12 +517,12 @@ void dwc2_enable_host_interrupts(struct
*/
void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg)
{
*/
void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg)
{
+@@ -602,36 +602,36 @@ static void dwc2_config_fifos(struct dwc
dwc2_calculate_dynamic_fifo(hsotg);
/* Rx FIFO */
dwc2_calculate_dynamic_fifo(hsotg);
/* Rx FIFO */
if (hsotg->core_params->en_multiple_tx_fifo > 0 &&
hsotg->hw_params.snpsid <= DWC2_CORE_REV_2_94a) {
if (hsotg->core_params->en_multiple_tx_fifo > 0 &&
hsotg->hw_params.snpsid <= DWC2_CORE_REV_2_94a) {
+@@ -639,14 +639,14 @@ static void dwc2_config_fifos(struct dwc
* Global DFIFOCFG calculation for Host mode -
* include RxFIFO, NPTXFIFO and HPTXFIFO
*/
* Global DFIFOCFG calculation for Host mode -
* include RxFIFO, NPTXFIFO and HPTXFIFO
*/
+@@ -667,14 +667,14 @@ void dwc2_core_host_init(struct dwc2_hso
dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
/* Restart the Phy Clock */
dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
/* Restart the Phy Clock */
+@@ -683,9 +683,9 @@ void dwc2_core_host_init(struct dwc2_hso
* and its value must not be changed during runtime.
*/
if (hsotg->core_params->reload_ctl > 0) {
* and its value must not be changed during runtime.
*/
if (hsotg->core_params->reload_ctl > 0) {
}
if (hsotg->core_params->dma_desc_enable > 0) {
}
if (hsotg->core_params->dma_desc_enable > 0) {
+@@ -701,9 +701,9 @@ void dwc2_core_host_init(struct dwc2_hso
"falling back to buffer DMA mode.\n");
hsotg->core_params->dma_desc_enable = 0;
} else {
"falling back to buffer DMA mode.\n");
hsotg->core_params->dma_desc_enable = 0;
} else {
+@@ -712,18 +712,18 @@ void dwc2_core_host_init(struct dwc2_hso
/* TODO - check this */
/* Clear Host Set HNP Enable in the OTG Control Register */
/* TODO - check this */
/* Clear Host Set HNP Enable in the OTG Control Register */
if (hsotg->core_params->dma_desc_enable <= 0) {
int num_channels, i;
if (hsotg->core_params->dma_desc_enable <= 0) {
int num_channels, i;
+@@ -732,25 +732,25 @@ void dwc2_core_host_init(struct dwc2_hso
/* Flush out any leftover queued requests */
num_channels = hsotg->core_params->host_channels;
for (i = 0; i < num_channels; i++) {
/* Flush out any leftover queued requests */
num_channels = hsotg->core_params->host_channels;
for (i = 0; i < num_channels; i++) {
if (++count > 1000) {
dev_err(hsotg->dev,
"Unable to clear enable on channel %d\n",
if (++count > 1000) {
dev_err(hsotg->dev,
"Unable to clear enable on channel %d\n",
+@@ -771,7 +771,7 @@ void dwc2_core_host_init(struct dwc2_hso
!!(hprt0 & HPRT0_PWR));
if (!(hprt0 & HPRT0_PWR)) {
hprt0 |= HPRT0_PWR;
!!(hprt0 & HPRT0_PWR));
if (!(hprt0 & HPRT0_PWR)) {
hprt0 |= HPRT0_PWR;
+@@ -851,7 +851,7 @@ static void dwc2_hc_enable_slave_ints(st
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
}
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
}
+@@ -888,7 +888,7 @@ static void dwc2_hc_enable_dma_ints(stru
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
}
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk);
}
+@@ -909,16 +909,16 @@ static void dwc2_hc_enable_ints(struct d
}
/* Enable the top level host channel interrupt */
}
/* Enable the top level host channel interrupt */
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk);
}
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk);
}
+@@ -947,7 +947,7 @@ void dwc2_hc_init(struct dwc2_hsotg *hso
/* Clear old interrupt conditions for this host channel */
hcintmsk = 0xffffffff;
hcintmsk &= ~HCINTMSK_RESERVED14_31;
/* Clear old interrupt conditions for this host channel */
hcintmsk = 0xffffffff;
hcintmsk &= ~HCINTMSK_RESERVED14_31;
/* Enable channel interrupts required for this transfer */
dwc2_hc_enable_ints(hsotg, chan);
/* Enable channel interrupts required for this transfer */
dwc2_hc_enable_ints(hsotg, chan);
+@@ -964,7 +964,7 @@ void dwc2_hc_init(struct dwc2_hsotg *hso
hcchar |= HCCHAR_LSPDDEV;
hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK;
hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_MASK;
hcchar |= HCCHAR_LSPDDEV;
hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK;
hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_MASK;
if (dbg_hc(chan)) {
dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n",
hc_num, hcchar);
if (dbg_hc(chan)) {
dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n",
hc_num, hcchar);
+@@ -1018,7 +1018,7 @@ void dwc2_hc_init(struct dwc2_hsotg *hso
+@@ -1070,14 +1070,14 @@ void dwc2_hc_halt(struct dwc2_hsotg *hso
u32 hcintmsk = HCINTMSK_CHHLTD;
dev_vdbg(hsotg->dev, "dequeue/error\n");
u32 hcintmsk = HCINTMSK_CHHLTD;
dev_vdbg(hsotg->dev, "dequeue/error\n");
/*
* Make sure the halt status is set to URB_DEQUEUE or AHB_ERR
/*
* Make sure the halt status is set to URB_DEQUEUE or AHB_ERR
+@@ -1086,7 +1086,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hso
*/
chan->halt_status = halt_status;
*/
chan->halt_status = halt_status;
if (!(hcchar & HCCHAR_CHENA)) {
/*
* The channel is either already halted or it hasn't
if (!(hcchar & HCCHAR_CHENA)) {
/*
* The channel is either already halted or it hasn't
+@@ -1114,7 +1114,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hso
/* No need to set the bit in DDMA for disabling the channel */
/* TODO check it everywhere channel is disabled */
/* No need to set the bit in DDMA for disabling the channel */
/* TODO check it everywhere channel is disabled */
+@@ -1137,7 +1137,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hso
if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL ||
chan->ep_type == USB_ENDPOINT_XFER_BULK) {
dev_vdbg(hsotg->dev, "control/bulk\n");
if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL ||
chan->ep_type == USB_ENDPOINT_XFER_BULK) {
dev_vdbg(hsotg->dev, "control/bulk\n");
if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) {
dev_vdbg(hsotg->dev, "Disabling channel\n");
hcchar &= ~HCCHAR_CHENA;
if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) {
dev_vdbg(hsotg->dev, "Disabling channel\n");
hcchar &= ~HCCHAR_CHENA;
+@@ -1145,7 +1145,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hso
} else {
if (dbg_perio())
dev_vdbg(hsotg->dev, "isoc/intr\n");
} else {
if (dbg_perio())
dev_vdbg(hsotg->dev, "isoc/intr\n");
if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 ||
hsotg->queuing_high_bandwidth) {
if (dbg_perio())
if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 ||
hsotg->queuing_high_bandwidth) {
if (dbg_perio())
+@@ -1158,7 +1158,7 @@ void dwc2_hc_halt(struct dwc2_hsotg *hso
dev_vdbg(hsotg->dev, "DMA enabled\n");
}
dev_vdbg(hsotg->dev, "DMA enabled\n");
}
chan->halt_status = halt_status;
if (hcchar & HCCHAR_CHENA) {
chan->halt_status = halt_status;
if (hcchar & HCCHAR_CHENA) {
+@@ -1205,10 +1205,10 @@ void dwc2_hc_cleanup(struct dwc2_hsotg *
* Clear channel interrupt enables and any unhandled channel interrupt
* conditions
*/
* Clear channel interrupt enables and any unhandled channel interrupt
* conditions
*/
+@@ -1294,13 +1294,13 @@ static void dwc2_hc_write_packet(struct
if (((unsigned long)data_buf & 0x3) == 0) {
/* xfer_buf is DWORD aligned */
for (i = 0; i < dword_count; i++, data_buf++)
if (((unsigned long)data_buf & 0x3) == 0) {
/* xfer_buf is DWORD aligned */
for (i = 0; i < dword_count; i++, data_buf++)
+@@ -1453,7 +1453,7 @@ void dwc2_hc_start_transfer(struct dwc2_
hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK;
hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT &
TSIZ_SC_MC_PID_MASK;
hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK;
hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT &
TSIZ_SC_MC_PID_MASK;
if (dbg_hc(chan)) {
dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n",
hctsiz, chan->hc_num);
if (dbg_hc(chan)) {
dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n",
hctsiz, chan->hc_num);
+@@ -1481,7 +1481,7 @@ void dwc2_hc_start_transfer(struct dwc2_
} else {
dma_addr = chan->xfer_dma;
}
} else {
dma_addr = chan->xfer_dma;
}
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n",
(unsigned long)dma_addr, chan->hc_num);
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n",
(unsigned long)dma_addr, chan->hc_num);
+@@ -1489,13 +1489,13 @@ void dwc2_hc_start_transfer(struct dwc2_
/* Start the split */
if (chan->do_split) {
/* Start the split */
if (chan->do_split) {
hcchar &= ~HCCHAR_MULTICNT_MASK;
hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
HCCHAR_MULTICNT_MASK;
hcchar &= ~HCCHAR_MULTICNT_MASK;
hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
HCCHAR_MULTICNT_MASK;
+@@ -1515,7 +1515,7 @@ void dwc2_hc_start_transfer(struct dwc2_
(hcchar & HCCHAR_MULTICNT_MASK) >>
HCCHAR_MULTICNT_SHIFT);
(hcchar & HCCHAR_MULTICNT_MASK) >>
HCCHAR_MULTICNT_SHIFT);
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
chan->hc_num);
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
chan->hc_num);
+@@ -1574,18 +1574,18 @@ void dwc2_hc_start_transfer_ddma(struct
dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1);
}
dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1);
}
hcchar &= ~HCCHAR_MULTICNT_MASK;
hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
HCCHAR_MULTICNT_MASK;
hcchar &= ~HCCHAR_MULTICNT_MASK;
hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT &
HCCHAR_MULTICNT_MASK;
+@@ -1604,7 +1604,7 @@ void dwc2_hc_start_transfer_ddma(struct
(hcchar & HCCHAR_MULTICNT_MASK) >>
HCCHAR_MULTICNT_SHIFT);
(hcchar & HCCHAR_MULTICNT_MASK) >>
HCCHAR_MULTICNT_SHIFT);
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
chan->hc_num);
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar,
chan->hc_num);
+@@ -1661,7 +1661,7 @@ int dwc2_hc_continue_transfer(struct dwc
* transfer completes, the extra requests for the channel will
* be flushed.
*/
* transfer completes, the extra requests for the channel will
* be flushed.
*/
dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
hcchar |= HCCHAR_CHENA;
dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar);
hcchar |= HCCHAR_CHENA;
+@@ -1669,7 +1669,7 @@ int dwc2_hc_continue_transfer(struct dwc
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n",
hcchar);
if (dbg_hc(chan))
dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n",
hcchar);
chan->requests++;
return 1;
}
chan->requests++;
return 1;
}
+@@ -1679,7 +1679,7 @@ int dwc2_hc_continue_transfer(struct dwc
if (chan->xfer_count < chan->xfer_len) {
if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
if (chan->xfer_count < chan->xfer_len) {
if (chan->ep_type == USB_ENDPOINT_XFER_INT ||
chan->ep_type == USB_ENDPOINT_XFER_ISOC) {
HCCHAR(chan->hc_num));
dwc2_hc_set_even_odd_frame(hsotg, chan,
HCCHAR(chan->hc_num));
dwc2_hc_set_even_odd_frame(hsotg, chan,
+@@ -1716,12 +1716,12 @@ void dwc2_hc_do_ping(struct dwc2_hsotg *
hctsiz = TSIZ_DOPNG;
hctsiz |= 1 << TSIZ_PKTCNT_SHIFT;
hctsiz = TSIZ_DOPNG;
hctsiz |= 1 << TSIZ_PKTCNT_SHIFT;
+@@ -1740,8 +1740,8 @@ u32 dwc2_calc_frame_interval(struct dwc2
u32 hprt0;
int clock = 60; /* default value */
u32 hprt0;
int clock = 60; /* default value */
if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) &&
!(usbcfg & GUSBCFG_PHYIF16))
if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) &&
!(usbcfg & GUSBCFG_PHYIF16))
+@@ -1797,7 +1797,7 @@ void dwc2_read_packet(struct dwc2_hsotg
dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes);
for (i = 0; i < word_count; i++, data_buf++)
dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes);
for (i = 0; i < word_count; i++, data_buf++)
+@@ -1817,56 +1817,56 @@ void dwc2_dump_host_registers(struct dwc
dev_dbg(hsotg->dev, "Host Global Registers\n");
addr = hsotg->regs + HCFG;
dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n",
dev_dbg(hsotg->dev, "Host Global Registers\n");
addr = hsotg->regs + HCFG;
dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n",
+@@ -1888,80 +1888,80 @@ void dwc2_dump_global_registers(struct d
dev_dbg(hsotg->dev, "Core Global Registers\n");
addr = hsotg->regs + GOTGCTL;
dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n",
dev_dbg(hsotg->dev, "Core Global Registers\n");
addr = hsotg->regs + GOTGCTL;
dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n",
+@@ -1980,15 +1980,15 @@ void dwc2_flush_tx_fifo(struct dwc2_hsot
greset = GRSTCTL_TXFFLSH;
greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK;
greset = GRSTCTL_TXFFLSH;
greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK;
+@@ -2011,10 +2011,10 @@ void dwc2_flush_rx_fifo(struct dwc2_hsot
dev_vdbg(hsotg->dev, "%s()\n", __func__);
greset = GRSTCTL_RXFFLSH;
dev_vdbg(hsotg->dev, "%s()\n", __func__);
greset = GRSTCTL_RXFFLSH;
if (++count > 10000) {
dev_warn(hsotg->dev, "%s() HANG! GRSTCTL=%0x\n",
__func__, greset);
if (++count > 10000) {
dev_warn(hsotg->dev, "%s() HANG! GRSTCTL=%0x\n",
__func__, greset);
+@@ -2676,7 +2676,7 @@ int dwc2_get_hwparams(struct dwc2_hsotg
* 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3",
* as in "OTG version 2.xx" or "OTG version 3.xx".
*/
* 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3",
* as in "OTG version 2.xx" or "OTG version 3.xx".
*/
if ((hw->snpsid & 0xfffff000) != 0x4f542000 &&
(hw->snpsid & 0xfffff000) != 0x4f543000) {
dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n",
if ((hw->snpsid & 0xfffff000) != 0x4f542000 &&
(hw->snpsid & 0xfffff000) != 0x4f543000) {
dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n",
+@@ -2688,11 +2688,11 @@ int dwc2_get_hwparams(struct dwc2_hsotg
hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf,
hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid);
hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf,
hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid);
dev_dbg(hsotg->dev, "hwcfg1=%08x\n", hwcfg1);
dev_dbg(hsotg->dev, "hwcfg2=%08x\n", hwcfg2);
dev_dbg(hsotg->dev, "hwcfg1=%08x\n", hwcfg1);
dev_dbg(hsotg->dev, "hwcfg2=%08x\n", hwcfg2);
+@@ -2701,18 +2701,18 @@ int dwc2_get_hwparams(struct dwc2_hsotg
dev_dbg(hsotg->dev, "grxfsiz=%08x\n", grxfsiz);
/* Force host mode to get HPTXFSIZ / GNPTXFSIZ exact power on value */
dev_dbg(hsotg->dev, "grxfsiz=%08x\n", grxfsiz);
/* Force host mode to get HPTXFSIZ / GNPTXFSIZ exact power on value */
usleep_range(100000, 150000);
/* hwcfg2 */
usleep_range(100000, 150000);
/* hwcfg2 */
+@@ -2831,7 +2831,7 @@ u16 dwc2_get_otg_version(struct dwc2_hso
bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg)
{
bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg)
{
return false;
else
return true;
return false;
else
return true;
+@@ -2845,10 +2845,10 @@ bool dwc2_is_controller_alive(struct dwc
*/
void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg)
{
*/
void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg)
{
+@@ -2859,10 +2859,10 @@ void dwc2_enable_global_interrupts(struc
*/
void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg)
{
*/
void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg)
{
}
MODULE_DESCRIPTION("DESIGNWARE HS OTG Core");
}
MODULE_DESCRIPTION("DESIGNWARE HS OTG Core");
---- a/drivers/usb/dwc2/core.h 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/core.h 2015-02-09 19:34:09.985105325 +0200
+--- a/drivers/usb/dwc2/core.h
++++ b/drivers/usb/dwc2/core.h
@@ -44,16 +44,28 @@
#include <linux/usb/phy.h>
#include "hw.h"
@@ -44,16 +44,28 @@
#include <linux/usb/phy.h>
#include "hw.h"
/* Maximum number of Endpoints/HostChannels */
#define MAX_EPS_CHANNELS 16
/* Maximum number of Endpoints/HostChannels */
#define MAX_EPS_CHANNELS 16
---- a/drivers/usb/dwc2/core_intr.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/core_intr.c 2015-02-09 19:34:42.865106075 +0200
-@@ -80,15 +80,15 @@
+--- a/drivers/usb/dwc2/core_intr.c
++++ b/drivers/usb/dwc2/core_intr.c
+@@ -80,15 +80,15 @@ static const char *dwc2_op_state_str(str
*/
static void dwc2_handle_usb_port_intr(struct dwc2_hsotg *hsotg)
{
*/
static void dwc2_handle_usb_port_intr(struct dwc2_hsotg *hsotg)
{
+@@ -102,7 +102,7 @@ static void dwc2_handle_mode_mismatch_in
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
/* Clear interrupt */
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
/* Clear interrupt */
+@@ -117,8 +117,8 @@ static void dwc2_handle_otg_intr(struct
u32 gotgctl;
u32 gintmsk;
u32 gotgctl;
u32 gintmsk;
dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint,
dwc2_op_state_str(hsotg));
dev_dbg(hsotg->dev, "++OTG Interrupt gotgint=%0x [%s]\n", gotgint,
dwc2_op_state_str(hsotg));
+@@ -126,7 +126,7 @@ static void dwc2_handle_otg_intr(struct
dev_dbg(hsotg->dev,
" ++OTG Interrupt: Session End Detected++ (%s)\n",
dwc2_op_state_str(hsotg));
dev_dbg(hsotg->dev,
" ++OTG Interrupt: Session End Detected++ (%s)\n",
dwc2_op_state_str(hsotg));
if (hsotg->op_state == OTG_STATE_B_HOST) {
hsotg->op_state = OTG_STATE_B_PERIPHERAL;
if (hsotg->op_state == OTG_STATE_B_HOST) {
hsotg->op_state = OTG_STATE_B_PERIPHERAL;
+@@ -149,15 +149,15 @@ static void dwc2_handle_otg_intr(struct
hsotg->lx_state = DWC2_L0;
}
hsotg->lx_state = DWC2_L0;
}
if (gotgctl & GOTGCTL_SESREQSCS) {
if (hsotg->core_params->phy_type ==
DWC2_PHY_TYPE_PARAM_FS
if (gotgctl & GOTGCTL_SESREQSCS) {
if (hsotg->core_params->phy_type ==
DWC2_PHY_TYPE_PARAM_FS
+@@ -165,9 +165,9 @@ static void dwc2_handle_otg_intr(struct
hsotg->srp_success = 1;
} else {
/* Clear Session Request */
hsotg->srp_success = 1;
} else {
/* Clear Session Request */
+@@ -177,7 +177,7 @@ static void dwc2_handle_otg_intr(struct
* Print statements during the HNP interrupt handling
* can cause it to fail
*/
* Print statements during the HNP interrupt handling
* can cause it to fail
*/
/*
* WA for 3.00a- HW is not setting cur_mode, even sometimes
* this does not help
/*
* WA for 3.00a- HW is not setting cur_mode, even sometimes
* this does not help
+@@ -197,9 +197,9 @@ static void dwc2_handle_otg_intr(struct
* interrupt does not get handled and Linux
* complains loudly.
*/
* interrupt does not get handled and Linux
* complains loudly.
*/
/*
* Call callback function with spin lock
/*
* Call callback function with spin lock
+@@ -213,9 +213,9 @@ static void dwc2_handle_otg_intr(struct
hsotg->op_state = OTG_STATE_B_HOST;
}
} else {
hsotg->op_state = OTG_STATE_B_HOST;
}
} else {
dev_dbg(hsotg->dev, "HNP Failed\n");
dev_err(hsotg->dev,
"Device Not Connected/Responding\n");
dev_dbg(hsotg->dev, "HNP Failed\n");
dev_err(hsotg->dev,
"Device Not Connected/Responding\n");
+@@ -241,9 +241,9 @@ static void dwc2_handle_otg_intr(struct
hsotg->op_state = OTG_STATE_A_PERIPHERAL;
} else {
/* Need to disable SOF interrupt immediately */
hsotg->op_state = OTG_STATE_A_PERIPHERAL;
} else {
/* Need to disable SOF interrupt immediately */
spin_unlock(&hsotg->lock);
dwc2_hcd_start(hsotg);
spin_lock(&hsotg->lock);
spin_unlock(&hsotg->lock);
dwc2_hcd_start(hsotg);
spin_lock(&hsotg->lock);
+@@ -258,7 +258,7 @@ static void dwc2_handle_otg_intr(struct
dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n");
/* Clear GOTGINT */
dev_dbg(hsotg->dev, " ++OTG Interrupt: Debounce Done++\n");
/* Clear GOTGINT */
+@@ -273,11 +273,11 @@ static void dwc2_handle_otg_intr(struct
*/
static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
{
*/
static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg)
{
dev_dbg(hsotg->dev, " ++Connector ID Status Change Interrupt++ (%s)\n",
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
dev_dbg(hsotg->dev, " ++Connector ID Status Change Interrupt++ (%s)\n",
dwc2_is_host_mode(hsotg) ? "Host" : "Device");
+@@ -292,7 +292,7 @@ static void dwc2_handle_conn_id_status_c
spin_lock(&hsotg->lock);
/* Clear interrupt */
spin_lock(&hsotg->lock);
/* Clear interrupt */
+@@ -311,7 +311,7 @@ static void dwc2_handle_session_req_intr
dev_dbg(hsotg->dev, "++Session Request Interrupt++\n");
/* Clear interrupt */
dev_dbg(hsotg->dev, "++Session Request Interrupt++\n");
/* Clear interrupt */
+@@ -327,23 +327,23 @@ static void dwc2_handle_wakeup_detected_
dev_dbg(hsotg->dev, "%s lxstate = %d\n", __func__, hsotg->lx_state);
if (dwc2_is_device_mode(hsotg)) {
dev_dbg(hsotg->dev, "%s lxstate = %d\n", __func__, hsotg->lx_state);
if (dwc2_is_device_mode(hsotg)) {
mod_timer(&hsotg->wkp_timer,
jiffies + msecs_to_jiffies(71));
} else {
mod_timer(&hsotg->wkp_timer,
jiffies + msecs_to_jiffies(71));
} else {
+@@ -353,7 +353,7 @@ static void dwc2_handle_wakeup_detected_
+@@ -369,7 +369,7 @@ static void dwc2_handle_disconnect_intr(
/* Change to L3 (OFF) state */
hsotg->lx_state = DWC2_L3;
/* Change to L3 (OFF) state */
hsotg->lx_state = DWC2_L3;
+@@ -391,7 +391,7 @@ static void dwc2_handle_usb_suspend_intr
* Check the Device status register to determine if the Suspend
* state is active
*/
* Check the Device status register to determine if the Suspend
* state is active
*/
dev_dbg(hsotg->dev, "DSTS=0x%0x\n", dsts);
dev_dbg(hsotg->dev,
"DSTS.Suspend Status=%d HWCFG4.Power Optimize=%d\n",
dev_dbg(hsotg->dev, "DSTS=0x%0x\n", dsts);
dev_dbg(hsotg->dev,
"DSTS.Suspend Status=%d HWCFG4.Power Optimize=%d\n",
+@@ -413,7 +413,7 @@ static void dwc2_handle_usb_suspend_intr
hsotg->lx_state = DWC2_L2;
/* Clear interrupt */
hsotg->lx_state = DWC2_L2;
/* Clear interrupt */
}
#define GINTMSK_COMMON (GINTSTS_WKUPINT | GINTSTS_SESSREQINT | \
}
#define GINTMSK_COMMON (GINTSTS_WKUPINT | GINTSTS_SESSREQINT | \
+@@ -431,9 +431,9 @@ static u32 dwc2_read_common_intr(struct
u32 gahbcfg;
u32 gintmsk_common = GINTMSK_COMMON;
u32 gahbcfg;
u32 gintmsk_common = GINTMSK_COMMON;
/* If any common interrupts set */
if (gintsts & gintmsk_common)
/* If any common interrupts set */
if (gintsts & gintmsk_common)
---- a/drivers/usb/dwc2/gadget.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/gadget.c 2015-02-09 19:34:42.891106076 +0200
-@@ -55,12 +55,12 @@
+--- a/drivers/usb/dwc2/gadget.c
++++ b/drivers/usb/dwc2/gadget.c
+@@ -55,12 +55,12 @@ static inline struct s3c_hsotg *to_hsotg
static inline void __orr32(void __iomem *ptr, u32 val)
{
static inline void __orr32(void __iomem *ptr, u32 val)
{
}
/* forward decleration of functions */
}
/* forward decleration of functions */
+@@ -97,14 +97,14 @@ static inline bool using_dma(struct s3c_
*/
static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints)
{
*/
static void s3c_hsotg_en_gsint(struct s3c_hsotg *hsotg, u32 ints)
{
+@@ -115,13 +115,13 @@ static void s3c_hsotg_en_gsint(struct s3
*/
static void s3c_hsotg_disable_gsint(struct s3c_hsotg *hsotg, u32 ints)
{
*/
static void s3c_hsotg_disable_gsint(struct s3c_hsotg *hsotg, u32 ints)
{
+@@ -146,12 +146,12 @@ static void s3c_hsotg_ctrl_epint(struct
bit <<= 16;
local_irq_save(flags);
bit <<= 16;
local_irq_save(flags);
local_irq_restore(flags);
}
local_irq_restore(flags);
}
+@@ -169,8 +169,8 @@ static void s3c_hsotg_init_fifo(struct s
/* set FIFO sizes to 2048/1024 */
/* set FIFO sizes to 2048/1024 */
(1024 << FIFOSIZE_DEPTH_SHIFT), hsotg->regs + GNPTXFSIZ);
/*
(1024 << FIFOSIZE_DEPTH_SHIFT), hsotg->regs + GNPTXFSIZ);
/*
+@@ -200,7 +200,7 @@ static void s3c_hsotg_init_fifo(struct s
"insufficient fifo memory");
addr += size;
"insufficient fifo memory");
addr += size;
}
/* 768*4=3072 bytes FIFO length */
size = 768;
}
/* 768*4=3072 bytes FIFO length */
size = 768;
+@@ -211,7 +211,7 @@ static void s3c_hsotg_init_fifo(struct s
"insufficient fifo memory");
addr += size;
"insufficient fifo memory");
addr += size;
+@@ -219,13 +219,13 @@ static void s3c_hsotg_init_fifo(struct s
* all fifos are flushed before continuing
*/
* all fifos are flushed before continuing
*/
if ((val & (GRSTCTL_TXFFLSH | GRSTCTL_RXFFLSH)) == 0)
break;
if ((val & (GRSTCTL_TXFFLSH | GRSTCTL_RXFFLSH)) == 0)
break;
+@@ -317,7 +317,7 @@ static int s3c_hsotg_write_fifo(struct s
struct s3c_hsotg_req *hs_req)
{
bool periodic = is_ep_periodic(hs_ep);
struct s3c_hsotg_req *hs_req)
{
bool periodic = is_ep_periodic(hs_ep);
int buf_pos = hs_req->req.actual;
int to_write = hs_ep->size_loaded;
void *data;
int buf_pos = hs_req->req.actual;
int to_write = hs_ep->size_loaded;
void *data;
+@@ -332,7 +332,7 @@ static int s3c_hsotg_write_fifo(struct s
return 0;
if (periodic && !hsotg->dedicated_fifos) {
return 0;
if (periodic && !hsotg->dedicated_fifos) {
int size_left;
int size_done;
int size_left;
int size_done;
+@@ -373,7 +373,7 @@ static int s3c_hsotg_write_fifo(struct s
return -ENOSPC;
}
} else if (hsotg->dedicated_fifos && hs_ep->index != 0) {
return -ENOSPC;
}
} else if (hsotg->dedicated_fifos && hs_ep->index != 0) {
can_write &= 0xffff;
can_write *= 4;
can_write &= 0xffff;
can_write *= 4;
+@@ -550,11 +550,11 @@ static void s3c_hsotg_start_req(struct s
epsize_reg = dir_in ? DIEPTSIZ(index) : DOEPTSIZ(index);
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n",
epsize_reg = dir_in ? DIEPTSIZ(index) : DOEPTSIZ(index);
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x, ep %d, dir %s\n",
if (ctrl & DXEPCTL_STALL) {
dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index);
if (ctrl & DXEPCTL_STALL) {
dev_warn(hsotg->dev, "%s: ep%d is stalled\n", __func__, index);
+@@ -622,7 +622,7 @@ static void s3c_hsotg_start_req(struct s
hs_ep->req = hs_req;
/* write size / packets */
hs_ep->req = hs_req;
/* write size / packets */
if (using_dma(hsotg) && !continuing) {
unsigned int dma_reg;
if (using_dma(hsotg) && !continuing) {
unsigned int dma_reg;
+@@ -633,7 +633,7 @@ static void s3c_hsotg_start_req(struct s
*/
dma_reg = dir_in ? DIEPDMA(index) : DOEPDMA(index);
*/
dma_reg = dir_in ? DIEPDMA(index) : DOEPDMA(index);
dev_dbg(hsotg->dev, "%s: %pad => 0x%08x\n",
__func__, &ureq->dma, dma_reg);
dev_dbg(hsotg->dev, "%s: %pad => 0x%08x\n",
__func__, &ureq->dma, dma_reg);
+@@ -652,7 +652,7 @@ static void s3c_hsotg_start_req(struct s
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
dev_dbg(hsotg->dev, "%s: DxEPCTL=0x%08x\n", __func__, ctrl);
/*
* set these, it seems that DMA support increments past the end
/*
* set these, it seems that DMA support increments past the end
+@@ -674,7 +674,7 @@ static void s3c_hsotg_start_req(struct s
* to debugging to see what is going on.
*/
if (dir_in)
* to debugging to see what is going on.
*/
if (dir_in)
hsotg->regs + DIEPINT(index));
/*
hsotg->regs + DIEPINT(index));
/*
+@@ -683,13 +683,13 @@ static void s3c_hsotg_start_req(struct s
*/
/* check ep is enabled */
*/
/* check ep is enabled */
/* enable ep interrupts */
s3c_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 1);
/* enable ep interrupts */
s3c_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 1);
+@@ -1051,14 +1051,14 @@ static void s3c_hsotg_stall_ep0(struct s
* taken effect, so no need to clear later.
*/
* taken effect, so no need to clear later.
*/
/*
* complete won't be called, so we enqueue
/*
* complete won't be called, so we enqueue
+@@ -1108,11 +1108,11 @@ static void s3c_hsotg_process_control(st
switch (ctrl->bRequest) {
case USB_REQ_SET_ADDRESS:
s3c_hsotg_disconnect(hsotg);
switch (ctrl->bRequest) {
case USB_REQ_SET_ADDRESS:
s3c_hsotg_disconnect(hsotg);
dev_info(hsotg->dev, "new address %d\n", ctrl->wValue);
dev_info(hsotg->dev, "new address %d\n", ctrl->wValue);
+@@ -1302,7 +1302,7 @@ static void s3c_hsotg_rx_data(struct s3c
int ptr;
dev_warn(hsotg->dev,
int ptr;
dev_warn(hsotg->dev,
+@@ -1311,7 +1311,7 @@ static void s3c_hsotg_rx_data(struct s3c
/* dump the data from the FIFO, we've nothing we can do */
for (ptr = 0; ptr < size; ptr += 4)
/* dump the data from the FIFO, we've nothing we can do */
for (ptr = 0; ptr < size; ptr += 4)
+@@ -1378,14 +1378,14 @@ static void s3c_hsotg_send_zlp(struct s3
dev_dbg(hsotg->dev, "sending zero-length packet\n");
/* issue a zero-sized packet to terminate this */
dev_dbg(hsotg->dev, "sending zero-length packet\n");
/* issue a zero-sized packet to terminate this */
+@@ -1401,7 +1401,7 @@ static void s3c_hsotg_send_zlp(struct s3
static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
int epnum, bool was_setup)
{
static void s3c_hsotg_handle_outdone(struct s3c_hsotg *hsotg,
int epnum, bool was_setup)
{
struct s3c_hsotg_ep *hs_ep = &hsotg->eps[epnum];
struct s3c_hsotg_req *hs_req = hs_ep->req;
struct usb_request *req = &hs_req->req;
struct s3c_hsotg_ep *hs_ep = &hsotg->eps[epnum];
struct s3c_hsotg_req *hs_req = hs_ep->req;
struct usb_request *req = &hs_req->req;
+@@ -1475,7 +1475,7 @@ static u32 s3c_hsotg_read_frameno(struct
dsts &= DSTS_SOFFN_MASK;
dsts >>= DSTS_SOFFN_SHIFT;
dsts &= DSTS_SOFFN_MASK;
dsts >>= DSTS_SOFFN_SHIFT;
+@@ -1500,7 +1500,7 @@ static u32 s3c_hsotg_read_frameno(struct
*/
static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
{
*/
static void s3c_hsotg_handle_rx(struct s3c_hsotg *hsotg)
{
u32 epnum, status, size;
WARN_ON(using_dma(hsotg));
u32 epnum, status, size;
WARN_ON(using_dma(hsotg));
+@@ -1532,7 +1532,7 @@ static void s3c_hsotg_handle_rx(struct s
dev_dbg(hsotg->dev,
"SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
s3c_hsotg_read_frameno(hsotg),
dev_dbg(hsotg->dev,
"SetupDone (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
s3c_hsotg_read_frameno(hsotg),
s3c_hsotg_handle_outdone(hsotg, epnum, true);
break;
s3c_hsotg_handle_outdone(hsotg, epnum, true);
break;
+@@ -1545,7 +1545,7 @@ static void s3c_hsotg_handle_rx(struct s
dev_dbg(hsotg->dev,
"SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
s3c_hsotg_read_frameno(hsotg),
dev_dbg(hsotg->dev,
"SetupRX (Frame=0x%08x, DOPEPCTL=0x%08x)\n",
s3c_hsotg_read_frameno(hsotg),
s3c_hsotg_rx_data(hsotg, epnum, size);
break;
s3c_hsotg_rx_data(hsotg, epnum, size);
break;
+@@ -1622,16 +1622,16 @@ static void s3c_hsotg_set_ep_maxpacket(s
* if one of the directions may not be in use.
*/
* if one of the directions may not be in use.
*/
+@@ -1650,14 +1650,14 @@ static void s3c_hsotg_txfifo_flush(struc
if ((val & (GRSTCTL_TXFFLSH)) == 0)
break;
if ((val & (GRSTCTL_TXFFLSH)) == 0)
break;
+@@ -1718,7 +1718,7 @@ static void s3c_hsotg_complete_in(struct
struct s3c_hsotg_ep *hs_ep)
{
struct s3c_hsotg_req *hs_req = hs_ep->req;
struct s3c_hsotg_ep *hs_ep)
{
struct s3c_hsotg_req *hs_req = hs_ep->req;
int size_left, size_done;
if (!hs_req) {
int size_left, size_done;
if (!hs_req) {
+@@ -1801,11 +1801,11 @@ static void s3c_hsotg_epint(struct s3c_h
dev_dbg(hsotg->dev, "%s: ep%d(%s) DxEPINT=0x%08x\n",
__func__, idx, dir_in ? "in" : "out", ints);
dev_dbg(hsotg->dev, "%s: ep%d(%s) DxEPINT=0x%08x\n",
__func__, idx, dir_in ? "in" : "out", ints);
+@@ -1816,13 +1816,13 @@ static void s3c_hsotg_epint(struct s3c_h
ctrl |= DXEPCTL_SETEVENFR;
else
ctrl |= DXEPCTL_SETODDFR;
ctrl |= DXEPCTL_SETEVENFR;
else
ctrl |= DXEPCTL_SETODDFR;
/*
* we get OutDone from the FIFO, so we only need to look
/*
* we get OutDone from the FIFO, so we only need to look
+@@ -1847,16 +1847,16 @@ static void s3c_hsotg_epint(struct s3c_h
dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__);
if (dir_in) {
dev_dbg(hsotg->dev, "%s: EPDisbld\n", __func__);
if (dir_in) {
+@@ -1918,7 +1918,7 @@ static void s3c_hsotg_epint(struct s3c_h
*/
static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
{
*/
static void s3c_hsotg_irq_enumdone(struct s3c_hsotg *hsotg)
{
int ep0_mps = 0, ep_mps = 8;
/*
int ep0_mps = 0, ep_mps = 8;
/*
+@@ -1979,8 +1979,8 @@ static void s3c_hsotg_irq_enumdone(struc
s3c_hsotg_enqueue_setup(hsotg);
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
s3c_hsotg_enqueue_setup(hsotg);
dev_dbg(hsotg->dev, "EP0: DIEPCTL0=0x%08x, DOEPCTL0=0x%08x\n",
+@@ -2014,7 +2014,7 @@ static void kill_all_requests(struct s3c
}
if (!hsotg->dedicated_fifos)
return;
}
if (!hsotg->dedicated_fifos)
return;
if (size < ep->fifo_size)
s3c_hsotg_txfifo_flush(hsotg, ep->fifo_index);
}
if (size < ep->fifo_size)
s3c_hsotg_txfifo_flush(hsotg, ep->fifo_index);
}
+@@ -2084,11 +2084,11 @@ static int s3c_hsotg_corereset(struct s3
dev_dbg(hsotg->dev, "resetting core\n");
/* issue soft reset */
dev_dbg(hsotg->dev, "resetting core\n");
/* issue soft reset */
} while ((grstctl & GRSTCTL_CSFTRST) && timeout-- > 0);
if (grstctl & GRSTCTL_CSFTRST) {
} while ((grstctl & GRSTCTL_CSFTRST) && timeout-- > 0);
if (grstctl & GRSTCTL_CSFTRST) {
+@@ -2099,7 +2099,7 @@ static int s3c_hsotg_corereset(struct s3
timeout = 10000;
while (1) {
timeout = 10000;
while (1) {
if (timeout-- < 0) {
dev_info(hsotg->dev,
if (timeout-- < 0) {
dev_info(hsotg->dev,
+@@ -2134,22 +2134,22 @@ static void s3c_hsotg_core_init(struct s
*/
/* set the PLL on, remove the HNP/SRP and set the PHY */
*/
/* set the PLL on, remove the HNP/SRP and set the PHY */
GINTSTS_GOUTNAKEFF | GINTSTS_GINNAKEFF |
GINTSTS_CONIDSTSCHNG | GINTSTS_USBRST |
GINTSTS_ENUMDONE | GINTSTS_OTGINT |
GINTSTS_GOUTNAKEFF | GINTSTS_GINNAKEFF |
GINTSTS_CONIDSTSCHNG | GINTSTS_USBRST |
GINTSTS_ENUMDONE | GINTSTS_OTGINT |
+@@ -2157,11 +2157,11 @@ static void s3c_hsotg_core_init(struct s
hsotg->regs + GINTMSK);
if (using_dma(hsotg))
hsotg->regs + GINTMSK);
if (using_dma(hsotg))
GAHBCFG_P_TXF_EMP_LVL) : 0) |
GAHBCFG_GLBL_INTR_EN,
hsotg->regs + GAHBCFG);
GAHBCFG_P_TXF_EMP_LVL) : 0) |
GAHBCFG_GLBL_INTR_EN,
hsotg->regs + GAHBCFG);
+@@ -2172,7 +2172,7 @@ static void s3c_hsotg_core_init(struct s
DIEPMSK_INTKNTXFEMPMSK : 0) |
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK |
DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK |
DIEPMSK_INTKNTXFEMPMSK : 0) |
DIEPMSK_EPDISBLDMSK | DIEPMSK_XFERCOMPLMSK |
DIEPMSK_TIMEOUTMSK | DIEPMSK_AHBERRMSK |
+@@ -2183,17 +2183,17 @@ static void s3c_hsotg_core_init(struct s
* don't need XferCompl, we get that from RXFIFO in slave mode. In
* DMA mode we may need this.
*/
* don't need XferCompl, we get that from RXFIFO in slave mode. In
* DMA mode we may need this.
*/
/* enable in and out endpoint interrupts */
s3c_hsotg_en_gsint(hsotg, GINTSTS_OEPINT | GINTSTS_IEPINT);
/* enable in and out endpoint interrupts */
s3c_hsotg_en_gsint(hsotg, GINTSTS_OEPINT | GINTSTS_IEPINT);
+@@ -2214,7 +2214,7 @@ static void s3c_hsotg_core_init(struct s
udelay(10); /* see openiboot */
__bic32(hsotg->regs + DCTL, DCTL_PWRONPRGDONE);
udelay(10); /* see openiboot */
__bic32(hsotg->regs + DCTL, DCTL_PWRONPRGDONE);
/*
* DxEPCTL_USBActEp says RO in manual, but seems to be set by
/*
* DxEPCTL_USBActEp says RO in manual, but seems to be set by
+@@ -2222,26 +2222,26 @@ static void s3c_hsotg_core_init(struct s
*/
/* set to read 1 8byte packet */
*/
/* set to read 1 8byte packet */
hsotg->regs + DCTL);
/* must be at-least 3ms to allow bus to see disconnect */
hsotg->regs + DCTL);
/* must be at-least 3ms to allow bus to see disconnect */
+@@ -2265,8 +2265,8 @@ static irqreturn_t s3c_hsotg_irq(int irq
spin_lock(&hsotg->lock);
irq_retry:
spin_lock(&hsotg->lock);
irq_retry:
dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n",
__func__, gintsts, gintsts & gintmsk, gintmsk, retry_count);
dev_dbg(hsotg->dev, "%s: %08x %08x (%08x) retry %d\n",
__func__, gintsts, gintsts & gintmsk, gintmsk, retry_count);
+@@ -2274,35 +2274,35 @@ irq_retry:
gintsts &= gintmsk;
if (gintsts & GINTSTS_OTGINT) {
gintsts &= gintmsk;
if (gintsts & GINTSTS_OTGINT) {
u32 daint_out, daint_in;
int ep;
u32 daint_out, daint_in;
int ep;
+@@ -2325,13 +2325,13 @@ irq_retry:
if (gintsts & GINTSTS_USBRST) {
if (gintsts & GINTSTS_USBRST) {
if (usb_status & GOTGCTL_BSESVLD) {
if (time_after(jiffies, hsotg->last_rst +
if (usb_status & GOTGCTL_BSESVLD) {
if (time_after(jiffies, hsotg->last_rst +
+@@ -2382,26 +2382,26 @@ irq_retry:
if (gintsts & GINTSTS_MODEMIS) {
dev_warn(hsotg->dev, "warning, mode mismatch triggered\n");
if (gintsts & GINTSTS_MODEMIS) {
dev_warn(hsotg->dev, "warning, mode mismatch triggered\n");
+@@ -2413,7 +2413,7 @@ irq_retry:
if (gintsts & GINTSTS_GOUTNAKEFF) {
dev_info(hsotg->dev, "GOUTNakEff triggered\n");
if (gintsts & GINTSTS_GOUTNAKEFF) {
dev_info(hsotg->dev, "GOUTNakEff triggered\n");
+@@ -2421,7 +2421,7 @@ irq_retry:
if (gintsts & GINTSTS_GINNAKEFF) {
dev_info(hsotg->dev, "GINNakEff triggered\n");
if (gintsts & GINTSTS_GINNAKEFF) {
dev_info(hsotg->dev, "GINNakEff triggered\n");
+@@ -2479,7 +2479,7 @@ static int s3c_hsotg_ep_enable(struct us
/* note, we handle this here instead of s3c_hsotg_set_ep_maxpacket */
epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
/* note, we handle this here instead of s3c_hsotg_set_ep_maxpacket */
epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index);
dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n",
__func__, epctrl, epctrl_reg);
dev_dbg(hsotg->dev, "%s: read DxEPCTL=0x%08x from 0x%08x\n",
__func__, epctrl, epctrl_reg);
+@@ -2550,7 +2550,7 @@ static int s3c_hsotg_ep_enable(struct us
for (i = 1; i <= 8; ++i) {
if (hsotg->fifo_map & (1<<i))
continue;
for (i = 1; i <= 8; ++i) {
if (hsotg->fifo_map & (1<<i))
continue;
val = (val >> FIFOSIZE_DEPTH_SHIFT)*4;
if (val < size)
continue;
val = (val >> FIFOSIZE_DEPTH_SHIFT)*4;
if (val < size)
continue;
+@@ -2574,9 +2574,9 @@ static int s3c_hsotg_ep_enable(struct us
dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n",
__func__, epctrl);
dev_dbg(hsotg->dev, "%s: write DxEPCTL=0x%08x\n",
__func__, epctrl);
/* enable the endpoint interrupt */
s3c_hsotg_ctrl_epint(hsotg, index, dir_in, 1);
/* enable the endpoint interrupt */
s3c_hsotg_ctrl_epint(hsotg, index, dir_in, 1);
+@@ -2617,13 +2617,13 @@ static int s3c_hsotg_ep_disable(struct u
hs_ep->fifo_index = 0;
hs_ep->fifo_size = 0;
hs_ep->fifo_index = 0;
hs_ep->fifo_size = 0;
/* disable endpoint interrupts */
s3c_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0);
/* disable endpoint interrupts */
s3c_hsotg_ctrl_epint(hsotg, hs_ep->index, hs_ep->dir_in, 0);
+@@ -2704,7 +2704,7 @@ static int s3c_hsotg_ep_sethalt(struct u
/* write both IN and OUT control registers */
epreg = DIEPCTL(index);
/* write both IN and OUT control registers */
epreg = DIEPCTL(index);
if (value) {
epctl |= DXEPCTL_STALL + DXEPCTL_SNAK;
if (value) {
epctl |= DXEPCTL_STALL + DXEPCTL_SNAK;
+@@ -2718,10 +2718,10 @@ static int s3c_hsotg_ep_sethalt(struct u
epctl |= DXEPCTL_SETD0PID;
}
epctl |= DXEPCTL_SETD0PID;
}
if (value)
epctl |= DXEPCTL_STALL;
if (value)
epctl |= DXEPCTL_STALL;
+@@ -2733,7 +2733,7 @@ static int s3c_hsotg_ep_sethalt(struct u
epctl |= DXEPCTL_SETD0PID;
}
epctl |= DXEPCTL_SETD0PID;
}
+@@ -2822,38 +2822,38 @@ static void s3c_hsotg_init(struct s3c_hs
{
/* unmask subset of endpoint interrupts */
{
/* unmask subset of endpoint interrupts */
hsotg->regs + GAHBCFG);
}
hsotg->regs + GAHBCFG);
}
+@@ -3045,8 +3045,8 @@ static void s3c_hsotg_initep(struct s3c_
if (using_dma(hsotg)) {
u32 next = DXEPCTL_NEXTEP((epnum + 1) % 15);
if (using_dma(hsotg)) {
u32 next = DXEPCTL_NEXTEP((epnum + 1) % 15);
+@@ -3061,13 +3061,13 @@ static void s3c_hsotg_hw_cfg(struct s3c_
u32 cfg2, cfg3, cfg4;
/* check hardware configuration */
u32 cfg2, cfg3, cfg4;
/* check hardware configuration */
hsotg->dedicated_fifos = (cfg4 >> 25) & 1;
dev_info(hsotg->dev, "EPs: %d, %s fifos, %d entries in SPRAM\n",
hsotg->dedicated_fifos = (cfg4 >> 25) & 1;
dev_info(hsotg->dev, "EPs: %d, %s fifos, %d entries in SPRAM\n",
+@@ -3089,19 +3089,19 @@ static void s3c_hsotg_dump(struct s3c_hs
int idx;
dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n",
int idx;
dev_info(dev, "DCFG=0x%08x, DCTL=0x%08x, DIEPMSK=%08x\n",
dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx,
val >> FIFOSIZE_DEPTH_SHIFT,
val & FIFOSIZE_STARTADDR_MASK);
dev_info(dev, "DPTx[%d] FSize=%d, StAddr=0x%08x\n", idx,
val >> FIFOSIZE_DEPTH_SHIFT,
val & FIFOSIZE_STARTADDR_MASK);
+@@ -3110,21 +3110,21 @@ static void s3c_hsotg_dump(struct s3c_hs
for (idx = 0; idx < 15; idx++) {
dev_info(dev,
"ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx,
for (idx = 0; idx < 15; idx++) {
dev_info(dev,
"ep%d-in: EPCTL=0x%08x, SIZ=0x%08x, DMA=0x%08x\n", idx,
+@@ -3144,38 +3144,38 @@ static int state_show(struct seq_file *s
int idx;
seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
int idx;
seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x",
in, out);
seq_printf(seq, ", DIEPTSIZ=0x%08x, DOEPTSIZ=0x%08x",
in, out);
+@@ -3215,9 +3215,9 @@ static int fifo_show(struct seq_file *se
int idx;
seq_puts(seq, "Non-periodic FIFOs:\n");
int idx;
seq_puts(seq, "Non-periodic FIFOs:\n");
seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n",
val >> FIFOSIZE_DEPTH_SHIFT,
val & FIFOSIZE_DEPTH_MASK);
seq_printf(seq, "NPTXFIFO: Size %d, Start 0x%08x\n",
val >> FIFOSIZE_DEPTH_SHIFT,
val & FIFOSIZE_DEPTH_MASK);
+@@ -3225,7 +3225,7 @@ static int fifo_show(struct seq_file *se
seq_puts(seq, "\nPeriodic TXFIFOs:\n");
for (idx = 1; idx <= 15; idx++) {
seq_puts(seq, "\nPeriodic TXFIFOs:\n");
for (idx = 1; idx <= 15; idx++) {
seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx,
val >> FIFOSIZE_DEPTH_SHIFT,
seq_printf(seq, "\tDPTXFIFO%2d: Size %d, Start 0x%08x\n", idx,
val >> FIFOSIZE_DEPTH_SHIFT,
+@@ -3278,20 +3278,20 @@ static int ep_show(struct seq_file *seq,
/* first show the register state */
seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n",
/* first show the register state */
seq_printf(seq, "\tDIEPCTL=0x%08x, DOEPCTL=0x%08x\n",
seq_puts(seq, "\n");
seq_printf(seq, "mps %d\n", ep->ep.maxpacket);
seq_puts(seq, "\n");
seq_printf(seq, "mps %d\n", ep->ep.maxpacket);
---- a/drivers/usb/dwc2/hcd.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/hcd.c 2015-02-09 19:34:42.911106076 +0200
-@@ -80,10 +80,10 @@
+--- a/drivers/usb/dwc2/hcd.c
++++ b/drivers/usb/dwc2/hcd.c
+@@ -80,10 +80,10 @@ static void dwc2_dump_channel_info(struc
if (chan == NULL)
return;
if (chan == NULL)
return;
dev_dbg(hsotg->dev, " Assigned to channel %p:\n", chan);
dev_dbg(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n",
dev_dbg(hsotg->dev, " Assigned to channel %p:\n", chan);
dev_dbg(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n",
+@@ -207,7 +207,7 @@ void dwc2_hcd_start(struct dwc2_hsotg *h
*/
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_RST;
*/
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_RST;
}
queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
}
queue_delayed_work(hsotg->wq_otg, &hsotg->start_work,
+@@ -228,11 +228,11 @@ static void dwc2_hcd_cleanup_channels(st
channel = hsotg->hc_ptr_array[i];
if (!list_empty(&channel->hc_list_entry))
continue;
channel = hsotg->hc_ptr_array[i];
if (!list_empty(&channel->hc_list_entry))
continue;
+@@ -241,11 +241,11 @@ static void dwc2_hcd_cleanup_channels(st
channel = hsotg->hc_ptr_array[i];
if (!list_empty(&channel->hc_list_entry))
continue;
channel = hsotg->hc_ptr_array[i];
if (!list_empty(&channel->hc_list_entry))
continue;
}
dwc2_hc_cleanup(hsotg, channel);
}
dwc2_hc_cleanup(hsotg, channel);
+@@ -279,11 +279,11 @@ void dwc2_hcd_disconnect(struct dwc2_hso
* interrupt mask and status bits and disabling subsequent host
* channel interrupts.
*/
* interrupt mask and status bits and disabling subsequent host
* channel interrupts.
*/
/*
* Turn off the vbus power only if the core has transitioned to device
/*
* Turn off the vbus power only if the core has transitioned to device
+@@ -293,7 +293,7 @@ void dwc2_hcd_disconnect(struct dwc2_hso
if (dwc2_is_device_mode(hsotg)) {
if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
if (dwc2_is_device_mode(hsotg)) {
if (hsotg->op_state != OTG_STATE_A_SUSPEND) {
dev_dbg(hsotg->dev, "Disconnect: PortPower off\n");
}
dwc2_disable_host_interrupts(hsotg);
}
dwc2_disable_host_interrupts(hsotg);
+@@ -344,7 +344,7 @@ void dwc2_hcd_stop(struct dwc2_hsotg *hs
/* Turn off the vbus power */
dev_dbg(hsotg->dev, "PortPower off\n");
/* Turn off the vbus power */
dev_dbg(hsotg->dev, "PortPower off\n");
}
static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
}
static int dwc2_hcd_urb_enqueue(struct dwc2_hsotg *hsotg,
+@@ -369,7 +369,7 @@ static int dwc2_hcd_urb_enqueue(struct d
if ((dev_speed == USB_SPEED_LOW) &&
(hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
(hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) {
if ((dev_speed == USB_SPEED_LOW) &&
(hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) &&
(hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI)) {
u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_FULL_SPEED)
u32 prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_FULL_SPEED)
+@@ -391,7 +391,7 @@ static int dwc2_hcd_urb_enqueue(struct d
if (!(intr_mask & GINTSTS_SOF)) {
enum dwc2_transaction_type tr_type;
if (!(intr_mask & GINTSTS_SOF)) {
enum dwc2_transaction_type tr_type;
+@@ -1059,7 +1059,7 @@ static void dwc2_process_periodic_channe
if (dbg_perio())
dev_vdbg(hsotg->dev, "Queue periodic transactions\n");
if (dbg_perio())
dev_vdbg(hsotg->dev, "Queue periodic transactions\n");
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
+@@ -1074,7 +1074,7 @@ static void dwc2_process_periodic_channe
qh_ptr = hsotg->periodic_sched_assigned.next;
while (qh_ptr != &hsotg->periodic_sched_assigned) {
qh_ptr = hsotg->periodic_sched_assigned.next;
while (qh_ptr != &hsotg->periodic_sched_assigned) {
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
if (qspcavail == 0) {
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
if (qspcavail == 0) {
+@@ -1134,7 +1134,7 @@ static void dwc2_process_periodic_channe
}
if (hsotg->core_params->dma_enable <= 0) {
}
if (hsotg->core_params->dma_enable <= 0) {
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
+@@ -1157,9 +1157,9 @@ static void dwc2_process_periodic_channe
* level to ensure that new requests are loaded as
* soon as possible.)
*/
* level to ensure that new requests are loaded as
* soon as possible.)
*/
} else {
/*
* Disable the Tx FIFO empty interrupt since there are
} else {
/*
* Disable the Tx FIFO empty interrupt since there are
+@@ -1168,9 +1168,9 @@ static void dwc2_process_periodic_channe
* handlers to queue more transactions as transfer
* states change.
*/
* handlers to queue more transactions as transfer
* states change.
*/
+@@ -1199,7 +1199,7 @@ static void dwc2_process_non_periodic_ch
dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n");
dev_vdbg(hsotg->dev, "Queue non-periodic transactions\n");
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
+@@ -1222,7 +1222,7 @@ static void dwc2_process_non_periodic_ch
* available in the request queue or the Tx FIFO
*/
do {
* available in the request queue or the Tx FIFO
*/
do {
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
if (hsotg->core_params->dma_enable <= 0 && qspcavail == 0) {
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
if (hsotg->core_params->dma_enable <= 0 && qspcavail == 0) {
+@@ -1259,7 +1259,7 @@ next:
} while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
if (hsotg->core_params->dma_enable <= 0) {
} while (hsotg->non_periodic_qh_ptr != orig_qh_ptr);
if (hsotg->core_params->dma_enable <= 0) {
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
qspcavail = (tx_status & TXSTS_QSPCAVAIL_MASK) >>
TXSTS_QSPCAVAIL_SHIFT;
fspcavail = (tx_status & TXSTS_FSPCAVAIL_MASK) >>
+@@ -1279,9 +1279,9 @@ next:
* level to ensure that new requests are loaded as
* soon as possible.)
*/
* level to ensure that new requests are loaded as
* soon as possible.)
*/
} else {
/*
* Disable the Tx FIFO empty interrupt since there are
} else {
/*
* Disable the Tx FIFO empty interrupt since there are
+@@ -1290,9 +1290,9 @@ next:
* handlers to queue more transactions as transfer
* states change.
*/
* handlers to queue more transactions as transfer
* states change.
*/
+@@ -1330,10 +1330,10 @@ void dwc2_hcd_queue_transactions(struct
* Ensure NP Tx FIFO empty interrupt is disabled when
* there are no non-periodic transfers to process
*/
* Ensure NP Tx FIFO empty interrupt is disabled when
* there are no non-periodic transfers to process
*/
+@@ -1347,7 +1347,7 @@ static void dwc2_conn_id_status_change(s
dev_dbg(hsotg->dev, "%s()\n", __func__);
dev_dbg(hsotg->dev, "%s()\n", __func__);
dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl);
dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
!!(gotgctl & GOTGCTL_CONID_B));
dev_dbg(hsotg->dev, "gotgctl=%0x\n", gotgctl);
dev_dbg(hsotg->dev, "gotgctl.b.conidsts=%d\n",
!!(gotgctl & GOTGCTL_CONID_B));
+@@ -1408,9 +1408,9 @@ static void dwc2_wakeup_detected(unsigne
hprt0 = dwc2_read_hprt0(hsotg);
dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
hprt0 &= ~HPRT0_RES;
hprt0 = dwc2_read_hprt0(hsotg);
dev_dbg(hsotg->dev, "Resume: HPRT0=%0x\n", hprt0);
hprt0 &= ~HPRT0_RES;
dwc2_hcd_rem_wakeup(hsotg);
dwc2_hcd_rem_wakeup(hsotg);
+@@ -1438,30 +1438,30 @@ static void dwc2_port_suspend(struct dwc
spin_lock_irqsave(&hsotg->lock, flags);
if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) {
spin_lock_irqsave(&hsotg->lock, flags);
if (windex == hsotg->otg_port && dwc2_host_is_b_hnp_enabled(hsotg)) {
spin_unlock_irqrestore(&hsotg->lock, flags);
spin_unlock_irqrestore(&hsotg->lock, flags);
+@@ -1510,23 +1510,23 @@ static int dwc2_hcd_hub_control(struct d
"ClearPortFeature USB_PORT_FEAT_ENABLE\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_ENA;
"ClearPortFeature USB_PORT_FEAT_ENABLE\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_ENA;
break;
case USB_PORT_FEAT_POWER:
break;
case USB_PORT_FEAT_POWER:
+@@ -1534,7 +1534,7 @@ static int dwc2_hcd_hub_control(struct d
"ClearPortFeature USB_PORT_FEAT_POWER\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~HPRT0_PWR;
"ClearPortFeature USB_PORT_FEAT_POWER\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~HPRT0_PWR;
break;
case USB_PORT_FEAT_INDICATOR:
break;
case USB_PORT_FEAT_INDICATOR:
+@@ -1653,7 +1653,7 @@ static int dwc2_hcd_hub_control(struct d
dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0);
if (hprt0 & HPRT0_CONNSTS)
dev_vdbg(hsotg->dev, " HPRT0: 0x%08x\n", hprt0);
if (hprt0 & HPRT0_CONNSTS)
+@@ -1718,18 +1718,18 @@ static int dwc2_hcd_hub_control(struct d
"SetPortFeature - USB_PORT_FEAT_POWER\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_PWR;
"SetPortFeature - USB_PORT_FEAT_POWER\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 |= HPRT0_PWR;
hprt0 = dwc2_read_hprt0(hsotg);
/* Clear suspend bit if resetting from suspend state */
hprt0 = dwc2_read_hprt0(hsotg);
/* Clear suspend bit if resetting from suspend state */
+@@ -1744,13 +1744,13 @@ static int dwc2_hcd_hub_control(struct d
hprt0 |= HPRT0_PWR | HPRT0_RST;
dev_dbg(hsotg->dev,
"In host mode, hprt0=%08x\n", hprt0);
hprt0 |= HPRT0_PWR | HPRT0_RST;
dev_dbg(hsotg->dev,
"In host mode, hprt0=%08x\n", hprt0);
hsotg->lx_state = DWC2_L0; /* Now back to On state */
break;
hsotg->lx_state = DWC2_L0; /* Now back to On state */
break;
+@@ -1814,7 +1814,7 @@ static int dwc2_hcd_is_status_changed(st
int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
{
int dwc2_hcd_get_frame_number(struct dwc2_hsotg *hsotg)
{
#ifdef DWC2_DEBUG_SOF
dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n",
#ifdef DWC2_DEBUG_SOF
dev_vdbg(hsotg->dev, "DWC OTG HCD GET FRAME NUMBER %d\n",
+@@ -1917,11 +1917,11 @@ void dwc2_hcd_dump_state(struct dwc2_hso
if (chan->xfer_started) {
u32 hfnum, hcchar, hctsiz, hcint, hcintmsk;
if (chan->xfer_started) {
u32 hfnum, hcchar, hctsiz, hcint, hcintmsk;
dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum);
dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar);
dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz);
dev_dbg(hsotg->dev, " hfnum: 0x%08x\n", hfnum);
dev_dbg(hsotg->dev, " hcchar: 0x%08x\n", hcchar);
dev_dbg(hsotg->dev, " hctsiz: 0x%08x\n", hctsiz);
+@@ -1969,12 +1969,12 @@ void dwc2_hcd_dump_state(struct dwc2_hso
dev_dbg(hsotg->dev, " periodic_channels: %d\n",
hsotg->periodic_channels);
dev_dbg(hsotg->dev, " periodic_usecs: %d\n", hsotg->periodic_usecs);
dev_dbg(hsotg->dev, " periodic_channels: %d\n",
hsotg->periodic_channels);
dev_dbg(hsotg->dev, " periodic_usecs: %d\n", hsotg->periodic_usecs);
dev_dbg(hsotg->dev, " P Tx Req Queue Space Avail: %d\n",
(p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
dev_dbg(hsotg->dev, " P Tx FIFO Space Avail: %d\n",
dev_dbg(hsotg->dev, " P Tx Req Queue Space Avail: %d\n",
(p_tx_status & TXSTS_QSPCAVAIL_MASK) >> TXSTS_QSPCAVAIL_SHIFT);
dev_dbg(hsotg->dev, " P Tx FIFO Space Avail: %d\n",
+@@ -2238,7 +2238,7 @@ static void dwc2_hcd_reset_func(struct w
dev_dbg(hsotg->dev, "USB RESET function called\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~HPRT0_RST;
dev_dbg(hsotg->dev, "USB RESET function called\n");
hprt0 = dwc2_read_hprt0(hsotg);
hprt0 &= ~HPRT0_RST;
hsotg->flags.b.port_reset_change = 1;
}
hsotg->flags.b.port_reset_change = 1;
}
+@@ -2715,17 +2715,17 @@ static void dwc2_hcd_free(struct dwc2_hs
hsotg->status_buf = NULL;
}
hsotg->status_buf = NULL;
}
+@@ -2788,7 +2788,7 @@ int dwc2_hcd_init(struct dwc2_hsotg *hso
dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg);
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
dev_dbg(hsotg->dev, "hcfg=%08x\n", hcfg);
#ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
---- a/drivers/usb/dwc2/hcd_ddma.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/hcd_ddma.c 2015-02-09 19:34:42.921106076 +0200
-@@ -169,19 +169,19 @@
+--- a/drivers/usb/dwc2/hcd_ddma.c
++++ b/drivers/usb/dwc2/hcd_ddma.c
+@@ -169,19 +169,19 @@ static void dwc2_per_sched_enable(struct
spin_lock_irqsave(&hsotg->lock, flags);
spin_lock_irqsave(&hsotg->lock, flags);
spin_unlock_irqrestore(&hsotg->lock, flags);
}
spin_unlock_irqrestore(&hsotg->lock, flags);
}
+@@ -193,7 +193,7 @@ static void dwc2_per_sched_disable(struc
spin_lock_irqsave(&hsotg->lock, flags);
spin_lock_irqsave(&hsotg->lock, flags);
if (!(hcfg & HCFG_PERSCHEDENA)) {
/* already disabled */
spin_unlock_irqrestore(&hsotg->lock, flags);
if (!(hcfg & HCFG_PERSCHEDENA)) {
/* already disabled */
spin_unlock_irqrestore(&hsotg->lock, flags);
+@@ -202,7 +202,7 @@ static void dwc2_per_sched_disable(struc
hcfg &= ~HCFG_PERSCHEDENA;
dev_vdbg(hsotg->dev, "Disabling Periodic schedule\n");
hcfg &= ~HCFG_PERSCHEDENA;
dev_vdbg(hsotg->dev, "Disabling Periodic schedule\n");
spin_unlock_irqrestore(&hsotg->lock, flags);
}
spin_unlock_irqrestore(&hsotg->lock, flags);
}
---- a/drivers/usb/dwc2/hcd.h 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/hcd.h 2015-02-09 19:34:42.949106077 +0200
-@@ -371,10 +371,10 @@
+--- a/drivers/usb/dwc2/hcd.h
++++ b/drivers/usb/dwc2/hcd.h
+@@ -371,10 +371,10 @@ static inline struct usb_hcd *dwc2_hsotg
*/
static inline void disable_hc_int(struct dwc2_hsotg *hsotg, int chnum, u32 intr)
{
*/
static inline void disable_hc_int(struct dwc2_hsotg *hsotg, int chnum, u32 intr)
{
+@@ -382,11 +382,11 @@ static inline void disable_hc_int(struct
*/
static inline int dwc2_is_host_mode(struct dwc2_hsotg *hsotg)
{
*/
static inline int dwc2_is_host_mode(struct dwc2_hsotg *hsotg)
{
+@@ -395,7 +395,7 @@ static inline int dwc2_is_device_mode(st
*/
static inline u32 dwc2_read_hprt0(struct dwc2_hsotg *hsotg)
{
*/
static inline u32 dwc2_read_hprt0(struct dwc2_hsotg *hsotg)
{
hprt0 &= ~(HPRT0_ENA | HPRT0_CONNDET | HPRT0_ENACHG | HPRT0_OVRCURRCHG);
return hprt0;
hprt0 &= ~(HPRT0_ENA | HPRT0_CONNDET | HPRT0_ENACHG | HPRT0_OVRCURRCHG);
return hprt0;
+@@ -582,7 +582,7 @@ static inline u16 dwc2_micro_frame_num(u
*/
static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg)
{
*/
static inline u32 dwc2_read_core_intr(struct dwc2_hsotg *hsotg)
{
}
static inline u32 dwc2_hcd_urb_get_status(struct dwc2_hcd_urb *dwc2_urb)
}
static inline u32 dwc2_hcd_urb_get_status(struct dwc2_hcd_urb *dwc2_urb)
+@@ -744,7 +744,7 @@ do { \
qtd_list_entry); \
if (usb_pipeint(_qtd_->urb->pipe) && \
(_qh_)->start_split_frame != 0 && !_qtd_->complete_split) { \
qtd_list_entry); \
if (usb_pipeint(_qtd_->urb->pipe) && \
(_qh_)->start_split_frame != 0 && !_qtd_->complete_split) { \
switch (_hfnum_.b.frnum & 0x7) { \
case 7: \
(_hcd_)->hfnum_7_samples_##_letter_++; \
switch (_hfnum_.b.frnum & 0x7) { \
case 7: \
(_hcd_)->hfnum_7_samples_##_letter_++; \
---- a/drivers/usb/dwc2/hcd_intr.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/hcd_intr.c 2015-02-09 19:34:42.935106077 +0200
-@@ -148,7 +148,7 @@
+--- a/drivers/usb/dwc2/hcd_intr.c
++++ b/drivers/usb/dwc2/hcd_intr.c
+@@ -148,7 +148,7 @@ static void dwc2_sof_intr(struct dwc2_hs
dwc2_hcd_queue_transactions(hsotg, tr_type);
/* Clear interrupt */
dwc2_hcd_queue_transactions(hsotg, tr_type);
/* Clear interrupt */
+@@ -164,7 +164,7 @@ static void dwc2_rx_fifo_level_intr(stru
if (dbg_perio())
dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n");
if (dbg_perio())
dev_vdbg(hsotg->dev, "--RxFIFO Level Interrupt--\n");
chnum = (grxsts & GRXSTS_HCHNUM_MASK) >> GRXSTS_HCHNUM_SHIFT;
chan = hsotg->hc_ptr_array[chnum];
if (!chan) {
chnum = (grxsts & GRXSTS_HCHNUM_MASK) >> GRXSTS_HCHNUM_SHIFT;
chan = hsotg->hc_ptr_array[chnum];
if (!chan) {
+@@ -247,11 +247,11 @@ static void dwc2_hprt0_enable(struct dwc
dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
/* Every time when port enables calculate HFIR.FrInterval */
dev_vdbg(hsotg->dev, "%s(%p)\n", __func__, hsotg);
/* Every time when port enables calculate HFIR.FrInterval */
/* Check if we need to adjust the PHY clock speed for low power */
if (!params->host_support_fs_ls_low_power) {
/* Check if we need to adjust the PHY clock speed for low power */
if (!params->host_support_fs_ls_low_power) {
+@@ -260,7 +260,7 @@ static void dwc2_hprt0_enable(struct dwc
prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_LOW_SPEED || prtspd == HPRT0_SPD_FULL_SPEED) {
prtspd = (hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_LOW_SPEED || prtspd == HPRT0_SPD_FULL_SPEED) {
+@@ -268,11 +268,11 @@ static void dwc2_hprt0_enable(struct dwc
if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL)) {
/* Set PHY low power clock select for FS/LS devices */
usbcfg |= GUSBCFG_PHY_LP_CLK_SEL;
if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL)) {
/* Set PHY low power clock select for FS/LS devices */
usbcfg |= GUSBCFG_PHY_LP_CLK_SEL;
fslspclksel = (hcfg & HCFG_FSLSPCLKSEL_MASK) >>
HCFG_FSLSPCLKSEL_SHIFT;
fslspclksel = (hcfg & HCFG_FSLSPCLKSEL_MASK) >>
HCFG_FSLSPCLKSEL_SHIFT;
+@@ -286,7 +286,7 @@ static void dwc2_hprt0_enable(struct dwc
fslspclksel = HCFG_FSLSPCLKSEL_6_MHZ;
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
fslspclksel = HCFG_FSLSPCLKSEL_6_MHZ;
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
+@@ -297,7 +297,7 @@ static void dwc2_hprt0_enable(struct dwc
fslspclksel = HCFG_FSLSPCLKSEL_48_MHZ;
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
fslspclksel = HCFG_FSLSPCLKSEL_48_MHZ;
hcfg &= ~HCFG_FSLSPCLKSEL_MASK;
hcfg |= fslspclksel << HCFG_FSLSPCLKSEL_SHIFT;
+@@ -305,7 +305,7 @@ static void dwc2_hprt0_enable(struct dwc
/* Not low power */
if (usbcfg & GUSBCFG_PHY_LP_CLK_SEL) {
usbcfg &= ~GUSBCFG_PHY_LP_CLK_SEL;
/* Not low power */
if (usbcfg & GUSBCFG_PHY_LP_CLK_SEL) {
usbcfg &= ~GUSBCFG_PHY_LP_CLK_SEL;
+@@ -332,7 +332,7 @@ static void dwc2_port_intr(struct dwc2_h
dev_vdbg(hsotg->dev, "--Port Interrupt--\n");
dev_vdbg(hsotg->dev, "--Port Interrupt--\n");
+@@ -385,7 +385,7 @@ static void dwc2_port_intr(struct dwc2_h
}
/* Clear Port Interrupts */
}
/* Clear Port Interrupts */
+@@ -405,7 +405,7 @@ static u32 dwc2_get_actual_xfer_length(s
{
u32 hctsiz, count, length;
{
u32 hctsiz, count, length;
if (halt_status == DWC2_HC_XFER_COMPLETE) {
if (chan->ep_is_in) {
if (halt_status == DWC2_HC_XFER_COMPLETE) {
if (chan->ep_is_in) {
+@@ -483,7 +483,7 @@ static int dwc2_update_urb_state(struct
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len);
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
dev_vdbg(hsotg->dev, " chan->xfer_len %d\n", chan->xfer_len);
+@@ -506,7 +506,7 @@ void dwc2_hcd_save_data_toggle(struct dw
struct dwc2_host_chan *chan, int chnum,
struct dwc2_qtd *qtd)
{
struct dwc2_host_chan *chan, int chnum,
struct dwc2_qtd *qtd)
{
u32 pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) {
u32 pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
if (chan->ep_type != USB_ENDPOINT_XFER_CONTROL) {
+@@ -753,9 +753,9 @@ cleanup:
/* Try to queue more transfers now that there's a free channel */
tr_type = dwc2_hcd_select_transactions(hsotg);
/* Try to queue more transfers now that there's a free channel */
tr_type = dwc2_hcd_select_transactions(hsotg);
+@@ -802,9 +802,9 @@ static void dwc2_halt_channel(struct dwc
* is enabled so that the non-periodic schedule will
* be processed
*/
* is enabled so that the non-periodic schedule will
* be processed
*/
} else {
dev_vdbg(hsotg->dev, "isoc/intr\n");
/*
} else {
dev_vdbg(hsotg->dev, "isoc/intr\n");
/*
+@@ -821,9 +821,9 @@ static void dwc2_halt_channel(struct dwc
* enabled so that the periodic schedule will be
* processed
*/
* enabled so that the periodic schedule will be
* processed
*/
+@@ -888,7 +888,7 @@ static void dwc2_complete_periodic_xfer(
struct dwc2_qtd *qtd,
enum dwc2_halt_status halt_status)
{
struct dwc2_qtd *qtd,
enum dwc2_halt_status halt_status)
{
+@@ -1158,7 +1158,7 @@ static void dwc2_update_urb_state_abn(st
urb->actual_length += xfer_length;
urb->actual_length += xfer_length;
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n",
dev_vdbg(hsotg->dev, "DWC_otg: %s: %s, channel %d\n",
__func__, (chan->ep_is_in ? "IN" : "OUT"), chnum);
dev_vdbg(hsotg->dev, " chan->start_pkt_count %d\n",
+@@ -1469,10 +1469,10 @@ static void dwc2_hc_ahberr_intr(struct d
dwc2_hc_handle_tt_clear(hsotg, chan, qtd);
dwc2_hc_handle_tt_clear(hsotg, chan, qtd);
dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum);
dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt);
dev_err(hsotg->dev, "AHB ERROR, Channel %d\n", chnum);
dev_err(hsotg->dev, " hcchar 0x%08x, hcsplt 0x%08x\n", hcchar, hcsplt);
+@@ -1685,10 +1685,10 @@ static bool dwc2_halt_status_ok(struct d
* This code is here only as a check. This condition should
* never happen. Ignore the halt if it does occur.
*/
* This code is here only as a check. This condition should
* never happen. Ignore the halt if it does occur.
*/
dev_dbg(hsotg->dev,
"%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n",
__func__);
dev_dbg(hsotg->dev,
"%s: chan->halt_status DWC2_HC_XFER_NO_HALT_STATUS,\n",
__func__);
+@@ -1712,7 +1712,7 @@ static bool dwc2_halt_status_ok(struct d
* when the halt interrupt occurs. Halt the channel again if it does
* occur.
*/
* when the halt interrupt occurs. Halt the channel again if it does
* occur.
*/
if (hcchar & HCCHAR_CHDIS) {
dev_warn(hsotg->dev,
"%s: hcchar.chdis set unexpectedly, hcchar 0x%08x, trying to halt again\n",
if (hcchar & HCCHAR_CHDIS) {
dev_warn(hsotg->dev,
"%s: hcchar.chdis set unexpectedly, hcchar 0x%08x, trying to halt again\n",
+@@ -1772,7 +1772,7 @@ static void dwc2_hc_chhltd_intr_dma(stru
if (chan->hcint & HCINTMSK_XFERCOMPL) {
/*
if (chan->hcint & HCINTMSK_XFERCOMPL) {
/*
+@@ -1867,7 +1867,7 @@ static void dwc2_hc_chhltd_intr_dma(stru
dev_err(hsotg->dev,
"hcint 0x%08x, intsts 0x%08x\n",
chan->hcint,
dev_err(hsotg->dev,
"hcint 0x%08x, intsts 0x%08x\n",
chan->hcint,
+@@ -1922,11 +1922,11 @@ static void dwc2_hc_n_intr(struct dwc2_h
chan = hsotg->hc_ptr_array[chnum];
chan = hsotg->hc_ptr_array[chnum];
+@@ -1938,7 +1938,7 @@ static void dwc2_hc_n_intr(struct dwc2_h
hcint, hcintmsk, hcint & hcintmsk);
}
hcint, hcintmsk, hcint & hcintmsk);
}
chan->hcint = hcint;
hcint &= hcintmsk;
chan->hcint = hcint;
hcint &= hcintmsk;
+@@ -2030,7 +2030,7 @@ static void dwc2_hc_intr(struct dwc2_hso
if (dbg_perio()) {
dev_vdbg(hsotg->dev, "%s()\n", __func__);
if (dbg_perio()) {
dev_vdbg(hsotg->dev, "%s()\n", __func__);
+@@ -2098,8 +2098,8 @@ irqreturn_t dwc2_handle_hcd_intr(struct
"DWC OTG HCD Finished Servicing Interrupts\n");
dev_vdbg(hsotg->dev,
"DWC OTG HCD gintsts=0x%08x gintmsk=0x%08x\n",
"DWC OTG HCD Finished Servicing Interrupts\n");
dev_vdbg(hsotg->dev,
"DWC OTG HCD gintsts=0x%08x gintmsk=0x%08x\n",
---- a/drivers/usb/dwc2/hcd_queue.c 2015-02-06 16:53:48.000000000 +0200
-+++ b/drivers/usb/dwc2/hcd_queue.c 2015-02-09 19:34:42.941106077 +0200
-@@ -115,7 +115,7 @@
+--- a/drivers/usb/dwc2/hcd_queue.c
++++ b/drivers/usb/dwc2/hcd_queue.c
+@@ -115,7 +115,7 @@ static void dwc2_qh_init(struct dwc2_hso
if (qh->ep_type == USB_ENDPOINT_XFER_INT)
qh->interval = 8;
#endif
if (qh->ep_type == USB_ENDPOINT_XFER_INT)
qh->interval = 8;
#endif
prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_HIGH_SPEED &&
(dev_speed == USB_SPEED_LOW ||
prtspd = (hprt & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT;
if (prtspd == HPRT0_SPD_HIGH_SPEED &&
(dev_speed == USB_SPEED_LOW ||
+@@ -593,9 +593,9 @@ int dwc2_hcd_qh_add(struct dwc2_hsotg *h
if (status)
return status;
if (!hsotg->periodic_qh_count) {
if (status)
return status;
if (!hsotg->periodic_qh_count) {
}
hsotg->periodic_qh_count++;
}
hsotg->periodic_qh_count++;
+@@ -630,9 +630,9 @@ void dwc2_hcd_qh_unlink(struct dwc2_hsot
dwc2_deschedule_periodic(hsotg, qh);
hsotg->periodic_qh_count--;
if (!hsotg->periodic_qh_count) {
dwc2_deschedule_periodic(hsotg, qh);
hsotg->periodic_qh_count--;
if (!hsotg->periodic_qh_count) {
#include <linux/of.h>
#include <lantiq_soc.h>
#include <linux/of.h>
#include <lantiq_soc.h>
+@@ -38,10 +39,12 @@ enum {
};
static const char ltq_map_name[] = "ltq_nor";
};
static const char ltq_map_name[] = "ltq_nor";
+@@ -109,12 +112,44 @@ ltq_copy_to(struct map_info *map, unsign
if (of_machine_is_compatible("lantiq,falcon") &&
(ltq_boot_select() != BS_FLASH)) {
if (of_machine_is_compatible("lantiq,falcon") &&
(ltq_boot_select() != BS_FLASH)) {
+@@ -128,76 +163,88 @@ ltq_mtd_probe(struct platform_device *pd
platform_set_drvdata(pdev, ltq_mtd);
platform_set_drvdata(pdev, ltq_mtd);
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
--- a/drivers/mtd/chips/cfi_cmdset_0001.c
+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
/* #define CMDSET0001_DISABLE_WRITE_SUSPEND */
// debugging, turns off buffer write mode if set to 1
/* #define CMDSET0001_DISABLE_WRITE_SUSPEND */
// debugging, turns off buffer write mode if set to 1