usb: patches for v3.17 merge window

Surprisingly enough, while a big set of patches, the majority is
 composed of cleanups (using devm_*, fixing sparse errors, moving
 code around, adding const, etc).
 
 The highlights are addition of new support for PLX USB338x devices,
 and support for USB 2.0-only configurations of the DWC3 IP core.
 
 Signed-of-by: Felipe Balbi <balbi@ti.com>
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJTzTI9AAoJEIaOsuA1yqREIqcQAJbwMaDb5sp8dWst+nL1Vo8N
 08bhOOM+o2KLiIBSNQh1hYtujpa06RSQMiNYZ7F/+R4Q3OAoq+uC0dD69TLEQ3Sd
 1xi0UgUTAvtXo13TToRjIi0mYywrrkZ91Maqff5jZKdslOY4ZfAScpUQHyD3i1UO
 JNUqpayYAnp8JJIGQ8CG1wAeJh/J8JH3O607vaknKVjds+WMkeC5ubnuV4sgVw71
 8JTwxk22EkMTr2MKhHjZwcv016NMEvziinWVoTXcWN2Uwk42Dn1nhfaYWSvg7kZE
 8/3t6zzdFMdoeeTEn2xXIQGTjbHW0sBS5+S+6PAon2YbjS3x40cbyLJnZ+KoVXog
 iHDKAl5w53gd/7qMiv57dW+HRP0M7/m2iy/owIrY8H8DkM3uwFevaeq/G2raJKmA
 frB1k95bSyypN7wVkALYv4nurP5+d7ERy9hPj/49M5giJXPpEIbgKN2qGdafaEx7
 xzAI+GqYrFtmmg25+f6AQRicVczQNMCdDT8HPZ04099Z2JVY/4uOoqTl29CePMgo
 OXeQ45ECMoJuRSwpF56e8h+qmsXp6WD31IhlcHseTvUvFu0Ex4SgUJhFP2UaF9WP
 aOqz0w36yX/ME3VhQk9YImNqGoqEk6fYHIHhxfdDugt0n68+M56EiiwtKvd5v5BI
 hCJAMBrv+WCGnJvWunVW
 =aJY4
 -----END PGP SIGNATURE-----

Merge tag 'usb-for-v3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-next

Felipe writes:

usb: patches for v3.17 merge window

Surprisingly enough, while a big set of patches, the majority is
composed of cleanups (using devm_*, fixing sparse errors, moving
code around, adding const, etc).

The highlights are addition of new support for PLX USB338x devices,
and support for USB 2.0-only configurations of the DWC3 IP core.

Signed-of-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
Greg Kroah-Hartman 2014-07-21 11:33:41 -07:00
commit 61fe2d75f1
159 changed files with 7024 additions and 4938 deletions

View file

@ -386,6 +386,21 @@ struct usb_composite_driver {
extern int usb_composite_probe(struct usb_composite_driver *driver);
extern void usb_composite_unregister(struct usb_composite_driver *driver);
/**
* module_usb_composite_driver() - Helper macro for registering a USB gadget
* composite driver
* @__usb_composite_driver: usb_composite_driver struct
*
* Helper macro for USB gadget composite drivers which do not do anything
* special in module init/exit. This eliminates a lot of boilerplate. Each
* module may only use this macro once, and calling it replaces module_init()
* and module_exit()
*/
#define module_usb_composite_driver(__usb_composite_driver) \
module_driver(__usb_composite_driver, usb_composite_probe, \
usb_composite_unregister)
extern void usb_composite_setup_continue(struct usb_composite_dev *cdev);
extern int composite_dev_prepare(struct usb_composite_driver *composite,
struct usb_composite_dev *cdev);

View file

@ -153,6 +153,9 @@ struct renesas_usbhs_driver_param {
*/
int pio_dma_border; /* default is 64byte */
u32 type;
u32 enable_gpio;
/*
* option:
*/
@ -160,6 +163,9 @@ struct renesas_usbhs_driver_param {
u32 has_sudmac:1; /* for SUDMAC */
};
#define USBHS_TYPE_R8A7790 1
#define USBHS_TYPE_R8A7791 2
/*
* option:
*

199
include/linux/usb/usb338x.h Normal file
View file

@ -0,0 +1,199 @@
/*
* USB 338x super/high/full speed USB device controller.
* Unlike many such controllers, this one talks PCI.
*
* Copyright (C) 2002 NetChip Technology, Inc. (http://www.netchip.com)
* Copyright (C) 2003 David Brownell
* Copyright (C) 2014 Ricardo Ribalda - Qtechnology/AS
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __LINUX_USB_USB338X_H
#define __LINUX_USB_USB338X_H
#include <linux/usb/net2280.h>
/*
* Extra defined bits for net2280 registers
*/
#define SCRATCH 0x0b
#define DEFECT7374_FSM_FIELD 28
#define SUPER_SPEED 8
#define DMA_REQUEST_OUTSTANDING 5
#define DMA_PAUSE_DONE_INTERRUPT 26
#define SET_ISOCHRONOUS_DELAY 24
#define SET_SEL 22
#define SUPER_SPEED_MODE 8
/*ep_cfg*/
#define MAX_BURST_SIZE 24
#define EP_FIFO_BYTE_COUNT 16
#define IN_ENDPOINT_ENABLE 14
#define IN_ENDPOINT_TYPE 12
#define OUT_ENDPOINT_ENABLE 10
#define OUT_ENDPOINT_TYPE 8
struct usb338x_usb_ext_regs {
u32 usbclass;
#define DEVICE_PROTOCOL 16
#define DEVICE_SUB_CLASS 8
#define DEVICE_CLASS 0
u32 ss_sel;
#define U2_SYSTEM_EXIT_LATENCY 8
#define U1_SYSTEM_EXIT_LATENCY 0
u32 ss_del;
#define U2_DEVICE_EXIT_LATENCY 8
#define U1_DEVICE_EXIT_LATENCY 0
u32 usb2lpm;
#define USB_L1_LPM_HIRD 2
#define USB_L1_LPM_REMOTE_WAKE 1
#define USB_L1_LPM_SUPPORT 0
u32 usb3belt;
#define BELT_MULTIPLIER 10
#define BEST_EFFORT_LATENCY_TOLERANCE 0
u32 usbctl2;
#define LTM_ENABLE 7
#define U2_ENABLE 6
#define U1_ENABLE 5
#define FUNCTION_SUSPEND 4
#define USB3_CORE_ENABLE 3
#define USB2_CORE_ENABLE 2
#define SERIAL_NUMBER_STRING_ENABLE 0
u32 in_timeout;
#define GPEP3_TIMEOUT 19
#define GPEP2_TIMEOUT 18
#define GPEP1_TIMEOUT 17
#define GPEP0_TIMEOUT 16
#define GPEP3_TIMEOUT_VALUE 13
#define GPEP3_TIMEOUT_ENABLE 12
#define GPEP2_TIMEOUT_VALUE 9
#define GPEP2_TIMEOUT_ENABLE 8
#define GPEP1_TIMEOUT_VALUE 5
#define GPEP1_TIMEOUT_ENABLE 4
#define GPEP0_TIMEOUT_VALUE 1
#define GPEP0_TIMEOUT_ENABLE 0
u32 isodelay;
#define ISOCHRONOUS_DELAY 0
} __packed;
struct usb338x_fifo_regs {
/* offset 0x0500, 0x0520, 0x0540, 0x0560, 0x0580 */
u32 ep_fifo_size_base;
#define IN_FIFO_BASE_ADDRESS 22
#define IN_FIFO_SIZE 16
#define OUT_FIFO_BASE_ADDRESS 6
#define OUT_FIFO_SIZE 0
u32 ep_fifo_out_wrptr;
u32 ep_fifo_out_rdptr;
u32 ep_fifo_in_wrptr;
u32 ep_fifo_in_rdptr;
u32 unused[3];
} __packed;
/* Link layer */
struct usb338x_ll_regs {
/* offset 0x700 */
u32 ll_ltssm_ctrl1;
u32 ll_ltssm_ctrl2;
u32 ll_ltssm_ctrl3;
u32 unused[2];
u32 ll_general_ctrl0;
u32 ll_general_ctrl1;
#define PM_U3_AUTO_EXIT 29
#define PM_U2_AUTO_EXIT 28
#define PM_U1_AUTO_EXIT 27
#define PM_FORCE_U2_ENTRY 26
#define PM_FORCE_U1_ENTRY 25
#define PM_LGO_COLLISION_SEND_LAU 24
#define PM_DIR_LINK_REJECT 23
#define PM_FORCE_LINK_ACCEPT 22
#define PM_DIR_ENTRY_U3 20
#define PM_DIR_ENTRY_U2 19
#define PM_DIR_ENTRY_U1 18
#define PM_U2_ENABLE 17
#define PM_U1_ENABLE 16
#define SKP_THRESHOLD_ADJUST_FMW 8
#define RESEND_DPP_ON_LRTY_FMW 7
#define DL_BIT_VALUE_FMW 6
#define FORCE_DL_BIT 5
u32 ll_general_ctrl2;
#define SELECT_INVERT_LANE_POLARITY 7
#define FORCE_INVERT_LANE_POLARITY 6
u32 ll_general_ctrl3;
u32 ll_general_ctrl4;
u32 ll_error_gen;
} __packed;
struct usb338x_ll_lfps_regs {
/* offset 0x748 */
u32 ll_lfps_5;
#define TIMER_LFPS_6US 16
u32 ll_lfps_6;
#define TIMER_LFPS_80US 0
} __packed;
struct usb338x_ll_tsn_regs {
/* offset 0x77C */
u32 ll_tsn_counters_2;
#define HOT_TX_NORESET_TS2 24
u32 ll_tsn_counters_3;
#define HOT_RX_RESET_TS2 0
} __packed;
struct usb338x_ll_chi_regs {
/* offset 0x79C */
u32 ll_tsn_chicken_bit;
#define RECOVERY_IDLE_TO_RECOVER_FMW 3
} __packed;
/* protocol layer */
struct usb338x_pl_regs {
/* offset 0x800 */
u32 pl_reg_1;
u32 pl_reg_2;
u32 pl_reg_3;
u32 pl_reg_4;
u32 pl_ep_ctrl;
/* Protocol Layer Endpoint Control*/
#define PL_EP_CTRL 0x810
#define ENDPOINT_SELECT 0
/* [4:0] */
#define EP_INITIALIZED 16
#define SEQUENCE_NUMBER_RESET 17
#define CLEAR_ACK_ERROR_CODE 20
u32 pl_reg_6;
u32 pl_reg_7;
u32 pl_reg_8;
u32 pl_ep_status_1;
/* Protocol Layer Endpoint Status 1*/
#define PL_EP_STATUS_1 0x820
#define STATE 16
#define ACK_GOOD_NORMAL 0x11
#define ACK_GOOD_MORE_ACKS_TO_COME 0x16
u32 pl_ep_status_2;
u32 pl_ep_status_3;
/* Protocol Layer Endpoint Status 3*/
#define PL_EP_STATUS_3 0x828
#define SEQUENCE_NUMBER 0
u32 pl_ep_status_4;
/* Protocol Layer Endpoint Status 4*/
#define PL_EP_STATUS_4 0x82c
u32 pl_ep_cfg_4;
/* Protocol Layer Endpoint Configuration 4*/
#define PL_EP_CFG_4 0x830
#define NON_CTRL_IN_TOLERATE_BAD_DIR 6
} __packed;
#endif /* __LINUX_USB_USB338X_H */