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