xref: /rk3399_rockchip-uboot/include/rockusb.h (revision 36c87911a804622640a1bc7f41f7d89d66736db0)
1f16e43f8SFrank Wang /*
2f16e43f8SFrank Wang  * Copyright 2017 Rockchip Electronics Co., Ltd
3f16e43f8SFrank Wang  * Frank Wang <frank.wang@rock-chips.com>
4f16e43f8SFrank Wang  *
5f16e43f8SFrank Wang  * SPDX-License-Identifier:	GPL-2.0+
6f16e43f8SFrank Wang  */
7f16e43f8SFrank Wang 
8f16e43f8SFrank Wang #ifndef __ROCKUSB_H__
9f16e43f8SFrank Wang #define __ROCKUSB_H__
10f16e43f8SFrank Wang 
11f16e43f8SFrank Wang #include <common.h>
12f16e43f8SFrank Wang #include <part.h>
13f16e43f8SFrank Wang #include <linux/usb/composite.h>
14f16e43f8SFrank Wang 
15f16e43f8SFrank Wang enum rkusb_cmd {
16f16e43f8SFrank Wang 	RKUSB_TEST_UNIT_READY	= 0x00,
17f16e43f8SFrank Wang 	RKUSB_READ_FLASH_ID	= 0x01,
18f16e43f8SFrank Wang 	RKUSB_SET_DEVICE_ID	= 0x02,
19f16e43f8SFrank Wang 	RKUSB_TEST_BAD_BLOCK	= 0x03,
20f16e43f8SFrank Wang 	RKUSB_READ_10		= 0x04,
21f16e43f8SFrank Wang 	RKUSB_WRITE_10		= 0x05,
22f16e43f8SFrank Wang 	RKUSB_ERASE_10		= 0x06,
23f16e43f8SFrank Wang 	RKUSB_WRITE_SPARE	= 0x07,
24f16e43f8SFrank Wang 	RKUSB_READ_SPARE	= 0x08,
25f16e43f8SFrank Wang 	RKUSB_ERASE_10_FORCE	= 0x0B,
26f16e43f8SFrank Wang 	RKUSB_GET_VERSION	= 0x0C,
27f16e43f8SFrank Wang 	RKUSB_LBA_READ_10	= 0x14,
28f16e43f8SFrank Wang 	RKUSB_LBA_WRITE_10	= 0x15,
29f16e43f8SFrank Wang 	RKUSB_ERASE_SYS_DISK	= 0x16,
30f16e43f8SFrank Wang 	RKUSB_SDRAM_READ_10	= 0x17,
31f16e43f8SFrank Wang 	RKUSB_SDRAM_WRITE_10	= 0x18,
32f16e43f8SFrank Wang 	RKUSB_SDRAM_EXECUTE	= 0x19,
33f16e43f8SFrank Wang 	RKUSB_READ_FLASH_INFO	= 0x1A,
34f16e43f8SFrank Wang 	RKUSB_GET_CHIP_VER	= 0x1B,
35f16e43f8SFrank Wang 	RKUSB_LOW_FORMAT	= 0x1C,
36f16e43f8SFrank Wang 	RKUSB_SET_RESET_FLAG	= 0x1E,
37f16e43f8SFrank Wang 	RKUSB_SPI_READ_10	= 0x21,
38f16e43f8SFrank Wang 	RKUSB_SPI_WRITE_10	= 0x22,
39f16e43f8SFrank Wang 	RKUSB_LBA_ERASE		= 0x25,
400d0c3248SFrank Wang 	RKUSB_VS_WRITE		= 0x26,
410d0c3248SFrank Wang 	RKUSB_VS_READ		= 0x27,
424d2787f5SJon Lin 	RKUSB_SWITCH_STORAGE	= 0x2A,
43d4cce25eSYifeng Zhao 	RKUSB_GET_STORAGE_MEDIA = 0x2B,
44f16e43f8SFrank Wang 	RKUSB_SESSION		= 0x30,
45f16e43f8SFrank Wang 	RKUSB_READ_CAPACITY	= 0xAA,
46*36c87911Swilliam.wu 	RKUSB_SWITCH_USB3	= 0xBB,
47f16e43f8SFrank Wang 	RKUSB_RESET		= 0xFF,
48f16e43f8SFrank Wang };
49f16e43f8SFrank Wang 
50f16e43f8SFrank Wang enum rkusb_rc {
51f16e43f8SFrank Wang 	RKUSB_RC_ERROR		= -1,
52f16e43f8SFrank Wang 	RKUSB_RC_CONTINUE	= 0,
53f16e43f8SFrank Wang 	RKUSB_RC_FINISHED	= 1,
54f16e43f8SFrank Wang 	RKUSB_RC_UNKNOWN_CMND	= 2,
55f16e43f8SFrank Wang };
56f16e43f8SFrank Wang 
572c0c66c1SYifeng Zhao struct fsg_common;
582c0c66c1SYifeng Zhao 
59f16e43f8SFrank Wang #ifdef CONFIG_CMD_ROCKUSB
60f16e43f8SFrank Wang #define IS_RKUSB_UMS_DNL(name)	(!strncmp((name), "rkusb_ums_dnl", 13))
612c0c66c1SYifeng Zhao 
622c0c66c1SYifeng Zhao int rkusb_do_check_parity(struct fsg_common *common);
63*36c87911Swilliam.wu void rkusb_force_to_usb2(bool enable);
64*36c87911Swilliam.wu bool rkusb_force_usb2_enabled(void);
65*36c87911Swilliam.wu void rkusb_switch_to_usb3_enable(bool enable);
66*36c87911Swilliam.wu bool rkusb_switch_usb3_enabled(void);
67*36c87911Swilliam.wu bool rkusb_usb3_capable(void);
68*36c87911Swilliam.wu 
69f16e43f8SFrank Wang #else
70f16e43f8SFrank Wang #define IS_RKUSB_UMS_DNL(name)	0
71f16e43f8SFrank Wang 
72f16e43f8SFrank Wang struct fsg_buffhd;
73f16e43f8SFrank Wang struct fsg_dev;
74f16e43f8SFrank Wang struct fsg_common;
75f16e43f8SFrank Wang struct fsg_config;
76f16e43f8SFrank Wang 
77f16e43f8SFrank Wang static struct usb_descriptor_header *rkusb_fs_function[];
78f16e43f8SFrank Wang static struct usb_descriptor_header *rkusb_hs_function[];
79f16e43f8SFrank Wang 
80f16e43f8SFrank Wang static inline int rkusb_cmd_process(struct fsg_common *common,
81f16e43f8SFrank Wang 				    struct fsg_buffhd *bh, int *reply)
82f16e43f8SFrank Wang {
83f16e43f8SFrank Wang 	return -EPERM;
84f16e43f8SFrank Wang }
852c0c66c1SYifeng Zhao 
862c0c66c1SYifeng Zhao static inline int rkusb_do_check_parity(struct fsg_common *common)
872c0c66c1SYifeng Zhao {
882c0c66c1SYifeng Zhao 	return -EOPNOTSUPP;
892c0c66c1SYifeng Zhao }
90*36c87911Swilliam.wu 
91*36c87911Swilliam.wu static inline void rkusb_force_to_usb2(bool enable)
92*36c87911Swilliam.wu {
93*36c87911Swilliam.wu }
94*36c87911Swilliam.wu 
95*36c87911Swilliam.wu static inline bool rkusb_force_usb2_enabled(void)
96*36c87911Swilliam.wu {
97*36c87911Swilliam.wu 	return false;
98*36c87911Swilliam.wu }
99*36c87911Swilliam.wu 
100*36c87911Swilliam.wu static inline void rkusb_switch_to_usb3_enable(bool enable)
101*36c87911Swilliam.wu {
102*36c87911Swilliam.wu }
103*36c87911Swilliam.wu 
104*36c87911Swilliam.wu static inline bool rkusb_switch_usb3_enabled(void)
105*36c87911Swilliam.wu {
106*36c87911Swilliam.wu 	return false;
107*36c87911Swilliam.wu }
108*36c87911Swilliam.wu 
109*36c87911Swilliam.wu static inline bool rkusb_usb3_capable(void)
110*36c87911Swilliam.wu {
111*36c87911Swilliam.wu 	return false;
112*36c87911Swilliam.wu }
113*36c87911Swilliam.wu #endif
114*36c87911Swilliam.wu 
115*36c87911Swilliam.wu #ifdef CONFIG_USB_DWC3_GADGET
116*36c87911Swilliam.wu bool dwc3_gadget_is_connected(void);
117f16e43f8SFrank Wang #endif
118f16e43f8SFrank Wang 
119aa9b1b59SFrank Wang /* Wait at maximum 60 seconds for cable connection */
120aa9b1b59SFrank Wang #define RKUSB_CABLE_READY_TIMEOUT	60
121aa9b1b59SFrank Wang #define SECTOR_SIZE			0x200
122aa9b1b59SFrank Wang 
123628c8271SJason Zhu #define RKUSB_READ_LIMIT_ADDR	        (32 * 2048)	/* 32MB */
124628c8271SJason Zhu 
125aa9b1b59SFrank Wang struct rockusb {
126aa9b1b59SFrank Wang 	struct ums *ums;
127aa9b1b59SFrank Wang 	int ums_cnt;
128*36c87911Swilliam.wu 	bool force_usb2;
129*36c87911Swilliam.wu 	bool switch_usb3;
130aa9b1b59SFrank Wang };
131aa9b1b59SFrank Wang 
132f16e43f8SFrank Wang #endif /* __ROCKUSB_H__ */
133