|  | // SPDX-License-Identifier: GPL-2.0+ | 
|  | /* | 
|  | * 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 | 
|  | #define USB3380_EP_CFG_MASK_IN ((0x3 << IN_ENDPOINT_TYPE) | \ | 
|  | BIT(IN_ENDPOINT_ENABLE)) | 
|  | #define USB3380_EP_CFG_MASK_OUT ((0x3 << OUT_ENDPOINT_TYPE) | \ | 
|  | BIT(OUT_ENDPOINT_ENABLE)) | 
|  |  | 
|  | 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   unused1; | 
|  |  | 
|  | /* 0x710 */ | 
|  | u32   unused2; | 
|  | 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 | 
|  |  | 
|  | /* 0x720 */ | 
|  | u32   ll_general_ctrl3; | 
|  | u32   ll_general_ctrl4; | 
|  | u32   ll_error_gen; | 
|  | u32   unused3; | 
|  |  | 
|  | /* 0x730 */ | 
|  | u32   unused4[4]; | 
|  |  | 
|  | /* 0x740 */ | 
|  | u32   unused5[2]; | 
|  | u32   ll_lfps_5; | 
|  | #define     TIMER_LFPS_6US                                      16 | 
|  | u32   ll_lfps_6; | 
|  | #define     TIMER_LFPS_80US                                     0 | 
|  |  | 
|  | /* 0x750 */ | 
|  | u32   unused6[8]; | 
|  |  | 
|  | /* 0x770 */ | 
|  | u32   unused7[3]; | 
|  | u32   ll_tsn_counters_2; | 
|  | #define     HOT_TX_NORESET_TS2                                  24 | 
|  |  | 
|  | /* 0x780 */ | 
|  | u32   ll_tsn_counters_3; | 
|  | #define     HOT_RX_RESET_TS2                                    0 | 
|  | u32   unused8[3]; | 
|  |  | 
|  | /* 0x790 */ | 
|  | u32   unused9; | 
|  | u32   ll_lfps_timers_2; | 
|  | #define     LFPS_TIMERS_2_WORKAROUND_VALUE			0x084d | 
|  | u32   unused10; | 
|  | 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 */ |