linux/drivers/staging/octeon-usb/octeon-hcd.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * This file is subject to the terms and conditions of the GNU General Public
   4 * License.  See the file "COPYING" in the main directory of this archive
   5 * for more details.
   6 *
   7 * Copyright (C) 2008 Cavium Networks
   8 *
   9 * Some parts of the code were originally released under BSD license:
  10 *
  11 * Copyright (c) 2003-2010 Cavium Networks (support@cavium.com). All rights
  12 * reserved.
  13 *
  14 * Redistribution and use in source and binary forms, with or without
  15 * modification, are permitted provided that the following conditions are
  16 * met:
  17 *
  18 *   * Redistributions of source code must retain the above copyright
  19 *     notice, this list of conditions and the following disclaimer.
  20 *
  21 *   * Redistributions in binary form must reproduce the above
  22 *     copyright notice, this list of conditions and the following
  23 *     disclaimer in the documentation and/or other materials provided
  24 *     with the distribution.
  25 *
  26 *   * Neither the name of Cavium Networks nor the names of
  27 *     its contributors may be used to endorse or promote products
  28 *     derived from this software without specific prior written
  29 *     permission.
  30 *
  31 * This Software, including technical data, may be subject to U.S. export
  32 * control laws, including the U.S. Export Administration Act and its associated
  33 * regulations, and may be subject to export or import regulations in other
  34 * countries.
  35 *
  36 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
  37 * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
  38 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
  39 * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION
  40 * OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
  41 * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
  42 * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
  43 * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
  44 * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
  45 * PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
  46 */
  47
  48#include <linux/usb.h>
  49#include <linux/slab.h>
  50#include <linux/module.h>
  51#include <linux/usb/hcd.h>
  52#include <linux/prefetch.h>
  53#include <linux/dma-mapping.h>
  54#include <linux/platform_device.h>
  55
  56#include <asm/octeon/octeon.h>
  57
  58#include "octeon-hcd.h"
  59
  60/**
  61 * enum cvmx_usb_speed - the possible USB device speeds
  62 *
  63 * @CVMX_USB_SPEED_HIGH: Device is operation at 480Mbps
  64 * @CVMX_USB_SPEED_FULL: Device is operation at 12Mbps
  65 * @CVMX_USB_SPEED_LOW:  Device is operation at 1.5Mbps
  66 */
  67enum cvmx_usb_speed {
  68        CVMX_USB_SPEED_HIGH = 0,
  69        CVMX_USB_SPEED_FULL = 1,
  70        CVMX_USB_SPEED_LOW = 2,
  71};
  72
  73/**
  74 * enum cvmx_usb_transfer - the possible USB transfer types
  75 *
  76 * @CVMX_USB_TRANSFER_CONTROL:     USB transfer type control for hub and status
  77 *                                 transfers
  78 * @CVMX_USB_TRANSFER_ISOCHRONOUS: USB transfer type isochronous for low
  79 *                                 priority periodic transfers
  80 * @CVMX_USB_TRANSFER_BULK:        USB transfer type bulk for large low priority
  81 *                                 transfers
  82 * @CVMX_USB_TRANSFER_INTERRUPT:   USB transfer type interrupt for high priority
  83 *                                 periodic transfers
  84 */
  85enum cvmx_usb_transfer {
  86        CVMX_USB_TRANSFER_CONTROL = 0,
  87        CVMX_USB_TRANSFER_ISOCHRONOUS = 1,
  88        CVMX_USB_TRANSFER_BULK = 2,
  89        CVMX_USB_TRANSFER_INTERRUPT = 3,
  90};
  91
  92/**
  93 * enum cvmx_usb_direction - the transfer directions
  94 *
  95 * @CVMX_USB_DIRECTION_OUT: Data is transferring from Octeon to the device/host
  96 * @CVMX_USB_DIRECTION_IN:  Data is transferring from the device/host to Octeon
  97 */
  98enum cvmx_usb_direction {
  99        CVMX_USB_DIRECTION_OUT,
 100        CVMX_USB_DIRECTION_IN,
 101};
 102
 103/**
 104 * enum cvmx_usb_status - possible callback function status codes
 105 *
 106 * @CVMX_USB_STATUS_OK:           The transaction / operation finished without
 107 *                                any errors
 108 * @CVMX_USB_STATUS_SHORT:        FIXME: This is currently not implemented
 109 * @CVMX_USB_STATUS_CANCEL:       The transaction was canceled while in flight
 110 *                                by a user call to cvmx_usb_cancel
 111 * @CVMX_USB_STATUS_ERROR:        The transaction aborted with an unexpected
 112 *                                error status
 113 * @CVMX_USB_STATUS_STALL:        The transaction received a USB STALL response
 114 *                                from the device
 115 * @CVMX_USB_STATUS_XACTERR:      The transaction failed with an error from the
 116 *                                device even after a number of retries
 117 * @CVMX_USB_STATUS_DATATGLERR:   The transaction failed with a data toggle
 118 *                                error even after a number of retries
 119 * @CVMX_USB_STATUS_BABBLEERR:    The transaction failed with a babble error
 120 * @CVMX_USB_STATUS_FRAMEERR:     The transaction failed with a frame error
 121 *                                even after a number of retries
 122 */
 123enum cvmx_usb_status {
 124        CVMX_USB_STATUS_OK,
 125        CVMX_USB_STATUS_SHORT,
 126        CVMX_USB_STATUS_CANCEL,
 127        CVMX_USB_STATUS_ERROR,
 128        CVMX_USB_STATUS_STALL,
 129        CVMX_USB_STATUS_XACTERR,
 130        CVMX_USB_STATUS_DATATGLERR,
 131        CVMX_USB_STATUS_BABBLEERR,
 132        CVMX_USB_STATUS_FRAMEERR,
 133};
 134
 135/**
 136 * struct cvmx_usb_port_status - the USB port status information
 137 *
 138 * @port_enabled:       1 = Usb port is enabled, 0 = disabled
 139 * @port_over_current:  1 = Over current detected, 0 = Over current not
 140 *                      detected. Octeon doesn't support over current detection.
 141 * @port_powered:       1 = Port power is being supplied to the device, 0 =
 142 *                      power is off. Octeon doesn't support turning port power
 143 *                      off.
 144 * @port_speed:         Current port speed.
 145 * @connected:          1 = A device is connected to the port, 0 = No device is
 146 *                      connected.
 147 * @connect_change:     1 = Device connected state changed since the last set
 148 *                      status call.
 149 */
 150struct cvmx_usb_port_status {
 151        u32 reserved                    : 25;
 152        u32 port_enabled                : 1;
 153        u32 port_over_current           : 1;
 154        u32 port_powered                : 1;
 155        enum cvmx_usb_speed port_speed  : 2;
 156        u32 connected                   : 1;
 157        u32 connect_change              : 1;
 158};
 159
 160/**
 161 * struct cvmx_usb_iso_packet - descriptor for Isochronous packets
 162 *
 163 * @offset:     This is the offset in bytes into the main buffer where this data
 164 *              is stored.
 165 * @length:     This is the length in bytes of the data.
 166 * @status:     This is the status of this individual packet transfer.
 167 */
 168struct cvmx_usb_iso_packet {
 169        int offset;
 170        int length;
 171        enum cvmx_usb_status status;
 172};
 173
 174/**
 175 * enum cvmx_usb_initialize_flags - flags used by the initialization function
 176 *
 177 * @CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI:    The USB port uses a 12MHz crystal
 178 *                                            as clock source at USB_XO and
 179 *                                            USB_XI.
 180 * @CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND:   The USB port uses 12/24/48MHz 2.5V
 181 *                                            board clock source at USB_XO.
 182 *                                            USB_XI should be tied to GND.
 183 * @CVMX_USB_INITIALIZE_FLAGS_CLOCK_MHZ_MASK: Mask for clock speed field
 184 * @CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ:    Speed of reference clock or
 185 *                                            crystal
 186 * @CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ:    Speed of reference clock
 187 * @CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ:    Speed of reference clock
 188 * @CVMX_USB_INITIALIZE_FLAGS_NO_DMA:         Disable DMA and used polled IO for
 189 *                                            data transfer use for the USB
 190 */
 191enum cvmx_usb_initialize_flags {
 192        CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI           = 1 << 0,
 193        CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND          = 1 << 1,
 194        CVMX_USB_INITIALIZE_FLAGS_CLOCK_MHZ_MASK        = 3 << 3,
 195        CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ           = 1 << 3,
 196        CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ           = 2 << 3,
 197        CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ           = 3 << 3,
 198        /* Bits 3-4 used to encode the clock frequency */
 199        CVMX_USB_INITIALIZE_FLAGS_NO_DMA                = 1 << 5,
 200};
 201
 202/**
 203 * enum cvmx_usb_pipe_flags - internal flags for a pipe.
 204 *
 205 * @CVMX_USB_PIPE_FLAGS_SCHEDULED: Used internally to determine if a pipe is
 206 *                                 actively using hardware.
 207 * @CVMX_USB_PIPE_FLAGS_NEED_PING: Used internally to determine if a high speed
 208 *                                 pipe is in the ping state.
 209 */
 210enum cvmx_usb_pipe_flags {
 211        CVMX_USB_PIPE_FLAGS_SCHEDULED   = 1 << 17,
 212        CVMX_USB_PIPE_FLAGS_NEED_PING   = 1 << 18,
 213};
 214
 215/* Maximum number of times to retry failed transactions */
 216#define MAX_RETRIES             3
 217
 218/* Maximum number of hardware channels supported by the USB block */
 219#define MAX_CHANNELS            8
 220
 221/*
 222 * The low level hardware can transfer a maximum of this number of bytes in each
 223 * transfer. The field is 19 bits wide
 224 */
 225#define MAX_TRANSFER_BYTES      ((1 << 19) - 1)
 226
 227/*
 228 * The low level hardware can transfer a maximum of this number of packets in
 229 * each transfer. The field is 10 bits wide
 230 */
 231#define MAX_TRANSFER_PACKETS    ((1 << 10) - 1)
 232
 233/**
 234 * Logical transactions may take numerous low level
 235 * transactions, especially when splits are concerned. This
 236 * enum represents all of the possible stages a transaction can
 237 * be in. Note that split completes are always even. This is so
 238 * the NAK handler can backup to the previous low level
 239 * transaction with a simple clearing of bit 0.
 240 */
 241enum cvmx_usb_stage {
 242        CVMX_USB_STAGE_NON_CONTROL,
 243        CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE,
 244        CVMX_USB_STAGE_SETUP,
 245        CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE,
 246        CVMX_USB_STAGE_DATA,
 247        CVMX_USB_STAGE_DATA_SPLIT_COMPLETE,
 248        CVMX_USB_STAGE_STATUS,
 249        CVMX_USB_STAGE_STATUS_SPLIT_COMPLETE,
 250};
 251
 252/**
 253 * struct cvmx_usb_transaction - describes each pending USB transaction
 254 *                               regardless of type. These are linked together
 255 *                               to form a list of pending requests for a pipe.
 256 *
 257 * @node:               List node for transactions in the pipe.
 258 * @type:               Type of transaction, duplicated of the pipe.
 259 * @flags:              State flags for this transaction.
 260 * @buffer:             User's physical buffer address to read/write.
 261 * @buffer_length:      Size of the user's buffer in bytes.
 262 * @control_header:     For control transactions, physical address of the 8
 263 *                      byte standard header.
 264 * @iso_start_frame:    For ISO transactions, the starting frame number.
 265 * @iso_number_packets: For ISO transactions, the number of packets in the
 266 *                      request.
 267 * @iso_packets:        For ISO transactions, the sub packets in the request.
 268 * @actual_bytes:       Actual bytes transfer for this transaction.
 269 * @stage:              For control transactions, the current stage.
 270 * @urb:                URB.
 271 */
 272struct cvmx_usb_transaction {
 273        struct list_head node;
 274        enum cvmx_usb_transfer type;
 275        u64 buffer;
 276        int buffer_length;
 277        u64 control_header;
 278        int iso_start_frame;
 279        int iso_number_packets;
 280        struct cvmx_usb_iso_packet *iso_packets;
 281        int xfersize;
 282        int pktcnt;
 283        int retries;
 284        int actual_bytes;
 285        enum cvmx_usb_stage stage;
 286        struct urb *urb;
 287};
 288
 289/**
 290 * struct cvmx_usb_pipe - a pipe represents a virtual connection between Octeon
 291 *                        and some USB device. It contains a list of pending
 292 *                        request to the device.
 293 *
 294 * @node:               List node for pipe list
 295 * @next:               Pipe after this one in the list
 296 * @transactions:       List of pending transactions
 297 * @interval:           For periodic pipes, the interval between packets in
 298 *                      frames
 299 * @next_tx_frame:      The next frame this pipe is allowed to transmit on
 300 * @flags:              State flags for this pipe
 301 * @device_speed:       Speed of device connected to this pipe
 302 * @transfer_type:      Type of transaction supported by this pipe
 303 * @transfer_dir:       IN or OUT. Ignored for Control
 304 * @multi_count:        Max packet in a row for the device
 305 * @max_packet:         The device's maximum packet size in bytes
 306 * @device_addr:        USB device address at other end of pipe
 307 * @endpoint_num:       USB endpoint number at other end of pipe
 308 * @hub_device_addr:    Hub address this device is connected to
 309 * @hub_port:           Hub port this device is connected to
 310 * @pid_toggle:         This toggles between 0/1 on every packet send to track
 311 *                      the data pid needed
 312 * @channel:            Hardware DMA channel for this pipe
 313 * @split_sc_frame:     The low order bits of the frame number the split
 314 *                      complete should be sent on
 315 */
 316struct cvmx_usb_pipe {
 317        struct list_head node;
 318        struct list_head transactions;
 319        u64 interval;
 320        u64 next_tx_frame;
 321        enum cvmx_usb_pipe_flags flags;
 322        enum cvmx_usb_speed device_speed;
 323        enum cvmx_usb_transfer transfer_type;
 324        enum cvmx_usb_direction transfer_dir;
 325        int multi_count;
 326        u16 max_packet;
 327        u8 device_addr;
 328        u8 endpoint_num;
 329        u8 hub_device_addr;
 330        u8 hub_port;
 331        u8 pid_toggle;
 332        u8 channel;
 333        s8 split_sc_frame;
 334};
 335
 336struct cvmx_usb_tx_fifo {
 337        struct {
 338                int channel;
 339                int size;
 340                u64 address;
 341        } entry[MAX_CHANNELS + 1];
 342        int head;
 343        int tail;
 344};
 345
 346/**
 347 * struct octeon_hcd - the state of the USB block
 348 *
 349 * lock:                   Serialization lock.
 350 * init_flags:             Flags passed to initialize.
 351 * index:                  Which USB block this is for.
 352 * idle_hardware_channels: Bit set for every idle hardware channel.
 353 * usbcx_hprt:             Stored port status so we don't need to read a CSR to
 354 *                         determine splits.
 355 * pipe_for_channel:       Map channels to pipes.
 356 * pipe:                   Storage for pipes.
 357 * indent:                 Used by debug output to indent functions.
 358 * port_status:            Last port status used for change notification.
 359 * idle_pipes:             List of open pipes that have no transactions.
 360 * active_pipes:           Active pipes indexed by transfer type.
 361 * frame_number:           Increments every SOF interrupt for time keeping.
 362 * active_split:           Points to the current active split, or NULL.
 363 */
 364struct octeon_hcd {
 365        spinlock_t lock; /* serialization lock */
 366        int init_flags;
 367        int index;
 368        int idle_hardware_channels;
 369        union cvmx_usbcx_hprt usbcx_hprt;
 370        struct cvmx_usb_pipe *pipe_for_channel[MAX_CHANNELS];
 371        int indent;
 372        struct cvmx_usb_port_status port_status;
 373        struct list_head idle_pipes;
 374        struct list_head active_pipes[4];
 375        u64 frame_number;
 376        struct cvmx_usb_transaction *active_split;
 377        struct cvmx_usb_tx_fifo periodic;
 378        struct cvmx_usb_tx_fifo nonperiodic;
 379};
 380
 381/*
 382 * This macro logically sets a single field in a CSR. It does the sequence
 383 * read, modify, and write
 384 */
 385#define USB_SET_FIELD32(address, _union, field, value)          \
 386        do {                                                    \
 387                union _union c;                                 \
 388                                                                \
 389                c.u32 = cvmx_usb_read_csr32(usb, address);      \
 390                c.s.field = value;                              \
 391                cvmx_usb_write_csr32(usb, address, c.u32);      \
 392        } while (0)
 393
 394/* Returns the IO address to push/pop stuff data from the FIFOs */
 395#define USB_FIFO_ADDRESS(channel, usb_index) \
 396        (CVMX_USBCX_GOTGCTL(usb_index) + ((channel) + 1) * 0x1000)
 397
 398/**
 399 * struct octeon_temp_buffer - a bounce buffer for USB transfers
 400 * @orig_buffer: the original buffer passed by the USB stack
 401 * @data:        the newly allocated temporary buffer (excluding meta-data)
 402 *
 403 * Both the DMA engine and FIFO mode will always transfer full 32-bit words. If
 404 * the buffer is too short, we need to allocate a temporary one, and this struct
 405 * represents it.
 406 */
 407struct octeon_temp_buffer {
 408        void *orig_buffer;
 409        u8 data[0];
 410};
 411
 412static inline struct usb_hcd *octeon_to_hcd(struct octeon_hcd *p)
 413{
 414        return container_of((void *)p, struct usb_hcd, hcd_priv);
 415}
 416
 417/**
 418 * octeon_alloc_temp_buffer - allocate a temporary buffer for USB transfer
 419 *                            (if needed)
 420 * @urb:        URB.
 421 * @mem_flags:  Memory allocation flags.
 422 *
 423 * This function allocates a temporary bounce buffer whenever it's needed
 424 * due to HW limitations.
 425 */
 426static int octeon_alloc_temp_buffer(struct urb *urb, gfp_t mem_flags)
 427{
 428        struct octeon_temp_buffer *temp;
 429
 430        if (urb->num_sgs || urb->sg ||
 431            (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP) ||
 432            !(urb->transfer_buffer_length % sizeof(u32)))
 433                return 0;
 434
 435        temp = kmalloc(ALIGN(urb->transfer_buffer_length, sizeof(u32)) +
 436                       sizeof(*temp), mem_flags);
 437        if (!temp)
 438                return -ENOMEM;
 439
 440        temp->orig_buffer = urb->transfer_buffer;
 441        if (usb_urb_dir_out(urb))
 442                memcpy(temp->data, urb->transfer_buffer,
 443                       urb->transfer_buffer_length);
 444        urb->transfer_buffer = temp->data;
 445        urb->transfer_flags |= URB_ALIGNED_TEMP_BUFFER;
 446
 447        return 0;
 448}
 449
 450/**
 451 * octeon_free_temp_buffer - free a temporary buffer used by USB transfers.
 452 * @urb: URB.
 453 *
 454 * Frees a buffer allocated by octeon_alloc_temp_buffer().
 455 */
 456static void octeon_free_temp_buffer(struct urb *urb)
 457{
 458        struct octeon_temp_buffer *temp;
 459        size_t length;
 460
 461        if (!(urb->transfer_flags & URB_ALIGNED_TEMP_BUFFER))
 462                return;
 463
 464        temp = container_of(urb->transfer_buffer, struct octeon_temp_buffer,
 465                            data);
 466        if (usb_urb_dir_in(urb)) {
 467                if (usb_pipeisoc(urb->pipe))
 468                        length = urb->transfer_buffer_length;
 469                else
 470                        length = urb->actual_length;
 471
 472                memcpy(temp->orig_buffer, urb->transfer_buffer, length);
 473        }
 474        urb->transfer_buffer = temp->orig_buffer;
 475        urb->transfer_flags &= ~URB_ALIGNED_TEMP_BUFFER;
 476        kfree(temp);
 477}
 478
 479/**
 480 * octeon_map_urb_for_dma - Octeon-specific map_urb_for_dma().
 481 * @hcd:        USB HCD structure.
 482 * @urb:        URB.
 483 * @mem_flags:  Memory allocation flags.
 484 */
 485static int octeon_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
 486                                  gfp_t mem_flags)
 487{
 488        int ret;
 489
 490        ret = octeon_alloc_temp_buffer(urb, mem_flags);
 491        if (ret)
 492                return ret;
 493
 494        ret = usb_hcd_map_urb_for_dma(hcd, urb, mem_flags);
 495        if (ret)
 496                octeon_free_temp_buffer(urb);
 497
 498        return ret;
 499}
 500
 501/**
 502 * octeon_unmap_urb_for_dma - Octeon-specific unmap_urb_for_dma()
 503 * @hcd:        USB HCD structure.
 504 * @urb:        URB.
 505 */
 506static void octeon_unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
 507{
 508        usb_hcd_unmap_urb_for_dma(hcd, urb);
 509        octeon_free_temp_buffer(urb);
 510}
 511
 512/**
 513 * Read a USB 32bit CSR. It performs the necessary address swizzle
 514 * for 32bit CSRs and logs the value in a readable format if
 515 * debugging is on.
 516 *
 517 * @usb:     USB block this access is for
 518 * @address: 64bit address to read
 519 *
 520 * Returns: Result of the read
 521 */
 522static inline u32 cvmx_usb_read_csr32(struct octeon_hcd *usb, u64 address)
 523{
 524        return cvmx_read64_uint32(address ^ 4);
 525}
 526
 527/**
 528 * Write a USB 32bit CSR. It performs the necessary address
 529 * swizzle for 32bit CSRs and logs the value in a readable format
 530 * if debugging is on.
 531 *
 532 * @usb:     USB block this access is for
 533 * @address: 64bit address to write
 534 * @value:   Value to write
 535 */
 536static inline void cvmx_usb_write_csr32(struct octeon_hcd *usb,
 537                                        u64 address, u32 value)
 538{
 539        cvmx_write64_uint32(address ^ 4, value);
 540        cvmx_read64_uint64(CVMX_USBNX_DMA0_INB_CHN0(usb->index));
 541}
 542
 543/**
 544 * Return non zero if this pipe connects to a non HIGH speed
 545 * device through a high speed hub.
 546 *
 547 * @usb:    USB block this access is for
 548 * @pipe:   Pipe to check
 549 *
 550 * Returns: Non zero if we need to do split transactions
 551 */
 552static inline int cvmx_usb_pipe_needs_split(struct octeon_hcd *usb,
 553                                            struct cvmx_usb_pipe *pipe)
 554{
 555        return pipe->device_speed != CVMX_USB_SPEED_HIGH &&
 556               usb->usbcx_hprt.s.prtspd == CVMX_USB_SPEED_HIGH;
 557}
 558
 559/**
 560 * Trivial utility function to return the correct PID for a pipe
 561 *
 562 * @pipe:   pipe to check
 563 *
 564 * Returns: PID for pipe
 565 */
 566static inline int cvmx_usb_get_data_pid(struct cvmx_usb_pipe *pipe)
 567{
 568        if (pipe->pid_toggle)
 569                return 2; /* Data1 */
 570        return 0; /* Data0 */
 571}
 572
 573/* Loops through register until txfflsh or rxfflsh become zero.*/
 574static int cvmx_wait_tx_rx(struct octeon_hcd *usb, int fflsh_type)
 575{
 576        int result;
 577        u64 address = CVMX_USBCX_GRSTCTL(usb->index);
 578        u64 done = cvmx_get_cycle() + 100 *
 579                   (u64)octeon_get_clock_rate / 1000000;
 580        union cvmx_usbcx_grstctl c;
 581
 582        while (1) {
 583                c.u32 = cvmx_usb_read_csr32(usb, address);
 584                if (fflsh_type == 0 && c.s.txfflsh == 0) {
 585                        result = 0;
 586                        break;
 587                } else if (fflsh_type == 1 && c.s.rxfflsh == 0) {
 588                        result = 0;
 589                        break;
 590                } else if (cvmx_get_cycle() > done) {
 591                        result = -1;
 592                        break;
 593                }
 594
 595                __delay(100);
 596        }
 597        return result;
 598}
 599
 600static void cvmx_fifo_setup(struct octeon_hcd *usb)
 601{
 602        union cvmx_usbcx_ghwcfg3 usbcx_ghwcfg3;
 603        union cvmx_usbcx_gnptxfsiz npsiz;
 604        union cvmx_usbcx_hptxfsiz psiz;
 605
 606        usbcx_ghwcfg3.u32 = cvmx_usb_read_csr32(usb,
 607                                                CVMX_USBCX_GHWCFG3(usb->index));
 608
 609        /*
 610         * Program the USBC_GRXFSIZ register to select the size of the receive
 611         * FIFO (25%).
 612         */
 613        USB_SET_FIELD32(CVMX_USBCX_GRXFSIZ(usb->index), cvmx_usbcx_grxfsiz,
 614                        rxfdep, usbcx_ghwcfg3.s.dfifodepth / 4);
 615
 616        /*
 617         * Program the USBC_GNPTXFSIZ register to select the size and the start
 618         * address of the non-periodic transmit FIFO for nonperiodic
 619         * transactions (50%).
 620         */
 621        npsiz.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_GNPTXFSIZ(usb->index));
 622        npsiz.s.nptxfdep = usbcx_ghwcfg3.s.dfifodepth / 2;
 623        npsiz.s.nptxfstaddr = usbcx_ghwcfg3.s.dfifodepth / 4;
 624        cvmx_usb_write_csr32(usb, CVMX_USBCX_GNPTXFSIZ(usb->index), npsiz.u32);
 625
 626        /*
 627         * Program the USBC_HPTXFSIZ register to select the size and start
 628         * address of the periodic transmit FIFO for periodic transactions
 629         * (25%).
 630         */
 631        psiz.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HPTXFSIZ(usb->index));
 632        psiz.s.ptxfsize = usbcx_ghwcfg3.s.dfifodepth / 4;
 633        psiz.s.ptxfstaddr = 3 * usbcx_ghwcfg3.s.dfifodepth / 4;
 634        cvmx_usb_write_csr32(usb, CVMX_USBCX_HPTXFSIZ(usb->index), psiz.u32);
 635
 636        /* Flush all FIFOs */
 637        USB_SET_FIELD32(CVMX_USBCX_GRSTCTL(usb->index),
 638                        cvmx_usbcx_grstctl, txfnum, 0x10);
 639        USB_SET_FIELD32(CVMX_USBCX_GRSTCTL(usb->index),
 640                        cvmx_usbcx_grstctl, txfflsh, 1);
 641        cvmx_wait_tx_rx(usb, 0);
 642        USB_SET_FIELD32(CVMX_USBCX_GRSTCTL(usb->index),
 643                        cvmx_usbcx_grstctl, rxfflsh, 1);
 644        cvmx_wait_tx_rx(usb, 1);
 645}
 646
 647/**
 648 * Shutdown a USB port after a call to cvmx_usb_initialize().
 649 * The port should be disabled with all pipes closed when this
 650 * function is called.
 651 *
 652 * @usb: USB device state populated by cvmx_usb_initialize().
 653 *
 654 * Returns: 0 or a negative error code.
 655 */
 656static int cvmx_usb_shutdown(struct octeon_hcd *usb)
 657{
 658        union cvmx_usbnx_clk_ctl usbn_clk_ctl;
 659
 660        /* Make sure all pipes are closed */
 661        if (!list_empty(&usb->idle_pipes) ||
 662            !list_empty(&usb->active_pipes[CVMX_USB_TRANSFER_ISOCHRONOUS]) ||
 663            !list_empty(&usb->active_pipes[CVMX_USB_TRANSFER_INTERRUPT]) ||
 664            !list_empty(&usb->active_pipes[CVMX_USB_TRANSFER_CONTROL]) ||
 665            !list_empty(&usb->active_pipes[CVMX_USB_TRANSFER_BULK]))
 666                return -EBUSY;
 667
 668        /* Disable the clocks and put them in power on reset */
 669        usbn_clk_ctl.u64 = cvmx_read64_uint64(CVMX_USBNX_CLK_CTL(usb->index));
 670        usbn_clk_ctl.s.enable = 1;
 671        usbn_clk_ctl.s.por = 1;
 672        usbn_clk_ctl.s.hclk_rst = 1;
 673        usbn_clk_ctl.s.prst = 0;
 674        usbn_clk_ctl.s.hrst = 0;
 675        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 676        return 0;
 677}
 678
 679/**
 680 * Initialize a USB port for use. This must be called before any
 681 * other access to the Octeon USB port is made. The port starts
 682 * off in the disabled state.
 683 *
 684 * @dev:         Pointer to struct device for logging purposes.
 685 * @usb:         Pointer to struct octeon_hcd.
 686 *
 687 * Returns: 0 or a negative error code.
 688 */
 689static int cvmx_usb_initialize(struct device *dev,
 690                               struct octeon_hcd *usb)
 691{
 692        int channel;
 693        int divisor;
 694        int retries = 0;
 695        union cvmx_usbcx_hcfg usbcx_hcfg;
 696        union cvmx_usbnx_clk_ctl usbn_clk_ctl;
 697        union cvmx_usbcx_gintsts usbc_gintsts;
 698        union cvmx_usbcx_gahbcfg usbcx_gahbcfg;
 699        union cvmx_usbcx_gintmsk usbcx_gintmsk;
 700        union cvmx_usbcx_gusbcfg usbcx_gusbcfg;
 701        union cvmx_usbnx_usbp_ctl_status usbn_usbp_ctl_status;
 702
 703retry:
 704        /*
 705         * Power On Reset and PHY Initialization
 706         *
 707         * 1. Wait for DCOK to assert (nothing to do)
 708         *
 709         * 2a. Write USBN0/1_CLK_CTL[POR] = 1 and
 710         *     USBN0/1_CLK_CTL[HRST,PRST,HCLK_RST] = 0
 711         */
 712        usbn_clk_ctl.u64 = cvmx_read64_uint64(CVMX_USBNX_CLK_CTL(usb->index));
 713        usbn_clk_ctl.s.por = 1;
 714        usbn_clk_ctl.s.hrst = 0;
 715        usbn_clk_ctl.s.prst = 0;
 716        usbn_clk_ctl.s.hclk_rst = 0;
 717        usbn_clk_ctl.s.enable = 0;
 718        /*
 719         * 2b. Select the USB reference clock/crystal parameters by writing
 720         *     appropriate values to USBN0/1_CLK_CTL[P_C_SEL, P_RTYPE, P_COM_ON]
 721         */
 722        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND) {
 723                /*
 724                 * The USB port uses 12/24/48MHz 2.5V board clock
 725                 * source at USB_XO. USB_XI should be tied to GND.
 726                 * Most Octeon evaluation boards require this setting
 727                 */
 728                if (OCTEON_IS_MODEL(OCTEON_CN3XXX) ||
 729                    OCTEON_IS_MODEL(OCTEON_CN56XX) ||
 730                    OCTEON_IS_MODEL(OCTEON_CN50XX))
 731                        /* From CN56XX,CN50XX,CN31XX,CN30XX manuals */
 732                        usbn_clk_ctl.s.p_rtype = 2; /* p_rclk=1 & p_xenbn=0 */
 733                else
 734                        /* From CN52XX manual */
 735                        usbn_clk_ctl.s.p_rtype = 1;
 736
 737                switch (usb->init_flags &
 738                        CVMX_USB_INITIALIZE_FLAGS_CLOCK_MHZ_MASK) {
 739                case CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ:
 740                        usbn_clk_ctl.s.p_c_sel = 0;
 741                        break;
 742                case CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ:
 743                        usbn_clk_ctl.s.p_c_sel = 1;
 744                        break;
 745                case CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ:
 746                        usbn_clk_ctl.s.p_c_sel = 2;
 747                        break;
 748                }
 749        } else {
 750                /*
 751                 * The USB port uses a 12MHz crystal as clock source
 752                 * at USB_XO and USB_XI
 753                 */
 754                if (OCTEON_IS_MODEL(OCTEON_CN3XXX))
 755                        /* From CN31XX,CN30XX manual */
 756                        usbn_clk_ctl.s.p_rtype = 3; /* p_rclk=1 & p_xenbn=1 */
 757                else
 758                        /* From CN56XX,CN52XX,CN50XX manuals. */
 759                        usbn_clk_ctl.s.p_rtype = 0;
 760
 761                usbn_clk_ctl.s.p_c_sel = 0;
 762        }
 763        /*
 764         * 2c. Select the HCLK via writing USBN0/1_CLK_CTL[DIVIDE, DIVIDE2] and
 765         *     setting USBN0/1_CLK_CTL[ENABLE] = 1. Divide the core clock down
 766         *     such that USB is as close as possible to 125Mhz
 767         */
 768        divisor = DIV_ROUND_UP(octeon_get_clock_rate(), 125000000);
 769        /* Lower than 4 doesn't seem to work properly */
 770        if (divisor < 4)
 771                divisor = 4;
 772        usbn_clk_ctl.s.divide = divisor;
 773        usbn_clk_ctl.s.divide2 = 0;
 774        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 775
 776        /* 2d. Write USBN0/1_CLK_CTL[HCLK_RST] = 1 */
 777        usbn_clk_ctl.s.hclk_rst = 1;
 778        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 779        /* 2e.  Wait 64 core-clock cycles for HCLK to stabilize */
 780        __delay(64);
 781        /*
 782         * 3. Program the power-on reset field in the USBN clock-control
 783         *    register:
 784         *    USBN_CLK_CTL[POR] = 0
 785         */
 786        usbn_clk_ctl.s.por = 0;
 787        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 788        /* 4. Wait 1 ms for PHY clock to start */
 789        mdelay(1);
 790        /*
 791         * 5. Program the Reset input from automatic test equipment field in the
 792         *    USBP control and status register:
 793         *    USBN_USBP_CTL_STATUS[ATE_RESET] = 1
 794         */
 795        usbn_usbp_ctl_status.u64 =
 796                cvmx_read64_uint64(CVMX_USBNX_USBP_CTL_STATUS(usb->index));
 797        usbn_usbp_ctl_status.s.ate_reset = 1;
 798        cvmx_write64_uint64(CVMX_USBNX_USBP_CTL_STATUS(usb->index),
 799                            usbn_usbp_ctl_status.u64);
 800        /* 6. Wait 10 cycles */
 801        __delay(10);
 802        /*
 803         * 7. Clear ATE_RESET field in the USBN clock-control register:
 804         *    USBN_USBP_CTL_STATUS[ATE_RESET] = 0
 805         */
 806        usbn_usbp_ctl_status.s.ate_reset = 0;
 807        cvmx_write64_uint64(CVMX_USBNX_USBP_CTL_STATUS(usb->index),
 808                            usbn_usbp_ctl_status.u64);
 809        /*
 810         * 8. Program the PHY reset field in the USBN clock-control register:
 811         *    USBN_CLK_CTL[PRST] = 1
 812         */
 813        usbn_clk_ctl.s.prst = 1;
 814        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 815        /*
 816         * 9. Program the USBP control and status register to select host or
 817         *    device mode. USBN_USBP_CTL_STATUS[HST_MODE] = 0 for host, = 1 for
 818         *    device
 819         */
 820        usbn_usbp_ctl_status.s.hst_mode = 0;
 821        cvmx_write64_uint64(CVMX_USBNX_USBP_CTL_STATUS(usb->index),
 822                            usbn_usbp_ctl_status.u64);
 823        /* 10. Wait 1 us */
 824        udelay(1);
 825        /*
 826         * 11. Program the hreset_n field in the USBN clock-control register:
 827         *     USBN_CLK_CTL[HRST] = 1
 828         */
 829        usbn_clk_ctl.s.hrst = 1;
 830        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 831        /* 12. Proceed to USB core initialization */
 832        usbn_clk_ctl.s.enable = 1;
 833        cvmx_write64_uint64(CVMX_USBNX_CLK_CTL(usb->index), usbn_clk_ctl.u64);
 834        udelay(1);
 835
 836        /*
 837         * USB Core Initialization
 838         *
 839         * 1. Read USBC_GHWCFG1, USBC_GHWCFG2, USBC_GHWCFG3, USBC_GHWCFG4 to
 840         *    determine USB core configuration parameters.
 841         *
 842         *    Nothing needed
 843         *
 844         * 2. Program the following fields in the global AHB configuration
 845         *    register (USBC_GAHBCFG)
 846         *    DMA mode, USBC_GAHBCFG[DMAEn]: 1 = DMA mode, 0 = slave mode
 847         *    Burst length, USBC_GAHBCFG[HBSTLEN] = 0
 848         *    Nonperiodic TxFIFO empty level (slave mode only),
 849         *    USBC_GAHBCFG[NPTXFEMPLVL]
 850         *    Periodic TxFIFO empty level (slave mode only),
 851         *    USBC_GAHBCFG[PTXFEMPLVL]
 852         *    Global interrupt mask, USBC_GAHBCFG[GLBLINTRMSK] = 1
 853         */
 854        usbcx_gahbcfg.u32 = 0;
 855        usbcx_gahbcfg.s.dmaen = !(usb->init_flags &
 856                                  CVMX_USB_INITIALIZE_FLAGS_NO_DMA);
 857        usbcx_gahbcfg.s.hbstlen = 0;
 858        usbcx_gahbcfg.s.nptxfemplvl = 1;
 859        usbcx_gahbcfg.s.ptxfemplvl = 1;
 860        usbcx_gahbcfg.s.glblintrmsk = 1;
 861        cvmx_usb_write_csr32(usb, CVMX_USBCX_GAHBCFG(usb->index),
 862                             usbcx_gahbcfg.u32);
 863
 864        /*
 865         * 3. Program the following fields in USBC_GUSBCFG register.
 866         *    HS/FS timeout calibration, USBC_GUSBCFG[TOUTCAL] = 0
 867         *    ULPI DDR select, USBC_GUSBCFG[DDRSEL] = 0
 868         *    USB turnaround time, USBC_GUSBCFG[USBTRDTIM] = 0x5
 869         *    PHY low-power clock select, USBC_GUSBCFG[PHYLPWRCLKSEL] = 0
 870         */
 871        usbcx_gusbcfg.u32 = cvmx_usb_read_csr32(usb,
 872                                                CVMX_USBCX_GUSBCFG(usb->index));
 873        usbcx_gusbcfg.s.toutcal = 0;
 874        usbcx_gusbcfg.s.ddrsel = 0;
 875        usbcx_gusbcfg.s.usbtrdtim = 0x5;
 876        usbcx_gusbcfg.s.phylpwrclksel = 0;
 877        cvmx_usb_write_csr32(usb, CVMX_USBCX_GUSBCFG(usb->index),
 878                             usbcx_gusbcfg.u32);
 879
 880        /*
 881         * 4. The software must unmask the following bits in the USBC_GINTMSK
 882         *    register.
 883         *    OTG interrupt mask, USBC_GINTMSK[OTGINTMSK] = 1
 884         *    Mode mismatch interrupt mask, USBC_GINTMSK[MODEMISMSK] = 1
 885         */
 886        usbcx_gintmsk.u32 = cvmx_usb_read_csr32(usb,
 887                                                CVMX_USBCX_GINTMSK(usb->index));
 888        usbcx_gintmsk.s.otgintmsk = 1;
 889        usbcx_gintmsk.s.modemismsk = 1;
 890        usbcx_gintmsk.s.hchintmsk = 1;
 891        usbcx_gintmsk.s.sofmsk = 0;
 892        /* We need RX FIFO interrupts if we don't have DMA */
 893        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)
 894                usbcx_gintmsk.s.rxflvlmsk = 1;
 895        cvmx_usb_write_csr32(usb, CVMX_USBCX_GINTMSK(usb->index),
 896                             usbcx_gintmsk.u32);
 897
 898        /*
 899         * Disable all channel interrupts. We'll enable them per channel later.
 900         */
 901        for (channel = 0; channel < 8; channel++)
 902                cvmx_usb_write_csr32(usb,
 903                                     CVMX_USBCX_HCINTMSKX(channel, usb->index),
 904                                     0);
 905
 906        /*
 907         * Host Port Initialization
 908         *
 909         * 1. Program the host-port interrupt-mask field to unmask,
 910         *    USBC_GINTMSK[PRTINT] = 1
 911         */
 912        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
 913                        cvmx_usbcx_gintmsk, prtintmsk, 1);
 914        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
 915                        cvmx_usbcx_gintmsk, disconnintmsk, 1);
 916
 917        /*
 918         * 2. Program the USBC_HCFG register to select full-speed host
 919         *    or high-speed host.
 920         */
 921        usbcx_hcfg.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HCFG(usb->index));
 922        usbcx_hcfg.s.fslssupp = 0;
 923        usbcx_hcfg.s.fslspclksel = 0;
 924        cvmx_usb_write_csr32(usb, CVMX_USBCX_HCFG(usb->index), usbcx_hcfg.u32);
 925
 926        cvmx_fifo_setup(usb);
 927
 928        /*
 929         * If the controller is getting port events right after the reset, it
 930         * means the initialization failed. Try resetting the controller again
 931         * in such case. This is seen to happen after cold boot on DSR-1000N.
 932         */
 933        usbc_gintsts.u32 = cvmx_usb_read_csr32(usb,
 934                                               CVMX_USBCX_GINTSTS(usb->index));
 935        cvmx_usb_write_csr32(usb, CVMX_USBCX_GINTSTS(usb->index),
 936                             usbc_gintsts.u32);
 937        dev_dbg(dev, "gintsts after reset: 0x%x\n", (int)usbc_gintsts.u32);
 938        if (!usbc_gintsts.s.disconnint && !usbc_gintsts.s.prtint)
 939                return 0;
 940        if (retries++ >= 5)
 941                return -EAGAIN;
 942        dev_info(dev, "controller reset failed (gintsts=0x%x) - retrying\n",
 943                 (int)usbc_gintsts.u32);
 944        msleep(50);
 945        cvmx_usb_shutdown(usb);
 946        msleep(50);
 947        goto retry;
 948}
 949
 950/**
 951 * Reset a USB port. After this call succeeds, the USB port is
 952 * online and servicing requests.
 953 *
 954 * @usb: USB device state populated by cvmx_usb_initialize().
 955 */
 956static void cvmx_usb_reset_port(struct octeon_hcd *usb)
 957{
 958        usb->usbcx_hprt.u32 = cvmx_usb_read_csr32(usb,
 959                                                  CVMX_USBCX_HPRT(usb->index));
 960
 961        /* Program the port reset bit to start the reset process */
 962        USB_SET_FIELD32(CVMX_USBCX_HPRT(usb->index), cvmx_usbcx_hprt,
 963                        prtrst, 1);
 964
 965        /*
 966         * Wait at least 50ms (high speed), or 10ms (full speed) for the reset
 967         * process to complete.
 968         */
 969        mdelay(50);
 970
 971        /* Program the port reset bit to 0, USBC_HPRT[PRTRST] = 0 */
 972        USB_SET_FIELD32(CVMX_USBCX_HPRT(usb->index), cvmx_usbcx_hprt,
 973                        prtrst, 0);
 974
 975        /*
 976         * Read the port speed field to get the enumerated speed,
 977         * USBC_HPRT[PRTSPD].
 978         */
 979        usb->usbcx_hprt.u32 = cvmx_usb_read_csr32(usb,
 980                                                  CVMX_USBCX_HPRT(usb->index));
 981}
 982
 983/**
 984 * Disable a USB port. After this call the USB port will not
 985 * generate data transfers and will not generate events.
 986 * Transactions in process will fail and call their
 987 * associated callbacks.
 988 *
 989 * @usb: USB device state populated by cvmx_usb_initialize().
 990 *
 991 * Returns: 0 or a negative error code.
 992 */
 993static int cvmx_usb_disable(struct octeon_hcd *usb)
 994{
 995        /* Disable the port */
 996        USB_SET_FIELD32(CVMX_USBCX_HPRT(usb->index), cvmx_usbcx_hprt,
 997                        prtena, 1);
 998        return 0;
 999}
1000
1001/**
1002 * Get the current state of the USB port. Use this call to
1003 * determine if the usb port has anything connected, is enabled,
1004 * or has some sort of error condition. The return value of this
1005 * call has "changed" bits to signal of the value of some fields
1006 * have changed between calls.
1007 *
1008 * @usb: USB device state populated by cvmx_usb_initialize().
1009 *
1010 * Returns: Port status information
1011 */
1012static struct cvmx_usb_port_status cvmx_usb_get_status(struct octeon_hcd *usb)
1013{
1014        union cvmx_usbcx_hprt usbc_hprt;
1015        struct cvmx_usb_port_status result;
1016
1017        memset(&result, 0, sizeof(result));
1018
1019        usbc_hprt.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HPRT(usb->index));
1020        result.port_enabled = usbc_hprt.s.prtena;
1021        result.port_over_current = usbc_hprt.s.prtovrcurract;
1022        result.port_powered = usbc_hprt.s.prtpwr;
1023        result.port_speed = usbc_hprt.s.prtspd;
1024        result.connected = usbc_hprt.s.prtconnsts;
1025        result.connect_change =
1026                result.connected != usb->port_status.connected;
1027
1028        return result;
1029}
1030
1031/**
1032 * Open a virtual pipe between the host and a USB device. A pipe
1033 * must be opened before data can be transferred between a device
1034 * and Octeon.
1035 *
1036 * @usb:             USB device state populated by cvmx_usb_initialize().
1037 * @device_addr:
1038 *                   USB device address to open the pipe to
1039 *                   (0-127).
1040 * @endpoint_num:
1041 *                   USB endpoint number to open the pipe to
1042 *                   (0-15).
1043 * @device_speed:
1044 *                   The speed of the device the pipe is going
1045 *                   to. This must match the device's speed,
1046 *                   which may be different than the port speed.
1047 * @max_packet:      The maximum packet length the device can
1048 *                   transmit/receive (low speed=0-8, full
1049 *                   speed=0-1023, high speed=0-1024). This value
1050 *                   comes from the standard endpoint descriptor
1051 *                   field wMaxPacketSize bits <10:0>.
1052 * @transfer_type:
1053 *                   The type of transfer this pipe is for.
1054 * @transfer_dir:
1055 *                   The direction the pipe is in. This is not
1056 *                   used for control pipes.
1057 * @interval:        For ISOCHRONOUS and INTERRUPT transfers,
1058 *                   this is how often the transfer is scheduled
1059 *                   for. All other transfers should specify
1060 *                   zero. The units are in frames (8000/sec at
1061 *                   high speed, 1000/sec for full speed).
1062 * @multi_count:
1063 *                   For high speed devices, this is the maximum
1064 *                   allowed number of packet per microframe.
1065 *                   Specify zero for non high speed devices. This
1066 *                   value comes from the standard endpoint descriptor
1067 *                   field wMaxPacketSize bits <12:11>.
1068 * @hub_device_addr:
1069 *                   Hub device address this device is connected
1070 *                   to. Devices connected directly to Octeon
1071 *                   use zero. This is only used when the device
1072 *                   is full/low speed behind a high speed hub.
1073 *                   The address will be of the high speed hub,
1074 *                   not and full speed hubs after it.
1075 * @hub_port:        Which port on the hub the device is
1076 *                   connected. Use zero for devices connected
1077 *                   directly to Octeon. Like hub_device_addr,
1078 *                   this is only used for full/low speed
1079 *                   devices behind a high speed hub.
1080 *
1081 * Returns: A non-NULL value is a pipe. NULL means an error.
1082 */
1083static struct cvmx_usb_pipe *cvmx_usb_open_pipe(struct octeon_hcd *usb,
1084                                                int device_addr,
1085                                                int endpoint_num,
1086                                                enum cvmx_usb_speed
1087                                                        device_speed,
1088                                                int max_packet,
1089                                                enum cvmx_usb_transfer
1090                                                        transfer_type,
1091                                                enum cvmx_usb_direction
1092                                                        transfer_dir,
1093                                                int interval, int multi_count,
1094                                                int hub_device_addr,
1095                                                int hub_port)
1096{
1097        struct cvmx_usb_pipe *pipe;
1098
1099        pipe = kzalloc(sizeof(*pipe), GFP_ATOMIC);
1100        if (!pipe)
1101                return NULL;
1102        if ((device_speed == CVMX_USB_SPEED_HIGH) &&
1103            (transfer_dir == CVMX_USB_DIRECTION_OUT) &&
1104            (transfer_type == CVMX_USB_TRANSFER_BULK))
1105                pipe->flags |= CVMX_USB_PIPE_FLAGS_NEED_PING;
1106        pipe->device_addr = device_addr;
1107        pipe->endpoint_num = endpoint_num;
1108        pipe->device_speed = device_speed;
1109        pipe->max_packet = max_packet;
1110        pipe->transfer_type = transfer_type;
1111        pipe->transfer_dir = transfer_dir;
1112        INIT_LIST_HEAD(&pipe->transactions);
1113
1114        /*
1115         * All pipes use interval to rate limit NAK processing. Force an
1116         * interval if one wasn't supplied
1117         */
1118        if (!interval)
1119                interval = 1;
1120        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
1121                pipe->interval = interval * 8;
1122                /* Force start splits to be schedule on uFrame 0 */
1123                pipe->next_tx_frame = ((usb->frame_number + 7) & ~7) +
1124                                        pipe->interval;
1125        } else {
1126                pipe->interval = interval;
1127                pipe->next_tx_frame = usb->frame_number + pipe->interval;
1128        }
1129        pipe->multi_count = multi_count;
1130        pipe->hub_device_addr = hub_device_addr;
1131        pipe->hub_port = hub_port;
1132        pipe->pid_toggle = 0;
1133        pipe->split_sc_frame = -1;
1134        list_add_tail(&pipe->node, &usb->idle_pipes);
1135
1136        /*
1137         * We don't need to tell the hardware about this pipe yet since
1138         * it doesn't have any submitted requests
1139         */
1140
1141        return pipe;
1142}
1143
1144/**
1145 * Poll the RX FIFOs and remove data as needed. This function is only used
1146 * in non DMA mode. It is very important that this function be called quickly
1147 * enough to prevent FIFO overflow.
1148 *
1149 * @usb:        USB device state populated by cvmx_usb_initialize().
1150 */
1151static void cvmx_usb_poll_rx_fifo(struct octeon_hcd *usb)
1152{
1153        union cvmx_usbcx_grxstsph rx_status;
1154        int channel;
1155        int bytes;
1156        u64 address;
1157        u32 *ptr;
1158
1159        rx_status.u32 = cvmx_usb_read_csr32(usb,
1160                                            CVMX_USBCX_GRXSTSPH(usb->index));
1161        /* Only read data if IN data is there */
1162        if (rx_status.s.pktsts != 2)
1163                return;
1164        /* Check if no data is available */
1165        if (!rx_status.s.bcnt)
1166                return;
1167
1168        channel = rx_status.s.chnum;
1169        bytes = rx_status.s.bcnt;
1170        if (!bytes)
1171                return;
1172
1173        /* Get where the DMA engine would have written this data */
1174        address = cvmx_read64_uint64(CVMX_USBNX_DMA0_INB_CHN0(usb->index) +
1175                                     channel * 8);
1176
1177        ptr = cvmx_phys_to_ptr(address);
1178        cvmx_write64_uint64(CVMX_USBNX_DMA0_INB_CHN0(usb->index) + channel * 8,
1179                            address + bytes);
1180
1181        /* Loop writing the FIFO data for this packet into memory */
1182        while (bytes > 0) {
1183                *ptr++ = cvmx_usb_read_csr32(usb,
1184                                        USB_FIFO_ADDRESS(channel, usb->index));
1185                bytes -= 4;
1186        }
1187        CVMX_SYNCW;
1188}
1189
1190/**
1191 * Fill the TX hardware fifo with data out of the software
1192 * fifos
1193 *
1194 * @usb:            USB device state populated by cvmx_usb_initialize().
1195 * @fifo:           Software fifo to use
1196 * @available:      Amount of space in the hardware fifo
1197 *
1198 * Returns: Non zero if the hardware fifo was too small and needs
1199 *          to be serviced again.
1200 */
1201static int cvmx_usb_fill_tx_hw(struct octeon_hcd *usb,
1202                               struct cvmx_usb_tx_fifo *fifo, int available)
1203{
1204        /*
1205         * We're done either when there isn't anymore space or the software FIFO
1206         * is empty
1207         */
1208        while (available && (fifo->head != fifo->tail)) {
1209                int i = fifo->tail;
1210                const u32 *ptr = cvmx_phys_to_ptr(fifo->entry[i].address);
1211                u64 csr_address = USB_FIFO_ADDRESS(fifo->entry[i].channel,
1212                                                   usb->index) ^ 4;
1213                int words = available;
1214
1215                /* Limit the amount of data to what the SW fifo has */
1216                if (fifo->entry[i].size <= available) {
1217                        words = fifo->entry[i].size;
1218                        fifo->tail++;
1219                        if (fifo->tail > MAX_CHANNELS)
1220                                fifo->tail = 0;
1221                }
1222
1223                /* Update the next locations and counts */
1224                available -= words;
1225                fifo->entry[i].address += words * 4;
1226                fifo->entry[i].size -= words;
1227
1228                /*
1229                 * Write the HW fifo data. The read every three writes is due
1230                 * to an errata on CN3XXX chips
1231                 */
1232                while (words > 3) {
1233                        cvmx_write64_uint32(csr_address, *ptr++);
1234                        cvmx_write64_uint32(csr_address, *ptr++);
1235                        cvmx_write64_uint32(csr_address, *ptr++);
1236                        cvmx_read64_uint64(
1237                                        CVMX_USBNX_DMA0_INB_CHN0(usb->index));
1238                        words -= 3;
1239                }
1240                cvmx_write64_uint32(csr_address, *ptr++);
1241                if (--words) {
1242                        cvmx_write64_uint32(csr_address, *ptr++);
1243                        if (--words)
1244                                cvmx_write64_uint32(csr_address, *ptr++);
1245                }
1246                cvmx_read64_uint64(CVMX_USBNX_DMA0_INB_CHN0(usb->index));
1247        }
1248        return fifo->head != fifo->tail;
1249}
1250
1251/**
1252 * Check the hardware FIFOs and fill them as needed
1253 *
1254 * @usb:        USB device state populated by cvmx_usb_initialize().
1255 */
1256static void cvmx_usb_poll_tx_fifo(struct octeon_hcd *usb)
1257{
1258        if (usb->periodic.head != usb->periodic.tail) {
1259                union cvmx_usbcx_hptxsts tx_status;
1260
1261                tx_status.u32 = cvmx_usb_read_csr32(usb,
1262                                        CVMX_USBCX_HPTXSTS(usb->index));
1263                if (cvmx_usb_fill_tx_hw(usb, &usb->periodic,
1264                                        tx_status.s.ptxfspcavail))
1265                        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
1266                                        cvmx_usbcx_gintmsk, ptxfempmsk, 1);
1267                else
1268                        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
1269                                        cvmx_usbcx_gintmsk, ptxfempmsk, 0);
1270        }
1271
1272        if (usb->nonperiodic.head != usb->nonperiodic.tail) {
1273                union cvmx_usbcx_gnptxsts tx_status;
1274
1275                tx_status.u32 = cvmx_usb_read_csr32(usb,
1276                                        CVMX_USBCX_GNPTXSTS(usb->index));
1277                if (cvmx_usb_fill_tx_hw(usb, &usb->nonperiodic,
1278                                        tx_status.s.nptxfspcavail))
1279                        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
1280                                        cvmx_usbcx_gintmsk, nptxfempmsk, 1);
1281                else
1282                        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
1283                                        cvmx_usbcx_gintmsk, nptxfempmsk, 0);
1284        }
1285}
1286
1287/**
1288 * Fill the TX FIFO with an outgoing packet
1289 *
1290 * @usb:          USB device state populated by cvmx_usb_initialize().
1291 * @channel:      Channel number to get packet from
1292 */
1293static void cvmx_usb_fill_tx_fifo(struct octeon_hcd *usb, int channel)
1294{
1295        union cvmx_usbcx_hccharx hcchar;
1296        union cvmx_usbcx_hcspltx usbc_hcsplt;
1297        union cvmx_usbcx_hctsizx usbc_hctsiz;
1298        struct cvmx_usb_tx_fifo *fifo;
1299
1300        /* We only need to fill data on outbound channels */
1301        hcchar.u32 = cvmx_usb_read_csr32(usb,
1302                        CVMX_USBCX_HCCHARX(channel, usb->index));
1303        if (hcchar.s.epdir != CVMX_USB_DIRECTION_OUT)
1304                return;
1305
1306        /* OUT Splits only have data on the start and not the complete */
1307        usbc_hcsplt.u32 = cvmx_usb_read_csr32(usb,
1308                                CVMX_USBCX_HCSPLTX(channel, usb->index));
1309        if (usbc_hcsplt.s.spltena && usbc_hcsplt.s.compsplt)
1310                return;
1311
1312        /*
1313         * Find out how many bytes we need to fill and convert it into 32bit
1314         * words.
1315         */
1316        usbc_hctsiz.u32 = cvmx_usb_read_csr32(usb,
1317                                CVMX_USBCX_HCTSIZX(channel, usb->index));
1318        if (!usbc_hctsiz.s.xfersize)
1319                return;
1320
1321        if ((hcchar.s.eptype == CVMX_USB_TRANSFER_INTERRUPT) ||
1322            (hcchar.s.eptype == CVMX_USB_TRANSFER_ISOCHRONOUS))
1323                fifo = &usb->periodic;
1324        else
1325                fifo = &usb->nonperiodic;
1326
1327        fifo->entry[fifo->head].channel = channel;
1328        fifo->entry[fifo->head].address =
1329                cvmx_read64_uint64(CVMX_USBNX_DMA0_OUTB_CHN0(usb->index) +
1330                                   channel * 8);
1331        fifo->entry[fifo->head].size = (usbc_hctsiz.s.xfersize + 3) >> 2;
1332        fifo->head++;
1333        if (fifo->head > MAX_CHANNELS)
1334                fifo->head = 0;
1335
1336        cvmx_usb_poll_tx_fifo(usb);
1337}
1338
1339/**
1340 * Perform channel specific setup for Control transactions. All
1341 * the generic stuff will already have been done in cvmx_usb_start_channel().
1342 *
1343 * @usb:          USB device state populated by cvmx_usb_initialize().
1344 * @channel:      Channel to setup
1345 * @pipe:         Pipe for control transaction
1346 */
1347static void cvmx_usb_start_channel_control(struct octeon_hcd *usb,
1348                                           int channel,
1349                                           struct cvmx_usb_pipe *pipe)
1350{
1351        struct usb_hcd *hcd = octeon_to_hcd(usb);
1352        struct device *dev = hcd->self.controller;
1353        struct cvmx_usb_transaction *transaction =
1354                list_first_entry(&pipe->transactions, typeof(*transaction),
1355                                 node);
1356        struct usb_ctrlrequest *header =
1357                cvmx_phys_to_ptr(transaction->control_header);
1358        int bytes_to_transfer = transaction->buffer_length -
1359                transaction->actual_bytes;
1360        int packets_to_transfer;
1361        union cvmx_usbcx_hctsizx usbc_hctsiz;
1362
1363        usbc_hctsiz.u32 = cvmx_usb_read_csr32(usb,
1364                                CVMX_USBCX_HCTSIZX(channel, usb->index));
1365
1366        switch (transaction->stage) {
1367        case CVMX_USB_STAGE_NON_CONTROL:
1368        case CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE:
1369                dev_err(dev, "%s: ERROR - Non control stage\n", __func__);
1370                break;
1371        case CVMX_USB_STAGE_SETUP:
1372                usbc_hctsiz.s.pid = 3; /* Setup */
1373                bytes_to_transfer = sizeof(*header);
1374                /* All Control operations start with a setup going OUT */
1375                USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1376                                cvmx_usbcx_hccharx, epdir,
1377                                CVMX_USB_DIRECTION_OUT);
1378                /*
1379                 * Setup send the control header instead of the buffer data. The
1380                 * buffer data will be used in the next stage
1381                 */
1382                cvmx_write64_uint64(CVMX_USBNX_DMA0_OUTB_CHN0(usb->index) +
1383                                        channel * 8,
1384                                    transaction->control_header);
1385                break;
1386        case CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE:
1387                usbc_hctsiz.s.pid = 3; /* Setup */
1388                bytes_to_transfer = 0;
1389                /* All Control operations start with a setup going OUT */
1390                USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1391                                cvmx_usbcx_hccharx, epdir,
1392                                CVMX_USB_DIRECTION_OUT);
1393
1394                USB_SET_FIELD32(CVMX_USBCX_HCSPLTX(channel, usb->index),
1395                                cvmx_usbcx_hcspltx, compsplt, 1);
1396                break;
1397        case CVMX_USB_STAGE_DATA:
1398                usbc_hctsiz.s.pid = cvmx_usb_get_data_pid(pipe);
1399                if (cvmx_usb_pipe_needs_split(usb, pipe)) {
1400                        if (header->bRequestType & USB_DIR_IN)
1401                                bytes_to_transfer = 0;
1402                        else if (bytes_to_transfer > pipe->max_packet)
1403                                bytes_to_transfer = pipe->max_packet;
1404                }
1405                USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1406                                cvmx_usbcx_hccharx, epdir,
1407                                ((header->bRequestType & USB_DIR_IN) ?
1408                                        CVMX_USB_DIRECTION_IN :
1409                                        CVMX_USB_DIRECTION_OUT));
1410                break;
1411        case CVMX_USB_STAGE_DATA_SPLIT_COMPLETE:
1412                usbc_hctsiz.s.pid = cvmx_usb_get_data_pid(pipe);
1413                if (!(header->bRequestType & USB_DIR_IN))
1414                        bytes_to_transfer = 0;
1415                USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1416                                cvmx_usbcx_hccharx, epdir,
1417                                ((header->bRequestType & USB_DIR_IN) ?
1418                                        CVMX_USB_DIRECTION_IN :
1419                                        CVMX_USB_DIRECTION_OUT));
1420                USB_SET_FIELD32(CVMX_USBCX_HCSPLTX(channel, usb->index),
1421                                cvmx_usbcx_hcspltx, compsplt, 1);
1422                break;
1423        case CVMX_USB_STAGE_STATUS:
1424                usbc_hctsiz.s.pid = cvmx_usb_get_data_pid(pipe);
1425                bytes_to_transfer = 0;
1426                USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1427                                cvmx_usbcx_hccharx, epdir,
1428                                ((header->bRequestType & USB_DIR_IN) ?
1429                                        CVMX_USB_DIRECTION_OUT :
1430                                        CVMX_USB_DIRECTION_IN));
1431                break;
1432        case CVMX_USB_STAGE_STATUS_SPLIT_COMPLETE:
1433                usbc_hctsiz.s.pid = cvmx_usb_get_data_pid(pipe);
1434                bytes_to_transfer = 0;
1435                USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1436                                cvmx_usbcx_hccharx, epdir,
1437                                ((header->bRequestType & USB_DIR_IN) ?
1438                                        CVMX_USB_DIRECTION_OUT :
1439                                        CVMX_USB_DIRECTION_IN));
1440                USB_SET_FIELD32(CVMX_USBCX_HCSPLTX(channel, usb->index),
1441                                cvmx_usbcx_hcspltx, compsplt, 1);
1442                break;
1443        }
1444
1445        /*
1446         * Make sure the transfer never exceeds the byte limit of the hardware.
1447         * Further bytes will be sent as continued transactions
1448         */
1449        if (bytes_to_transfer > MAX_TRANSFER_BYTES) {
1450                /* Round MAX_TRANSFER_BYTES to a multiple of out packet size */
1451                bytes_to_transfer = MAX_TRANSFER_BYTES / pipe->max_packet;
1452                bytes_to_transfer *= pipe->max_packet;
1453        }
1454
1455        /*
1456         * Calculate the number of packets to transfer. If the length is zero
1457         * we still need to transfer one packet
1458         */
1459        packets_to_transfer = DIV_ROUND_UP(bytes_to_transfer,
1460                                           pipe->max_packet);
1461        if (packets_to_transfer == 0) {
1462                packets_to_transfer = 1;
1463        } else if ((packets_to_transfer > 1) &&
1464                        (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)) {
1465                /*
1466                 * Limit to one packet when not using DMA. Channels must be
1467                 * restarted between every packet for IN transactions, so there
1468                 * is no reason to do multiple packets in a row
1469                 */
1470                packets_to_transfer = 1;
1471                bytes_to_transfer = packets_to_transfer * pipe->max_packet;
1472        } else if (packets_to_transfer > MAX_TRANSFER_PACKETS) {
1473                /*
1474                 * Limit the number of packet and data transferred to what the
1475                 * hardware can handle
1476                 */
1477                packets_to_transfer = MAX_TRANSFER_PACKETS;
1478                bytes_to_transfer = packets_to_transfer * pipe->max_packet;
1479        }
1480
1481        usbc_hctsiz.s.xfersize = bytes_to_transfer;
1482        usbc_hctsiz.s.pktcnt = packets_to_transfer;
1483
1484        cvmx_usb_write_csr32(usb, CVMX_USBCX_HCTSIZX(channel, usb->index),
1485                             usbc_hctsiz.u32);
1486}
1487
1488/**
1489 * Start a channel to perform the pipe's head transaction
1490 *
1491 * @usb:          USB device state populated by cvmx_usb_initialize().
1492 * @channel:      Channel to setup
1493 * @pipe:         Pipe to start
1494 */
1495static void cvmx_usb_start_channel(struct octeon_hcd *usb, int channel,
1496                                   struct cvmx_usb_pipe *pipe)
1497{
1498        struct cvmx_usb_transaction *transaction =
1499                list_first_entry(&pipe->transactions, typeof(*transaction),
1500                                 node);
1501
1502        /* Make sure all writes to the DMA region get flushed */
1503        CVMX_SYNCW;
1504
1505        /* Attach the channel to the pipe */
1506        usb->pipe_for_channel[channel] = pipe;
1507        pipe->channel = channel;
1508        pipe->flags |= CVMX_USB_PIPE_FLAGS_SCHEDULED;
1509
1510        /* Mark this channel as in use */
1511        usb->idle_hardware_channels &= ~(1 << channel);
1512
1513        /* Enable the channel interrupt bits */
1514        {
1515                union cvmx_usbcx_hcintx usbc_hcint;
1516                union cvmx_usbcx_hcintmskx usbc_hcintmsk;
1517                union cvmx_usbcx_haintmsk usbc_haintmsk;
1518
1519                /* Clear all channel status bits */
1520                usbc_hcint.u32 = cvmx_usb_read_csr32(usb,
1521                                        CVMX_USBCX_HCINTX(channel, usb->index));
1522
1523                cvmx_usb_write_csr32(usb,
1524                                     CVMX_USBCX_HCINTX(channel, usb->index),
1525                                     usbc_hcint.u32);
1526
1527                usbc_hcintmsk.u32 = 0;
1528                usbc_hcintmsk.s.chhltdmsk = 1;
1529                if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA) {
1530                        /*
1531                         * Channels need these extra interrupts when we aren't
1532                         * in DMA mode.
1533                         */
1534                        usbc_hcintmsk.s.datatglerrmsk = 1;
1535                        usbc_hcintmsk.s.frmovrunmsk = 1;
1536                        usbc_hcintmsk.s.bblerrmsk = 1;
1537                        usbc_hcintmsk.s.xacterrmsk = 1;
1538                        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
1539                                /*
1540                                 * Splits don't generate xfercompl, so we need
1541                                 * ACK and NYET.
1542                                 */
1543                                usbc_hcintmsk.s.nyetmsk = 1;
1544                                usbc_hcintmsk.s.ackmsk = 1;
1545                        }
1546                        usbc_hcintmsk.s.nakmsk = 1;
1547                        usbc_hcintmsk.s.stallmsk = 1;
1548                        usbc_hcintmsk.s.xfercomplmsk = 1;
1549                }
1550                cvmx_usb_write_csr32(usb,
1551                                     CVMX_USBCX_HCINTMSKX(channel, usb->index),
1552                                     usbc_hcintmsk.u32);
1553
1554                /* Enable the channel interrupt to propagate */
1555                usbc_haintmsk.u32 = cvmx_usb_read_csr32(usb,
1556                                        CVMX_USBCX_HAINTMSK(usb->index));
1557                usbc_haintmsk.s.haintmsk |= 1 << channel;
1558                cvmx_usb_write_csr32(usb, CVMX_USBCX_HAINTMSK(usb->index),
1559                                     usbc_haintmsk.u32);
1560        }
1561
1562        /* Setup the location the DMA engine uses. */
1563        {
1564                u64 reg;
1565                u64 dma_address = transaction->buffer +
1566                                  transaction->actual_bytes;
1567
1568                if (transaction->type == CVMX_USB_TRANSFER_ISOCHRONOUS)
1569                        dma_address = transaction->buffer +
1570                                        transaction->iso_packets[0].offset +
1571                                        transaction->actual_bytes;
1572
1573                if (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT)
1574                        reg = CVMX_USBNX_DMA0_OUTB_CHN0(usb->index);
1575                else
1576                        reg = CVMX_USBNX_DMA0_INB_CHN0(usb->index);
1577                cvmx_write64_uint64(reg + channel * 8, dma_address);
1578        }
1579
1580        /* Setup both the size of the transfer and the SPLIT characteristics */
1581        {
1582                union cvmx_usbcx_hcspltx usbc_hcsplt = {.u32 = 0};
1583                union cvmx_usbcx_hctsizx usbc_hctsiz = {.u32 = 0};
1584                int packets_to_transfer;
1585                int bytes_to_transfer = transaction->buffer_length -
1586                        transaction->actual_bytes;
1587
1588                /*
1589                 * ISOCHRONOUS transactions store each individual transfer size
1590                 * in the packet structure, not the global buffer_length
1591                 */
1592                if (transaction->type == CVMX_USB_TRANSFER_ISOCHRONOUS)
1593                        bytes_to_transfer =
1594                                transaction->iso_packets[0].length -
1595                                transaction->actual_bytes;
1596
1597                /*
1598                 * We need to do split transactions when we are talking to non
1599                 * high speed devices that are behind a high speed hub
1600                 */
1601                if (cvmx_usb_pipe_needs_split(usb, pipe)) {
1602                        /*
1603                         * On the start split phase (stage is even) record the
1604                         * frame number we will need to send the split complete.
1605                         * We only store the lower two bits since the time ahead
1606                         * can only be two frames
1607                         */
1608                        if ((transaction->stage & 1) == 0) {
1609                                if (transaction->type == CVMX_USB_TRANSFER_BULK)
1610                                        pipe->split_sc_frame =
1611                                                (usb->frame_number + 1) & 0x7f;
1612                                else
1613                                        pipe->split_sc_frame =
1614                                                (usb->frame_number + 2) & 0x7f;
1615                        } else {
1616                                pipe->split_sc_frame = -1;
1617                        }
1618
1619                        usbc_hcsplt.s.spltena = 1;
1620                        usbc_hcsplt.s.hubaddr = pipe->hub_device_addr;
1621                        usbc_hcsplt.s.prtaddr = pipe->hub_port;
1622                        usbc_hcsplt.s.compsplt = (transaction->stage ==
1623                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE);
1624
1625                        /*
1626                         * SPLIT transactions can only ever transmit one data
1627                         * packet so limit the transfer size to the max packet
1628                         * size
1629                         */
1630                        if (bytes_to_transfer > pipe->max_packet)
1631                                bytes_to_transfer = pipe->max_packet;
1632
1633                        /*
1634                         * ISOCHRONOUS OUT splits are unique in that they limit
1635                         * data transfers to 188 byte chunks representing the
1636                         * begin/middle/end of the data or all
1637                         */
1638                        if (!usbc_hcsplt.s.compsplt &&
1639                            (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT) &&
1640                            (pipe->transfer_type ==
1641                             CVMX_USB_TRANSFER_ISOCHRONOUS)) {
1642                                /*
1643                                 * Clear the split complete frame number as
1644                                 * there isn't going to be a split complete
1645                                 */
1646                                pipe->split_sc_frame = -1;
1647                                /*
1648                                 * See if we've started this transfer and sent
1649                                 * data
1650                                 */
1651                                if (transaction->actual_bytes == 0) {
1652                                        /*
1653                                         * Nothing sent yet, this is either a
1654                                         * begin or the entire payload
1655                                         */
1656                                        if (bytes_to_transfer <= 188)
1657                                                /* Entire payload in one go */
1658                                                usbc_hcsplt.s.xactpos = 3;
1659                                        else
1660                                                /* First part of payload */
1661                                                usbc_hcsplt.s.xactpos = 2;
1662                                } else {
1663                                        /*
1664                                         * Continuing the previous data, we must
1665                                         * either be in the middle or at the end
1666                                         */
1667                                        if (bytes_to_transfer <= 188)
1668                                                /* End of payload */
1669                                                usbc_hcsplt.s.xactpos = 1;
1670                                        else
1671                                                /* Middle of payload */
1672                                                usbc_hcsplt.s.xactpos = 0;
1673                                }
1674                                /*
1675                                 * Again, the transfer size is limited to 188
1676                                 * bytes
1677                                 */
1678                                if (bytes_to_transfer > 188)
1679                                        bytes_to_transfer = 188;
1680                        }
1681                }
1682
1683                /*
1684                 * Make sure the transfer never exceeds the byte limit of the
1685                 * hardware. Further bytes will be sent as continued
1686                 * transactions
1687                 */
1688                if (bytes_to_transfer > MAX_TRANSFER_BYTES) {
1689                        /*
1690                         * Round MAX_TRANSFER_BYTES to a multiple of out packet
1691                         * size
1692                         */
1693                        bytes_to_transfer = MAX_TRANSFER_BYTES /
1694                                pipe->max_packet;
1695                        bytes_to_transfer *= pipe->max_packet;
1696                }
1697
1698                /*
1699                 * Calculate the number of packets to transfer. If the length is
1700                 * zero we still need to transfer one packet
1701                 */
1702                packets_to_transfer =
1703                        DIV_ROUND_UP(bytes_to_transfer, pipe->max_packet);
1704                if (packets_to_transfer == 0) {
1705                        packets_to_transfer = 1;
1706                } else if ((packets_to_transfer > 1) &&
1707                           (usb->init_flags &
1708                            CVMX_USB_INITIALIZE_FLAGS_NO_DMA)) {
1709                        /*
1710                         * Limit to one packet when not using DMA. Channels must
1711                         * be restarted between every packet for IN
1712                         * transactions, so there is no reason to do multiple
1713                         * packets in a row
1714                         */
1715                        packets_to_transfer = 1;
1716                        bytes_to_transfer = packets_to_transfer *
1717                                pipe->max_packet;
1718                } else if (packets_to_transfer > MAX_TRANSFER_PACKETS) {
1719                        /*
1720                         * Limit the number of packet and data transferred to
1721                         * what the hardware can handle
1722                         */
1723                        packets_to_transfer = MAX_TRANSFER_PACKETS;
1724                        bytes_to_transfer = packets_to_transfer *
1725                                pipe->max_packet;
1726                }
1727
1728                usbc_hctsiz.s.xfersize = bytes_to_transfer;
1729                usbc_hctsiz.s.pktcnt = packets_to_transfer;
1730
1731                /* Update the DATA0/DATA1 toggle */
1732                usbc_hctsiz.s.pid = cvmx_usb_get_data_pid(pipe);
1733                /*
1734                 * High speed pipes may need a hardware ping before they start
1735                 */
1736                if (pipe->flags & CVMX_USB_PIPE_FLAGS_NEED_PING)
1737                        usbc_hctsiz.s.dopng = 1;
1738
1739                cvmx_usb_write_csr32(usb,
1740                                     CVMX_USBCX_HCSPLTX(channel, usb->index),
1741                                     usbc_hcsplt.u32);
1742                cvmx_usb_write_csr32(usb,
1743                                     CVMX_USBCX_HCTSIZX(channel, usb->index),
1744                                     usbc_hctsiz.u32);
1745        }
1746
1747        /* Setup the Host Channel Characteristics Register */
1748        {
1749                union cvmx_usbcx_hccharx usbc_hcchar = {.u32 = 0};
1750
1751                /*
1752                 * Set the startframe odd/even properly. This is only used for
1753                 * periodic
1754                 */
1755                usbc_hcchar.s.oddfrm = usb->frame_number & 1;
1756
1757                /*
1758                 * Set the number of back to back packets allowed by this
1759                 * endpoint. Split transactions interpret "ec" as the number of
1760                 * immediate retries of failure. These retries happen too
1761                 * quickly, so we disable these entirely for splits
1762                 */
1763                if (cvmx_usb_pipe_needs_split(usb, pipe))
1764                        usbc_hcchar.s.ec = 1;
1765                else if (pipe->multi_count < 1)
1766                        usbc_hcchar.s.ec = 1;
1767                else if (pipe->multi_count > 3)
1768                        usbc_hcchar.s.ec = 3;
1769                else
1770                        usbc_hcchar.s.ec = pipe->multi_count;
1771
1772                /* Set the rest of the endpoint specific settings */
1773                usbc_hcchar.s.devaddr = pipe->device_addr;
1774                usbc_hcchar.s.eptype = transaction->type;
1775                usbc_hcchar.s.lspddev =
1776                        (pipe->device_speed == CVMX_USB_SPEED_LOW);
1777                usbc_hcchar.s.epdir = pipe->transfer_dir;
1778                usbc_hcchar.s.epnum = pipe->endpoint_num;
1779                usbc_hcchar.s.mps = pipe->max_packet;
1780                cvmx_usb_write_csr32(usb,
1781                                     CVMX_USBCX_HCCHARX(channel, usb->index),
1782                                     usbc_hcchar.u32);
1783        }
1784
1785        /* Do transaction type specific fixups as needed */
1786        switch (transaction->type) {
1787        case CVMX_USB_TRANSFER_CONTROL:
1788                cvmx_usb_start_channel_control(usb, channel, pipe);
1789                break;
1790        case CVMX_USB_TRANSFER_BULK:
1791        case CVMX_USB_TRANSFER_INTERRUPT:
1792                break;
1793        case CVMX_USB_TRANSFER_ISOCHRONOUS:
1794                if (!cvmx_usb_pipe_needs_split(usb, pipe)) {
1795                        /*
1796                         * ISO transactions require different PIDs depending on
1797                         * direction and how many packets are needed
1798                         */
1799                        if (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT) {
1800                                if (pipe->multi_count < 2) /* Need DATA0 */
1801                                        USB_SET_FIELD32(
1802                                                CVMX_USBCX_HCTSIZX(channel,
1803                                                                   usb->index),
1804                                                cvmx_usbcx_hctsizx, pid, 0);
1805                                else /* Need MDATA */
1806                                        USB_SET_FIELD32(
1807                                                CVMX_USBCX_HCTSIZX(channel,
1808                                                                   usb->index),
1809                                                cvmx_usbcx_hctsizx, pid, 3);
1810                        }
1811                }
1812                break;
1813        }
1814        {
1815                union cvmx_usbcx_hctsizx usbc_hctsiz = { .u32 =
1816                        cvmx_usb_read_csr32(usb,
1817                                            CVMX_USBCX_HCTSIZX(channel,
1818                                                               usb->index))
1819                };
1820                transaction->xfersize = usbc_hctsiz.s.xfersize;
1821                transaction->pktcnt = usbc_hctsiz.s.pktcnt;
1822        }
1823        /* Remember when we start a split transaction */
1824        if (cvmx_usb_pipe_needs_split(usb, pipe))
1825                usb->active_split = transaction;
1826        USB_SET_FIELD32(CVMX_USBCX_HCCHARX(channel, usb->index),
1827                        cvmx_usbcx_hccharx, chena, 1);
1828        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)
1829                cvmx_usb_fill_tx_fifo(usb, channel);
1830}
1831
1832/**
1833 * Find a pipe that is ready to be scheduled to hardware.
1834 * @usb:         USB device state populated by cvmx_usb_initialize().
1835 * @xfer_type:   Transfer type
1836 *
1837 * Returns: Pipe or NULL if none are ready
1838 */
1839static struct cvmx_usb_pipe *cvmx_usb_find_ready_pipe(
1840                struct octeon_hcd *usb,
1841                enum cvmx_usb_transfer xfer_type)
1842{
1843        struct list_head *list = usb->active_pipes + xfer_type;
1844        u64 current_frame = usb->frame_number;
1845        struct cvmx_usb_pipe *pipe;
1846
1847        list_for_each_entry(pipe, list, node) {
1848                struct cvmx_usb_transaction *t =
1849                        list_first_entry(&pipe->transactions, typeof(*t),
1850                                         node);
1851                if (!(pipe->flags & CVMX_USB_PIPE_FLAGS_SCHEDULED) && t &&
1852                    (pipe->next_tx_frame <= current_frame) &&
1853                    ((pipe->split_sc_frame == -1) ||
1854                     ((((int)current_frame - pipe->split_sc_frame) & 0x7f) <
1855                      0x40)) &&
1856                    (!usb->active_split || (usb->active_split == t))) {
1857                        prefetch(t);
1858                        return pipe;
1859                }
1860        }
1861        return NULL;
1862}
1863
1864static struct cvmx_usb_pipe *cvmx_usb_next_pipe(struct octeon_hcd *usb,
1865                                                int is_sof)
1866{
1867        struct cvmx_usb_pipe *pipe;
1868
1869        /* Find a pipe needing service. */
1870        if (is_sof) {
1871                /*
1872                 * Only process periodic pipes on SOF interrupts. This way we
1873                 * are sure that the periodic data is sent in the beginning of
1874                 * the frame.
1875                 */
1876                pipe = cvmx_usb_find_ready_pipe(usb,
1877                                                CVMX_USB_TRANSFER_ISOCHRONOUS);
1878                if (pipe)
1879                        return pipe;
1880                pipe = cvmx_usb_find_ready_pipe(usb,
1881                                                CVMX_USB_TRANSFER_INTERRUPT);
1882                if (pipe)
1883                        return pipe;
1884        }
1885        pipe = cvmx_usb_find_ready_pipe(usb, CVMX_USB_TRANSFER_CONTROL);
1886        if (pipe)
1887                return pipe;
1888        return cvmx_usb_find_ready_pipe(usb, CVMX_USB_TRANSFER_BULK);
1889}
1890
1891/**
1892 * Called whenever a pipe might need to be scheduled to the
1893 * hardware.
1894 *
1895 * @usb:         USB device state populated by cvmx_usb_initialize().
1896 * @is_sof:      True if this schedule was called on a SOF interrupt.
1897 */
1898static void cvmx_usb_schedule(struct octeon_hcd *usb, int is_sof)
1899{
1900        int channel;
1901        struct cvmx_usb_pipe *pipe;
1902        int need_sof;
1903        enum cvmx_usb_transfer ttype;
1904
1905        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA) {
1906                /*
1907                 * Without DMA we need to be careful to not schedule something
1908                 * at the end of a frame and cause an overrun.
1909                 */
1910                union cvmx_usbcx_hfnum hfnum = {
1911                        .u32 = cvmx_usb_read_csr32(usb,
1912                                                CVMX_USBCX_HFNUM(usb->index))
1913                };
1914
1915                union cvmx_usbcx_hfir hfir = {
1916                        .u32 = cvmx_usb_read_csr32(usb,
1917                                                CVMX_USBCX_HFIR(usb->index))
1918                };
1919
1920                if (hfnum.s.frrem < hfir.s.frint / 4)
1921                        goto done;
1922        }
1923
1924        while (usb->idle_hardware_channels) {
1925                /* Find an idle channel */
1926                channel = __fls(usb->idle_hardware_channels);
1927                if (unlikely(channel > 7))
1928                        break;
1929
1930                pipe = cvmx_usb_next_pipe(usb, is_sof);
1931                if (!pipe)
1932                        break;
1933
1934                cvmx_usb_start_channel(usb, channel, pipe);
1935        }
1936
1937done:
1938        /*
1939         * Only enable SOF interrupts when we have transactions pending in the
1940         * future that might need to be scheduled
1941         */
1942        need_sof = 0;
1943        for (ttype = CVMX_USB_TRANSFER_CONTROL;
1944             ttype <= CVMX_USB_TRANSFER_INTERRUPT; ttype++) {
1945                list_for_each_entry(pipe, &usb->active_pipes[ttype], node) {
1946                        if (pipe->next_tx_frame > usb->frame_number) {
1947                                need_sof = 1;
1948                                break;
1949                        }
1950                }
1951        }
1952        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
1953                        cvmx_usbcx_gintmsk, sofmsk, need_sof);
1954}
1955
1956static void octeon_usb_urb_complete_callback(struct octeon_hcd *usb,
1957                                             enum cvmx_usb_status status,
1958                                             struct cvmx_usb_pipe *pipe,
1959                                             struct cvmx_usb_transaction
1960                                                *transaction,
1961                                             int bytes_transferred,
1962                                             struct urb *urb)
1963{
1964        struct usb_hcd *hcd = octeon_to_hcd(usb);
1965        struct device *dev = hcd->self.controller;
1966
1967        if (likely(status == CVMX_USB_STATUS_OK))
1968                urb->actual_length = bytes_transferred;
1969        else
1970                urb->actual_length = 0;
1971
1972        urb->hcpriv = NULL;
1973
1974        /* For Isochronous transactions we need to update the URB packet status
1975         * list from data in our private copy
1976         */
1977        if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1978                int i;
1979                /*
1980                 * The pointer to the private list is stored in the setup_packet
1981                 * field.
1982                 */
1983                struct cvmx_usb_iso_packet *iso_packet =
1984                        (struct cvmx_usb_iso_packet *)urb->setup_packet;
1985                /* Recalculate the transfer size by adding up each packet */
1986                urb->actual_length = 0;
1987                for (i = 0; i < urb->number_of_packets; i++) {
1988                        if (iso_packet[i].status == CVMX_USB_STATUS_OK) {
1989                                urb->iso_frame_desc[i].status = 0;
1990                                urb->iso_frame_desc[i].actual_length =
1991                                        iso_packet[i].length;
1992                                urb->actual_length +=
1993                                        urb->iso_frame_desc[i].actual_length;
1994                        } else {
1995                                dev_dbg(dev, "ISOCHRONOUS packet=%d of %d status=%d pipe=%p transaction=%p size=%d\n",
1996                                        i, urb->number_of_packets,
1997                                        iso_packet[i].status, pipe,
1998                                        transaction, iso_packet[i].length);
1999                                urb->iso_frame_desc[i].status = -EREMOTEIO;
2000                        }
2001                }
2002                /* Free the private list now that we don't need it anymore */
2003                kfree(iso_packet);
2004                urb->setup_packet = NULL;
2005        }
2006
2007        switch (status) {
2008        case CVMX_USB_STATUS_OK:
2009                urb->status = 0;
2010                break;
2011        case CVMX_USB_STATUS_CANCEL:
2012                if (urb->status == 0)
2013                        urb->status = -ENOENT;
2014                break;
2015        case CVMX_USB_STATUS_STALL:
2016                dev_dbg(dev, "status=stall pipe=%p transaction=%p size=%d\n",
2017                        pipe, transaction, bytes_transferred);
2018                urb->status = -EPIPE;
2019                break;
2020        case CVMX_USB_STATUS_BABBLEERR:
2021                dev_dbg(dev, "status=babble pipe=%p transaction=%p size=%d\n",
2022                        pipe, transaction, bytes_transferred);
2023                urb->status = -EPIPE;
2024                break;
2025        case CVMX_USB_STATUS_SHORT:
2026                dev_dbg(dev, "status=short pipe=%p transaction=%p size=%d\n",
2027                        pipe, transaction, bytes_transferred);
2028                urb->status = -EREMOTEIO;
2029                break;
2030        case CVMX_USB_STATUS_ERROR:
2031        case CVMX_USB_STATUS_XACTERR:
2032        case CVMX_USB_STATUS_DATATGLERR:
2033        case CVMX_USB_STATUS_FRAMEERR:
2034                dev_dbg(dev, "status=%d pipe=%p transaction=%p size=%d\n",
2035                        status, pipe, transaction, bytes_transferred);
2036                urb->status = -EPROTO;
2037                break;
2038        }
2039        usb_hcd_unlink_urb_from_ep(octeon_to_hcd(usb), urb);
2040        spin_unlock(&usb->lock);
2041        usb_hcd_giveback_urb(octeon_to_hcd(usb), urb, urb->status);
2042        spin_lock(&usb->lock);
2043}
2044
2045/**
2046 * Signal the completion of a transaction and free it. The
2047 * transaction will be removed from the pipe transaction list.
2048 *
2049 * @usb:         USB device state populated by cvmx_usb_initialize().
2050 * @pipe:        Pipe the transaction is on
2051 * @transaction:
2052 *               Transaction that completed
2053 * @complete_code:
2054 *               Completion code
2055 */
2056static void cvmx_usb_complete(struct octeon_hcd *usb,
2057                              struct cvmx_usb_pipe *pipe,
2058                              struct cvmx_usb_transaction *transaction,
2059                              enum cvmx_usb_status complete_code)
2060{
2061        /* If this was a split then clear our split in progress marker */
2062        if (usb->active_split == transaction)
2063                usb->active_split = NULL;
2064
2065        /*
2066         * Isochronous transactions need extra processing as they might not be
2067         * done after a single data transfer
2068         */
2069        if (unlikely(transaction->type == CVMX_USB_TRANSFER_ISOCHRONOUS)) {
2070                /* Update the number of bytes transferred in this ISO packet */
2071                transaction->iso_packets[0].length = transaction->actual_bytes;
2072                transaction->iso_packets[0].status = complete_code;
2073
2074                /*
2075                 * If there are more ISOs pending and we succeeded, schedule the
2076                 * next one
2077                 */
2078                if ((transaction->iso_number_packets > 1) &&
2079                    (complete_code == CVMX_USB_STATUS_OK)) {
2080                        /* No bytes transferred for this packet as of yet */
2081                        transaction->actual_bytes = 0;
2082                        /* One less ISO waiting to transfer */
2083                        transaction->iso_number_packets--;
2084                        /* Increment to the next location in our packet array */
2085                        transaction->iso_packets++;
2086                        transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2087                        return;
2088                }
2089        }
2090
2091        /* Remove the transaction from the pipe list */
2092        list_del(&transaction->node);
2093        if (list_empty(&pipe->transactions))
2094                list_move_tail(&pipe->node, &usb->idle_pipes);
2095        octeon_usb_urb_complete_callback(usb, complete_code, pipe,
2096                                         transaction,
2097                                         transaction->actual_bytes,
2098                                         transaction->urb);
2099        kfree(transaction);
2100}
2101
2102/**
2103 * Submit a usb transaction to a pipe. Called for all types
2104 * of transactions.
2105 *
2106 * @usb:
2107 * @pipe:           Which pipe to submit to.
2108 * @type:           Transaction type
2109 * @buffer:         User buffer for the transaction
2110 * @buffer_length:
2111 *                  User buffer's length in bytes
2112 * @control_header:
2113 *                  For control transactions, the 8 byte standard header
2114 * @iso_start_frame:
2115 *                  For ISO transactions, the start frame
2116 * @iso_number_packets:
2117 *                  For ISO, the number of packet in the transaction.
2118 * @iso_packets:
2119 *                  A description of each ISO packet
2120 * @urb:            URB for the callback
2121 *
2122 * Returns: Transaction or NULL on failure.
2123 */
2124static struct cvmx_usb_transaction *cvmx_usb_submit_transaction(
2125                                struct octeon_hcd *usb,
2126                                struct cvmx_usb_pipe *pipe,
2127                                enum cvmx_usb_transfer type,
2128                                u64 buffer,
2129                                int buffer_length,
2130                                u64 control_header,
2131                                int iso_start_frame,
2132                                int iso_number_packets,
2133                                struct cvmx_usb_iso_packet *iso_packets,
2134                                struct urb *urb)
2135{
2136        struct cvmx_usb_transaction *transaction;
2137
2138        if (unlikely(pipe->transfer_type != type))
2139                return NULL;
2140
2141        transaction = kzalloc(sizeof(*transaction), GFP_ATOMIC);
2142        if (unlikely(!transaction))
2143                return NULL;
2144
2145        transaction->type = type;
2146        transaction->buffer = buffer;
2147        transaction->buffer_length = buffer_length;
2148        transaction->control_header = control_header;
2149        /* FIXME: This is not used, implement it. */
2150        transaction->iso_start_frame = iso_start_frame;
2151        transaction->iso_number_packets = iso_number_packets;
2152        transaction->iso_packets = iso_packets;
2153        transaction->urb = urb;
2154        if (transaction->type == CVMX_USB_TRANSFER_CONTROL)
2155                transaction->stage = CVMX_USB_STAGE_SETUP;
2156        else
2157                transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2158
2159        if (!list_empty(&pipe->transactions)) {
2160                list_add_tail(&transaction->node, &pipe->transactions);
2161        } else {
2162                list_add_tail(&transaction->node, &pipe->transactions);
2163                list_move_tail(&pipe->node,
2164                               &usb->active_pipes[pipe->transfer_type]);
2165
2166                /*
2167                 * We may need to schedule the pipe if this was the head of the
2168                 * pipe.
2169                 */
2170                cvmx_usb_schedule(usb, 0);
2171        }
2172
2173        return transaction;
2174}
2175
2176/**
2177 * Call to submit a USB Bulk transfer to a pipe.
2178 *
2179 * @usb:            USB device state populated by cvmx_usb_initialize().
2180 * @pipe:           Handle to the pipe for the transfer.
2181 * @urb:            URB.
2182 *
2183 * Returns: A submitted transaction or NULL on failure.
2184 */
2185static struct cvmx_usb_transaction *cvmx_usb_submit_bulk(
2186                                                struct octeon_hcd *usb,
2187                                                struct cvmx_usb_pipe *pipe,
2188                                                struct urb *urb)
2189{
2190        return cvmx_usb_submit_transaction(usb, pipe, CVMX_USB_TRANSFER_BULK,
2191                                           urb->transfer_dma,
2192                                           urb->transfer_buffer_length,
2193                                           0, /* control_header */
2194                                           0, /* iso_start_frame */
2195                                           0, /* iso_number_packets */
2196                                           NULL, /* iso_packets */
2197                                           urb);
2198}
2199
2200/**
2201 * Call to submit a USB Interrupt transfer to a pipe.
2202 *
2203 * @usb:            USB device state populated by cvmx_usb_initialize().
2204 * @pipe:           Handle to the pipe for the transfer.
2205 * @urb:            URB returned when the callback is called.
2206 *
2207 * Returns: A submitted transaction or NULL on failure.
2208 */
2209static struct cvmx_usb_transaction *cvmx_usb_submit_interrupt(
2210                                                struct octeon_hcd *usb,
2211                                                struct cvmx_usb_pipe *pipe,
2212                                                struct urb *urb)
2213{
2214        return cvmx_usb_submit_transaction(usb, pipe,
2215                                           CVMX_USB_TRANSFER_INTERRUPT,
2216                                           urb->transfer_dma,
2217                                           urb->transfer_buffer_length,
2218                                           0, /* control_header */
2219                                           0, /* iso_start_frame */
2220                                           0, /* iso_number_packets */
2221                                           NULL, /* iso_packets */
2222                                           urb);
2223}
2224
2225/**
2226 * Call to submit a USB Control transfer to a pipe.
2227 *
2228 * @usb:            USB device state populated by cvmx_usb_initialize().
2229 * @pipe:           Handle to the pipe for the transfer.
2230 * @urb:            URB.
2231 *
2232 * Returns: A submitted transaction or NULL on failure.
2233 */
2234static struct cvmx_usb_transaction *cvmx_usb_submit_control(
2235                                                struct octeon_hcd *usb,
2236                                                struct cvmx_usb_pipe *pipe,
2237                                                struct urb *urb)
2238{
2239        int buffer_length = urb->transfer_buffer_length;
2240        u64 control_header = urb->setup_dma;
2241        struct usb_ctrlrequest *header = cvmx_phys_to_ptr(control_header);
2242
2243        if ((header->bRequestType & USB_DIR_IN) == 0)
2244                buffer_length = le16_to_cpu(header->wLength);
2245
2246        return cvmx_usb_submit_transaction(usb, pipe,
2247                                           CVMX_USB_TRANSFER_CONTROL,
2248                                           urb->transfer_dma, buffer_length,
2249                                           control_header,
2250                                           0, /* iso_start_frame */
2251                                           0, /* iso_number_packets */
2252                                           NULL, /* iso_packets */
2253                                           urb);
2254}
2255
2256/**
2257 * Call to submit a USB Isochronous transfer to a pipe.
2258 *
2259 * @usb:            USB device state populated by cvmx_usb_initialize().
2260 * @pipe:           Handle to the pipe for the transfer.
2261 * @urb:            URB returned when the callback is called.
2262 *
2263 * Returns: A submitted transaction or NULL on failure.
2264 */
2265static struct cvmx_usb_transaction *cvmx_usb_submit_isochronous(
2266                                                struct octeon_hcd *usb,
2267                                                struct cvmx_usb_pipe *pipe,
2268                                                struct urb *urb)
2269{
2270        struct cvmx_usb_iso_packet *packets;
2271
2272        packets = (struct cvmx_usb_iso_packet *)urb->setup_packet;
2273        return cvmx_usb_submit_transaction(usb, pipe,
2274                                           CVMX_USB_TRANSFER_ISOCHRONOUS,
2275                                           urb->transfer_dma,
2276                                           urb->transfer_buffer_length,
2277                                           0, /* control_header */
2278                                           urb->start_frame,
2279                                           urb->number_of_packets,
2280                                           packets, urb);
2281}
2282
2283/**
2284 * Cancel one outstanding request in a pipe. Canceling a request
2285 * can fail if the transaction has already completed before cancel
2286 * is called. Even after a successful cancel call, it may take
2287 * a frame or two for the cvmx_usb_poll() function to call the
2288 * associated callback.
2289 *
2290 * @usb:         USB device state populated by cvmx_usb_initialize().
2291 * @pipe:        Pipe to cancel requests in.
2292 * @transaction: Transaction to cancel, returned by the submit function.
2293 *
2294 * Returns: 0 or a negative error code.
2295 */
2296static int cvmx_usb_cancel(struct octeon_hcd *usb,
2297                           struct cvmx_usb_pipe *pipe,
2298                           struct cvmx_usb_transaction *transaction)
2299{
2300        /*
2301         * If the transaction is the HEAD of the queue and scheduled. We need to
2302         * treat it special
2303         */
2304        if (list_first_entry(&pipe->transactions, typeof(*transaction), node) ==
2305            transaction && (pipe->flags & CVMX_USB_PIPE_FLAGS_SCHEDULED)) {
2306                union cvmx_usbcx_hccharx usbc_hcchar;
2307
2308                usb->pipe_for_channel[pipe->channel] = NULL;
2309                pipe->flags &= ~CVMX_USB_PIPE_FLAGS_SCHEDULED;
2310
2311                CVMX_SYNCW;
2312
2313                usbc_hcchar.u32 = cvmx_usb_read_csr32(usb,
2314                                CVMX_USBCX_HCCHARX(pipe->channel, usb->index));
2315                /*
2316                 * If the channel isn't enabled then the transaction already
2317                 * completed.
2318                 */
2319                if (usbc_hcchar.s.chena) {
2320                        usbc_hcchar.s.chdis = 1;
2321                        cvmx_usb_write_csr32(usb,
2322                                             CVMX_USBCX_HCCHARX(pipe->channel,
2323                                                                usb->index),
2324                                             usbc_hcchar.u32);
2325                }
2326        }
2327        cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_CANCEL);
2328        return 0;
2329}
2330
2331/**
2332 * Cancel all outstanding requests in a pipe. Logically all this
2333 * does is call cvmx_usb_cancel() in a loop.
2334 *
2335 * @usb:         USB device state populated by cvmx_usb_initialize().
2336 * @pipe:        Pipe to cancel requests in.
2337 *
2338 * Returns: 0 or a negative error code.
2339 */
2340static int cvmx_usb_cancel_all(struct octeon_hcd *usb,
2341                               struct cvmx_usb_pipe *pipe)
2342{
2343        struct cvmx_usb_transaction *transaction, *next;
2344
2345        /* Simply loop through and attempt to cancel each transaction */
2346        list_for_each_entry_safe(transaction, next, &pipe->transactions, node) {
2347                int result = cvmx_usb_cancel(usb, pipe, transaction);
2348
2349                if (unlikely(result != 0))
2350                        return result;
2351        }
2352        return 0;
2353}
2354
2355/**
2356 * Close a pipe created with cvmx_usb_open_pipe().
2357 *
2358 * @usb:         USB device state populated by cvmx_usb_initialize().
2359 * @pipe:        Pipe to close.
2360 *
2361 * Returns: 0 or a negative error code. EBUSY is returned if the pipe has
2362 *          outstanding transfers.
2363 */
2364static int cvmx_usb_close_pipe(struct octeon_hcd *usb,
2365                               struct cvmx_usb_pipe *pipe)
2366{
2367        /* Fail if the pipe has pending transactions */
2368        if (!list_empty(&pipe->transactions))
2369                return -EBUSY;
2370
2371        list_del(&pipe->node);
2372        kfree(pipe);
2373
2374        return 0;
2375}
2376
2377/**
2378 * Get the current USB protocol level frame number. The frame
2379 * number is always in the range of 0-0x7ff.
2380 *
2381 * @usb: USB device state populated by cvmx_usb_initialize().
2382 *
2383 * Returns: USB frame number
2384 */
2385static int cvmx_usb_get_frame_number(struct octeon_hcd *usb)
2386{
2387        union cvmx_usbcx_hfnum usbc_hfnum;
2388
2389        usbc_hfnum.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HFNUM(usb->index));
2390
2391        return usbc_hfnum.s.frnum;
2392}
2393
2394static void cvmx_usb_transfer_control(struct octeon_hcd *usb,
2395                                      struct cvmx_usb_pipe *pipe,
2396                                      struct cvmx_usb_transaction *transaction,
2397                                      union cvmx_usbcx_hccharx usbc_hcchar,
2398                                      int buffer_space_left,
2399                                      int bytes_in_last_packet)
2400{
2401        switch (transaction->stage) {
2402        case CVMX_USB_STAGE_NON_CONTROL:
2403        case CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE:
2404                /* This should be impossible */
2405                cvmx_usb_complete(usb, pipe, transaction,
2406                                  CVMX_USB_STATUS_ERROR);
2407                break;
2408        case CVMX_USB_STAGE_SETUP:
2409                pipe->pid_toggle = 1;
2410                if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2411                        transaction->stage =
2412                                CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE;
2413                } else {
2414                        struct usb_ctrlrequest *header =
2415                                cvmx_phys_to_ptr(transaction->control_header);
2416                        if (header->wLength)
2417                                transaction->stage = CVMX_USB_STAGE_DATA;
2418                        else
2419                                transaction->stage = CVMX_USB_STAGE_STATUS;
2420                }
2421                break;
2422        case CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE:
2423                {
2424                        struct usb_ctrlrequest *header =
2425                                cvmx_phys_to_ptr(transaction->control_header);
2426                        if (header->wLength)
2427                                transaction->stage = CVMX_USB_STAGE_DATA;
2428                        else
2429                                transaction->stage = CVMX_USB_STAGE_STATUS;
2430                }
2431                break;
2432        case CVMX_USB_STAGE_DATA:
2433                if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2434                        transaction->stage = CVMX_USB_STAGE_DATA_SPLIT_COMPLETE;
2435                        /*
2436                         * For setup OUT data that are splits,
2437                         * the hardware doesn't appear to count
2438                         * transferred data. Here we manually
2439                         * update the data transferred
2440                         */
2441                        if (!usbc_hcchar.s.epdir) {
2442                                if (buffer_space_left < pipe->max_packet)
2443                                        transaction->actual_bytes +=
2444                                                buffer_space_left;
2445                                else
2446                                        transaction->actual_bytes +=
2447                                                pipe->max_packet;
2448                        }
2449                } else if ((buffer_space_left == 0) ||
2450                           (bytes_in_last_packet < pipe->max_packet)) {
2451                        pipe->pid_toggle = 1;
2452                        transaction->stage = CVMX_USB_STAGE_STATUS;
2453                }
2454                break;
2455        case CVMX_USB_STAGE_DATA_SPLIT_COMPLETE:
2456                if ((buffer_space_left == 0) ||
2457                    (bytes_in_last_packet < pipe->max_packet)) {
2458                        pipe->pid_toggle = 1;
2459                        transaction->stage = CVMX_USB_STAGE_STATUS;
2460                } else {
2461                        transaction->stage = CVMX_USB_STAGE_DATA;
2462                }
2463                break;
2464        case CVMX_USB_STAGE_STATUS:
2465                if (cvmx_usb_pipe_needs_split(usb, pipe))
2466                        transaction->stage =
2467                                CVMX_USB_STAGE_STATUS_SPLIT_COMPLETE;
2468                else
2469                        cvmx_usb_complete(usb, pipe, transaction,
2470                                          CVMX_USB_STATUS_OK);
2471                break;
2472        case CVMX_USB_STAGE_STATUS_SPLIT_COMPLETE:
2473                cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK);
2474                break;
2475        }
2476}
2477
2478static void cvmx_usb_transfer_bulk(struct octeon_hcd *usb,
2479                                   struct cvmx_usb_pipe *pipe,
2480                                   struct cvmx_usb_transaction *transaction,
2481                                   union cvmx_usbcx_hcintx usbc_hcint,
2482                                   int buffer_space_left,
2483                                   int bytes_in_last_packet)
2484{
2485        /*
2486         * The only time a bulk transfer isn't complete when it finishes with
2487         * an ACK is during a split transaction. For splits we need to continue
2488         * the transfer if more data is needed.
2489         */
2490        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2491                if (transaction->stage == CVMX_USB_STAGE_NON_CONTROL)
2492                        transaction->stage =
2493                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE;
2494                else if (buffer_space_left &&
2495                         (bytes_in_last_packet == pipe->max_packet))
2496                        transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2497                else
2498                        cvmx_usb_complete(usb, pipe, transaction,
2499                                          CVMX_USB_STATUS_OK);
2500        } else {
2501                if ((pipe->device_speed == CVMX_USB_SPEED_HIGH) &&
2502                    (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT) &&
2503                    (usbc_hcint.s.nak))
2504                        pipe->flags |= CVMX_USB_PIPE_FLAGS_NEED_PING;
2505                if (!buffer_space_left ||
2506                    (bytes_in_last_packet < pipe->max_packet))
2507                        cvmx_usb_complete(usb, pipe, transaction,
2508                                          CVMX_USB_STATUS_OK);
2509        }
2510}
2511
2512static void cvmx_usb_transfer_intr(struct octeon_hcd *usb,
2513                                   struct cvmx_usb_pipe *pipe,
2514                                   struct cvmx_usb_transaction *transaction,
2515                                   int buffer_space_left,
2516                                   int bytes_in_last_packet)
2517{
2518        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2519                if (transaction->stage == CVMX_USB_STAGE_NON_CONTROL) {
2520                        transaction->stage =
2521                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE;
2522                } else if (buffer_space_left &&
2523                           (bytes_in_last_packet == pipe->max_packet)) {
2524                        transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2525                } else {
2526                        pipe->next_tx_frame += pipe->interval;
2527                        cvmx_usb_complete(usb, pipe, transaction,
2528                                          CVMX_USB_STATUS_OK);
2529                }
2530        } else if (!buffer_space_left ||
2531                   (bytes_in_last_packet < pipe->max_packet)) {
2532                pipe->next_tx_frame += pipe->interval;
2533                cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK);
2534        }
2535}
2536
2537static void cvmx_usb_transfer_isoc(struct octeon_hcd *usb,
2538                                   struct cvmx_usb_pipe *pipe,
2539                                   struct cvmx_usb_transaction *transaction,
2540                                   int buffer_space_left,
2541                                   int bytes_in_last_packet,
2542                                   int bytes_this_transfer)
2543{
2544        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2545                /*
2546                 * ISOCHRONOUS OUT splits don't require a complete split stage.
2547                 * Instead they use a sequence of begin OUT splits to transfer
2548                 * the data 188 bytes at a time. Once the transfer is complete,
2549                 * the pipe sleeps until the next schedule interval.
2550                 */
2551                if (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT) {
2552                        /*
2553                         * If no space left or this wasn't a max size packet
2554                         * then this transfer is complete. Otherwise start it
2555                         * again to send the next 188 bytes
2556                         */
2557                        if (!buffer_space_left || (bytes_this_transfer < 188)) {
2558                                pipe->next_tx_frame += pipe->interval;
2559                                cvmx_usb_complete(usb, pipe, transaction,
2560                                                  CVMX_USB_STATUS_OK);
2561                        }
2562                        return;
2563                }
2564                if (transaction->stage ==
2565                    CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE) {
2566                        /*
2567                         * We are in the incoming data phase. Keep getting data
2568                         * until we run out of space or get a small packet
2569                         */
2570                        if ((buffer_space_left == 0) ||
2571                            (bytes_in_last_packet < pipe->max_packet)) {
2572                                pipe->next_tx_frame += pipe->interval;
2573                                cvmx_usb_complete(usb, pipe, transaction,
2574                                                  CVMX_USB_STATUS_OK);
2575                        }
2576                } else {
2577                        transaction->stage =
2578                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE;
2579                }
2580        } else {
2581                pipe->next_tx_frame += pipe->interval;
2582                cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK);
2583        }
2584}
2585
2586/**
2587 * Poll a channel for status
2588 *
2589 * @usb:     USB device
2590 * @channel: Channel to poll
2591 *
2592 * Returns: Zero on success
2593 */
2594static int cvmx_usb_poll_channel(struct octeon_hcd *usb, int channel)
2595{
2596        struct usb_hcd *hcd = octeon_to_hcd(usb);
2597        struct device *dev = hcd->self.controller;
2598        union cvmx_usbcx_hcintx usbc_hcint;
2599        union cvmx_usbcx_hctsizx usbc_hctsiz;
2600        union cvmx_usbcx_hccharx usbc_hcchar;
2601        struct cvmx_usb_pipe *pipe;
2602        struct cvmx_usb_transaction *transaction;
2603        int bytes_this_transfer;
2604        int bytes_in_last_packet;
2605        int packets_processed;
2606        int buffer_space_left;
2607
2608        /* Read the interrupt status bits for the channel */
2609        usbc_hcint.u32 = cvmx_usb_read_csr32(usb,
2610                                CVMX_USBCX_HCINTX(channel, usb->index));
2611
2612        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA) {
2613                usbc_hcchar.u32 = cvmx_usb_read_csr32(usb,
2614                                CVMX_USBCX_HCCHARX(channel, usb->index));
2615
2616                if (usbc_hcchar.s.chena && usbc_hcchar.s.chdis) {
2617                        /*
2618                         * There seems to be a bug in CN31XX which can cause
2619                         * interrupt IN transfers to get stuck until we do a
2620                         * write of HCCHARX without changing things
2621                         */
2622                        cvmx_usb_write_csr32(usb,
2623                                             CVMX_USBCX_HCCHARX(channel,
2624                                                                usb->index),
2625                                             usbc_hcchar.u32);
2626                        return 0;
2627                }
2628
2629                /*
2630                 * In non DMA mode the channels don't halt themselves. We need
2631                 * to manually disable channels that are left running
2632                 */
2633                if (!usbc_hcint.s.chhltd) {
2634                        if (usbc_hcchar.s.chena) {
2635                                union cvmx_usbcx_hcintmskx hcintmsk;
2636                                /* Disable all interrupts except CHHLTD */
2637                                hcintmsk.u32 = 0;
2638                                hcintmsk.s.chhltdmsk = 1;
2639                                cvmx_usb_write_csr32(usb,
2640                                                     CVMX_USBCX_HCINTMSKX(channel, usb->index),
2641                                                     hcintmsk.u32);
2642                                usbc_hcchar.s.chdis = 1;
2643                                cvmx_usb_write_csr32(usb,
2644                                                     CVMX_USBCX_HCCHARX(channel, usb->index),
2645                                                     usbc_hcchar.u32);
2646                                return 0;
2647                        } else if (usbc_hcint.s.xfercompl) {
2648                                /*
2649                                 * Successful IN/OUT with transfer complete.
2650                                 * Channel halt isn't needed.
2651                                 */
2652                        } else {
2653                                dev_err(dev, "USB%d: Channel %d interrupt without halt\n",
2654                                        usb->index, channel);
2655                                return 0;
2656                        }
2657                }
2658        } else {
2659                /*
2660                 * There is are no interrupts that we need to process when the
2661                 * channel is still running
2662                 */
2663                if (!usbc_hcint.s.chhltd)
2664                        return 0;
2665        }
2666
2667        /* Disable the channel interrupts now that it is done */
2668        cvmx_usb_write_csr32(usb, CVMX_USBCX_HCINTMSKX(channel, usb->index), 0);
2669        usb->idle_hardware_channels |= (1 << channel);
2670
2671        /* Make sure this channel is tied to a valid pipe */
2672        pipe = usb->pipe_for_channel[channel];
2673        prefetch(pipe);
2674        if (!pipe)
2675                return 0;
2676        transaction = list_first_entry(&pipe->transactions,
2677                                       typeof(*transaction),
2678                                       node);
2679        prefetch(transaction);
2680
2681        /*
2682         * Disconnect this pipe from the HW channel. Later the schedule
2683         * function will figure out which pipe needs to go
2684         */
2685        usb->pipe_for_channel[channel] = NULL;
2686        pipe->flags &= ~CVMX_USB_PIPE_FLAGS_SCHEDULED;
2687
2688        /*
2689         * Read the channel config info so we can figure out how much data
2690         * transferred
2691         */
2692        usbc_hcchar.u32 = cvmx_usb_read_csr32(usb,
2693                        CVMX_USBCX_HCCHARX(channel, usb->index));
2694        usbc_hctsiz.u32 = cvmx_usb_read_csr32(usb,
2695                        CVMX_USBCX_HCTSIZX(channel, usb->index));
2696
2697        /*
2698         * Calculating the number of bytes successfully transferred is dependent
2699         * on the transfer direction
2700         */
2701        packets_processed = transaction->pktcnt - usbc_hctsiz.s.pktcnt;
2702        if (usbc_hcchar.s.epdir) {
2703                /*
2704                 * IN transactions are easy. For every byte received the
2705                 * hardware decrements xfersize. All we need to do is subtract
2706                 * the current value of xfersize from its starting value and we
2707                 * know how many bytes were written to the buffer
2708                 */
2709                bytes_this_transfer = transaction->xfersize -
2710                        usbc_hctsiz.s.xfersize;
2711        } else {
2712                /*
2713                 * OUT transaction don't decrement xfersize. Instead pktcnt is
2714                 * decremented on every successful packet send. The hardware
2715                 * does this when it receives an ACK, or NYET. If it doesn't
2716                 * receive one of these responses pktcnt doesn't change
2717                 */
2718                bytes_this_transfer = packets_processed * usbc_hcchar.s.mps;
2719                /*
2720                 * The last packet may not be a full transfer if we didn't have
2721                 * enough data
2722                 */
2723                if (bytes_this_transfer > transaction->xfersize)
2724                        bytes_this_transfer = transaction->xfersize;
2725        }
2726        /* Figure out how many bytes were in the last packet of the transfer */
2727        if (packets_processed)
2728                bytes_in_last_packet = bytes_this_transfer -
2729                        (packets_processed - 1) * usbc_hcchar.s.mps;
2730        else
2731                bytes_in_last_packet = bytes_this_transfer;
2732
2733        /*
2734         * As a special case, setup transactions output the setup header, not
2735         * the user's data. For this reason we don't count setup data as bytes
2736         * transferred
2737         */
2738        if ((transaction->stage == CVMX_USB_STAGE_SETUP) ||
2739            (transaction->stage == CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE))
2740                bytes_this_transfer = 0;
2741
2742        /*
2743         * Add the bytes transferred to the running total. It is important that
2744         * bytes_this_transfer doesn't count any data that needs to be
2745         * retransmitted
2746         */
2747        transaction->actual_bytes += bytes_this_transfer;
2748        if (transaction->type == CVMX_USB_TRANSFER_ISOCHRONOUS)
2749                buffer_space_left = transaction->iso_packets[0].length -
2750                        transaction->actual_bytes;
2751        else
2752                buffer_space_left = transaction->buffer_length -
2753                        transaction->actual_bytes;
2754
2755        /*
2756         * We need to remember the PID toggle state for the next transaction.
2757         * The hardware already updated it for the next transaction
2758         */
2759        pipe->pid_toggle = !(usbc_hctsiz.s.pid == 0);
2760
2761        /*
2762         * For high speed bulk out, assume the next transaction will need to do
2763         * a ping before proceeding. If this isn't true the ACK processing below
2764         * will clear this flag
2765         */
2766        if ((pipe->device_speed == CVMX_USB_SPEED_HIGH) &&
2767            (pipe->transfer_type == CVMX_USB_TRANSFER_BULK) &&
2768            (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT))
2769                pipe->flags |= CVMX_USB_PIPE_FLAGS_NEED_PING;
2770
2771        if (WARN_ON_ONCE(bytes_this_transfer < 0)) {
2772                /*
2773                 * In some rare cases the DMA engine seems to get stuck and
2774                 * keeps substracting same byte count over and over again. In
2775                 * such case we just need to fail every transaction.
2776                 */
2777                cvmx_usb_complete(usb, pipe, transaction,
2778                                  CVMX_USB_STATUS_ERROR);
2779                return 0;
2780        }
2781
2782        if (usbc_hcint.s.stall) {
2783                /*
2784                 * STALL as a response means this transaction cannot be
2785                 * completed because the device can't process transactions. Tell
2786                 * the user. Any data that was transferred will be counted on
2787                 * the actual bytes transferred
2788                 */
2789                pipe->pid_toggle = 0;
2790                cvmx_usb_complete(usb, pipe, transaction,
2791                                  CVMX_USB_STATUS_STALL);
2792        } else if (usbc_hcint.s.xacterr) {
2793                /*
2794                 * XactErr as a response means the device signaled
2795                 * something wrong with the transfer. For example, PID
2796                 * toggle errors cause these.
2797                 */
2798                cvmx_usb_complete(usb, pipe, transaction,
2799                                  CVMX_USB_STATUS_XACTERR);
2800        } else if (usbc_hcint.s.bblerr) {
2801                /* Babble Error (BblErr) */
2802                cvmx_usb_complete(usb, pipe, transaction,
2803                                  CVMX_USB_STATUS_BABBLEERR);
2804        } else if (usbc_hcint.s.datatglerr) {
2805                /* Data toggle error */
2806                cvmx_usb_complete(usb, pipe, transaction,
2807                                  CVMX_USB_STATUS_DATATGLERR);
2808        } else if (usbc_hcint.s.nyet) {
2809                /*
2810                 * NYET as a response is only allowed in three cases: as a
2811                 * response to a ping, as a response to a split transaction, and
2812                 * as a response to a bulk out. The ping case is handled by
2813                 * hardware, so we only have splits and bulk out
2814                 */
2815                if (!cvmx_usb_pipe_needs_split(usb, pipe)) {
2816                        transaction->retries = 0;
2817                        /*
2818                         * If there is more data to go then we need to try
2819                         * again. Otherwise this transaction is complete
2820                         */
2821                        if ((buffer_space_left == 0) ||
2822                            (bytes_in_last_packet < pipe->max_packet))
2823                                cvmx_usb_complete(usb, pipe,
2824                                                  transaction,
2825                                                  CVMX_USB_STATUS_OK);
2826                } else {
2827                        /*
2828                         * Split transactions retry the split complete 4 times
2829                         * then rewind to the start split and do the entire
2830                         * transactions again
2831                         */
2832                        transaction->retries++;
2833                        if ((transaction->retries & 0x3) == 0) {
2834                                /*
2835                                 * Rewind to the beginning of the transaction by
2836                                 * anding off the split complete bit
2837                                 */
2838                                transaction->stage &= ~1;
2839                                pipe->split_sc_frame = -1;
2840                        }
2841                }
2842        } else if (usbc_hcint.s.ack) {
2843                transaction->retries = 0;
2844                /*
2845                 * The ACK bit can only be checked after the other error bits.
2846                 * This is because a multi packet transfer may succeed in a
2847                 * number of packets and then get a different response on the
2848                 * last packet. In this case both ACK and the last response bit
2849                 * will be set. If none of the other response bits is set, then
2850                 * the last packet must have been an ACK
2851                 *
2852                 * Since we got an ACK, we know we don't need to do a ping on
2853                 * this pipe
2854                 */
2855                pipe->flags &= ~CVMX_USB_PIPE_FLAGS_NEED_PING;
2856
2857                switch (transaction->type) {
2858                case CVMX_USB_TRANSFER_CONTROL:
2859                        cvmx_usb_transfer_control(usb, pipe, transaction,
2860                                                  usbc_hcchar,
2861                                                  buffer_space_left,
2862                                                  bytes_in_last_packet);
2863                        break;
2864                case CVMX_USB_TRANSFER_BULK:
2865                        cvmx_usb_transfer_bulk(usb, pipe, transaction,
2866                                               usbc_hcint, buffer_space_left,
2867                                               bytes_in_last_packet);
2868                        break;
2869                case CVMX_USB_TRANSFER_INTERRUPT:
2870                        cvmx_usb_transfer_intr(usb, pipe, transaction,
2871                                               buffer_space_left,
2872                                               bytes_in_last_packet);
2873                        break;
2874                case CVMX_USB_TRANSFER_ISOCHRONOUS:
2875                        cvmx_usb_transfer_isoc(usb, pipe, transaction,
2876                                               buffer_space_left,
2877                                               bytes_in_last_packet,
2878                                               bytes_this_transfer);
2879                        break;
2880                }
2881        } else if (usbc_hcint.s.nak) {
2882                /*
2883                 * If this was a split then clear our split in progress marker.
2884                 */
2885                if (usb->active_split == transaction)
2886                        usb->active_split = NULL;
2887                /*
2888                 * NAK as a response means the device couldn't accept the
2889                 * transaction, but it should be retried in the future. Rewind
2890                 * to the beginning of the transaction by anding off the split
2891                 * complete bit. Retry in the next interval
2892                 */
2893                transaction->retries = 0;
2894                transaction->stage &= ~1;
2895                pipe->next_tx_frame += pipe->interval;
2896                if (pipe->next_tx_frame < usb->frame_number)
2897                        pipe->next_tx_frame = usb->frame_number +
2898                                pipe->interval -
2899                                (usb->frame_number - pipe->next_tx_frame) %
2900                                pipe->interval;
2901        } else {
2902                struct cvmx_usb_port_status port;
2903
2904                port = cvmx_usb_get_status(usb);
2905                if (port.port_enabled) {
2906                        /* We'll retry the exact same transaction again */
2907                        transaction->retries++;
2908                } else {
2909                        /*
2910                         * We get channel halted interrupts with no result bits
2911                         * sets when the cable is unplugged
2912                         */
2913                        cvmx_usb_complete(usb, pipe, transaction,
2914                                          CVMX_USB_STATUS_ERROR);
2915                }
2916        }
2917        return 0;
2918}
2919
2920static void octeon_usb_port_callback(struct octeon_hcd *usb)
2921{
2922        spin_unlock(&usb->lock);
2923        usb_hcd_poll_rh_status(octeon_to_hcd(usb));
2924        spin_lock(&usb->lock);
2925}
2926
2927/**
2928 * Poll the USB block for status and call all needed callback
2929 * handlers. This function is meant to be called in the interrupt
2930 * handler for the USB controller. It can also be called
2931 * periodically in a loop for non-interrupt based operation.
2932 *
2933 * @usb: USB device state populated by cvmx_usb_initialize().
2934 *
2935 * Returns: 0 or a negative error code.
2936 */
2937static int cvmx_usb_poll(struct octeon_hcd *usb)
2938{
2939        union cvmx_usbcx_hfnum usbc_hfnum;
2940        union cvmx_usbcx_gintsts usbc_gintsts;
2941
2942        prefetch_range(usb, sizeof(*usb));
2943
2944        /* Update the frame counter */
2945        usbc_hfnum.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HFNUM(usb->index));
2946        if ((usb->frame_number & 0x3fff) > usbc_hfnum.s.frnum)
2947                usb->frame_number += 0x4000;
2948        usb->frame_number &= ~0x3fffull;
2949        usb->frame_number |= usbc_hfnum.s.frnum;
2950
2951        /* Read the pending interrupts */
2952        usbc_gintsts.u32 = cvmx_usb_read_csr32(usb,
2953                                               CVMX_USBCX_GINTSTS(usb->index));
2954
2955        /* Clear the interrupts now that we know about them */
2956        cvmx_usb_write_csr32(usb, CVMX_USBCX_GINTSTS(usb->index),
2957                             usbc_gintsts.u32);
2958
2959        if (usbc_gintsts.s.rxflvl) {
2960                /*
2961                 * RxFIFO Non-Empty (RxFLvl)
2962                 * Indicates that there is at least one packet pending to be
2963                 * read from the RxFIFO.
2964                 *
2965                 * In DMA mode this is handled by hardware
2966                 */
2967                if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)
2968                        cvmx_usb_poll_rx_fifo(usb);
2969        }
2970        if (usbc_gintsts.s.ptxfemp || usbc_gintsts.s.nptxfemp) {
2971                /* Fill the Tx FIFOs when not in DMA mode */
2972                if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)
2973                        cvmx_usb_poll_tx_fifo(usb);
2974        }
2975        if (usbc_gintsts.s.disconnint || usbc_gintsts.s.prtint) {
2976                union cvmx_usbcx_hprt usbc_hprt;
2977                /*
2978                 * Disconnect Detected Interrupt (DisconnInt)
2979                 * Asserted when a device disconnect is detected.
2980                 *
2981                 * Host Port Interrupt (PrtInt)
2982                 * The core sets this bit to indicate a change in port status of
2983                 * one of the O2P USB core ports in Host mode. The application
2984                 * must read the Host Port Control and Status (HPRT) register to
2985                 * determine the exact event that caused this interrupt. The
2986                 * application must clear the appropriate status bit in the Host
2987                 * Port Control and Status register to clear this bit.
2988                 *
2989                 * Call the user's port callback
2990                 */
2991                octeon_usb_port_callback(usb);
2992                /* Clear the port change bits */
2993                usbc_hprt.u32 =
2994                        cvmx_usb_read_csr32(usb, CVMX_USBCX_HPRT(usb->index));
2995                usbc_hprt.s.prtena = 0;
2996                cvmx_usb_write_csr32(usb, CVMX_USBCX_HPRT(usb->index),
2997                                     usbc_hprt.u32);
2998        }
2999        if (usbc_gintsts.s.hchint) {
3000                /*
3001                 * Host Channels Interrupt (HChInt)
3002                 * The core sets this bit to indicate that an interrupt is
3003                 * pending on one of the channels of the core (in Host mode).
3004                 * The application must read the Host All Channels Interrupt
3005                 * (HAINT) register to determine the exact number of the channel
3006                 * on which the interrupt occurred, and then read the
3007                 * corresponding Host Channel-n Interrupt (HCINTn) register to
3008                 * determine the exact cause of the interrupt. The application
3009                 * must clear the appropriate status bit in the HCINTn register
3010                 * to clear this bit.
3011                 */
3012                union cvmx_usbcx_haint usbc_haint;
3013
3014                usbc_haint.u32 = cvmx_usb_read_csr32(usb,
3015                                        CVMX_USBCX_HAINT(usb->index));
3016                while (usbc_haint.u32) {
3017                        int channel;
3018
3019                        channel = __fls(usbc_haint.u32);
3020                        cvmx_usb_poll_channel(usb, channel);
3021                        usbc_haint.u32 ^= 1 << channel;
3022                }
3023        }
3024
3025        cvmx_usb_schedule(usb, usbc_gintsts.s.sof);
3026
3027        return 0;
3028}
3029
3030/* convert between an HCD pointer and the corresponding struct octeon_hcd */
3031static inline struct octeon_hcd *hcd_to_octeon(struct usb_hcd *hcd)
3032{
3033        return (struct octeon_hcd *)(hcd->hcd_priv);
3034}
3035
3036static irqreturn_t octeon_usb_irq(struct usb_hcd *hcd)
3037{
3038        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3039        unsigned long flags;
3040
3041        spin_lock_irqsave(&usb->lock, flags);
3042        cvmx_usb_poll(usb);
3043        spin_unlock_irqrestore(&usb->lock, flags);
3044        return IRQ_HANDLED;
3045}
3046
3047static int octeon_usb_start(struct usb_hcd *hcd)
3048{
3049        hcd->state = HC_STATE_RUNNING;
3050        return 0;
3051}
3052
3053static void octeon_usb_stop(struct usb_hcd *hcd)
3054{
3055        hcd->state = HC_STATE_HALT;
3056}
3057
3058static int octeon_usb_get_frame_number(struct usb_hcd *hcd)
3059{
3060        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3061
3062        return cvmx_usb_get_frame_number(usb);
3063}
3064
3065static int octeon_usb_urb_enqueue(struct usb_hcd *hcd,
3066                                  struct urb *urb,
3067                                  gfp_t mem_flags)
3068{
3069        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3070        struct device *dev = hcd->self.controller;
3071        struct cvmx_usb_transaction *transaction = NULL;
3072        struct cvmx_usb_pipe *pipe;
3073        unsigned long flags;
3074        struct cvmx_usb_iso_packet *iso_packet;
3075        struct usb_host_endpoint *ep = urb->ep;
3076        int rc;
3077
3078        urb->status = 0;
3079        spin_lock_irqsave(&usb->lock, flags);
3080
3081        rc = usb_hcd_link_urb_to_ep(hcd, urb);
3082        if (rc) {
3083                spin_unlock_irqrestore(&usb->lock, flags);
3084                return rc;
3085        }
3086
3087        if (!ep->hcpriv) {
3088                enum cvmx_usb_transfer transfer_type;
3089                enum cvmx_usb_speed speed;
3090                int split_device = 0;
3091                int split_port = 0;
3092
3093                switch (usb_pipetype(urb->pipe)) {
3094                case PIPE_ISOCHRONOUS:
3095                        transfer_type = CVMX_USB_TRANSFER_ISOCHRONOUS;
3096                        break;
3097                case PIPE_INTERRUPT:
3098                        transfer_type = CVMX_USB_TRANSFER_INTERRUPT;
3099                        break;
3100                case PIPE_CONTROL:
3101                        transfer_type = CVMX_USB_TRANSFER_CONTROL;
3102                        break;
3103                default:
3104                        transfer_type = CVMX_USB_TRANSFER_BULK;
3105                        break;
3106                }
3107                switch (urb->dev->speed) {
3108                case USB_SPEED_LOW:
3109                        speed = CVMX_USB_SPEED_LOW;
3110                        break;
3111                case USB_SPEED_FULL:
3112                        speed = CVMX_USB_SPEED_FULL;
3113                        break;
3114                default:
3115                        speed = CVMX_USB_SPEED_HIGH;
3116                        break;
3117                }
3118                /*
3119                 * For slow devices on high speed ports we need to find the hub
3120                 * that does the speed translation so we know where to send the
3121                 * split transactions.
3122                 */
3123                if (speed != CVMX_USB_SPEED_HIGH) {
3124                        /*
3125                         * Start at this device and work our way up the usb
3126                         * tree.
3127                         */
3128                        struct usb_device *dev = urb->dev;
3129
3130                        while (dev->parent) {
3131                                /*
3132                                 * If our parent is high speed then he'll
3133                                 * receive the splits.
3134                                 */
3135                                if (dev->parent->speed == USB_SPEED_HIGH) {
3136                                        split_device = dev->parent->devnum;
3137                                        split_port = dev->portnum;
3138                                        break;
3139                                }
3140                                /*
3141                                 * Move up the tree one level. If we make it all
3142                                 * the way up the tree, then the port must not
3143                                 * be in high speed mode and we don't need a
3144                                 * split.
3145                                 */
3146                                dev = dev->parent;
3147                        }
3148                }
3149                pipe = cvmx_usb_open_pipe(usb, usb_pipedevice(urb->pipe),
3150                                          usb_pipeendpoint(urb->pipe), speed,
3151                                          le16_to_cpu(ep->desc.wMaxPacketSize)
3152                                          & 0x7ff,
3153                                          transfer_type,
3154                                          usb_pipein(urb->pipe) ?
3155                                                CVMX_USB_DIRECTION_IN :
3156                                                CVMX_USB_DIRECTION_OUT,
3157                                          urb->interval,
3158                                          (le16_to_cpu(ep->desc.wMaxPacketSize)
3159                                           >> 11) & 0x3,
3160                                          split_device, split_port);
3161                if (!pipe) {
3162                        usb_hcd_unlink_urb_from_ep(hcd, urb);
3163                        spin_unlock_irqrestore(&usb->lock, flags);
3164                        dev_dbg(dev, "Failed to create pipe\n");
3165                        return -ENOMEM;
3166                }
3167                ep->hcpriv = pipe;
3168        } else {
3169                pipe = ep->hcpriv;
3170        }
3171
3172        switch (usb_pipetype(urb->pipe)) {
3173        case PIPE_ISOCHRONOUS:
3174                dev_dbg(dev, "Submit isochronous to %d.%d\n",
3175                        usb_pipedevice(urb->pipe),
3176                        usb_pipeendpoint(urb->pipe));
3177                /*
3178                 * Allocate a structure to use for our private list of
3179                 * isochronous packets.
3180                 */
3181                iso_packet = kmalloc_array(urb->number_of_packets,
3182                                           sizeof(struct cvmx_usb_iso_packet),
3183                                           GFP_ATOMIC);
3184                if (iso_packet) {
3185                        int i;
3186                        /* Fill the list with the data from the URB */
3187                        for (i = 0; i < urb->number_of_packets; i++) {
3188                                iso_packet[i].offset =
3189                                        urb->iso_frame_desc[i].offset;
3190                                iso_packet[i].length =
3191                                        urb->iso_frame_desc[i].length;
3192                                iso_packet[i].status = CVMX_USB_STATUS_ERROR;
3193                        }
3194                        /*
3195                         * Store a pointer to the list in the URB setup_packet
3196                         * field. We know this currently isn't being used and
3197                         * this saves us a bunch of logic.
3198                         */
3199                        urb->setup_packet = (char *)iso_packet;
3200                        transaction = cvmx_usb_submit_isochronous(usb,
3201                                                                  pipe, urb);
3202                        /*
3203                         * If submit failed we need to free our private packet
3204                         * list.
3205                         */
3206                        if (!transaction) {
3207                                urb->setup_packet = NULL;
3208                                kfree(iso_packet);
3209                        }
3210                }
3211                break;
3212        case PIPE_INTERRUPT:
3213                dev_dbg(dev, "Submit interrupt to %d.%d\n",
3214                        usb_pipedevice(urb->pipe),
3215                        usb_pipeendpoint(urb->pipe));
3216                transaction = cvmx_usb_submit_interrupt(usb, pipe, urb);
3217                break;
3218        case PIPE_CONTROL:
3219                dev_dbg(dev, "Submit control to %d.%d\n",
3220                        usb_pipedevice(urb->pipe),
3221                        usb_pipeendpoint(urb->pipe));
3222                transaction = cvmx_usb_submit_control(usb, pipe, urb);
3223                break;
3224        case PIPE_BULK:
3225                dev_dbg(dev, "Submit bulk to %d.%d\n",
3226                        usb_pipedevice(urb->pipe),
3227                        usb_pipeendpoint(urb->pipe));
3228                transaction = cvmx_usb_submit_bulk(usb, pipe, urb);
3229                break;
3230        }
3231        if (!transaction) {
3232                usb_hcd_unlink_urb_from_ep(hcd, urb);
3233                spin_unlock_irqrestore(&usb->lock, flags);
3234                dev_dbg(dev, "Failed to submit\n");
3235                return -ENOMEM;
3236        }
3237        urb->hcpriv = transaction;
3238        spin_unlock_irqrestore(&usb->lock, flags);
3239        return 0;
3240}
3241
3242static int octeon_usb_urb_dequeue(struct usb_hcd *hcd,
3243                                  struct urb *urb,
3244                                  int status)
3245{
3246        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3247        unsigned long flags;
3248        int rc;
3249
3250        if (!urb->dev)
3251                return -EINVAL;
3252
3253        spin_lock_irqsave(&usb->lock, flags);
3254
3255        rc = usb_hcd_check_unlink_urb(hcd, urb, status);
3256        if (rc)
3257                goto out;
3258
3259        urb->status = status;
3260        cvmx_usb_cancel(usb, urb->ep->hcpriv, urb->hcpriv);
3261
3262out:
3263        spin_unlock_irqrestore(&usb->lock, flags);
3264
3265        return rc;
3266}
3267
3268static void octeon_usb_endpoint_disable(struct usb_hcd *hcd,
3269                                        struct usb_host_endpoint *ep)
3270{
3271        struct device *dev = hcd->self.controller;
3272
3273        if (ep->hcpriv) {
3274                struct octeon_hcd *usb = hcd_to_octeon(hcd);
3275                struct cvmx_usb_pipe *pipe = ep->hcpriv;
3276                unsigned long flags;
3277
3278                spin_lock_irqsave(&usb->lock, flags);
3279                cvmx_usb_cancel_all(usb, pipe);
3280                if (cvmx_usb_close_pipe(usb, pipe))
3281                        dev_dbg(dev, "Closing pipe %p failed\n", pipe);
3282                spin_unlock_irqrestore(&usb->lock, flags);
3283                ep->hcpriv = NULL;
3284        }
3285}
3286
3287static int octeon_usb_hub_status_data(struct usb_hcd *hcd, char *buf)
3288{
3289        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3290        struct cvmx_usb_port_status port_status;
3291        unsigned long flags;
3292
3293        spin_lock_irqsave(&usb->lock, flags);
3294        port_status = cvmx_usb_get_status(usb);
3295        spin_unlock_irqrestore(&usb->lock, flags);
3296        buf[0] = port_status.connect_change << 1;
3297
3298        return buf[0] != 0;
3299}
3300
3301static int octeon_usb_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
3302                                  u16 wIndex, char *buf, u16 wLength)
3303{
3304        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3305        struct device *dev = hcd->self.controller;
3306        struct cvmx_usb_port_status usb_port_status;
3307        int port_status;
3308        struct usb_hub_descriptor *desc;
3309        unsigned long flags;
3310
3311        switch (typeReq) {
3312        case ClearHubFeature:
3313                dev_dbg(dev, "ClearHubFeature\n");
3314                switch (wValue) {
3315                case C_HUB_LOCAL_POWER:
3316                case C_HUB_OVER_CURRENT:
3317                        /* Nothing required here */
3318                        break;
3319                default:
3320                        return -EINVAL;
3321                }
3322                break;
3323        case ClearPortFeature:
3324                dev_dbg(dev, "ClearPortFeature\n");
3325                if (wIndex != 1) {
3326                        dev_dbg(dev, " INVALID\n");
3327                        return -EINVAL;
3328                }
3329
3330                switch (wValue) {
3331                case USB_PORT_FEAT_ENABLE:
3332                        dev_dbg(dev, " ENABLE\n");
3333                        spin_lock_irqsave(&usb->lock, flags);
3334                        cvmx_usb_disable(usb);
3335                        spin_unlock_irqrestore(&usb->lock, flags);
3336                        break;
3337                case USB_PORT_FEAT_SUSPEND:
3338                        dev_dbg(dev, " SUSPEND\n");
3339                        /* Not supported on Octeon */
3340                        break;
3341                case USB_PORT_FEAT_POWER:
3342                        dev_dbg(dev, " POWER\n");
3343                        /* Not supported on Octeon */
3344                        break;
3345                case USB_PORT_FEAT_INDICATOR:
3346                        dev_dbg(dev, " INDICATOR\n");
3347                        /* Port inidicator not supported */
3348                        break;
3349                case USB_PORT_FEAT_C_CONNECTION:
3350                        dev_dbg(dev, " C_CONNECTION\n");
3351                        /* Clears drivers internal connect status change flag */
3352                        spin_lock_irqsave(&usb->lock, flags);
3353                        usb->port_status = cvmx_usb_get_status(usb);
3354                        spin_unlock_irqrestore(&usb->lock, flags);
3355                        break;
3356                case USB_PORT_FEAT_C_RESET:
3357                        dev_dbg(dev, " C_RESET\n");
3358                        /*
3359                         * Clears the driver's internal Port Reset Change flag.
3360                         */
3361                        spin_lock_irqsave(&usb->lock, flags);
3362                        usb->port_status = cvmx_usb_get_status(usb);
3363                        spin_unlock_irqrestore(&usb->lock, flags);
3364                        break;
3365                case USB_PORT_FEAT_C_ENABLE:
3366                        dev_dbg(dev, " C_ENABLE\n");
3367                        /*
3368                         * Clears the driver's internal Port Enable/Disable
3369                         * Change flag.
3370                         */
3371                        spin_lock_irqsave(&usb->lock, flags);
3372                        usb->port_status = cvmx_usb_get_status(usb);
3373                        spin_unlock_irqrestore(&usb->lock, flags);
3374                        break;
3375                case USB_PORT_FEAT_C_SUSPEND:
3376                        dev_dbg(dev, " C_SUSPEND\n");
3377                        /*
3378                         * Clears the driver's internal Port Suspend Change
3379                         * flag, which is set when resume signaling on the host
3380                         * port is complete.
3381                         */
3382                        break;
3383                case USB_PORT_FEAT_C_OVER_CURRENT:
3384                        dev_dbg(dev, " C_OVER_CURRENT\n");
3385                        /* Clears the driver's overcurrent Change flag */
3386                        spin_lock_irqsave(&usb->lock, flags);
3387                        usb->port_status = cvmx_usb_get_status(usb);
3388                        spin_unlock_irqrestore(&usb->lock, flags);
3389                        break;
3390                default:
3391                        dev_dbg(dev, " UNKNOWN\n");
3392                        return -EINVAL;
3393                }
3394                break;
3395        case GetHubDescriptor:
3396                dev_dbg(dev, "GetHubDescriptor\n");
3397                desc = (struct usb_hub_descriptor *)buf;
3398                desc->bDescLength = 9;
3399                desc->bDescriptorType = 0x29;
3400                desc->bNbrPorts = 1;
3401                desc->wHubCharacteristics = cpu_to_le16(0x08);
3402                desc->bPwrOn2PwrGood = 1;
3403                desc->bHubContrCurrent = 0;
3404                desc->u.hs.DeviceRemovable[0] = 0;
3405                desc->u.hs.DeviceRemovable[1] = 0xff;
3406                break;
3407        case GetHubStatus:
3408                dev_dbg(dev, "GetHubStatus\n");
3409                *(__le32 *)buf = 0;
3410                break;
3411        case GetPortStatus:
3412                dev_dbg(dev, "GetPortStatus\n");
3413                if (wIndex != 1) {
3414                        dev_dbg(dev, " INVALID\n");
3415                        return -EINVAL;
3416                }
3417
3418                spin_lock_irqsave(&usb->lock, flags);
3419                usb_port_status = cvmx_usb_get_status(usb);
3420                spin_unlock_irqrestore(&usb->lock, flags);
3421                port_status = 0;
3422
3423                if (usb_port_status.connect_change) {
3424                        port_status |= (1 << USB_PORT_FEAT_C_CONNECTION);
3425                        dev_dbg(dev, " C_CONNECTION\n");
3426                }
3427
3428                if (usb_port_status.port_enabled) {
3429                        port_status |= (1 << USB_PORT_FEAT_C_ENABLE);
3430                        dev_dbg(dev, " C_ENABLE\n");
3431                }
3432
3433                if (usb_port_status.connected) {
3434                        port_status |= (1 << USB_PORT_FEAT_CONNECTION);
3435                        dev_dbg(dev, " CONNECTION\n");
3436                }
3437
3438                if (usb_port_status.port_enabled) {
3439                        port_status |= (1 << USB_PORT_FEAT_ENABLE);
3440                        dev_dbg(dev, " ENABLE\n");
3441                }
3442
3443                if (usb_port_status.port_over_current) {
3444                        port_status |= (1 << USB_PORT_FEAT_OVER_CURRENT);
3445                        dev_dbg(dev, " OVER_CURRENT\n");
3446                }
3447
3448                if (usb_port_status.port_powered) {
3449                        port_status |= (1 << USB_PORT_FEAT_POWER);
3450                        dev_dbg(dev, " POWER\n");
3451                }
3452
3453                if (usb_port_status.port_speed == CVMX_USB_SPEED_HIGH) {
3454                        port_status |= USB_PORT_STAT_HIGH_SPEED;
3455                        dev_dbg(dev, " HIGHSPEED\n");
3456                } else if (usb_port_status.port_speed == CVMX_USB_SPEED_LOW) {
3457                        port_status |= (1 << USB_PORT_FEAT_LOWSPEED);
3458                        dev_dbg(dev, " LOWSPEED\n");
3459                }
3460
3461                *((__le32 *)buf) = cpu_to_le32(port_status);
3462                break;
3463        case SetHubFeature:
3464                dev_dbg(dev, "SetHubFeature\n");
3465                /* No HUB features supported */
3466                break;
3467        case SetPortFeature:
3468                dev_dbg(dev, "SetPortFeature\n");
3469                if (wIndex != 1) {
3470                        dev_dbg(dev, " INVALID\n");
3471                        return -EINVAL;
3472                }
3473
3474                switch (wValue) {
3475                case USB_PORT_FEAT_SUSPEND:
3476                        dev_dbg(dev, " SUSPEND\n");
3477                        return -EINVAL;
3478                case USB_PORT_FEAT_POWER:
3479                        dev_dbg(dev, " POWER\n");
3480                        /*
3481                         * Program the port power bit to drive VBUS on the USB.
3482                         */
3483                        spin_lock_irqsave(&usb->lock, flags);
3484                        USB_SET_FIELD32(CVMX_USBCX_HPRT(usb->index),
3485                                        cvmx_usbcx_hprt, prtpwr, 1);
3486                        spin_unlock_irqrestore(&usb->lock, flags);
3487                        return 0;
3488                case USB_PORT_FEAT_RESET:
3489                        dev_dbg(dev, " RESET\n");
3490                        spin_lock_irqsave(&usb->lock, flags);
3491                        cvmx_usb_reset_port(usb);
3492                        spin_unlock_irqrestore(&usb->lock, flags);
3493                        return 0;
3494                case USB_PORT_FEAT_INDICATOR:
3495                        dev_dbg(dev, " INDICATOR\n");
3496                        /* Not supported */
3497                        break;
3498                default:
3499                        dev_dbg(dev, " UNKNOWN\n");
3500                        return -EINVAL;
3501                }
3502                break;
3503        default:
3504                dev_dbg(dev, "Unknown root hub request\n");
3505                return -EINVAL;
3506        }
3507        return 0;
3508}
3509
3510static const struct hc_driver octeon_hc_driver = {
3511        .description            = "Octeon USB",
3512        .product_desc           = "Octeon Host Controller",
3513        .hcd_priv_size          = sizeof(struct octeon_hcd),
3514        .irq                    = octeon_usb_irq,
3515        .flags                  = HCD_MEMORY | HCD_USB2,
3516        .start                  = octeon_usb_start,
3517        .stop                   = octeon_usb_stop,
3518        .urb_enqueue            = octeon_usb_urb_enqueue,
3519        .urb_dequeue            = octeon_usb_urb_dequeue,
3520        .endpoint_disable       = octeon_usb_endpoint_disable,
3521        .get_frame_number       = octeon_usb_get_frame_number,
3522        .hub_status_data        = octeon_usb_hub_status_data,
3523        .hub_control            = octeon_usb_hub_control,
3524        .map_urb_for_dma        = octeon_map_urb_for_dma,
3525        .unmap_urb_for_dma      = octeon_unmap_urb_for_dma,
3526};
3527
3528static int octeon_usb_probe(struct platform_device *pdev)
3529{
3530        int status;
3531        int initialize_flags;
3532        int usb_num;
3533        struct resource *res_mem;
3534        struct device_node *usbn_node;
3535        int irq = platform_get_irq(pdev, 0);
3536        struct device *dev = &pdev->dev;
3537        struct octeon_hcd *usb;
3538        struct usb_hcd *hcd;
3539        u32 clock_rate = 48000000;
3540        bool is_crystal_clock = false;
3541        const char *clock_type;
3542        int i;
3543
3544        if (!dev->of_node) {
3545                dev_err(dev, "Error: empty of_node\n");
3546                return -ENXIO;
3547        }
3548        usbn_node = dev->of_node->parent;
3549
3550        i = of_property_read_u32(usbn_node,
3551                                 "clock-frequency", &clock_rate);
3552        if (i)
3553                i = of_property_read_u32(usbn_node,
3554                                         "refclk-frequency", &clock_rate);
3555        if (i) {
3556                dev_err(dev, "No USBN \"clock-frequency\"\n");
3557                return -ENXIO;
3558        }
3559        switch (clock_rate) {
3560        case 12000000:
3561                initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ;
3562                break;
3563        case 24000000:
3564                initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ;
3565                break;
3566        case 48000000:
3567                initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ;
3568                break;
3569        default:
3570                dev_err(dev, "Illegal USBN \"clock-frequency\" %u\n",
3571                        clock_rate);
3572                return -ENXIO;
3573        }
3574
3575        i = of_property_read_string(usbn_node,
3576                                    "cavium,refclk-type", &clock_type);
3577        if (i)
3578                i = of_property_read_string(usbn_node,
3579                                            "refclk-type", &clock_type);
3580
3581        if (!i && strcmp("crystal", clock_type) == 0)
3582                is_crystal_clock = true;
3583
3584        if (is_crystal_clock)
3585                initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI;
3586        else
3587                initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND;
3588
3589        res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3590        if (!res_mem) {
3591                dev_err(dev, "found no memory resource\n");
3592                return -ENXIO;
3593        }
3594        usb_num = (res_mem->start >> 44) & 1;
3595
3596        if (irq < 0) {
3597                /* Defective device tree, but we know how to fix it. */
3598                irq_hw_number_t hwirq = usb_num ? (1 << 6) + 17 : 56;
3599
3600                irq = irq_create_mapping(NULL, hwirq);
3601        }
3602
3603        /*
3604         * Set the DMA mask to 64bits so we get buffers already translated for
3605         * DMA.
3606         */
3607        i = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(64));
3608        if (i)
3609                return i;
3610
3611        /*
3612         * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
3613         * IOB priority registers.  Under heavy network load USB
3614         * hardware can be starved by the IOB causing a crash.  Give
3615         * it a priority boost if it has been waiting more than 400
3616         * cycles to avoid this situation.
3617         *
3618         * Testing indicates that a cnt_val of 8192 is not sufficient,
3619         * but no failures are seen with 4096.  We choose a value of
3620         * 400 to give a safety factor of 10.
3621         */
3622        if (OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)) {
3623                union cvmx_iob_n2c_l2c_pri_cnt pri_cnt;
3624
3625                pri_cnt.u64 = 0;
3626                pri_cnt.s.cnt_enb = 1;
3627                pri_cnt.s.cnt_val = 400;
3628                cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
3629        }
3630
3631        hcd = usb_create_hcd(&octeon_hc_driver, dev, dev_name(dev));
3632        if (!hcd) {
3633                dev_dbg(dev, "Failed to allocate memory for HCD\n");
3634                return -1;
3635        }
3636        hcd->uses_new_polling = 1;
3637        usb = (struct octeon_hcd *)hcd->hcd_priv;
3638
3639        spin_lock_init(&usb->lock);
3640
3641        usb->init_flags = initialize_flags;
3642
3643        /* Initialize the USB state structure */
3644        usb->index = usb_num;
3645        INIT_LIST_HEAD(&usb->idle_pipes);
3646        for (i = 0; i < ARRAY_SIZE(usb->active_pipes); i++)
3647                INIT_LIST_HEAD(&usb->active_pipes[i]);
3648
3649        /* Due to an errata, CN31XX doesn't support DMA */
3650        if (OCTEON_IS_MODEL(OCTEON_CN31XX)) {
3651                usb->init_flags |= CVMX_USB_INITIALIZE_FLAGS_NO_DMA;
3652                /* Only use one channel with non DMA */
3653                usb->idle_hardware_channels = 0x1;
3654        } else if (OCTEON_IS_MODEL(OCTEON_CN5XXX)) {
3655                /* CN5XXX have an errata with channel 3 */
3656                usb->idle_hardware_channels = 0xf7;
3657        } else {
3658                usb->idle_hardware_channels = 0xff;
3659        }
3660
3661        status = cvmx_usb_initialize(dev, usb);
3662        if (status) {
3663                dev_dbg(dev, "USB initialization failed with %d\n", status);
3664                usb_put_hcd(hcd);
3665                return -1;
3666        }
3667
3668        status = usb_add_hcd(hcd, irq, 0);
3669        if (status) {
3670                dev_dbg(dev, "USB add HCD failed with %d\n", status);
3671                usb_put_hcd(hcd);
3672                return -1;
3673        }
3674        device_wakeup_enable(hcd->self.controller);
3675
3676        dev_info(dev, "Registered HCD for port %d on irq %d\n", usb_num, irq);
3677
3678        return 0;
3679}
3680
3681static int octeon_usb_remove(struct platform_device *pdev)
3682{
3683        int status;
3684        struct device *dev = &pdev->dev;
3685        struct usb_hcd *hcd = dev_get_drvdata(dev);
3686        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3687        unsigned long flags;
3688
3689        usb_remove_hcd(hcd);
3690        spin_lock_irqsave(&usb->lock, flags);
3691        status = cvmx_usb_shutdown(usb);
3692        spin_unlock_irqrestore(&usb->lock, flags);
3693        if (status)
3694                dev_dbg(dev, "USB shutdown failed with %d\n", status);
3695
3696        usb_put_hcd(hcd);
3697
3698        return 0;
3699}
3700
3701static const struct of_device_id octeon_usb_match[] = {
3702        {
3703                .compatible = "cavium,octeon-5750-usbc",
3704        },
3705        {},
3706};
3707MODULE_DEVICE_TABLE(of, octeon_usb_match);
3708
3709static struct platform_driver octeon_usb_driver = {
3710        .driver = {
3711                .name           = "octeon-hcd",
3712                .of_match_table = octeon_usb_match,
3713        },
3714        .probe      = octeon_usb_probe,
3715        .remove     = octeon_usb_remove,
3716};
3717
3718static int __init octeon_usb_driver_init(void)
3719{
3720        if (usb_disabled())
3721                return 0;
3722
3723        return platform_driver_register(&octeon_usb_driver);
3724}
3725module_init(octeon_usb_driver_init);
3726
3727static void __exit octeon_usb_driver_exit(void)
3728{
3729        if (usb_disabled())
3730                return;
3731
3732        platform_driver_unregister(&octeon_usb_driver);
3733}
3734module_exit(octeon_usb_driver_exit);
3735
3736MODULE_LICENSE("GPL");
3737MODULE_AUTHOR("Cavium, Inc. <support@cavium.com>");
3738MODULE_DESCRIPTION("Cavium Inc. OCTEON USB Host driver.");
3739