OpenWrt – Blame information for rev 3
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | From 8f444887e23b9f0ea31aaae74fbc18171714d8d2 Mon Sep 17 00:00:00 2001 |
2 | From: Chunfeng Yun <chunfeng.yun@mediatek.com> |
||
3 | Date: Fri, 13 Oct 2017 17:10:43 +0800 |
||
4 | Subject: [PATCH 109/224] usb: mtu3: add support for usb3.1 IP |
||
5 | |||
6 | Support SuperSpeedPlus for usb3.1 device IP |
||
7 | |||
8 | Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com> |
||
9 | Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> |
||
10 | --- |
||
11 | drivers/usb/mtu3/mtu3.h | 1 + |
||
12 | drivers/usb/mtu3/mtu3_core.c | 14 +++++++++++--- |
||
13 | drivers/usb/mtu3/mtu3_gadget.c | 3 ++- |
||
14 | drivers/usb/mtu3/mtu3_gadget_ep0.c | 16 ++++++++-------- |
||
15 | drivers/usb/mtu3/mtu3_hw_regs.h | 1 + |
||
16 | 5 files changed, 23 insertions(+), 12 deletions(-) |
||
17 | |||
18 | --- a/drivers/usb/mtu3/mtu3.h |
||
19 | +++ b/drivers/usb/mtu3/mtu3.h |
||
20 | @@ -94,6 +94,7 @@ enum mtu3_speed { |
||
21 | MTU3_SPEED_FULL = 1, |
||
22 | MTU3_SPEED_HIGH = 3, |
||
23 | MTU3_SPEED_SUPER = 4, |
||
24 | + MTU3_SPEED_SUPER_PLUS = 5, |
||
25 | }; |
||
26 | |||
27 | /** |
||
28 | --- a/drivers/usb/mtu3/mtu3_core.c |
||
29 | +++ b/drivers/usb/mtu3/mtu3_core.c |
||
30 | @@ -237,7 +237,7 @@ void mtu3_ep_stall_set(struct mtu3_ep *m |
||
31 | |||
32 | void mtu3_dev_on_off(struct mtu3 *mtu, int is_on) |
||
33 | { |
||
34 | - if (mtu->is_u3_ip && (mtu->max_speed == USB_SPEED_SUPER)) |
||
35 | + if (mtu->is_u3_ip && mtu->max_speed >= USB_SPEED_SUPER) |
||
36 | mtu3_ss_func_set(mtu, is_on); |
||
37 | else |
||
38 | mtu3_hs_softconn_set(mtu, is_on); |
||
39 | @@ -547,6 +547,9 @@ static void mtu3_set_speed(struct mtu3 * |
||
40 | mtu3_clrbits(mbase, U3D_USB3_CONFIG, USB3_EN); |
||
41 | /* HS/FS detected by HW */ |
||
42 | mtu3_setbits(mbase, U3D_POWER_MANAGEMENT, HS_ENABLE); |
||
43 | + } else if (mtu->max_speed == USB_SPEED_SUPER) { |
||
44 | + mtu3_clrbits(mtu->ippc_base, SSUSB_U3_CTRL(0), |
||
45 | + SSUSB_U3_PORT_SSP_SPEED); |
||
46 | } |
||
47 | |||
48 | dev_info(mtu->dev, "max_speed: %s\n", |
||
3 | office | 49 | @@ -624,6 +627,10 @@ static irqreturn_t mtu3_link_isr(struct |
1 | office | 50 | udev_speed = USB_SPEED_SUPER; |
51 | maxpkt = 512; |
||
52 | break; |
||
53 | + case MTU3_SPEED_SUPER_PLUS: |
||
54 | + udev_speed = USB_SPEED_SUPER_PLUS; |
||
55 | + maxpkt = 512; |
||
56 | + break; |
||
57 | default: |
||
58 | udev_speed = USB_SPEED_UNKNOWN; |
||
59 | break; |
||
3 | office | 60 | @@ -825,14 +832,15 @@ int ssusb_gadget_init(struct ssusb_mtk * |
1 | office | 61 | case USB_SPEED_FULL: |
62 | case USB_SPEED_HIGH: |
||
63 | case USB_SPEED_SUPER: |
||
64 | + case USB_SPEED_SUPER_PLUS: |
||
65 | break; |
||
66 | default: |
||
67 | dev_err(dev, "invalid max_speed: %s\n", |
||
68 | usb_speed_string(mtu->max_speed)); |
||
69 | /* fall through */ |
||
70 | case USB_SPEED_UNKNOWN: |
||
71 | - /* default as SS */ |
||
72 | - mtu->max_speed = USB_SPEED_SUPER; |
||
73 | + /* default as SSP */ |
||
74 | + mtu->max_speed = USB_SPEED_SUPER_PLUS; |
||
75 | break; |
||
76 | } |
||
77 | |||
78 | --- a/drivers/usb/mtu3/mtu3_gadget.c |
||
79 | +++ b/drivers/usb/mtu3/mtu3_gadget.c |
||
80 | @@ -89,6 +89,7 @@ static int mtu3_ep_enable(struct mtu3_ep |
||
81 | |||
82 | switch (mtu->g.speed) { |
||
83 | case USB_SPEED_SUPER: |
||
84 | + case USB_SPEED_SUPER_PLUS: |
||
85 | if (usb_endpoint_xfer_int(desc) || |
||
86 | usb_endpoint_xfer_isoc(desc)) { |
||
87 | interval = desc->bInterval; |
||
88 | @@ -456,7 +457,7 @@ static int mtu3_gadget_wakeup(struct usb |
||
89 | return -EOPNOTSUPP; |
||
90 | |||
91 | spin_lock_irqsave(&mtu->lock, flags); |
||
92 | - if (mtu->g.speed == USB_SPEED_SUPER) { |
||
93 | + if (mtu->g.speed >= USB_SPEED_SUPER) { |
||
94 | mtu3_setbits(mtu->mac_base, U3D_LINK_POWER_CONTROL, UX_EXIT); |
||
95 | } else { |
||
96 | mtu3_setbits(mtu->mac_base, U3D_POWER_MANAGEMENT, RESUME); |
||
97 | --- a/drivers/usb/mtu3/mtu3_gadget_ep0.c |
||
98 | +++ b/drivers/usb/mtu3/mtu3_gadget_ep0.c |
||
99 | @@ -212,8 +212,8 @@ ep0_get_status(struct mtu3 *mtu, const s |
||
100 | case USB_RECIP_DEVICE: |
||
101 | result[0] = mtu->is_self_powered << USB_DEVICE_SELF_POWERED; |
||
102 | result[0] |= mtu->may_wakeup << USB_DEVICE_REMOTE_WAKEUP; |
||
103 | - /* superspeed only */ |
||
104 | - if (mtu->g.speed == USB_SPEED_SUPER) { |
||
105 | + |
||
106 | + if (mtu->g.speed >= USB_SPEED_SUPER) { |
||
107 | result[0] |= mtu->u1_enable << USB_DEV_STAT_U1_ENABLED; |
||
108 | result[0] |= mtu->u2_enable << USB_DEV_STAT_U2_ENABLED; |
||
109 | } |
||
110 | @@ -329,8 +329,8 @@ static int ep0_handle_feature_dev(struct |
||
111 | handled = handle_test_mode(mtu, setup); |
||
112 | break; |
||
113 | case USB_DEVICE_U1_ENABLE: |
||
114 | - if (mtu->g.speed != USB_SPEED_SUPER || |
||
115 | - mtu->g.state != USB_STATE_CONFIGURED) |
||
116 | + if (mtu->g.speed < USB_SPEED_SUPER || |
||
117 | + mtu->g.state != USB_STATE_CONFIGURED) |
||
118 | break; |
||
119 | |||
120 | lpc = mtu3_readl(mbase, U3D_LINK_POWER_CONTROL); |
||
121 | @@ -344,8 +344,8 @@ static int ep0_handle_feature_dev(struct |
||
122 | handled = 1; |
||
123 | break; |
||
124 | case USB_DEVICE_U2_ENABLE: |
||
125 | - if (mtu->g.speed != USB_SPEED_SUPER || |
||
126 | - mtu->g.state != USB_STATE_CONFIGURED) |
||
127 | + if (mtu->g.speed < USB_SPEED_SUPER || |
||
128 | + mtu->g.state != USB_STATE_CONFIGURED) |
||
129 | break; |
||
130 | |||
131 | lpc = mtu3_readl(mbase, U3D_LINK_POWER_CONTROL); |
||
132 | @@ -384,8 +384,8 @@ static int ep0_handle_feature(struct mtu |
||
133 | break; |
||
134 | case USB_RECIP_INTERFACE: |
||
135 | /* superspeed only */ |
||
136 | - if ((value == USB_INTRF_FUNC_SUSPEND) |
||
137 | - && (mtu->g.speed == USB_SPEED_SUPER)) { |
||
138 | + if (value == USB_INTRF_FUNC_SUSPEND && |
||
139 | + mtu->g.speed >= USB_SPEED_SUPER) { |
||
140 | /* |
||
141 | * forward the request because function drivers |
||
142 | * should handle it |
||
143 | --- a/drivers/usb/mtu3/mtu3_hw_regs.h |
||
144 | +++ b/drivers/usb/mtu3/mtu3_hw_regs.h |
||
145 | @@ -467,6 +467,7 @@ |
||
146 | #define SSUSB_VBUS_CHG_INT_B_EN BIT(6) |
||
147 | |||
148 | /* U3D_SSUSB_U3_CTRL_0P */ |
||
149 | +#define SSUSB_U3_PORT_SSP_SPEED BIT(9) |
||
150 | #define SSUSB_U3_PORT_HOST_SEL BIT(2) |
||
151 | #define SSUSB_U3_PORT_PDN BIT(1) |
||
152 | #define SSUSB_U3_PORT_DIS BIT(0) |