1/* $NetBSD: dwc2_core.c,v 1.13 2016/02/24 22:17:54 skrll Exp $ */ 2 3/* 4 * core.c - DesignWare HS OTG Controller common routines 5 * 6 * Copyright (C) 2004-2013 Synopsys, Inc. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions, and the following disclaimer, 13 * without modification. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. The names of the above-listed copyright holders may not be used 18 * to endorse or promote products derived from this software without 19 * specific prior written permission. 20 * 21 * ALTERNATIVELY, this software may be distributed under the terms of the 22 * GNU General Public License ("GPL") as published by the Free Software 23 * Foundation; either version 2 of the License, or (at your option) any 24 * later version. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 27 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 28 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 30 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 31 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 32 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 33 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 34 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 35 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 36 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39/* 40 * The Core code provides basic services for accessing and managing the 41 * DWC_otg hardware. These services are used by both the Host Controller 42 * Driver and the Peripheral Controller Driver. 43 */ 44 45#include <sys/cdefs.h> 46__KERNEL_RCSID(0, "$NetBSD: dwc2_core.c,v 1.13 2016/02/24 22:17:54 skrll Exp $"); 47 48#include <sys/types.h> 49#include <sys/bus.h> 50#include <sys/proc.h> 51#include <sys/callout.h> 52#include <sys/mutex.h> 53#include <sys/pool.h> 54 55#include <dev/usb/usb.h> 56#include <dev/usb/usbdi.h> 57#include <dev/usb/usbdivar.h> 58#include <dev/usb/usb_mem.h> 59 60#include <linux/kernel.h> 61#include <linux/list.h> 62 63#include <dwc2/dwc2.h> 64#include <dwc2/dwc2var.h> 65 66#include "dwc2_core.h" 67#include "dwc2_hcd.h" 68 69#if IS_ENABLED(CONFIG_USB_DWC2_HOST) || IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) 70/** 71 * dwc2_backup_host_registers() - Backup controller host registers. 72 * When suspending usb bus, registers needs to be backuped 73 * if controller power is disabled once suspended. 74 * 75 * @hsotg: Programming view of the DWC_otg controller 76 */ 77static int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg) 78{ 79 struct dwc2_hregs_backup *hr; 80 int i; 81 82 dev_dbg(hsotg->dev, "%s\n", __func__); 83 84 /* Backup Host regs */ 85 hr = &hsotg->hr_backup; 86 hr->hcfg = DWC2_READ_4(hsotg, HCFG); 87 hr->haintmsk = DWC2_READ_4(hsotg, HAINTMSK); 88 for (i = 0; i < hsotg->core_params->host_channels; ++i) 89 hr->hcintmsk[i] = DWC2_READ_4(hsotg, HCINTMSK(i)); 90 91 hr->hprt0 = DWC2_READ_4(hsotg, HPRT0); 92 hr->hfir = DWC2_READ_4(hsotg, HFIR); 93 hr->valid = true; 94 95 return 0; 96} 97 98/** 99 * dwc2_restore_host_registers() - Restore controller host registers. 100 * When resuming usb bus, device registers needs to be restored 101 * if controller power were disabled. 102 * 103 * @hsotg: Programming view of the DWC_otg controller 104 */ 105static int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg) 106{ 107 struct dwc2_hregs_backup *hr; 108 int i; 109 110 dev_dbg(hsotg->dev, "%s\n", __func__); 111 112 /* Restore host regs */ 113 hr = &hsotg->hr_backup; 114 if (!hr->valid) { 115 dev_err(hsotg->dev, "%s: no host registers to restore\n", 116 __func__); 117 return -EINVAL; 118 } 119 hr->valid = false; 120 121 DWC2_WRITE_4(hsotg, HCFG, hr->hcfg); 122 DWC2_WRITE_4(hsotg, HAINTMSK, hr->haintmsk); 123 124 for (i = 0; i < hsotg->core_params->host_channels; ++i) 125 DWC2_WRITE_4(hsotg, HCINTMSK(i), hr->hcintmsk[i]); 126 127 DWC2_WRITE_4(hsotg, HPRT0, hr->hprt0); 128 DWC2_WRITE_4(hsotg, HFIR, hr->hfir); 129 hsotg->frame_number = 0; 130 131 return 0; 132} 133#else 134static inline int dwc2_backup_host_registers(struct dwc2_hsotg *hsotg) 135{ return 0; } 136 137static inline int dwc2_restore_host_registers(struct dwc2_hsotg *hsotg) 138{ return 0; } 139#endif 140 141#if IS_ENABLED(CONFIG_USB_DWC2_PERIPHERAL) || \ 142 IS_ENABLED(CONFIG_USB_DWC2_DUAL_ROLE) 143/** 144 * dwc2_backup_device_registers() - Backup controller device registers. 145 * When suspending usb bus, registers needs to be backuped 146 * if controller power is disabled once suspended. 147 * 148 * @hsotg: Programming view of the DWC_otg controller 149 */ 150static int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) 151{ 152 struct dwc2_dregs_backup *dr; 153 int i; 154 155 dev_dbg(hsotg->dev, "%s\n", __func__); 156 157 /* Backup dev regs */ 158 dr = &hsotg->dr_backup; 159 160 dr->dcfg = DWC2_READ_4(hsotg, DCFG); 161 dr->dctl = DWC2_READ_4(hsotg, DCTL); 162 dr->daintmsk = DWC2_READ_4(hsotg, DAINTMSK); 163 dr->diepmsk = DWC2_READ_4(hsotg, DIEPMSK); 164 dr->doepmsk = DWC2_READ_4(hsotg, DOEPMSK); 165 166 for (i = 0; i < hsotg->num_of_eps; i++) { 167 /* Backup IN EPs */ 168 dr->diepctl[i] = DWC2_READ_4(hsotg, DIEPCTL(i)); 169 170 /* Ensure DATA PID is correctly configured */ 171 if (dr->diepctl[i] & DXEPCTL_DPID) 172 dr->diepctl[i] |= DXEPCTL_SETD1PID; 173 else 174 dr->diepctl[i] |= DXEPCTL_SETD0PID; 175 176 dr->dieptsiz[i] = DWC2_READ_4(hsotg, DIEPTSIZ(i)); 177 dr->diepdma[i] = DWC2_READ_4(hsotg, DIEPDMA(i)); 178 179 /* Backup OUT EPs */ 180 dr->doepctl[i] = DWC2_READ_4(hsotg, DOEPCTL(i)); 181 182 /* Ensure DATA PID is correctly configured */ 183 if (dr->doepctl[i] & DXEPCTL_DPID) 184 dr->doepctl[i] |= DXEPCTL_SETD1PID; 185 else 186 dr->doepctl[i] |= DXEPCTL_SETD0PID; 187 188 dr->doeptsiz[i] = DWC2_READ_4(hsotg, DOEPTSIZ(i)); 189 dr->doepdma[i] = DWC2_READ_4(hsotg, DOEPDMA(i)); 190 } 191 dr->valid = true; 192 return 0; 193} 194 195/** 196 * dwc2_restore_device_registers() - Restore controller device registers. 197 * When resuming usb bus, device registers needs to be restored 198 * if controller power were disabled. 199 * 200 * @hsotg: Programming view of the DWC_otg controller 201 */ 202static int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg) 203{ 204 struct dwc2_dregs_backup *dr; 205 u32 dctl; 206 int i; 207 208 dev_dbg(hsotg->dev, "%s\n", __func__); 209 210 /* Restore dev regs */ 211 dr = &hsotg->dr_backup; 212 if (!dr->valid) { 213 dev_err(hsotg->dev, "%s: no device registers to restore\n", 214 __func__); 215 return -EINVAL; 216 } 217 dr->valid = false; 218 219 DWC2_WRITE_4(hsotg, DCFG, dr->dcfg); 220 DWC2_WRITE_4(hsotg, DCTL, dr->dctl); 221 DWC2_WRITE_4(hsotg, DAINTMSK, dr->daintmsk); 222 DWC2_WRITE_4(hsotg, DIEPMSK, dr->diepmsk); 223 DWC2_WRITE_4(hsotg, DOEPMSK, dr->doepmsk); 224 225 for (i = 0; i < hsotg->num_of_eps; i++) { 226 /* Restore IN EPs */ 227 DWC2_WRITE_4(hsotg, DIEPCTL(i), dr->diepctl[i]); 228 DWC2_WRITE_4(hsotg, DIEPTSIZ(i), dr->dieptsiz[i]); 229 DWC2_WRITE_4(hsotg, DIEPDMA(i), dr->diepdma[i]); 230 231 /* Restore OUT EPs */ 232 DWC2_WRITE_4(hsotg, DOEPCTL(i), dr->doepctl[i]); 233 DWC2_WRITE_4(hsotg, DOEPTSIZ(i), dr->doeptsiz[i]); 234 DWC2_WRITE_4(hsotg, DOEPDMA(i), dr->doepdma[i]); 235 } 236 237 /* Set the Power-On Programming done bit */ 238 dctl = DWC2_READ_4(hsotg, DCTL); 239 dctl |= DCTL_PWRONPRGDONE; 240 DWC2_WRITE_4(hsotg, DCTL, dctl); 241 242 return 0; 243} 244#else 245static inline int dwc2_backup_device_registers(struct dwc2_hsotg *hsotg) 246{ return 0; } 247 248static inline int dwc2_restore_device_registers(struct dwc2_hsotg *hsotg) 249{ return 0; } 250#endif 251 252/** 253 * dwc2_backup_global_registers() - Backup global controller registers. 254 * When suspending usb bus, registers needs to be backuped 255 * if controller power is disabled once suspended. 256 * 257 * @hsotg: Programming view of the DWC_otg controller 258 */ 259static int dwc2_backup_global_registers(struct dwc2_hsotg *hsotg) 260{ 261 struct dwc2_gregs_backup *gr; 262 int i; 263 264 /* Backup global regs */ 265 gr = &hsotg->gr_backup; 266 267 gr->gotgctl = DWC2_READ_4(hsotg, GOTGCTL); 268 gr->gintmsk = DWC2_READ_4(hsotg, GINTMSK); 269 gr->gahbcfg = DWC2_READ_4(hsotg, GAHBCFG); 270 gr->gusbcfg = DWC2_READ_4(hsotg, GUSBCFG); 271 gr->grxfsiz = DWC2_READ_4(hsotg, GRXFSIZ); 272 gr->gnptxfsiz = DWC2_READ_4(hsotg, GNPTXFSIZ); 273 gr->hptxfsiz = DWC2_READ_4(hsotg, HPTXFSIZ); 274 gr->gdfifocfg = DWC2_READ_4(hsotg, GDFIFOCFG); 275 for (i = 0; i < MAX_EPS_CHANNELS; i++) 276 gr->dtxfsiz[i] = DWC2_READ_4(hsotg, DPTXFSIZN(i)); 277 278 gr->valid = true; 279 return 0; 280} 281 282/** 283 * dwc2_restore_global_registers() - Restore controller global registers. 284 * When resuming usb bus, device registers needs to be restored 285 * if controller power were disabled. 286 * 287 * @hsotg: Programming view of the DWC_otg controller 288 */ 289static int dwc2_restore_global_registers(struct dwc2_hsotg *hsotg) 290{ 291 struct dwc2_gregs_backup *gr; 292 int i; 293 294 dev_dbg(hsotg->dev, "%s\n", __func__); 295 296 /* Restore global regs */ 297 gr = &hsotg->gr_backup; 298 if (!gr->valid) { 299 dev_err(hsotg->dev, "%s: no global registers to restore\n", 300 __func__); 301 return -EINVAL; 302 } 303 gr->valid = false; 304 305 DWC2_WRITE_4(hsotg, GINTSTS, 0xffffffff); 306 DWC2_WRITE_4(hsotg, GOTGCTL, gr->gotgctl); 307 DWC2_WRITE_4(hsotg, GINTMSK, gr->gintmsk); 308 DWC2_WRITE_4(hsotg, GUSBCFG, gr->gusbcfg); 309 DWC2_WRITE_4(hsotg, GAHBCFG, gr->gahbcfg); 310 DWC2_WRITE_4(hsotg, GRXFSIZ, gr->grxfsiz); 311 DWC2_WRITE_4(hsotg, GNPTXFSIZ, gr->gnptxfsiz); 312 DWC2_WRITE_4(hsotg, HPTXFSIZ, gr->hptxfsiz); 313 DWC2_WRITE_4(hsotg, GDFIFOCFG, gr->gdfifocfg); 314 for (i = 0; i < MAX_EPS_CHANNELS; i++) 315 DWC2_WRITE_4(hsotg, DPTXFSIZN(i), gr->dtxfsiz[i]); 316 317 return 0; 318} 319 320/** 321 * dwc2_exit_hibernation() - Exit controller from Partial Power Down. 322 * 323 * @hsotg: Programming view of the DWC_otg controller 324 * @restore: Controller registers need to be restored 325 */ 326int dwc2_exit_hibernation(struct dwc2_hsotg *hsotg, bool restore) 327{ 328 u32 pcgcctl; 329 int ret = 0; 330 331 if (!hsotg->core_params->hibernation) 332 return -ENOTSUPP; 333 334 pcgcctl = DWC2_READ_4(hsotg, PCGCTL); 335 pcgcctl &= ~PCGCTL_STOPPCLK; 336 DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl); 337 338 pcgcctl = DWC2_READ_4(hsotg, PCGCTL); 339 pcgcctl &= ~PCGCTL_PWRCLMP; 340 DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl); 341 342 pcgcctl = DWC2_READ_4(hsotg, PCGCTL); 343 pcgcctl &= ~PCGCTL_RSTPDWNMODULE; 344 DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl); 345 346 udelay(100); 347 if (restore) { 348 ret = dwc2_restore_global_registers(hsotg); 349 if (ret) { 350 dev_err(hsotg->dev, "%s: failed to restore registers\n", 351 __func__); 352 return ret; 353 } 354 if (dwc2_is_host_mode(hsotg)) { 355 ret = dwc2_restore_host_registers(hsotg); 356 if (ret) { 357 dev_err(hsotg->dev, "%s: failed to restore host registers\n", 358 __func__); 359 return ret; 360 } 361 } else { 362 ret = dwc2_restore_device_registers(hsotg); 363 if (ret) { 364 dev_err(hsotg->dev, "%s: failed to restore device registers\n", 365 __func__); 366 return ret; 367 } 368 } 369 } 370 371 return ret; 372} 373 374/** 375 * dwc2_enter_hibernation() - Put controller in Partial Power Down. 376 * 377 * @hsotg: Programming view of the DWC_otg controller 378 */ 379int dwc2_enter_hibernation(struct dwc2_hsotg *hsotg) 380{ 381 u32 pcgcctl; 382 int ret = 0; 383 384 if (!hsotg->core_params->hibernation) 385 return -ENOTSUPP; 386 387 /* Backup all registers */ 388 ret = dwc2_backup_global_registers(hsotg); 389 if (ret) { 390 dev_err(hsotg->dev, "%s: failed to backup global registers\n", 391 __func__); 392 return ret; 393 } 394 395 if (dwc2_is_host_mode(hsotg)) { 396 ret = dwc2_backup_host_registers(hsotg); 397 if (ret) { 398 dev_err(hsotg->dev, "%s: failed to backup host registers\n", 399 __func__); 400 return ret; 401 } 402 } else { 403 ret = dwc2_backup_device_registers(hsotg); 404 if (ret) { 405 dev_err(hsotg->dev, "%s: failed to backup device registers\n", 406 __func__); 407 return ret; 408 } 409 } 410 411 /* 412 * Clear any pending interrupts since dwc2 will not be able to 413 * clear them after entering hibernation. 414 */ 415 DWC2_WRITE_4(hsotg, GINTSTS, 0xffffffff); 416 417 /* Put the controller in low power state */ 418 pcgcctl = DWC2_READ_4(hsotg, PCGCTL); 419 420 pcgcctl |= PCGCTL_PWRCLMP; 421 DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl); 422 ndelay(20); 423 424 pcgcctl |= PCGCTL_RSTPDWNMODULE; 425 DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl); 426 ndelay(20); 427 428 pcgcctl |= PCGCTL_STOPPCLK; 429 DWC2_WRITE_4(hsotg, PCGCTL, pcgcctl); 430 431 return ret; 432} 433 434/** 435 * dwc2_enable_common_interrupts() - Initializes the commmon interrupts, 436 * used in both device and host modes 437 * 438 * @hsotg: Programming view of the DWC_otg controller 439 */ 440static void dwc2_enable_common_interrupts(struct dwc2_hsotg *hsotg) 441{ 442 u32 intmsk; 443 444 /* Clear any pending OTG Interrupts */ 445 DWC2_WRITE_4(hsotg, GOTGINT, 0xffffffff); 446 447 /* Clear any pending interrupts */ 448 DWC2_WRITE_4(hsotg, GINTSTS, 0xffffffff); 449 450 /* Enable the interrupts in the GINTMSK */ 451 intmsk = GINTSTS_MODEMIS | GINTSTS_OTGINT; 452 453 if (hsotg->core_params->dma_enable <= 0) 454 intmsk |= GINTSTS_RXFLVL; 455 if (hsotg->core_params->external_id_pin_ctl <= 0) 456 intmsk |= GINTSTS_CONIDSTSCHNG; 457 458 intmsk |= GINTSTS_WKUPINT | GINTSTS_USBSUSP | 459 GINTSTS_SESSREQINT; 460 461 DWC2_WRITE_4(hsotg, GINTMSK, intmsk); 462} 463 464/* 465 * Initializes the FSLSPClkSel field of the HCFG register depending on the 466 * PHY type 467 */ 468static void dwc2_init_fs_ls_pclk_sel(struct dwc2_hsotg *hsotg) 469{ 470 u32 hcfg, val; 471 472 if ((hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI && 473 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED && 474 hsotg->core_params->ulpi_fs_ls > 0) || 475 hsotg->core_params->phy_type == DWC2_PHY_TYPE_PARAM_FS) { 476 /* Full speed PHY */ 477 val = HCFG_FSLSPCLKSEL_48_MHZ; 478 } else { 479 /* High speed PHY running at full speed or high speed */ 480 val = HCFG_FSLSPCLKSEL_30_60_MHZ; 481 } 482 483 dev_dbg(hsotg->dev, "Initializing HCFG.FSLSPClkSel to %08x\n", val); 484 hcfg = DWC2_READ_4(hsotg, HCFG); 485 hcfg &= ~HCFG_FSLSPCLKSEL_MASK; 486 hcfg |= val << HCFG_FSLSPCLKSEL_SHIFT; 487 DWC2_WRITE_4(hsotg, HCFG, hcfg); 488} 489 490/* 491 * Do core a soft reset of the core. Be careful with this because it 492 * resets all the internal state machines of the core. 493 */ 494int dwc2_core_reset(struct dwc2_hsotg *hsotg) 495{ 496 u32 greset; 497 int count = 0; 498 499 dev_vdbg(hsotg->dev, "%s()\n", __func__); 500 501 /* Core Soft Reset */ 502 greset = DWC2_READ_4(hsotg, GRSTCTL); 503 greset |= GRSTCTL_CSFTRST; 504 DWC2_WRITE_4(hsotg, GRSTCTL, greset); 505 do { 506 udelay(1); 507 greset = DWC2_READ_4(hsotg, GRSTCTL); 508 if (++count > 50) { 509 dev_warn(hsotg->dev, 510 "%s() HANG! Soft Reset GRSTCTL=%0x\n", 511 __func__, greset); 512 return -EBUSY; 513 } 514 } while (greset & GRSTCTL_CSFTRST); 515 516 /* Wait for AHB master IDLE state */ 517 count = 0; 518 do { 519 udelay(1); 520 greset = DWC2_READ_4(hsotg, GRSTCTL); 521 if (++count > 50) { 522 dev_warn(hsotg->dev, 523 "%s() HANG! AHB Idle GRSTCTL=%0x\n", 524 __func__, greset); 525 return -EBUSY; 526 } 527 } while (!(greset & GRSTCTL_AHBIDLE)); 528 529 return 0; 530} 531 532/* 533 * Force the mode of the controller. 534 * 535 * Forcing the mode is needed for two cases: 536 * 537 * 1) If the dr_mode is set to either HOST or PERIPHERAL we force the 538 * controller to stay in a particular mode regardless of ID pin 539 * changes. We do this usually after a core reset. 540 * 541 * 2) During probe we want to read reset values of the hw 542 * configuration registers that are only available in either host or 543 * device mode. We may need to force the mode if the current mode does 544 * not allow us to access the register in the mode that we want. 545 * 546 * In either case it only makes sense to force the mode if the 547 * controller hardware is OTG capable. 548 * 549 * Checks are done in this function to determine whether doing a force 550 * would be valid or not. 551 * 552 * If a force is done, it requires a 25ms delay to take effect. 553 * 554 * Returns true if the mode was forced. 555 */ 556static bool dwc2_force_mode(struct dwc2_hsotg *hsotg, bool host) 557{ 558 u32 gusbcfg; 559 u32 set; 560 u32 clear; 561 562 dev_dbg(hsotg->dev, "Forcing mode to %s\n", host ? "host" : "device"); 563 564 /* 565 * Force mode has no effect if the hardware is not OTG. 566 */ 567 if (!dwc2_hw_is_otg(hsotg)) 568 return false; 569 570 /* 571 * If dr_mode is either peripheral or host only, there is no 572 * need to ever force the mode to the opposite mode. 573 */ 574 if (host && hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) { 575 WARN_ON(1); 576 return false; 577 } 578 579 if (!host && hsotg->dr_mode == USB_DR_MODE_HOST) { 580 WARN_ON(1); 581 return false; 582 } 583 584 gusbcfg = DWC2_READ_4(hsotg, GUSBCFG); 585 586 set = host ? GUSBCFG_FORCEHOSTMODE : GUSBCFG_FORCEDEVMODE; 587 clear = host ? GUSBCFG_FORCEDEVMODE : GUSBCFG_FORCEHOSTMODE; 588 589 gusbcfg &= ~clear; 590 gusbcfg |= set; 591 DWC2_WRITE_4(hsotg, GUSBCFG, gusbcfg); 592 593 msleep(25); 594 return true; 595} 596 597/* 598 * Clears the force mode bits. 599 */ 600static void dwc2_clear_force_mode(struct dwc2_hsotg *hsotg) 601{ 602 u32 gusbcfg; 603 604 gusbcfg = DWC2_READ_4(hsotg, GUSBCFG); 605 gusbcfg &= ~GUSBCFG_FORCEHOSTMODE; 606 gusbcfg &= ~GUSBCFG_FORCEDEVMODE; 607 DWC2_WRITE_4(hsotg, GUSBCFG, gusbcfg); 608 609 /* 610 * NOTE: This long sleep is _very_ important, otherwise the core will 611 * not stay in host mode after a connector ID change! 612 */ 613 msleep(25); 614} 615 616/* 617 * Sets or clears force mode based on the dr_mode parameter. 618 */ 619void dwc2_force_dr_mode(struct dwc2_hsotg *hsotg) 620{ 621 switch (hsotg->dr_mode) { 622 case USB_DR_MODE_HOST: 623 dwc2_force_mode(hsotg, true); 624 break; 625 case USB_DR_MODE_PERIPHERAL: 626 dwc2_force_mode(hsotg, false); 627 break; 628 case USB_DR_MODE_OTG: 629 dwc2_clear_force_mode(hsotg); 630 break; 631 default: 632 dev_warn(hsotg->dev, "%s() Invalid dr_mode=%d\n", 633 __func__, hsotg->dr_mode); 634 break; 635 } 636} 637 638/* 639 * Do core a soft reset of the core. Be careful with this because it 640 * resets all the internal state machines of the core. 641 * 642 * Additionally this will apply force mode as per the hsotg->dr_mode 643 * parameter. 644 */ 645int dwc2_core_reset_and_force_dr_mode(struct dwc2_hsotg *hsotg) 646{ 647 int retval; 648 649 retval = dwc2_core_reset(hsotg); 650 if (retval) 651 return retval; 652 653 dwc2_force_dr_mode(hsotg); 654 return 0; 655} 656 657static int dwc2_fs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) 658{ 659 u32 usbcfg, i2cctl; 660 int retval = 0; 661 662 /* 663 * core_init() is now called on every switch so only call the 664 * following for the first time through 665 */ 666 if (select_phy) { 667 dev_dbg(hsotg->dev, "FS PHY selected\n"); 668 669 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 670 if (!(usbcfg & GUSBCFG_PHYSEL)) { 671 usbcfg |= GUSBCFG_PHYSEL; 672 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 673 674 /* Reset after a PHY select */ 675 retval = dwc2_core_reset_and_force_dr_mode(hsotg); 676 677 if (retval) { 678 dev_err(hsotg->dev, 679 "%s: Reset failed, aborting", __func__); 680 return retval; 681 } 682 } 683 } 684 685 /* 686 * Program DCFG.DevSpd or HCFG.FSLSPclkSel to 48Mhz in FS. Also 687 * do this on HNP Dev/Host mode switches (done in dev_init and 688 * host_init). 689 */ 690 if (dwc2_is_host_mode(hsotg)) 691 dwc2_init_fs_ls_pclk_sel(hsotg); 692 693 if (hsotg->core_params->i2c_enable > 0) { 694 dev_dbg(hsotg->dev, "FS PHY enabling I2C\n"); 695 696 /* Program GUSBCFG.OtgUtmiFsSel to I2C */ 697 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 698 usbcfg |= GUSBCFG_OTG_UTMI_FS_SEL; 699 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 700 701 /* Program GI2CCTL.I2CEn */ 702 i2cctl = DWC2_READ_4(hsotg, GI2CCTL); 703 i2cctl &= ~GI2CCTL_I2CDEVADDR_MASK; 704 i2cctl |= 1 << GI2CCTL_I2CDEVADDR_SHIFT; 705 i2cctl &= ~GI2CCTL_I2CEN; 706 DWC2_WRITE_4(hsotg, GI2CCTL, i2cctl); 707 i2cctl |= GI2CCTL_I2CEN; 708 DWC2_WRITE_4(hsotg, GI2CCTL, i2cctl); 709 } 710 711 return retval; 712} 713 714static int dwc2_hs_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) 715{ 716 u32 usbcfg, usbcfg_old; 717 int retval = 0; 718 719 if (!select_phy) 720 return 0; 721 722 usbcfg = usbcfg_old = DWC2_READ_4(hsotg, GUSBCFG); 723 724 /* 725 * HS PHY parameters. These parameters are preserved during soft reset 726 * so only program the first time. Do a soft reset immediately after 727 * setting phyif. 728 */ 729 switch (hsotg->core_params->phy_type) { 730 case DWC2_PHY_TYPE_PARAM_ULPI: 731 /* ULPI interface */ 732 dev_dbg(hsotg->dev, "HS ULPI PHY selected\n"); 733 usbcfg |= GUSBCFG_ULPI_UTMI_SEL; 734 usbcfg &= ~(GUSBCFG_PHYIF16 | GUSBCFG_DDRSEL); 735 if (hsotg->core_params->phy_ulpi_ddr > 0) 736 usbcfg |= GUSBCFG_DDRSEL; 737 break; 738 case DWC2_PHY_TYPE_PARAM_UTMI: 739 /* UTMI+ interface */ 740 dev_dbg(hsotg->dev, "HS UTMI+ PHY selected\n"); 741 usbcfg &= ~(GUSBCFG_ULPI_UTMI_SEL | GUSBCFG_PHYIF16); 742 if (hsotg->core_params->phy_utmi_width == 16) 743 usbcfg |= GUSBCFG_PHYIF16; 744 break; 745 default: 746 dev_err(hsotg->dev, "FS PHY selected at HS!\n"); 747 break; 748 } 749 750 if (usbcfg != usbcfg_old) { 751 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 752 753 /* Reset after setting the PHY parameters */ 754 retval = dwc2_core_reset_and_force_dr_mode(hsotg); 755 if (retval) { 756 dev_err(hsotg->dev, 757 "%s: Reset failed, aborting", __func__); 758 return retval; 759 } 760 } 761 762 return retval; 763} 764 765static int dwc2_phy_init(struct dwc2_hsotg *hsotg, bool select_phy) 766{ 767 u32 usbcfg; 768 int retval = 0; 769 770 if (hsotg->core_params->speed == DWC2_SPEED_PARAM_FULL && 771 hsotg->core_params->phy_type == DWC2_PHY_TYPE_PARAM_FS) { 772 /* If FS mode with FS PHY */ 773 retval = dwc2_fs_phy_init(hsotg, select_phy); 774 if (retval) 775 return retval; 776 } else { 777 /* High speed PHY */ 778 retval = dwc2_hs_phy_init(hsotg, select_phy); 779 if (retval) 780 return retval; 781 } 782 783 if (hsotg->hw_params.hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI && 784 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED && 785 hsotg->core_params->ulpi_fs_ls > 0) { 786 dev_dbg(hsotg->dev, "Setting ULPI FSLS\n"); 787 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 788 usbcfg |= GUSBCFG_ULPI_FS_LS; 789 usbcfg |= GUSBCFG_ULPI_CLK_SUSP_M; 790 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 791 } else { 792 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 793 usbcfg &= ~GUSBCFG_ULPI_FS_LS; 794 usbcfg &= ~GUSBCFG_ULPI_CLK_SUSP_M; 795 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 796 } 797 798 return retval; 799} 800 801static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg) 802{ 803 struct dwc2_softc *sc = hsotg->hsotg_sc; 804 u32 ahbcfg = DWC2_READ_4(hsotg, GAHBCFG); 805 806 switch (hsotg->hw_params.arch) { 807 case GHWCFG2_EXT_DMA_ARCH: 808 dev_dbg(hsotg->dev, "External DMA Mode\n"); 809 if (!sc->sc_set_dma_addr) { 810 dev_err(hsotg->dev, "External DMA Mode not supported\n"); 811 return -EINVAL; 812 } 813 if (hsotg->core_params->ahbcfg != -1) { 814 ahbcfg &= GAHBCFG_CTRL_MASK; 815 ahbcfg |= hsotg->core_params->ahbcfg & 816 ~GAHBCFG_CTRL_MASK; 817 } 818 break; 819 820 case GHWCFG2_INT_DMA_ARCH: 821 dev_dbg(hsotg->dev, "Internal DMA Mode\n"); 822 if (hsotg->core_params->ahbcfg != -1) { 823 ahbcfg &= GAHBCFG_CTRL_MASK; 824 ahbcfg |= hsotg->core_params->ahbcfg & 825 ~GAHBCFG_CTRL_MASK; 826 } 827 break; 828 829 case GHWCFG2_SLAVE_ONLY_ARCH: 830 default: 831 dev_dbg(hsotg->dev, "Slave Only Mode\n"); 832 break; 833 } 834 835 dev_dbg(hsotg->dev, "dma_enable:%d dma_desc_enable:%d\n", 836 hsotg->core_params->dma_enable, 837 hsotg->core_params->dma_desc_enable); 838 839 if (hsotg->core_params->dma_enable > 0) { 840 if (hsotg->core_params->dma_desc_enable > 0) 841 dev_dbg(hsotg->dev, "Using Descriptor DMA mode\n"); 842 else 843 dev_dbg(hsotg->dev, "Using Buffer DMA mode\n"); 844 } else { 845 dev_dbg(hsotg->dev, "Using Slave mode\n"); 846 hsotg->core_params->dma_desc_enable = 0; 847 } 848 849 if (hsotg->core_params->dma_enable > 0) 850 ahbcfg |= GAHBCFG_DMA_EN; 851 852 DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg); 853 854 return 0; 855} 856 857static void dwc2_gusbcfg_init(struct dwc2_hsotg *hsotg) 858{ 859 u32 usbcfg; 860 861 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 862 usbcfg &= ~(GUSBCFG_HNPCAP | GUSBCFG_SRPCAP); 863 864 switch (hsotg->hw_params.op_mode) { 865 case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE: 866 if (hsotg->core_params->otg_cap == 867 DWC2_CAP_PARAM_HNP_SRP_CAPABLE) 868 usbcfg |= GUSBCFG_HNPCAP; 869 if (hsotg->core_params->otg_cap != 870 DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE) 871 usbcfg |= GUSBCFG_SRPCAP; 872 break; 873 874 case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE: 875 case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE: 876 case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST: 877 if (hsotg->core_params->otg_cap != 878 DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE) 879 usbcfg |= GUSBCFG_SRPCAP; 880 break; 881 882 case GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE: 883 case GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE: 884 case GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST: 885 default: 886 break; 887 } 888 889 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 890} 891 892/** 893 * dwc2_core_init() - Initializes the DWC_otg controller registers and 894 * prepares the core for device mode or host mode operation 895 * 896 * @hsotg: Programming view of the DWC_otg controller 897 * @initial_setup: If true then this is the first init for this instance. 898 */ 899int dwc2_core_init(struct dwc2_hsotg *hsotg, bool initial_setup) 900{ 901 u32 usbcfg, otgctl; 902 int retval; 903 904 dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); 905 906 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 907 908 /* Set ULPI External VBUS bit if needed */ 909 usbcfg &= ~GUSBCFG_ULPI_EXT_VBUS_DRV; 910 if (hsotg->core_params->phy_ulpi_ext_vbus == 911 DWC2_PHY_ULPI_EXTERNAL_VBUS) 912 usbcfg |= GUSBCFG_ULPI_EXT_VBUS_DRV; 913 914 /* Set external TS Dline pulsing bit if needed */ 915 usbcfg &= ~GUSBCFG_TERMSELDLPULSE; 916 if (hsotg->core_params->ts_dline > 0) 917 usbcfg |= GUSBCFG_TERMSELDLPULSE; 918 919 DWC2_WRITE_4(hsotg, GUSBCFG, usbcfg); 920 921 /* 922 * Reset the Controller 923 * 924 * We only need to reset the controller if this is a re-init. 925 * For the first init we know for sure that earlier code reset us (it 926 * needed to in order to properly detect various parameters). 927 */ 928 if (!initial_setup) { 929 retval = dwc2_core_reset_and_force_dr_mode(hsotg); 930 if (retval) { 931 dev_err(hsotg->dev, "%s(): Reset failed, aborting\n", 932 __func__); 933 return retval; 934 } 935 } 936 937 /* 938 * This needs to happen in FS mode before any other programming occurs 939 */ 940 retval = dwc2_phy_init(hsotg, initial_setup); 941 if (retval) 942 return retval; 943 944 /* Program the GAHBCFG Register */ 945 retval = dwc2_gahbcfg_init(hsotg); 946 if (retval) 947 return retval; 948 949 /* Program the GUSBCFG register */ 950 dwc2_gusbcfg_init(hsotg); 951 952 /* Program the GOTGCTL register */ 953 otgctl = DWC2_READ_4(hsotg, GOTGCTL); 954 otgctl &= ~GOTGCTL_OTGVER; 955 if (hsotg->core_params->otg_ver > 0) 956 otgctl |= GOTGCTL_OTGVER; 957 DWC2_WRITE_4(hsotg, GOTGCTL, otgctl); 958 dev_dbg(hsotg->dev, "OTG VER PARAM: %d\n", hsotg->core_params->otg_ver); 959 960 /* Clear the SRP success bit for FS-I2c */ 961 hsotg->srp_success = 0; 962 963 /* Enable common interrupts */ 964 dwc2_enable_common_interrupts(hsotg); 965 966 /* 967 * Do device or host initialization based on mode during PCD and 968 * HCD initialization 969 */ 970 if (dwc2_is_host_mode(hsotg)) { 971 dev_dbg(hsotg->dev, "Host Mode\n"); 972 hsotg->op_state = OTG_STATE_A_HOST; 973 } else { 974 dev_dbg(hsotg->dev, "Device Mode\n"); 975 hsotg->op_state = OTG_STATE_B_PERIPHERAL; 976 } 977 978 return 0; 979} 980 981/** 982 * dwc2_enable_host_interrupts() - Enables the Host mode interrupts 983 * 984 * @hsotg: Programming view of DWC_otg controller 985 */ 986void dwc2_enable_host_interrupts(struct dwc2_hsotg *hsotg) 987{ 988 u32 intmsk; 989 990 dev_dbg(hsotg->dev, "%s()\n", __func__); 991 992 /* Disable all interrupts */ 993 DWC2_WRITE_4(hsotg, GINTMSK, 0); 994 DWC2_WRITE_4(hsotg, HAINTMSK, 0); 995 996 /* Enable the common interrupts */ 997 dwc2_enable_common_interrupts(hsotg); 998 999 /* Enable host mode interrupts without disturbing common interrupts */ 1000 intmsk = DWC2_READ_4(hsotg, GINTMSK); 1001 intmsk |= GINTSTS_DISCONNINT | GINTSTS_PRTINT | GINTSTS_HCHINT; 1002 DWC2_WRITE_4(hsotg, GINTMSK, intmsk); 1003} 1004 1005/** 1006 * dwc2_disable_host_interrupts() - Disables the Host Mode interrupts 1007 * 1008 * @hsotg: Programming view of DWC_otg controller 1009 */ 1010void dwc2_disable_host_interrupts(struct dwc2_hsotg *hsotg) 1011{ 1012 u32 intmsk = DWC2_READ_4(hsotg, GINTMSK); 1013 1014 /* Disable host mode interrupts without disturbing common interrupts */ 1015 intmsk &= ~(GINTSTS_SOF | GINTSTS_PRTINT | GINTSTS_HCHINT | 1016 GINTSTS_PTXFEMP | GINTSTS_NPTXFEMP | GINTSTS_DISCONNINT); 1017 DWC2_WRITE_4(hsotg, GINTMSK, intmsk); 1018} 1019 1020/* 1021 * dwc2_calculate_dynamic_fifo() - Calculates the default fifo size 1022 * For system that have a total fifo depth that is smaller than the default 1023 * RX + TX fifo size. 1024 * 1025 * @hsotg: Programming view of DWC_otg controller 1026 */ 1027static void dwc2_calculate_dynamic_fifo(struct dwc2_hsotg *hsotg) 1028{ 1029 struct dwc2_core_params *params = hsotg->core_params; 1030 struct dwc2_hw_params *hw = &hsotg->hw_params; 1031 u32 rxfsiz, nptxfsiz, ptxfsiz, total_fifo_size; 1032 1033 total_fifo_size = hw->total_fifo_size; 1034 rxfsiz = params->host_rx_fifo_size; 1035 nptxfsiz = params->host_nperio_tx_fifo_size; 1036 ptxfsiz = params->host_perio_tx_fifo_size; 1037 1038 /* 1039 * Will use Method 2 defined in the DWC2 spec: minimum FIFO depth 1040 * allocation with support for high bandwidth endpoints. Synopsys 1041 * defines MPS(Max Packet size) for a periodic EP=1024, and for 1042 * non-periodic as 512. 1043 */ 1044 if (total_fifo_size < (rxfsiz + nptxfsiz + ptxfsiz)) { 1045 /* 1046 * For Buffer DMA mode/Scatter Gather DMA mode 1047 * 2 * ((Largest Packet size / 4) + 1 + 1) + n 1048 * with n = number of host channel. 1049 * 2 * ((1024/4) + 2) = 516 1050 */ 1051 rxfsiz = 516 + hw->host_channels; 1052 1053 /* 1054 * min non-periodic tx fifo depth 1055 * 2 * (largest non-periodic USB packet used / 4) 1056 * 2 * (512/4) = 256 1057 */ 1058 nptxfsiz = 256; 1059 1060 /* 1061 * min periodic tx fifo depth 1062 * (largest packet size*MC)/4 1063 * (1024 * 3)/4 = 768 1064 */ 1065 ptxfsiz = 768; 1066 1067 params->host_rx_fifo_size = rxfsiz; 1068 params->host_nperio_tx_fifo_size = nptxfsiz; 1069 params->host_perio_tx_fifo_size = ptxfsiz; 1070 } 1071 1072 /* 1073 * If the summation of RX, NPTX and PTX fifo sizes is still 1074 * bigger than the total_fifo_size, then we have a problem. 1075 * 1076 * We won't be able to allocate as many endpoints. Right now, 1077 * we're just printing an error message, but ideally this FIFO 1078 * allocation algorithm would be improved in the future. 1079 * 1080 * FIXME improve this FIFO allocation algorithm. 1081 */ 1082 if (unlikely(total_fifo_size < (rxfsiz + nptxfsiz + ptxfsiz))) 1083 dev_err(hsotg->dev, "invalid fifo sizes\n"); 1084} 1085 1086static void dwc2_config_fifos(struct dwc2_hsotg *hsotg) 1087{ 1088 struct dwc2_core_params *params = hsotg->core_params; 1089 u32 nptxfsiz, hptxfsiz, dfifocfg, grxfsiz; 1090 1091 if (!params->enable_dynamic_fifo) 1092 return; 1093 1094 dwc2_calculate_dynamic_fifo(hsotg); 1095 1096 /* Rx FIFO */ 1097 grxfsiz = DWC2_READ_4(hsotg, GRXFSIZ); 1098 dev_dbg(hsotg->dev, "initial grxfsiz=%08x\n", grxfsiz); 1099 grxfsiz &= ~GRXFSIZ_DEPTH_MASK; 1100 grxfsiz |= params->host_rx_fifo_size << 1101 GRXFSIZ_DEPTH_SHIFT & GRXFSIZ_DEPTH_MASK; 1102 DWC2_WRITE_4(hsotg, GRXFSIZ, grxfsiz); 1103 dev_dbg(hsotg->dev, "new grxfsiz=%08x\n", 1104 DWC2_READ_4(hsotg, GRXFSIZ)); 1105 1106 /* Non-periodic Tx FIFO */ 1107 dev_dbg(hsotg->dev, "initial gnptxfsiz=%08x\n", 1108 DWC2_READ_4(hsotg, GNPTXFSIZ)); 1109 nptxfsiz = params->host_nperio_tx_fifo_size << 1110 FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK; 1111 nptxfsiz |= params->host_rx_fifo_size << 1112 FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK; 1113 DWC2_WRITE_4(hsotg, GNPTXFSIZ, nptxfsiz); 1114 dev_dbg(hsotg->dev, "new gnptxfsiz=%08x\n", 1115 DWC2_READ_4(hsotg, GNPTXFSIZ)); 1116 1117 /* Periodic Tx FIFO */ 1118 dev_dbg(hsotg->dev, "initial hptxfsiz=%08x\n", 1119 DWC2_READ_4(hsotg, HPTXFSIZ)); 1120 hptxfsiz = params->host_perio_tx_fifo_size << 1121 FIFOSIZE_DEPTH_SHIFT & FIFOSIZE_DEPTH_MASK; 1122 hptxfsiz |= (params->host_rx_fifo_size + 1123 params->host_nperio_tx_fifo_size) << 1124 FIFOSIZE_STARTADDR_SHIFT & FIFOSIZE_STARTADDR_MASK; 1125 DWC2_WRITE_4(hsotg, HPTXFSIZ, hptxfsiz); 1126 dev_dbg(hsotg->dev, "new hptxfsiz=%08x\n", 1127 DWC2_READ_4(hsotg, HPTXFSIZ)); 1128 1129 if (hsotg->core_params->en_multiple_tx_fifo > 0 && 1130 hsotg->hw_params.snpsid <= DWC2_CORE_REV_2_94a) { 1131 /* 1132 * Global DFIFOCFG calculation for Host mode - 1133 * include RxFIFO, NPTXFIFO and HPTXFIFO 1134 */ 1135 dfifocfg = DWC2_READ_4(hsotg, GDFIFOCFG); 1136 dfifocfg &= ~GDFIFOCFG_EPINFOBASE_MASK; 1137 dfifocfg |= (params->host_rx_fifo_size + 1138 params->host_nperio_tx_fifo_size + 1139 params->host_perio_tx_fifo_size) << 1140 GDFIFOCFG_EPINFOBASE_SHIFT & 1141 GDFIFOCFG_EPINFOBASE_MASK; 1142 DWC2_WRITE_4(hsotg, GDFIFOCFG, dfifocfg); 1143 } 1144} 1145 1146/** 1147 * dwc2_core_host_init() - Initializes the DWC_otg controller registers for 1148 * Host mode 1149 * 1150 * @hsotg: Programming view of DWC_otg controller 1151 * 1152 * This function flushes the Tx and Rx FIFOs and flushes any entries in the 1153 * request queues. Host channels are reset to ensure that they are ready for 1154 * performing transfers. 1155 */ 1156void dwc2_core_host_init(struct dwc2_hsotg *hsotg) 1157{ 1158 u32 hcfg, hfir, otgctl; 1159 1160 dev_dbg(hsotg->dev, "%s(%p)\n", __func__, hsotg); 1161 1162 /* Restart the Phy Clock */ 1163 DWC2_WRITE_4(hsotg, PCGCTL, 0); 1164 1165 /* Initialize Host Configuration Register */ 1166 dwc2_init_fs_ls_pclk_sel(hsotg); 1167 if (hsotg->core_params->speed == DWC2_SPEED_PARAM_FULL) { 1168 hcfg = DWC2_READ_4(hsotg, HCFG); 1169 hcfg |= HCFG_FSLSSUPP; 1170 DWC2_WRITE_4(hsotg, HCFG, hcfg); 1171 } 1172 1173 /* 1174 * This bit allows dynamic reloading of the HFIR register during 1175 * runtime. This bit needs to be programmed during initial configuration 1176 * and its value must not be changed during runtime. 1177 */ 1178 if (hsotg->core_params->reload_ctl > 0) { 1179 hfir = DWC2_READ_4(hsotg, HFIR); 1180 hfir |= HFIR_RLDCTRL; 1181 DWC2_WRITE_4(hsotg, HFIR, hfir); 1182 } 1183 1184 if (hsotg->core_params->dma_desc_enable > 0) { 1185 u32 op_mode = hsotg->hw_params.op_mode; 1186 if (hsotg->hw_params.snpsid < DWC2_CORE_REV_2_90a || 1187 !hsotg->hw_params.dma_desc_enable || 1188 op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE || 1189 op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE || 1190 op_mode == GHWCFG2_OP_MODE_UNDEFINED) { 1191 dev_err(hsotg->dev, 1192 "Hardware does not support descriptor DMA mode -\n"); 1193 dev_err(hsotg->dev, 1194 "falling back to buffer DMA mode.\n"); 1195 hsotg->core_params->dma_desc_enable = 0; 1196 } else { 1197 hcfg = DWC2_READ_4(hsotg, HCFG); 1198 hcfg |= HCFG_DESCDMA; 1199 DWC2_WRITE_4(hsotg, HCFG, hcfg); 1200 } 1201 } 1202 1203 /* Configure data FIFO sizes */ 1204 dwc2_config_fifos(hsotg); 1205 1206 /* TODO - check this */ 1207 /* Clear Host Set HNP Enable in the OTG Control Register */ 1208 otgctl = DWC2_READ_4(hsotg, GOTGCTL); 1209 otgctl &= ~GOTGCTL_HSTSETHNPEN; 1210 DWC2_WRITE_4(hsotg, GOTGCTL, otgctl); 1211 1212 /* Make sure the FIFOs are flushed */ 1213 dwc2_flush_tx_fifo(hsotg, 0x10 /* all TX FIFOs */); 1214 dwc2_flush_rx_fifo(hsotg); 1215 1216 /* Clear Host Set HNP Enable in the OTG Control Register */ 1217 otgctl = DWC2_READ_4(hsotg, GOTGCTL); 1218 otgctl &= ~GOTGCTL_HSTSETHNPEN; 1219 DWC2_WRITE_4(hsotg, GOTGCTL, otgctl); 1220 1221 if (hsotg->core_params->dma_desc_enable <= 0) { 1222 int num_channels, i; 1223 u32 hcchar; 1224 1225 /* Flush out any leftover queued requests */ 1226 num_channels = hsotg->core_params->host_channels; 1227 for (i = 0; i < num_channels; i++) { 1228 hcchar = DWC2_READ_4(hsotg, HCCHAR(i)); 1229 hcchar &= ~HCCHAR_CHENA; 1230 hcchar |= HCCHAR_CHDIS; 1231 hcchar &= ~HCCHAR_EPDIR; 1232 DWC2_WRITE_4(hsotg, HCCHAR(i), hcchar); 1233 } 1234 1235 /* Halt all channels to put them into a known state */ 1236 for (i = 0; i < num_channels; i++) { 1237 int count = 0; 1238 1239 hcchar = DWC2_READ_4(hsotg, HCCHAR(i)); 1240 hcchar |= HCCHAR_CHENA | HCCHAR_CHDIS; 1241 hcchar &= ~HCCHAR_EPDIR; 1242 DWC2_WRITE_4(hsotg, HCCHAR(i), hcchar); 1243 dev_dbg(hsotg->dev, "%s: Halt channel %d\n", 1244 __func__, i); 1245 do { 1246 hcchar = DWC2_READ_4(hsotg, HCCHAR(i)); 1247 if (++count > 1000) { 1248 dev_err(hsotg->dev, 1249 "Unable to clear enable on channel %d\n", 1250 i); 1251 break; 1252 } 1253 udelay(1); 1254 } while (hcchar & HCCHAR_CHENA); 1255 } 1256 } 1257 1258 /* Turn on the vbus power */ 1259 dev_dbg(hsotg->dev, "Init: Port Power? op_state=%d\n", hsotg->op_state); 1260 if (hsotg->op_state == OTG_STATE_A_HOST) { 1261 u32 hprt0 = dwc2_read_hprt0(hsotg); 1262 1263 dev_dbg(hsotg->dev, "Init: Power Port (%d)\n", 1264 !!(hprt0 & HPRT0_PWR)); 1265 if (!(hprt0 & HPRT0_PWR)) { 1266 hprt0 |= HPRT0_PWR; 1267 DWC2_WRITE_4(hsotg, HPRT0, hprt0); 1268 } 1269 } 1270 1271 dwc2_enable_host_interrupts(hsotg); 1272} 1273 1274static void dwc2_hc_enable_slave_ints(struct dwc2_hsotg *hsotg, 1275 struct dwc2_host_chan *chan) 1276{ 1277 u32 hcintmsk = HCINTMSK_CHHLTD; 1278 1279 switch (chan->ep_type) { 1280 case USB_ENDPOINT_XFER_CONTROL: 1281 case USB_ENDPOINT_XFER_BULK: 1282 dev_vdbg(hsotg->dev, "control/bulk\n"); 1283 hcintmsk |= HCINTMSK_XFERCOMPL; 1284 hcintmsk |= HCINTMSK_STALL; 1285 hcintmsk |= HCINTMSK_XACTERR; 1286 hcintmsk |= HCINTMSK_DATATGLERR; 1287 if (chan->ep_is_in) { 1288 hcintmsk |= HCINTMSK_BBLERR; 1289 } else { 1290 hcintmsk |= HCINTMSK_NAK; 1291 hcintmsk |= HCINTMSK_NYET; 1292 if (chan->do_ping) 1293 hcintmsk |= HCINTMSK_ACK; 1294 } 1295 1296 if (chan->do_split) { 1297 hcintmsk |= HCINTMSK_NAK; 1298 if (chan->complete_split) 1299 hcintmsk |= HCINTMSK_NYET; 1300 else 1301 hcintmsk |= HCINTMSK_ACK; 1302 } 1303 1304 if (chan->error_state) 1305 hcintmsk |= HCINTMSK_ACK; 1306 break; 1307 1308 case USB_ENDPOINT_XFER_INT: 1309 if (dbg_perio()) 1310 dev_vdbg(hsotg->dev, "intr\n"); 1311 hcintmsk |= HCINTMSK_XFERCOMPL; 1312 hcintmsk |= HCINTMSK_NAK; 1313 hcintmsk |= HCINTMSK_STALL; 1314 hcintmsk |= HCINTMSK_XACTERR; 1315 hcintmsk |= HCINTMSK_DATATGLERR; 1316 hcintmsk |= HCINTMSK_FRMOVRUN; 1317 1318 if (chan->ep_is_in) 1319 hcintmsk |= HCINTMSK_BBLERR; 1320 if (chan->error_state) 1321 hcintmsk |= HCINTMSK_ACK; 1322 if (chan->do_split) { 1323 if (chan->complete_split) 1324 hcintmsk |= HCINTMSK_NYET; 1325 else 1326 hcintmsk |= HCINTMSK_ACK; 1327 } 1328 break; 1329 1330 case USB_ENDPOINT_XFER_ISOC: 1331 if (dbg_perio()) 1332 dev_vdbg(hsotg->dev, "isoc\n"); 1333 hcintmsk |= HCINTMSK_XFERCOMPL; 1334 hcintmsk |= HCINTMSK_FRMOVRUN; 1335 hcintmsk |= HCINTMSK_ACK; 1336 1337 if (chan->ep_is_in) { 1338 hcintmsk |= HCINTMSK_XACTERR; 1339 hcintmsk |= HCINTMSK_BBLERR; 1340 } 1341 break; 1342 default: 1343 dev_err(hsotg->dev, "## Unknown EP type ##\n"); 1344 break; 1345 } 1346 1347 DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), hcintmsk); 1348 if (dbg_hc(chan)) 1349 dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); 1350} 1351 1352static void dwc2_hc_enable_dma_ints(struct dwc2_hsotg *hsotg, 1353 struct dwc2_host_chan *chan) 1354{ 1355 u32 hcintmsk = HCINTMSK_CHHLTD; 1356 1357 /* 1358 * For Descriptor DMA mode core halts the channel on AHB error. 1359 * Interrupt is not required. 1360 */ 1361 if (hsotg->core_params->dma_desc_enable <= 0) { 1362 if (dbg_hc(chan)) 1363 dev_vdbg(hsotg->dev, "desc DMA disabled\n"); 1364 hcintmsk |= HCINTMSK_AHBERR; 1365 } else { 1366 if (dbg_hc(chan)) 1367 dev_vdbg(hsotg->dev, "desc DMA enabled\n"); 1368 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1369 hcintmsk |= HCINTMSK_XFERCOMPL; 1370 } 1371 1372 if (chan->error_state && !chan->do_split && 1373 chan->ep_type != USB_ENDPOINT_XFER_ISOC) { 1374 if (dbg_hc(chan)) 1375 dev_vdbg(hsotg->dev, "setting ACK\n"); 1376 hcintmsk |= HCINTMSK_ACK; 1377 if (chan->ep_is_in) { 1378 hcintmsk |= HCINTMSK_DATATGLERR; 1379 if (chan->ep_type != USB_ENDPOINT_XFER_INT) 1380 hcintmsk |= HCINTMSK_NAK; 1381 } 1382 } 1383 1384 DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), hcintmsk); 1385 if (dbg_hc(chan)) 1386 dev_vdbg(hsotg->dev, "set HCINTMSK to %08x\n", hcintmsk); 1387} 1388 1389static void dwc2_hc_enable_ints(struct dwc2_hsotg *hsotg, 1390 struct dwc2_host_chan *chan) 1391{ 1392 u32 intmsk; 1393 1394 if (hsotg->core_params->dma_enable > 0) { 1395 if (dbg_hc(chan)) 1396 dev_vdbg(hsotg->dev, "DMA enabled\n"); 1397 dwc2_hc_enable_dma_ints(hsotg, chan); 1398 } else { 1399 if (dbg_hc(chan)) 1400 dev_vdbg(hsotg->dev, "DMA disabled\n"); 1401 dwc2_hc_enable_slave_ints(hsotg, chan); 1402 } 1403 1404 /* Enable the top level host channel interrupt */ 1405 intmsk = DWC2_READ_4(hsotg, HAINTMSK); 1406 intmsk |= 1 << chan->hc_num; 1407 DWC2_WRITE_4(hsotg, HAINTMSK, intmsk); 1408 if (dbg_hc(chan)) 1409 dev_vdbg(hsotg->dev, "set HAINTMSK to %08x\n", intmsk); 1410 1411 /* Make sure host channel interrupts are enabled */ 1412 intmsk = DWC2_READ_4(hsotg, GINTMSK); 1413 intmsk |= GINTSTS_HCHINT; 1414 DWC2_WRITE_4(hsotg, GINTMSK, intmsk); 1415 if (dbg_hc(chan)) 1416 dev_vdbg(hsotg->dev, "set GINTMSK to %08x\n", intmsk); 1417} 1418 1419/** 1420 * dwc2_hc_init() - Prepares a host channel for transferring packets to/from 1421 * a specific endpoint 1422 * 1423 * @hsotg: Programming view of DWC_otg controller 1424 * @chan: Information needed to initialize the host channel 1425 * 1426 * The HCCHARn register is set up with the characteristics specified in chan. 1427 * Host channel interrupts that may need to be serviced while this transfer is 1428 * in progress are enabled. 1429 */ 1430void dwc2_hc_init(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) 1431{ 1432 u8 hc_num = chan->hc_num; 1433 u32 hcintmsk; 1434 u32 hcchar; 1435 u32 hcsplt = 0; 1436 1437 if (dbg_hc(chan)) 1438 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1439 1440 /* Clear old interrupt conditions for this host channel */ 1441 hcintmsk = 0xffffffff; 1442 hcintmsk &= ~HCINTMSK_RESERVED14_31; 1443 DWC2_WRITE_4(hsotg, HCINT(hc_num), hcintmsk); 1444 1445 /* Enable channel interrupts required for this transfer */ 1446 dwc2_hc_enable_ints(hsotg, chan); 1447 1448 /* 1449 * Program the HCCHARn register with the endpoint characteristics for 1450 * the current transfer 1451 */ 1452 hcchar = chan->dev_addr << HCCHAR_DEVADDR_SHIFT & HCCHAR_DEVADDR_MASK; 1453 hcchar |= chan->ep_num << HCCHAR_EPNUM_SHIFT & HCCHAR_EPNUM_MASK; 1454 if (chan->ep_is_in) 1455 hcchar |= HCCHAR_EPDIR; 1456 if (chan->speed == USB_SPEED_LOW) 1457 hcchar |= HCCHAR_LSPDDEV; 1458 hcchar |= chan->ep_type << HCCHAR_EPTYPE_SHIFT & HCCHAR_EPTYPE_MASK; 1459 hcchar |= chan->max_packet << HCCHAR_MPS_SHIFT & HCCHAR_MPS_MASK; 1460 DWC2_WRITE_4(hsotg, HCCHAR(hc_num), hcchar); 1461 if (dbg_hc(chan)) { 1462 dev_vdbg(hsotg->dev, "set HCCHAR(%d) to %08x\n", 1463 hc_num, hcchar); 1464 1465 dev_vdbg(hsotg->dev, "%s: Channel %d\n", 1466 __func__, hc_num); 1467 dev_vdbg(hsotg->dev, " Dev Addr: %d\n", 1468 chan->dev_addr); 1469 dev_vdbg(hsotg->dev, " Ep Num: %d\n", 1470 chan->ep_num); 1471 dev_vdbg(hsotg->dev, " Is In: %d\n", 1472 chan->ep_is_in); 1473 dev_vdbg(hsotg->dev, " Is Low Speed: %d\n", 1474 chan->speed == USB_SPEED_LOW); 1475 dev_vdbg(hsotg->dev, " Ep Type: %d\n", 1476 chan->ep_type); 1477 dev_vdbg(hsotg->dev, " Max Pkt: %d\n", 1478 chan->max_packet); 1479 } 1480 1481 /* Program the HCSPLT register for SPLITs */ 1482 if (chan->do_split) { 1483 if (dbg_hc(chan)) 1484 dev_vdbg(hsotg->dev, 1485 "Programming HC %d with split --> %s\n", 1486 hc_num, 1487 chan->complete_split ? "CSPLIT" : "SSPLIT"); 1488 if (chan->complete_split) 1489 hcsplt |= HCSPLT_COMPSPLT; 1490 hcsplt |= chan->xact_pos << HCSPLT_XACTPOS_SHIFT & 1491 HCSPLT_XACTPOS_MASK; 1492 hcsplt |= chan->hub_addr << HCSPLT_HUBADDR_SHIFT & 1493 HCSPLT_HUBADDR_MASK; 1494 hcsplt |= chan->hub_port << HCSPLT_PRTADDR_SHIFT & 1495 HCSPLT_PRTADDR_MASK; 1496 if (dbg_hc(chan)) { 1497 dev_vdbg(hsotg->dev, " comp split %d\n", 1498 chan->complete_split); 1499 dev_vdbg(hsotg->dev, " xact pos %d\n", 1500 chan->xact_pos); 1501 dev_vdbg(hsotg->dev, " hub addr %d\n", 1502 chan->hub_addr); 1503 dev_vdbg(hsotg->dev, " hub port %d\n", 1504 chan->hub_port); 1505 dev_vdbg(hsotg->dev, " is_in %d\n", 1506 chan->ep_is_in); 1507 dev_vdbg(hsotg->dev, " Max Pkt %d\n", 1508 chan->max_packet); 1509 dev_vdbg(hsotg->dev, " xferlen %d\n", 1510 chan->xfer_len); 1511 } 1512 } 1513 1514 DWC2_WRITE_4(hsotg, HCSPLT(hc_num), hcsplt); 1515} 1516 1517/** 1518 * dwc2_hc_halt() - Attempts to halt a host channel 1519 * 1520 * @hsotg: Controller register interface 1521 * @chan: Host channel to halt 1522 * @halt_status: Reason for halting the channel 1523 * 1524 * This function should only be called in Slave mode or to abort a transfer in 1525 * either Slave mode or DMA mode. Under normal circumstances in DMA mode, the 1526 * controller halts the channel when the transfer is complete or a condition 1527 * occurs that requires application intervention. 1528 * 1529 * In slave mode, checks for a free request queue entry, then sets the Channel 1530 * Enable and Channel Disable bits of the Host Channel Characteristics 1531 * register of the specified channel to intiate the halt. If there is no free 1532 * request queue entry, sets only the Channel Disable bit of the HCCHARn 1533 * register to flush requests for this channel. In the latter case, sets a 1534 * flag to indicate that the host channel needs to be halted when a request 1535 * queue slot is open. 1536 * 1537 * In DMA mode, always sets the Channel Enable and Channel Disable bits of the 1538 * HCCHARn register. The controller ensures there is space in the request 1539 * queue before submitting the halt request. 1540 * 1541 * Some time may elapse before the core flushes any posted requests for this 1542 * host channel and halts. The Channel Halted interrupt handler completes the 1543 * deactivation of the host channel. 1544 */ 1545void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, 1546 enum dwc2_halt_status halt_status) 1547{ 1548 u32 nptxsts, hptxsts, hcchar; 1549 1550 if (dbg_hc(chan)) 1551 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1552 if (halt_status == DWC2_HC_XFER_NO_HALT_STATUS) 1553 dev_err(hsotg->dev, "!!! halt_status = %d !!!\n", halt_status); 1554 1555 if (halt_status == DWC2_HC_XFER_URB_DEQUEUE || 1556 halt_status == DWC2_HC_XFER_AHB_ERR) { 1557 /* 1558 * Disable all channel interrupts except Ch Halted. The QTD 1559 * and QH state associated with this transfer has been cleared 1560 * (in the case of URB_DEQUEUE), so the channel needs to be 1561 * shut down carefully to prevent crashes. 1562 */ 1563 u32 hcintmsk = HCINTMSK_CHHLTD; 1564 1565 dev_vdbg(hsotg->dev, "dequeue/error\n"); 1566 DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), hcintmsk); 1567 1568 /* 1569 * Make sure no other interrupts besides halt are currently 1570 * pending. Handling another interrupt could cause a crash due 1571 * to the QTD and QH state. 1572 */ 1573 DWC2_WRITE_4(hsotg, HCINT(chan->hc_num), ~hcintmsk); 1574 1575 /* 1576 * Make sure the halt status is set to URB_DEQUEUE or AHB_ERR 1577 * even if the channel was already halted for some other 1578 * reason 1579 */ 1580 chan->halt_status = halt_status; 1581 1582 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 1583 if (!(hcchar & HCCHAR_CHENA)) { 1584 /* 1585 * The channel is either already halted or it hasn't 1586 * started yet. In DMA mode, the transfer may halt if 1587 * it finishes normally or a condition occurs that 1588 * requires driver intervention. Don't want to halt 1589 * the channel again. In either Slave or DMA mode, 1590 * it's possible that the transfer has been assigned 1591 * to a channel, but not started yet when an URB is 1592 * dequeued. Don't want to halt a channel that hasn't 1593 * started yet. 1594 */ 1595 return; 1596 } 1597 } 1598 if (chan->halt_pending) { 1599 /* 1600 * A halt has already been issued for this channel. This might 1601 * happen when a transfer is aborted by a higher level in 1602 * the stack. 1603 */ 1604 dev_vdbg(hsotg->dev, 1605 "*** %s: Channel %d, chan->halt_pending already set ***\n", 1606 __func__, chan->hc_num); 1607 return; 1608 } 1609 1610 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 1611 1612 /* No need to set the bit in DDMA for disabling the channel */ 1613 /* TODO check it everywhere channel is disabled */ 1614 if (hsotg->core_params->dma_desc_enable <= 0) { 1615 if (dbg_hc(chan)) 1616 dev_vdbg(hsotg->dev, "desc DMA disabled\n"); 1617 hcchar |= HCCHAR_CHENA; 1618 } else { 1619 if (dbg_hc(chan)) 1620 dev_dbg(hsotg->dev, "desc DMA enabled\n"); 1621 } 1622 hcchar |= HCCHAR_CHDIS; 1623 1624 if (hsotg->core_params->dma_enable <= 0) { 1625 if (dbg_hc(chan)) 1626 dev_vdbg(hsotg->dev, "DMA not enabled\n"); 1627 hcchar |= HCCHAR_CHENA; 1628 1629 /* Check for space in the request queue to issue the halt */ 1630 if (chan->ep_type == USB_ENDPOINT_XFER_CONTROL || 1631 chan->ep_type == USB_ENDPOINT_XFER_BULK) { 1632 dev_vdbg(hsotg->dev, "control/bulk\n"); 1633 nptxsts = DWC2_READ_4(hsotg, GNPTXSTS); 1634 if ((nptxsts & TXSTS_QSPCAVAIL_MASK) == 0) { 1635 dev_vdbg(hsotg->dev, "Disabling channel\n"); 1636 hcchar &= ~HCCHAR_CHENA; 1637 } 1638 } else { 1639 if (dbg_perio()) 1640 dev_vdbg(hsotg->dev, "isoc/intr\n"); 1641 hptxsts = DWC2_READ_4(hsotg, HPTXSTS); 1642 if ((hptxsts & TXSTS_QSPCAVAIL_MASK) == 0 || 1643 hsotg->queuing_high_bandwidth) { 1644 if (dbg_perio()) 1645 dev_vdbg(hsotg->dev, "Disabling channel\n"); 1646 hcchar &= ~HCCHAR_CHENA; 1647 } 1648 } 1649 } else { 1650 if (dbg_hc(chan)) 1651 dev_vdbg(hsotg->dev, "DMA enabled\n"); 1652 } 1653 1654 DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar); 1655 chan->halt_status = halt_status; 1656 1657 if (hcchar & HCCHAR_CHENA) { 1658 if (dbg_hc(chan)) 1659 dev_vdbg(hsotg->dev, "Channel enabled\n"); 1660 chan->halt_pending = 1; 1661 chan->halt_on_queue = 0; 1662 } else { 1663 if (dbg_hc(chan)) 1664 dev_vdbg(hsotg->dev, "Channel disabled\n"); 1665 chan->halt_on_queue = 1; 1666 } 1667 1668 if (dbg_hc(chan)) { 1669 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1670 chan->hc_num); 1671 dev_vdbg(hsotg->dev, " hcchar: 0x%08x\n", 1672 hcchar); 1673 dev_vdbg(hsotg->dev, " halt_pending: %d\n", 1674 chan->halt_pending); 1675 dev_vdbg(hsotg->dev, " halt_on_queue: %d\n", 1676 chan->halt_on_queue); 1677 dev_vdbg(hsotg->dev, " halt_status: %d\n", 1678 chan->halt_status); 1679 } 1680} 1681 1682/** 1683 * dwc2_hc_cleanup() - Clears the transfer state for a host channel 1684 * 1685 * @hsotg: Programming view of DWC_otg controller 1686 * @chan: Identifies the host channel to clean up 1687 * 1688 * This function is normally called after a transfer is done and the host 1689 * channel is being released 1690 */ 1691void dwc2_hc_cleanup(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) 1692{ 1693 u32 hcintmsk; 1694 1695 chan->xfer_started = 0; 1696 1697 /* 1698 * Clear channel interrupt enables and any unhandled channel interrupt 1699 * conditions 1700 */ 1701 DWC2_WRITE_4(hsotg, HCINTMSK(chan->hc_num), 0); 1702 hcintmsk = 0xffffffff; 1703 hcintmsk &= ~HCINTMSK_RESERVED14_31; 1704 DWC2_WRITE_4(hsotg, HCINT(chan->hc_num), hcintmsk); 1705} 1706 1707/** 1708 * dwc2_hc_set_even_odd_frame() - Sets the channel property that indicates in 1709 * which frame a periodic transfer should occur 1710 * 1711 * @hsotg: Programming view of DWC_otg controller 1712 * @chan: Identifies the host channel to set up and its properties 1713 * @hcchar: Current value of the HCCHAR register for the specified host channel 1714 * 1715 * This function has no effect on non-periodic transfers 1716 */ 1717static void dwc2_hc_set_even_odd_frame(struct dwc2_hsotg *hsotg, 1718 struct dwc2_host_chan *chan, u32 *hcchar) 1719{ 1720 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1721 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { 1722 /* 1 if _next_ frame is odd, 0 if it's even */ 1723 if (!(dwc2_hcd_get_frame_number(hsotg) & 0x1)) 1724 *hcchar |= HCCHAR_ODDFRM; 1725 } 1726} 1727 1728static void dwc2_set_pid_isoc(struct dwc2_host_chan *chan) 1729{ 1730 /* Set up the initial PID for the transfer */ 1731 if (chan->speed == USB_SPEED_HIGH) { 1732 if (chan->ep_is_in) { 1733 if (chan->multi_count == 1) 1734 chan->data_pid_start = DWC2_HC_PID_DATA0; 1735 else if (chan->multi_count == 2) 1736 chan->data_pid_start = DWC2_HC_PID_DATA1; 1737 else 1738 chan->data_pid_start = DWC2_HC_PID_DATA2; 1739 } else { 1740 if (chan->multi_count == 1) 1741 chan->data_pid_start = DWC2_HC_PID_DATA0; 1742 else 1743 chan->data_pid_start = DWC2_HC_PID_MDATA; 1744 } 1745 } else { 1746 chan->data_pid_start = DWC2_HC_PID_DATA0; 1747 } 1748} 1749 1750/** 1751 * dwc2_hc_write_packet() - Writes a packet into the Tx FIFO associated with 1752 * the Host Channel 1753 * 1754 * @hsotg: Programming view of DWC_otg controller 1755 * @chan: Information needed to initialize the host channel 1756 * 1757 * This function should only be called in Slave mode. For a channel associated 1758 * with a non-periodic EP, the non-periodic Tx FIFO is written. For a channel 1759 * associated with a periodic EP, the periodic Tx FIFO is written. 1760 * 1761 * Upon return the xfer_buf and xfer_count fields in chan are incremented by 1762 * the number of bytes written to the Tx FIFO. 1763 */ 1764static void dwc2_hc_write_packet(struct dwc2_hsotg *hsotg, 1765 struct dwc2_host_chan *chan) 1766{ 1767 u32 i; 1768 u32 remaining_count; 1769 u32 byte_count; 1770 u32 dword_count; 1771 u32 *data_buf = (u32 *)chan->xfer_buf; 1772 u32 data_fifo; 1773 1774 if (dbg_hc(chan)) 1775 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1776 1777 data_fifo = HCFIFO(chan->hc_num); 1778 1779 remaining_count = chan->xfer_len - chan->xfer_count; 1780 if (remaining_count > chan->max_packet) 1781 byte_count = chan->max_packet; 1782 else 1783 byte_count = remaining_count; 1784 1785 dword_count = (byte_count + 3) / 4; 1786 1787 if (((unsigned long)data_buf & 0x3) == 0) { 1788 /* xfer_buf is DWORD aligned */ 1789 for (i = 0; i < dword_count; i++, data_buf++) 1790 DWC2_WRITE_4(hsotg, data_fifo, *data_buf); 1791 } else { 1792 /* xfer_buf is not DWORD aligned */ 1793 for (i = 0; i < dword_count; i++, data_buf++) { 1794 u32 data = data_buf[0] | data_buf[1] << 8 | 1795 data_buf[2] << 16 | data_buf[3] << 24; 1796 DWC2_WRITE_4(hsotg, data_fifo, data); 1797 } 1798 } 1799 1800 chan->xfer_count += byte_count; 1801 chan->xfer_buf += byte_count; 1802} 1803 1804/** 1805 * dwc2_hc_start_transfer() - Does the setup for a data transfer for a host 1806 * channel and starts the transfer 1807 * 1808 * @hsotg: Programming view of DWC_otg controller 1809 * @chan: Information needed to initialize the host channel. The xfer_len value 1810 * may be reduced to accommodate the max widths of the XferSize and 1811 * PktCnt fields in the HCTSIZn register. The multi_count value may be 1812 * changed to reflect the final xfer_len value. 1813 * 1814 * This function may be called in either Slave mode or DMA mode. In Slave mode, 1815 * the caller must ensure that there is sufficient space in the request queue 1816 * and Tx Data FIFO. 1817 * 1818 * For an OUT transfer in Slave mode, it loads a data packet into the 1819 * appropriate FIFO. If necessary, additional data packets are loaded in the 1820 * Host ISR. 1821 * 1822 * For an IN transfer in Slave mode, a data packet is requested. The data 1823 * packets are unloaded from the Rx FIFO in the Host ISR. If necessary, 1824 * additional data packets are requested in the Host ISR. 1825 * 1826 * For a PING transfer in Slave mode, the Do Ping bit is set in the HCTSIZ 1827 * register along with a packet count of 1 and the channel is enabled. This 1828 * causes a single PING transaction to occur. Other fields in HCTSIZ are 1829 * simply set to 0 since no data transfer occurs in this case. 1830 * 1831 * For a PING transfer in DMA mode, the HCTSIZ register is initialized with 1832 * all the information required to perform the subsequent data transfer. In 1833 * addition, the Do Ping bit is set in the HCTSIZ register. In this case, the 1834 * controller performs the entire PING protocol, then starts the data 1835 * transfer. 1836 */ 1837void dwc2_hc_start_transfer(struct dwc2_hsotg *hsotg, 1838 struct dwc2_host_chan *chan) 1839{ 1840 u32 max_hc_xfer_size = hsotg->core_params->max_transfer_size; 1841 u16 max_hc_pkt_count = hsotg->core_params->max_packet_count; 1842 u32 hcchar; 1843 u32 hctsiz = 0; 1844 u16 num_packets; 1845 u32 ec_mc; 1846 1847 if (dbg_hc(chan)) 1848 dev_vdbg(hsotg->dev, "%s()\n", __func__); 1849 1850 if (chan->do_ping) { 1851 if (hsotg->core_params->dma_enable <= 0) { 1852 if (dbg_hc(chan)) 1853 dev_vdbg(hsotg->dev, "ping, no DMA\n"); 1854 dwc2_hc_do_ping(hsotg, chan); 1855 chan->xfer_started = 1; 1856 return; 1857 } else { 1858 if (dbg_hc(chan)) 1859 dev_vdbg(hsotg->dev, "ping, DMA\n"); 1860 hctsiz |= TSIZ_DOPNG; 1861 } 1862 } 1863 1864 if (chan->do_split) { 1865 if (dbg_hc(chan)) 1866 dev_vdbg(hsotg->dev, "split\n"); 1867 num_packets = 1; 1868 1869 if (chan->complete_split && !chan->ep_is_in) 1870 /* 1871 * For CSPLIT OUT Transfer, set the size to 0 so the 1872 * core doesn't expect any data written to the FIFO 1873 */ 1874 chan->xfer_len = 0; 1875 else if (chan->ep_is_in || chan->xfer_len > chan->max_packet) 1876 chan->xfer_len = chan->max_packet; 1877 else if (!chan->ep_is_in && chan->xfer_len > 188) 1878 chan->xfer_len = 188; 1879 1880 hctsiz |= chan->xfer_len << TSIZ_XFERSIZE_SHIFT & 1881 TSIZ_XFERSIZE_MASK; 1882 1883 /* For split set ec_mc for immediate retries */ 1884 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1885 chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1886 ec_mc = 3; 1887 else 1888 ec_mc = 1; 1889 } else { 1890 if (dbg_hc(chan)) 1891 dev_vdbg(hsotg->dev, "no split\n"); 1892 /* 1893 * Ensure that the transfer length and packet count will fit 1894 * in the widths allocated for them in the HCTSIZn register 1895 */ 1896 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1897 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { 1898 /* 1899 * Make sure the transfer size is no larger than one 1900 * (micro)frame's worth of data. (A check was done 1901 * when the periodic transfer was accepted to ensure 1902 * that a (micro)frame's worth of data can be 1903 * programmed into a channel.) 1904 */ 1905 u32 max_periodic_len = 1906 chan->multi_count * chan->max_packet; 1907 1908 if (chan->xfer_len > max_periodic_len) 1909 chan->xfer_len = max_periodic_len; 1910 } else if (chan->xfer_len > max_hc_xfer_size) { 1911 /* 1912 * Make sure that xfer_len is a multiple of max packet 1913 * size 1914 */ 1915 chan->xfer_len = 1916 max_hc_xfer_size - chan->max_packet + 1; 1917 } 1918 1919 if (chan->xfer_len > 0) { 1920 num_packets = (chan->xfer_len + chan->max_packet - 1) / 1921 chan->max_packet; 1922 if (num_packets > max_hc_pkt_count) { 1923 num_packets = max_hc_pkt_count; 1924 chan->xfer_len = num_packets * chan->max_packet; 1925 } 1926 } else { 1927 /* Need 1 packet for transfer length of 0 */ 1928 num_packets = 1; 1929 } 1930 1931 if (chan->ep_is_in) 1932 /* 1933 * Always program an integral # of max packets for IN 1934 * transfers 1935 */ 1936 chan->xfer_len = num_packets * chan->max_packet; 1937 1938 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 1939 chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1940 /* 1941 * Make sure that the multi_count field matches the 1942 * actual transfer length 1943 */ 1944 chan->multi_count = num_packets; 1945 1946 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC) 1947 dwc2_set_pid_isoc(chan); 1948 1949 hctsiz |= chan->xfer_len << TSIZ_XFERSIZE_SHIFT & 1950 TSIZ_XFERSIZE_MASK; 1951 1952 /* The ec_mc gets the multi_count for non-split */ 1953 ec_mc = chan->multi_count; 1954 } 1955 1956 chan->start_pkt_count = num_packets; 1957 hctsiz |= num_packets << TSIZ_PKTCNT_SHIFT & TSIZ_PKTCNT_MASK; 1958 hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT & 1959 TSIZ_SC_MC_PID_MASK; 1960 DWC2_WRITE_4(hsotg, HCTSIZ(chan->hc_num), hctsiz); 1961 if (dbg_hc(chan)) { 1962 dev_vdbg(hsotg->dev, "Wrote %08x to HCTSIZ(%d)\n", 1963 hctsiz, chan->hc_num); 1964 1965 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 1966 chan->hc_num); 1967 dev_vdbg(hsotg->dev, " Xfer Size: %d\n", 1968 (hctsiz & TSIZ_XFERSIZE_MASK) >> 1969 TSIZ_XFERSIZE_SHIFT); 1970 dev_vdbg(hsotg->dev, " Num Pkts: %d\n", 1971 (hctsiz & TSIZ_PKTCNT_MASK) >> 1972 TSIZ_PKTCNT_SHIFT); 1973 dev_vdbg(hsotg->dev, " Start PID: %d\n", 1974 (hctsiz & TSIZ_SC_MC_PID_MASK) >> 1975 TSIZ_SC_MC_PID_SHIFT); 1976 } 1977 1978 if (hsotg->core_params->dma_enable > 0) { 1979 dma_addr_t dma_addr; 1980 1981 if (chan->align_buf) { 1982 if (dbg_hc(chan)) 1983 dev_vdbg(hsotg->dev, "align_buf\n"); 1984 dma_addr = chan->align_buf; 1985 } else { 1986 dma_addr = chan->xfer_dma; 1987 } 1988 if (hsotg->hsotg_sc->sc_set_dma_addr == NULL) { 1989 DWC2_WRITE_4(hsotg, HCDMA(chan->hc_num), 1990 (u32)dma_addr); 1991 if (dbg_hc(chan)) 1992 dev_vdbg(hsotg->dev, 1993 "Wrote %08lx to HCDMA(%d)\n", 1994 (unsigned long)dma_addr, 1995 chan->hc_num); 1996 } else { 1997 (void)(*hsotg->hsotg_sc->sc_set_dma_addr)( 1998 hsotg->dev, dma_addr, chan->hc_num); 1999 } 2000 } 2001 2002 /* Start the split */ 2003 if (chan->do_split) { 2004 u32 hcsplt = DWC2_READ_4(hsotg, HCSPLT(chan->hc_num)); 2005 2006 hcsplt |= HCSPLT_SPLTENA; 2007 DWC2_WRITE_4(hsotg, HCSPLT(chan->hc_num), hcsplt); 2008 } 2009 2010 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 2011 hcchar &= ~HCCHAR_MULTICNT_MASK; 2012 hcchar |= (ec_mc << HCCHAR_MULTICNT_SHIFT) & HCCHAR_MULTICNT_MASK; 2013 dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); 2014 2015 if (hcchar & HCCHAR_CHDIS) 2016 dev_warn(hsotg->dev, 2017 "%s: chdis set, channel %d, hcchar 0x%08x\n", 2018 __func__, chan->hc_num, hcchar); 2019 2020 /* Set host channel enable after all other setup is complete */ 2021 hcchar |= HCCHAR_CHENA; 2022 hcchar &= ~HCCHAR_CHDIS; 2023 2024 if (dbg_hc(chan)) 2025 dev_vdbg(hsotg->dev, " Multi Cnt: %d\n", 2026 (hcchar & HCCHAR_MULTICNT_MASK) >> 2027 HCCHAR_MULTICNT_SHIFT); 2028 2029 DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar); 2030 if (dbg_hc(chan)) 2031 dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, 2032 chan->hc_num); 2033 2034 chan->xfer_started = 1; 2035 chan->requests++; 2036 2037 if (hsotg->core_params->dma_enable <= 0 && 2038 !chan->ep_is_in && chan->xfer_len > 0) 2039 /* Load OUT packet into the appropriate Tx FIFO */ 2040 dwc2_hc_write_packet(hsotg, chan); 2041} 2042 2043/** 2044 * dwc2_hc_start_transfer_ddma() - Does the setup for a data transfer for a 2045 * host channel and starts the transfer in Descriptor DMA mode 2046 * 2047 * @hsotg: Programming view of DWC_otg controller 2048 * @chan: Information needed to initialize the host channel 2049 * 2050 * Initializes HCTSIZ register. For a PING transfer the Do Ping bit is set. 2051 * Sets PID and NTD values. For periodic transfers initializes SCHED_INFO field 2052 * with micro-frame bitmap. 2053 * 2054 * Initializes HCDMA register with descriptor list address and CTD value then 2055 * starts the transfer via enabling the channel. 2056 */ 2057void dwc2_hc_start_transfer_ddma(struct dwc2_hsotg *hsotg, 2058 struct dwc2_host_chan *chan) 2059{ 2060 u32 hcchar; 2061 u32 hctsiz = 0; 2062 2063 if (chan->do_ping) 2064 hctsiz |= TSIZ_DOPNG; 2065 2066 if (chan->ep_type == USB_ENDPOINT_XFER_ISOC) 2067 dwc2_set_pid_isoc(chan); 2068 2069 /* Packet Count and Xfer Size are not used in Descriptor DMA mode */ 2070 hctsiz |= chan->data_pid_start << TSIZ_SC_MC_PID_SHIFT & 2071 TSIZ_SC_MC_PID_MASK; 2072 2073 /* 0 - 1 descriptor, 1 - 2 descriptors, etc */ 2074 hctsiz |= (chan->ntd - 1) << TSIZ_NTD_SHIFT & TSIZ_NTD_MASK; 2075 2076 /* Non-zero only for high-speed interrupt endpoints */ 2077 hctsiz |= chan->schinfo << TSIZ_SCHINFO_SHIFT & TSIZ_SCHINFO_MASK; 2078 2079 if (dbg_hc(chan)) { 2080 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 2081 chan->hc_num); 2082 dev_vdbg(hsotg->dev, " Start PID: %d\n", 2083 chan->data_pid_start); 2084 dev_vdbg(hsotg->dev, " NTD: %d\n", chan->ntd - 1); 2085 } 2086 2087 DWC2_WRITE_4(hsotg, HCTSIZ(chan->hc_num), hctsiz); 2088 2089 usb_syncmem(&chan->desc_list_usbdma, 0, chan->desc_list_sz, 2090 BUS_DMASYNC_PREWRITE); 2091 2092 if (hsotg->hsotg_sc->sc_set_dma_addr == NULL) { 2093 DWC2_WRITE_4(hsotg, HCDMA(chan->hc_num), chan->desc_list_addr); 2094 if (dbg_hc(chan)) 2095 dev_vdbg(hsotg->dev, "Wrote %pad to HCDMA(%d)\n", 2096 &chan->desc_list_addr, chan->hc_num); 2097 } else { 2098 (void)(*hsotg->hsotg_sc->sc_set_dma_addr)( 2099 hsotg->dev, chan->desc_list_addr, chan->hc_num); 2100 if (dbg_hc(chan)) 2101 dev_vdbg(hsotg->dev, "Wrote %pad to ext dma(%d)\n", 2102 &chan->desc_list_addr, chan->hc_num); 2103 } 2104 2105 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 2106 hcchar &= ~HCCHAR_MULTICNT_MASK; 2107 hcchar |= chan->multi_count << HCCHAR_MULTICNT_SHIFT & 2108 HCCHAR_MULTICNT_MASK; 2109 2110 if (hcchar & HCCHAR_CHDIS) 2111 dev_warn(hsotg->dev, 2112 "%s: chdis set, channel %d, hcchar 0x%08x\n", 2113 __func__, chan->hc_num, hcchar); 2114 2115 /* Set host channel enable after all other setup is complete */ 2116 hcchar |= HCCHAR_CHENA; 2117 hcchar &= ~HCCHAR_CHDIS; 2118 2119 if (dbg_hc(chan)) 2120 dev_vdbg(hsotg->dev, " Multi Cnt: %d\n", 2121 (hcchar & HCCHAR_MULTICNT_MASK) >> 2122 HCCHAR_MULTICNT_SHIFT); 2123 2124 DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar); 2125 if (dbg_hc(chan)) 2126 dev_vdbg(hsotg->dev, "Wrote %08x to HCCHAR(%d)\n", hcchar, 2127 chan->hc_num); 2128 2129 chan->xfer_started = 1; 2130 chan->requests++; 2131} 2132 2133/** 2134 * dwc2_hc_continue_transfer() - Continues a data transfer that was started by 2135 * a previous call to dwc2_hc_start_transfer() 2136 * 2137 * @hsotg: Programming view of DWC_otg controller 2138 * @chan: Information needed to initialize the host channel 2139 * 2140 * The caller must ensure there is sufficient space in the request queue and Tx 2141 * Data FIFO. This function should only be called in Slave mode. In DMA mode, 2142 * the controller acts autonomously to complete transfers programmed to a host 2143 * channel. 2144 * 2145 * For an OUT transfer, a new data packet is loaded into the appropriate FIFO 2146 * if there is any data remaining to be queued. For an IN transfer, another 2147 * data packet is always requested. For the SETUP phase of a control transfer, 2148 * this function does nothing. 2149 * 2150 * Return: 1 if a new request is queued, 0 if no more requests are required 2151 * for this transfer 2152 */ 2153int dwc2_hc_continue_transfer(struct dwc2_hsotg *hsotg, 2154 struct dwc2_host_chan *chan) 2155{ 2156 if (dbg_hc(chan)) 2157 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 2158 chan->hc_num); 2159 2160 if (chan->do_split) 2161 /* SPLITs always queue just once per channel */ 2162 return 0; 2163 2164 if (chan->data_pid_start == DWC2_HC_PID_SETUP) 2165 /* SETUPs are queued only once since they can't be NAK'd */ 2166 return 0; 2167 2168 if (chan->ep_is_in) { 2169 /* 2170 * Always queue another request for other IN transfers. If 2171 * back-to-back INs are issued and NAKs are received for both, 2172 * the driver may still be processing the first NAK when the 2173 * second NAK is received. When the interrupt handler clears 2174 * the NAK interrupt for the first NAK, the second NAK will 2175 * not be seen. So we can't depend on the NAK interrupt 2176 * handler to requeue a NAK'd request. Instead, IN requests 2177 * are issued each time this function is called. When the 2178 * transfer completes, the extra requests for the channel will 2179 * be flushed. 2180 */ 2181 u32 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 2182 2183 dwc2_hc_set_even_odd_frame(hsotg, chan, &hcchar); 2184 hcchar |= HCCHAR_CHENA; 2185 hcchar &= ~HCCHAR_CHDIS; 2186 if (dbg_hc(chan)) 2187 dev_vdbg(hsotg->dev, " IN xfer: hcchar = 0x%08x\n", 2188 hcchar); 2189 DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar); 2190 chan->requests++; 2191 return 1; 2192 } 2193 2194 /* OUT transfers */ 2195 2196 if (chan->xfer_count < chan->xfer_len) { 2197 if (chan->ep_type == USB_ENDPOINT_XFER_INT || 2198 chan->ep_type == USB_ENDPOINT_XFER_ISOC) { 2199 u32 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 2200 2201 dwc2_hc_set_even_odd_frame(hsotg, chan, 2202 &hcchar); 2203 } 2204 2205 /* Load OUT packet into the appropriate Tx FIFO */ 2206 dwc2_hc_write_packet(hsotg, chan); 2207 chan->requests++; 2208 return 1; 2209 } 2210 2211 return 0; 2212} 2213 2214/** 2215 * dwc2_hc_do_ping() - Starts a PING transfer 2216 * 2217 * @hsotg: Programming view of DWC_otg controller 2218 * @chan: Information needed to initialize the host channel 2219 * 2220 * This function should only be called in Slave mode. The Do Ping bit is set in 2221 * the HCTSIZ register, then the channel is enabled. 2222 */ 2223void dwc2_hc_do_ping(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan) 2224{ 2225 u32 hcchar; 2226 u32 hctsiz; 2227 2228 if (dbg_hc(chan)) 2229 dev_vdbg(hsotg->dev, "%s: Channel %d\n", __func__, 2230 chan->hc_num); 2231 2232 2233 hctsiz = TSIZ_DOPNG; 2234 hctsiz |= 1 << TSIZ_PKTCNT_SHIFT; 2235 DWC2_WRITE_4(hsotg, HCTSIZ(chan->hc_num), hctsiz); 2236 2237 hcchar = DWC2_READ_4(hsotg, HCCHAR(chan->hc_num)); 2238 hcchar |= HCCHAR_CHENA; 2239 hcchar &= ~HCCHAR_CHDIS; 2240 DWC2_WRITE_4(hsotg, HCCHAR(chan->hc_num), hcchar); 2241} 2242 2243/** 2244 * dwc2_calc_frame_interval() - Calculates the correct frame Interval value for 2245 * the HFIR register according to PHY type and speed 2246 * 2247 * @hsotg: Programming view of DWC_otg controller 2248 * 2249 * NOTE: The caller can modify the value of the HFIR register only after the 2250 * Port Enable bit of the Host Port Control and Status register (HPRT.EnaPort) 2251 * has been set 2252 */ 2253u32 dwc2_calc_frame_interval(struct dwc2_hsotg *hsotg) 2254{ 2255 u32 usbcfg; 2256 u32 hprt0; 2257 int clock = 60; /* default value */ 2258 2259 usbcfg = DWC2_READ_4(hsotg, GUSBCFG); 2260 hprt0 = DWC2_READ_4(hsotg, HPRT0); 2261 2262 if (!(usbcfg & GUSBCFG_PHYSEL) && (usbcfg & GUSBCFG_ULPI_UTMI_SEL) && 2263 !(usbcfg & GUSBCFG_PHYIF16)) 2264 clock = 60; 2265 if ((usbcfg & GUSBCFG_PHYSEL) && hsotg->hw_params.fs_phy_type == 2266 GHWCFG2_FS_PHY_TYPE_SHARED_ULPI) 2267 clock = 48; 2268 if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) && 2269 !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && (usbcfg & GUSBCFG_PHYIF16)) 2270 clock = 30; 2271 if (!(usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) && 2272 !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && !(usbcfg & GUSBCFG_PHYIF16)) 2273 clock = 60; 2274 if ((usbcfg & GUSBCFG_PHY_LP_CLK_SEL) && !(usbcfg & GUSBCFG_PHYSEL) && 2275 !(usbcfg & GUSBCFG_ULPI_UTMI_SEL) && (usbcfg & GUSBCFG_PHYIF16)) 2276 clock = 48; 2277 if ((usbcfg & GUSBCFG_PHYSEL) && !(usbcfg & GUSBCFG_PHYIF16) && 2278 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_SHARED_UTMI) 2279 clock = 48; 2280 if ((usbcfg & GUSBCFG_PHYSEL) && 2281 hsotg->hw_params.fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) 2282 clock = 48; 2283 2284 if ((hprt0 & HPRT0_SPD_MASK) >> HPRT0_SPD_SHIFT == HPRT0_SPD_HIGH_SPEED) 2285 /* High speed case */ 2286 return 125 * clock; 2287 else 2288 /* FS/LS case */ 2289 return 1000 * clock; 2290} 2291 2292/** 2293 * dwc2_read_packet() - Reads a packet from the Rx FIFO into the destination 2294 * buffer 2295 * 2296 * @core_if: Programming view of DWC_otg controller 2297 * @dest: Destination buffer for the packet 2298 * @bytes: Number of bytes to copy to the destination 2299 */ 2300void dwc2_read_packet(struct dwc2_hsotg *hsotg, u8 *dest, u16 bytes) 2301{ 2302 bus_size_t fifo = HCFIFO(0); 2303 u32 *data_buf = (u32 *)dest; 2304 int word_count = (bytes + 3) / 4; 2305 int i; 2306 2307 /* 2308 * Todo: Account for the case where dest is not dword aligned. This 2309 * requires reading data from the FIFO into a u32 temp buffer, then 2310 * moving it into the data buffer. 2311 */ 2312 2313 dev_vdbg(hsotg->dev, "%s(%p,%p,%d)\n", __func__, hsotg, dest, bytes); 2314 2315 for (i = 0; i < word_count; i++, data_buf++) 2316 *data_buf = DWC2_READ_4(hsotg, fifo); 2317} 2318 2319/** 2320 * dwc2_dump_host_registers() - Prints the host registers 2321 * 2322 * @hsotg: Programming view of DWC_otg controller 2323 * 2324 * NOTE: This function will be removed once the peripheral controller code 2325 * is integrated and the driver is stable 2326 */ 2327void dwc2_dump_host_registers(struct dwc2_hsotg *hsotg) 2328{ 2329#ifdef DWC2_DEBUG 2330 bus_size_t addr; 2331 int i; 2332 2333 dev_dbg(hsotg->dev, "Host Global Registers\n"); 2334 addr = HCFG; 2335 dev_dbg(hsotg->dev, "HCFG @0x%08lX : 0x%08X\n", 2336 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2337 addr = HFIR; 2338 dev_dbg(hsotg->dev, "HFIR @0x%08lX : 0x%08X\n", 2339 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2340 addr = HFNUM; 2341 dev_dbg(hsotg->dev, "HFNUM @0x%08lX : 0x%08X\n", 2342 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2343 addr = HPTXSTS; 2344 dev_dbg(hsotg->dev, "HPTXSTS @0x%08lX : 0x%08X\n", 2345 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2346 addr = HAINT; 2347 dev_dbg(hsotg->dev, "HAINT @0x%08lX : 0x%08X\n", 2348 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2349 addr = HAINTMSK; 2350 dev_dbg(hsotg->dev, "HAINTMSK @0x%08lX : 0x%08X\n", 2351 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2352 if (hsotg->core_params->dma_desc_enable > 0) { 2353 addr = HFLBADDR; 2354 dev_dbg(hsotg->dev, "HFLBADDR @0x%08lX : 0x%08X\n", 2355 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2356 } 2357 2358 addr = HPRT0; 2359 dev_dbg(hsotg->dev, "HPRT0 @0x%08lX : 0x%08X\n", 2360 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2361 2362 for (i = 0; i < hsotg->core_params->host_channels; i++) { 2363 dev_dbg(hsotg->dev, "Host Channel %d Specific Registers\n", i); 2364 addr = HCCHAR(i); 2365 dev_dbg(hsotg->dev, "HCCHAR @0x%08lX : 0x%08X\n", 2366 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2367 addr = HCSPLT(i); 2368 dev_dbg(hsotg->dev, "HCSPLT @0x%08lX : 0x%08X\n", 2369 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2370 addr = HCINT(i); 2371 dev_dbg(hsotg->dev, "HCINT @0x%08lX : 0x%08X\n", 2372 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2373 addr = HCINTMSK(i); 2374 dev_dbg(hsotg->dev, "HCINTMSK @0x%08lX : 0x%08X\n", 2375 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2376 addr = HCTSIZ(i); 2377 dev_dbg(hsotg->dev, "HCTSIZ @0x%08lX : 0x%08X\n", 2378 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2379 addr = HCDMA(i); 2380 dev_dbg(hsotg->dev, "HCDMA @0x%08lX : 0x%08X\n", 2381 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2382 if (hsotg->core_params->dma_desc_enable > 0) { 2383 addr = HCDMAB(i); 2384 dev_dbg(hsotg->dev, "HCDMAB @0x%08lX : 0x%08X\n", 2385 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2386 } 2387 } 2388#endif 2389} 2390 2391/** 2392 * dwc2_dump_global_registers() - Prints the core global registers 2393 * 2394 * @hsotg: Programming view of DWC_otg controller 2395 * 2396 * NOTE: This function will be removed once the peripheral controller code 2397 * is integrated and the driver is stable 2398 */ 2399void dwc2_dump_global_registers(struct dwc2_hsotg *hsotg) 2400{ 2401#ifdef DWC2_DEBUG 2402 bus_size_t addr; 2403 2404 dev_dbg(hsotg->dev, "Core Global Registers\n"); 2405 addr = GOTGCTL; 2406 dev_dbg(hsotg->dev, "GOTGCTL @0x%08lX : 0x%08X\n", 2407 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2408 addr = GOTGINT; 2409 dev_dbg(hsotg->dev, "GOTGINT @0x%08lX : 0x%08X\n", 2410 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2411 addr = GAHBCFG; 2412 dev_dbg(hsotg->dev, "GAHBCFG @0x%08lX : 0x%08X\n", 2413 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2414 addr = GUSBCFG; 2415 dev_dbg(hsotg->dev, "GUSBCFG @0x%08lX : 0x%08X\n", 2416 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2417 addr = GRSTCTL; 2418 dev_dbg(hsotg->dev, "GRSTCTL @0x%08lX : 0x%08X\n", 2419 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2420 addr = GINTSTS; 2421 dev_dbg(hsotg->dev, "GINTSTS @0x%08lX : 0x%08X\n", 2422 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2423 addr = GINTMSK; 2424 dev_dbg(hsotg->dev, "GINTMSK @0x%08lX : 0x%08X\n", 2425 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2426 addr = GRXSTSR; 2427 dev_dbg(hsotg->dev, "GRXSTSR @0x%08lX : 0x%08X\n", 2428 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2429 addr = GRXFSIZ; 2430 dev_dbg(hsotg->dev, "GRXFSIZ @0x%08lX : 0x%08X\n", 2431 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2432 addr = GNPTXFSIZ; 2433 dev_dbg(hsotg->dev, "GNPTXFSIZ @0x%08lX : 0x%08X\n", 2434 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2435 addr = GNPTXSTS; 2436 dev_dbg(hsotg->dev, "GNPTXSTS @0x%08lX : 0x%08X\n", 2437 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2438 addr = GI2CCTL; 2439 dev_dbg(hsotg->dev, "GI2CCTL @0x%08lX : 0x%08X\n", 2440 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2441 addr = GPVNDCTL; 2442 dev_dbg(hsotg->dev, "GPVNDCTL @0x%08lX : 0x%08X\n", 2443 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2444 addr = GGPIO; 2445 dev_dbg(hsotg->dev, "GGPIO @0x%08lX : 0x%08X\n", 2446 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2447 addr = GUID; 2448 dev_dbg(hsotg->dev, "GUID @0x%08lX : 0x%08X\n", 2449 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2450 addr = GSNPSID; 2451 dev_dbg(hsotg->dev, "GSNPSID @0x%08lX : 0x%08X\n", 2452 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2453 addr = GHWCFG1; 2454 dev_dbg(hsotg->dev, "GHWCFG1 @0x%08lX : 0x%08X\n", 2455 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2456 addr = GHWCFG2; 2457 dev_dbg(hsotg->dev, "GHWCFG2 @0x%08lX : 0x%08X\n", 2458 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2459 addr = GHWCFG3; 2460 dev_dbg(hsotg->dev, "GHWCFG3 @0x%08lX : 0x%08X\n", 2461 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2462 addr = GHWCFG4; 2463 dev_dbg(hsotg->dev, "GHWCFG4 @0x%08lX : 0x%08X\n", 2464 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2465 addr = GLPMCFG; 2466 dev_dbg(hsotg->dev, "GLPMCFG @0x%08lX : 0x%08X\n", 2467 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2468 addr = GPWRDN; 2469 dev_dbg(hsotg->dev, "GPWRDN @0x%08lX : 0x%08X\n", 2470 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2471 addr = GDFIFOCFG; 2472 dev_dbg(hsotg->dev, "GDFIFOCFG @0x%08lX : 0x%08X\n", 2473 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2474 addr = HPTXFSIZ; 2475 dev_dbg(hsotg->dev, "HPTXFSIZ @0x%08lX : 0x%08X\n", 2476 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2477 2478 addr = PCGCTL; 2479 dev_dbg(hsotg->dev, "PCGCTL @0x%08lX : 0x%08X\n", 2480 (unsigned long)addr, DWC2_READ_4(hsotg, addr)); 2481#endif 2482} 2483 2484/** 2485 * dwc2_flush_tx_fifo() - Flushes a Tx FIFO 2486 * 2487 * @hsotg: Programming view of DWC_otg controller 2488 * @num: Tx FIFO to flush 2489 */ 2490void dwc2_flush_tx_fifo(struct dwc2_hsotg *hsotg, const int num) 2491{ 2492 u32 greset; 2493 int count = 0; 2494 2495 dev_vdbg(hsotg->dev, "Flush Tx FIFO %d\n", num); 2496 2497 greset = GRSTCTL_TXFFLSH; 2498 greset |= num << GRSTCTL_TXFNUM_SHIFT & GRSTCTL_TXFNUM_MASK; 2499 DWC2_WRITE_4(hsotg, GRSTCTL, greset); 2500 2501 do { 2502 greset = DWC2_READ_4(hsotg, GRSTCTL); 2503 if (++count > 10000) { 2504 dev_warn(hsotg->dev, 2505 "%s() HANG! GRSTCTL=%0x GNPTXSTS=0x%08x\n", 2506 __func__, greset, 2507 DWC2_READ_4(hsotg, GNPTXSTS)); 2508 break; 2509 } 2510 udelay(1); 2511 } while (greset & GRSTCTL_TXFFLSH); 2512 2513 /* Wait for at least 3 PHY Clocks */ 2514 udelay(1); 2515} 2516 2517/** 2518 * dwc2_flush_rx_fifo() - Flushes the Rx FIFO 2519 * 2520 * @hsotg: Programming view of DWC_otg controller 2521 */ 2522void dwc2_flush_rx_fifo(struct dwc2_hsotg *hsotg) 2523{ 2524 u32 greset; 2525 int count = 0; 2526 2527 dev_vdbg(hsotg->dev, "%s()\n", __func__); 2528 2529 greset = GRSTCTL_RXFFLSH; 2530 DWC2_WRITE_4(hsotg, GRSTCTL, greset); 2531 2532 do { 2533 greset = DWC2_READ_4(hsotg, GRSTCTL); 2534 if (++count > 10000) { 2535 dev_warn(hsotg->dev, "%s() HANG! GRSTCTL=%0x\n", 2536 __func__, greset); 2537 break; 2538 } 2539 udelay(1); 2540 } while (greset & GRSTCTL_RXFFLSH); 2541 2542 /* Wait for at least 3 PHY Clocks */ 2543 udelay(1); 2544} 2545 2546#define DWC2_OUT_OF_BOUNDS(a, b, c) ((a) < (b) || (a) > (c)) 2547 2548/* Parameter access functions */ 2549void dwc2_set_param_otg_cap(struct dwc2_hsotg *hsotg, int val) 2550{ 2551 int valid = 1; 2552 2553 switch (val) { 2554 case DWC2_CAP_PARAM_HNP_SRP_CAPABLE: 2555 if (hsotg->hw_params.op_mode != GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) 2556 valid = 0; 2557 break; 2558 case DWC2_CAP_PARAM_SRP_ONLY_CAPABLE: 2559 switch (hsotg->hw_params.op_mode) { 2560 case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE: 2561 case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE: 2562 case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE: 2563 case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST: 2564 break; 2565 default: 2566 valid = 0; 2567 break; 2568 } 2569 break; 2570 case DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE: 2571 /* always valid */ 2572 break; 2573 default: 2574 valid = 0; 2575 break; 2576 } 2577 2578 if (!valid) { 2579 if (val >= 0) 2580 dev_err(hsotg->dev, 2581 "%d invalid for otg_cap parameter. Check HW configuration.\n", 2582 val); 2583 switch (hsotg->hw_params.op_mode) { 2584 case GHWCFG2_OP_MODE_HNP_SRP_CAPABLE: 2585 val = DWC2_CAP_PARAM_HNP_SRP_CAPABLE; 2586 break; 2587 case GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE: 2588 case GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE: 2589 case GHWCFG2_OP_MODE_SRP_CAPABLE_HOST: 2590 val = DWC2_CAP_PARAM_SRP_ONLY_CAPABLE; 2591 break; 2592 default: 2593 val = DWC2_CAP_PARAM_NO_HNP_SRP_CAPABLE; 2594 break; 2595 } 2596 dev_dbg(hsotg->dev, "Setting otg_cap to %d\n", val); 2597 } 2598 2599 hsotg->core_params->otg_cap = val; 2600} 2601 2602void dwc2_set_param_dma_enable(struct dwc2_hsotg *hsotg, int val) 2603{ 2604 int valid = 1; 2605 2606 if (val > 0 && hsotg->hw_params.arch == GHWCFG2_SLAVE_ONLY_ARCH) 2607 valid = 0; 2608 if (val < 0) 2609 valid = 0; 2610 2611 if (!valid) { 2612 if (val >= 0) 2613 dev_err(hsotg->dev, 2614 "%d invalid for dma_enable parameter. Check HW configuration.\n", 2615 val); 2616 val = hsotg->hw_params.arch != GHWCFG2_SLAVE_ONLY_ARCH; 2617 dev_dbg(hsotg->dev, "Setting dma_enable to %d\n", val); 2618 } 2619 2620 hsotg->core_params->dma_enable = val; 2621} 2622 2623void dwc2_set_param_dma_desc_enable(struct dwc2_hsotg *hsotg, int val) 2624{ 2625 int valid = 1; 2626 2627 if (val > 0 && (hsotg->core_params->dma_enable <= 0 || 2628 !hsotg->hw_params.dma_desc_enable)) 2629 valid = 0; 2630 if (val < 0) 2631 valid = 0; 2632 2633 if (!valid) { 2634 if (val >= 0) 2635 dev_err(hsotg->dev, 2636 "%d invalid for dma_desc_enable parameter. Check HW configuration.\n", 2637 val); 2638 val = (hsotg->core_params->dma_enable > 0 && 2639 hsotg->hw_params.dma_desc_enable); 2640 dev_dbg(hsotg->dev, "Setting dma_desc_enable to %d\n", val); 2641 } 2642 2643 hsotg->core_params->dma_desc_enable = val; 2644} 2645 2646void dwc2_set_param_dma_desc_fs_enable(struct dwc2_hsotg *hsotg, int val) 2647{ 2648 int valid = 1; 2649 2650 if (val > 0 && (hsotg->core_params->dma_enable <= 0 || 2651 !hsotg->hw_params.dma_desc_enable)) 2652 valid = 0; 2653 if (val < 0) 2654 valid = 0; 2655 2656 if (!valid) { 2657 if (val >= 0) 2658 dev_err(hsotg->dev, 2659 "%d invalid for dma_desc_fs_enable parameter. Check HW configuration.\n", 2660 val); 2661 val = (hsotg->core_params->dma_enable > 0 && 2662 hsotg->hw_params.dma_desc_enable); 2663 } 2664 2665 hsotg->core_params->dma_desc_fs_enable = val; 2666 dev_dbg(hsotg->dev, "Setting dma_desc_fs_enable to %d\n", val); 2667} 2668 2669void dwc2_set_param_host_support_fs_ls_low_power(struct dwc2_hsotg *hsotg, 2670 int val) 2671{ 2672 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2673 if (val >= 0) { 2674 dev_err(hsotg->dev, 2675 "Wrong value for host_support_fs_low_power\n"); 2676 dev_err(hsotg->dev, 2677 "host_support_fs_low_power must be 0 or 1\n"); 2678 } 2679 val = 0; 2680 dev_dbg(hsotg->dev, 2681 "Setting host_support_fs_low_power to %d\n", val); 2682 } 2683 2684 hsotg->core_params->host_support_fs_ls_low_power = val; 2685} 2686 2687void dwc2_set_param_enable_dynamic_fifo(struct dwc2_hsotg *hsotg, int val) 2688{ 2689 int valid = 1; 2690 2691 if (val > 0 && !hsotg->hw_params.enable_dynamic_fifo) 2692 valid = 0; 2693 if (val < 0) 2694 valid = 0; 2695 2696 if (!valid) { 2697 if (val >= 0) 2698 dev_err(hsotg->dev, 2699 "%d invalid for enable_dynamic_fifo parameter. Check HW configuration.\n", 2700 val); 2701 val = hsotg->hw_params.enable_dynamic_fifo; 2702 dev_dbg(hsotg->dev, "Setting enable_dynamic_fifo to %d\n", val); 2703 } 2704 2705 hsotg->core_params->enable_dynamic_fifo = val; 2706} 2707 2708void dwc2_set_param_host_rx_fifo_size(struct dwc2_hsotg *hsotg, int val) 2709{ 2710 int valid = 1; 2711 2712 if (val < 16 || val > hsotg->hw_params.host_rx_fifo_size) 2713 valid = 0; 2714 2715 if (!valid) { 2716 if (val >= 0) 2717 dev_err(hsotg->dev, 2718 "%d invalid for host_rx_fifo_size. Check HW configuration.\n", 2719 val); 2720 val = hsotg->hw_params.host_rx_fifo_size; 2721 dev_dbg(hsotg->dev, "Setting host_rx_fifo_size to %d\n", val); 2722 } 2723 2724 hsotg->core_params->host_rx_fifo_size = val; 2725} 2726 2727void dwc2_set_param_host_nperio_tx_fifo_size(struct dwc2_hsotg *hsotg, int val) 2728{ 2729 int valid = 1; 2730 2731 if (val < 16 || val > hsotg->hw_params.host_nperio_tx_fifo_size) 2732 valid = 0; 2733 2734 if (!valid) { 2735 if (val >= 0) 2736 dev_err(hsotg->dev, 2737 "%d invalid for host_nperio_tx_fifo_size. Check HW configuration.\n", 2738 val); 2739 val = hsotg->hw_params.host_nperio_tx_fifo_size; 2740 dev_dbg(hsotg->dev, "Setting host_nperio_tx_fifo_size to %d\n", 2741 val); 2742 } 2743 2744 hsotg->core_params->host_nperio_tx_fifo_size = val; 2745} 2746 2747void dwc2_set_param_host_perio_tx_fifo_size(struct dwc2_hsotg *hsotg, int val) 2748{ 2749 int valid = 1; 2750 2751 if (val < 16 || val > hsotg->hw_params.host_perio_tx_fifo_size) 2752 valid = 0; 2753 2754 if (!valid) { 2755 if (val >= 0) 2756 dev_err(hsotg->dev, 2757 "%d invalid for host_perio_tx_fifo_size. Check HW configuration.\n", 2758 val); 2759 val = hsotg->hw_params.host_perio_tx_fifo_size; 2760 dev_dbg(hsotg->dev, "Setting host_perio_tx_fifo_size to %d\n", 2761 val); 2762 } 2763 2764 hsotg->core_params->host_perio_tx_fifo_size = val; 2765} 2766 2767void dwc2_set_param_max_transfer_size(struct dwc2_hsotg *hsotg, int val) 2768{ 2769 int valid = 1; 2770 2771 if (val < 2047 || val > hsotg->hw_params.max_transfer_size) 2772 valid = 0; 2773 2774 if (!valid) { 2775 if (val >= 0) 2776 dev_err(hsotg->dev, 2777 "%d invalid for max_transfer_size. Check HW configuration.\n", 2778 val); 2779 val = hsotg->hw_params.max_transfer_size; 2780 dev_dbg(hsotg->dev, "Setting max_transfer_size to %d\n", val); 2781 } 2782 2783 hsotg->core_params->max_transfer_size = val; 2784} 2785 2786void dwc2_set_param_max_packet_count(struct dwc2_hsotg *hsotg, int val) 2787{ 2788 int valid = 1; 2789 2790 if (val < 15 || val > hsotg->hw_params.max_packet_count) 2791 valid = 0; 2792 2793 if (!valid) { 2794 if (val >= 0) 2795 dev_err(hsotg->dev, 2796 "%d invalid for max_packet_count. Check HW configuration.\n", 2797 val); 2798 val = hsotg->hw_params.max_packet_count; 2799 dev_dbg(hsotg->dev, "Setting max_packet_count to %d\n", val); 2800 } 2801 2802 hsotg->core_params->max_packet_count = val; 2803} 2804 2805void dwc2_set_param_host_channels(struct dwc2_hsotg *hsotg, int val) 2806{ 2807 int valid = 1; 2808 2809 if (val < 1 || val > hsotg->hw_params.host_channels) 2810 valid = 0; 2811 2812 if (!valid) { 2813 if (val >= 0) 2814 dev_err(hsotg->dev, 2815 "%d invalid for host_channels. Check HW configuration.\n", 2816 val); 2817 val = hsotg->hw_params.host_channels; 2818 dev_dbg(hsotg->dev, "Setting host_channels to %d\n", val); 2819 } 2820 2821 hsotg->core_params->host_channels = val; 2822} 2823 2824void dwc2_set_param_phy_type(struct dwc2_hsotg *hsotg, int val) 2825{ 2826 int valid = 0; 2827 u32 hs_phy_type, fs_phy_type; 2828 2829 if (DWC2_OUT_OF_BOUNDS(val, DWC2_PHY_TYPE_PARAM_FS, 2830 DWC2_PHY_TYPE_PARAM_ULPI)) { 2831 if (val >= 0) { 2832 dev_err(hsotg->dev, "Wrong value for phy_type\n"); 2833 dev_err(hsotg->dev, "phy_type must be 0, 1 or 2\n"); 2834 } 2835 2836 valid = 0; 2837 } 2838 2839 hs_phy_type = hsotg->hw_params.hs_phy_type; 2840 fs_phy_type = hsotg->hw_params.fs_phy_type; 2841 if (val == DWC2_PHY_TYPE_PARAM_UTMI && 2842 (hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI || 2843 hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI)) 2844 valid = 1; 2845 else if (val == DWC2_PHY_TYPE_PARAM_ULPI && 2846 (hs_phy_type == GHWCFG2_HS_PHY_TYPE_ULPI || 2847 hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI)) 2848 valid = 1; 2849 else if (val == DWC2_PHY_TYPE_PARAM_FS && 2850 fs_phy_type == GHWCFG2_FS_PHY_TYPE_DEDICATED) 2851 valid = 1; 2852 2853 if (!valid) { 2854 if (val >= 0) 2855 dev_err(hsotg->dev, 2856 "%d invalid for phy_type. Check HW configuration.\n", 2857 val); 2858 val = DWC2_PHY_TYPE_PARAM_FS; 2859 if (hs_phy_type != GHWCFG2_HS_PHY_TYPE_NOT_SUPPORTED) { 2860 if (hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI || 2861 hs_phy_type == GHWCFG2_HS_PHY_TYPE_UTMI_ULPI) 2862 val = DWC2_PHY_TYPE_PARAM_UTMI; 2863 else 2864 val = DWC2_PHY_TYPE_PARAM_ULPI; 2865 } 2866 dev_dbg(hsotg->dev, "Setting phy_type to %d\n", val); 2867 } 2868 2869 hsotg->core_params->phy_type = val; 2870} 2871 2872static int dwc2_get_param_phy_type(struct dwc2_hsotg *hsotg) 2873{ 2874 return hsotg->core_params->phy_type; 2875} 2876 2877void dwc2_set_param_speed(struct dwc2_hsotg *hsotg, int val) 2878{ 2879 int valid = 1; 2880 2881 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2882 if (val >= 0) { 2883 dev_err(hsotg->dev, "Wrong value for speed parameter\n"); 2884 dev_err(hsotg->dev, "max_speed parameter must be 0 or 1\n"); 2885 } 2886 valid = 0; 2887 } 2888 2889 if (val == DWC2_SPEED_PARAM_HIGH && 2890 dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS) 2891 valid = 0; 2892 2893 if (!valid) { 2894 if (val >= 0) 2895 dev_err(hsotg->dev, 2896 "%d invalid for speed parameter. Check HW configuration.\n", 2897 val); 2898 val = dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS ? 2899 DWC2_SPEED_PARAM_FULL : DWC2_SPEED_PARAM_HIGH; 2900 dev_dbg(hsotg->dev, "Setting speed to %d\n", val); 2901 } 2902 2903 hsotg->core_params->speed = val; 2904} 2905 2906void dwc2_set_param_host_ls_low_power_phy_clk(struct dwc2_hsotg *hsotg, int val) 2907{ 2908 int valid = 1; 2909 2910 if (DWC2_OUT_OF_BOUNDS(val, DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ, 2911 DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ)) { 2912 if (val >= 0) { 2913 dev_err(hsotg->dev, 2914 "Wrong value for host_ls_low_power_phy_clk parameter\n"); 2915 dev_err(hsotg->dev, 2916 "host_ls_low_power_phy_clk must be 0 or 1\n"); 2917 } 2918 valid = 0; 2919 } 2920 2921 if (val == DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ && 2922 dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS) 2923 valid = 0; 2924 2925 if (!valid) { 2926 if (val >= 0) 2927 dev_err(hsotg->dev, 2928 "%d invalid for host_ls_low_power_phy_clk. Check HW configuration.\n", 2929 val); 2930 val = dwc2_get_param_phy_type(hsotg) == DWC2_PHY_TYPE_PARAM_FS 2931 ? DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ 2932 : DWC2_HOST_LS_LOW_POWER_PHY_CLK_PARAM_48MHZ; 2933 dev_dbg(hsotg->dev, "Setting host_ls_low_power_phy_clk to %d\n", 2934 val); 2935 } 2936 2937 hsotg->core_params->host_ls_low_power_phy_clk = val; 2938} 2939 2940void dwc2_set_param_phy_ulpi_ddr(struct dwc2_hsotg *hsotg, int val) 2941{ 2942 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2943 if (val >= 0) { 2944 dev_err(hsotg->dev, "Wrong value for phy_ulpi_ddr\n"); 2945 dev_err(hsotg->dev, "phy_upli_ddr must be 0 or 1\n"); 2946 } 2947 val = 0; 2948 dev_dbg(hsotg->dev, "Setting phy_upli_ddr to %d\n", val); 2949 } 2950 2951 hsotg->core_params->phy_ulpi_ddr = val; 2952} 2953 2954void dwc2_set_param_phy_ulpi_ext_vbus(struct dwc2_hsotg *hsotg, int val) 2955{ 2956 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 2957 if (val >= 0) { 2958 dev_err(hsotg->dev, 2959 "Wrong value for phy_ulpi_ext_vbus\n"); 2960 dev_err(hsotg->dev, 2961 "phy_ulpi_ext_vbus must be 0 or 1\n"); 2962 } 2963 val = 0; 2964 dev_dbg(hsotg->dev, "Setting phy_ulpi_ext_vbus to %d\n", val); 2965 } 2966 2967 hsotg->core_params->phy_ulpi_ext_vbus = val; 2968} 2969 2970void dwc2_set_param_phy_utmi_width(struct dwc2_hsotg *hsotg, int val) 2971{ 2972 int valid = 0; 2973 2974 switch (hsotg->hw_params.utmi_phy_data_width) { 2975 case GHWCFG4_UTMI_PHY_DATA_WIDTH_8: 2976 valid = (val == 8); 2977 break; 2978 case GHWCFG4_UTMI_PHY_DATA_WIDTH_16: 2979 valid = (val == 16); 2980 break; 2981 case GHWCFG4_UTMI_PHY_DATA_WIDTH_8_OR_16: 2982 valid = (val == 8 || val == 16); 2983 break; 2984 } 2985 2986 if (!valid) { 2987 if (val >= 0) { 2988 dev_err(hsotg->dev, 2989 "%d invalid for phy_utmi_width. Check HW configuration.\n", 2990 val); 2991 } 2992 val = (hsotg->hw_params.utmi_phy_data_width == 2993 GHWCFG4_UTMI_PHY_DATA_WIDTH_8) ? 8 : 16; 2994 dev_dbg(hsotg->dev, "Setting phy_utmi_width to %d\n", val); 2995 } 2996 2997 hsotg->core_params->phy_utmi_width = val; 2998} 2999 3000void dwc2_set_param_ulpi_fs_ls(struct dwc2_hsotg *hsotg, int val) 3001{ 3002 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3003 if (val >= 0) { 3004 dev_err(hsotg->dev, "Wrong value for ulpi_fs_ls\n"); 3005 dev_err(hsotg->dev, "ulpi_fs_ls must be 0 or 1\n"); 3006 } 3007 val = 0; 3008 dev_dbg(hsotg->dev, "Setting ulpi_fs_ls to %d\n", val); 3009 } 3010 3011 hsotg->core_params->ulpi_fs_ls = val; 3012} 3013 3014void dwc2_set_param_ts_dline(struct dwc2_hsotg *hsotg, int val) 3015{ 3016 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3017 if (val >= 0) { 3018 dev_err(hsotg->dev, "Wrong value for ts_dline\n"); 3019 dev_err(hsotg->dev, "ts_dline must be 0 or 1\n"); 3020 } 3021 val = 0; 3022 dev_dbg(hsotg->dev, "Setting ts_dline to %d\n", val); 3023 } 3024 3025 hsotg->core_params->ts_dline = val; 3026} 3027 3028void dwc2_set_param_i2c_enable(struct dwc2_hsotg *hsotg, int val) 3029{ 3030 int valid = 1; 3031 3032 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3033 if (val >= 0) { 3034 dev_err(hsotg->dev, "Wrong value for i2c_enable\n"); 3035 dev_err(hsotg->dev, "i2c_enable must be 0 or 1\n"); 3036 } 3037 3038 valid = 0; 3039 } 3040 3041 if (val == 1 && !(hsotg->hw_params.i2c_enable)) 3042 valid = 0; 3043 3044 if (!valid) { 3045 if (val >= 0) 3046 dev_err(hsotg->dev, 3047 "%d invalid for i2c_enable. Check HW configuration.\n", 3048 val); 3049 val = hsotg->hw_params.i2c_enable; 3050 dev_dbg(hsotg->dev, "Setting i2c_enable to %d\n", val); 3051 } 3052 3053 hsotg->core_params->i2c_enable = val; 3054} 3055 3056void dwc2_set_param_en_multiple_tx_fifo(struct dwc2_hsotg *hsotg, int val) 3057{ 3058 int valid = 1; 3059 3060 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3061 if (val >= 0) { 3062 dev_err(hsotg->dev, 3063 "Wrong value for en_multiple_tx_fifo,\n"); 3064 dev_err(hsotg->dev, 3065 "en_multiple_tx_fifo must be 0 or 1\n"); 3066 } 3067 valid = 0; 3068 } 3069 3070 if (val == 1 && !hsotg->hw_params.en_multiple_tx_fifo) 3071 valid = 0; 3072 3073 if (!valid) { 3074 if (val >= 0) 3075 dev_err(hsotg->dev, 3076 "%d invalid for parameter en_multiple_tx_fifo. Check HW configuration.\n", 3077 val); 3078 val = hsotg->hw_params.en_multiple_tx_fifo; 3079 dev_dbg(hsotg->dev, "Setting en_multiple_tx_fifo to %d\n", val); 3080 } 3081 3082 hsotg->core_params->en_multiple_tx_fifo = val; 3083} 3084 3085void dwc2_set_param_reload_ctl(struct dwc2_hsotg *hsotg, int val) 3086{ 3087 int valid = 1; 3088 3089 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3090 if (val >= 0) { 3091 dev_err(hsotg->dev, 3092 "'%d' invalid for parameter reload_ctl\n", val); 3093 dev_err(hsotg->dev, "reload_ctl must be 0 or 1\n"); 3094 } 3095 valid = 0; 3096 } 3097 3098 if (val == 1 && hsotg->hw_params.snpsid < DWC2_CORE_REV_2_92a) 3099 valid = 0; 3100 3101 if (!valid) { 3102 if (val >= 0) 3103 dev_err(hsotg->dev, 3104 "%d invalid for parameter reload_ctl. Check HW configuration.\n", 3105 val); 3106 val = hsotg->hw_params.snpsid >= DWC2_CORE_REV_2_92a; 3107 dev_dbg(hsotg->dev, "Setting reload_ctl to %d\n", val); 3108 } 3109 3110 hsotg->core_params->reload_ctl = val; 3111} 3112 3113void dwc2_set_param_ahbcfg(struct dwc2_hsotg *hsotg, int val) 3114{ 3115 if (val != -1) 3116 hsotg->core_params->ahbcfg = val; 3117 else 3118 hsotg->core_params->ahbcfg = GAHBCFG_HBSTLEN_INCR4 << 3119 GAHBCFG_HBSTLEN_SHIFT; 3120} 3121 3122void dwc2_set_param_otg_ver(struct dwc2_hsotg *hsotg, int val) 3123{ 3124 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3125 if (val >= 0) { 3126 dev_err(hsotg->dev, 3127 "'%d' invalid for parameter otg_ver\n", val); 3128 dev_err(hsotg->dev, 3129 "otg_ver must be 0 (for OTG 1.3 support) or 1 (for OTG 2.0 support)\n"); 3130 } 3131 val = 0; 3132 dev_dbg(hsotg->dev, "Setting otg_ver to %d\n", val); 3133 } 3134 3135 hsotg->core_params->otg_ver = val; 3136} 3137 3138static void dwc2_set_param_uframe_sched(struct dwc2_hsotg *hsotg, int val) 3139{ 3140 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3141 if (val >= 0) { 3142 dev_err(hsotg->dev, 3143 "'%d' invalid for parameter uframe_sched\n", 3144 val); 3145 dev_err(hsotg->dev, "uframe_sched must be 0 or 1\n"); 3146 } 3147 val = 1; 3148 dev_dbg(hsotg->dev, "Setting uframe_sched to %d\n", val); 3149 } 3150 3151 hsotg->core_params->uframe_sched = val; 3152} 3153 3154static void dwc2_set_param_external_id_pin_ctl(struct dwc2_hsotg *hsotg, 3155 int val) 3156{ 3157 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3158 if (val >= 0) { 3159 dev_err(hsotg->dev, 3160 "'%d' invalid for parameter external_id_pin_ctl\n", 3161 val); 3162 dev_err(hsotg->dev, "external_id_pin_ctl must be 0 or 1\n"); 3163 } 3164 val = 0; 3165 dev_dbg(hsotg->dev, "Setting external_id_pin_ctl to %d\n", val); 3166 } 3167 3168 hsotg->core_params->external_id_pin_ctl = val; 3169} 3170 3171static void dwc2_set_param_hibernation(struct dwc2_hsotg *hsotg, 3172 int val) 3173{ 3174 if (DWC2_OUT_OF_BOUNDS(val, 0, 1)) { 3175 if (val >= 0) { 3176 dev_err(hsotg->dev, 3177 "'%d' invalid for parameter hibernation\n", 3178 val); 3179 dev_err(hsotg->dev, "hibernation must be 0 or 1\n"); 3180 } 3181 val = 0; 3182 dev_dbg(hsotg->dev, "Setting hibernation to %d\n", val); 3183 } 3184 3185 hsotg->core_params->hibernation = val; 3186} 3187 3188/* 3189 * This function is called during module intialization to pass module parameters 3190 * for the DWC_otg core. 3191 */ 3192void dwc2_set_parameters(struct dwc2_hsotg *hsotg, 3193 const struct dwc2_core_params *params) 3194{ 3195 dev_dbg(hsotg->dev, "%s()\n", __func__); 3196 3197 dwc2_set_param_otg_cap(hsotg, params->otg_cap); 3198 dwc2_set_param_dma_enable(hsotg, params->dma_enable); 3199 dwc2_set_param_dma_desc_enable(hsotg, params->dma_desc_enable); 3200 dwc2_set_param_dma_desc_fs_enable(hsotg, params->dma_desc_fs_enable); 3201 dwc2_set_param_host_support_fs_ls_low_power(hsotg, 3202 params->host_support_fs_ls_low_power); 3203 dwc2_set_param_enable_dynamic_fifo(hsotg, 3204 params->enable_dynamic_fifo); 3205 dwc2_set_param_host_rx_fifo_size(hsotg, 3206 params->host_rx_fifo_size); 3207 dwc2_set_param_host_nperio_tx_fifo_size(hsotg, 3208 params->host_nperio_tx_fifo_size); 3209 dwc2_set_param_host_perio_tx_fifo_size(hsotg, 3210 params->host_perio_tx_fifo_size); 3211 dwc2_set_param_max_transfer_size(hsotg, 3212 params->max_transfer_size); 3213 dwc2_set_param_max_packet_count(hsotg, 3214 params->max_packet_count); 3215 dwc2_set_param_host_channels(hsotg, params->host_channels); 3216 dwc2_set_param_phy_type(hsotg, params->phy_type); 3217 dwc2_set_param_speed(hsotg, params->speed); 3218 dwc2_set_param_host_ls_low_power_phy_clk(hsotg, 3219 params->host_ls_low_power_phy_clk); 3220 dwc2_set_param_phy_ulpi_ddr(hsotg, params->phy_ulpi_ddr); 3221 dwc2_set_param_phy_ulpi_ext_vbus(hsotg, 3222 params->phy_ulpi_ext_vbus); 3223 dwc2_set_param_phy_utmi_width(hsotg, params->phy_utmi_width); 3224 dwc2_set_param_ulpi_fs_ls(hsotg, params->ulpi_fs_ls); 3225 dwc2_set_param_ts_dline(hsotg, params->ts_dline); 3226 dwc2_set_param_i2c_enable(hsotg, params->i2c_enable); 3227 dwc2_set_param_en_multiple_tx_fifo(hsotg, 3228 params->en_multiple_tx_fifo); 3229 dwc2_set_param_reload_ctl(hsotg, params->reload_ctl); 3230 dwc2_set_param_ahbcfg(hsotg, params->ahbcfg); 3231 dwc2_set_param_otg_ver(hsotg, params->otg_ver); 3232 dwc2_set_param_uframe_sched(hsotg, params->uframe_sched); 3233 dwc2_set_param_external_id_pin_ctl(hsotg, params->external_id_pin_ctl); 3234 dwc2_set_param_hibernation(hsotg, params->hibernation); 3235} 3236 3237/* 3238 * Forces either host or device mode if the controller is not 3239 * currently in that mode. 3240 * 3241 * Returns true if the mode was forced. 3242 */ 3243static bool dwc2_force_mode_if_needed(struct dwc2_hsotg *hsotg, bool host) 3244{ 3245 if (host && dwc2_is_host_mode(hsotg)) 3246 return false; 3247 else if (!host && dwc2_is_device_mode(hsotg)) 3248 return false; 3249 3250 return dwc2_force_mode(hsotg, host); 3251} 3252 3253/* 3254 * Gets host hardware parameters. Forces host mode if not currently in 3255 * host mode. Should be called immediately after a core soft reset in 3256 * order to get the reset values. 3257 */ 3258static void dwc2_get_host_hwparams(struct dwc2_hsotg *hsotg) 3259{ 3260 struct dwc2_hw_params *hw = &hsotg->hw_params; 3261 u32 gnptxfsiz; 3262 u32 hptxfsiz; 3263 bool forced; 3264 3265 if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL) 3266 return; 3267 3268 forced = dwc2_force_mode_if_needed(hsotg, true); 3269 3270 gnptxfsiz = DWC2_READ_4(hsotg, GNPTXFSIZ); 3271 hptxfsiz = DWC2_READ_4(hsotg, HPTXFSIZ); 3272 dev_dbg(hsotg->dev, "gnptxfsiz=%08x\n", gnptxfsiz); 3273 dev_dbg(hsotg->dev, "hptxfsiz=%08x\n", hptxfsiz); 3274 3275 if (forced) 3276 dwc2_clear_force_mode(hsotg); 3277 3278 hw->host_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >> 3279 FIFOSIZE_DEPTH_SHIFT; 3280 hw->host_perio_tx_fifo_size = (hptxfsiz & FIFOSIZE_DEPTH_MASK) >> 3281 FIFOSIZE_DEPTH_SHIFT; 3282} 3283 3284/* 3285 * Gets device hardware parameters. Forces device mode if not 3286 * currently in device mode. Should be called immediately after a core 3287 * soft reset in order to get the reset values. 3288 */ 3289static void dwc2_get_dev_hwparams(struct dwc2_hsotg *hsotg) 3290{ 3291 struct dwc2_hw_params *hw = &hsotg->hw_params; 3292 bool forced; 3293 u32 gnptxfsiz; 3294 3295 if (hsotg->dr_mode == USB_DR_MODE_HOST) 3296 return; 3297 3298 forced = dwc2_force_mode_if_needed(hsotg, false); 3299 3300 gnptxfsiz = DWC2_READ_4(hsotg, GNPTXFSIZ); 3301 dev_dbg(hsotg->dev, "gnptxfsiz=%08x\n", gnptxfsiz); 3302 3303 if (forced) 3304 dwc2_clear_force_mode(hsotg); 3305 3306 hw->dev_nperio_tx_fifo_size = (gnptxfsiz & FIFOSIZE_DEPTH_MASK) >> 3307 FIFOSIZE_DEPTH_SHIFT; 3308} 3309 3310/** 3311 * During device initialization, read various hardware configuration 3312 * registers and interpret the contents. 3313 */ 3314int dwc2_get_hwparams(struct dwc2_hsotg *hsotg) 3315{ 3316 struct dwc2_hw_params *hw = &hsotg->hw_params; 3317 unsigned width; 3318 u32 hwcfg1, hwcfg2, hwcfg3, hwcfg4; 3319 u32 grxfsiz; 3320 3321 /* 3322 * Attempt to ensure this device is really a DWC_otg Controller. 3323 * Read and verify the GSNPSID register contents. The value should be 3324 * 0x45f42xxx or 0x45f43xxx, which corresponds to either "OT2" or "OT3", 3325 * as in "OTG version 2.xx" or "OTG version 3.xx". 3326 */ 3327 hw->snpsid = DWC2_READ_4(hsotg, GSNPSID); 3328 if ((hw->snpsid & 0xfffff000) != 0x4f542000 && 3329 (hw->snpsid & 0xfffff000) != 0x4f543000) { 3330 dev_err(hsotg->dev, "Bad value for GSNPSID: 0x%08x\n", 3331 hw->snpsid); 3332 return -ENODEV; 3333 } 3334 3335 dev_dbg(hsotg->dev, "Core Release: %1x.%1x%1x%1x (snpsid=%x)\n", 3336 hw->snpsid >> 12 & 0xf, hw->snpsid >> 8 & 0xf, 3337 hw->snpsid >> 4 & 0xf, hw->snpsid & 0xf, hw->snpsid); 3338 3339 hwcfg1 = DWC2_READ_4(hsotg, GHWCFG1); 3340 hwcfg2 = DWC2_READ_4(hsotg, GHWCFG2); 3341 hwcfg3 = DWC2_READ_4(hsotg, GHWCFG3); 3342 hwcfg4 = DWC2_READ_4(hsotg, GHWCFG4); 3343 grxfsiz = DWC2_READ_4(hsotg, GRXFSIZ); 3344 3345 dev_dbg(hsotg->dev, "hwcfg1=%08x\n", hwcfg1); 3346 dev_dbg(hsotg->dev, "hwcfg2=%08x\n", hwcfg2); 3347 dev_dbg(hsotg->dev, "hwcfg3=%08x\n", hwcfg3); 3348 dev_dbg(hsotg->dev, "hwcfg4=%08x\n", hwcfg4); 3349 dev_dbg(hsotg->dev, "grxfsiz=%08x\n", grxfsiz); 3350 3351 /* 3352 * Host specific hardware parameters. Reading these parameters 3353 * requires the controller to be in host mode. The mode will 3354 * be forced, if necessary, to read these values. 3355 */ 3356 dwc2_get_host_hwparams(hsotg); 3357 dwc2_get_dev_hwparams(hsotg); 3358 3359 /* hwcfg1 */ 3360 hw->dev_ep_dirs = hwcfg1; 3361 3362 /* hwcfg2 */ 3363 hw->op_mode = (hwcfg2 & GHWCFG2_OP_MODE_MASK) >> 3364 GHWCFG2_OP_MODE_SHIFT; 3365 hw->arch = (hwcfg2 & GHWCFG2_ARCHITECTURE_MASK) >> 3366 GHWCFG2_ARCHITECTURE_SHIFT; 3367 hw->enable_dynamic_fifo = !!(hwcfg2 & GHWCFG2_DYNAMIC_FIFO); 3368 hw->host_channels = 1 + ((hwcfg2 & GHWCFG2_NUM_HOST_CHAN_MASK) >> 3369 GHWCFG2_NUM_HOST_CHAN_SHIFT); 3370 hw->hs_phy_type = (hwcfg2 & GHWCFG2_HS_PHY_TYPE_MASK) >> 3371 GHWCFG2_HS_PHY_TYPE_SHIFT; 3372 hw->fs_phy_type = (hwcfg2 & GHWCFG2_FS_PHY_TYPE_MASK) >> 3373 GHWCFG2_FS_PHY_TYPE_SHIFT; 3374 hw->num_dev_ep = (hwcfg2 & GHWCFG2_NUM_DEV_EP_MASK) >> 3375 GHWCFG2_NUM_DEV_EP_SHIFT; 3376 hw->nperio_tx_q_depth = 3377 (hwcfg2 & GHWCFG2_NONPERIO_TX_Q_DEPTH_MASK) >> 3378 GHWCFG2_NONPERIO_TX_Q_DEPTH_SHIFT << 1; 3379 hw->host_perio_tx_q_depth = 3380 (hwcfg2 & GHWCFG2_HOST_PERIO_TX_Q_DEPTH_MASK) >> 3381 GHWCFG2_HOST_PERIO_TX_Q_DEPTH_SHIFT << 1; 3382 hw->dev_token_q_depth = 3383 (hwcfg2 & GHWCFG2_DEV_TOKEN_Q_DEPTH_MASK) >> 3384 GHWCFG2_DEV_TOKEN_Q_DEPTH_SHIFT; 3385 3386 /* hwcfg3 */ 3387 width = (hwcfg3 & GHWCFG3_XFER_SIZE_CNTR_WIDTH_MASK) >> 3388 GHWCFG3_XFER_SIZE_CNTR_WIDTH_SHIFT; 3389 hw->max_transfer_size = (1 << (width + 11)) - 1; 3390 /* 3391 * Clip max_transfer_size to 65535. dwc2_hc_setup_align_buf() allocates 3392 * coherent buffers with this size, and if it's too large we can 3393 * exhaust the coherent DMA pool. 3394 */ 3395 if (hw->max_transfer_size > 65535) 3396 hw->max_transfer_size = 65535; 3397 width = (hwcfg3 & GHWCFG3_PACKET_SIZE_CNTR_WIDTH_MASK) >> 3398 GHWCFG3_PACKET_SIZE_CNTR_WIDTH_SHIFT; 3399 hw->max_packet_count = (1 << (width + 4)) - 1; 3400 hw->i2c_enable = !!(hwcfg3 & GHWCFG3_I2C); 3401 hw->total_fifo_size = (hwcfg3 & GHWCFG3_DFIFO_DEPTH_MASK) >> 3402 GHWCFG3_DFIFO_DEPTH_SHIFT; 3403 3404 /* hwcfg4 */ 3405 hw->en_multiple_tx_fifo = !!(hwcfg4 & GHWCFG4_DED_FIFO_EN); 3406 hw->num_dev_perio_in_ep = (hwcfg4 & GHWCFG4_NUM_DEV_PERIO_IN_EP_MASK) >> 3407 GHWCFG4_NUM_DEV_PERIO_IN_EP_SHIFT; 3408 hw->dma_desc_enable = !!(hwcfg4 & GHWCFG4_DESC_DMA); 3409 hw->power_optimized = !!(hwcfg4 & GHWCFG4_POWER_OPTIMIZ); 3410 hw->utmi_phy_data_width = (hwcfg4 & GHWCFG4_UTMI_PHY_DATA_WIDTH_MASK) >> 3411 GHWCFG4_UTMI_PHY_DATA_WIDTH_SHIFT; 3412 3413 /* fifo sizes */ 3414 hw->host_rx_fifo_size = (grxfsiz & GRXFSIZ_DEPTH_MASK) >> 3415 GRXFSIZ_DEPTH_SHIFT; 3416 3417 dev_dbg(hsotg->dev, "Detected values from hardware:\n"); 3418 dev_dbg(hsotg->dev, " op_mode=%d\n", 3419 hw->op_mode); 3420 dev_dbg(hsotg->dev, " arch=%d\n", 3421 hw->arch); 3422 dev_dbg(hsotg->dev, " dma_desc_enable=%d\n", 3423 hw->dma_desc_enable); 3424 dev_dbg(hsotg->dev, " power_optimized=%d\n", 3425 hw->power_optimized); 3426 dev_dbg(hsotg->dev, " i2c_enable=%d\n", 3427 hw->i2c_enable); 3428 dev_dbg(hsotg->dev, " hs_phy_type=%d\n", 3429 hw->hs_phy_type); 3430 dev_dbg(hsotg->dev, " fs_phy_type=%d\n", 3431 hw->fs_phy_type); 3432 dev_dbg(hsotg->dev, " utmi_phy_data_width=%d\n", 3433 hw->utmi_phy_data_width); 3434 dev_dbg(hsotg->dev, " num_dev_ep=%d\n", 3435 hw->num_dev_ep); 3436 dev_dbg(hsotg->dev, " num_dev_perio_in_ep=%d\n", 3437 hw->num_dev_perio_in_ep); 3438 dev_dbg(hsotg->dev, " host_channels=%d\n", 3439 hw->host_channels); 3440 dev_dbg(hsotg->dev, " max_transfer_size=%d\n", 3441 hw->max_transfer_size); 3442 dev_dbg(hsotg->dev, " max_packet_count=%d\n", 3443 hw->max_packet_count); 3444 dev_dbg(hsotg->dev, " nperio_tx_q_depth=0x%0x\n", 3445 hw->nperio_tx_q_depth); 3446 dev_dbg(hsotg->dev, " host_perio_tx_q_depth=0x%0x\n", 3447 hw->host_perio_tx_q_depth); 3448 dev_dbg(hsotg->dev, " dev_token_q_depth=0x%0x\n", 3449 hw->dev_token_q_depth); 3450 dev_dbg(hsotg->dev, " enable_dynamic_fifo=%d\n", 3451 hw->enable_dynamic_fifo); 3452 dev_dbg(hsotg->dev, " en_multiple_tx_fifo=%d\n", 3453 hw->en_multiple_tx_fifo); 3454 dev_dbg(hsotg->dev, " total_fifo_size=%d\n", 3455 hw->total_fifo_size); 3456 dev_dbg(hsotg->dev, " host_rx_fifo_size=%d\n", 3457 hw->host_rx_fifo_size); 3458 dev_dbg(hsotg->dev, " host_nperio_tx_fifo_size=%d\n", 3459 hw->host_nperio_tx_fifo_size); 3460 dev_dbg(hsotg->dev, " host_perio_tx_fifo_size=%d\n", 3461 hw->host_perio_tx_fifo_size); 3462 dev_dbg(hsotg->dev, "\n"); 3463 3464 return 0; 3465} 3466 3467/* 3468 * Sets all parameters to the given value. 3469 * 3470 * Assumes that the dwc2_core_params struct contains only integers. 3471 */ 3472void dwc2_set_all_params(struct dwc2_core_params *params, int value) 3473{ 3474 int *p = (int *)params; 3475 size_t size = sizeof(*params) / sizeof(*p); 3476 int i; 3477 3478 for (i = 0; i < size; i++) 3479 p[i] = value; 3480} 3481 3482 3483u16 dwc2_get_otg_version(struct dwc2_hsotg *hsotg) 3484{ 3485 return hsotg->core_params->otg_ver == 1 ? 0x0200 : 0x0103; 3486} 3487 3488bool dwc2_is_controller_alive(struct dwc2_hsotg *hsotg) 3489{ 3490 if (DWC2_READ_4(hsotg, GSNPSID) == 0xffffffff) 3491 return false; 3492 else 3493 return true; 3494} 3495 3496/** 3497 * dwc2_enable_global_interrupts() - Enables the controller's Global 3498 * Interrupt in the AHB Config register 3499 * 3500 * @hsotg: Programming view of DWC_otg controller 3501 */ 3502void dwc2_enable_global_interrupts(struct dwc2_hsotg *hsotg) 3503{ 3504 u32 ahbcfg = DWC2_READ_4(hsotg, GAHBCFG); 3505 3506 ahbcfg |= GAHBCFG_GLBL_INTR_EN; 3507 DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg); 3508} 3509 3510/** 3511 * dwc2_disable_global_interrupts() - Disables the controller's Global 3512 * Interrupt in the AHB Config register 3513 * 3514 * @hsotg: Programming view of DWC_otg controller 3515 */ 3516void dwc2_disable_global_interrupts(struct dwc2_hsotg *hsotg) 3517{ 3518 u32 ahbcfg = DWC2_READ_4(hsotg, GAHBCFG); 3519 3520 ahbcfg &= ~GAHBCFG_GLBL_INTR_EN; 3521 DWC2_WRITE_4(hsotg, GAHBCFG, ahbcfg); 3522} 3523 3524/* Returns the controller's GHWCFG2.OTG_MODE. */ 3525unsigned dwc2_op_mode(struct dwc2_hsotg *hsotg) 3526{ 3527 u32 ghwcfg2 = DWC2_READ_4(hsotg, GHWCFG2); 3528 3529 return (ghwcfg2 & GHWCFG2_OP_MODE_MASK) >> 3530 GHWCFG2_OP_MODE_SHIFT; 3531} 3532 3533/* Returns true if the controller is capable of DRD. */ 3534bool dwc2_hw_is_otg(struct dwc2_hsotg *hsotg) 3535{ 3536 unsigned op_mode = dwc2_op_mode(hsotg); 3537 3538 return (op_mode == GHWCFG2_OP_MODE_HNP_SRP_CAPABLE) || 3539 (op_mode == GHWCFG2_OP_MODE_SRP_ONLY_CAPABLE) || 3540 (op_mode == GHWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE); 3541} 3542 3543/* Returns true if the controller is host-only. */ 3544bool dwc2_hw_is_host(struct dwc2_hsotg *hsotg) 3545{ 3546 unsigned op_mode = dwc2_op_mode(hsotg); 3547 3548 return (op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_HOST) || 3549 (op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST); 3550} 3551 3552/* Returns true if the controller is device-only. */ 3553bool dwc2_hw_is_device(struct dwc2_hsotg *hsotg) 3554{ 3555 unsigned op_mode = dwc2_op_mode(hsotg); 3556 3557 return (op_mode == GHWCFG2_OP_MODE_SRP_CAPABLE_DEVICE) || 3558 (op_mode == GHWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE); 3559} 3560