@@ -197,13 +197,35 @@ static DEFINE_MUTEX(dwc3_octeon_clocks_mutex);
197
197
static uint8_t clk_div [OCTEON_H_CLKDIV_SEL ] = {1 , 2 , 4 , 6 , 8 , 16 , 24 , 32 };
198
198
199
199
200
- static int dwc3_octeon_config_power ( struct device * dev , u64 base )
200
+ static void dwc3_octeon_config_gpio ( int index , int gpio )
201
201
{
202
202
union cvmx_gpio_bit_cfgx gpio_bit ;
203
+
204
+ if ((OCTEON_IS_MODEL (OCTEON_CN73XX ) ||
205
+ OCTEON_IS_MODEL (OCTEON_CNF75XX ))
206
+ && gpio <= 31 ) {
207
+ gpio_bit .u64 = cvmx_read_csr (CVMX_GPIO_BIT_CFGX (gpio ));
208
+ gpio_bit .s .tx_oe = 1 ;
209
+ gpio_bit .s .output_sel = (index == 0 ? 0x14 : 0x15 );
210
+ cvmx_write_csr (CVMX_GPIO_BIT_CFGX (gpio ), gpio_bit .u64 );
211
+ } else if (gpio <= 15 ) {
212
+ gpio_bit .u64 = cvmx_read_csr (CVMX_GPIO_BIT_CFGX (gpio ));
213
+ gpio_bit .s .tx_oe = 1 ;
214
+ gpio_bit .s .output_sel = (index == 0 ? 0x14 : 0x19 );
215
+ cvmx_write_csr (CVMX_GPIO_BIT_CFGX (gpio ), gpio_bit .u64 );
216
+ } else {
217
+ gpio_bit .u64 = cvmx_read_csr (CVMX_GPIO_XBIT_CFGX (gpio ));
218
+ gpio_bit .s .tx_oe = 1 ;
219
+ gpio_bit .s .output_sel = (index == 0 ? 0x14 : 0x19 );
220
+ cvmx_write_csr (CVMX_GPIO_XBIT_CFGX (gpio ), gpio_bit .u64 );
221
+ }
222
+ }
223
+
224
+ static int dwc3_octeon_config_power (struct device * dev , u64 base )
225
+ {
203
226
uint32_t gpio_pwr [3 ];
204
227
int gpio , len , power_active_low ;
205
228
struct device_node * node = dev -> of_node ;
206
- int index = (base >> 24 ) & 1 ;
207
229
u64 val ;
208
230
u64 uctl_host_cfg_reg = base + USBDRD_UCTL_HOST_CFG ;
209
231
@@ -220,24 +242,7 @@ static int dwc3_octeon_config_power(struct device *dev, u64 base)
220
242
dev_err (dev , "invalid power configuration\n" );
221
243
return - EINVAL ;
222
244
}
223
- if ((OCTEON_IS_MODEL (OCTEON_CN73XX ) ||
224
- OCTEON_IS_MODEL (OCTEON_CNF75XX ))
225
- && gpio <= 31 ) {
226
- gpio_bit .u64 = cvmx_read_csr (CVMX_GPIO_BIT_CFGX (gpio ));
227
- gpio_bit .s .tx_oe = 1 ;
228
- gpio_bit .s .output_sel = (index == 0 ? 0x14 : 0x15 );
229
- cvmx_write_csr (CVMX_GPIO_BIT_CFGX (gpio ), gpio_bit .u64 );
230
- } else if (gpio <= 15 ) {
231
- gpio_bit .u64 = cvmx_read_csr (CVMX_GPIO_BIT_CFGX (gpio ));
232
- gpio_bit .s .tx_oe = 1 ;
233
- gpio_bit .s .output_sel = (index == 0 ? 0x14 : 0x19 );
234
- cvmx_write_csr (CVMX_GPIO_BIT_CFGX (gpio ), gpio_bit .u64 );
235
- } else {
236
- gpio_bit .u64 = cvmx_read_csr (CVMX_GPIO_XBIT_CFGX (gpio ));
237
- gpio_bit .s .tx_oe = 1 ;
238
- gpio_bit .s .output_sel = (index == 0 ? 0x14 : 0x19 );
239
- cvmx_write_csr (CVMX_GPIO_XBIT_CFGX (gpio ), gpio_bit .u64 );
240
- }
245
+ dwc3_octeon_config_gpio ((base >> 24 ) & 1 , gpio );
241
246
242
247
/* Enable XHCI power control and set if active high or low. */
243
248
val = cvmx_read_csr (uctl_host_cfg_reg );
0 commit comments