1 /* 2 * core.c - DesignWare HS OTG Controller common routines 3 * 4 * Copyright (C) 2004-2013 Synopsys, Inc. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions, and the following disclaimer, 11 * without modification. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. The names of the above-listed copyright holders may not be used 16 * to endorse or promote products derived from this software without 17 * specific prior written permission. 18 * 19 * ALTERNATIVELY, this software may be distributed under the terms of the 20 * GNU General Public License ("GPL") as published by the Free Software 21 * Foundation; either version 2 of the License, or (at your option) any 22 * later version. 23 * 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 25 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 26 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 27 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 28 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 29 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 30 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 31 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 32 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 33 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 34 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35 */ 36 37 /* 38 * The Core code provides basic services for accessing and managing the 39 * DWC_otg hardware. These services are used by both the Host Controller 40 * Driver and the Peripheral Controller Driver. 41 */ 42 #include <linux/kernel.h> 43 #include <linux/module.h> 44 #include <linux/moduleparam.h> 45 #include <linux/spinlock.h> 46 #include <linux/interrupt.h> 47 #include <linux/dma-mapping.h> 48 #include <linux/delay.h> 49 #include <linux/io.h> 50 #include <linux/slab.h> 51 #include <linux/usb.h> 52 53 #include <linux/usb/hcd.h> 54 #include <linux/usb/ch11.h> 55 56 #include "core.h" 57 #include "hcd.h" 58 59 /** 60 * dwc2_enable_common_interrupts() - Initializes the commmon interrupts, 61 * used in both device and host modes 62 * 63 * @hsotg: Programming view of the DWC_otg controller 64 */ 65 static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg) 66 { 67 u32 intmsk; 68 69 /* Clear any pending OTG Interrupts */ 70 writel(0xffffffff, hsotg->regs + GOTGINT); 71 72 /* Clear any pending interrupts */ 73 writel(0xffffffff, hsotg->regs + GINTSTS); 74 75 /* Enable the interrupts in the GINTMSK */ 76 intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT; 77 78 if (hsotg->core_params->dma_enable <= 0) 79 intmsk |= GINTSTS_RXFLVL; 80 81 intmsk |= GINTSTS_CONIDSTSCHNG | GINTSTS_WKUPINT | GINTSTS_USBSUSP | 82 GINTSTS_SESSREQINT; 83 84 writel(intmsk, hsotg->regs + GINTMSK); 85 } 86 87 /* 88 * Initializes the FSLSPClkSel field of the HCFG register depending on the 89 * PHY type 90 */ 91 static void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg *hsotg) 92 { 93 u32 hcfg, val; 94 95 if ((hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI && 96 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED && 97 hsotg->core_params->ulpi_fs_ls > 0) || 98 hsotg->core_params->phy_type == DWC2_PHY_TYPE_PARAM_FS) { 99 /* Full speed PHY */ 100 val = HCFG_FSLSPCLKSEL_48_MHZ; 101 } else { 102 /* High speed PHY running at full speed or high speed */ 103 val = HCFG_FSLSPCLKSEL_30_60_MHZ; 104 } 105 106 dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val); 107 hcfg = readl(hsotg->regs + HCFG); 108 hcfg &= ~HCFG_FSLSPCLKSEL_MASK; 109 hcfg |= val << HCFG_FSLSPCLKSEL_SHIFT; 110 writel(hcfg, hsotg->regs + HCFG); 111 } 112 113 /* 114 * Do core a soft reset of the core. Be careful with this because it 115 * resets all the internal state machines of the core. 116 */ 117 static int dwc2_core_reset(struct dwc2_hsotg *hsotg) 118 { 119 u32 greset; 120 int count = 0; 121 122 dev_vdbg(hsotg->dev, "%s()\n", __func__); 123 124 /* Wait for AHB master IDLE state */ 125 do { 126 usleep_range(20000, 40000); 127 greset = readl(hsotg->regs + GRSTCTL); 128 if (++count > 50) { 129 dev_warn(hsotg->dev, 130 "%s() HANG! AHB Idle GRSTCTL=%0x\n", 131 __func__, greset); 132 return -EBUSY; 133 } 134 } while (!(greset & GRSTCTL_AHBIDLE)); 135 136 /* Core Soft Reset */ 137 count = 0; 138 greset |= GRSTCTL_CSFTRST; 139 writel(greset, hsotg->regs + GRSTCTL); 140 do { 141 usleep_range(20000, 40000); 142 greset = readl(hsotg->regs + GRSTCTL); 143 if (++count > 50) { 144 dev_warn(hsotg->dev, 145 "%s() HANG! Soft Reset GRSTCTL=%0x\n", 146 __func__, greset); 147 return -EBUSY; 148 } 149 } while (greset & GRSTCTL_CSFTRST); 150 151 /* 152 * NOTE: This long sleep is _very_ important, otherwise the core will 153 * not stay in host mode after a connector ID change! 154 */ 155 usleep_range(150000, 200000); 156 157 return 0; 158 } 159 160 static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) 161 { 162 u32 usbcfg, i2cctl; 163 int retval = 0; 164 165 /* 166 * core_init() is now called on every switch so only call the 167 * following for the first time through 168 */ 169 if (select_phy) { 170 dev_dbg(hsotg->dev, "FS PHY selected\n"); 171 usbcfg = readl(hsotg->regs + GUSBCFG); 172 usbcfg |= GUSBCFG_PHYSEL; 173 writel(usbcfg, hsotg->regs + GUSBCFG); 174 175 /* Reset after a PHY select */ 176 retval = dwc2_core_reset(hsotg); 177 if (retval) { 178 dev_err(hsotg->dev, "%s() Reset failed, aborting", 179 __func__); 180 return retval; 181 } 182 } 183 184 /* 185 * Program DCFG.DevSpd or HCFG.FSLSPclkSel to 48Mhz in FS. Also 186 * do this on HNP Dev/Host mode switches (done in dev_init and 187 * host_init). 188 */ 189 if (dwc2_is_host_mode(hsotg)) 190 dwc2_init_fs_ls_pclk_sel(hsotg); 191 192 if (hsotg->core_params->i2c_enable > 0) { 193 dev_dbg(hsotg->dev, "FS PHY enabling I2C\n"); 194 195 /* Program GUSBCFG.OtgUtmiFsSel to I2C */ 196 usbcfg = readl(hsotg->regs + GUSBCFG); 197 usbcfg |= GUSBCFG_OTG_UTMI_FS_SEL; 198 writel(usbcfg, hsotg->regs + GUSBCFG); 199 200 /* Program GI2CCTL.I2CEn */ 201 i2cctl = readl(hsotg->regs + GI2CCTL); 202 i2cctl &= ~GI2CCTL_I2CDEVADDR_MASK; 203 i2cctl |= 1 << GI2CCTL_I2CDEVADDR_SHIFT; 204 i2cctl &= ~GI2CCTL_I2CEN; 205 writel(i2cctl, hsotg->regs + GI2CCTL); 206 i2cctl |= GI2CCTL_I2CEN; 207 writel(i2cctl, hsotg->regs + GI2CCTL); 208 } 209 210 return retval; 211 } 212 213 static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) 214 { 215 u32 usbcfg; 216 int retval = 0; 217 218 if (!select_phy) 219 return 0; 220 221 usbcfg = readl(hsotg->regs + GUSBCFG); 222 223 /* 224 * HS PHY parameters. These parameters are preserved during soft reset 225 * so only program the first time. Do a soft reset immediately after 226 * setting phyif. 227 */ 228 switch (hsotg->core_params->phy_type) { 229 case DWC2_PHY_TYPE_PARAM_ULPI: 230 /* ULPI interface */ 231 dev_dbg(hsotg->dev, "HS ULPI PHY selected\n"); 232 usbcfg |= GUSBCFG_ULPI_UTMI_SEL; 233 usbcfg &= ~(GUSBCFG_PHYIF16 | GUSBCFG_DDRSEL); 234 if (hsotg->core_params->phy_ulpi_ddr > 0) 235 usbcfg |= GUSBCFG_DDRSEL; 236 break; 237 case DWC2_PHY_TYPE_PARAM_UTMI: 238 /* UTMI+ interface */ 239 dev_dbg(hsotg->dev, "HS UTMI+ PHY selected\n"); 240 usbcfg &= ~(GUSBCFG_ULPI_UTMI_SEL | GUSBCFG_PHYIF16); 241 if (hsotg->core_params->phy_utmi_width == 16) 242 usbcfg |= GUSBCFG_PHYIF16; 243 break; 244 default: 245 dev_err(hsotg->dev, "FS PHY selected at HS!\n"); 246 break; 247 } 248 249 writel(usbcfg, hsotg->regs + GUSBCFG); 250 251 /* Reset after setting the PHY parameters */ 252 retval = dwc2_core_reset(hsotg); 253 if (retval) { 254 dev_err(hsotg->dev, "%s() Reset failed, aborting", 255 __func__); 256 return retval; 257 } 258 259 return retval; 260 } 261 262 static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) 263 { 264 u32 usbcfg; 265 int retval = 0; 266 267 if (hsotg->core_params->speed == DWC2_SPEED_PARAM_FULL && 268 hsotg->core_params->phy_type == DWC2_PHY_TYPE_PARAM_FS) { 269 /* If FS mode with FS PHY */ 270 retval = dwc2_fs_phy_init(hsotg, select_phy); 271 if (retval) 272 return retval; 273 } else { 274 /* High speed PHY */ 275 retval = dwc2_hs_phy_init(hsotg, select_phy); 276 if (retval) 277 return retval; 278 } 279 280 if (hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI && 281 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED && 282 hsotg->core_params->ulpi_fs_ls > 0) { 283 dev_dbg(hsotg->dev, "Setting ULPI FSLS\n"); 284 usbcfg = readl(hsotg->regs + GUSBCFG); 285 usbcfg |= GUSBCFG_ULPI_FS_LS; 286 usbcfg |= GUSBCFG_ULPI_CLK_SUSP_M; 287 writel(usbcfg, hsotg->regs + GUSBCFG); 288 } else { 289 usbcfg = readl(hsotg->regs + GUSBCFG); 290 usbcfg &= ~GUSBCFG_ULPI_FS_LS; 291 usbcfg &= ~GUSBCFG_ULPI_CLK_SUSP_M; 292 writel(usbcfg, hsotg->regs + GUSBCFG); 293 } 294 295 return retval; 296 } 297 298 static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg) 299 { 300 u32 ahbcfg = readl(hsotg->regs + GAHBCFG); 301 302 switch (hsotg->hw_params.arch) { 303 case GHWCFG2_EXT_DMA_ARCH: 304 dev_err(hsotg->dev, "External DMA Mode not supported\n"); 305 return -EINVAL; 306 307 case GHWCFG2_INT_DMA_ARCH: 308 dev_dbg(hsotg->dev, "Internal DMA Mode\n"); 309 if (hsotg->core_params->ahbcfg != -1) { 310 ahbcfg &= GAHBCFG_CTRL_MASK; 311 ahbcfg |= hsotg->core_params->ahbcfg & 312 ~GAHBCFG_CTRL_MASK; 313 } 314 break; 315 316 case GHWCFG2_SLAVE_ONLY_ARCH: 317 default: 318 dev_dbg(hsotg->dev, "Slave Only Mode\n"); 319 break; 320 } 321 322 dev_dbg(hsotg->dev, "dma_enable:%d dma_desc_enable:%d\n", 323 hsotg->core_params->dma_enable, 324 hsotg->core_params->dma_desc_enable); 325 326 if (hsotg->core_params->dma_enable > 0) { 327 if (hsotg->core_params->dma_desc_enable > 0) 328 dev_dbg(hsotg->dev, "Using Descriptor DMA mode\n"); 329 else 330 dev_dbg(hsotg->dev, "Using Buffer DMA mode\n"); 331 } else { 332 dev_dbg(hsotg->dev, "Using Slave mode\n"); 333 hsotg->core_params->dma_desc_enable = 0; 334 } 335 336 if (hsotg->core_params->dma_enable > 0) 337 ahbcfg |= GAHBCFG_DMA_EN; 338 339 writel(ahbcfg, hsotg->regs + GAHBCFG); 340 341 return 0; 342 } 343 344 static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg) 345 { 346 u32 usbcfg; 347 348 usbcfg = readl(hsotg->regs + GUSBCFG); 349 usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP); 350 351 switch (hsotg->hw_params.op_mode) { 352 case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE: 353 if (hsotg->core_params->otg_cap == 354 DWC2_CAP_PARAM_HNP_SRP_CAPABLE) 355 usbcfg |= GUSBCFG_HNPCAP; 356 if (hsotg->core_params->otg_cap != 357 DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE) 358 usbcfg |= GUSBCFG_SRPCAP; 359 break; 360 361 case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE: 362 case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE: 363 case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST: 364 if (hsotg->core_params->otg_cap != 365 DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE) 366 usbcfg |= GUSBCFG_SRPCAP; 367 break; 368 369 case GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE: 370 case GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE: 371 case GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST: 372 default: 373 break; 374 } 375 376 writel(usbcfg, hsotg->regs + GUSBCFG); 377 } 378 379 /** 380 * dwc2_core_init() - Initializes the DWC_otg controller registers and 381 * prepares the core for device mode or host mode operation 382 * 383 * @hsotg: Programming view of the DWC_otg controller 384 * @select_phy: If true then also set the Phy type 385 * @irq: If >= 0, the irq to register 386 */ 387 int dwc2_core_init(struct dwc2_hsotg *hsotg, bool select_phy, int irq) 388 { 389 u32 usbcfg, otgctl; 390 int retval; 391 392 dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); 393 394 usbcfg = readl(hsotg->regs + GUSBCFG); 395 396 /* Set ULPI External VBUS bit if needed */ 397 usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV; 398 if (hsotg->core_params->phy_ulpi_ext_vbus == 399 DWC2_PHY_ULPI_EXTERNAL_VBUS) 400 usbcfg |= GUSBCFG_ULPI_EXT_VBUS_DRV; 401 402 /* Set external TS Dline pulsing bit if needed */ 403 usbcfg &= ~GUSBCFG_TERMSELDLPULSE; 404 if (hsotg->core_params->ts_dline > 0) 405 usbcfg |= GUSBCFG_TERMSELDLPULSE; 406 407 writel(usbcfg, hsotg->regs + GUSBCFG); 408 409 /* Reset the Controller */ 410 retval = dwc2_core_reset(hsotg); 411 if (retval) { 412 dev_err(hsotg->dev, "%s(): Reset failed, aborting\n", 413 __func__); 414 return retval; 415 } 416 417 /* 418 * This needs to happen in FS mode before any other programming occurs 419 */ 420 retval = dwc2_phy_init(hsotg, select_phy); 421 if (retval) 422 return retval; 423 424 /* Program the GAHBCFG Register */ 425 retval = dwc2_gahbcfg_init(hsotg); 426 if (retval) 427 return retval; 428 429 /* Program the GUSBCFG register */ 430 dwc2_gusbcfg_init(hsotg); 431 432 /* Program the GOTGCTL register */ 433 otgctl = readl(hsotg->regs + GOTGCTL); 434 otgctl &= ~GOTGCTL_OTGVER; 435 if (hsotg->core_params->otg_ver > 0) 436 otgctl |= GOTGCTL_OTGVER; 437 writel(otgctl, hsotg->regs + GOTGCTL); 438 dev_dbg(hsotg->dev, "OTG VER PARAM: %d\n", hsotg->core_params->otg_ver); 439 440 /* Clear the SRP success bit for FS-I2c */ 441 hsotg->srp_success = 0; 442 443 if (irq >= 0) { 444 dev_dbg(hsotg->dev, "registering common handler for irq%d\n", 445 irq); 446 retval = devm_request_irq(hsotg->dev, irq, 447 dwc2_handle_common_intr, IRQF_SHARED, 448 dev_name(hsotg->dev), hsotg); 449 if (retval) 450 return retval; 451 } 452 453 /* Enable common interrupts */ 454 dwc2_enable_common_interrupts(hsotg); 455 456 /* 457 * Do device or host intialization based on mode during PCD and 458 * HCD initialization 459 */ 460 if (dwc2_is_host_mode(hsotg)) { 461 dev_dbg(hsotg->dev, "Host Mode\n"); 462 hsotg->op_state = OTG_STATE_A_HOST; 463 } else { 464 dev_dbg(hsotg->dev, "Device Mode\n"); 465 hsotg->op_state = OTG_STATE_B_PERIPHERAL; 466 } 467 468 return 0; 469 } 470 471 /** 472 * dwc2_enable_host_interrupts() - Enables the Host mode interrupts 473 * 474 * @hsotg: Programming view of DWC_otg controller 475 */ 476 void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg) 477 { 478 u32 intmsk; 479 480 dev_dbg(hsotg->dev, "%s()\n", __func__); 481 482 /* Disable all interrupts */ 483 writel(0, hsotg->regs + GINTMSK); 484 writel(0, hsotg->regs + HAINTMSK); 485 486 /* Enable the common interrupts */ 487 dwc2_enable_common_interrupts(hsotg); 488 489 /* Enable host mode interrupts without disturbing common interrupts */ 490 intmsk = readl(hsotg->regs + GINTMSK); 491 intmsk |= GINTSTS_DISCONNINT | GINTSTS_PRTINT | GINTSTS_HCHINT; 492 writel(intmsk, hsotg->regs + GINTMSK); 493 } 494 495 /** 496 * dwc2_disable_host_interrupts() - Disables the Host Mode interrupts 497 * 498 * @hsotg: Programming view of DWC_otg controller 499 */ 500 void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg) 501 { 502 u32 intmsk = readl(hsotg->regs + GINTMSK); 503 504 /* Disable host mode interrupts without disturbing common interrupts */ 505 intmsk &= ~(GINTSTS_SOF | GINTSTS_PRTINT | GINTSTS_HCHINT | 506 GINTSTS_PTXFEMP | GINTSTS_NPTXFEMP); 507 writel(intmsk, hsotg->regs + GINTMSK); 508 } 509 510 static void dwc2_config_fifos(struct dwc2_hsotg *hsotg) 511 { 512 struct dwc2_core_params *params = hsotg->core_params; 513 u32 nptxfsiz, hptxfsiz, dfifocfg, grxfsiz; 514 515 if (!params->enable_dynamic_fifo) 516 return; 517 518 /* Rx FIFO */ 519 grxfsiz = readl(hsotg->regs + GRXFSIZ); 520 dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz); 521 grxfsiz &= ~GRXFSIZ_DEPTH_MASK; 522 grxfsiz |= params->host_rx_fifo_size << 523 GRXFSIZ_DEPTH_SHIFT & GRXFSIZ_DEPTH_MASK; 524 writel(grxfsiz, hsotg->regs + GRXFSIZ); 525 dev_dbg(hsotg->dev, "new grxfsiz=%08x\n", readl(hsotg->regs + GRXFSIZ)); 526 527 /* Non-periodic Tx FIFO */ 528 dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n", 529 readl(hsotg->regs + GNPTXFSIZ)); 530 nptxfsiz = params->host_nperio_tx_fifo_size << 531 FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK; 532 nptxfsiz |= params->host_rx_fifo_size << 533 FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK; 534 writel(nptxfsiz, hsotg->regs + GNPTXFSIZ); 535 dev_dbg(hsotg->dev, "new gnptxfsiz=%08x\n", 536 readl(hsotg->regs + GNPTXFSIZ)); 537 538 /* Periodic Tx FIFO */ 539 dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n", 540 readl(hsotg->regs + HPTXFSIZ)); 541 hptxfsiz = params->host_perio_tx_fifo_size << 542 FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK; 543 hptxfsiz |= (params->host_rx_fifo_size + 544 params->host_nperio_tx_fifo_size) << 545 FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK; 546 writel(hptxfsiz, hsotg->regs + HPTXFSIZ); 547 dev_dbg(hsotg->dev, "new hptxfsiz=%08x\n", 548 readl(hsotg->regs + HPTXFSIZ)); 549 550 if (hsotg->core_params->en_multiple_tx_fifo > 0 && 551 hsotg->hw_params.snpsid <= DWC2_CORE_REV_2_94a) { 552 /* 553 * Global DFIFOCFG calculation for Host mode - 554 * include RxFIFO, NPTXFIFO and HPTXFIFO 555 */ 556 dfifocfg = readl(hsotg->regs + GDFIFOCFG); 557 dfifocfg &= ~GDFIFOCFG_EPINFOBASE_MASK; 558 dfifocfg |= (params->host_rx_fifo_size + 559 params->host_nperio_tx_fifo_size + 560 params->host_perio_tx_fifo_size) << 561 GDFIFOCFG_EPINFOBASE_SHIFT & 562 GDFIFOCFG_EPINFOBASE_MASK; 563 writel(dfifocfg, hsotg->regs + GDFIFOCFG); 564 } 565 } 566 567 /** 568 * dwc2_core_host_init() - Initializes the DWC_otg controller registers for 569 * Host mode 570 * 571 * @hsotg: Programming view of DWC_otg controller 572 * 573 * This function flushes the Tx and Rx FIFOs and flushes any entries in the 574 * request queues. Host channels are reset to ensure that they are ready for 575 * performing transfers. 576 */ 577 void dwc2_core_host_init(struct dwc2_hsotg *hsotg) 578 { 579 u32 hcfg, hfir, otgctl; 580 581 dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); 582 583 /* Restart the Phy Clock */ 584 writel(0, hsotg->regs + PCGCTL); 585 586 /* Initialize Host Configuration Register */ 587 dwc2_init_fs_ls_pclk_sel(hsotg); 588 if (hsotg->core_params->speed == DWC2_SPEED_PARAM_FULL) { 589 hcfg = readl(hsotg->regs + HCFG); 590 hcfg |= HCFG_FSLSSUPP; 591 writel(hcfg, hsotg->regs + HCFG); 592 } 593 594 /* 595 * This bit allows dynamic reloading of the HFIR register during 596 * runtime. This bit needs to be programmed during initial configuration 597 * and its value must not be changed during runtime. 598 */ 599 if (hsotg->core_params->reload_ctl > 0) { 600 hfir = readl(hsotg->regs + HFIR); 601 hfir |= HFIR_RLDCTRL; 602 writel(hfir, hsotg->regs + HFIR); 603 } 604 605 if (hsotg->core_params->dma_desc_enable > 0) { 606 u32 op_mode = hsotg->hw_params.op_mode; 607 if (hsotg->hw_params.snpsid < DWC2_CORE_REV_2_90a || 608 !hsotg->hw_params.dma_desc_enable || 609 op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE || 610 op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE || 611 op_mode == GHWCFG2_OP_MODE_UNDEFINED) { 612 dev_err(hsotg->dev, 613 "Hardware does not support descriptor DMA mode -\n"); 614 dev_err(hsotg->dev, 615 "falling back to buffer DMA mode.\n"); 616 hsotg->core_params->dma_desc_enable = 0; 617 } else { 618 hcfg = readl(hsotg->regs + HCFG); 619 hcfg |= HCFG_DESCDMA; 620 writel(hcfg, hsotg->regs + HCFG); 621 } 622 } 623 624 /* Configure data FIFO sizes */ 625 dwc2_config_fifos(hsotg); 626 627 /* TODO - check this */ 628 /* Clear Host Set HNP Enable in the OTG Control Register */ 629 otgctl = readl(hsotg->regs + GOTGCTL); 630 otgctl &= ~GOTGCTL_HSTSETHNPEN; 631 writel(otgctl, hsotg->regs + GOTGCTL); 632 633 /* Make sure the FIFOs are flushed */ 634 dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */); 635 dwc2_flush_rx_fifo(hsotg); 636 637 /* Clear Host Set HNP Enable in the OTG Control Register */ 638 otgctl = readl(hsotg->regs + GOTGCTL); 639 otgctl &= ~GOTGCTL_HSTSETHNPEN; 640 writel(otgctl, hsotg->regs + GOTGCTL); 641 642 if (hsotg->core_params->dma_desc_enable <= 0) { 643 int num_channels, i; 644 u32 hcchar; 645 646 /* Flush out any leftover queued requests */ 647 num_channels = hsotg->core_params->host_channels; 648 for (i = 0; i < num_channels; i++) { 649 hcchar = readl(hsotg->regs + HCCHAR(i)); 650 hcchar &= ~HCCHAR_CHENA; 651 hcchar |= HCCHAR_CHDIS; 652 hcchar &= ~HCCHAR_EPDIR; 653 writel(hcchar, hsotg->regs + HCCHAR(i)); 654 } 655 656 /* Halt all channels to put them into a known state */ 657 for (i = 0; i < num_channels; i++) { 658 int count = 0; 659 660 hcchar = readl(hsotg->regs + HCCHAR(i)); 661 hcchar |= HCCHAR_CHENA | HCCHAR_CHDIS; 662 hcchar &= ~HCCHAR_EPDIR; 663 writel(hcchar, hsotg->regs + HCCHAR(i)); 664 dev_dbg(hsotg->dev, "%s: Halt channel %d\n", 665 __func__, i); 666 do { 667 hcchar = readl(hsotg->regs + HCCHAR(i)); 668 if (++count > 1000) { 669 dev_err(hsotg->dev, 670 "Unable to clear enable on channel %d\n", 671 i); 672 break; 673 } 674 udelay(1); 675 } while (hcchar & HCCHAR_CHENA); 676 } 677 } 678 679 /* Turn on the vbus power */ 680 dev_dbg(hsotg->dev, "Init: Port Power? op_state=%d\n", hsotg->op_state); 681 if (hsotg->op_state == OTG_STATE_A_HOST) { 682 u32 hprt0 = dwc2_read_hprt0(hsotg); 683 684 dev_dbg(hsotg->dev, "Init: Power Port (%d)\n", 685 !!(hprt0 & HPRT0_PWR)); 686 if (!(hprt0 & HPRT0_PWR)) { 687 hprt0 |= HPRT0_PWR; 688 writel(hprt0, hsotg->regs + HPRT0); 689 } 690 } 691 692 dwc2_enable_host_interrupts(hsotg); 693 } 694 695 static void dwc2_hc_enable_slave_ints(struct dwc2_hsotg *hsotg, 696 struct dwc2_host_chan *chan) 697 { 698 u32 hcintmsk = HCINTMSK_CHHLTD; 699 700 switch (chan->ep_type) { 701 case USB_ENDPOINT_XFER_CONTROL: 702 case USB_ENDPOINT_XFER_BULK: 703 dev_vdbg(hsotg->dev, "control/bulk\n"); 704 hcintmsk |= HCINTMSK_XFERCOMPL; 705 hcintmsk |= HCINTMSK_STALL; 706 hcintmsk |= HCINTMSK_XACTERR; 707 hcintmsk |= HCINTMSK_DATATGLERR; 708 if (chan->ep_is_in) { 709 hcintmsk |= HCINTMSK_BBLERR; 710 } else { 711 hcintmsk |= HCINTMSK_NAK; 712 hcintmsk |= HCINTMSK_NYET; 713 if (chan->do_ping) 714 hcintmsk |= HCINTMSK_ACK; 715 } 716 717 if (chan->do_split) { 718 hcintmsk |= HCINTMSK_NAK; 719 if (chan->complete_split) 720 hcintmsk |= HCINTMSK_NYET; 721 else 722 hcintmsk |= HCINTMSK_ACK; 723 } 724 725 if (chan->error_state) 726 hcintmsk |= HCINTMSK_ACK; 727 break; 728 729 case USB_ENDPOINT_XFER_INT: 730 if (dbg_perio()) 731 dev_vdbg(hsotg->dev, "intr\n"); 732 hcintmsk |= HCINTMSK_XFERCOMPL; 733 hcintmsk |= HCINTMSK_NAK; 734 hcintmsk |= HCINTMSK_STALL; 735 hcintmsk |= HCINTMSK_XACTERR; 736 hcintmsk |= HCINTMSK_DATATGLERR; 737 hcintmsk |= HCINTMSK_FRMOVRUN; 738 739 if (chan->ep_is_in) 740 hcintmsk |= HCINTMSK_BBLERR; 741 if (chan->error_state) 742 hcintmsk |= HCINTMSK_ACK; 743 if (chan->do_split) { 744 if (chan->complete_split) 745 hcintmsk |= HCINTMSK_NYET; 746 else 747 hcintmsk |= HCINTMSK_ACK; 748 } 749 break; 750 751 case USB_ENDPOINT_XFER_ISOC: 752 if (dbg_perio()) 753 dev_vdbg(hsotg->dev, "isoc\n"); 754 hcintmsk |= HCINTMSK_XFERCOMPL; 755 hcintmsk |= HCINTMSK_FRMOVRUN; 756 hcintmsk |= HCINTMSK_ACK; 757 758 if (chan->ep_is_in) { 759 hcintmsk |= HCINTMSK_XACTERR; 760 hcintmsk |= HCINTMSK_BBLERR; 761 } 762 break; 763 default: 764 dev_err(hsotg->dev, "## Unknown EP type ##\n"); 765 break; 766 } 767 768 writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num)); 769 if (dbg_hc(chan)) 770 dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); 771 } 772 773 static void dwc2_hc_enable_dma_ints(struct dwc2_hsotg *hsotg, 774 struct dwc2_host_chan *chan) 775 { 776 u32 hcintmsk = HCINTMSK_CHHLTD; 777 778 /* 779 * For Descriptor DMA mode core halts the channel on AHB error. 780 * Interrupt is not required. 781 */ 782 if (hsotg->core_params->dma_desc_enable <= 0) { 783 if (dbg_hc(chan)) 784 dev_vdbg(hsotg->dev, "desc DMA disabled\n"); 785 hcintmsk |= HCINTMSK_AHBERR; 786 } else { 787 if (dbg_hc(chan)) 788 dev_vdbg(hsotg->dev, "desc DMA enabled\n"); 789 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC) 790 hcintmsk |= HCINTMSK_XFERCOMPL; 791 } 792 793 if (chan->error_state && !chan->do_split && 794 chan->ep_type != USB_ENDPOINT_XFER_ISOC) { 795 if (dbg_hc(chan)) 796 dev_vdbg(hsotg->dev, "setting ACK\n"); 797 hcintmsk |= HCINTMSK_ACK; 798 if (chan->ep_is_in) { 799 hcintmsk |= HCINTMSK_DATATGLERR; 800 if (chan->ep_type != USB_ENDPOINT_XFER_INT) 801 hcintmsk |= HCINTMSK_NAK; 802 } 803 } 804 805 writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num)); 806 if (dbg_hc(chan)) 807 dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); 808 } 809 810 static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg, 811 struct dwc2_host_chan *chan) 812 { 813 u32 intmsk; 814 815 if (hsotg->core_params->dma_enable > 0) { 816 if (dbg_hc(chan)) 817 dev_vdbg(hsotg->dev, "DMA enabled\n"); 818 dwc2_hc_enable_dma_ints(hsotg, chan); 819 } else { 820 if (dbg_hc(chan)) 821 dev_vdbg(hsotg->dev, "DMA disabled\n"); 822 dwc2_hc_enable_slave_ints(hsotg, chan); 823 } 824 825 /* Enable the top level host channel interrupt */ 826 intmsk = readl(hsotg->regs + HAINTMSK); 827 intmsk |= 1 << chan->hc_num; 828 writel(intmsk, hsotg->regs + HAINTMSK); 829 if (dbg_hc(chan)) 830 dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk); 831 832 /* Make sure host channel interrupts are enabled */ 833 intmsk = readl(hsotg->regs + GINTMSK); 834 intmsk |= GINTSTS_HCHINT; 835 writel(intmsk, hsotg->regs + GINTMSK); 836 if (dbg_hc(chan)) 837 dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk); 838 } 839 840 /** 841 * dwc2_hc_init() - Prepares a host channel for transferring packets to/from 842 * a specific endpoint 843 * 844 * @hsotg: Programming view of DWC_otg controller 845 * @chan: Information needed to initialize the host channel 846 * 847 * The HCCHARn register is set up with the characteristics specified in chan. 848 * Host channel interrupts that may need to be serviced while this transfer is 849 * in progress are enabled. 850 */ 851 void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) 852 { 853 u8 hc_num = chan->hc_num; 854 u32 hcintmsk; 855 u32 hcchar; 856 u32 hcsplt = 0; 857 858 if (dbg_hc(chan)) 859 dev_vdbg(hsotg->dev, "%s()\n", __func__); 860 861 /* Clear old interrupt conditions for this host channel */ 862 hcintmsk = 0xffffffff; 863 hcintmsk &= ~HCINTMSK_RESERVED14_31; 864 writel(hcintmsk, hsotg->regs + HCINT(hc_num)); 865 866 /* Enable channel interrupts required for this transfer */ 867 dwc2_hc_enable_ints(hsotg, chan); 868 869 /* 870 * Program the HCCHARn register with the endpoint characteristics for 871 * the current transfer 872 */ 873 hcchar = chan->dev_addr << HCCHAR_DEVADDR_SHIFT & HCCHAR_DEVADDR_MASK; 874 hcchar |= chan->ep_num << HCCHAR_EPNUM_SHIFT & HCCHAR_EPNUM_MASK; 875 if (chan->ep_is_in) 876 hcchar |= HCCHAR_EPDIR; 877 if (chan->speed == USB_SPEED_LOW) 878 hcchar |= HCCHAR_LSPDDEV; 879 hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK; 880 hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_MASK; 881 writel(hcchar, hsotg->regs + HCCHAR(hc_num)); 882 if (dbg_hc(chan)) { 883 dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n", 884 hc_num, hcchar); 885 886 dev_vdbg(hsotg->dev, "%s: Channel %d\n", 887 __func__, hc_num); 888 dev_vdbg(hsotg->dev, " Dev Addr: %d\n", 889 chan->dev_addr); 890 dev_vdbg(hsotg->dev, " Ep Num: %d\n", 891 chan->ep_num); 892 dev_vdbg(hsotg->dev, " Is In: %d\n", 893 chan->ep_is_in); 894 dev_vdbg(hsotg->dev, " Is Low Speed: %d\n", 895 chan->speed == USB_SPEED_LOW); 896 dev_vdbg(hsotg->dev, " Ep Type: %d\n", 897 chan->ep_type); 898 dev_vdbg(hsotg->dev, " Max Pkt: %d\n", 899 chan->max_packet); 900 } 901 902 /* Program the HCSPLT register for SPLITs */ 903 if (chan->do_split) { 904 if (dbg_hc(chan)) 905 dev_vdbg(hsotg->dev, 906 "Programming HC %d with split --> %s\n", 907 hc_num, 908 chan->complete_split ? "CSPLIT" : "SSPLIT"); 909 if (chan->complete_split) 910 hcsplt |= HCSPLT_COMPSPLT; 911 hcsplt |= chan->xact_pos << HCSPLT_XACTPOS_SHIFT & 912 HCSPLT_XACTPOS_MASK; 913 hcsplt |= chan->hub_addr << HCSPLT_HUBADDR_SHIFT & 914 HCSPLT_HUBADDR_MASK; 915 hcsplt |= chan->hub_port << HCSPLT_PRTADDR_SHIFT & 916 HCSPLT_PRTADDR_MASK; 917 if (dbg_hc(chan)) { 918 dev_vdbg(hsotg->dev, " comp split %d\n", 919 chan->complete_split); 920 dev_vdbg(hsotg->dev, " xact pos %d\n", 921 chan->xact_pos); 922 dev_vdbg(hsotg->dev, " hub addr %d\n", 923 chan->hub_addr); 924 dev_vdbg(hsotg->dev, " hub port %d\n", 925 chan->hub_port); 926 dev_vdbg(hsotg->dev, " is_in %d\n", 927 chan->ep_is_in); 928 dev_vdbg(hsotg->dev, " Max Pkt %d\n", 929 chan->max_packet); 930 dev_vdbg(hsotg->dev, " xferlen %d\n", 931 chan->xfer_len); 932 } 933 } 934 935 writel(hcsplt, hsotg->regs + HCSPLT(hc_num)); 936 } 937 938 /** 939 * dwc2_hc_halt() - Attempts to halt a host channel 940 * 941 * @hsotg: Controller register interface 942 * @chan: Host channel to halt 943 * @halt_status: Reason for halting the channel 944 * 945 * This function should only be called in Slave mode or to abort a transfer in 946 * either Slave mode or DMA mode. Under normal circumstances in DMA mode, the 947 * controller halts the channel when the transfer is complete or a condition 948 * occurs that requires application intervention. 949 * 950 * In slave mode, checks for a free request queue entry, then sets the Channel 951 * Enable and Channel Disable bits of the Host Channel Characteristics 952 * register of the specified channel to intiate the halt. If there is no free 953 * request queue entry, sets only the Channel Disable bit of the HCCHARn 954 * register to flush requests for this channel. In the latter case, sets a 955 * flag to indicate that the host channel needs to be halted when a request 956 * queue slot is open. 957 * 958 * In DMA mode, always sets the Channel Enable and Channel Disable bits of the 959 * HCCHARn register. The controller ensures there is space in the request 960 * queue before submitting the halt request. 961 * 962 * Some time may elapse before the core flushes any posted requests for this 963 * host channel and halts. The Channel Halted interrupt handler completes the 964 * deactivation of the host channel. 965 */ 966 void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, 967 enum dwc2_halt_status halt_status) 968 { 969 u32 nptxsts, hptxsts, hcchar; 970 971 if (dbg_hc(chan)) 972 dev_vdbg(hsotg->dev, "%s()\n", __func__); 973 if (halt_status == DWC2_HC_XFER_NO_HALT_STATUS) 974 dev_err(hsotg->dev, "!!! halt_status = %d !!!\n", halt_status); 975 976 if (halt_status == DWC2_HC_XFER_URB_DEQUEUE || 977 halt_status == DWC2_HC_XFER_AHB_ERR) { 978 /* 979 * Disable all channel interrupts except Ch Halted. The QTD 980 * and QH state associated with this transfer has been cleared 981 * (in the case of URB_DEQUEUE), so the channel needs to be 982 * shut down carefully to prevent crashes. 983 */ 984 u32 hcintmsk = HCINTMSK_CHHLTD; 985 986 dev_vdbg(hsotg->dev, "dequeue/error\n"); 987 writel(hcintmsk, hsotg->regs + HCINTMSK(chan->hc_num)); 988 989 /* 990 * Make sure no other interrupts besides halt are currently 991 * pending. Handling another interrupt could cause a crash due 992 * to the QTD and QH state. 993 */ 994 writel(~hcintmsk, hsotg->regs + HCINT(chan->hc_num)); 995 996 /* 997 * Make sure the halt status is set to URB_DEQUEUE or AHB_ERR 998 * even if the channel was already halted for some other 999 * reason 1000 */ 1001 chan->halt_status = halt_status; 1002 1003 hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num)); 1004 if (!(hcchar & HCCHAR_CHENA)) { 1005 /* 1006 * The channel is either already halted or it hasn't 1007 * started yet. In DMA mode, the transfer may halt if 1008 * it finishes normally or a condition occurs that 1009 * requires driver intervention. Don't want to halt 1010 * the channel again. In either Slave or DMA mode, 1011 * it's possible that the transfer has been assigned 1012 * to a channel, but not started yet when an URB is 1013 * dequeued. Don't want to halt a channel that hasn't 1014 * started yet. 1015 */ 1016 return; 1017 } 1018 } 1019 if (chan->halt_pending) { 1020 /* 1021 * A halt has already been issued for this channel. This might 1022 * happen when a transfer is aborted by a higher level in 1023 * the stack. 1024 */ 1025 dev_vdbg(hsotg->dev, 1026 "*** %s: Channel %d, chan->halt_pending already set ***\n", 1027 __func__, chan->hc_num); 1028 return; 1029 } 1030 1031 hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num)); 1032 1033 /* No need to set the bit in DDMA for disabling the channel */ 1034 /* TODO check it everywhere channel is disabled */ 1035 if (hsotg->core_params->dma_desc_enable <= 0) { 1036 if (dbg_hc(chan)) 1037 dev_vdbg(hsotg->dev, "desc DMA disabled\n"); 1038 hcchar |= HCCHAR_CHENA; 1039 } else { 1040 if (dbg_hc(chan)) 1041 dev_dbg(hsotg->dev, "desc DMA enabled\n"); 1042 } 1043 hcchar |= HCCHAR_CHDIS; 1044 1045 if (hsotg->core_params->dma_enable <= 0) { 1046 if (dbg_hc(chan)) 1047 dev_vdbg(hsotg->dev, "DMA not enabled\n"); 1048 hcchar |= HCCHAR_CHENA; 1049 1050 /* Check for space in the request queue to issue the halt */ 1051 if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL || 1052 chan->ep_type == USB_ENDPOINT_XFER_BULK) { 1053 dev_vdbg(hsotg->dev, "control/bulk\n"); 1054 nptxsts = readl(hsotg->regs + GNPTXSTS); 1055 if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) { 1056 dev_vdbg(hsotg->dev, "Disabling channel\n"); 1057 hcchar &= ~HCCHAR_CHENA; 1058 } 1059 } else { 1060 if (dbg_perio()) 1061 dev_vdbg(hsotg->dev, "isoc/intr\n"); 1062 hptxsts = readl(hsotg->regs + HPTXSTS); 1063 if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 || 1064 hsotg->queuing_high_bandwidth) { 1065 if (dbg_perio()) 1066 dev_vdbg(hsotg->dev, "Disabling channel\n"); 1067 hcchar &= ~HCCHAR_CHENA; 1068 } 1069 } 1070 } else { 1071 if (dbg_hc(chan)) 1072 dev_vdbg(hsotg->dev, "DMA enabled\n"); 1073 } 1074 1075 writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); 1076 chan->halt_status = halt_status; 1077 1078 if (hcchar & HCCHAR_CHENA) { 1079 if (dbg_hc(chan)) 1080 dev_vdbg(hsotg->dev, "Channel enabled\n"); 1081 chan->halt_pending = 1; 1082 chan->halt_on_queue = 0; 1083 } else { 1084 if (dbg_hc(chan)) 1085 dev_vdbg(hsotg->dev, "Channel disabled\n"); 1086 chan->halt_on_queue = 1; 1087 } 1088 1089 if (dbg_hc(chan)) { 1090 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1091 chan->hc_num); 1092 dev_vdbg(hsotg->dev, " hcchar: 0x%08x\n", 1093 hcchar); 1094 dev_vdbg(hsotg->dev, " halt_pending: %d\n", 1095 chan->halt_pending); 1096 dev_vdbg(hsotg->dev, " halt_on_queue: %d\n", 1097 chan->halt_on_queue); 1098 dev_vdbg(hsotg->dev, " halt_status: %d\n", 1099 chan->halt_status); 1100 } 1101 } 1102 1103 /** 1104 * dwc2_hc_cleanup() - Clears the transfer state for a host channel 1105 * 1106 * @hsotg: Programming view of DWC_otg controller 1107 * @chan: Identifies the host channel to clean up 1108 * 1109 * This function is normally called after a transfer is done and the host 1110 * channel is being released 1111 */ 1112 void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) 1113 { 1114 u32 hcintmsk; 1115 1116 chan->xfer_started = 0; 1117 1118 /* 1119 * Clear channel interrupt enables and any unhandled channel interrupt 1120 * conditions 1121 */ 1122 writel(0, hsotg->regs + HCINTMSK(chan->hc_num)); 1123 hcintmsk = 0xffffffff; 1124 hcintmsk &= ~HCINTMSK_RESERVED14_31; 1125 writel(hcintmsk, hsotg->regs + HCINT(chan->hc_num)); 1126 } 1127 1128 /** 1129 * dwc2_hc_set_even_odd_frame() - Sets the channel property that indicates in 1130 * which frame a periodic transfer should occur 1131 * 1132 * @hsotg: Programming view of DWC_otg controller 1133 * @chan: Identifies the host channel to set up and its properties 1134 * @hcchar: Current value of the HCCHAR register for the specified host channel 1135 * 1136 * This function has no effect on non-periodic transfers 1137 */ 1138 static void dwc2_hc_set_even_odd_frame(struct dwc2_hsotg *hsotg, 1139 struct dwc2_host_chan *chan, u32 *hcchar) 1140 { 1141 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1142 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { 1143 /* 1 if _next_ frame is odd, 0 if it's even */ 1144 if (!(dwc2_hcd_get_frame_number(hsotg) & 0x1)) 1145 *hcchar |= HCCHAR_ODDFRM; 1146 } 1147 } 1148 1149 static void dwc2_set_pid_isoc(struct dwc2_host_chan *chan) 1150 { 1151 /* Set up the initial PID for the transfer */ 1152 if (chan->speed == USB_SPEED_HIGH) { 1153 if (chan->ep_is_in) { 1154 if (chan->multi_count == 1) 1155 chan->data_pid_start = DWC2_HC_PID_DATA0; 1156 else if (chan->multi_count == 2) 1157 chan->data_pid_start = DWC2_HC_PID_DATA1; 1158 else 1159 chan->data_pid_start = DWC2_HC_PID_DATA2; 1160 } else { 1161 if (chan->multi_count == 1) 1162 chan->data_pid_start = DWC2_HC_PID_DATA0; 1163 else 1164 chan->data_pid_start = DWC2_HC_PID_MDATA; 1165 } 1166 } else { 1167 chan->data_pid_start = DWC2_HC_PID_DATA0; 1168 } 1169 } 1170 1171 /** 1172 * dwc2_hc_write_packet() - Writes a packet into the Tx FIFO associated with 1173 * the Host Channel 1174 * 1175 * @hsotg: Programming view of DWC_otg controller 1176 * @chan: Information needed to initialize the host channel 1177 * 1178 * This function should only be called in Slave mode. For a channel associated 1179 * with a non-periodic EP, the non-periodic Tx FIFO is written. For a channel 1180 * associated with a periodic EP, the periodic Tx FIFO is written. 1181 * 1182 * Upon return the xfer_buf and xfer_count fields in chan are incremented by 1183 * the number of bytes written to the Tx FIFO. 1184 */ 1185 static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg, 1186 struct dwc2_host_chan *chan) 1187 { 1188 u32 i; 1189 u32 remaining_count; 1190 u32 byte_count; 1191 u32 dword_count; 1192 u32 __iomem *data_fifo; 1193 u32 *data_buf = (u32 *)chan->xfer_buf; 1194 1195 if (dbg_hc(chan)) 1196 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1197 1198 data_fifo = (u32 __iomem *)(hsotg->regs + HCFIFO(chan->hc_num)); 1199 1200 remaining_count = chan->xfer_len - chan->xfer_count; 1201 if (remaining_count > chan->max_packet) 1202 byte_count = chan->max_packet; 1203 else 1204 byte_count = remaining_count; 1205 1206 dword_count = (byte_count + 3) / 4; 1207 1208 if (((unsigned long)data_buf & 0x3) == 0) { 1209 /* xfer_buf is DWORD aligned */ 1210 for (i = 0; i < dword_count; i++, data_buf++) 1211 writel(*data_buf, data_fifo); 1212 } else { 1213 /* xfer_buf is not DWORD aligned */ 1214 for (i = 0; i < dword_count; i++, data_buf++) { 1215 u32 data = data_buf[0] | data_buf[1] << 8 | 1216 data_buf[2] << 16 | data_buf[3] << 24; 1217 writel(data, data_fifo); 1218 } 1219 } 1220 1221 chan->xfer_count += byte_count; 1222 chan->xfer_buf += byte_count; 1223 } 1224 1225 /** 1226 * dwc2_hc_start_transfer() - Does the setup for a data transfer for a host 1227 * channel and starts the transfer 1228 * 1229 * @hsotg: Programming view of DWC_otg controller 1230 * @chan: Information needed to initialize the host channel. The xfer_len value 1231 * may be reduced to accommodate the max widths of the XferSize and 1232 * PktCnt fields in the HCTSIZn register. The multi_count value may be 1233 * changed to reflect the final xfer_len value. 1234 * 1235 * This function may be called in either Slave mode or DMA mode. In Slave mode, 1236 * the caller must ensure that there is sufficient space in the request queue 1237 * and Tx Data FIFO. 1238 * 1239 * For an OUT transfer in Slave mode, it loads a data packet into the 1240 * appropriate FIFO. If necessary, additional data packets are loaded in the 1241 * Host ISR. 1242 * 1243 * For an IN transfer in Slave mode, a data packet is requested. The data 1244 * packets are unloaded from the Rx FIFO in the Host ISR. If necessary, 1245 * additional data packets are requested in the Host ISR. 1246 * 1247 * For a PING transfer in Slave mode, the Do Ping bit is set in the HCTSIZ 1248 * register along with a packet count of 1 and the channel is enabled. This 1249 * causes a single PING transaction to occur. Other fields in HCTSIZ are 1250 * simply set to 0 since no data transfer occurs in this case. 1251 * 1252 * For a PING transfer in DMA mode, the HCTSIZ register is initialized with 1253 * all the information required to perform the subsequent data transfer. In 1254 * addition, the Do Ping bit is set in the HCTSIZ register. In this case, the 1255 * controller performs the entire PING protocol, then starts the data 1256 * transfer. 1257 */ 1258 void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, 1259 struct dwc2_host_chan *chan) 1260 { 1261 u32 max_hc_xfer_size = hsotg->core_params->max_transfer_size; 1262 u16 max_hc_pkt_count = hsotg->core_params->max_packet_count; 1263 u32 hcchar; 1264 u32 hctsiz = 0; 1265 u16 num_packets; 1266 1267 if (dbg_hc(chan)) 1268 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1269 1270 if (chan->do_ping) { 1271 if (hsotg->core_params->dma_enable <= 0) { 1272 if (dbg_hc(chan)) 1273 dev_vdbg(hsotg->dev, "ping, no DMA\n"); 1274 dwc2_hc_do_ping(hsotg, chan); 1275 chan->xfer_started = 1; 1276 return; 1277 } else { 1278 if (dbg_hc(chan)) 1279 dev_vdbg(hsotg->dev, "ping, DMA\n"); 1280 hctsiz |= TSIZ_DOPNG; 1281 } 1282 } 1283 1284 if (chan->do_split) { 1285 if (dbg_hc(chan)) 1286 dev_vdbg(hsotg->dev, "split\n"); 1287 num_packets = 1; 1288 1289 if (chan->complete_split && !chan->ep_is_in) 1290 /* 1291 * For CSPLIT OUT Transfer, set the size to 0 so the 1292 * core doesn't expect any data written to the FIFO 1293 */ 1294 chan->xfer_len = 0; 1295 else if (chan->ep_is_in || chan->xfer_len > chan->max_packet) 1296 chan->xfer_len = chan->max_packet; 1297 else if (!chan->ep_is_in && chan->xfer_len > 188) 1298 chan->xfer_len = 188; 1299 1300 hctsiz |= chan->xfer_len << TSIZ_XFERSIZE_SHIFT & 1301 TSIZ_XFERSIZE_MASK; 1302 } else { 1303 if (dbg_hc(chan)) 1304 dev_vdbg(hsotg->dev, "no split\n"); 1305 /* 1306 * Ensure that the transfer length and packet count will fit 1307 * in the widths allocated for them in the HCTSIZn register 1308 */ 1309 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1310 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { 1311 /* 1312 * Make sure the transfer size is no larger than one 1313 * (micro)frame's worth of data. (A check was done 1314 * when the periodic transfer was accepted to ensure 1315 * that a (micro)frame's worth of data can be 1316 * programmed into a channel.) 1317 */ 1318 u32 max_periodic_len = 1319 chan->multi_count * chan->max_packet; 1320 1321 if (chan->xfer_len > max_periodic_len) 1322 chan->xfer_len = max_periodic_len; 1323 } else if (chan->xfer_len > max_hc_xfer_size) { 1324 /* 1325 * Make sure that xfer_len is a multiple of max packet 1326 * size 1327 */ 1328 chan->xfer_len = 1329 max_hc_xfer_size - chan->max_packet + 1; 1330 } 1331 1332 if (chan->xfer_len > 0) { 1333 num_packets = (chan->xfer_len + chan->max_packet - 1) / 1334 chan->max_packet; 1335 if (num_packets > max_hc_pkt_count) { 1336 num_packets = max_hc_pkt_count; 1337 chan->xfer_len = num_packets * chan->max_packet; 1338 } 1339 } else { 1340 /* Need 1 packet for transfer length of 0 */ 1341 num_packets = 1; 1342 } 1343 1344 if (chan->ep_is_in) 1345 /* 1346 * Always program an integral # of max packets for IN 1347 * transfers 1348 */ 1349 chan->xfer_len = num_packets * chan->max_packet; 1350 1351 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1352 chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1353 /* 1354 * Make sure that the multi_count field matches the 1355 * actual transfer length 1356 */ 1357 chan->multi_count = num_packets; 1358 1359 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1360 dwc2_set_pid_isoc(chan); 1361 1362 hctsiz |= chan->xfer_len << TSIZ_XFERSIZE_SHIFT & 1363 TSIZ_XFERSIZE_MASK; 1364 } 1365 1366 chan->start_pkt_count = num_packets; 1367 hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK; 1368 hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT & 1369 TSIZ_SC_MC_PID_MASK; 1370 writel(hctsiz, hsotg->regs + HCTSIZ(chan->hc_num)); 1371 if (dbg_hc(chan)) { 1372 dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n", 1373 hctsiz, chan->hc_num); 1374 1375 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1376 chan->hc_num); 1377 dev_vdbg(hsotg->dev, " Xfer Size: %d\n", 1378 (hctsiz & TSIZ_XFERSIZE_MASK) >> 1379 TSIZ_XFERSIZE_SHIFT); 1380 dev_vdbg(hsotg->dev, " Num Pkts: %d\n", 1381 (hctsiz & TSIZ_PKTCNT_MASK) >> 1382 TSIZ_PKTCNT_SHIFT); 1383 dev_vdbg(hsotg->dev, " Start PID: %d\n", 1384 (hctsiz & TSIZ_SC_MC_PID_MASK) >> 1385 TSIZ_SC_MC_PID_SHIFT); 1386 } 1387 1388 if (hsotg->core_params->dma_enable > 0) { 1389 dma_addr_t dma_addr; 1390 1391 if (chan->align_buf) { 1392 if (dbg_hc(chan)) 1393 dev_vdbg(hsotg->dev, "align_buf\n"); 1394 dma_addr = chan->align_buf; 1395 } else { 1396 dma_addr = chan->xfer_dma; 1397 } 1398 writel((u32)dma_addr, hsotg->regs + HCDMA(chan->hc_num)); 1399 if (dbg_hc(chan)) 1400 dev_vdbg(hsotg->dev, "Wrote %08lx to HCDMA(%d)\n", 1401 (unsigned long)dma_addr, chan->hc_num); 1402 } 1403 1404 /* Start the split */ 1405 if (chan->do_split) { 1406 u32 hcsplt = readl(hsotg->regs + HCSPLT(chan->hc_num)); 1407 1408 hcsplt |= HCSPLT_SPLTENA; 1409 writel(hcsplt, hsotg->regs + HCSPLT(chan->hc_num)); 1410 } 1411 1412 hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num)); 1413 hcchar &= ~HCCHAR_MULTICNT_MASK; 1414 hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT & 1415 HCCHAR_MULTICNT_MASK; 1416 dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); 1417 1418 if (hcchar & HCCHAR_CHDIS) 1419 dev_warn(hsotg->dev, 1420 "%s: chdis set, channel %d, hcchar 0x%08x\n", 1421 __func__, chan->hc_num, hcchar); 1422 1423 /* Set host channel enable after all other setup is complete */ 1424 hcchar |= HCCHAR_CHENA; 1425 hcchar &= ~HCCHAR_CHDIS; 1426 1427 if (dbg_hc(chan)) 1428 dev_vdbg(hsotg->dev, " Multi Cnt: %d\n", 1429 (hcchar & HCCHAR_MULTICNT_MASK) >> 1430 HCCHAR_MULTICNT_SHIFT); 1431 1432 writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); 1433 if (dbg_hc(chan)) 1434 dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, 1435 chan->hc_num); 1436 1437 chan->xfer_started = 1; 1438 chan->requests++; 1439 1440 if (hsotg->core_params->dma_enable <= 0 && 1441 !chan->ep_is_in && chan->xfer_len > 0) 1442 /* Load OUT packet into the appropriate Tx FIFO */ 1443 dwc2_hc_write_packet(hsotg, chan); 1444 } 1445 1446 /** 1447 * dwc2_hc_start_transfer_ddma() - Does the setup for a data transfer for a 1448 * host channel and starts the transfer in Descriptor DMA mode 1449 * 1450 * @hsotg: Programming view of DWC_otg controller 1451 * @chan: Information needed to initialize the host channel 1452 * 1453 * Initializes HCTSIZ register. For a PING transfer the Do Ping bit is set. 1454 * Sets PID and NTD values. For periodic transfers initializes SCHED_INFO field 1455 * with micro-frame bitmap. 1456 * 1457 * Initializes HCDMA register with descriptor list address and CTD value then 1458 * starts the transfer via enabling the channel. 1459 */ 1460 void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg, 1461 struct dwc2_host_chan *chan) 1462 { 1463 u32 hcchar; 1464 u32 hc_dma; 1465 u32 hctsiz = 0; 1466 1467 if (chan->do_ping) 1468 hctsiz |= TSIZ_DOPNG; 1469 1470 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1471 dwc2_set_pid_isoc(chan); 1472 1473 /* Packet Count and Xfer Size are not used in Descriptor DMA mode */ 1474 hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT & 1475 TSIZ_SC_MC_PID_MASK; 1476 1477 /* 0 - 1 descriptor, 1 - 2 descriptors, etc */ 1478 hctsiz |= (chan->ntd - 1) << TSIZ_NTD_SHIFT & TSIZ_NTD_MASK; 1479 1480 /* Non-zero only for high-speed interrupt endpoints */ 1481 hctsiz |= chan->schinfo << TSIZ_SCHINFO_SHIFT & TSIZ_SCHINFO_MASK; 1482 1483 if (dbg_hc(chan)) { 1484 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1485 chan->hc_num); 1486 dev_vdbg(hsotg->dev, " Start PID: %d\n", 1487 chan->data_pid_start); 1488 dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1); 1489 } 1490 1491 writel(hctsiz, hsotg->regs + HCTSIZ(chan->hc_num)); 1492 1493 hc_dma = (u32)chan->desc_list_addr & HCDMA_DMA_ADDR_MASK; 1494 1495 /* Always start from first descriptor */ 1496 hc_dma &= ~HCDMA_CTD_MASK; 1497 writel(hc_dma, hsotg->regs + HCDMA(chan->hc_num)); 1498 if (dbg_hc(chan)) 1499 dev_vdbg(hsotg->dev, "Wrote %08x to HCDMA(%d)\n", 1500 hc_dma, chan->hc_num); 1501 1502 hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num)); 1503 hcchar &= ~HCCHAR_MULTICNT_MASK; 1504 hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT & 1505 HCCHAR_MULTICNT_MASK; 1506 1507 if (hcchar & HCCHAR_CHDIS) 1508 dev_warn(hsotg->dev, 1509 "%s: chdis set, channel %d, hcchar 0x%08x\n", 1510 __func__, chan->hc_num, hcchar); 1511 1512 /* Set host channel enable after all other setup is complete */ 1513 hcchar |= HCCHAR_CHENA; 1514 hcchar &= ~HCCHAR_CHDIS; 1515 1516 if (dbg_hc(chan)) 1517 dev_vdbg(hsotg->dev, " Multi Cnt: %d\n", 1518 (hcchar & HCCHAR_MULTICNT_MASK) >> 1519 HCCHAR_MULTICNT_SHIFT); 1520 1521 writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); 1522 if (dbg_hc(chan)) 1523 dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, 1524 chan->hc_num); 1525 1526 chan->xfer_started = 1; 1527 chan->requests++; 1528 } 1529 1530 /** 1531 * dwc2_hc_continue_transfer() - Continues a data transfer that was started by 1532 * a previous call to dwc2_hc_start_transfer() 1533 * 1534 * @hsotg: Programming view of DWC_otg controller 1535 * @chan: Information needed to initialize the host channel 1536 * 1537 * The caller must ensure there is sufficient space in the request queue and Tx 1538 * Data FIFO. This function should only be called in Slave mode. In DMA mode, 1539 * the controller acts autonomously to complete transfers programmed to a host 1540 * channel. 1541 * 1542 * For an OUT transfer, a new data packet is loaded into the appropriate FIFO 1543 * if there is any data remaining to be queued. For an IN transfer, another 1544 * data packet is always requested. For the SETUP phase of a control transfer, 1545 * this function does nothing. 1546 * 1547 * Return: 1 if a new request is queued, 0 if no more requests are required 1548 * for this transfer 1549 */ 1550 int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg, 1551 struct dwc2_host_chan *chan) 1552 { 1553 if (dbg_hc(chan)) 1554 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1555 chan->hc_num); 1556 1557 if (chan->do_split) 1558 /* SPLITs always queue just once per channel */ 1559 return 0; 1560 1561 if (chan->data_pid_start == DWC2_HC_PID_SETUP) 1562 /* SETUPs are queued only once since they can't be NAK'd */ 1563 return 0; 1564 1565 if (chan->ep_is_in) { 1566 /* 1567 * Always queue another request for other IN transfers. If 1568 * back-to-back INs are issued and NAKs are received for both, 1569 * the driver may still be processing the first NAK when the 1570 * second NAK is received. When the interrupt handler clears 1571 * the NAK interrupt for the first NAK, the second NAK will 1572 * not be seen. So we can't depend on the NAK interrupt 1573 * handler to requeue a NAK'd request. Instead, IN requests 1574 * are issued each time this function is called. When the 1575 * transfer completes, the extra requests for the channel will 1576 * be flushed. 1577 */ 1578 u32 hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num)); 1579 1580 dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); 1581 hcchar |= HCCHAR_CHENA; 1582 hcchar &= ~HCCHAR_CHDIS; 1583 if (dbg_hc(chan)) 1584 dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n", 1585 hcchar); 1586 writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); 1587 chan->requests++; 1588 return 1; 1589 } 1590 1591 /* OUT transfers */ 1592 1593 if (chan->xfer_count < chan->xfer_len) { 1594 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1595 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { 1596 u32 hcchar = readl(hsotg->regs + 1597 HCCHAR(chan->hc_num)); 1598 1599 dwc2_hc_set_even_odd_frame(hsotg, chan, 1600 &hcchar); 1601 } 1602 1603 /* Load OUT packet into the appropriate Tx FIFO */ 1604 dwc2_hc_write_packet(hsotg, chan); 1605 chan->requests++; 1606 return 1; 1607 } 1608 1609 return 0; 1610 } 1611 1612 /** 1613 * dwc2_hc_do_ping() - Starts a PING transfer 1614 * 1615 * @hsotg: Programming view of DWC_otg controller 1616 * @chan: Information needed to initialize the host channel 1617 * 1618 * This function should only be called in Slave mode. The Do Ping bit is set in 1619 * the HCTSIZ register, then the channel is enabled. 1620 */ 1621 void dwc2_hc_do_ping(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) 1622 { 1623 u32 hcchar; 1624 u32 hctsiz; 1625 1626 if (dbg_hc(chan)) 1627 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1628 chan->hc_num); 1629 1630 1631 hctsiz = TSIZ_DOPNG; 1632 hctsiz |= 1 << TSIZ_PKTCNT_SHIFT; 1633 writel(hctsiz, hsotg->regs + HCTSIZ(chan->hc_num)); 1634 1635 hcchar = readl(hsotg->regs + HCCHAR(chan->hc_num)); 1636 hcchar |= HCCHAR_CHENA; 1637 hcchar &= ~HCCHAR_CHDIS; 1638 writel(hcchar, hsotg->regs + HCCHAR(chan->hc_num)); 1639 } 1640 1641 /** 1642 * dwc2_calc_frame_interval() - Calculates the correct frame Interval value for 1643 * the HFIR register according to PHY type and speed 1644 * 1645 * @hsotg: Programming view of DWC_otg controller 1646 * 1647 * NOTE: The caller can modify the value of the HFIR register only after the 1648 * Port Enable bit of the Host Port Control and Status register (HPRT.EnaPort) 1649 * has been set 1650 */ 1651 u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg) 1652 { 1653 u32 usbcfg; 1654 u32 hprt0; 1655 int clock = 60; /* default value */ 1656 1657 usbcfg = readl(hsotg->regs + GUSBCFG); 1658 hprt0 = readl(hsotg->regs + HPRT0); 1659 1660 if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) && 1661 !(usbcfg & GUSBCFG_PHYIF16)) 1662 clock = 60; 1663 if ((usbcfg & GUSBCFG_PHYSEL) && hsotg->hw_params.fs_phy_type == 1664 GHWCFG2_FS_PHY_TYPE_SHARED_ULPI) 1665 clock = 48; 1666 if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) && 1667 !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && (usbcfg & GUSBCFG_PHYIF16)) 1668 clock = 30; 1669 if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) && 1670 !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && !(usbcfg & GUSBCFG_PHYIF16)) 1671 clock = 60; 1672 if ((usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) && 1673 !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && (usbcfg & GUSBCFG_PHYIF16)) 1674 clock = 48; 1675 if ((usbcfg & GUSBCFG_PHYSEL) && !(usbcfg & GUSBCFG_PHYIF16) && 1676 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_SHARED_UTMI) 1677 clock = 48; 1678 if ((usbcfg & GUSBCFG_PHYSEL) && 1679 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) 1680 clock = 48; 1681 1682 if ((hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT == HPRT0_SPD_HIGH_SPEED) 1683 /* High speed case */ 1684 return 125 * clock; 1685 else 1686 /* FS/LS case */ 1687 return 1000 * clock; 1688 } 1689 1690 /** 1691 * dwc2_read_packet() - Reads a packet from the Rx FIFO into the destination 1692 * buffer 1693 * 1694 * @core_if: Programming view of DWC_otg controller 1695 * @dest: Destination buffer for the packet 1696 * @bytes: Number of bytes to copy to the destination 1697 */ 1698 void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes) 1699 { 1700 u32 __iomem *fifo = hsotg->regs + HCFIFO(0); 1701 u32 *data_buf = (u32 *)dest; 1702 int word_count = (bytes + 3) / 4; 1703 int i; 1704 1705 /* 1706 * Todo: Account for the case where dest is not dword aligned. This 1707 * requires reading data from the FIFO into a u32 temp buffer, then 1708 * moving it into the data buffer. 1709 */ 1710 1711 dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes); 1712 1713 for (i = 0; i < word_count; i++, data_buf++) 1714 *data_buf = readl(fifo); 1715 } 1716 1717 /** 1718 * dwc2_dump_host_registers() - Prints the host registers 1719 * 1720 * @hsotg: Programming view of DWC_otg controller 1721 * 1722 * NOTE: This function will be removed once the peripheral controller code 1723 * is integrated and the driver is stable 1724 */ 1725 void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg) 1726 { 1727 #ifdef DEBUG 1728 u32 __iomem *addr; 1729 int i; 1730 1731 dev_dbg(hsotg->dev, "Host Global Registers\n"); 1732 addr = hsotg->regs + HCFG; 1733 dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n", 1734 (unsigned long)addr, readl(addr)); 1735 addr = hsotg->regs + HFIR; 1736 dev_dbg(hsotg->dev, "HFIR @0x%08lX : 0x%08X\n", 1737 (unsigned long)addr, readl(addr)); 1738 addr = hsotg->regs + HFNUM; 1739 dev_dbg(hsotg->dev, "HFNUM @0x%08lX : 0x%08X\n", 1740 (unsigned long)addr, readl(addr)); 1741 addr = hsotg->regs + HPTXSTS; 1742 dev_dbg(hsotg->dev, "HPTXSTS @0x%08lX : 0x%08X\n", 1743 (unsigned long)addr, readl(addr)); 1744 addr = hsotg->regs + HAINT; 1745 dev_dbg(hsotg->dev, "HAINT @0x%08lX : 0x%08X\n", 1746 (unsigned long)addr, readl(addr)); 1747 addr = hsotg->regs + HAINTMSK; 1748 dev_dbg(hsotg->dev, "HAINTMSK @0x%08lX : 0x%08X\n", 1749 (unsigned long)addr, readl(addr)); 1750 if (hsotg->core_params->dma_desc_enable > 0) { 1751 addr = hsotg->regs + HFLBADDR; 1752 dev_dbg(hsotg->dev, "HFLBADDR @0x%08lX : 0x%08X\n", 1753 (unsigned long)addr, readl(addr)); 1754 } 1755 1756 addr = hsotg->regs + HPRT0; 1757 dev_dbg(hsotg->dev, "HPRT0 @0x%08lX : 0x%08X\n", 1758 (unsigned long)addr, readl(addr)); 1759 1760 for (i = 0; i < hsotg->core_params->host_channels; i++) { 1761 dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i); 1762 addr = hsotg->regs + HCCHAR(i); 1763 dev_dbg(hsotg->dev, "HCCHAR @0x%08lX : 0x%08X\n", 1764 (unsigned long)addr, readl(addr)); 1765 addr = hsotg->regs + HCSPLT(i); 1766 dev_dbg(hsotg->dev, "HCSPLT @0x%08lX : 0x%08X\n", 1767 (unsigned long)addr, readl(addr)); 1768 addr = hsotg->regs + HCINT(i); 1769 dev_dbg(hsotg->dev, "HCINT @0x%08lX : 0x%08X\n", 1770 (unsigned long)addr, readl(addr)); 1771 addr = hsotg->regs + HCINTMSK(i); 1772 dev_dbg(hsotg->dev, "HCINTMSK @0x%08lX : 0x%08X\n", 1773 (unsigned long)addr, readl(addr)); 1774 addr = hsotg->regs + HCTSIZ(i); 1775 dev_dbg(hsotg->dev, "HCTSIZ @0x%08lX : 0x%08X\n", 1776 (unsigned long)addr, readl(addr)); 1777 addr = hsotg->regs + HCDMA(i); 1778 dev_dbg(hsotg->dev, "HCDMA @0x%08lX : 0x%08X\n", 1779 (unsigned long)addr, readl(addr)); 1780 if (hsotg->core_params->dma_desc_enable > 0) { 1781 addr = hsotg->regs + HCDMAB(i); 1782 dev_dbg(hsotg->dev, "HCDMAB @0x%08lX : 0x%08X\n", 1783 (unsigned long)addr, readl(addr)); 1784 } 1785 } 1786 #endif 1787 } 1788 1789 /** 1790 * dwc2_dump_global_registers() - Prints the core global registers 1791 * 1792 * @hsotg: Programming view of DWC_otg controller 1793 * 1794 * NOTE: This function will be removed once the peripheral controller code 1795 * is integrated and the driver is stable 1796 */ 1797 void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg) 1798 { 1799 #ifdef DEBUG 1800 u32 __iomem *addr; 1801 1802 dev_dbg(hsotg->dev, "Core Global Registers\n"); 1803 addr = hsotg->regs + GOTGCTL; 1804 dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n", 1805 (unsigned long)addr, readl(addr)); 1806 addr = hsotg->regs + GOTGINT; 1807 dev_dbg(hsotg->dev, "GOTGINT @0x%08lX : 0x%08X\n", 1808 (unsigned long)addr, readl(addr)); 1809 addr = hsotg->regs + GAHBCFG; 1810 dev_dbg(hsotg->dev, "GAHBCFG @0x%08lX : 0x%08X\n", 1811 (unsigned long)addr, readl(addr)); 1812 addr = hsotg->regs + GUSBCFG; 1813 dev_dbg(hsotg->dev, "GUSBCFG @0x%08lX : 0x%08X\n", 1814 (unsigned long)addr, readl(addr)); 1815 addr = hsotg->regs + GRSTCTL; 1816 dev_dbg(hsotg->dev, "GRSTCTL @0x%08lX : 0x%08X\n", 1817 (unsigned long)addr, readl(addr)); 1818 addr = hsotg->regs + GINTSTS; 1819 dev_dbg(hsotg->dev, "GINTSTS @0x%08lX : 0x%08X\n", 1820 (unsigned long)addr, readl(addr)); 1821 addr = hsotg->regs + GINTMSK; 1822 dev_dbg(hsotg->dev, "GINTMSK @0x%08lX : 0x%08X\n", 1823 (unsigned long)addr, readl(addr)); 1824 addr = hsotg->regs + GRXSTSR; 1825 dev_dbg(hsotg->dev, "GRXSTSR @0x%08lX : 0x%08X\n", 1826 (unsigned long)addr, readl(addr)); 1827 addr = hsotg->regs + GRXFSIZ; 1828 dev_dbg(hsotg->dev, "GRXFSIZ @0x%08lX : 0x%08X\n", 1829 (unsigned long)addr, readl(addr)); 1830 addr = hsotg->regs + GNPTXFSIZ; 1831 dev_dbg(hsotg->dev, "GNPTXFSIZ @0x%08lX : 0x%08X\n", 1832 (unsigned long)addr, readl(addr)); 1833 addr = hsotg->regs + GNPTXSTS; 1834 dev_dbg(hsotg->dev, "GNPTXSTS @0x%08lX : 0x%08X\n", 1835 (unsigned long)addr, readl(addr)); 1836 addr = hsotg->regs + GI2CCTL; 1837 dev_dbg(hsotg->dev, "GI2CCTL @0x%08lX : 0x%08X\n", 1838 (unsigned long)addr, readl(addr)); 1839 addr = hsotg->regs + GPVNDCTL; 1840 dev_dbg(hsotg->dev, "GPVNDCTL @0x%08lX : 0x%08X\n", 1841 (unsigned long)addr, readl(addr)); 1842 addr = hsotg->regs + GGPIO; 1843 dev_dbg(hsotg->dev, "GGPIO @0x%08lX : 0x%08X\n", 1844 (unsigned long)addr, readl(addr)); 1845 addr = hsotg->regs + GUID; 1846 dev_dbg(hsotg->dev, "GUID @0x%08lX : 0x%08X\n", 1847 (unsigned long)addr, readl(addr)); 1848 addr = hsotg->regs + GSNPSID; 1849 dev_dbg(hsotg->dev, "GSNPSID @0x%08lX : 0x%08X\n", 1850 (unsigned long)addr, readl(addr)); 1851 addr = hsotg->regs + GHWCFG1; 1852 dev_dbg(hsotg->dev, "GHWCFG1 @0x%08lX : 0x%08X\n", 1853 (unsigned long)addr, readl(addr)); 1854 addr = hsotg->regs + GHWCFG2; 1855 dev_dbg(hsotg->dev, "GHWCFG2 @0x%08lX : 0x%08X\n", 1856 (unsigned long)addr, readl(addr)); 1857 addr = hsotg->regs + GHWCFG3; 1858 dev_dbg(hsotg->dev, "GHWCFG3 @0x%08lX : 0x%08X\n", 1859 (unsigned long)addr, readl(addr)); 1860 addr = hsotg->regs + GHWCFG4; 1861 dev_dbg(hsotg->dev, "GHWCFG4 @0x%08lX : 0x%08X\n", 1862 (unsigned long)addr, readl(addr)); 1863 addr = hsotg->regs + GLPMCFG; 1864 dev_dbg(hsotg->dev, "GLPMCFG @0x%08lX : 0x%08X\n", 1865 (unsigned long)addr, readl(addr)); 1866 addr = hsotg->regs + GPWRDN; 1867 dev_dbg(hsotg->dev, "GPWRDN @0x%08lX : 0x%08X\n", 1868 (unsigned long)addr, readl(addr)); 1869 addr = hsotg->regs + GDFIFOCFG; 1870 dev_dbg(hsotg->dev, "GDFIFOCFG @0x%08lX : 0x%08X\n", 1871 (unsigned long)addr, readl(addr)); 1872 addr = hsotg->regs + HPTXFSIZ; 1873 dev_dbg(hsotg->dev, "HPTXFSIZ @0x%08lX : 0x%08X\n", 1874 (unsigned long)addr, readl(addr)); 1875 1876 addr = hsotg->regs + PCGCTL; 1877 dev_dbg(hsotg->dev, "PCGCTL @0x%08lX : 0x%08X\n", 1878 (unsigned long)addr, readl(addr)); 1879 #endif 1880 } 1881 1882 /** 1883 * dwc2_flush_tx_fifo() - Flushes a Tx FIFO 1884 * 1885 * @hsotg: Programming view of DWC_otg controller 1886 * @num: Tx FIFO to flush 1887 */ 1888 void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num) 1889 { 1890 u32 greset; 1891 int count = 0; 1892 1893 dev_vdbg(hsotg->dev, "Flush Tx FIFO %d\n", num); 1894 1895 greset = GRSTCTL_TXFFLSH; 1896 greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK; 1897 writel(greset, hsotg->regs + GRSTCTL); 1898 1899 do { 1900 greset = readl(hsotg->regs + GRSTCTL); 1901 if (++count > 10000) { 1902 dev_warn(hsotg->dev, 1903 "%s() HANG! GRSTCTL=%0x GNPTXSTS=0x%08x\n", 1904 __func__, greset, 1905 readl(hsotg->regs + GNPTXSTS)); 1906 break; 1907 } 1908 udelay(1); 1909 } while (greset & GRSTCTL_TXFFLSH); 1910 1911 /* Wait for at least 3 PHY Clocks */ 1912 udelay(1); 1913 } 1914 1915 /** 1916 * dwc2_flush_rx_fifo() - Flushes the Rx FIFO 1917 * 1918 * @hsotg: Programming view of DWC_otg controller 1919 */ 1920 void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg) 1921 { 1922 u32 greset; 1923 int count = 0; 1924 1925 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1926 1927 greset = GRSTCTL_RXFFLSH; 1928 writel(greset, hsotg->regs + GRSTCTL); 1929 1930 do { 1931 greset = readl(hsotg->regs + GRSTCTL); 1932 if (++count > 10000) { 1933 dev_warn(hsotg->dev, "%s() HANG! GRSTCTL=%0x\n", 1934 __func__, greset); 1935 break; 1936 } 1937 udelay(1); 1938 } while (greset & GRSTCTL_RXFFLSH); 1939 1940 /* Wait for at least 3 PHY Clocks */ 1941 udelay(1); 1942 } 1943 1944 #define DWC2_OUT_OF_BOUNDS(a, b, c) ((a) < (b) || (a) > (c)) 1945 1946 /* Parameter access functions */ 1947 void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg, int val) 1948 { 1949 int valid = 1; 1950 1951 switch (val) { 1952 case DWC2_CAP_PARAM_HNP_SRP_CAPABLE: 1953 if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) 1954 valid = 0; 1955 break; 1956 case DWC2_CAP_PARAM_SRP_ONLY_CAPABLE: 1957 switch (hsotg->hw_params.op_mode) { 1958 case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE: 1959 case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE: 1960 case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE: 1961 case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST: 1962 break; 1963 default: 1964 valid = 0; 1965 break; 1966 } 1967 break; 1968 case DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE: 1969 /* always valid */ 1970 break; 1971 default: 1972 valid = 0; 1973 break; 1974 } 1975 1976 if (!valid) { 1977 if (val >= 0) 1978 dev_err(hsotg->dev, 1979 "%d invalid for otg_cap parameter. Check HW configuration.\n", 1980 val); 1981 switch (hsotg->hw_params.op_mode) { 1982 case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE: 1983 val = DWC2_CAP_PARAM_HNP_SRP_CAPABLE; 1984 break; 1985 case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE: 1986 case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE: 1987 case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST: 1988 val = DWC2_CAP_PARAM_SRP_ONLY_CAPABLE; 1989 break; 1990 default: 1991 val = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; 1992 break; 1993 } 1994 dev_dbg(hsotg->dev, "Setting otg_cap to %d\n", val); 1995 } 1996 1997 hsotg->core_params->otg_cap = val; 1998 } 1999 2000 void dwc2_set_param_dma_enable(struct dwc2_hsotg *hsotg, int val) 2001 { 2002 int valid = 1; 2003 2004 if (val > 0 && hsotg->hw_params.arch == GHWCFG2_SLAVE_ONLY_ARCH) 2005 valid = 0; 2006 if (val < 0) 2007 valid = 0; 2008 2009 if (!valid) { 2010 if (val >= 0) 2011 dev_err(hsotg->dev, 2012 "%d invalid for dma_enable parameter. Check HW configuration.\n", 2013 val); 2014 val = hsotg->hw_params.arch != GHWCFG2_SLAVE_ONLY_ARCH; 2015 dev_dbg(hsotg->dev, "Setting dma_enable to %d\n", val); 2016 } 2017 2018 hsotg->core_params->dma_enable = val; 2019 } 2020 2021 void dwc2_set_param_dma_desc_enable(struct dwc2_hsotg *hsotg, int val) 2022 { 2023 int valid = 1; 2024 2025 if (val > 0 && (hsotg->core_params->dma_enable <= 0 || 2026 !hsotg->hw_params.dma_desc_enable)) 2027 valid = 0; 2028 if (val < 0) 2029 valid = 0; 2030 2031 if (!valid) { 2032 if (val >= 0) 2033 dev_err(hsotg->dev, 2034 "%d invalid for dma_desc_enable parameter. Check HW configuration.\n", 2035 val); 2036 val = (hsotg->core_params->dma_enable > 0 && 2037 hsotg->hw_params.dma_desc_enable); 2038 dev_dbg(hsotg->dev, "Setting dma_desc_enable to %d\n", val); 2039 } 2040 2041 hsotg->core_params->dma_desc_enable = val; 2042 } 2043 2044 void dwc2_set_param_host_support_fs_ls_low_power(struct dwc2_hsotg *hsotg, 2045 int val) 2046 { 2047 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2048 if (val >= 0) { 2049 dev_err(hsotg->dev, 2050 "Wrong value for host_support_fs_low_power\n"); 2051 dev_err(hsotg->dev, 2052 "host_support_fs_low_power must be 0 or 1\n"); 2053 } 2054 val = 0; 2055 dev_dbg(hsotg->dev, 2056 "Setting host_support_fs_low_power to %d\n", val); 2057 } 2058 2059 hsotg->core_params->host_support_fs_ls_low_power = val; 2060 } 2061 2062 void dwc2_set_param_enable_dynamic_fifo(struct dwc2_hsotg *hsotg, int val) 2063 { 2064 int valid = 1; 2065 2066 if (val > 0 && !hsotg->hw_params.enable_dynamic_fifo) 2067 valid = 0; 2068 if (val < 0) 2069 valid = 0; 2070 2071 if (!valid) { 2072 if (val >= 0) 2073 dev_err(hsotg->dev, 2074 "%d invalid for enable_dynamic_fifo parameter. Check HW configuration.\n", 2075 val); 2076 val = hsotg->hw_params.enable_dynamic_fifo; 2077 dev_dbg(hsotg->dev, "Setting enable_dynamic_fifo to %d\n", val); 2078 } 2079 2080 hsotg->core_params->enable_dynamic_fifo = val; 2081 } 2082 2083 void dwc2_set_param_host_rx_fifo_size(struct dwc2_hsotg *hsotg, int val) 2084 { 2085 int valid = 1; 2086 2087 if (val < 16 || val > hsotg->hw_params.host_rx_fifo_size) 2088 valid = 0; 2089 2090 if (!valid) { 2091 if (val >= 0) 2092 dev_err(hsotg->dev, 2093 "%d invalid for host_rx_fifo_size. Check HW configuration.\n", 2094 val); 2095 val = hsotg->hw_params.host_rx_fifo_size; 2096 dev_dbg(hsotg->dev, "Setting host_rx_fifo_size to %d\n", val); 2097 } 2098 2099 hsotg->core_params->host_rx_fifo_size = val; 2100 } 2101 2102 void dwc2_set_param_host_nperio_tx_fifo_size(struct dwc2_hsotg *hsotg, int val) 2103 { 2104 int valid = 1; 2105 2106 if (val < 16 || val > hsotg->hw_params.host_nperio_tx_fifo_size) 2107 valid = 0; 2108 2109 if (!valid) { 2110 if (val >= 0) 2111 dev_err(hsotg->dev, 2112 "%d invalid for host_nperio_tx_fifo_size. Check HW configuration.\n", 2113 val); 2114 val = hsotg->hw_params.host_nperio_tx_fifo_size; 2115 dev_dbg(hsotg->dev, "Setting host_nperio_tx_fifo_size to %d\n", 2116 val); 2117 } 2118 2119 hsotg->core_params->host_nperio_tx_fifo_size = val; 2120 } 2121 2122 void dwc2_set_param_host_perio_tx_fifo_size(struct dwc2_hsotg *hsotg, int val) 2123 { 2124 int valid = 1; 2125 2126 if (val < 16 || val > hsotg->hw_params.host_perio_tx_fifo_size) 2127 valid = 0; 2128 2129 if (!valid) { 2130 if (val >= 0) 2131 dev_err(hsotg->dev, 2132 "%d invalid for host_perio_tx_fifo_size. Check HW configuration.\n", 2133 val); 2134 val = hsotg->hw_params.host_perio_tx_fifo_size; 2135 dev_dbg(hsotg->dev, "Setting host_perio_tx_fifo_size to %d\n", 2136 val); 2137 } 2138 2139 hsotg->core_params->host_perio_tx_fifo_size = val; 2140 } 2141 2142 void dwc2_set_param_max_transfer_size(struct dwc2_hsotg *hsotg, int val) 2143 { 2144 int valid = 1; 2145 2146 if (val < 2047 || val > hsotg->hw_params.max_transfer_size) 2147 valid = 0; 2148 2149 if (!valid) { 2150 if (val >= 0) 2151 dev_err(hsotg->dev, 2152 "%d invalid for max_transfer_size. Check HW configuration.\n", 2153 val); 2154 val = hsotg->hw_params.max_transfer_size; 2155 dev_dbg(hsotg->dev, "Setting max_transfer_size to %d\n", val); 2156 } 2157 2158 hsotg->core_params->max_transfer_size = val; 2159 } 2160 2161 void dwc2_set_param_max_packet_count(struct dwc2_hsotg *hsotg, int val) 2162 { 2163 int valid = 1; 2164 2165 if (val < 15 || val > hsotg->hw_params.max_packet_count) 2166 valid = 0; 2167 2168 if (!valid) { 2169 if (val >= 0) 2170 dev_err(hsotg->dev, 2171 "%d invalid for max_packet_count. Check HW configuration.\n", 2172 val); 2173 val = hsotg->hw_params.max_packet_count; 2174 dev_dbg(hsotg->dev, "Setting max_packet_count to %d\n", val); 2175 } 2176 2177 hsotg->core_params->max_packet_count = val; 2178 } 2179 2180 void dwc2_set_param_host_channels(struct dwc2_hsotg *hsotg, int val) 2181 { 2182 int valid = 1; 2183 2184 if (val < 1 || val > hsotg->hw_params.host_channels) 2185 valid = 0; 2186 2187 if (!valid) { 2188 if (val >= 0) 2189 dev_err(hsotg->dev, 2190 "%d invalid for host_channels. Check HW configuration.\n", 2191 val); 2192 val = hsotg->hw_params.host_channels; 2193 dev_dbg(hsotg->dev, "Setting host_channels to %d\n", val); 2194 } 2195 2196 hsotg->core_params->host_channels = val; 2197 } 2198 2199 void dwc2_set_param_phy_type(struct dwc2_hsotg *hsotg, int val) 2200 { 2201 int valid = 0; 2202 u32 hs_phy_type, fs_phy_type; 2203 2204 if (DWC2_OUT_OF_BOUNDS(val, DWC2_PHY_TYPE_PARAM_FS, 2205 DWC2_PHY_TYPE_PARAM_ULPI)) { 2206 if (val >= 0) { 2207 dev_err(hsotg->dev, "Wrong value for phy_type\n"); 2208 dev_err(hsotg->dev, "phy_type must be 0, 1 or 2\n"); 2209 } 2210 2211 valid = 0; 2212 } 2213 2214 hs_phy_type = hsotg->hw_params.hs_phy_type; 2215 fs_phy_type = hsotg->hw_params.fs_phy_type; 2216 if (val == DWC2_PHY_TYPE_PARAM_UTMI && 2217 (hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI || 2218 hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI)) 2219 valid = 1; 2220 else if (val == DWC2_PHY_TYPE_PARAM_ULPI && 2221 (hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI || 2222 hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI)) 2223 valid = 1; 2224 else if (val == DWC2_PHY_TYPE_PARAM_FS && 2225 fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) 2226 valid = 1; 2227 2228 if (!valid) { 2229 if (val >= 0) 2230 dev_err(hsotg->dev, 2231 "%d invalid for phy_type. Check HW configuration.\n", 2232 val); 2233 val = DWC2_PHY_TYPE_PARAM_FS; 2234 if (hs_phy_type != GHWCFG2_HS_PHY_TYPE_NOT_SUPPORTED) { 2235 if (hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI || 2236 hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI) 2237 val = DWC2_PHY_TYPE_PARAM_UTMI; 2238 else 2239 val = DWC2_PHY_TYPE_PARAM_ULPI; 2240 } 2241 dev_dbg(hsotg->dev, "Setting phy_type to %d\n", val); 2242 } 2243 2244 hsotg->core_params->phy_type = val; 2245 } 2246 2247 static int dwc2_get_param_phy_type(struct dwc2_hsotg *hsotg) 2248 { 2249 return hsotg->core_params->phy_type; 2250 } 2251 2252 void dwc2_set_param_speed(struct dwc2_hsotg *hsotg, int val) 2253 { 2254 int valid = 1; 2255 2256 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2257 if (val >= 0) { 2258 dev_err(hsotg->dev, "Wrong value for speed parameter\n"); 2259 dev_err(hsotg->dev, "max_speed parameter must be 0 or 1\n"); 2260 } 2261 valid = 0; 2262 } 2263 2264 if (val == DWC2_SPEED_PARAM_HIGH && 2265 dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS) 2266 valid = 0; 2267 2268 if (!valid) { 2269 if (val >= 0) 2270 dev_err(hsotg->dev, 2271 "%d invalid for speed parameter. Check HW configuration.\n", 2272 val); 2273 val = dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS ? 2274 DWC2_SPEED_PARAM_FULL : DWC2_SPEED_PARAM_HIGH; 2275 dev_dbg(hsotg->dev, "Setting speed to %d\n", val); 2276 } 2277 2278 hsotg->core_params->speed = val; 2279 } 2280 2281 void dwc2_set_param_host_ls_low_power_phy_clk(struct dwc2_hsotg *hsotg, int val) 2282 { 2283 int valid = 1; 2284 2285 if (DWC2_OUT_OF_BOUNDS(val, DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ, 2286 DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ)) { 2287 if (val >= 0) { 2288 dev_err(hsotg->dev, 2289 "Wrong value for host_ls_low_power_phy_clk parameter\n"); 2290 dev_err(hsotg->dev, 2291 "host_ls_low_power_phy_clk must be 0 or 1\n"); 2292 } 2293 valid = 0; 2294 } 2295 2296 if (val == DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ && 2297 dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS) 2298 valid = 0; 2299 2300 if (!valid) { 2301 if (val >= 0) 2302 dev_err(hsotg->dev, 2303 "%d invalid for host_ls_low_power_phy_clk. Check HW configuration.\n", 2304 val); 2305 val = dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS 2306 ? DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ 2307 : DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ; 2308 dev_dbg(hsotg->dev, "Setting host_ls_low_power_phy_clk to %d\n", 2309 val); 2310 } 2311 2312 hsotg->core_params->host_ls_low_power_phy_clk = val; 2313 } 2314 2315 void dwc2_set_param_phy_ulpi_ddr(struct dwc2_hsotg *hsotg, int val) 2316 { 2317 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2318 if (val >= 0) { 2319 dev_err(hsotg->dev, "Wrong value for phy_ulpi_ddr\n"); 2320 dev_err(hsotg->dev, "phy_upli_ddr must be 0 or 1\n"); 2321 } 2322 val = 0; 2323 dev_dbg(hsotg->dev, "Setting phy_upli_ddr to %d\n", val); 2324 } 2325 2326 hsotg->core_params->phy_ulpi_ddr = val; 2327 } 2328 2329 void dwc2_set_param_phy_ulpi_ext_vbus(struct dwc2_hsotg *hsotg, int val) 2330 { 2331 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2332 if (val >= 0) { 2333 dev_err(hsotg->dev, 2334 "Wrong value for phy_ulpi_ext_vbus\n"); 2335 dev_err(hsotg->dev, 2336 "phy_ulpi_ext_vbus must be 0 or 1\n"); 2337 } 2338 val = 0; 2339 dev_dbg(hsotg->dev, "Setting phy_ulpi_ext_vbus to %d\n", val); 2340 } 2341 2342 hsotg->core_params->phy_ulpi_ext_vbus = val; 2343 } 2344 2345 void dwc2_set_param_phy_utmi_width(struct dwc2_hsotg *hsotg, int val) 2346 { 2347 int valid = 0; 2348 2349 switch (hsotg->hw_params.utmi_phy_data_width) { 2350 case GHWCFG4_UTMI_PHY_DATA_WIDTH_8: 2351 valid = (val == 8); 2352 break; 2353 case GHWCFG4_UTMI_PHY_DATA_WIDTH_16: 2354 valid = (val == 16); 2355 break; 2356 case GHWCFG4_UTMI_PHY_DATA_WIDTH_8_OR_16: 2357 valid = (val == 8 || val == 16); 2358 break; 2359 } 2360 2361 if (!valid) { 2362 if (val >= 0) { 2363 dev_err(hsotg->dev, 2364 "%d invalid for phy_utmi_width. Check HW configuration.\n", 2365 val); 2366 } 2367 val = (hsotg->hw_params.utmi_phy_data_width == 2368 GHWCFG4_UTMI_PHY_DATA_WIDTH_8) ? 8 : 16; 2369 dev_dbg(hsotg->dev, "Setting phy_utmi_width to %d\n", val); 2370 } 2371 2372 hsotg->core_params->phy_utmi_width = val; 2373 } 2374 2375 void dwc2_set_param_ulpi_fs_ls(struct dwc2_hsotg *hsotg, int val) 2376 { 2377 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2378 if (val >= 0) { 2379 dev_err(hsotg->dev, "Wrong value for ulpi_fs_ls\n"); 2380 dev_err(hsotg->dev, "ulpi_fs_ls must be 0 or 1\n"); 2381 } 2382 val = 0; 2383 dev_dbg(hsotg->dev, "Setting ulpi_fs_ls to %d\n", val); 2384 } 2385 2386 hsotg->core_params->ulpi_fs_ls = val; 2387 } 2388 2389 void dwc2_set_param_ts_dline(struct dwc2_hsotg *hsotg, int val) 2390 { 2391 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2392 if (val >= 0) { 2393 dev_err(hsotg->dev, "Wrong value for ts_dline\n"); 2394 dev_err(hsotg->dev, "ts_dline must be 0 or 1\n"); 2395 } 2396 val = 0; 2397 dev_dbg(hsotg->dev, "Setting ts_dline to %d\n", val); 2398 } 2399 2400 hsotg->core_params->ts_dline = val; 2401 } 2402 2403 void dwc2_set_param_i2c_enable(struct dwc2_hsotg *hsotg, int val) 2404 { 2405 int valid = 1; 2406 2407 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2408 if (val >= 0) { 2409 dev_err(hsotg->dev, "Wrong value for i2c_enable\n"); 2410 dev_err(hsotg->dev, "i2c_enable must be 0 or 1\n"); 2411 } 2412 2413 valid = 0; 2414 } 2415 2416 if (val == 1 && !(hsotg->hw_params.i2c_enable)) 2417 valid = 0; 2418 2419 if (!valid) { 2420 if (val >= 0) 2421 dev_err(hsotg->dev, 2422 "%d invalid for i2c_enable. Check HW configuration.\n", 2423 val); 2424 val = hsotg->hw_params.i2c_enable; 2425 dev_dbg(hsotg->dev, "Setting i2c_enable to %d\n", val); 2426 } 2427 2428 hsotg->core_params->i2c_enable = val; 2429 } 2430 2431 void dwc2_set_param_en_multiple_tx_fifo(struct dwc2_hsotg *hsotg, int val) 2432 { 2433 int valid = 1; 2434 2435 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2436 if (val >= 0) { 2437 dev_err(hsotg->dev, 2438 "Wrong value for en_multiple_tx_fifo,\n"); 2439 dev_err(hsotg->dev, 2440 "en_multiple_tx_fifo must be 0 or 1\n"); 2441 } 2442 valid = 0; 2443 } 2444 2445 if (val == 1 && !hsotg->hw_params.en_multiple_tx_fifo) 2446 valid = 0; 2447 2448 if (!valid) { 2449 if (val >= 0) 2450 dev_err(hsotg->dev, 2451 "%d invalid for parameter en_multiple_tx_fifo. Check HW configuration.\n", 2452 val); 2453 val = hsotg->hw_params.en_multiple_tx_fifo; 2454 dev_dbg(hsotg->dev, "Setting en_multiple_tx_fifo to %d\n", val); 2455 } 2456 2457 hsotg->core_params->en_multiple_tx_fifo = val; 2458 } 2459 2460 void dwc2_set_param_reload_ctl(struct dwc2_hsotg *hsotg, int val) 2461 { 2462 int valid = 1; 2463 2464 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2465 if (val >= 0) { 2466 dev_err(hsotg->dev, 2467 "'%d' invalid for parameter reload_ctl\n", val); 2468 dev_err(hsotg->dev, "reload_ctl must be 0 or 1\n"); 2469 } 2470 valid = 0; 2471 } 2472 2473 if (val == 1 && hsotg->hw_params.snpsid < DWC2_CORE_REV_2_92a) 2474 valid = 0; 2475 2476 if (!valid) { 2477 if (val >= 0) 2478 dev_err(hsotg->dev, 2479 "%d invalid for parameter reload_ctl. Check HW configuration.\n", 2480 val); 2481 val = hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_92a; 2482 dev_dbg(hsotg->dev, "Setting reload_ctl to %d\n", val); 2483 } 2484 2485 hsotg->core_params->reload_ctl = val; 2486 } 2487 2488 void dwc2_set_param_ahbcfg(struct dwc2_hsotg *hsotg, int val) 2489 { 2490 if (val != -1) 2491 hsotg->core_params->ahbcfg = val; 2492 else 2493 hsotg->core_params->ahbcfg = GAHBCFG_HBSTLEN_INCR4 << 2494 GAHBCFG_HBSTLEN_SHIFT; 2495 } 2496 2497 void dwc2_set_param_otg_ver(struct dwc2_hsotg *hsotg, int val) 2498 { 2499 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2500 if (val >= 0) { 2501 dev_err(hsotg->dev, 2502 "'%d' invalid for parameter otg_ver\n", val); 2503 dev_err(hsotg->dev, 2504 "otg_ver must be 0 (for OTG 1.3 support) or 1 (for OTG 2.0 support)\n"); 2505 } 2506 val = 0; 2507 dev_dbg(hsotg->dev, "Setting otg_ver to %d\n", val); 2508 } 2509 2510 hsotg->core_params->otg_ver = val; 2511 } 2512 2513 static void dwc2_set_param_uframe_sched(struct dwc2_hsotg *hsotg, int val) 2514 { 2515 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2516 if (val >= 0) { 2517 dev_err(hsotg->dev, 2518 "'%d' invalid for parameter uframe_sched\n", 2519 val); 2520 dev_err(hsotg->dev, "uframe_sched must be 0 or 1\n"); 2521 } 2522 val = 1; 2523 dev_dbg(hsotg->dev, "Setting uframe_sched to %d\n", val); 2524 } 2525 2526 hsotg->core_params->uframe_sched = val; 2527 } 2528 2529 /* 2530 * This function is called during module intialization to pass module parameters 2531 * for the DWC_otg core. 2532 */ 2533 void dwc2_set_parameters(struct dwc2_hsotg *hsotg, 2534 const struct dwc2_core_params *params) 2535 { 2536 dev_dbg(hsotg->dev, "%s()\n", __func__); 2537 2538 dwc2_set_param_otg_cap(hsotg, params->otg_cap); 2539 dwc2_set_param_dma_enable(hsotg, params->dma_enable); 2540 dwc2_set_param_dma_desc_enable(hsotg, params->dma_desc_enable); 2541 dwc2_set_param_host_support_fs_ls_low_power(hsotg, 2542 params->host_support_fs_ls_low_power); 2543 dwc2_set_param_enable_dynamic_fifo(hsotg, 2544 params->enable_dynamic_fifo); 2545 dwc2_set_param_host_rx_fifo_size(hsotg, 2546 params->host_rx_fifo_size); 2547 dwc2_set_param_host_nperio_tx_fifo_size(hsotg, 2548 params->host_nperio_tx_fifo_size); 2549 dwc2_set_param_host_perio_tx_fifo_size(hsotg, 2550 params->host_perio_tx_fifo_size); 2551 dwc2_set_param_max_transfer_size(hsotg, 2552 params->max_transfer_size); 2553 dwc2_set_param_max_packet_count(hsotg, 2554 params->max_packet_count); 2555 dwc2_set_param_host_channels(hsotg, params->host_channels); 2556 dwc2_set_param_phy_type(hsotg, params->phy_type); 2557 dwc2_set_param_speed(hsotg, params->speed); 2558 dwc2_set_param_host_ls_low_power_phy_clk(hsotg, 2559 params->host_ls_low_power_phy_clk); 2560 dwc2_set_param_phy_ulpi_ddr(hsotg, params->phy_ulpi_ddr); 2561 dwc2_set_param_phy_ulpi_ext_vbus(hsotg, 2562 params->phy_ulpi_ext_vbus); 2563 dwc2_set_param_phy_utmi_width(hsotg, params->phy_utmi_width); 2564 dwc2_set_param_ulpi_fs_ls(hsotg, params->ulpi_fs_ls); 2565 dwc2_set_param_ts_dline(hsotg, params->ts_dline); 2566 dwc2_set_param_i2c_enable(hsotg, params->i2c_enable); 2567 dwc2_set_param_en_multiple_tx_fifo(hsotg, 2568 params->en_multiple_tx_fifo); 2569 dwc2_set_param_reload_ctl(hsotg, params->reload_ctl); 2570 dwc2_set_param_ahbcfg(hsotg, params->ahbcfg); 2571 dwc2_set_param_otg_ver(hsotg, params->otg_ver); 2572 dwc2_set_param_uframe_sched(hsotg, params->uframe_sched); 2573 } 2574 2575 /** 2576 * During device initialization, read various hardware configuration 2577 * registers and interpret the contents. 2578 */ 2579 int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) 2580 { 2581 struct dwc2_hw_params *hw = &hsotg->hw_params; 2582 unsigned width; 2583 u32 hwcfg1, hwcfg2, hwcfg3, hwcfg4; 2584 u32 hptxfsiz, grxfsiz, gnptxfsiz; 2585 u32 gusbcfg; 2586 2587 /* 2588 * Attempt to ensure this device is really a DWC_otg Controller. 2589 * Read and verify the GSNPSID register contents. The value should be 2590 * 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3", 2591 * as in "OTG version 2.xx" or "OTG version 3.xx". 2592 */ 2593 hw->snpsid = readl(hsotg->regs + GSNPSID); 2594 if ((hw->snpsid & 0xfffff000) != 0x4f542000 && 2595 (hw->snpsid & 0xfffff000) != 0x4f543000) { 2596 dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n", 2597 hw->snpsid); 2598 return -ENODEV; 2599 } 2600 2601 dev_dbg(hsotg->dev, "Core Release: %1x.%1x%1x%1x (snpsid=%x)\n", 2602 hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf, 2603 hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid); 2604 2605 hwcfg1 = readl(hsotg->regs + GHWCFG1); 2606 hwcfg2 = readl(hsotg->regs + GHWCFG2); 2607 hwcfg3 = readl(hsotg->regs + GHWCFG3); 2608 hwcfg4 = readl(hsotg->regs + GHWCFG4); 2609 gnptxfsiz = readl(hsotg->regs + GNPTXFSIZ); 2610 grxfsiz = readl(hsotg->regs + GRXFSIZ); 2611 2612 dev_dbg(hsotg->dev, "hwcfg1=%08x\n", hwcfg1); 2613 dev_dbg(hsotg->dev, "hwcfg2=%08x\n", hwcfg2); 2614 dev_dbg(hsotg->dev, "hwcfg3=%08x\n", hwcfg3); 2615 dev_dbg(hsotg->dev, "hwcfg4=%08x\n", hwcfg4); 2616 dev_dbg(hsotg->dev, "gnptxfsiz=%08x\n", gnptxfsiz); 2617 dev_dbg(hsotg->dev, "grxfsiz=%08x\n", grxfsiz); 2618 2619 /* Force host mode to get HPTXFSIZ exact power on value */ 2620 gusbcfg = readl(hsotg->regs + GUSBCFG); 2621 gusbcfg |= GUSBCFG_FORCEHOSTMODE; 2622 writel(gusbcfg, hsotg->regs + GUSBCFG); 2623 usleep_range(100000, 150000); 2624 2625 hptxfsiz = readl(hsotg->regs + HPTXFSIZ); 2626 dev_dbg(hsotg->dev, "hptxfsiz=%08x\n", hptxfsiz); 2627 gusbcfg = readl(hsotg->regs + GUSBCFG); 2628 gusbcfg &= ~GUSBCFG_FORCEHOSTMODE; 2629 writel(gusbcfg, hsotg->regs + GUSBCFG); 2630 usleep_range(100000, 150000); 2631 2632 /* hwcfg2 */ 2633 hw->op_mode = (hwcfg2 & GHWCFG2_OP_MODE_MASK) >> 2634 GHWCFG2_OP_MODE_SHIFT; 2635 hw->arch = (hwcfg2 & GHWCFG2_ARCHITECTURE_MASK) >> 2636 GHWCFG2_ARCHITECTURE_SHIFT; 2637 hw->enable_dynamic_fifo = !!(hwcfg2 & GHWCFG2_DYNAMIC_FIFO); 2638 hw->host_channels = 1 + ((hwcfg2 & GHWCFG2_NUM_HOST_CHAN_MASK) >> 2639 GHWCFG2_NUM_HOST_CHAN_SHIFT); 2640 hw->hs_phy_type = (hwcfg2 & GHWCFG2_HS_PHY_TYPE_MASK) >> 2641 GHWCFG2_HS_PHY_TYPE_SHIFT; 2642 hw->fs_phy_type = (hwcfg2 & GHWCFG2_FS_PHY_TYPE_MASK) >> 2643 GHWCFG2_FS_PHY_TYPE_SHIFT; 2644 hw->num_dev_ep = (hwcfg2 & GHWCFG2_NUM_DEV_EP_MASK) >> 2645 GHWCFG2_NUM_DEV_EP_SHIFT; 2646 hw->nperio_tx_q_depth = 2647 (hwcfg2 & GHWCFG2_NONPERIO_TX_Q_DEPTH_MASK) >> 2648 GHWCFG2_NONPERIO_TX_Q_DEPTH_SHIFT << 1; 2649 hw->host_perio_tx_q_depth = 2650 (hwcfg2 & GHWCFG2_HOST_PERIO_TX_Q_DEPTH_MASK) >> 2651 GHWCFG2_HOST_PERIO_TX_Q_DEPTH_SHIFT << 1; 2652 hw->dev_token_q_depth = 2653 (hwcfg2 & GHWCFG2_DEV_TOKEN_Q_DEPTH_MASK) >> 2654 GHWCFG2_DEV_TOKEN_Q_DEPTH_SHIFT; 2655 2656 /* hwcfg3 */ 2657 width = (hwcfg3 & GHWCFG3_XFER_SIZE_CNTR_WIDTH_MASK) >> 2658 GHWCFG3_XFER_SIZE_CNTR_WIDTH_SHIFT; 2659 hw->max_transfer_size = (1 << (width + 11)) - 1; 2660 width = (hwcfg3 & GHWCFG3_PACKET_SIZE_CNTR_WIDTH_MASK) >> 2661 GHWCFG3_PACKET_SIZE_CNTR_WIDTH_SHIFT; 2662 hw->max_packet_count = (1 << (width + 4)) - 1; 2663 hw->i2c_enable = !!(hwcfg3 & GHWCFG3_I2C); 2664 hw->total_fifo_size = (hwcfg3 & GHWCFG3_DFIFO_DEPTH_MASK) >> 2665 GHWCFG3_DFIFO_DEPTH_SHIFT; 2666 2667 /* hwcfg4 */ 2668 hw->en_multiple_tx_fifo = !!(hwcfg4 & GHWCFG4_DED_FIFO_EN); 2669 hw->num_dev_perio_in_ep = (hwcfg4 & GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK) >> 2670 GHWCFG4_NUM_DEV_PERIO_IN_EP_SHIFT; 2671 hw->dma_desc_enable = !!(hwcfg4 & GHWCFG4_DESC_DMA); 2672 hw->power_optimized = !!(hwcfg4 & GHWCFG4_POWER_OPTIMIZ); 2673 hw->utmi_phy_data_width = (hwcfg4 & GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK) >> 2674 GHWCFG4_UTMI_PHY_DATA_WIDTH_SHIFT; 2675 2676 /* fifo sizes */ 2677 hw->host_rx_fifo_size = (grxfsiz & GRXFSIZ_DEPTH_MASK) >> 2678 GRXFSIZ_DEPTH_SHIFT; 2679 hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >> 2680 FIFOSIZE_DEPTH_SHIFT; 2681 hw->host_perio_tx_fifo_size = (hptxfsiz & FIFOSIZE_DEPTH_MASK) >> 2682 FIFOSIZE_DEPTH_SHIFT; 2683 2684 dev_dbg(hsotg->dev, "Detected values from hardware:\n"); 2685 dev_dbg(hsotg->dev, " op_mode=%d\n", 2686 hw->op_mode); 2687 dev_dbg(hsotg->dev, " arch=%d\n", 2688 hw->arch); 2689 dev_dbg(hsotg->dev, " dma_desc_enable=%d\n", 2690 hw->dma_desc_enable); 2691 dev_dbg(hsotg->dev, " power_optimized=%d\n", 2692 hw->power_optimized); 2693 dev_dbg(hsotg->dev, " i2c_enable=%d\n", 2694 hw->i2c_enable); 2695 dev_dbg(hsotg->dev, " hs_phy_type=%d\n", 2696 hw->hs_phy_type); 2697 dev_dbg(hsotg->dev, " fs_phy_type=%d\n", 2698 hw->fs_phy_type); 2699 dev_dbg(hsotg->dev, " utmi_phy_data_wdith=%d\n", 2700 hw->utmi_phy_data_width); 2701 dev_dbg(hsotg->dev, " num_dev_ep=%d\n", 2702 hw->num_dev_ep); 2703 dev_dbg(hsotg->dev, " num_dev_perio_in_ep=%d\n", 2704 hw->num_dev_perio_in_ep); 2705 dev_dbg(hsotg->dev, " host_channels=%d\n", 2706 hw->host_channels); 2707 dev_dbg(hsotg->dev, " max_transfer_size=%d\n", 2708 hw->max_transfer_size); 2709 dev_dbg(hsotg->dev, " max_packet_count=%d\n", 2710 hw->max_packet_count); 2711 dev_dbg(hsotg->dev, " nperio_tx_q_depth=0x%0x\n", 2712 hw->nperio_tx_q_depth); 2713 dev_dbg(hsotg->dev, " host_perio_tx_q_depth=0x%0x\n", 2714 hw->host_perio_tx_q_depth); 2715 dev_dbg(hsotg->dev, " dev_token_q_depth=0x%0x\n", 2716 hw->dev_token_q_depth); 2717 dev_dbg(hsotg->dev, " enable_dynamic_fifo=%d\n", 2718 hw->enable_dynamic_fifo); 2719 dev_dbg(hsotg->dev, " en_multiple_tx_fifo=%d\n", 2720 hw->en_multiple_tx_fifo); 2721 dev_dbg(hsotg->dev, " total_fifo_size=%d\n", 2722 hw->total_fifo_size); 2723 dev_dbg(hsotg->dev, " host_rx_fifo_size=%d\n", 2724 hw->host_rx_fifo_size); 2725 dev_dbg(hsotg->dev, " host_nperio_tx_fifo_size=%d\n", 2726 hw->host_nperio_tx_fifo_size); 2727 dev_dbg(hsotg->dev, " host_perio_tx_fifo_size=%d\n", 2728 hw->host_perio_tx_fifo_size); 2729 dev_dbg(hsotg->dev, "\n"); 2730 2731 return 0; 2732 } 2733 2734 u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg) 2735 { 2736 return hsotg->core_params->otg_ver == 1 ? 0x0200 : 0x0103; 2737 } 2738 2739 bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg) 2740 { 2741 if (readl(hsotg->regs + GSNPSID) == 0xffffffff) 2742 return false; 2743 else 2744 return true; 2745 } 2746 2747 /** 2748 * dwc2_enable_global_interrupts() - Enables the controller's Global 2749 * Interrupt in the AHB Config register 2750 * 2751 * @hsotg: Programming view of DWC_otg controller 2752 */ 2753 void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg) 2754 { 2755 u32 ahbcfg = readl(hsotg->regs + GAHBCFG); 2756 2757 ahbcfg |= GAHBCFG_GLBL_INTR_EN; 2758 writel(ahbcfg, hsotg->regs + GAHBCFG); 2759 } 2760 2761 /** 2762 * dwc2_disable_global_interrupts() - Disables the controller's Global 2763 * Interrupt in the AHB Config register 2764 * 2765 * @hsotg: Programming view of DWC_otg controller 2766 */ 2767 void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg) 2768 { 2769 u32 ahbcfg = readl(hsotg->regs + GAHBCFG); 2770 2771 ahbcfg &= ~GAHBCFG_GLBL_INTR_EN; 2772 writel(ahbcfg, hsotg->regs + GAHBCFG); 2773 } 2774 2775 MODULE_DESCRIPTION("DESIGNWARE HS OTG Core"); 2776 MODULE_AUTHOR("Synopsys, Inc."); 2777 MODULE_LICENSE("Dual BSD/GPL"); 2778