45
45
#include "hardware/a64_usbotg.h"
46
46
// TODO #include "a64_periphclks.h"
47
47
// TODO #include "a641020-evk.h"
48
+ #include "arm64_arch.h"
48
49
49
50
#include <arch/board/board.h> /* Must always be included last */
50
51
@@ -127,55 +128,66 @@ static int ehci_waiter(int argc, char *argv[])
127
128
// #define BUS_SOFT_RST_REG1 (A64_CCU_ADDR + 0x02c4)
128
129
// #define DE_RST (1 << 12)
129
130
131
+ // Set the bit
130
132
static void set_bit (unsigned long addr , uint8_t bit )
131
133
{
134
+ _info ("0x%lx Bit %d\n" , addr , bit );
132
135
modreg32 (1 << bit , 1 << bit , addr );
133
136
}
134
137
138
+ // Enable USB Clocks
135
139
// https://github.com/lupyuen/pinephone-nuttx-usb#usb-controller-clocks
136
140
// https://github.com/lupyuen/pinephone-nuttx-usb#enable-usb-controller-clocks
137
- static void a64_usbhost_clk_enable ()
141
+ static void a64_usbhost_clk_enable (void )
138
142
{
139
143
// usb0_phy: CLK_USB_PHY0
140
144
// 0x0cc BIT(8)
145
+ _info ("CLK_USB_PHY0\n" );
141
146
#define CLK_USB_PHY0 (A64_CCU_ADDR + 0x0cc)
142
147
#define CLK_USB_PHY0_BIT 8
143
148
set_bit (CLK_USB_PHY0 , CLK_USB_PHY0_BIT );
144
149
145
150
// usb1_phy: CLK_USB_PHY1
146
151
// 0x0cc BIT(9)
152
+ _info ("CLK_USB_PHY1\n" );
147
153
#define CLK_USB_PHY1 (A64_CCU_ADDR + 0x0cc)
148
154
#define CLK_USB_PHY1_BIT 9
149
155
set_bit (CLK_USB_PHY1 , CLK_USB_PHY1_BIT );
150
156
151
157
// EHCI0: CLK_BUS_OHCI0, CLK_BUS_EHCI0, CLK_USB_OHCI0
152
158
// 0x060 BIT(28)
159
+ _info ("CLK_BUS_OHCI0\n" );
153
160
#define CLK_BUS_OHCI0 (A64_CCU_ADDR + 0x060)
154
161
#define CLK_BUS_OHCI0_BIT 28
155
162
set_bit (CLK_BUS_OHCI0 , CLK_BUS_OHCI0_BIT );
156
163
157
164
// 0x060 BIT(24)
165
+ _info ("CLK_BUS_EHCI0\n" );
158
166
#define CLK_BUS_EHCI0 (A64_CCU_ADDR + 0x060)
159
167
#define CLK_BUS_EHCI0_BIT 24
160
168
set_bit (CLK_BUS_EHCI0 , CLK_BUS_EHCI0_BIT );
161
169
162
170
// 0x0cc BIT(16)
171
+ _info ("CLK_USB_OHCI0\n" );
163
172
#define CLK_USB_OHCI0 (A64_CCU_ADDR + 0x0cc)
164
173
#define CLK_USB_OHCI0_BIT 16
165
174
set_bit (CLK_USB_OHCI0 , CLK_USB_OHCI0_BIT );
166
175
167
176
// EHCI1: CLK_BUS_OHCI1, CLK_BUS_EHCI1, CLK_USB_OHCI1
168
177
// 0x060 BIT(29)
178
+ _info ("CLK_BUS_OHCI1\n" );
169
179
#define CLK_BUS_OHCI1 (A64_CCU_ADDR + 0x060)
170
180
#define CLK_BUS_OHCI1_BIT 29
171
181
set_bit (CLK_BUS_OHCI1 , CLK_BUS_OHCI1_BIT );
172
182
173
183
// 0x060 BIT(25)
184
+ _info ("CLK_BUS_EHCI1\n" );
174
185
#define CLK_BUS_EHCI1 (A64_CCU_ADDR + 0x060)
175
186
#define CLK_BUS_EHCI1_BIT 25
176
187
set_bit (CLK_BUS_EHCI1 , CLK_BUS_EHCI1_BIT );
177
188
178
189
// 0x0cc BIT(17)
190
+ _info ("CLK_USB_OHCI1\n" );
179
191
#define CLK_USB_OHCI1 (A64_CCU_ADDR + 0x0cc)
180
192
#define CLK_USB_OHCI1_BIT 17
181
193
set_bit (CLK_USB_OHCI1 , CLK_USB_OHCI1_BIT );
@@ -191,40 +203,47 @@ static void a64_usbhost_clk_enable()
191
203
// modreg32(clk, clk_mask, DE_CLK_REG);
192
204
}
193
205
206
+ // Deassert USB Resets
194
207
// https://github.com/lupyuen/pinephone-nuttx-usb#usb-controller-reset
195
208
// https://github.com/lupyuen/pinephone-nuttx-usb#reset-usb-controller
196
- static void a64_usbhost_reset_deassert ()
209
+ static void a64_usbhost_reset_deassert (void )
197
210
{
198
211
// usb0_reset: RST_USB_PHY0
199
212
// 0x0cc BIT(0)
213
+ _info ("RST_USB_PHY0\n" );
200
214
#define RST_USB_PHY0 (A64_CCU_ADDR + 0x0cc)
201
215
#define RST_USB_PHY0_BIT 0
202
216
set_bit (RST_USB_PHY0 , RST_USB_PHY0_BIT );
203
217
204
218
// usb1_reset: RST_USB_PHY1
205
219
// 0x0cc BIT(1)
220
+ _info ("RST_USB_PHY1\n" );
206
221
#define RST_USB_PHY1 (A64_CCU_ADDR + 0x0cc)
207
222
#define RST_USB_PHY1_BIT 1
208
223
set_bit (RST_USB_PHY1 , RST_USB_PHY1_BIT );
209
224
210
225
// EHCI0: RST_BUS_OHCI0, RST_BUS_EHCI0
211
226
// 0x2c0 BIT(28)
227
+ _info ("RST_BUS_OHCI0\n" );
212
228
#define RST_BUS_OHCI0 (A64_CCU_ADDR + 0x2c0)
213
229
#define RST_BUS_OHCI0_BIT 28
214
230
set_bit (RST_BUS_OHCI0 , RST_BUS_OHCI0_BIT );
215
231
216
232
// 0x2c0 BIT(24)
233
+ _info ("RST_BUS_EHCI0\n" );
217
234
#define RST_BUS_EHCI0 (A64_CCU_ADDR + 0x2c0)
218
235
#define RST_BUS_EHCI0_BIT 24
219
236
set_bit (RST_BUS_EHCI0 , RST_BUS_EHCI0_BIT );
220
237
221
238
// EHCI1: RST_BUS_OHCI1, RST_BUS_EHCI1
222
239
// 0x2c0 BIT(29)
240
+ _info ("RST_BUS_OHCI1\n" );
223
241
#define RST_BUS_OHCI1 (A64_CCU_ADDR + 0x2c0)
224
242
#define RST_BUS_OHCI1_BIT 29
225
243
set_bit (RST_BUS_OHCI1 , RST_BUS_OHCI1_BIT );
226
244
227
245
// 0x2c0 BIT(25)
246
+ _info ("RST_BUS_EHCI1\n" );
228
247
#define RST_BUS_EHCI1 (A64_CCU_ADDR + 0x2c0)
229
248
#define RST_BUS_EHCI1_BIT 25
230
249
set_bit (RST_BUS_EHCI1 , RST_BUS_EHCI1_BIT );
0 commit comments