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[];
 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(struct octeon_hcd *usb,
1840                enum cvmx_usb_transfer xfer_type)
1841{
1842        struct list_head *list = usb->active_pipes + xfer_type;
1843        u64 current_frame = usb->frame_number;
1844        struct cvmx_usb_pipe *pipe;
1845
1846        list_for_each_entry(pipe, list, node) {
1847                struct cvmx_usb_transaction *t =
1848                        list_first_entry(&pipe->transactions, typeof(*t),
1849                                         node);
1850                if (!(pipe->flags & CVMX_USB_PIPE_FLAGS_SCHEDULED) && t &&
1851                    (pipe->next_tx_frame <= current_frame) &&
1852                    ((pipe->split_sc_frame == -1) ||
1853                     ((((int)current_frame - pipe->split_sc_frame) & 0x7f) <
1854                      0x40)) &&
1855                    (!usb->active_split || (usb->active_split == t))) {
1856                        prefetch(t);
1857                        return pipe;
1858                }
1859        }
1860        return NULL;
1861}
1862
1863static struct cvmx_usb_pipe *cvmx_usb_next_pipe(struct octeon_hcd *usb,
1864                                                int is_sof)
1865{
1866        struct cvmx_usb_pipe *pipe;
1867
1868        /* Find a pipe needing service. */
1869        if (is_sof) {
1870                /*
1871                 * Only process periodic pipes on SOF interrupts. This way we
1872                 * are sure that the periodic data is sent in the beginning of
1873                 * the frame.
1874                 */
1875                pipe = cvmx_usb_find_ready_pipe(usb,
1876                                                CVMX_USB_TRANSFER_ISOCHRONOUS);
1877                if (pipe)
1878                        return pipe;
1879                pipe = cvmx_usb_find_ready_pipe(usb,
1880                                                CVMX_USB_TRANSFER_INTERRUPT);
1881                if (pipe)
1882                        return pipe;
1883        }
1884        pipe = cvmx_usb_find_ready_pipe(usb, CVMX_USB_TRANSFER_CONTROL);
1885        if (pipe)
1886                return pipe;
1887        return cvmx_usb_find_ready_pipe(usb, CVMX_USB_TRANSFER_BULK);
1888}
1889
1890/**
1891 * Called whenever a pipe might need to be scheduled to the
1892 * hardware.
1893 *
1894 * @usb:         USB device state populated by cvmx_usb_initialize().
1895 * @is_sof:      True if this schedule was called on a SOF interrupt.
1896 */
1897static void cvmx_usb_schedule(struct octeon_hcd *usb, int is_sof)
1898{
1899        int channel;
1900        struct cvmx_usb_pipe *pipe;
1901        int need_sof;
1902        enum cvmx_usb_transfer ttype;
1903
1904        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA) {
1905                /*
1906                 * Without DMA we need to be careful to not schedule something
1907                 * at the end of a frame and cause an overrun.
1908                 */
1909                union cvmx_usbcx_hfnum hfnum = {
1910                        .u32 = cvmx_usb_read_csr32(usb,
1911                                                CVMX_USBCX_HFNUM(usb->index))
1912                };
1913
1914                union cvmx_usbcx_hfir hfir = {
1915                        .u32 = cvmx_usb_read_csr32(usb,
1916                                                CVMX_USBCX_HFIR(usb->index))
1917                };
1918
1919                if (hfnum.s.frrem < hfir.s.frint / 4)
1920                        goto done;
1921        }
1922
1923        while (usb->idle_hardware_channels) {
1924                /* Find an idle channel */
1925                channel = __fls(usb->idle_hardware_channels);
1926                if (unlikely(channel > 7))
1927                        break;
1928
1929                pipe = cvmx_usb_next_pipe(usb, is_sof);
1930                if (!pipe)
1931                        break;
1932
1933                cvmx_usb_start_channel(usb, channel, pipe);
1934        }
1935
1936done:
1937        /*
1938         * Only enable SOF interrupts when we have transactions pending in the
1939         * future that might need to be scheduled
1940         */
1941        need_sof = 0;
1942        for (ttype = CVMX_USB_TRANSFER_CONTROL;
1943             ttype <= CVMX_USB_TRANSFER_INTERRUPT; ttype++) {
1944                list_for_each_entry(pipe, &usb->active_pipes[ttype], node) {
1945                        if (pipe->next_tx_frame > usb->frame_number) {
1946                                need_sof = 1;
1947                                break;
1948                        }
1949                }
1950        }
1951        USB_SET_FIELD32(CVMX_USBCX_GINTMSK(usb->index),
1952                        cvmx_usbcx_gintmsk, sofmsk, need_sof);
1953}
1954
1955static void octeon_usb_urb_complete_callback(struct octeon_hcd *usb,
1956                                             enum cvmx_usb_status status,
1957                                             struct cvmx_usb_pipe *pipe,
1958                                             struct cvmx_usb_transaction
1959                                                *transaction,
1960                                             int bytes_transferred,
1961                                             struct urb *urb)
1962{
1963        struct usb_hcd *hcd = octeon_to_hcd(usb);
1964        struct device *dev = hcd->self.controller;
1965
1966        if (likely(status == CVMX_USB_STATUS_OK))
1967                urb->actual_length = bytes_transferred;
1968        else
1969                urb->actual_length = 0;
1970
1971        urb->hcpriv = NULL;
1972
1973        /* For Isochronous transactions we need to update the URB packet status
1974         * list from data in our private copy
1975         */
1976        if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1977                int i;
1978                /*
1979                 * The pointer to the private list is stored in the setup_packet
1980                 * field.
1981                 */
1982                struct cvmx_usb_iso_packet *iso_packet =
1983                        (struct cvmx_usb_iso_packet *)urb->setup_packet;
1984                /* Recalculate the transfer size by adding up each packet */
1985                urb->actual_length = 0;
1986                for (i = 0; i < urb->number_of_packets; i++) {
1987                        if (iso_packet[i].status == CVMX_USB_STATUS_OK) {
1988                                urb->iso_frame_desc[i].status = 0;
1989                                urb->iso_frame_desc[i].actual_length =
1990                                        iso_packet[i].length;
1991                                urb->actual_length +=
1992                                        urb->iso_frame_desc[i].actual_length;
1993                        } else {
1994                                dev_dbg(dev, "ISOCHRONOUS packet=%d of %d status=%d pipe=%p transaction=%p size=%d\n",
1995                                        i, urb->number_of_packets,
1996                                        iso_packet[i].status, pipe,
1997                                        transaction, iso_packet[i].length);
1998                                urb->iso_frame_desc[i].status = -EREMOTEIO;
1999                        }
2000                }
2001                /* Free the private list now that we don't need it anymore */
2002                kfree(iso_packet);
2003                urb->setup_packet = NULL;
2004        }
2005
2006        switch (status) {
2007        case CVMX_USB_STATUS_OK:
2008                urb->status = 0;
2009                break;
2010        case CVMX_USB_STATUS_CANCEL:
2011                if (urb->status == 0)
2012                        urb->status = -ENOENT;
2013                break;
2014        case CVMX_USB_STATUS_STALL:
2015                dev_dbg(dev, "status=stall pipe=%p transaction=%p size=%d\n",
2016                        pipe, transaction, bytes_transferred);
2017                urb->status = -EPIPE;
2018                break;
2019        case CVMX_USB_STATUS_BABBLEERR:
2020                dev_dbg(dev, "status=babble pipe=%p transaction=%p size=%d\n",
2021                        pipe, transaction, bytes_transferred);
2022                urb->status = -EPIPE;
2023                break;
2024        case CVMX_USB_STATUS_SHORT:
2025                dev_dbg(dev, "status=short pipe=%p transaction=%p size=%d\n",
2026                        pipe, transaction, bytes_transferred);
2027                urb->status = -EREMOTEIO;
2028                break;
2029        case CVMX_USB_STATUS_ERROR:
2030        case CVMX_USB_STATUS_XACTERR:
2031        case CVMX_USB_STATUS_DATATGLERR:
2032        case CVMX_USB_STATUS_FRAMEERR:
2033                dev_dbg(dev, "status=%d pipe=%p transaction=%p size=%d\n",
2034                        status, pipe, transaction, bytes_transferred);
2035                urb->status = -EPROTO;
2036                break;
2037        }
2038        usb_hcd_unlink_urb_from_ep(octeon_to_hcd(usb), urb);
2039        spin_unlock(&usb->lock);
2040        usb_hcd_giveback_urb(octeon_to_hcd(usb), urb, urb->status);
2041        spin_lock(&usb->lock);
2042}
2043
2044/**
2045 * Signal the completion of a transaction and free it. The
2046 * transaction will be removed from the pipe transaction list.
2047 *
2048 * @usb:         USB device state populated by cvmx_usb_initialize().
2049 * @pipe:        Pipe the transaction is on
2050 * @transaction:
2051 *               Transaction that completed
2052 * @complete_code:
2053 *               Completion code
2054 */
2055static void cvmx_usb_complete(struct octeon_hcd *usb,
2056                              struct cvmx_usb_pipe *pipe,
2057                              struct cvmx_usb_transaction *transaction,
2058                              enum cvmx_usb_status complete_code)
2059{
2060        /* If this was a split then clear our split in progress marker */
2061        if (usb->active_split == transaction)
2062                usb->active_split = NULL;
2063
2064        /*
2065         * Isochronous transactions need extra processing as they might not be
2066         * done after a single data transfer
2067         */
2068        if (unlikely(transaction->type == CVMX_USB_TRANSFER_ISOCHRONOUS)) {
2069                /* Update the number of bytes transferred in this ISO packet */
2070                transaction->iso_packets[0].length = transaction->actual_bytes;
2071                transaction->iso_packets[0].status = complete_code;
2072
2073                /*
2074                 * If there are more ISOs pending and we succeeded, schedule the
2075                 * next one
2076                 */
2077                if ((transaction->iso_number_packets > 1) &&
2078                    (complete_code == CVMX_USB_STATUS_OK)) {
2079                        /* No bytes transferred for this packet as of yet */
2080                        transaction->actual_bytes = 0;
2081                        /* One less ISO waiting to transfer */
2082                        transaction->iso_number_packets--;
2083                        /* Increment to the next location in our packet array */
2084                        transaction->iso_packets++;
2085                        transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2086                        return;
2087                }
2088        }
2089
2090        /* Remove the transaction from the pipe list */
2091        list_del(&transaction->node);
2092        if (list_empty(&pipe->transactions))
2093                list_move_tail(&pipe->node, &usb->idle_pipes);
2094        octeon_usb_urb_complete_callback(usb, complete_code, pipe,
2095                                         transaction,
2096                                         transaction->actual_bytes,
2097                                         transaction->urb);
2098        kfree(transaction);
2099}
2100
2101/**
2102 * Submit a usb transaction to a pipe. Called for all types
2103 * of transactions.
2104 *
2105 * @usb:
2106 * @pipe:           Which pipe to submit to.
2107 * @type:           Transaction type
2108 * @buffer:         User buffer for the transaction
2109 * @buffer_length:
2110 *                  User buffer's length in bytes
2111 * @control_header:
2112 *                  For control transactions, the 8 byte standard header
2113 * @iso_start_frame:
2114 *                  For ISO transactions, the start frame
2115 * @iso_number_packets:
2116 *                  For ISO, the number of packet in the transaction.
2117 * @iso_packets:
2118 *                  A description of each ISO packet
2119 * @urb:            URB for the callback
2120 *
2121 * Returns: Transaction or NULL on failure.
2122 */
2123static struct cvmx_usb_transaction *cvmx_usb_submit_transaction(
2124                                struct octeon_hcd *usb,
2125                                struct cvmx_usb_pipe *pipe,
2126                                enum cvmx_usb_transfer type,
2127                                u64 buffer,
2128                                int buffer_length,
2129                                u64 control_header,
2130                                int iso_start_frame,
2131                                int iso_number_packets,
2132                                struct cvmx_usb_iso_packet *iso_packets,
2133                                struct urb *urb)
2134{
2135        struct cvmx_usb_transaction *transaction;
2136
2137        if (unlikely(pipe->transfer_type != type))
2138                return NULL;
2139
2140        transaction = kzalloc(sizeof(*transaction), GFP_ATOMIC);
2141        if (unlikely(!transaction))
2142                return NULL;
2143
2144        transaction->type = type;
2145        transaction->buffer = buffer;
2146        transaction->buffer_length = buffer_length;
2147        transaction->control_header = control_header;
2148        /* FIXME: This is not used, implement it. */
2149        transaction->iso_start_frame = iso_start_frame;
2150        transaction->iso_number_packets = iso_number_packets;
2151        transaction->iso_packets = iso_packets;
2152        transaction->urb = urb;
2153        if (transaction->type == CVMX_USB_TRANSFER_CONTROL)
2154                transaction->stage = CVMX_USB_STAGE_SETUP;
2155        else
2156                transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2157
2158        if (!list_empty(&pipe->transactions)) {
2159                list_add_tail(&transaction->node, &pipe->transactions);
2160        } else {
2161                list_add_tail(&transaction->node, &pipe->transactions);
2162                list_move_tail(&pipe->node,
2163                               &usb->active_pipes[pipe->transfer_type]);
2164
2165                /*
2166                 * We may need to schedule the pipe if this was the head of the
2167                 * pipe.
2168                 */
2169                cvmx_usb_schedule(usb, 0);
2170        }
2171
2172        return transaction;
2173}
2174
2175/**
2176 * Call to submit a USB Bulk transfer to a pipe.
2177 *
2178 * @usb:            USB device state populated by cvmx_usb_initialize().
2179 * @pipe:           Handle to the pipe for the transfer.
2180 * @urb:            URB.
2181 *
2182 * Returns: A submitted transaction or NULL on failure.
2183 */
2184static struct cvmx_usb_transaction *cvmx_usb_submit_bulk(
2185                                                struct octeon_hcd *usb,
2186                                                struct cvmx_usb_pipe *pipe,
2187                                                struct urb *urb)
2188{
2189        return cvmx_usb_submit_transaction(usb, pipe, CVMX_USB_TRANSFER_BULK,
2190                                           urb->transfer_dma,
2191                                           urb->transfer_buffer_length,
2192                                           0, /* control_header */
2193                                           0, /* iso_start_frame */
2194                                           0, /* iso_number_packets */
2195                                           NULL, /* iso_packets */
2196                                           urb);
2197}
2198
2199/**
2200 * Call to submit a USB Interrupt transfer to a pipe.
2201 *
2202 * @usb:            USB device state populated by cvmx_usb_initialize().
2203 * @pipe:           Handle to the pipe for the transfer.
2204 * @urb:            URB returned when the callback is called.
2205 *
2206 * Returns: A submitted transaction or NULL on failure.
2207 */
2208static struct cvmx_usb_transaction *cvmx_usb_submit_interrupt(
2209                                                struct octeon_hcd *usb,
2210                                                struct cvmx_usb_pipe *pipe,
2211                                                struct urb *urb)
2212{
2213        return cvmx_usb_submit_transaction(usb, pipe,
2214                                           CVMX_USB_TRANSFER_INTERRUPT,
2215                                           urb->transfer_dma,
2216                                           urb->transfer_buffer_length,
2217                                           0, /* control_header */
2218                                           0, /* iso_start_frame */
2219                                           0, /* iso_number_packets */
2220                                           NULL, /* iso_packets */
2221                                           urb);
2222}
2223
2224/**
2225 * Call to submit a USB Control transfer to a pipe.
2226 *
2227 * @usb:            USB device state populated by cvmx_usb_initialize().
2228 * @pipe:           Handle to the pipe for the transfer.
2229 * @urb:            URB.
2230 *
2231 * Returns: A submitted transaction or NULL on failure.
2232 */
2233static struct cvmx_usb_transaction *cvmx_usb_submit_control(
2234                                                struct octeon_hcd *usb,
2235                                                struct cvmx_usb_pipe *pipe,
2236                                                struct urb *urb)
2237{
2238        int buffer_length = urb->transfer_buffer_length;
2239        u64 control_header = urb->setup_dma;
2240        struct usb_ctrlrequest *header = cvmx_phys_to_ptr(control_header);
2241
2242        if ((header->bRequestType & USB_DIR_IN) == 0)
2243                buffer_length = le16_to_cpu(header->wLength);
2244
2245        return cvmx_usb_submit_transaction(usb, pipe,
2246                                           CVMX_USB_TRANSFER_CONTROL,
2247                                           urb->transfer_dma, buffer_length,
2248                                           control_header,
2249                                           0, /* iso_start_frame */
2250                                           0, /* iso_number_packets */
2251                                           NULL, /* iso_packets */
2252                                           urb);
2253}
2254
2255/**
2256 * Call to submit a USB Isochronous transfer to a pipe.
2257 *
2258 * @usb:            USB device state populated by cvmx_usb_initialize().
2259 * @pipe:           Handle to the pipe for the transfer.
2260 * @urb:            URB returned when the callback is called.
2261 *
2262 * Returns: A submitted transaction or NULL on failure.
2263 */
2264static struct cvmx_usb_transaction *cvmx_usb_submit_isochronous(
2265                                                struct octeon_hcd *usb,
2266                                                struct cvmx_usb_pipe *pipe,
2267                                                struct urb *urb)
2268{
2269        struct cvmx_usb_iso_packet *packets;
2270
2271        packets = (struct cvmx_usb_iso_packet *)urb->setup_packet;
2272        return cvmx_usb_submit_transaction(usb, pipe,
2273                                           CVMX_USB_TRANSFER_ISOCHRONOUS,
2274                                           urb->transfer_dma,
2275                                           urb->transfer_buffer_length,
2276                                           0, /* control_header */
2277                                           urb->start_frame,
2278                                           urb->number_of_packets,
2279                                           packets, urb);
2280}
2281
2282/**
2283 * Cancel one outstanding request in a pipe. Canceling a request
2284 * can fail if the transaction has already completed before cancel
2285 * is called. Even after a successful cancel call, it may take
2286 * a frame or two for the cvmx_usb_poll() function to call the
2287 * associated callback.
2288 *
2289 * @usb:         USB device state populated by cvmx_usb_initialize().
2290 * @pipe:        Pipe to cancel requests in.
2291 * @transaction: Transaction to cancel, returned by the submit function.
2292 *
2293 * Returns: 0 or a negative error code.
2294 */
2295static int cvmx_usb_cancel(struct octeon_hcd *usb,
2296                           struct cvmx_usb_pipe *pipe,
2297                           struct cvmx_usb_transaction *transaction)
2298{
2299        /*
2300         * If the transaction is the HEAD of the queue and scheduled. We need to
2301         * treat it special
2302         */
2303        if (list_first_entry(&pipe->transactions, typeof(*transaction), node) ==
2304            transaction && (pipe->flags & CVMX_USB_PIPE_FLAGS_SCHEDULED)) {
2305                union cvmx_usbcx_hccharx usbc_hcchar;
2306
2307                usb->pipe_for_channel[pipe->channel] = NULL;
2308                pipe->flags &= ~CVMX_USB_PIPE_FLAGS_SCHEDULED;
2309
2310                CVMX_SYNCW;
2311
2312                usbc_hcchar.u32 = cvmx_usb_read_csr32(usb,
2313                                CVMX_USBCX_HCCHARX(pipe->channel, usb->index));
2314                /*
2315                 * If the channel isn't enabled then the transaction already
2316                 * completed.
2317                 */
2318                if (usbc_hcchar.s.chena) {
2319                        usbc_hcchar.s.chdis = 1;
2320                        cvmx_usb_write_csr32(usb,
2321                                             CVMX_USBCX_HCCHARX(pipe->channel,
2322                                                                usb->index),
2323                                             usbc_hcchar.u32);
2324                }
2325        }
2326        cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_CANCEL);
2327        return 0;
2328}
2329
2330/**
2331 * Cancel all outstanding requests in a pipe. Logically all this
2332 * does is call cvmx_usb_cancel() in a loop.
2333 *
2334 * @usb:         USB device state populated by cvmx_usb_initialize().
2335 * @pipe:        Pipe to cancel requests in.
2336 *
2337 * Returns: 0 or a negative error code.
2338 */
2339static int cvmx_usb_cancel_all(struct octeon_hcd *usb,
2340                               struct cvmx_usb_pipe *pipe)
2341{
2342        struct cvmx_usb_transaction *transaction, *next;
2343
2344        /* Simply loop through and attempt to cancel each transaction */
2345        list_for_each_entry_safe(transaction, next, &pipe->transactions, node) {
2346                int result = cvmx_usb_cancel(usb, pipe, transaction);
2347
2348                if (unlikely(result != 0))
2349                        return result;
2350        }
2351        return 0;
2352}
2353
2354/**
2355 * Close a pipe created with cvmx_usb_open_pipe().
2356 *
2357 * @usb:         USB device state populated by cvmx_usb_initialize().
2358 * @pipe:        Pipe to close.
2359 *
2360 * Returns: 0 or a negative error code. EBUSY is returned if the pipe has
2361 *          outstanding transfers.
2362 */
2363static int cvmx_usb_close_pipe(struct octeon_hcd *usb,
2364                               struct cvmx_usb_pipe *pipe)
2365{
2366        /* Fail if the pipe has pending transactions */
2367        if (!list_empty(&pipe->transactions))
2368                return -EBUSY;
2369
2370        list_del(&pipe->node);
2371        kfree(pipe);
2372
2373        return 0;
2374}
2375
2376/**
2377 * Get the current USB protocol level frame number. The frame
2378 * number is always in the range of 0-0x7ff.
2379 *
2380 * @usb: USB device state populated by cvmx_usb_initialize().
2381 *
2382 * Returns: USB frame number
2383 */
2384static int cvmx_usb_get_frame_number(struct octeon_hcd *usb)
2385{
2386        union cvmx_usbcx_hfnum usbc_hfnum;
2387
2388        usbc_hfnum.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HFNUM(usb->index));
2389
2390        return usbc_hfnum.s.frnum;
2391}
2392
2393static void cvmx_usb_transfer_control(struct octeon_hcd *usb,
2394                                      struct cvmx_usb_pipe *pipe,
2395                                      struct cvmx_usb_transaction *transaction,
2396                                      union cvmx_usbcx_hccharx usbc_hcchar,
2397                                      int buffer_space_left,
2398                                      int bytes_in_last_packet)
2399{
2400        switch (transaction->stage) {
2401        case CVMX_USB_STAGE_NON_CONTROL:
2402        case CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE:
2403                /* This should be impossible */
2404                cvmx_usb_complete(usb, pipe, transaction,
2405                                  CVMX_USB_STATUS_ERROR);
2406                break;
2407        case CVMX_USB_STAGE_SETUP:
2408                pipe->pid_toggle = 1;
2409                if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2410                        transaction->stage =
2411                                CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE;
2412                } else {
2413                        struct usb_ctrlrequest *header =
2414                                cvmx_phys_to_ptr(transaction->control_header);
2415                        if (header->wLength)
2416                                transaction->stage = CVMX_USB_STAGE_DATA;
2417                        else
2418                                transaction->stage = CVMX_USB_STAGE_STATUS;
2419                }
2420                break;
2421        case CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE:
2422                {
2423                        struct usb_ctrlrequest *header =
2424                                cvmx_phys_to_ptr(transaction->control_header);
2425                        if (header->wLength)
2426                                transaction->stage = CVMX_USB_STAGE_DATA;
2427                        else
2428                                transaction->stage = CVMX_USB_STAGE_STATUS;
2429                }
2430                break;
2431        case CVMX_USB_STAGE_DATA:
2432                if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2433                        transaction->stage = CVMX_USB_STAGE_DATA_SPLIT_COMPLETE;
2434                        /*
2435                         * For setup OUT data that are splits,
2436                         * the hardware doesn't appear to count
2437                         * transferred data. Here we manually
2438                         * update the data transferred
2439                         */
2440                        if (!usbc_hcchar.s.epdir) {
2441                                if (buffer_space_left < pipe->max_packet)
2442                                        transaction->actual_bytes +=
2443                                                buffer_space_left;
2444                                else
2445                                        transaction->actual_bytes +=
2446                                                pipe->max_packet;
2447                        }
2448                } else if ((buffer_space_left == 0) ||
2449                           (bytes_in_last_packet < pipe->max_packet)) {
2450                        pipe->pid_toggle = 1;
2451                        transaction->stage = CVMX_USB_STAGE_STATUS;
2452                }
2453                break;
2454        case CVMX_USB_STAGE_DATA_SPLIT_COMPLETE:
2455                if ((buffer_space_left == 0) ||
2456                    (bytes_in_last_packet < pipe->max_packet)) {
2457                        pipe->pid_toggle = 1;
2458                        transaction->stage = CVMX_USB_STAGE_STATUS;
2459                } else {
2460                        transaction->stage = CVMX_USB_STAGE_DATA;
2461                }
2462                break;
2463        case CVMX_USB_STAGE_STATUS:
2464                if (cvmx_usb_pipe_needs_split(usb, pipe))
2465                        transaction->stage =
2466                                CVMX_USB_STAGE_STATUS_SPLIT_COMPLETE;
2467                else
2468                        cvmx_usb_complete(usb, pipe, transaction,
2469                                          CVMX_USB_STATUS_OK);
2470                break;
2471        case CVMX_USB_STAGE_STATUS_SPLIT_COMPLETE:
2472                cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK);
2473                break;
2474        }
2475}
2476
2477static void cvmx_usb_transfer_bulk(struct octeon_hcd *usb,
2478                                   struct cvmx_usb_pipe *pipe,
2479                                   struct cvmx_usb_transaction *transaction,
2480                                   union cvmx_usbcx_hcintx usbc_hcint,
2481                                   int buffer_space_left,
2482                                   int bytes_in_last_packet)
2483{
2484        /*
2485         * The only time a bulk transfer isn't complete when it finishes with
2486         * an ACK is during a split transaction. For splits we need to continue
2487         * the transfer if more data is needed.
2488         */
2489        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2490                if (transaction->stage == CVMX_USB_STAGE_NON_CONTROL)
2491                        transaction->stage =
2492                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE;
2493                else if (buffer_space_left &&
2494                         (bytes_in_last_packet == pipe->max_packet))
2495                        transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2496                else
2497                        cvmx_usb_complete(usb, pipe, transaction,
2498                                          CVMX_USB_STATUS_OK);
2499        } else {
2500                if ((pipe->device_speed == CVMX_USB_SPEED_HIGH) &&
2501                    (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT) &&
2502                    (usbc_hcint.s.nak))
2503                        pipe->flags |= CVMX_USB_PIPE_FLAGS_NEED_PING;
2504                if (!buffer_space_left ||
2505                    (bytes_in_last_packet < pipe->max_packet))
2506                        cvmx_usb_complete(usb, pipe, transaction,
2507                                          CVMX_USB_STATUS_OK);
2508        }
2509}
2510
2511static void cvmx_usb_transfer_intr(struct octeon_hcd *usb,
2512                                   struct cvmx_usb_pipe *pipe,
2513                                   struct cvmx_usb_transaction *transaction,
2514                                   int buffer_space_left,
2515                                   int bytes_in_last_packet)
2516{
2517        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2518                if (transaction->stage == CVMX_USB_STAGE_NON_CONTROL) {
2519                        transaction->stage =
2520                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE;
2521                } else if (buffer_space_left &&
2522                           (bytes_in_last_packet == pipe->max_packet)) {
2523                        transaction->stage = CVMX_USB_STAGE_NON_CONTROL;
2524                } else {
2525                        pipe->next_tx_frame += pipe->interval;
2526                        cvmx_usb_complete(usb, pipe, transaction,
2527                                          CVMX_USB_STATUS_OK);
2528                }
2529        } else if (!buffer_space_left ||
2530                   (bytes_in_last_packet < pipe->max_packet)) {
2531                pipe->next_tx_frame += pipe->interval;
2532                cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK);
2533        }
2534}
2535
2536static void cvmx_usb_transfer_isoc(struct octeon_hcd *usb,
2537                                   struct cvmx_usb_pipe *pipe,
2538                                   struct cvmx_usb_transaction *transaction,
2539                                   int buffer_space_left,
2540                                   int bytes_in_last_packet,
2541                                   int bytes_this_transfer)
2542{
2543        if (cvmx_usb_pipe_needs_split(usb, pipe)) {
2544                /*
2545                 * ISOCHRONOUS OUT splits don't require a complete split stage.
2546                 * Instead they use a sequence of begin OUT splits to transfer
2547                 * the data 188 bytes at a time. Once the transfer is complete,
2548                 * the pipe sleeps until the next schedule interval.
2549                 */
2550                if (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT) {
2551                        /*
2552                         * If no space left or this wasn't a max size packet
2553                         * then this transfer is complete. Otherwise start it
2554                         * again to send the next 188 bytes
2555                         */
2556                        if (!buffer_space_left || (bytes_this_transfer < 188)) {
2557                                pipe->next_tx_frame += pipe->interval;
2558                                cvmx_usb_complete(usb, pipe, transaction,
2559                                                  CVMX_USB_STATUS_OK);
2560                        }
2561                        return;
2562                }
2563                if (transaction->stage ==
2564                    CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE) {
2565                        /*
2566                         * We are in the incoming data phase. Keep getting data
2567                         * until we run out of space or get a small packet
2568                         */
2569                        if ((buffer_space_left == 0) ||
2570                            (bytes_in_last_packet < pipe->max_packet)) {
2571                                pipe->next_tx_frame += pipe->interval;
2572                                cvmx_usb_complete(usb, pipe, transaction,
2573                                                  CVMX_USB_STATUS_OK);
2574                        }
2575                } else {
2576                        transaction->stage =
2577                                CVMX_USB_STAGE_NON_CONTROL_SPLIT_COMPLETE;
2578                }
2579        } else {
2580                pipe->next_tx_frame += pipe->interval;
2581                cvmx_usb_complete(usb, pipe, transaction, CVMX_USB_STATUS_OK);
2582        }
2583}
2584
2585/**
2586 * Poll a channel for status
2587 *
2588 * @usb:     USB device
2589 * @channel: Channel to poll
2590 *
2591 * Returns: Zero on success
2592 */
2593static int cvmx_usb_poll_channel(struct octeon_hcd *usb, int channel)
2594{
2595        struct usb_hcd *hcd = octeon_to_hcd(usb);
2596        struct device *dev = hcd->self.controller;
2597        union cvmx_usbcx_hcintx usbc_hcint;
2598        union cvmx_usbcx_hctsizx usbc_hctsiz;
2599        union cvmx_usbcx_hccharx usbc_hcchar;
2600        struct cvmx_usb_pipe *pipe;
2601        struct cvmx_usb_transaction *transaction;
2602        int bytes_this_transfer;
2603        int bytes_in_last_packet;
2604        int packets_processed;
2605        int buffer_space_left;
2606
2607        /* Read the interrupt status bits for the channel */
2608        usbc_hcint.u32 = cvmx_usb_read_csr32(usb,
2609                                CVMX_USBCX_HCINTX(channel, usb->index));
2610
2611        if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA) {
2612                usbc_hcchar.u32 = cvmx_usb_read_csr32(usb,
2613                                CVMX_USBCX_HCCHARX(channel, usb->index));
2614
2615                if (usbc_hcchar.s.chena && usbc_hcchar.s.chdis) {
2616                        /*
2617                         * There seems to be a bug in CN31XX which can cause
2618                         * interrupt IN transfers to get stuck until we do a
2619                         * write of HCCHARX without changing things
2620                         */
2621                        cvmx_usb_write_csr32(usb,
2622                                             CVMX_USBCX_HCCHARX(channel,
2623                                                                usb->index),
2624                                             usbc_hcchar.u32);
2625                        return 0;
2626                }
2627
2628                /*
2629                 * In non DMA mode the channels don't halt themselves. We need
2630                 * to manually disable channels that are left running
2631                 */
2632                if (!usbc_hcint.s.chhltd) {
2633                        if (usbc_hcchar.s.chena) {
2634                                union cvmx_usbcx_hcintmskx hcintmsk;
2635                                /* Disable all interrupts except CHHLTD */
2636                                hcintmsk.u32 = 0;
2637                                hcintmsk.s.chhltdmsk = 1;
2638                                cvmx_usb_write_csr32(usb,
2639                                                     CVMX_USBCX_HCINTMSKX(channel, usb->index),
2640                                                     hcintmsk.u32);
2641                                usbc_hcchar.s.chdis = 1;
2642                                cvmx_usb_write_csr32(usb,
2643                                                     CVMX_USBCX_HCCHARX(channel, usb->index),
2644                                                     usbc_hcchar.u32);
2645                                return 0;
2646                        } else if (usbc_hcint.s.xfercompl) {
2647                                /*
2648                                 * Successful IN/OUT with transfer complete.
2649                                 * Channel halt isn't needed.
2650                                 */
2651                        } else {
2652                                dev_err(dev, "USB%d: Channel %d interrupt without halt\n",
2653                                        usb->index, channel);
2654                                return 0;
2655                        }
2656                }
2657        } else {
2658                /*
2659                 * There is are no interrupts that we need to process when the
2660                 * channel is still running
2661                 */
2662                if (!usbc_hcint.s.chhltd)
2663                        return 0;
2664        }
2665
2666        /* Disable the channel interrupts now that it is done */
2667        cvmx_usb_write_csr32(usb, CVMX_USBCX_HCINTMSKX(channel, usb->index), 0);
2668        usb->idle_hardware_channels |= (1 << channel);
2669
2670        /* Make sure this channel is tied to a valid pipe */
2671        pipe = usb->pipe_for_channel[channel];
2672        prefetch(pipe);
2673        if (!pipe)
2674                return 0;
2675        transaction = list_first_entry(&pipe->transactions,
2676                                       typeof(*transaction),
2677                                       node);
2678        prefetch(transaction);
2679
2680        /*
2681         * Disconnect this pipe from the HW channel. Later the schedule
2682         * function will figure out which pipe needs to go
2683         */
2684        usb->pipe_for_channel[channel] = NULL;
2685        pipe->flags &= ~CVMX_USB_PIPE_FLAGS_SCHEDULED;
2686
2687        /*
2688         * Read the channel config info so we can figure out how much data
2689         * transferred
2690         */
2691        usbc_hcchar.u32 = cvmx_usb_read_csr32(usb,
2692                        CVMX_USBCX_HCCHARX(channel, usb->index));
2693        usbc_hctsiz.u32 = cvmx_usb_read_csr32(usb,
2694                        CVMX_USBCX_HCTSIZX(channel, usb->index));
2695
2696        /*
2697         * Calculating the number of bytes successfully transferred is dependent
2698         * on the transfer direction
2699         */
2700        packets_processed = transaction->pktcnt - usbc_hctsiz.s.pktcnt;
2701        if (usbc_hcchar.s.epdir) {
2702                /*
2703                 * IN transactions are easy. For every byte received the
2704                 * hardware decrements xfersize. All we need to do is subtract
2705                 * the current value of xfersize from its starting value and we
2706                 * know how many bytes were written to the buffer
2707                 */
2708                bytes_this_transfer = transaction->xfersize -
2709                        usbc_hctsiz.s.xfersize;
2710        } else {
2711                /*
2712                 * OUT transaction don't decrement xfersize. Instead pktcnt is
2713                 * decremented on every successful packet send. The hardware
2714                 * does this when it receives an ACK, or NYET. If it doesn't
2715                 * receive one of these responses pktcnt doesn't change
2716                 */
2717                bytes_this_transfer = packets_processed * usbc_hcchar.s.mps;
2718                /*
2719                 * The last packet may not be a full transfer if we didn't have
2720                 * enough data
2721                 */
2722                if (bytes_this_transfer > transaction->xfersize)
2723                        bytes_this_transfer = transaction->xfersize;
2724        }
2725        /* Figure out how many bytes were in the last packet of the transfer */
2726        if (packets_processed)
2727                bytes_in_last_packet = bytes_this_transfer -
2728                        (packets_processed - 1) * usbc_hcchar.s.mps;
2729        else
2730                bytes_in_last_packet = bytes_this_transfer;
2731
2732        /*
2733         * As a special case, setup transactions output the setup header, not
2734         * the user's data. For this reason we don't count setup data as bytes
2735         * transferred
2736         */
2737        if ((transaction->stage == CVMX_USB_STAGE_SETUP) ||
2738            (transaction->stage == CVMX_USB_STAGE_SETUP_SPLIT_COMPLETE))
2739                bytes_this_transfer = 0;
2740
2741        /*
2742         * Add the bytes transferred to the running total. It is important that
2743         * bytes_this_transfer doesn't count any data that needs to be
2744         * retransmitted
2745         */
2746        transaction->actual_bytes += bytes_this_transfer;
2747        if (transaction->type == CVMX_USB_TRANSFER_ISOCHRONOUS)
2748                buffer_space_left = transaction->iso_packets[0].length -
2749                        transaction->actual_bytes;
2750        else
2751                buffer_space_left = transaction->buffer_length -
2752                        transaction->actual_bytes;
2753
2754        /*
2755         * We need to remember the PID toggle state for the next transaction.
2756         * The hardware already updated it for the next transaction
2757         */
2758        pipe->pid_toggle = !(usbc_hctsiz.s.pid == 0);
2759
2760        /*
2761         * For high speed bulk out, assume the next transaction will need to do
2762         * a ping before proceeding. If this isn't true the ACK processing below
2763         * will clear this flag
2764         */
2765        if ((pipe->device_speed == CVMX_USB_SPEED_HIGH) &&
2766            (pipe->transfer_type == CVMX_USB_TRANSFER_BULK) &&
2767            (pipe->transfer_dir == CVMX_USB_DIRECTION_OUT))
2768                pipe->flags |= CVMX_USB_PIPE_FLAGS_NEED_PING;
2769
2770        if (WARN_ON_ONCE(bytes_this_transfer < 0)) {
2771                /*
2772                 * In some rare cases the DMA engine seems to get stuck and
2773                 * keeps substracting same byte count over and over again. In
2774                 * such case we just need to fail every transaction.
2775                 */
2776                cvmx_usb_complete(usb, pipe, transaction,
2777                                  CVMX_USB_STATUS_ERROR);
2778                return 0;
2779        }
2780
2781        if (usbc_hcint.s.stall) {
2782                /*
2783                 * STALL as a response means this transaction cannot be
2784                 * completed because the device can't process transactions. Tell
2785                 * the user. Any data that was transferred will be counted on
2786                 * the actual bytes transferred
2787                 */
2788                pipe->pid_toggle = 0;
2789                cvmx_usb_complete(usb, pipe, transaction,
2790                                  CVMX_USB_STATUS_STALL);
2791        } else if (usbc_hcint.s.xacterr) {
2792                /*
2793                 * XactErr as a response means the device signaled
2794                 * something wrong with the transfer. For example, PID
2795                 * toggle errors cause these.
2796                 */
2797                cvmx_usb_complete(usb, pipe, transaction,
2798                                  CVMX_USB_STATUS_XACTERR);
2799        } else if (usbc_hcint.s.bblerr) {
2800                /* Babble Error (BblErr) */
2801                cvmx_usb_complete(usb, pipe, transaction,
2802                                  CVMX_USB_STATUS_BABBLEERR);
2803        } else if (usbc_hcint.s.datatglerr) {
2804                /* Data toggle error */
2805                cvmx_usb_complete(usb, pipe, transaction,
2806                                  CVMX_USB_STATUS_DATATGLERR);
2807        } else if (usbc_hcint.s.nyet) {
2808                /*
2809                 * NYET as a response is only allowed in three cases: as a
2810                 * response to a ping, as a response to a split transaction, and
2811                 * as a response to a bulk out. The ping case is handled by
2812                 * hardware, so we only have splits and bulk out
2813                 */
2814                if (!cvmx_usb_pipe_needs_split(usb, pipe)) {
2815                        transaction->retries = 0;
2816                        /*
2817                         * If there is more data to go then we need to try
2818                         * again. Otherwise this transaction is complete
2819                         */
2820                        if ((buffer_space_left == 0) ||
2821                            (bytes_in_last_packet < pipe->max_packet))
2822                                cvmx_usb_complete(usb, pipe,
2823                                                  transaction,
2824                                                  CVMX_USB_STATUS_OK);
2825                } else {
2826                        /*
2827                         * Split transactions retry the split complete 4 times
2828                         * then rewind to the start split and do the entire
2829                         * transactions again
2830                         */
2831                        transaction->retries++;
2832                        if ((transaction->retries & 0x3) == 0) {
2833                                /*
2834                                 * Rewind to the beginning of the transaction by
2835                                 * anding off the split complete bit
2836                                 */
2837                                transaction->stage &= ~1;
2838                                pipe->split_sc_frame = -1;
2839                        }
2840                }
2841        } else if (usbc_hcint.s.ack) {
2842                transaction->retries = 0;
2843                /*
2844                 * The ACK bit can only be checked after the other error bits.
2845                 * This is because a multi packet transfer may succeed in a
2846                 * number of packets and then get a different response on the
2847                 * last packet. In this case both ACK and the last response bit
2848                 * will be set. If none of the other response bits is set, then
2849                 * the last packet must have been an ACK
2850                 *
2851                 * Since we got an ACK, we know we don't need to do a ping on
2852                 * this pipe
2853                 */
2854                pipe->flags &= ~CVMX_USB_PIPE_FLAGS_NEED_PING;
2855
2856                switch (transaction->type) {
2857                case CVMX_USB_TRANSFER_CONTROL:
2858                        cvmx_usb_transfer_control(usb, pipe, transaction,
2859                                                  usbc_hcchar,
2860                                                  buffer_space_left,
2861                                                  bytes_in_last_packet);
2862                        break;
2863                case CVMX_USB_TRANSFER_BULK:
2864                        cvmx_usb_transfer_bulk(usb, pipe, transaction,
2865                                               usbc_hcint, buffer_space_left,
2866                                               bytes_in_last_packet);
2867                        break;
2868                case CVMX_USB_TRANSFER_INTERRUPT:
2869                        cvmx_usb_transfer_intr(usb, pipe, transaction,
2870                                               buffer_space_left,
2871                                               bytes_in_last_packet);
2872                        break;
2873                case CVMX_USB_TRANSFER_ISOCHRONOUS:
2874                        cvmx_usb_transfer_isoc(usb, pipe, transaction,
2875                                               buffer_space_left,
2876                                               bytes_in_last_packet,
2877                                               bytes_this_transfer);
2878                        break;
2879                }
2880        } else if (usbc_hcint.s.nak) {
2881                /*
2882                 * If this was a split then clear our split in progress marker.
2883                 */
2884                if (usb->active_split == transaction)
2885                        usb->active_split = NULL;
2886                /*
2887                 * NAK as a response means the device couldn't accept the
2888                 * transaction, but it should be retried in the future. Rewind
2889                 * to the beginning of the transaction by anding off the split
2890                 * complete bit. Retry in the next interval
2891                 */
2892                transaction->retries = 0;
2893                transaction->stage &= ~1;
2894                pipe->next_tx_frame += pipe->interval;
2895                if (pipe->next_tx_frame < usb->frame_number)
2896                        pipe->next_tx_frame = usb->frame_number +
2897                                pipe->interval -
2898                                (usb->frame_number - pipe->next_tx_frame) %
2899                                pipe->interval;
2900        } else {
2901                struct cvmx_usb_port_status port;
2902
2903                port = cvmx_usb_get_status(usb);
2904                if (port.port_enabled) {
2905                        /* We'll retry the exact same transaction again */
2906                        transaction->retries++;
2907                } else {
2908                        /*
2909                         * We get channel halted interrupts with no result bits
2910                         * sets when the cable is unplugged
2911                         */
2912                        cvmx_usb_complete(usb, pipe, transaction,
2913                                          CVMX_USB_STATUS_ERROR);
2914                }
2915        }
2916        return 0;
2917}
2918
2919static void octeon_usb_port_callback(struct octeon_hcd *usb)
2920{
2921        spin_unlock(&usb->lock);
2922        usb_hcd_poll_rh_status(octeon_to_hcd(usb));
2923        spin_lock(&usb->lock);
2924}
2925
2926/**
2927 * Poll the USB block for status and call all needed callback
2928 * handlers. This function is meant to be called in the interrupt
2929 * handler for the USB controller. It can also be called
2930 * periodically in a loop for non-interrupt based operation.
2931 *
2932 * @usb: USB device state populated by cvmx_usb_initialize().
2933 *
2934 * Returns: 0 or a negative error code.
2935 */
2936static int cvmx_usb_poll(struct octeon_hcd *usb)
2937{
2938        union cvmx_usbcx_hfnum usbc_hfnum;
2939        union cvmx_usbcx_gintsts usbc_gintsts;
2940
2941        prefetch_range(usb, sizeof(*usb));
2942
2943        /* Update the frame counter */
2944        usbc_hfnum.u32 = cvmx_usb_read_csr32(usb, CVMX_USBCX_HFNUM(usb->index));
2945        if ((usb->frame_number & 0x3fff) > usbc_hfnum.s.frnum)
2946                usb->frame_number += 0x4000;
2947        usb->frame_number &= ~0x3fffull;
2948        usb->frame_number |= usbc_hfnum.s.frnum;
2949
2950        /* Read the pending interrupts */
2951        usbc_gintsts.u32 = cvmx_usb_read_csr32(usb,
2952                                               CVMX_USBCX_GINTSTS(usb->index));
2953
2954        /* Clear the interrupts now that we know about them */
2955        cvmx_usb_write_csr32(usb, CVMX_USBCX_GINTSTS(usb->index),
2956                             usbc_gintsts.u32);
2957
2958        if (usbc_gintsts.s.rxflvl) {
2959                /*
2960                 * RxFIFO Non-Empty (RxFLvl)
2961                 * Indicates that there is at least one packet pending to be
2962                 * read from the RxFIFO.
2963                 *
2964                 * In DMA mode this is handled by hardware
2965                 */
2966                if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)
2967                        cvmx_usb_poll_rx_fifo(usb);
2968        }
2969        if (usbc_gintsts.s.ptxfemp || usbc_gintsts.s.nptxfemp) {
2970                /* Fill the Tx FIFOs when not in DMA mode */
2971                if (usb->init_flags & CVMX_USB_INITIALIZE_FLAGS_NO_DMA)
2972                        cvmx_usb_poll_tx_fifo(usb);
2973        }
2974        if (usbc_gintsts.s.disconnint || usbc_gintsts.s.prtint) {
2975                union cvmx_usbcx_hprt usbc_hprt;
2976                /*
2977                 * Disconnect Detected Interrupt (DisconnInt)
2978                 * Asserted when a device disconnect is detected.
2979                 *
2980                 * Host Port Interrupt (PrtInt)
2981                 * The core sets this bit to indicate a change in port status of
2982                 * one of the O2P USB core ports in Host mode. The application
2983                 * must read the Host Port Control and Status (HPRT) register to
2984                 * determine the exact event that caused this interrupt. The
2985                 * application must clear the appropriate status bit in the Host
2986                 * Port Control and Status register to clear this bit.
2987                 *
2988                 * Call the user's port callback
2989                 */
2990                octeon_usb_port_callback(usb);
2991                /* Clear the port change bits */
2992                usbc_hprt.u32 =
2993                        cvmx_usb_read_csr32(usb, CVMX_USBCX_HPRT(usb->index));
2994                usbc_hprt.s.prtena = 0;
2995                cvmx_usb_write_csr32(usb, CVMX_USBCX_HPRT(usb->index),
2996                                     usbc_hprt.u32);
2997        }
2998        if (usbc_gintsts.s.hchint) {
2999                /*
3000                 * Host Channels Interrupt (HChInt)
3001                 * The core sets this bit to indicate that an interrupt is
3002                 * pending on one of the channels of the core (in Host mode).
3003                 * The application must read the Host All Channels Interrupt
3004                 * (HAINT) register to determine the exact number of the channel
3005                 * on which the interrupt occurred, and then read the
3006                 * corresponding Host Channel-n Interrupt (HCINTn) register to
3007                 * determine the exact cause of the interrupt. The application
3008                 * must clear the appropriate status bit in the HCINTn register
3009                 * to clear this bit.
3010                 */
3011                union cvmx_usbcx_haint usbc_haint;
3012
3013                usbc_haint.u32 = cvmx_usb_read_csr32(usb,
3014                                        CVMX_USBCX_HAINT(usb->index));
3015                while (usbc_haint.u32) {
3016                        int channel;
3017
3018                        channel = __fls(usbc_haint.u32);
3019                        cvmx_usb_poll_channel(usb, channel);
3020                        usbc_haint.u32 ^= 1 << channel;
3021                }
3022        }
3023
3024        cvmx_usb_schedule(usb, usbc_gintsts.s.sof);
3025
3026        return 0;
3027}
3028
3029/* convert between an HCD pointer and the corresponding struct octeon_hcd */
3030static inline struct octeon_hcd *hcd_to_octeon(struct usb_hcd *hcd)
3031{
3032        return (struct octeon_hcd *)(hcd->hcd_priv);
3033}
3034
3035static irqreturn_t octeon_usb_irq(struct usb_hcd *hcd)
3036{
3037        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3038        unsigned long flags;
3039
3040        spin_lock_irqsave(&usb->lock, flags);
3041        cvmx_usb_poll(usb);
3042        spin_unlock_irqrestore(&usb->lock, flags);
3043        return IRQ_HANDLED;
3044}
3045
3046static int octeon_usb_start(struct usb_hcd *hcd)
3047{
3048        hcd->state = HC_STATE_RUNNING;
3049        return 0;
3050}
3051
3052static void octeon_usb_stop(struct usb_hcd *hcd)
3053{
3054        hcd->state = HC_STATE_HALT;
3055}
3056
3057static int octeon_usb_get_frame_number(struct usb_hcd *hcd)
3058{
3059        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3060
3061        return cvmx_usb_get_frame_number(usb);
3062}
3063
3064static int octeon_usb_urb_enqueue(struct usb_hcd *hcd,
3065                                  struct urb *urb,
3066                                  gfp_t mem_flags)
3067{
3068        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3069        struct device *dev = hcd->self.controller;
3070        struct cvmx_usb_transaction *transaction = NULL;
3071        struct cvmx_usb_pipe *pipe;
3072        unsigned long flags;
3073        struct cvmx_usb_iso_packet *iso_packet;
3074        struct usb_host_endpoint *ep = urb->ep;
3075        int rc;
3076
3077        urb->status = 0;
3078        spin_lock_irqsave(&usb->lock, flags);
3079
3080        rc = usb_hcd_link_urb_to_ep(hcd, urb);
3081        if (rc) {
3082                spin_unlock_irqrestore(&usb->lock, flags);
3083                return rc;
3084        }
3085
3086        if (!ep->hcpriv) {
3087                enum cvmx_usb_transfer transfer_type;
3088                enum cvmx_usb_speed speed;
3089                int split_device = 0;
3090                int split_port = 0;
3091
3092                switch (usb_pipetype(urb->pipe)) {
3093                case PIPE_ISOCHRONOUS:
3094                        transfer_type = CVMX_USB_TRANSFER_ISOCHRONOUS;
3095                        break;
3096                case PIPE_INTERRUPT:
3097                        transfer_type = CVMX_USB_TRANSFER_INTERRUPT;
3098                        break;
3099                case PIPE_CONTROL:
3100                        transfer_type = CVMX_USB_TRANSFER_CONTROL;
3101                        break;
3102                default:
3103                        transfer_type = CVMX_USB_TRANSFER_BULK;
3104                        break;
3105                }
3106                switch (urb->dev->speed) {
3107                case USB_SPEED_LOW:
3108                        speed = CVMX_USB_SPEED_LOW;
3109                        break;
3110                case USB_SPEED_FULL:
3111                        speed = CVMX_USB_SPEED_FULL;
3112                        break;
3113                default:
3114                        speed = CVMX_USB_SPEED_HIGH;
3115                        break;
3116                }
3117                /*
3118                 * For slow devices on high speed ports we need to find the hub
3119                 * that does the speed translation so we know where to send the
3120                 * split transactions.
3121                 */
3122                if (speed != CVMX_USB_SPEED_HIGH) {
3123                        /*
3124                         * Start at this device and work our way up the usb
3125                         * tree.
3126                         */
3127                        struct usb_device *dev = urb->dev;
3128
3129                        while (dev->parent) {
3130                                /*
3131                                 * If our parent is high speed then he'll
3132                                 * receive the splits.
3133                                 */
3134                                if (dev->parent->speed == USB_SPEED_HIGH) {
3135                                        split_device = dev->parent->devnum;
3136                                        split_port = dev->portnum;
3137                                        break;
3138                                }
3139                                /*
3140                                 * Move up the tree one level. If we make it all
3141                                 * the way up the tree, then the port must not
3142                                 * be in high speed mode and we don't need a
3143                                 * split.
3144                                 */
3145                                dev = dev->parent;
3146                        }
3147                }
3148                pipe = cvmx_usb_open_pipe(usb, usb_pipedevice(urb->pipe),
3149                                          usb_pipeendpoint(urb->pipe), speed,
3150                                          le16_to_cpu(ep->desc.wMaxPacketSize)
3151                                          & 0x7ff,
3152                                          transfer_type,
3153                                          usb_pipein(urb->pipe) ?
3154                                                CVMX_USB_DIRECTION_IN :
3155                                                CVMX_USB_DIRECTION_OUT,
3156                                          urb->interval,
3157                                          (le16_to_cpu(ep->desc.wMaxPacketSize)
3158                                           >> 11) & 0x3,
3159                                          split_device, split_port);
3160                if (!pipe) {
3161                        usb_hcd_unlink_urb_from_ep(hcd, urb);
3162                        spin_unlock_irqrestore(&usb->lock, flags);
3163                        dev_dbg(dev, "Failed to create pipe\n");
3164                        return -ENOMEM;
3165                }
3166                ep->hcpriv = pipe;
3167        } else {
3168                pipe = ep->hcpriv;
3169        }
3170
3171        switch (usb_pipetype(urb->pipe)) {
3172        case PIPE_ISOCHRONOUS:
3173                dev_dbg(dev, "Submit isochronous to %d.%d\n",
3174                        usb_pipedevice(urb->pipe),
3175                        usb_pipeendpoint(urb->pipe));
3176                /*
3177                 * Allocate a structure to use for our private list of
3178                 * isochronous packets.
3179                 */
3180                iso_packet = kmalloc_array(urb->number_of_packets,
3181                                           sizeof(struct cvmx_usb_iso_packet),
3182                                           GFP_ATOMIC);
3183                if (iso_packet) {
3184                        int i;
3185                        /* Fill the list with the data from the URB */
3186                        for (i = 0; i < urb->number_of_packets; i++) {
3187                                iso_packet[i].offset =
3188                                        urb->iso_frame_desc[i].offset;
3189                                iso_packet[i].length =
3190                                        urb->iso_frame_desc[i].length;
3191                                iso_packet[i].status = CVMX_USB_STATUS_ERROR;
3192                        }
3193                        /*
3194                         * Store a pointer to the list in the URB setup_packet
3195                         * field. We know this currently isn't being used and
3196                         * this saves us a bunch of logic.
3197                         */
3198                        urb->setup_packet = (char *)iso_packet;
3199                        transaction = cvmx_usb_submit_isochronous(usb,
3200                                                                  pipe, urb);
3201                        /*
3202                         * If submit failed we need to free our private packet
3203                         * list.
3204                         */
3205                        if (!transaction) {
3206                                urb->setup_packet = NULL;
3207                                kfree(iso_packet);
3208                        }
3209                }
3210                break;
3211        case PIPE_INTERRUPT:
3212                dev_dbg(dev, "Submit interrupt to %d.%d\n",
3213                        usb_pipedevice(urb->pipe),
3214                        usb_pipeendpoint(urb->pipe));
3215                transaction = cvmx_usb_submit_interrupt(usb, pipe, urb);
3216                break;
3217        case PIPE_CONTROL:
3218                dev_dbg(dev, "Submit control to %d.%d\n",
3219                        usb_pipedevice(urb->pipe),
3220                        usb_pipeendpoint(urb->pipe));
3221                transaction = cvmx_usb_submit_control(usb, pipe, urb);
3222                break;
3223        case PIPE_BULK:
3224                dev_dbg(dev, "Submit bulk to %d.%d\n",
3225                        usb_pipedevice(urb->pipe),
3226                        usb_pipeendpoint(urb->pipe));
3227                transaction = cvmx_usb_submit_bulk(usb, pipe, urb);
3228                break;
3229        }
3230        if (!transaction) {
3231                usb_hcd_unlink_urb_from_ep(hcd, urb);
3232                spin_unlock_irqrestore(&usb->lock, flags);
3233                dev_dbg(dev, "Failed to submit\n");
3234                return -ENOMEM;
3235        }
3236        urb->hcpriv = transaction;
3237        spin_unlock_irqrestore(&usb->lock, flags);
3238        return 0;
3239}
3240
3241static int octeon_usb_urb_dequeue(struct usb_hcd *hcd,
3242                                  struct urb *urb,
3243                                  int status)
3244{
3245        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3246        unsigned long flags;
3247        int rc;
3248
3249        if (!urb->dev)
3250                return -EINVAL;
3251
3252        spin_lock_irqsave(&usb->lock, flags);
3253
3254        rc = usb_hcd_check_unlink_urb(hcd, urb, status);
3255        if (rc)
3256                goto out;
3257
3258        urb->status = status;
3259        cvmx_usb_cancel(usb, urb->ep->hcpriv, urb->hcpriv);
3260
3261out:
3262        spin_unlock_irqrestore(&usb->lock, flags);
3263
3264        return rc;
3265}
3266
3267static void octeon_usb_endpoint_disable(struct usb_hcd *hcd,
3268                                        struct usb_host_endpoint *ep)
3269{
3270        struct device *dev = hcd->self.controller;
3271
3272        if (ep->hcpriv) {
3273                struct octeon_hcd *usb = hcd_to_octeon(hcd);
3274                struct cvmx_usb_pipe *pipe = ep->hcpriv;
3275                unsigned long flags;
3276
3277                spin_lock_irqsave(&usb->lock, flags);
3278                cvmx_usb_cancel_all(usb, pipe);
3279                if (cvmx_usb_close_pipe(usb, pipe))
3280                        dev_dbg(dev, "Closing pipe %p failed\n", pipe);
3281                spin_unlock_irqrestore(&usb->lock, flags);
3282                ep->hcpriv = NULL;
3283        }
3284}
3285
3286static int octeon_usb_hub_status_data(struct usb_hcd *hcd, char *buf)
3287{
3288        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3289        struct cvmx_usb_port_status port_status;
3290        unsigned long flags;
3291
3292        spin_lock_irqsave(&usb->lock, flags);
3293        port_status = cvmx_usb_get_status(usb);
3294        spin_unlock_irqrestore(&usb->lock, flags);
3295        buf[0] = port_status.connect_change << 1;
3296
3297        return buf[0] != 0;
3298}
3299
3300static int octeon_usb_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
3301                                  u16 wIndex, char *buf, u16 wLength)
3302{
3303        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3304        struct device *dev = hcd->self.controller;
3305        struct cvmx_usb_port_status usb_port_status;
3306        int port_status;
3307        struct usb_hub_descriptor *desc;
3308        unsigned long flags;
3309
3310        switch (typeReq) {
3311        case ClearHubFeature:
3312                dev_dbg(dev, "ClearHubFeature\n");
3313                switch (wValue) {
3314                case C_HUB_LOCAL_POWER:
3315                case C_HUB_OVER_CURRENT:
3316                        /* Nothing required here */
3317                        break;
3318                default:
3319                        return -EINVAL;
3320                }
3321                break;
3322        case ClearPortFeature:
3323                dev_dbg(dev, "ClearPortFeature\n");
3324                if (wIndex != 1) {
3325                        dev_dbg(dev, " INVALID\n");
3326                        return -EINVAL;
3327                }
3328
3329                switch (wValue) {
3330                case USB_PORT_FEAT_ENABLE:
3331                        dev_dbg(dev, " ENABLE\n");
3332                        spin_lock_irqsave(&usb->lock, flags);
3333                        cvmx_usb_disable(usb);
3334                        spin_unlock_irqrestore(&usb->lock, flags);
3335                        break;
3336                case USB_PORT_FEAT_SUSPEND:
3337                        dev_dbg(dev, " SUSPEND\n");
3338                        /* Not supported on Octeon */
3339                        break;
3340                case USB_PORT_FEAT_POWER:
3341                        dev_dbg(dev, " POWER\n");
3342                        /* Not supported on Octeon */
3343                        break;
3344                case USB_PORT_FEAT_INDICATOR:
3345                        dev_dbg(dev, " INDICATOR\n");
3346                        /* Port inidicator not supported */
3347                        break;
3348                case USB_PORT_FEAT_C_CONNECTION:
3349                        dev_dbg(dev, " C_CONNECTION\n");
3350                        /* Clears drivers internal connect status change flag */
3351                        spin_lock_irqsave(&usb->lock, flags);
3352                        usb->port_status = cvmx_usb_get_status(usb);
3353                        spin_unlock_irqrestore(&usb->lock, flags);
3354                        break;
3355                case USB_PORT_FEAT_C_RESET:
3356                        dev_dbg(dev, " C_RESET\n");
3357                        /*
3358                         * Clears the driver's internal Port Reset Change flag.
3359                         */
3360                        spin_lock_irqsave(&usb->lock, flags);
3361                        usb->port_status = cvmx_usb_get_status(usb);
3362                        spin_unlock_irqrestore(&usb->lock, flags);
3363                        break;
3364                case USB_PORT_FEAT_C_ENABLE:
3365                        dev_dbg(dev, " C_ENABLE\n");
3366                        /*
3367                         * Clears the driver's internal Port Enable/Disable
3368                         * Change flag.
3369                         */
3370                        spin_lock_irqsave(&usb->lock, flags);
3371                        usb->port_status = cvmx_usb_get_status(usb);
3372                        spin_unlock_irqrestore(&usb->lock, flags);
3373                        break;
3374                case USB_PORT_FEAT_C_SUSPEND:
3375                        dev_dbg(dev, " C_SUSPEND\n");
3376                        /*
3377                         * Clears the driver's internal Port Suspend Change
3378                         * flag, which is set when resume signaling on the host
3379                         * port is complete.
3380                         */
3381                        break;
3382                case USB_PORT_FEAT_C_OVER_CURRENT:
3383                        dev_dbg(dev, " C_OVER_CURRENT\n");
3384                        /* Clears the driver's overcurrent Change flag */
3385                        spin_lock_irqsave(&usb->lock, flags);
3386                        usb->port_status = cvmx_usb_get_status(usb);
3387                        spin_unlock_irqrestore(&usb->lock, flags);
3388                        break;
3389                default:
3390                        dev_dbg(dev, " UNKNOWN\n");
3391                        return -EINVAL;
3392                }
3393                break;
3394        case GetHubDescriptor:
3395                dev_dbg(dev, "GetHubDescriptor\n");
3396                desc = (struct usb_hub_descriptor *)buf;
3397                desc->bDescLength = 9;
3398                desc->bDescriptorType = 0x29;
3399                desc->bNbrPorts = 1;
3400                desc->wHubCharacteristics = cpu_to_le16(0x08);
3401                desc->bPwrOn2PwrGood = 1;
3402                desc->bHubContrCurrent = 0;
3403                desc->u.hs.DeviceRemovable[0] = 0;
3404                desc->u.hs.DeviceRemovable[1] = 0xff;
3405                break;
3406        case GetHubStatus:
3407                dev_dbg(dev, "GetHubStatus\n");
3408                *(__le32 *)buf = 0;
3409                break;
3410        case GetPortStatus:
3411                dev_dbg(dev, "GetPortStatus\n");
3412                if (wIndex != 1) {
3413                        dev_dbg(dev, " INVALID\n");
3414                        return -EINVAL;
3415                }
3416
3417                spin_lock_irqsave(&usb->lock, flags);
3418                usb_port_status = cvmx_usb_get_status(usb);
3419                spin_unlock_irqrestore(&usb->lock, flags);
3420                port_status = 0;
3421
3422                if (usb_port_status.connect_change) {
3423                        port_status |= (1 << USB_PORT_FEAT_C_CONNECTION);
3424                        dev_dbg(dev, " C_CONNECTION\n");
3425                }
3426
3427                if (usb_port_status.port_enabled) {
3428                        port_status |= (1 << USB_PORT_FEAT_C_ENABLE);
3429                        dev_dbg(dev, " C_ENABLE\n");
3430                }
3431
3432                if (usb_port_status.connected) {
3433                        port_status |= (1 << USB_PORT_FEAT_CONNECTION);
3434                        dev_dbg(dev, " CONNECTION\n");
3435                }
3436
3437                if (usb_port_status.port_enabled) {
3438                        port_status |= (1 << USB_PORT_FEAT_ENABLE);
3439                        dev_dbg(dev, " ENABLE\n");
3440                }
3441
3442                if (usb_port_status.port_over_current) {
3443                        port_status |= (1 << USB_PORT_FEAT_OVER_CURRENT);
3444                        dev_dbg(dev, " OVER_CURRENT\n");
3445                }
3446
3447                if (usb_port_status.port_powered) {
3448                        port_status |= (1 << USB_PORT_FEAT_POWER);
3449                        dev_dbg(dev, " POWER\n");
3450                }
3451
3452                if (usb_port_status.port_speed == CVMX_USB_SPEED_HIGH) {
3453                        port_status |= USB_PORT_STAT_HIGH_SPEED;
3454                        dev_dbg(dev, " HIGHSPEED\n");
3455                } else if (usb_port_status.port_speed == CVMX_USB_SPEED_LOW) {
3456                        port_status |= (1 << USB_PORT_FEAT_LOWSPEED);
3457                        dev_dbg(dev, " LOWSPEED\n");
3458                }
3459
3460                *((__le32 *)buf) = cpu_to_le32(port_status);
3461                break;
3462        case SetHubFeature:
3463                dev_dbg(dev, "SetHubFeature\n");
3464                /* No HUB features supported */
3465                break;
3466        case SetPortFeature:
3467                dev_dbg(dev, "SetPortFeature\n");
3468                if (wIndex != 1) {
3469                        dev_dbg(dev, " INVALID\n");
3470                        return -EINVAL;
3471                }
3472
3473                switch (wValue) {
3474                case USB_PORT_FEAT_SUSPEND:
3475                        dev_dbg(dev, " SUSPEND\n");
3476                        return -EINVAL;
3477                case USB_PORT_FEAT_POWER:
3478                        dev_dbg(dev, " POWER\n");
3479                        /*
3480                         * Program the port power bit to drive VBUS on the USB.
3481                         */
3482                        spin_lock_irqsave(&usb->lock, flags);
3483                        USB_SET_FIELD32(CVMX_USBCX_HPRT(usb->index),
3484                                        cvmx_usbcx_hprt, prtpwr, 1);
3485                        spin_unlock_irqrestore(&usb->lock, flags);
3486                        return 0;
3487                case USB_PORT_FEAT_RESET:
3488                        dev_dbg(dev, " RESET\n");
3489                        spin_lock_irqsave(&usb->lock, flags);
3490                        cvmx_usb_reset_port(usb);
3491                        spin_unlock_irqrestore(&usb->lock, flags);
3492                        return 0;
3493                case USB_PORT_FEAT_INDICATOR:
3494                        dev_dbg(dev, " INDICATOR\n");
3495                        /* Not supported */
3496                        break;
3497                default:
3498                        dev_dbg(dev, " UNKNOWN\n");
3499                        return -EINVAL;
3500                }
3501                break;
3502        default:
3503                dev_dbg(dev, "Unknown root hub request\n");
3504                return -EINVAL;
3505        }
3506        return 0;
3507}
3508
3509static const struct hc_driver octeon_hc_driver = {
3510        .description            = "Octeon USB",
3511        .product_desc           = "Octeon Host Controller",
3512        .hcd_priv_size          = sizeof(struct octeon_hcd),
3513        .irq                    = octeon_usb_irq,
3514        .flags                  = HCD_MEMORY | HCD_DMA | HCD_USB2,
3515        .start                  = octeon_usb_start,
3516        .stop                   = octeon_usb_stop,
3517        .urb_enqueue            = octeon_usb_urb_enqueue,
3518        .urb_dequeue            = octeon_usb_urb_dequeue,
3519        .endpoint_disable       = octeon_usb_endpoint_disable,
3520        .get_frame_number       = octeon_usb_get_frame_number,
3521        .hub_status_data        = octeon_usb_hub_status_data,
3522        .hub_control            = octeon_usb_hub_control,
3523        .map_urb_for_dma        = octeon_map_urb_for_dma,
3524        .unmap_urb_for_dma      = octeon_unmap_urb_for_dma,
3525};
3526
3527static int octeon_usb_probe(struct platform_device *pdev)
3528{
3529        int status;
3530        int initialize_flags;
3531        int usb_num;
3532        struct resource *res_mem;
3533        struct device_node *usbn_node;
3534        int irq = platform_get_irq(pdev, 0);
3535        struct device *dev = &pdev->dev;
3536        struct octeon_hcd *usb;
3537        struct usb_hcd *hcd;
3538        u32 clock_rate = 48000000;
3539        bool is_crystal_clock = false;
3540        const char *clock_type;
3541        int i;
3542
3543        if (!dev->of_node) {
3544                dev_err(dev, "Error: empty of_node\n");
3545                return -ENXIO;
3546        }
3547        usbn_node = dev->of_node->parent;
3548
3549        i = of_property_read_u32(usbn_node,
3550                                 "clock-frequency", &clock_rate);
3551        if (i)
3552                i = of_property_read_u32(usbn_node,
3553                                         "refclk-frequency", &clock_rate);
3554        if (i) {
3555                dev_err(dev, "No USBN \"clock-frequency\"\n");
3556                return -ENXIO;
3557        }
3558        switch (clock_rate) {
3559        case 12000000:
3560                initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_12MHZ;
3561                break;
3562        case 24000000:
3563                initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_24MHZ;
3564                break;
3565        case 48000000:
3566                initialize_flags = CVMX_USB_INITIALIZE_FLAGS_CLOCK_48MHZ;
3567                break;
3568        default:
3569                dev_err(dev, "Illegal USBN \"clock-frequency\" %u\n",
3570                        clock_rate);
3571                return -ENXIO;
3572        }
3573
3574        i = of_property_read_string(usbn_node,
3575                                    "cavium,refclk-type", &clock_type);
3576        if (i)
3577                i = of_property_read_string(usbn_node,
3578                                            "refclk-type", &clock_type);
3579
3580        if (!i && strcmp("crystal", clock_type) == 0)
3581                is_crystal_clock = true;
3582
3583        if (is_crystal_clock)
3584                initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_XI;
3585        else
3586                initialize_flags |= CVMX_USB_INITIALIZE_FLAGS_CLOCK_XO_GND;
3587
3588        res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
3589        if (!res_mem) {
3590                dev_err(dev, "found no memory resource\n");
3591                return -ENXIO;
3592        }
3593        usb_num = (res_mem->start >> 44) & 1;
3594
3595        if (irq < 0) {
3596                /* Defective device tree, but we know how to fix it. */
3597                irq_hw_number_t hwirq = usb_num ? (1 << 6) + 17 : 56;
3598
3599                irq = irq_create_mapping(NULL, hwirq);
3600        }
3601
3602        /*
3603         * Set the DMA mask to 64bits so we get buffers already translated for
3604         * DMA.
3605         */
3606        i = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(64));
3607        if (i)
3608                return i;
3609
3610        /*
3611         * Only cn52XX and cn56XX have DWC_OTG USB hardware and the
3612         * IOB priority registers.  Under heavy network load USB
3613         * hardware can be starved by the IOB causing a crash.  Give
3614         * it a priority boost if it has been waiting more than 400
3615         * cycles to avoid this situation.
3616         *
3617         * Testing indicates that a cnt_val of 8192 is not sufficient,
3618         * but no failures are seen with 4096.  We choose a value of
3619         * 400 to give a safety factor of 10.
3620         */
3621        if (OCTEON_IS_MODEL(OCTEON_CN52XX) || OCTEON_IS_MODEL(OCTEON_CN56XX)) {
3622                union cvmx_iob_n2c_l2c_pri_cnt pri_cnt;
3623
3624                pri_cnt.u64 = 0;
3625                pri_cnt.s.cnt_enb = 1;
3626                pri_cnt.s.cnt_val = 400;
3627                cvmx_write_csr(CVMX_IOB_N2C_L2C_PRI_CNT, pri_cnt.u64);
3628        }
3629
3630        hcd = usb_create_hcd(&octeon_hc_driver, dev, dev_name(dev));
3631        if (!hcd) {
3632                dev_dbg(dev, "Failed to allocate memory for HCD\n");
3633                return -1;
3634        }
3635        hcd->uses_new_polling = 1;
3636        usb = (struct octeon_hcd *)hcd->hcd_priv;
3637
3638        spin_lock_init(&usb->lock);
3639
3640        usb->init_flags = initialize_flags;
3641
3642        /* Initialize the USB state structure */
3643        usb->index = usb_num;
3644        INIT_LIST_HEAD(&usb->idle_pipes);
3645        for (i = 0; i < ARRAY_SIZE(usb->active_pipes); i++)
3646                INIT_LIST_HEAD(&usb->active_pipes[i]);
3647
3648        /* Due to an errata, CN31XX doesn't support DMA */
3649        if (OCTEON_IS_MODEL(OCTEON_CN31XX)) {
3650                usb->init_flags |= CVMX_USB_INITIALIZE_FLAGS_NO_DMA;
3651                /* Only use one channel with non DMA */
3652                usb->idle_hardware_channels = 0x1;
3653        } else if (OCTEON_IS_MODEL(OCTEON_CN5XXX)) {
3654                /* CN5XXX have an errata with channel 3 */
3655                usb->idle_hardware_channels = 0xf7;
3656        } else {
3657                usb->idle_hardware_channels = 0xff;
3658        }
3659
3660        status = cvmx_usb_initialize(dev, usb);
3661        if (status) {
3662                dev_dbg(dev, "USB initialization failed with %d\n", status);
3663                usb_put_hcd(hcd);
3664                return -1;
3665        }
3666
3667        status = usb_add_hcd(hcd, irq, 0);
3668        if (status) {
3669                dev_dbg(dev, "USB add HCD failed with %d\n", status);
3670                usb_put_hcd(hcd);
3671                return -1;
3672        }
3673        device_wakeup_enable(hcd->self.controller);
3674
3675        dev_info(dev, "Registered HCD for port %d on irq %d\n", usb_num, irq);
3676
3677        return 0;
3678}
3679
3680static int octeon_usb_remove(struct platform_device *pdev)
3681{
3682        int status;
3683        struct device *dev = &pdev->dev;
3684        struct usb_hcd *hcd = dev_get_drvdata(dev);
3685        struct octeon_hcd *usb = hcd_to_octeon(hcd);
3686        unsigned long flags;
3687
3688        usb_remove_hcd(hcd);
3689        spin_lock_irqsave(&usb->lock, flags);
3690        status = cvmx_usb_shutdown(usb);
3691        spin_unlock_irqrestore(&usb->lock, flags);
3692        if (status)
3693                dev_dbg(dev, "USB shutdown failed with %d\n", status);
3694
3695        usb_put_hcd(hcd);
3696
3697        return 0;
3698}
3699
3700static const struct of_device_id octeon_usb_match[] = {
3701        {
3702                .compatible = "cavium,octeon-5750-usbc",
3703        },
3704        {},
3705};
3706MODULE_DEVICE_TABLE(of, octeon_usb_match);
3707
3708static struct platform_driver octeon_usb_driver = {
3709        .driver = {
3710                .name           = "octeon-hcd",
3711                .of_match_table = octeon_usb_match,
3712        },
3713        .probe      = octeon_usb_probe,
3714        .remove     = octeon_usb_remove,
3715};
3716
3717static int __init octeon_usb_driver_init(void)
3718{
3719        if (usb_disabled())
3720                return 0;
3721
3722        return platform_driver_register(&octeon_usb_driver);
3723}
3724module_init(octeon_usb_driver_init);
3725
3726static void __exit octeon_usb_driver_exit(void)
3727{
3728        if (usb_disabled())
3729                return;
3730
3731        platform_driver_unregister(&octeon_usb_driver);
3732}
3733module_exit(octeon_usb_driver_exit);
3734
3735MODULE_LICENSE("GPL");
3736MODULE_AUTHOR("Cavium, Inc. <support@cavium.com>");
3737MODULE_DESCRIPTION("Cavium Inc. OCTEON USB Host driver.");
3738