isp1760-hcd.c (67428B)
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Driver for the NXP ISP1760 chip 4 * 5 * However, the code might contain some bugs. What doesn't work for sure is: 6 * - ISO 7 * - OTG 8 e The interrupt line is configured as active low, level. 9 * 10 * (c) 2007 Sebastian Siewior <bigeasy@linutronix.de> 11 * 12 * (c) 2011 Arvid Brodin <arvid.brodin@enea.com> 13 * 14 * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org> 15 * 16 */ 17#include <linux/gpio/consumer.h> 18#include <linux/module.h> 19#include <linux/kernel.h> 20#include <linux/slab.h> 21#include <linux/list.h> 22#include <linux/usb.h> 23#include <linux/usb/hcd.h> 24#include <linux/debugfs.h> 25#include <linux/uaccess.h> 26#include <linux/io.h> 27#include <linux/iopoll.h> 28#include <linux/mm.h> 29#include <linux/timer.h> 30#include <asm/unaligned.h> 31#include <asm/cacheflush.h> 32 33#include "isp1760-core.h" 34#include "isp1760-hcd.h" 35#include "isp1760-regs.h" 36 37static struct kmem_cache *qtd_cachep; 38static struct kmem_cache *qh_cachep; 39static struct kmem_cache *urb_listitem_cachep; 40 41typedef void (packet_enqueue)(struct usb_hcd *hcd, struct isp1760_qh *qh, 42 struct isp1760_qtd *qtd); 43 44static inline struct isp1760_hcd *hcd_to_priv(struct usb_hcd *hcd) 45{ 46 return *(struct isp1760_hcd **)hcd->hcd_priv; 47} 48 49#define dw_to_le32(x) (cpu_to_le32((__force u32)x)) 50#define le32_to_dw(x) ((__force __dw)(le32_to_cpu(x))) 51 52/* urb state*/ 53#define DELETE_URB (0x0008) 54#define NO_TRANSFER_ACTIVE (0xffffffff) 55 56/* Philips Proprietary Transfer Descriptor (PTD) */ 57typedef __u32 __bitwise __dw; 58struct ptd { 59 __dw dw0; 60 __dw dw1; 61 __dw dw2; 62 __dw dw3; 63 __dw dw4; 64 __dw dw5; 65 __dw dw6; 66 __dw dw7; 67}; 68 69struct ptd_le32 { 70 __le32 dw0; 71 __le32 dw1; 72 __le32 dw2; 73 __le32 dw3; 74 __le32 dw4; 75 __le32 dw5; 76 __le32 dw6; 77 __le32 dw7; 78}; 79 80#define PTD_OFFSET 0x0400 81#define ISO_PTD_OFFSET 0x0400 82#define INT_PTD_OFFSET 0x0800 83#define ATL_PTD_OFFSET 0x0c00 84#define PAYLOAD_OFFSET 0x1000 85 86#define ISP_BANK_0 0x00 87#define ISP_BANK_1 0x01 88#define ISP_BANK_2 0x02 89#define ISP_BANK_3 0x03 90 91#define TO_DW(x) ((__force __dw)x) 92#define TO_U32(x) ((__force u32)x) 93 94 /* ATL */ 95 /* DW0 */ 96#define DW0_VALID_BIT TO_DW(1) 97#define FROM_DW0_VALID(x) (TO_U32(x) & 0x01) 98#define TO_DW0_LENGTH(x) TO_DW((((u32)x) << 3)) 99#define TO_DW0_MAXPACKET(x) TO_DW((((u32)x) << 18)) 100#define TO_DW0_MULTI(x) TO_DW((((u32)x) << 29)) 101#define TO_DW0_ENDPOINT(x) TO_DW((((u32)x) << 31)) 102/* DW1 */ 103#define TO_DW1_DEVICE_ADDR(x) TO_DW((((u32)x) << 3)) 104#define TO_DW1_PID_TOKEN(x) TO_DW((((u32)x) << 10)) 105#define DW1_TRANS_BULK TO_DW(((u32)2 << 12)) 106#define DW1_TRANS_INT TO_DW(((u32)3 << 12)) 107#define DW1_TRANS_SPLIT TO_DW(((u32)1 << 14)) 108#define DW1_SE_USB_LOSPEED TO_DW(((u32)2 << 16)) 109#define TO_DW1_PORT_NUM(x) TO_DW((((u32)x) << 18)) 110#define TO_DW1_HUB_NUM(x) TO_DW((((u32)x) << 25)) 111/* DW2 */ 112#define TO_DW2_DATA_START_ADDR(x) TO_DW((((u32)x) << 8)) 113#define TO_DW2_RL(x) TO_DW(((x) << 25)) 114#define FROM_DW2_RL(x) ((TO_U32(x) >> 25) & 0xf) 115/* DW3 */ 116#define FROM_DW3_NRBYTESTRANSFERRED(x) TO_U32((x) & 0x3fff) 117#define FROM_DW3_SCS_NRBYTESTRANSFERRED(x) TO_U32((x) & 0x07ff) 118#define TO_DW3_NAKCOUNT(x) TO_DW(((x) << 19)) 119#define FROM_DW3_NAKCOUNT(x) ((TO_U32(x) >> 19) & 0xf) 120#define TO_DW3_CERR(x) TO_DW(((x) << 23)) 121#define FROM_DW3_CERR(x) ((TO_U32(x) >> 23) & 0x3) 122#define TO_DW3_DATA_TOGGLE(x) TO_DW(((x) << 25)) 123#define FROM_DW3_DATA_TOGGLE(x) ((TO_U32(x) >> 25) & 0x1) 124#define TO_DW3_PING(x) TO_DW(((x) << 26)) 125#define FROM_DW3_PING(x) ((TO_U32(x) >> 26) & 0x1) 126#define DW3_ERROR_BIT TO_DW((1 << 28)) 127#define DW3_BABBLE_BIT TO_DW((1 << 29)) 128#define DW3_HALT_BIT TO_DW((1 << 30)) 129#define DW3_ACTIVE_BIT TO_DW((1 << 31)) 130#define FROM_DW3_ACTIVE(x) ((TO_U32(x) >> 31) & 0x01) 131 132#define INT_UNDERRUN (1 << 2) 133#define INT_BABBLE (1 << 1) 134#define INT_EXACT (1 << 0) 135 136#define SETUP_PID (2) 137#define IN_PID (1) 138#define OUT_PID (0) 139 140/* Errata 1 */ 141#define RL_COUNTER (0) 142#define NAK_COUNTER (0) 143#define ERR_COUNTER (3) 144 145struct isp1760_qtd { 146 u8 packet_type; 147 void *data_buffer; 148 u32 payload_addr; 149 150 /* the rest is HCD-private */ 151 struct list_head qtd_list; 152 struct urb *urb; 153 size_t length; 154 size_t actual_length; 155 156 /* QTD_ENQUEUED: waiting for transfer (inactive) */ 157 /* QTD_PAYLOAD_ALLOC: chip mem has been allocated for payload */ 158 /* QTD_XFER_STARTED: valid ptd has been written to isp176x - only 159 interrupt handler may touch this qtd! */ 160 /* QTD_XFER_COMPLETE: payload has been transferred successfully */ 161 /* QTD_RETIRE: transfer error/abort qtd */ 162#define QTD_ENQUEUED 0 163#define QTD_PAYLOAD_ALLOC 1 164#define QTD_XFER_STARTED 2 165#define QTD_XFER_COMPLETE 3 166#define QTD_RETIRE 4 167 u32 status; 168}; 169 170/* Queue head, one for each active endpoint */ 171struct isp1760_qh { 172 struct list_head qh_list; 173 struct list_head qtd_list; 174 u32 toggle; 175 u32 ping; 176 int slot; 177 int tt_buffer_dirty; /* See USB2.0 spec section 11.17.5 */ 178}; 179 180struct urb_listitem { 181 struct list_head urb_list; 182 struct urb *urb; 183}; 184 185static const u32 isp176x_hc_portsc1_fields[] = { 186 [PORT_OWNER] = BIT(13), 187 [PORT_POWER] = BIT(12), 188 [PORT_LSTATUS] = BIT(10), 189 [PORT_RESET] = BIT(8), 190 [PORT_SUSPEND] = BIT(7), 191 [PORT_RESUME] = BIT(6), 192 [PORT_PE] = BIT(2), 193 [PORT_CSC] = BIT(1), 194 [PORT_CONNECT] = BIT(0), 195}; 196 197/* 198 * Access functions for isp176x registers regmap fields 199 */ 200static u32 isp1760_hcd_read(struct usb_hcd *hcd, u32 field) 201{ 202 struct isp1760_hcd *priv = hcd_to_priv(hcd); 203 204 return isp1760_field_read(priv->fields, field); 205} 206 207/* 208 * We need, in isp176x, to write directly the values to the portsc1 209 * register so it will make the other values to trigger. 210 */ 211static void isp1760_hcd_portsc1_set_clear(struct isp1760_hcd *priv, u32 field, 212 u32 val) 213{ 214 u32 bit = isp176x_hc_portsc1_fields[field]; 215 u16 portsc1_reg = priv->is_isp1763 ? ISP1763_HC_PORTSC1 : 216 ISP176x_HC_PORTSC1; 217 u32 port_status = readl(priv->base + portsc1_reg); 218 219 if (val) 220 writel(port_status | bit, priv->base + portsc1_reg); 221 else 222 writel(port_status & ~bit, priv->base + portsc1_reg); 223} 224 225static void isp1760_hcd_write(struct usb_hcd *hcd, u32 field, u32 val) 226{ 227 struct isp1760_hcd *priv = hcd_to_priv(hcd); 228 229 if (unlikely((field >= PORT_OWNER && field <= PORT_CONNECT))) 230 return isp1760_hcd_portsc1_set_clear(priv, field, val); 231 232 isp1760_field_write(priv->fields, field, val); 233} 234 235static void isp1760_hcd_set(struct usb_hcd *hcd, u32 field) 236{ 237 isp1760_hcd_write(hcd, field, 0xFFFFFFFF); 238} 239 240static void isp1760_hcd_clear(struct usb_hcd *hcd, u32 field) 241{ 242 isp1760_hcd_write(hcd, field, 0); 243} 244 245static int isp1760_hcd_set_and_wait(struct usb_hcd *hcd, u32 field, 246 u32 timeout_us) 247{ 248 struct isp1760_hcd *priv = hcd_to_priv(hcd); 249 u32 val; 250 251 isp1760_hcd_set(hcd, field); 252 253 return regmap_field_read_poll_timeout(priv->fields[field], val, 254 val, 0, timeout_us); 255} 256 257static int isp1760_hcd_set_and_wait_swap(struct usb_hcd *hcd, u32 field, 258 u32 timeout_us) 259{ 260 struct isp1760_hcd *priv = hcd_to_priv(hcd); 261 u32 val; 262 263 isp1760_hcd_set(hcd, field); 264 265 return regmap_field_read_poll_timeout(priv->fields[field], val, 266 !val, 0, timeout_us); 267} 268 269static int isp1760_hcd_clear_and_wait(struct usb_hcd *hcd, u32 field, 270 u32 timeout_us) 271{ 272 struct isp1760_hcd *priv = hcd_to_priv(hcd); 273 u32 val; 274 275 isp1760_hcd_clear(hcd, field); 276 277 return regmap_field_read_poll_timeout(priv->fields[field], val, 278 !val, 0, timeout_us); 279} 280 281static bool isp1760_hcd_is_set(struct usb_hcd *hcd, u32 field) 282{ 283 return !!isp1760_hcd_read(hcd, field); 284} 285 286static bool isp1760_hcd_ppc_is_set(struct usb_hcd *hcd) 287{ 288 struct isp1760_hcd *priv = hcd_to_priv(hcd); 289 290 if (priv->is_isp1763) 291 return true; 292 293 return isp1760_hcd_is_set(hcd, HCS_PPC); 294} 295 296static u32 isp1760_hcd_n_ports(struct usb_hcd *hcd) 297{ 298 struct isp1760_hcd *priv = hcd_to_priv(hcd); 299 300 if (priv->is_isp1763) 301 return 1; 302 303 return isp1760_hcd_read(hcd, HCS_N_PORTS); 304} 305 306/* 307 * Access functions for isp176x memory (offset >= 0x0400). 308 * 309 * bank_reads8() reads memory locations prefetched by an earlier write to 310 * HC_MEMORY_REG (see isp176x datasheet). Unless you want to do fancy multi- 311 * bank optimizations, you should use the more generic mem_read() below. 312 * 313 * For access to ptd memory, use the specialized ptd_read() and ptd_write() 314 * below. 315 * 316 * These functions copy via MMIO data to/from the device. memcpy_{to|from}io() 317 * doesn't quite work because some people have to enforce 32-bit access 318 */ 319static void bank_reads8(void __iomem *src_base, u32 src_offset, u32 bank_addr, 320 __u32 *dst, u32 bytes) 321{ 322 __u32 __iomem *src; 323 u32 val; 324 __u8 *src_byteptr; 325 __u8 *dst_byteptr; 326 327 src = src_base + (bank_addr | src_offset); 328 329 if (src_offset < PAYLOAD_OFFSET) { 330 while (bytes >= 4) { 331 *dst = readl_relaxed(src); 332 bytes -= 4; 333 src++; 334 dst++; 335 } 336 } else { 337 while (bytes >= 4) { 338 *dst = __raw_readl(src); 339 bytes -= 4; 340 src++; 341 dst++; 342 } 343 } 344 345 if (!bytes) 346 return; 347 348 /* in case we have 3, 2 or 1 by left. The dst buffer may not be fully 349 * allocated. 350 */ 351 if (src_offset < PAYLOAD_OFFSET) 352 val = readl_relaxed(src); 353 else 354 val = __raw_readl(src); 355 356 dst_byteptr = (void *) dst; 357 src_byteptr = (void *) &val; 358 while (bytes > 0) { 359 *dst_byteptr = *src_byteptr; 360 dst_byteptr++; 361 src_byteptr++; 362 bytes--; 363 } 364} 365 366static void isp1760_mem_read(struct usb_hcd *hcd, u32 src_offset, void *dst, 367 u32 bytes) 368{ 369 struct isp1760_hcd *priv = hcd_to_priv(hcd); 370 371 isp1760_reg_write(priv->regs, ISP176x_HC_MEMORY, src_offset); 372 ndelay(100); 373 374 bank_reads8(priv->base, src_offset, ISP_BANK_0, dst, bytes); 375} 376 377/* 378 * ISP1763 does not have the banks direct host controller memory access, 379 * needs to use the HC_DATA register. Add data read/write according to this, 380 * and also adjust 16bit access. 381 */ 382static void isp1763_mem_read(struct usb_hcd *hcd, u16 srcaddr, 383 u16 *dstptr, u32 bytes) 384{ 385 struct isp1760_hcd *priv = hcd_to_priv(hcd); 386 387 /* Write the starting device address to the hcd memory register */ 388 isp1760_reg_write(priv->regs, ISP1763_HC_MEMORY, srcaddr); 389 ndelay(100); /* Delay between consecutive access */ 390 391 /* As long there are at least 16-bit to read ... */ 392 while (bytes >= 2) { 393 *dstptr = __raw_readw(priv->base + ISP1763_HC_DATA); 394 bytes -= 2; 395 dstptr++; 396 } 397 398 /* If there are no more bytes to read, return */ 399 if (bytes <= 0) 400 return; 401 402 *((u8 *)dstptr) = (u8)(readw(priv->base + ISP1763_HC_DATA) & 0xFF); 403} 404 405static void mem_read(struct usb_hcd *hcd, u32 src_offset, __u32 *dst, 406 u32 bytes) 407{ 408 struct isp1760_hcd *priv = hcd_to_priv(hcd); 409 410 if (!priv->is_isp1763) 411 return isp1760_mem_read(hcd, src_offset, (u16 *)dst, bytes); 412 413 isp1763_mem_read(hcd, (u16)src_offset, (u16 *)dst, bytes); 414} 415 416static void isp1760_mem_write(void __iomem *dst_base, u32 dst_offset, 417 __u32 const *src, u32 bytes) 418{ 419 __u32 __iomem *dst; 420 421 dst = dst_base + dst_offset; 422 423 if (dst_offset < PAYLOAD_OFFSET) { 424 while (bytes >= 4) { 425 writel_relaxed(*src, dst); 426 bytes -= 4; 427 src++; 428 dst++; 429 } 430 } else { 431 while (bytes >= 4) { 432 __raw_writel(*src, dst); 433 bytes -= 4; 434 src++; 435 dst++; 436 } 437 } 438 439 if (!bytes) 440 return; 441 /* in case we have 3, 2 or 1 bytes left. The buffer is allocated and the 442 * extra bytes should not be read by the HW. 443 */ 444 445 if (dst_offset < PAYLOAD_OFFSET) 446 writel_relaxed(*src, dst); 447 else 448 __raw_writel(*src, dst); 449} 450 451static void isp1763_mem_write(struct usb_hcd *hcd, u16 dstaddr, u16 *src, 452 u32 bytes) 453{ 454 struct isp1760_hcd *priv = hcd_to_priv(hcd); 455 456 /* Write the starting device address to the hcd memory register */ 457 isp1760_reg_write(priv->regs, ISP1763_HC_MEMORY, dstaddr); 458 ndelay(100); /* Delay between consecutive access */ 459 460 while (bytes >= 2) { 461 /* Get and write the data; then adjust the data ptr and len */ 462 __raw_writew(*src, priv->base + ISP1763_HC_DATA); 463 bytes -= 2; 464 src++; 465 } 466 467 /* If there are no more bytes to process, return */ 468 if (bytes <= 0) 469 return; 470 471 /* 472 * The only way to get here is if there is a single byte left, 473 * get it and write it to the data reg; 474 */ 475 writew(*((u8 *)src), priv->base + ISP1763_HC_DATA); 476} 477 478static void mem_write(struct usb_hcd *hcd, u32 dst_offset, __u32 *src, 479 u32 bytes) 480{ 481 struct isp1760_hcd *priv = hcd_to_priv(hcd); 482 483 if (!priv->is_isp1763) 484 return isp1760_mem_write(priv->base, dst_offset, src, bytes); 485 486 isp1763_mem_write(hcd, dst_offset, (u16 *)src, bytes); 487} 488 489/* 490 * Read and write ptds. 'ptd_offset' should be one of ISO_PTD_OFFSET, 491 * INT_PTD_OFFSET, and ATL_PTD_OFFSET. 'slot' should be less than 32. 492 */ 493static void isp1760_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, 494 struct ptd *ptd) 495{ 496 u16 src_offset = ptd_offset + slot * sizeof(*ptd); 497 struct isp1760_hcd *priv = hcd_to_priv(hcd); 498 499 isp1760_reg_write(priv->regs, ISP176x_HC_MEMORY, src_offset); 500 ndelay(90); 501 502 bank_reads8(priv->base, src_offset, ISP_BANK_0, (void *)ptd, 503 sizeof(*ptd)); 504} 505 506static void isp1763_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, 507 struct ptd *ptd) 508{ 509 u16 src_offset = ptd_offset + slot * sizeof(*ptd); 510 struct ptd_le32 le32_ptd; 511 512 isp1763_mem_read(hcd, src_offset, (u16 *)&le32_ptd, sizeof(le32_ptd)); 513 /* Normalize the data obtained */ 514 ptd->dw0 = le32_to_dw(le32_ptd.dw0); 515 ptd->dw1 = le32_to_dw(le32_ptd.dw1); 516 ptd->dw2 = le32_to_dw(le32_ptd.dw2); 517 ptd->dw3 = le32_to_dw(le32_ptd.dw3); 518 ptd->dw4 = le32_to_dw(le32_ptd.dw4); 519 ptd->dw5 = le32_to_dw(le32_ptd.dw5); 520 ptd->dw6 = le32_to_dw(le32_ptd.dw6); 521 ptd->dw7 = le32_to_dw(le32_ptd.dw7); 522} 523 524static void ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, 525 struct ptd *ptd) 526{ 527 struct isp1760_hcd *priv = hcd_to_priv(hcd); 528 529 if (!priv->is_isp1763) 530 return isp1760_ptd_read(hcd, ptd_offset, slot, ptd); 531 532 isp1763_ptd_read(hcd, ptd_offset, slot, ptd); 533} 534 535static void isp1763_ptd_write(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, 536 struct ptd *cpu_ptd) 537{ 538 u16 dst_offset = ptd_offset + slot * sizeof(*cpu_ptd); 539 struct ptd_le32 ptd; 540 541 ptd.dw0 = dw_to_le32(cpu_ptd->dw0); 542 ptd.dw1 = dw_to_le32(cpu_ptd->dw1); 543 ptd.dw2 = dw_to_le32(cpu_ptd->dw2); 544 ptd.dw3 = dw_to_le32(cpu_ptd->dw3); 545 ptd.dw4 = dw_to_le32(cpu_ptd->dw4); 546 ptd.dw5 = dw_to_le32(cpu_ptd->dw5); 547 ptd.dw6 = dw_to_le32(cpu_ptd->dw6); 548 ptd.dw7 = dw_to_le32(cpu_ptd->dw7); 549 550 isp1763_mem_write(hcd, dst_offset, (u16 *)&ptd.dw0, 551 8 * sizeof(ptd.dw0)); 552} 553 554static void isp1760_ptd_write(void __iomem *base, u32 ptd_offset, u32 slot, 555 struct ptd *ptd) 556{ 557 u32 dst_offset = ptd_offset + slot * sizeof(*ptd); 558 559 /* 560 * Make sure dw0 gets written last (after other dw's and after payload) 561 * since it contains the enable bit 562 */ 563 isp1760_mem_write(base, dst_offset + sizeof(ptd->dw0), 564 (__force u32 *)&ptd->dw1, 7 * sizeof(ptd->dw1)); 565 wmb(); 566 isp1760_mem_write(base, dst_offset, (__force u32 *)&ptd->dw0, 567 sizeof(ptd->dw0)); 568} 569 570static void ptd_write(struct usb_hcd *hcd, u32 ptd_offset, u32 slot, 571 struct ptd *ptd) 572{ 573 struct isp1760_hcd *priv = hcd_to_priv(hcd); 574 575 if (!priv->is_isp1763) 576 return isp1760_ptd_write(priv->base, ptd_offset, slot, ptd); 577 578 isp1763_ptd_write(hcd, ptd_offset, slot, ptd); 579} 580 581/* memory management of the 60kb on the chip from 0x1000 to 0xffff */ 582static void init_memory(struct isp1760_hcd *priv) 583{ 584 const struct isp1760_memory_layout *mem = priv->memory_layout; 585 int i, j, curr; 586 u32 payload_addr; 587 588 payload_addr = PAYLOAD_OFFSET; 589 590 for (i = 0, curr = 0; i < ARRAY_SIZE(mem->blocks); i++, curr += j) { 591 for (j = 0; j < mem->blocks[i]; j++) { 592 priv->memory_pool[curr + j].start = payload_addr; 593 priv->memory_pool[curr + j].size = mem->blocks_size[i]; 594 priv->memory_pool[curr + j].free = 1; 595 payload_addr += priv->memory_pool[curr + j].size; 596 } 597 } 598 599 WARN_ON(payload_addr - priv->memory_pool[0].start > 600 mem->payload_area_size); 601} 602 603static void alloc_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd) 604{ 605 struct isp1760_hcd *priv = hcd_to_priv(hcd); 606 const struct isp1760_memory_layout *mem = priv->memory_layout; 607 int i; 608 609 WARN_ON(qtd->payload_addr); 610 611 if (!qtd->length) 612 return; 613 614 for (i = 0; i < mem->payload_blocks; i++) { 615 if (priv->memory_pool[i].size >= qtd->length && 616 priv->memory_pool[i].free) { 617 priv->memory_pool[i].free = 0; 618 qtd->payload_addr = priv->memory_pool[i].start; 619 return; 620 } 621 } 622} 623 624static void free_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd) 625{ 626 struct isp1760_hcd *priv = hcd_to_priv(hcd); 627 const struct isp1760_memory_layout *mem = priv->memory_layout; 628 int i; 629 630 if (!qtd->payload_addr) 631 return; 632 633 for (i = 0; i < mem->payload_blocks; i++) { 634 if (priv->memory_pool[i].start == qtd->payload_addr) { 635 WARN_ON(priv->memory_pool[i].free); 636 priv->memory_pool[i].free = 1; 637 qtd->payload_addr = 0; 638 return; 639 } 640 } 641 642 dev_err(hcd->self.controller, "%s: Invalid pointer: %08x\n", 643 __func__, qtd->payload_addr); 644 WARN_ON(1); 645 qtd->payload_addr = 0; 646} 647 648/* reset a non-running (STS_HALT == 1) controller */ 649static int ehci_reset(struct usb_hcd *hcd) 650{ 651 struct isp1760_hcd *priv = hcd_to_priv(hcd); 652 653 hcd->state = HC_STATE_HALT; 654 priv->next_statechange = jiffies; 655 656 return isp1760_hcd_set_and_wait_swap(hcd, CMD_RESET, 250 * 1000); 657} 658 659static struct isp1760_qh *qh_alloc(gfp_t flags) 660{ 661 struct isp1760_qh *qh; 662 663 qh = kmem_cache_zalloc(qh_cachep, flags); 664 if (!qh) 665 return NULL; 666 667 INIT_LIST_HEAD(&qh->qh_list); 668 INIT_LIST_HEAD(&qh->qtd_list); 669 qh->slot = -1; 670 671 return qh; 672} 673 674static void qh_free(struct isp1760_qh *qh) 675{ 676 WARN_ON(!list_empty(&qh->qtd_list)); 677 WARN_ON(qh->slot > -1); 678 kmem_cache_free(qh_cachep, qh); 679} 680 681/* one-time init, only for memory state */ 682static int priv_init(struct usb_hcd *hcd) 683{ 684 struct isp1760_hcd *priv = hcd_to_priv(hcd); 685 u32 isoc_cache; 686 u32 isoc_thres; 687 int i; 688 689 spin_lock_init(&priv->lock); 690 691 for (i = 0; i < QH_END; i++) 692 INIT_LIST_HEAD(&priv->qh_list[i]); 693 694 /* 695 * hw default: 1K periodic list heads, one per frame. 696 * periodic_size can shrink by USBCMD update if hcc_params allows. 697 */ 698 priv->periodic_size = DEFAULT_I_TDPS; 699 700 if (priv->is_isp1763) { 701 priv->i_thresh = 2; 702 return 0; 703 } 704 705 /* controllers may cache some of the periodic schedule ... */ 706 isoc_cache = isp1760_hcd_read(hcd, HCC_ISOC_CACHE); 707 isoc_thres = isp1760_hcd_read(hcd, HCC_ISOC_THRES); 708 709 /* full frame cache */ 710 if (isoc_cache) 711 priv->i_thresh = 8; 712 else /* N microframes cached */ 713 priv->i_thresh = 2 + isoc_thres; 714 715 return 0; 716} 717 718static int isp1760_hc_setup(struct usb_hcd *hcd) 719{ 720 struct isp1760_hcd *priv = hcd_to_priv(hcd); 721 u32 atx_reset; 722 int result; 723 u32 scratch; 724 u32 pattern; 725 726 if (priv->is_isp1763) 727 pattern = 0xcafe; 728 else 729 pattern = 0xdeadcafe; 730 731 isp1760_hcd_write(hcd, HC_SCRATCH, pattern); 732 733 /* 734 * we do not care about the read value here we just want to 735 * change bus pattern. 736 */ 737 isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); 738 scratch = isp1760_hcd_read(hcd, HC_SCRATCH); 739 if (scratch != pattern) { 740 dev_err(hcd->self.controller, "Scratch test failed. 0x%08x\n", 741 scratch); 742 return -ENODEV; 743 } 744 745 /* 746 * The RESET_HC bit in the SW_RESET register is supposed to reset the 747 * host controller without touching the CPU interface registers, but at 748 * least on the ISP1761 it seems to behave as the RESET_ALL bit and 749 * reset the whole device. We thus can't use it here, so let's reset 750 * the host controller through the EHCI USB Command register. The device 751 * has been reset in core code anyway, so this shouldn't matter. 752 */ 753 isp1760_hcd_clear(hcd, ISO_BUF_FILL); 754 isp1760_hcd_clear(hcd, INT_BUF_FILL); 755 isp1760_hcd_clear(hcd, ATL_BUF_FILL); 756 757 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); 758 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); 759 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); 760 761 result = ehci_reset(hcd); 762 if (result) 763 return result; 764 765 /* Step 11 passed */ 766 767 /* ATL reset */ 768 if (priv->is_isp1763) 769 atx_reset = SW_RESET_RESET_ATX; 770 else 771 atx_reset = ALL_ATX_RESET; 772 773 isp1760_hcd_set(hcd, atx_reset); 774 mdelay(10); 775 isp1760_hcd_clear(hcd, atx_reset); 776 777 if (priv->is_isp1763) { 778 isp1760_hcd_set(hcd, HW_OTG_DISABLE); 779 isp1760_hcd_set(hcd, HW_SW_SEL_HC_DC_CLEAR); 780 isp1760_hcd_set(hcd, HW_HC_2_DIS_CLEAR); 781 mdelay(10); 782 783 isp1760_hcd_set(hcd, HW_INTF_LOCK); 784 } 785 786 isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE); 787 isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE); 788 789 return priv_init(hcd); 790} 791 792static u32 base_to_chip(u32 base) 793{ 794 return ((base - 0x400) >> 3); 795} 796 797static int last_qtd_of_urb(struct isp1760_qtd *qtd, struct isp1760_qh *qh) 798{ 799 struct urb *urb; 800 801 if (list_is_last(&qtd->qtd_list, &qh->qtd_list)) 802 return 1; 803 804 urb = qtd->urb; 805 qtd = list_entry(qtd->qtd_list.next, typeof(*qtd), qtd_list); 806 return (qtd->urb != urb); 807} 808 809/* magic numbers that can affect system performance */ 810#define EHCI_TUNE_CERR 3 /* 0-3 qtd retries; 0 == don't stop */ 811#define EHCI_TUNE_RL_HS 4 /* nak throttle; see 4.9 */ 812#define EHCI_TUNE_RL_TT 0 813#define EHCI_TUNE_MULT_HS 1 /* 1-3 transactions/uframe; 4.10.3 */ 814#define EHCI_TUNE_MULT_TT 1 815#define EHCI_TUNE_FLS 2 /* (small) 256 frame schedule */ 816 817static void create_ptd_atl(struct isp1760_qh *qh, 818 struct isp1760_qtd *qtd, struct ptd *ptd) 819{ 820 u32 maxpacket; 821 u32 multi; 822 u32 rl = RL_COUNTER; 823 u32 nak = NAK_COUNTER; 824 825 memset(ptd, 0, sizeof(*ptd)); 826 827 /* according to 3.6.2, max packet len can not be > 0x400 */ 828 maxpacket = usb_maxpacket(qtd->urb->dev, qtd->urb->pipe); 829 multi = 1 + ((maxpacket >> 11) & 0x3); 830 maxpacket &= 0x7ff; 831 832 /* DW0 */ 833 ptd->dw0 = DW0_VALID_BIT; 834 ptd->dw0 |= TO_DW0_LENGTH(qtd->length); 835 ptd->dw0 |= TO_DW0_MAXPACKET(maxpacket); 836 ptd->dw0 |= TO_DW0_ENDPOINT(usb_pipeendpoint(qtd->urb->pipe)); 837 838 /* DW1 */ 839 ptd->dw1 = TO_DW((usb_pipeendpoint(qtd->urb->pipe) >> 1)); 840 ptd->dw1 |= TO_DW1_DEVICE_ADDR(usb_pipedevice(qtd->urb->pipe)); 841 ptd->dw1 |= TO_DW1_PID_TOKEN(qtd->packet_type); 842 843 if (usb_pipebulk(qtd->urb->pipe)) 844 ptd->dw1 |= DW1_TRANS_BULK; 845 else if (usb_pipeint(qtd->urb->pipe)) 846 ptd->dw1 |= DW1_TRANS_INT; 847 848 if (qtd->urb->dev->speed != USB_SPEED_HIGH) { 849 /* split transaction */ 850 851 ptd->dw1 |= DW1_TRANS_SPLIT; 852 if (qtd->urb->dev->speed == USB_SPEED_LOW) 853 ptd->dw1 |= DW1_SE_USB_LOSPEED; 854 855 ptd->dw1 |= TO_DW1_PORT_NUM(qtd->urb->dev->ttport); 856 ptd->dw1 |= TO_DW1_HUB_NUM(qtd->urb->dev->tt->hub->devnum); 857 858 /* SE bit for Split INT transfers */ 859 if (usb_pipeint(qtd->urb->pipe) && 860 (qtd->urb->dev->speed == USB_SPEED_LOW)) 861 ptd->dw1 |= DW1_SE_USB_LOSPEED; 862 863 rl = 0; 864 nak = 0; 865 } else { 866 ptd->dw0 |= TO_DW0_MULTI(multi); 867 if (usb_pipecontrol(qtd->urb->pipe) || 868 usb_pipebulk(qtd->urb->pipe)) 869 ptd->dw3 |= TO_DW3_PING(qh->ping); 870 } 871 /* DW2 */ 872 ptd->dw2 = 0; 873 ptd->dw2 |= TO_DW2_DATA_START_ADDR(base_to_chip(qtd->payload_addr)); 874 ptd->dw2 |= TO_DW2_RL(rl); 875 876 /* DW3 */ 877 ptd->dw3 |= TO_DW3_NAKCOUNT(nak); 878 ptd->dw3 |= TO_DW3_DATA_TOGGLE(qh->toggle); 879 if (usb_pipecontrol(qtd->urb->pipe)) { 880 if (qtd->data_buffer == qtd->urb->setup_packet) 881 ptd->dw3 &= ~TO_DW3_DATA_TOGGLE(1); 882 else if (last_qtd_of_urb(qtd, qh)) 883 ptd->dw3 |= TO_DW3_DATA_TOGGLE(1); 884 } 885 886 ptd->dw3 |= DW3_ACTIVE_BIT; 887 /* Cerr */ 888 ptd->dw3 |= TO_DW3_CERR(ERR_COUNTER); 889} 890 891static void transform_add_int(struct isp1760_qh *qh, 892 struct isp1760_qtd *qtd, struct ptd *ptd) 893{ 894 u32 usof; 895 u32 period; 896 897 /* 898 * Most of this is guessing. ISP1761 datasheet is quite unclear, and 899 * the algorithm from the original Philips driver code, which was 900 * pretty much used in this driver before as well, is quite horrendous 901 * and, i believe, incorrect. The code below follows the datasheet and 902 * USB2.0 spec as far as I can tell, and plug/unplug seems to be much 903 * more reliable this way (fingers crossed...). 904 */ 905 906 if (qtd->urb->dev->speed == USB_SPEED_HIGH) { 907 /* urb->interval is in units of microframes (1/8 ms) */ 908 period = qtd->urb->interval >> 3; 909 910 if (qtd->urb->interval > 4) 911 usof = 0x01; /* One bit set => 912 interval 1 ms * uFrame-match */ 913 else if (qtd->urb->interval > 2) 914 usof = 0x22; /* Two bits set => interval 1/2 ms */ 915 else if (qtd->urb->interval > 1) 916 usof = 0x55; /* Four bits set => interval 1/4 ms */ 917 else 918 usof = 0xff; /* All bits set => interval 1/8 ms */ 919 } else { 920 /* urb->interval is in units of frames (1 ms) */ 921 period = qtd->urb->interval; 922 usof = 0x0f; /* Execute Start Split on any of the 923 four first uFrames */ 924 925 /* 926 * First 8 bits in dw5 is uSCS and "specifies which uSOF the 927 * complete split needs to be sent. Valid only for IN." Also, 928 * "All bits can be set to one for every transfer." (p 82, 929 * ISP1761 data sheet.) 0x1c is from Philips driver. Where did 930 * that number come from? 0xff seems to work fine... 931 */ 932 /* ptd->dw5 = 0x1c; */ 933 ptd->dw5 = TO_DW(0xff); /* Execute Complete Split on any uFrame */ 934 } 935 936 period = period >> 1;/* Ensure equal or shorter period than requested */ 937 period &= 0xf8; /* Mask off too large values and lowest unused 3 bits */ 938 939 ptd->dw2 |= TO_DW(period); 940 ptd->dw4 = TO_DW(usof); 941} 942 943static void create_ptd_int(struct isp1760_qh *qh, 944 struct isp1760_qtd *qtd, struct ptd *ptd) 945{ 946 create_ptd_atl(qh, qtd, ptd); 947 transform_add_int(qh, qtd, ptd); 948} 949 950static void isp1760_urb_done(struct usb_hcd *hcd, struct urb *urb) 951__releases(priv->lock) 952__acquires(priv->lock) 953{ 954 struct isp1760_hcd *priv = hcd_to_priv(hcd); 955 956 if (!urb->unlinked) { 957 if (urb->status == -EINPROGRESS) 958 urb->status = 0; 959 } 960 961 if (usb_pipein(urb->pipe) && usb_pipetype(urb->pipe) != PIPE_CONTROL) { 962 void *ptr; 963 for (ptr = urb->transfer_buffer; 964 ptr < urb->transfer_buffer + urb->transfer_buffer_length; 965 ptr += PAGE_SIZE) 966 flush_dcache_page(virt_to_page(ptr)); 967 } 968 969 /* complete() can reenter this HCD */ 970 usb_hcd_unlink_urb_from_ep(hcd, urb); 971 spin_unlock(&priv->lock); 972 usb_hcd_giveback_urb(hcd, urb, urb->status); 973 spin_lock(&priv->lock); 974} 975 976static struct isp1760_qtd *qtd_alloc(gfp_t flags, struct urb *urb, 977 u8 packet_type) 978{ 979 struct isp1760_qtd *qtd; 980 981 qtd = kmem_cache_zalloc(qtd_cachep, flags); 982 if (!qtd) 983 return NULL; 984 985 INIT_LIST_HEAD(&qtd->qtd_list); 986 qtd->urb = urb; 987 qtd->packet_type = packet_type; 988 qtd->status = QTD_ENQUEUED; 989 qtd->actual_length = 0; 990 991 return qtd; 992} 993 994static void qtd_free(struct isp1760_qtd *qtd) 995{ 996 WARN_ON(qtd->payload_addr); 997 kmem_cache_free(qtd_cachep, qtd); 998} 999 1000static void start_bus_transfer(struct usb_hcd *hcd, u32 ptd_offset, int slot, 1001 struct isp1760_slotinfo *slots, 1002 struct isp1760_qtd *qtd, struct isp1760_qh *qh, 1003 struct ptd *ptd) 1004{ 1005 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1006 const struct isp1760_memory_layout *mem = priv->memory_layout; 1007 int skip_map; 1008 1009 WARN_ON((slot < 0) || (slot > mem->slot_num - 1)); 1010 WARN_ON(qtd->length && !qtd->payload_addr); 1011 WARN_ON(slots[slot].qtd); 1012 WARN_ON(slots[slot].qh); 1013 WARN_ON(qtd->status != QTD_PAYLOAD_ALLOC); 1014 1015 if (priv->is_isp1763) 1016 ndelay(100); 1017 1018 /* Make sure done map has not triggered from some unlinked transfer */ 1019 if (ptd_offset == ATL_PTD_OFFSET) { 1020 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); 1021 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, 1022 skip_map | (1 << slot)); 1023 priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP); 1024 priv->atl_done_map &= ~(1 << slot); 1025 } else { 1026 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); 1027 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, 1028 skip_map | (1 << slot)); 1029 priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP); 1030 priv->int_done_map &= ~(1 << slot); 1031 } 1032 1033 skip_map &= ~(1 << slot); 1034 qh->slot = slot; 1035 qtd->status = QTD_XFER_STARTED; 1036 slots[slot].timestamp = jiffies; 1037 slots[slot].qtd = qtd; 1038 slots[slot].qh = qh; 1039 ptd_write(hcd, ptd_offset, slot, ptd); 1040 1041 if (ptd_offset == ATL_PTD_OFFSET) 1042 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map); 1043 else 1044 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map); 1045} 1046 1047static int is_short_bulk(struct isp1760_qtd *qtd) 1048{ 1049 return (usb_pipebulk(qtd->urb->pipe) && 1050 (qtd->actual_length < qtd->length)); 1051} 1052 1053static void collect_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh, 1054 struct list_head *urb_list) 1055{ 1056 struct isp1760_qtd *qtd, *qtd_next; 1057 struct urb_listitem *urb_listitem; 1058 int last_qtd; 1059 1060 list_for_each_entry_safe(qtd, qtd_next, &qh->qtd_list, qtd_list) { 1061 if (qtd->status < QTD_XFER_COMPLETE) 1062 break; 1063 1064 last_qtd = last_qtd_of_urb(qtd, qh); 1065 1066 if ((!last_qtd) && (qtd->status == QTD_RETIRE)) 1067 qtd_next->status = QTD_RETIRE; 1068 1069 if (qtd->status == QTD_XFER_COMPLETE) { 1070 if (qtd->actual_length) { 1071 switch (qtd->packet_type) { 1072 case IN_PID: 1073 mem_read(hcd, qtd->payload_addr, 1074 qtd->data_buffer, 1075 qtd->actual_length); 1076 fallthrough; 1077 case OUT_PID: 1078 qtd->urb->actual_length += 1079 qtd->actual_length; 1080 fallthrough; 1081 case SETUP_PID: 1082 break; 1083 } 1084 } 1085 1086 if (is_short_bulk(qtd)) { 1087 if (qtd->urb->transfer_flags & URB_SHORT_NOT_OK) 1088 qtd->urb->status = -EREMOTEIO; 1089 if (!last_qtd) 1090 qtd_next->status = QTD_RETIRE; 1091 } 1092 } 1093 1094 if (qtd->payload_addr) 1095 free_mem(hcd, qtd); 1096 1097 if (last_qtd) { 1098 if ((qtd->status == QTD_RETIRE) && 1099 (qtd->urb->status == -EINPROGRESS)) 1100 qtd->urb->status = -EPIPE; 1101 /* Defer calling of urb_done() since it releases lock */ 1102 urb_listitem = kmem_cache_zalloc(urb_listitem_cachep, 1103 GFP_ATOMIC); 1104 if (unlikely(!urb_listitem)) 1105 break; /* Try again on next call */ 1106 urb_listitem->urb = qtd->urb; 1107 list_add_tail(&urb_listitem->urb_list, urb_list); 1108 } 1109 1110 list_del(&qtd->qtd_list); 1111 qtd_free(qtd); 1112 } 1113} 1114 1115#define ENQUEUE_DEPTH 2 1116static void enqueue_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh) 1117{ 1118 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1119 const struct isp1760_memory_layout *mem = priv->memory_layout; 1120 int slot_num = mem->slot_num; 1121 int ptd_offset; 1122 struct isp1760_slotinfo *slots; 1123 int curr_slot, free_slot; 1124 int n; 1125 struct ptd ptd; 1126 struct isp1760_qtd *qtd; 1127 1128 if (unlikely(list_empty(&qh->qtd_list))) { 1129 WARN_ON(1); 1130 return; 1131 } 1132 1133 /* Make sure this endpoint's TT buffer is clean before queueing ptds */ 1134 if (qh->tt_buffer_dirty) 1135 return; 1136 1137 if (usb_pipeint(list_entry(qh->qtd_list.next, struct isp1760_qtd, 1138 qtd_list)->urb->pipe)) { 1139 ptd_offset = INT_PTD_OFFSET; 1140 slots = priv->int_slots; 1141 } else { 1142 ptd_offset = ATL_PTD_OFFSET; 1143 slots = priv->atl_slots; 1144 } 1145 1146 free_slot = -1; 1147 for (curr_slot = 0; curr_slot < slot_num; curr_slot++) { 1148 if ((free_slot == -1) && (slots[curr_slot].qtd == NULL)) 1149 free_slot = curr_slot; 1150 if (slots[curr_slot].qh == qh) 1151 break; 1152 } 1153 1154 n = 0; 1155 list_for_each_entry(qtd, &qh->qtd_list, qtd_list) { 1156 if (qtd->status == QTD_ENQUEUED) { 1157 WARN_ON(qtd->payload_addr); 1158 alloc_mem(hcd, qtd); 1159 if ((qtd->length) && (!qtd->payload_addr)) 1160 break; 1161 1162 if (qtd->length && (qtd->packet_type == SETUP_PID || 1163 qtd->packet_type == OUT_PID)) { 1164 mem_write(hcd, qtd->payload_addr, 1165 qtd->data_buffer, qtd->length); 1166 } 1167 1168 qtd->status = QTD_PAYLOAD_ALLOC; 1169 } 1170 1171 if (qtd->status == QTD_PAYLOAD_ALLOC) { 1172/* 1173 if ((curr_slot > 31) && (free_slot == -1)) 1174 dev_dbg(hcd->self.controller, "%s: No slot " 1175 "available for transfer\n", __func__); 1176*/ 1177 /* Start xfer for this endpoint if not already done */ 1178 if ((curr_slot > slot_num - 1) && (free_slot > -1)) { 1179 if (usb_pipeint(qtd->urb->pipe)) 1180 create_ptd_int(qh, qtd, &ptd); 1181 else 1182 create_ptd_atl(qh, qtd, &ptd); 1183 1184 start_bus_transfer(hcd, ptd_offset, free_slot, 1185 slots, qtd, qh, &ptd); 1186 curr_slot = free_slot; 1187 } 1188 1189 n++; 1190 if (n >= ENQUEUE_DEPTH) 1191 break; 1192 } 1193 } 1194} 1195 1196static void schedule_ptds(struct usb_hcd *hcd) 1197{ 1198 struct isp1760_hcd *priv; 1199 struct isp1760_qh *qh, *qh_next; 1200 struct list_head *ep_queue; 1201 LIST_HEAD(urb_list); 1202 struct urb_listitem *urb_listitem, *urb_listitem_next; 1203 int i; 1204 1205 if (!hcd) { 1206 WARN_ON(1); 1207 return; 1208 } 1209 1210 priv = hcd_to_priv(hcd); 1211 1212 /* 1213 * check finished/retired xfers, transfer payloads, call urb_done() 1214 */ 1215 for (i = 0; i < QH_END; i++) { 1216 ep_queue = &priv->qh_list[i]; 1217 list_for_each_entry_safe(qh, qh_next, ep_queue, qh_list) { 1218 collect_qtds(hcd, qh, &urb_list); 1219 if (list_empty(&qh->qtd_list)) 1220 list_del(&qh->qh_list); 1221 } 1222 } 1223 1224 list_for_each_entry_safe(urb_listitem, urb_listitem_next, &urb_list, 1225 urb_list) { 1226 isp1760_urb_done(hcd, urb_listitem->urb); 1227 kmem_cache_free(urb_listitem_cachep, urb_listitem); 1228 } 1229 1230 /* 1231 * Schedule packets for transfer. 1232 * 1233 * According to USB2.0 specification: 1234 * 1235 * 1st prio: interrupt xfers, up to 80 % of bandwidth 1236 * 2nd prio: control xfers 1237 * 3rd prio: bulk xfers 1238 * 1239 * ... but let's use a simpler scheme here (mostly because ISP1761 doc 1240 * is very unclear on how to prioritize traffic): 1241 * 1242 * 1) Enqueue any queued control transfers, as long as payload chip mem 1243 * and PTD ATL slots are available. 1244 * 2) Enqueue any queued INT transfers, as long as payload chip mem 1245 * and PTD INT slots are available. 1246 * 3) Enqueue any queued bulk transfers, as long as payload chip mem 1247 * and PTD ATL slots are available. 1248 * 1249 * Use double buffering (ENQUEUE_DEPTH==2) as a compromise between 1250 * conservation of chip mem and performance. 1251 * 1252 * I'm sure this scheme could be improved upon! 1253 */ 1254 for (i = 0; i < QH_END; i++) { 1255 ep_queue = &priv->qh_list[i]; 1256 list_for_each_entry_safe(qh, qh_next, ep_queue, qh_list) 1257 enqueue_qtds(hcd, qh); 1258 } 1259} 1260 1261#define PTD_STATE_QTD_DONE 1 1262#define PTD_STATE_QTD_RELOAD 2 1263#define PTD_STATE_URB_RETIRE 3 1264 1265static int check_int_transfer(struct usb_hcd *hcd, struct ptd *ptd, 1266 struct urb *urb) 1267{ 1268 u32 dw4; 1269 int i; 1270 1271 dw4 = TO_U32(ptd->dw4); 1272 dw4 >>= 8; 1273 1274 /* FIXME: ISP1761 datasheet does not say what to do with these. Do we 1275 need to handle these errors? Is it done in hardware? */ 1276 1277 if (ptd->dw3 & DW3_HALT_BIT) { 1278 1279 urb->status = -EPROTO; /* Default unknown error */ 1280 1281 for (i = 0; i < 8; i++) { 1282 switch (dw4 & 0x7) { 1283 case INT_UNDERRUN: 1284 dev_dbg(hcd->self.controller, "%s: underrun " 1285 "during uFrame %d\n", 1286 __func__, i); 1287 urb->status = -ECOMM; /* Could not write data */ 1288 break; 1289 case INT_EXACT: 1290 dev_dbg(hcd->self.controller, "%s: transaction " 1291 "error during uFrame %d\n", 1292 __func__, i); 1293 urb->status = -EPROTO; /* timeout, bad CRC, PID 1294 error etc. */ 1295 break; 1296 case INT_BABBLE: 1297 dev_dbg(hcd->self.controller, "%s: babble " 1298 "error during uFrame %d\n", 1299 __func__, i); 1300 urb->status = -EOVERFLOW; 1301 break; 1302 } 1303 dw4 >>= 3; 1304 } 1305 1306 return PTD_STATE_URB_RETIRE; 1307 } 1308 1309 return PTD_STATE_QTD_DONE; 1310} 1311 1312static int check_atl_transfer(struct usb_hcd *hcd, struct ptd *ptd, 1313 struct urb *urb) 1314{ 1315 WARN_ON(!ptd); 1316 if (ptd->dw3 & DW3_HALT_BIT) { 1317 if (ptd->dw3 & DW3_BABBLE_BIT) 1318 urb->status = -EOVERFLOW; 1319 else if (FROM_DW3_CERR(ptd->dw3)) 1320 urb->status = -EPIPE; /* Stall */ 1321 else 1322 urb->status = -EPROTO; /* Unknown */ 1323/* 1324 dev_dbg(hcd->self.controller, "%s: ptd error:\n" 1325 " dw0: %08x dw1: %08x dw2: %08x dw3: %08x\n" 1326 " dw4: %08x dw5: %08x dw6: %08x dw7: %08x\n", 1327 __func__, 1328 ptd->dw0, ptd->dw1, ptd->dw2, ptd->dw3, 1329 ptd->dw4, ptd->dw5, ptd->dw6, ptd->dw7); 1330*/ 1331 return PTD_STATE_URB_RETIRE; 1332 } 1333 1334 if ((ptd->dw3 & DW3_ERROR_BIT) && (ptd->dw3 & DW3_ACTIVE_BIT)) { 1335 /* Transfer Error, *but* active and no HALT -> reload */ 1336 dev_dbg(hcd->self.controller, "PID error; reloading ptd\n"); 1337 return PTD_STATE_QTD_RELOAD; 1338 } 1339 1340 if (!FROM_DW3_NAKCOUNT(ptd->dw3) && (ptd->dw3 & DW3_ACTIVE_BIT)) { 1341 /* 1342 * NAKs are handled in HW by the chip. Usually if the 1343 * device is not able to send data fast enough. 1344 * This happens mostly on slower hardware. 1345 */ 1346 return PTD_STATE_QTD_RELOAD; 1347 } 1348 1349 return PTD_STATE_QTD_DONE; 1350} 1351 1352static void handle_done_ptds(struct usb_hcd *hcd) 1353{ 1354 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1355 struct ptd ptd; 1356 struct isp1760_qh *qh; 1357 int slot; 1358 int state; 1359 struct isp1760_slotinfo *slots; 1360 u32 ptd_offset; 1361 struct isp1760_qtd *qtd; 1362 int modified; 1363 int skip_map; 1364 1365 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); 1366 priv->int_done_map &= ~skip_map; 1367 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); 1368 priv->atl_done_map &= ~skip_map; 1369 1370 modified = priv->int_done_map || priv->atl_done_map; 1371 1372 while (priv->int_done_map || priv->atl_done_map) { 1373 if (priv->int_done_map) { 1374 /* INT ptd */ 1375 slot = __ffs(priv->int_done_map); 1376 priv->int_done_map &= ~(1 << slot); 1377 slots = priv->int_slots; 1378 /* This should not trigger, and could be removed if 1379 noone have any problems with it triggering: */ 1380 if (!slots[slot].qh) { 1381 WARN_ON(1); 1382 continue; 1383 } 1384 ptd_offset = INT_PTD_OFFSET; 1385 ptd_read(hcd, INT_PTD_OFFSET, slot, &ptd); 1386 state = check_int_transfer(hcd, &ptd, 1387 slots[slot].qtd->urb); 1388 } else { 1389 /* ATL ptd */ 1390 slot = __ffs(priv->atl_done_map); 1391 priv->atl_done_map &= ~(1 << slot); 1392 slots = priv->atl_slots; 1393 /* This should not trigger, and could be removed if 1394 noone have any problems with it triggering: */ 1395 if (!slots[slot].qh) { 1396 WARN_ON(1); 1397 continue; 1398 } 1399 ptd_offset = ATL_PTD_OFFSET; 1400 ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd); 1401 state = check_atl_transfer(hcd, &ptd, 1402 slots[slot].qtd->urb); 1403 } 1404 1405 qtd = slots[slot].qtd; 1406 slots[slot].qtd = NULL; 1407 qh = slots[slot].qh; 1408 slots[slot].qh = NULL; 1409 qh->slot = -1; 1410 1411 WARN_ON(qtd->status != QTD_XFER_STARTED); 1412 1413 switch (state) { 1414 case PTD_STATE_QTD_DONE: 1415 if ((usb_pipeint(qtd->urb->pipe)) && 1416 (qtd->urb->dev->speed != USB_SPEED_HIGH)) 1417 qtd->actual_length = 1418 FROM_DW3_SCS_NRBYTESTRANSFERRED(ptd.dw3); 1419 else 1420 qtd->actual_length = 1421 FROM_DW3_NRBYTESTRANSFERRED(ptd.dw3); 1422 1423 qtd->status = QTD_XFER_COMPLETE; 1424 if (list_is_last(&qtd->qtd_list, &qh->qtd_list) || 1425 is_short_bulk(qtd)) 1426 qtd = NULL; 1427 else 1428 qtd = list_entry(qtd->qtd_list.next, 1429 typeof(*qtd), qtd_list); 1430 1431 qh->toggle = FROM_DW3_DATA_TOGGLE(ptd.dw3); 1432 qh->ping = FROM_DW3_PING(ptd.dw3); 1433 break; 1434 1435 case PTD_STATE_QTD_RELOAD: /* QTD_RETRY, for atls only */ 1436 qtd->status = QTD_PAYLOAD_ALLOC; 1437 ptd.dw0 |= DW0_VALID_BIT; 1438 /* RL counter = ERR counter */ 1439 ptd.dw3 &= ~TO_DW3_NAKCOUNT(0xf); 1440 ptd.dw3 |= TO_DW3_NAKCOUNT(FROM_DW2_RL(ptd.dw2)); 1441 ptd.dw3 &= ~TO_DW3_CERR(3); 1442 ptd.dw3 |= TO_DW3_CERR(ERR_COUNTER); 1443 qh->toggle = FROM_DW3_DATA_TOGGLE(ptd.dw3); 1444 qh->ping = FROM_DW3_PING(ptd.dw3); 1445 break; 1446 1447 case PTD_STATE_URB_RETIRE: 1448 qtd->status = QTD_RETIRE; 1449 if ((qtd->urb->dev->speed != USB_SPEED_HIGH) && 1450 (qtd->urb->status != -EPIPE) && 1451 (qtd->urb->status != -EREMOTEIO)) { 1452 qh->tt_buffer_dirty = 1; 1453 if (usb_hub_clear_tt_buffer(qtd->urb)) 1454 /* Clear failed; let's hope things work 1455 anyway */ 1456 qh->tt_buffer_dirty = 0; 1457 } 1458 qtd = NULL; 1459 qh->toggle = 0; 1460 qh->ping = 0; 1461 break; 1462 1463 default: 1464 WARN_ON(1); 1465 continue; 1466 } 1467 1468 if (qtd && (qtd->status == QTD_PAYLOAD_ALLOC)) { 1469 if (slots == priv->int_slots) { 1470 if (state == PTD_STATE_QTD_RELOAD) 1471 dev_err(hcd->self.controller, 1472 "%s: PTD_STATE_QTD_RELOAD on " 1473 "interrupt packet\n", __func__); 1474 if (state != PTD_STATE_QTD_RELOAD) 1475 create_ptd_int(qh, qtd, &ptd); 1476 } else { 1477 if (state != PTD_STATE_QTD_RELOAD) 1478 create_ptd_atl(qh, qtd, &ptd); 1479 } 1480 1481 start_bus_transfer(hcd, ptd_offset, slot, slots, qtd, 1482 qh, &ptd); 1483 } 1484 } 1485 1486 if (modified) 1487 schedule_ptds(hcd); 1488} 1489 1490static irqreturn_t isp1760_irq(struct usb_hcd *hcd) 1491{ 1492 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1493 irqreturn_t irqret = IRQ_NONE; 1494 u32 int_reg; 1495 u32 imask; 1496 1497 spin_lock(&priv->lock); 1498 1499 if (!(hcd->state & HC_STATE_RUNNING)) 1500 goto leave; 1501 1502 imask = isp1760_hcd_read(hcd, HC_INTERRUPT); 1503 if (unlikely(!imask)) 1504 goto leave; 1505 1506 int_reg = priv->is_isp1763 ? ISP1763_HC_INTERRUPT : 1507 ISP176x_HC_INTERRUPT; 1508 isp1760_reg_write(priv->regs, int_reg, imask); 1509 1510 priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP); 1511 priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP); 1512 1513 handle_done_ptds(hcd); 1514 1515 irqret = IRQ_HANDLED; 1516 1517leave: 1518 spin_unlock(&priv->lock); 1519 1520 return irqret; 1521} 1522 1523/* 1524 * Workaround for problem described in chip errata 2: 1525 * 1526 * Sometimes interrupts are not generated when ATL (not INT?) completion occurs. 1527 * One solution suggested in the errata is to use SOF interrupts _instead_of_ 1528 * ATL done interrupts (the "instead of" might be important since it seems 1529 * enabling ATL interrupts also causes the chip to sometimes - rarely - "forget" 1530 * to set the PTD's done bit in addition to not generating an interrupt!). 1531 * 1532 * So if we use SOF + ATL interrupts, we sometimes get stale PTDs since their 1533 * done bit is not being set. This is bad - it blocks the endpoint until reboot. 1534 * 1535 * If we use SOF interrupts only, we get latency between ptd completion and the 1536 * actual handling. This is very noticeable in testusb runs which takes several 1537 * minutes longer without ATL interrupts. 1538 * 1539 * A better solution is to run the code below every SLOT_CHECK_PERIOD ms. If it 1540 * finds active ATL slots which are older than SLOT_TIMEOUT ms, it checks the 1541 * slot's ACTIVE and VALID bits. If these are not set, the ptd is considered 1542 * completed and its done map bit is set. 1543 * 1544 * The values of SLOT_TIMEOUT and SLOT_CHECK_PERIOD have been arbitrarily chosen 1545 * not to cause too much lag when this HW bug occurs, while still hopefully 1546 * ensuring that the check does not falsely trigger. 1547 */ 1548#define SLOT_TIMEOUT 300 1549#define SLOT_CHECK_PERIOD 200 1550static struct timer_list errata2_timer; 1551static struct usb_hcd *errata2_timer_hcd; 1552 1553static void errata2_function(struct timer_list *unused) 1554{ 1555 struct usb_hcd *hcd = errata2_timer_hcd; 1556 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1557 const struct isp1760_memory_layout *mem = priv->memory_layout; 1558 int slot; 1559 struct ptd ptd; 1560 unsigned long spinflags; 1561 1562 spin_lock_irqsave(&priv->lock, spinflags); 1563 1564 for (slot = 0; slot < mem->slot_num; slot++) 1565 if (priv->atl_slots[slot].qh && time_after(jiffies, 1566 priv->atl_slots[slot].timestamp + 1567 msecs_to_jiffies(SLOT_TIMEOUT))) { 1568 ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd); 1569 if (!FROM_DW0_VALID(ptd.dw0) && 1570 !FROM_DW3_ACTIVE(ptd.dw3)) 1571 priv->atl_done_map |= 1 << slot; 1572 } 1573 1574 if (priv->atl_done_map) 1575 handle_done_ptds(hcd); 1576 1577 spin_unlock_irqrestore(&priv->lock, spinflags); 1578 1579 errata2_timer.expires = jiffies + msecs_to_jiffies(SLOT_CHECK_PERIOD); 1580 add_timer(&errata2_timer); 1581} 1582 1583static int isp1763_run(struct usb_hcd *hcd) 1584{ 1585 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1586 int retval; 1587 u32 chipid_h; 1588 u32 chipid_l; 1589 u32 chip_rev; 1590 u32 ptd_atl_int; 1591 u32 ptd_iso; 1592 1593 hcd->uses_new_polling = 1; 1594 hcd->state = HC_STATE_RUNNING; 1595 1596 chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); 1597 chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW); 1598 chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV); 1599 dev_info(hcd->self.controller, "USB ISP %02x%02x HW rev. %d started\n", 1600 chipid_h, chipid_l, chip_rev); 1601 1602 isp1760_hcd_clear(hcd, ISO_BUF_FILL); 1603 isp1760_hcd_clear(hcd, INT_BUF_FILL); 1604 isp1760_hcd_clear(hcd, ATL_BUF_FILL); 1605 1606 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); 1607 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); 1608 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); 1609 ndelay(100); 1610 isp1760_hcd_clear(hcd, HC_ATL_PTD_DONEMAP); 1611 isp1760_hcd_clear(hcd, HC_INT_PTD_DONEMAP); 1612 isp1760_hcd_clear(hcd, HC_ISO_PTD_DONEMAP); 1613 1614 isp1760_hcd_set(hcd, HW_OTG_DISABLE); 1615 isp1760_reg_write(priv->regs, ISP1763_HC_OTG_CTRL_CLEAR, BIT(7)); 1616 isp1760_reg_write(priv->regs, ISP1763_HC_OTG_CTRL_CLEAR, BIT(15)); 1617 mdelay(10); 1618 1619 isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE); 1620 isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE); 1621 1622 isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN); 1623 1624 isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND); 1625 isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND); 1626 isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND); 1627 1628 isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR); 1629 isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR); 1630 isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR); 1631 1632 ptd_atl_int = 0x8000; 1633 ptd_iso = 0x0001; 1634 1635 isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int); 1636 isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int); 1637 isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso); 1638 1639 isp1760_hcd_set(hcd, ATL_BUF_FILL); 1640 isp1760_hcd_set(hcd, INT_BUF_FILL); 1641 1642 isp1760_hcd_clear(hcd, CMD_LRESET); 1643 isp1760_hcd_clear(hcd, CMD_RESET); 1644 1645 retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000); 1646 if (retval) 1647 return retval; 1648 1649 down_write(&ehci_cf_port_reset_rwsem); 1650 retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000); 1651 up_write(&ehci_cf_port_reset_rwsem); 1652 if (retval) 1653 return retval; 1654 1655 return 0; 1656} 1657 1658static int isp1760_run(struct usb_hcd *hcd) 1659{ 1660 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1661 int retval; 1662 u32 chipid_h; 1663 u32 chipid_l; 1664 u32 chip_rev; 1665 u32 ptd_atl_int; 1666 u32 ptd_iso; 1667 1668 /* 1669 * ISP1763 have some differences in the setup and order to enable 1670 * the ports, disable otg, setup buffers, and ATL, INT, ISO status. 1671 * So, just handle it a separate sequence. 1672 */ 1673 if (priv->is_isp1763) 1674 return isp1763_run(hcd); 1675 1676 hcd->uses_new_polling = 1; 1677 1678 hcd->state = HC_STATE_RUNNING; 1679 1680 /* Set PTD interrupt AND & OR maps */ 1681 isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND); 1682 isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND); 1683 isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND); 1684 1685 isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR); 1686 isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR); 1687 isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR); 1688 1689 /* step 23 passed */ 1690 1691 isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN); 1692 1693 isp1760_hcd_clear(hcd, CMD_LRESET); 1694 isp1760_hcd_clear(hcd, CMD_RESET); 1695 1696 retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000); 1697 if (retval) 1698 return retval; 1699 1700 /* 1701 * XXX 1702 * Spec says to write FLAG_CF as last config action, priv code grabs 1703 * the semaphore while doing so. 1704 */ 1705 down_write(&ehci_cf_port_reset_rwsem); 1706 1707 retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000); 1708 up_write(&ehci_cf_port_reset_rwsem); 1709 if (retval) 1710 return retval; 1711 1712 errata2_timer_hcd = hcd; 1713 timer_setup(&errata2_timer, errata2_function, 0); 1714 errata2_timer.expires = jiffies + msecs_to_jiffies(SLOT_CHECK_PERIOD); 1715 add_timer(&errata2_timer); 1716 1717 chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH); 1718 chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW); 1719 chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV); 1720 dev_info(hcd->self.controller, "USB ISP %02x%02x HW rev. %d started\n", 1721 chipid_h, chipid_l, chip_rev); 1722 1723 /* PTD Register Init Part 2, Step 28 */ 1724 1725 /* Setup registers controlling PTD checking */ 1726 ptd_atl_int = 0x80000000; 1727 ptd_iso = 0x00000001; 1728 1729 isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int); 1730 isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int); 1731 isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso); 1732 1733 isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP); 1734 isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP); 1735 isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP); 1736 1737 isp1760_hcd_set(hcd, ATL_BUF_FILL); 1738 isp1760_hcd_set(hcd, INT_BUF_FILL); 1739 1740 /* GRR this is run-once init(), being done every time the HC starts. 1741 * So long as they're part of class devices, we can't do it init() 1742 * since the class device isn't created that early. 1743 */ 1744 return 0; 1745} 1746 1747static int qtd_fill(struct isp1760_qtd *qtd, void *databuffer, size_t len) 1748{ 1749 qtd->data_buffer = databuffer; 1750 1751 qtd->length = len; 1752 1753 return qtd->length; 1754} 1755 1756static void qtd_list_free(struct list_head *qtd_list) 1757{ 1758 struct isp1760_qtd *qtd, *qtd_next; 1759 1760 list_for_each_entry_safe(qtd, qtd_next, qtd_list, qtd_list) { 1761 list_del(&qtd->qtd_list); 1762 qtd_free(qtd); 1763 } 1764} 1765 1766/* 1767 * Packetize urb->transfer_buffer into list of packets of size wMaxPacketSize. 1768 * Also calculate the PID type (SETUP/IN/OUT) for each packet. 1769 */ 1770static void packetize_urb(struct usb_hcd *hcd, 1771 struct urb *urb, struct list_head *head, gfp_t flags) 1772{ 1773 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1774 const struct isp1760_memory_layout *mem = priv->memory_layout; 1775 struct isp1760_qtd *qtd; 1776 void *buf; 1777 int len, maxpacketsize; 1778 u8 packet_type; 1779 1780 /* 1781 * URBs map to sequences of QTDs: one logical transaction 1782 */ 1783 1784 if (!urb->transfer_buffer && urb->transfer_buffer_length) { 1785 /* XXX This looks like usb storage / SCSI bug */ 1786 dev_err(hcd->self.controller, 1787 "buf is null, dma is %08lx len is %d\n", 1788 (long unsigned)urb->transfer_dma, 1789 urb->transfer_buffer_length); 1790 WARN_ON(1); 1791 } 1792 1793 if (usb_pipein(urb->pipe)) 1794 packet_type = IN_PID; 1795 else 1796 packet_type = OUT_PID; 1797 1798 if (usb_pipecontrol(urb->pipe)) { 1799 qtd = qtd_alloc(flags, urb, SETUP_PID); 1800 if (!qtd) 1801 goto cleanup; 1802 qtd_fill(qtd, urb->setup_packet, sizeof(struct usb_ctrlrequest)); 1803 list_add_tail(&qtd->qtd_list, head); 1804 1805 /* for zero length DATA stages, STATUS is always IN */ 1806 if (urb->transfer_buffer_length == 0) 1807 packet_type = IN_PID; 1808 } 1809 1810 maxpacketsize = usb_maxpacket(urb->dev, urb->pipe); 1811 1812 /* 1813 * buffer gets wrapped in one or more qtds; 1814 * last one may be "short" (including zero len) 1815 * and may serve as a control status ack 1816 */ 1817 buf = urb->transfer_buffer; 1818 len = urb->transfer_buffer_length; 1819 1820 for (;;) { 1821 int this_qtd_len; 1822 1823 qtd = qtd_alloc(flags, urb, packet_type); 1824 if (!qtd) 1825 goto cleanup; 1826 1827 if (len > mem->blocks_size[ISP176x_BLOCK_NUM - 1]) 1828 this_qtd_len = mem->blocks_size[ISP176x_BLOCK_NUM - 1]; 1829 else 1830 this_qtd_len = len; 1831 1832 this_qtd_len = qtd_fill(qtd, buf, this_qtd_len); 1833 list_add_tail(&qtd->qtd_list, head); 1834 1835 len -= this_qtd_len; 1836 buf += this_qtd_len; 1837 1838 if (len <= 0) 1839 break; 1840 } 1841 1842 /* 1843 * control requests may need a terminating data "status" ack; 1844 * bulk ones may need a terminating short packet (zero length). 1845 */ 1846 if (urb->transfer_buffer_length != 0) { 1847 int one_more = 0; 1848 1849 if (usb_pipecontrol(urb->pipe)) { 1850 one_more = 1; 1851 if (packet_type == IN_PID) 1852 packet_type = OUT_PID; 1853 else 1854 packet_type = IN_PID; 1855 } else if (usb_pipebulk(urb->pipe) && maxpacketsize 1856 && (urb->transfer_flags & URB_ZERO_PACKET) 1857 && !(urb->transfer_buffer_length % 1858 maxpacketsize)) { 1859 one_more = 1; 1860 } 1861 if (one_more) { 1862 qtd = qtd_alloc(flags, urb, packet_type); 1863 if (!qtd) 1864 goto cleanup; 1865 1866 /* never any data in such packets */ 1867 qtd_fill(qtd, NULL, 0); 1868 list_add_tail(&qtd->qtd_list, head); 1869 } 1870 } 1871 1872 return; 1873 1874cleanup: 1875 qtd_list_free(head); 1876} 1877 1878static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb, 1879 gfp_t mem_flags) 1880{ 1881 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1882 struct list_head *ep_queue; 1883 struct isp1760_qh *qh, *qhit; 1884 unsigned long spinflags; 1885 LIST_HEAD(new_qtds); 1886 int retval; 1887 int qh_in_queue; 1888 1889 switch (usb_pipetype(urb->pipe)) { 1890 case PIPE_CONTROL: 1891 ep_queue = &priv->qh_list[QH_CONTROL]; 1892 break; 1893 case PIPE_BULK: 1894 ep_queue = &priv->qh_list[QH_BULK]; 1895 break; 1896 case PIPE_INTERRUPT: 1897 if (urb->interval < 0) 1898 return -EINVAL; 1899 /* FIXME: Check bandwidth */ 1900 ep_queue = &priv->qh_list[QH_INTERRUPT]; 1901 break; 1902 case PIPE_ISOCHRONOUS: 1903 dev_err(hcd->self.controller, "%s: isochronous USB packets " 1904 "not yet supported\n", 1905 __func__); 1906 return -EPIPE; 1907 default: 1908 dev_err(hcd->self.controller, "%s: unknown pipe type\n", 1909 __func__); 1910 return -EPIPE; 1911 } 1912 1913 if (usb_pipein(urb->pipe)) 1914 urb->actual_length = 0; 1915 1916 packetize_urb(hcd, urb, &new_qtds, mem_flags); 1917 if (list_empty(&new_qtds)) 1918 return -ENOMEM; 1919 1920 spin_lock_irqsave(&priv->lock, spinflags); 1921 1922 if (!test_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags)) { 1923 retval = -ESHUTDOWN; 1924 qtd_list_free(&new_qtds); 1925 goto out; 1926 } 1927 retval = usb_hcd_link_urb_to_ep(hcd, urb); 1928 if (retval) { 1929 qtd_list_free(&new_qtds); 1930 goto out; 1931 } 1932 1933 qh = urb->ep->hcpriv; 1934 if (qh) { 1935 qh_in_queue = 0; 1936 list_for_each_entry(qhit, ep_queue, qh_list) { 1937 if (qhit == qh) { 1938 qh_in_queue = 1; 1939 break; 1940 } 1941 } 1942 if (!qh_in_queue) 1943 list_add_tail(&qh->qh_list, ep_queue); 1944 } else { 1945 qh = qh_alloc(GFP_ATOMIC); 1946 if (!qh) { 1947 retval = -ENOMEM; 1948 usb_hcd_unlink_urb_from_ep(hcd, urb); 1949 qtd_list_free(&new_qtds); 1950 goto out; 1951 } 1952 list_add_tail(&qh->qh_list, ep_queue); 1953 urb->ep->hcpriv = qh; 1954 } 1955 1956 list_splice_tail(&new_qtds, &qh->qtd_list); 1957 schedule_ptds(hcd); 1958 1959out: 1960 spin_unlock_irqrestore(&priv->lock, spinflags); 1961 return retval; 1962} 1963 1964static void kill_transfer(struct usb_hcd *hcd, struct urb *urb, 1965 struct isp1760_qh *qh) 1966{ 1967 struct isp1760_hcd *priv = hcd_to_priv(hcd); 1968 int skip_map; 1969 1970 WARN_ON(qh->slot == -1); 1971 1972 /* We need to forcefully reclaim the slot since some transfers never 1973 return, e.g. interrupt transfers and NAKed bulk transfers. */ 1974 if (usb_pipecontrol(urb->pipe) || usb_pipebulk(urb->pipe)) { 1975 if (qh->slot != -1) { 1976 skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP); 1977 skip_map |= (1 << qh->slot); 1978 isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map); 1979 ndelay(100); 1980 } 1981 priv->atl_slots[qh->slot].qh = NULL; 1982 priv->atl_slots[qh->slot].qtd = NULL; 1983 } else { 1984 if (qh->slot != -1) { 1985 skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP); 1986 skip_map |= (1 << qh->slot); 1987 isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map); 1988 } 1989 priv->int_slots[qh->slot].qh = NULL; 1990 priv->int_slots[qh->slot].qtd = NULL; 1991 } 1992 1993 qh->slot = -1; 1994} 1995 1996/* 1997 * Retire the qtds beginning at 'qtd' and belonging all to the same urb, killing 1998 * any active transfer belonging to the urb in the process. 1999 */ 2000static void dequeue_urb_from_qtd(struct usb_hcd *hcd, struct isp1760_qh *qh, 2001 struct isp1760_qtd *qtd) 2002{ 2003 struct urb *urb; 2004 int urb_was_running; 2005 2006 urb = qtd->urb; 2007 urb_was_running = 0; 2008 list_for_each_entry_from(qtd, &qh->qtd_list, qtd_list) { 2009 if (qtd->urb != urb) 2010 break; 2011 2012 if (qtd->status >= QTD_XFER_STARTED) 2013 urb_was_running = 1; 2014 if (last_qtd_of_urb(qtd, qh) && 2015 (qtd->status >= QTD_XFER_COMPLETE)) 2016 urb_was_running = 0; 2017 2018 if (qtd->status == QTD_XFER_STARTED) 2019 kill_transfer(hcd, urb, qh); 2020 qtd->status = QTD_RETIRE; 2021 } 2022 2023 if ((urb->dev->speed != USB_SPEED_HIGH) && urb_was_running) { 2024 qh->tt_buffer_dirty = 1; 2025 if (usb_hub_clear_tt_buffer(urb)) 2026 /* Clear failed; let's hope things work anyway */ 2027 qh->tt_buffer_dirty = 0; 2028 } 2029} 2030 2031static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, 2032 int status) 2033{ 2034 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2035 unsigned long spinflags; 2036 struct isp1760_qh *qh; 2037 struct isp1760_qtd *qtd; 2038 int retval = 0; 2039 2040 spin_lock_irqsave(&priv->lock, spinflags); 2041 retval = usb_hcd_check_unlink_urb(hcd, urb, status); 2042 if (retval) 2043 goto out; 2044 2045 qh = urb->ep->hcpriv; 2046 if (!qh) { 2047 retval = -EINVAL; 2048 goto out; 2049 } 2050 2051 list_for_each_entry(qtd, &qh->qtd_list, qtd_list) 2052 if (qtd->urb == urb) { 2053 dequeue_urb_from_qtd(hcd, qh, qtd); 2054 list_move(&qtd->qtd_list, &qh->qtd_list); 2055 break; 2056 } 2057 2058 urb->status = status; 2059 schedule_ptds(hcd); 2060 2061out: 2062 spin_unlock_irqrestore(&priv->lock, spinflags); 2063 return retval; 2064} 2065 2066static void isp1760_endpoint_disable(struct usb_hcd *hcd, 2067 struct usb_host_endpoint *ep) 2068{ 2069 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2070 unsigned long spinflags; 2071 struct isp1760_qh *qh, *qh_iter; 2072 int i; 2073 2074 spin_lock_irqsave(&priv->lock, spinflags); 2075 2076 qh = ep->hcpriv; 2077 if (!qh) 2078 goto out; 2079 2080 WARN_ON(!list_empty(&qh->qtd_list)); 2081 2082 for (i = 0; i < QH_END; i++) 2083 list_for_each_entry(qh_iter, &priv->qh_list[i], qh_list) 2084 if (qh_iter == qh) { 2085 list_del(&qh_iter->qh_list); 2086 i = QH_END; 2087 break; 2088 } 2089 qh_free(qh); 2090 ep->hcpriv = NULL; 2091 2092 schedule_ptds(hcd); 2093 2094out: 2095 spin_unlock_irqrestore(&priv->lock, spinflags); 2096} 2097 2098static int isp1760_hub_status_data(struct usb_hcd *hcd, char *buf) 2099{ 2100 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2101 u32 status = 0; 2102 int retval = 1; 2103 unsigned long flags; 2104 2105 /* if !PM, root hub timers won't get shut down ... */ 2106 if (!HC_IS_RUNNING(hcd->state)) 2107 return 0; 2108 2109 /* init status to no-changes */ 2110 buf[0] = 0; 2111 2112 spin_lock_irqsave(&priv->lock, flags); 2113 2114 if (isp1760_hcd_is_set(hcd, PORT_OWNER) && 2115 isp1760_hcd_is_set(hcd, PORT_CSC)) { 2116 isp1760_hcd_clear(hcd, PORT_CSC); 2117 goto done; 2118 } 2119 2120 /* 2121 * Return status information even for ports with OWNER set. 2122 * Otherwise hub_wq wouldn't see the disconnect event when a 2123 * high-speed device is switched over to the companion 2124 * controller by the user. 2125 */ 2126 if (isp1760_hcd_is_set(hcd, PORT_CSC) || 2127 (isp1760_hcd_is_set(hcd, PORT_RESUME) && 2128 time_after_eq(jiffies, priv->reset_done))) { 2129 buf [0] |= 1 << (0 + 1); 2130 status = STS_PCD; 2131 } 2132 /* FIXME autosuspend idle root hubs */ 2133done: 2134 spin_unlock_irqrestore(&priv->lock, flags); 2135 return status ? retval : 0; 2136} 2137 2138static void isp1760_hub_descriptor(struct isp1760_hcd *priv, 2139 struct usb_hub_descriptor *desc) 2140{ 2141 int ports; 2142 u16 temp; 2143 2144 ports = isp1760_hcd_n_ports(priv->hcd); 2145 2146 desc->bDescriptorType = USB_DT_HUB; 2147 /* priv 1.0, 2.3.9 says 20ms max */ 2148 desc->bPwrOn2PwrGood = 10; 2149 desc->bHubContrCurrent = 0; 2150 2151 desc->bNbrPorts = ports; 2152 temp = 1 + (ports / 8); 2153 desc->bDescLength = 7 + 2 * temp; 2154 2155 /* ports removable, and usb 1.0 legacy PortPwrCtrlMask */ 2156 memset(&desc->u.hs.DeviceRemovable[0], 0, temp); 2157 memset(&desc->u.hs.DeviceRemovable[temp], 0xff, temp); 2158 2159 /* per-port overcurrent reporting */ 2160 temp = HUB_CHAR_INDV_PORT_OCPM; 2161 if (isp1760_hcd_ppc_is_set(priv->hcd)) 2162 /* per-port power control */ 2163 temp |= HUB_CHAR_INDV_PORT_LPSM; 2164 else 2165 /* no power switching */ 2166 temp |= HUB_CHAR_NO_LPSM; 2167 desc->wHubCharacteristics = cpu_to_le16(temp); 2168} 2169 2170#define PORT_WAKE_BITS (PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E) 2171 2172static void check_reset_complete(struct usb_hcd *hcd, int index) 2173{ 2174 if (!(isp1760_hcd_is_set(hcd, PORT_CONNECT))) 2175 return; 2176 2177 /* if reset finished and it's still not enabled -- handoff */ 2178 if (!isp1760_hcd_is_set(hcd, PORT_PE)) { 2179 dev_info(hcd->self.controller, 2180 "port %d full speed --> companion\n", index + 1); 2181 2182 isp1760_hcd_set(hcd, PORT_OWNER); 2183 2184 isp1760_hcd_clear(hcd, PORT_CSC); 2185 } else { 2186 dev_info(hcd->self.controller, "port %d high speed\n", 2187 index + 1); 2188 } 2189 2190 return; 2191} 2192 2193static int isp1760_hub_control(struct usb_hcd *hcd, u16 typeReq, 2194 u16 wValue, u16 wIndex, char *buf, u16 wLength) 2195{ 2196 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2197 u32 status; 2198 unsigned long flags; 2199 int retval = 0; 2200 int ports; 2201 2202 ports = isp1760_hcd_n_ports(hcd); 2203 2204 /* 2205 * FIXME: support SetPortFeatures USB_PORT_FEAT_INDICATOR. 2206 * HCS_INDICATOR may say we can change LEDs to off/amber/green. 2207 * (track current state ourselves) ... blink for diagnostics, 2208 * power, "this is the one", etc. EHCI spec supports this. 2209 */ 2210 2211 spin_lock_irqsave(&priv->lock, flags); 2212 switch (typeReq) { 2213 case ClearHubFeature: 2214 switch (wValue) { 2215 case C_HUB_LOCAL_POWER: 2216 case C_HUB_OVER_CURRENT: 2217 /* no hub-wide feature/status flags */ 2218 break; 2219 default: 2220 goto error; 2221 } 2222 break; 2223 case ClearPortFeature: 2224 if (!wIndex || wIndex > ports) 2225 goto error; 2226 wIndex--; 2227 2228 /* 2229 * Even if OWNER is set, so the port is owned by the 2230 * companion controller, hub_wq needs to be able to clear 2231 * the port-change status bits (especially 2232 * USB_PORT_STAT_C_CONNECTION). 2233 */ 2234 2235 switch (wValue) { 2236 case USB_PORT_FEAT_ENABLE: 2237 isp1760_hcd_clear(hcd, PORT_PE); 2238 break; 2239 case USB_PORT_FEAT_C_ENABLE: 2240 /* XXX error? */ 2241 break; 2242 case USB_PORT_FEAT_SUSPEND: 2243 if (isp1760_hcd_is_set(hcd, PORT_RESET)) 2244 goto error; 2245 2246 if (isp1760_hcd_is_set(hcd, PORT_SUSPEND)) { 2247 if (!isp1760_hcd_is_set(hcd, PORT_PE)) 2248 goto error; 2249 /* resume signaling for 20 msec */ 2250 isp1760_hcd_clear(hcd, PORT_CSC); 2251 isp1760_hcd_set(hcd, PORT_RESUME); 2252 2253 priv->reset_done = jiffies + 2254 msecs_to_jiffies(USB_RESUME_TIMEOUT); 2255 } 2256 break; 2257 case USB_PORT_FEAT_C_SUSPEND: 2258 /* we auto-clear this feature */ 2259 break; 2260 case USB_PORT_FEAT_POWER: 2261 if (isp1760_hcd_ppc_is_set(hcd)) 2262 isp1760_hcd_clear(hcd, PORT_POWER); 2263 break; 2264 case USB_PORT_FEAT_C_CONNECTION: 2265 isp1760_hcd_set(hcd, PORT_CSC); 2266 break; 2267 case USB_PORT_FEAT_C_OVER_CURRENT: 2268 /* XXX error ?*/ 2269 break; 2270 case USB_PORT_FEAT_C_RESET: 2271 /* GetPortStatus clears reset */ 2272 break; 2273 default: 2274 goto error; 2275 } 2276 isp1760_hcd_read(hcd, CMD_RUN); 2277 break; 2278 case GetHubDescriptor: 2279 isp1760_hub_descriptor(priv, (struct usb_hub_descriptor *) 2280 buf); 2281 break; 2282 case GetHubStatus: 2283 /* no hub-wide feature/status flags */ 2284 memset(buf, 0, 4); 2285 break; 2286 case GetPortStatus: 2287 if (!wIndex || wIndex > ports) 2288 goto error; 2289 wIndex--; 2290 status = 0; 2291 2292 /* wPortChange bits */ 2293 if (isp1760_hcd_is_set(hcd, PORT_CSC)) 2294 status |= USB_PORT_STAT_C_CONNECTION << 16; 2295 2296 /* whoever resumes must GetPortStatus to complete it!! */ 2297 if (isp1760_hcd_is_set(hcd, PORT_RESUME)) { 2298 dev_err(hcd->self.controller, "Port resume should be skipped.\n"); 2299 2300 /* Remote Wakeup received? */ 2301 if (!priv->reset_done) { 2302 /* resume signaling for 20 msec */ 2303 priv->reset_done = jiffies 2304 + msecs_to_jiffies(20); 2305 /* check the port again */ 2306 mod_timer(&hcd->rh_timer, priv->reset_done); 2307 } 2308 2309 /* resume completed? */ 2310 else if (time_after_eq(jiffies, 2311 priv->reset_done)) { 2312 status |= USB_PORT_STAT_C_SUSPEND << 16; 2313 priv->reset_done = 0; 2314 2315 /* stop resume signaling */ 2316 isp1760_hcd_clear(hcd, PORT_CSC); 2317 2318 retval = isp1760_hcd_clear_and_wait(hcd, 2319 PORT_RESUME, 2000); 2320 if (retval != 0) { 2321 dev_err(hcd->self.controller, 2322 "port %d resume error %d\n", 2323 wIndex + 1, retval); 2324 goto error; 2325 } 2326 } 2327 } 2328 2329 /* whoever resets must GetPortStatus to complete it!! */ 2330 if (isp1760_hcd_is_set(hcd, PORT_RESET) && 2331 time_after_eq(jiffies, priv->reset_done)) { 2332 status |= USB_PORT_STAT_C_RESET << 16; 2333 priv->reset_done = 0; 2334 2335 /* force reset to complete */ 2336 /* REVISIT: some hardware needs 550+ usec to clear 2337 * this bit; seems too long to spin routinely... 2338 */ 2339 retval = isp1760_hcd_clear_and_wait(hcd, PORT_RESET, 2340 750); 2341 if (retval != 0) { 2342 dev_err(hcd->self.controller, "port %d reset error %d\n", 2343 wIndex + 1, retval); 2344 goto error; 2345 } 2346 2347 /* see what we found out */ 2348 check_reset_complete(hcd, wIndex); 2349 } 2350 /* 2351 * Even if OWNER is set, there's no harm letting hub_wq 2352 * see the wPortStatus values (they should all be 0 except 2353 * for PORT_POWER anyway). 2354 */ 2355 2356 if (isp1760_hcd_is_set(hcd, PORT_OWNER)) 2357 dev_err(hcd->self.controller, "PORT_OWNER is set\n"); 2358 2359 if (isp1760_hcd_is_set(hcd, PORT_CONNECT)) { 2360 status |= USB_PORT_STAT_CONNECTION; 2361 /* status may be from integrated TT */ 2362 status |= USB_PORT_STAT_HIGH_SPEED; 2363 } 2364 if (isp1760_hcd_is_set(hcd, PORT_PE)) 2365 status |= USB_PORT_STAT_ENABLE; 2366 if (isp1760_hcd_is_set(hcd, PORT_SUSPEND) && 2367 isp1760_hcd_is_set(hcd, PORT_RESUME)) 2368 status |= USB_PORT_STAT_SUSPEND; 2369 if (isp1760_hcd_is_set(hcd, PORT_RESET)) 2370 status |= USB_PORT_STAT_RESET; 2371 if (isp1760_hcd_is_set(hcd, PORT_POWER)) 2372 status |= USB_PORT_STAT_POWER; 2373 2374 put_unaligned(cpu_to_le32(status), (__le32 *) buf); 2375 break; 2376 case SetHubFeature: 2377 switch (wValue) { 2378 case C_HUB_LOCAL_POWER: 2379 case C_HUB_OVER_CURRENT: 2380 /* no hub-wide feature/status flags */ 2381 break; 2382 default: 2383 goto error; 2384 } 2385 break; 2386 case SetPortFeature: 2387 wIndex &= 0xff; 2388 if (!wIndex || wIndex > ports) 2389 goto error; 2390 wIndex--; 2391 2392 if (isp1760_hcd_is_set(hcd, PORT_OWNER)) 2393 break; 2394 2395 switch (wValue) { 2396 case USB_PORT_FEAT_ENABLE: 2397 isp1760_hcd_set(hcd, PORT_PE); 2398 break; 2399 2400 case USB_PORT_FEAT_SUSPEND: 2401 if (!isp1760_hcd_is_set(hcd, PORT_PE) || 2402 isp1760_hcd_is_set(hcd, PORT_RESET)) 2403 goto error; 2404 2405 isp1760_hcd_set(hcd, PORT_SUSPEND); 2406 break; 2407 case USB_PORT_FEAT_POWER: 2408 if (isp1760_hcd_ppc_is_set(hcd)) 2409 isp1760_hcd_set(hcd, PORT_POWER); 2410 break; 2411 case USB_PORT_FEAT_RESET: 2412 if (isp1760_hcd_is_set(hcd, PORT_RESUME)) 2413 goto error; 2414 /* line status bits may report this as low speed, 2415 * which can be fine if this root hub has a 2416 * transaction translator built in. 2417 */ 2418 if ((isp1760_hcd_is_set(hcd, PORT_CONNECT) && 2419 !isp1760_hcd_is_set(hcd, PORT_PE)) && 2420 (isp1760_hcd_read(hcd, PORT_LSTATUS) == 1)) { 2421 isp1760_hcd_set(hcd, PORT_OWNER); 2422 } else { 2423 isp1760_hcd_set(hcd, PORT_RESET); 2424 isp1760_hcd_clear(hcd, PORT_PE); 2425 2426 /* 2427 * caller must wait, then call GetPortStatus 2428 * usb 2.0 spec says 50 ms resets on root 2429 */ 2430 priv->reset_done = jiffies + 2431 msecs_to_jiffies(50); 2432 } 2433 break; 2434 default: 2435 goto error; 2436 } 2437 break; 2438 2439 default: 2440error: 2441 /* "stall" on error */ 2442 retval = -EPIPE; 2443 } 2444 spin_unlock_irqrestore(&priv->lock, flags); 2445 return retval; 2446} 2447 2448static int isp1760_get_frame(struct usb_hcd *hcd) 2449{ 2450 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2451 u32 fr; 2452 2453 fr = isp1760_hcd_read(hcd, HC_FRINDEX); 2454 return (fr >> 3) % priv->periodic_size; 2455} 2456 2457static void isp1760_stop(struct usb_hcd *hcd) 2458{ 2459 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2460 2461 del_timer(&errata2_timer); 2462 2463 isp1760_hub_control(hcd, ClearPortFeature, USB_PORT_FEAT_POWER, 1, 2464 NULL, 0); 2465 msleep(20); 2466 2467 spin_lock_irq(&priv->lock); 2468 ehci_reset(hcd); 2469 /* Disable IRQ */ 2470 isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN); 2471 spin_unlock_irq(&priv->lock); 2472 2473 isp1760_hcd_clear(hcd, FLAG_CF); 2474} 2475 2476static void isp1760_shutdown(struct usb_hcd *hcd) 2477{ 2478 isp1760_stop(hcd); 2479 2480 isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN); 2481 2482 isp1760_hcd_clear(hcd, CMD_RUN); 2483} 2484 2485static void isp1760_clear_tt_buffer_complete(struct usb_hcd *hcd, 2486 struct usb_host_endpoint *ep) 2487{ 2488 struct isp1760_hcd *priv = hcd_to_priv(hcd); 2489 struct isp1760_qh *qh = ep->hcpriv; 2490 unsigned long spinflags; 2491 2492 if (!qh) 2493 return; 2494 2495 spin_lock_irqsave(&priv->lock, spinflags); 2496 qh->tt_buffer_dirty = 0; 2497 schedule_ptds(hcd); 2498 spin_unlock_irqrestore(&priv->lock, spinflags); 2499} 2500 2501 2502static const struct hc_driver isp1760_hc_driver = { 2503 .description = "isp1760-hcd", 2504 .product_desc = "NXP ISP1760 USB Host Controller", 2505 .hcd_priv_size = sizeof(struct isp1760_hcd *), 2506 .irq = isp1760_irq, 2507 .flags = HCD_MEMORY | HCD_USB2, 2508 .reset = isp1760_hc_setup, 2509 .start = isp1760_run, 2510 .stop = isp1760_stop, 2511 .shutdown = isp1760_shutdown, 2512 .urb_enqueue = isp1760_urb_enqueue, 2513 .urb_dequeue = isp1760_urb_dequeue, 2514 .endpoint_disable = isp1760_endpoint_disable, 2515 .get_frame_number = isp1760_get_frame, 2516 .hub_status_data = isp1760_hub_status_data, 2517 .hub_control = isp1760_hub_control, 2518 .clear_tt_buffer_complete = isp1760_clear_tt_buffer_complete, 2519}; 2520 2521int __init isp1760_init_kmem_once(void) 2522{ 2523 urb_listitem_cachep = kmem_cache_create("isp1760_urb_listitem", 2524 sizeof(struct urb_listitem), 0, SLAB_TEMPORARY | 2525 SLAB_MEM_SPREAD, NULL); 2526 2527 if (!urb_listitem_cachep) 2528 return -ENOMEM; 2529 2530 qtd_cachep = kmem_cache_create("isp1760_qtd", 2531 sizeof(struct isp1760_qtd), 0, SLAB_TEMPORARY | 2532 SLAB_MEM_SPREAD, NULL); 2533 2534 if (!qtd_cachep) 2535 goto destroy_urb_listitem; 2536 2537 qh_cachep = kmem_cache_create("isp1760_qh", sizeof(struct isp1760_qh), 2538 0, SLAB_TEMPORARY | SLAB_MEM_SPREAD, NULL); 2539 2540 if (!qh_cachep) 2541 goto destroy_qtd; 2542 2543 return 0; 2544 2545destroy_qtd: 2546 kmem_cache_destroy(qtd_cachep); 2547 2548destroy_urb_listitem: 2549 kmem_cache_destroy(urb_listitem_cachep); 2550 2551 return -ENOMEM; 2552} 2553 2554void isp1760_deinit_kmem_cache(void) 2555{ 2556 kmem_cache_destroy(qtd_cachep); 2557 kmem_cache_destroy(qh_cachep); 2558 kmem_cache_destroy(urb_listitem_cachep); 2559} 2560 2561int isp1760_hcd_register(struct isp1760_hcd *priv, struct resource *mem, 2562 int irq, unsigned long irqflags, 2563 struct device *dev) 2564{ 2565 const struct isp1760_memory_layout *mem_layout = priv->memory_layout; 2566 struct usb_hcd *hcd; 2567 int ret; 2568 2569 hcd = usb_create_hcd(&isp1760_hc_driver, dev, dev_name(dev)); 2570 if (!hcd) 2571 return -ENOMEM; 2572 2573 *(struct isp1760_hcd **)hcd->hcd_priv = priv; 2574 2575 priv->hcd = hcd; 2576 2577 priv->atl_slots = kcalloc(mem_layout->slot_num, 2578 sizeof(struct isp1760_slotinfo), GFP_KERNEL); 2579 if (!priv->atl_slots) { 2580 ret = -ENOMEM; 2581 goto put_hcd; 2582 } 2583 2584 priv->int_slots = kcalloc(mem_layout->slot_num, 2585 sizeof(struct isp1760_slotinfo), GFP_KERNEL); 2586 if (!priv->int_slots) { 2587 ret = -ENOMEM; 2588 goto free_atl_slots; 2589 } 2590 2591 init_memory(priv); 2592 2593 hcd->irq = irq; 2594 hcd->rsrc_start = mem->start; 2595 hcd->rsrc_len = resource_size(mem); 2596 2597 /* This driver doesn't support wakeup requests */ 2598 hcd->cant_recv_wakeups = 1; 2599 2600 ret = usb_add_hcd(hcd, irq, irqflags); 2601 if (ret) 2602 goto free_int_slots; 2603 2604 device_wakeup_enable(hcd->self.controller); 2605 2606 return 0; 2607 2608free_int_slots: 2609 kfree(priv->int_slots); 2610free_atl_slots: 2611 kfree(priv->atl_slots); 2612put_hcd: 2613 usb_put_hcd(hcd); 2614 return ret; 2615} 2616 2617void isp1760_hcd_unregister(struct isp1760_hcd *priv) 2618{ 2619 if (!priv->hcd) 2620 return; 2621 2622 usb_remove_hcd(priv->hcd); 2623 usb_put_hcd(priv->hcd); 2624 kfree(priv->atl_slots); 2625 kfree(priv->int_slots); 2626}