1717#include <linux/mutex.h>
1818#include <linux/of_platform.h>
1919
20- #include <asm/octeon/octeon.h>
21-
2220/*
2321 * USB Control Register
2422 */
196194static DEFINE_MUTEX (dwc3_octeon_clocks_mutex );
197195static uint8_t clk_div [OCTEON_H_CLKDIV_SEL ] = {1 , 2 , 4 , 6 , 8 , 16 , 24 , 32 };
198196
197+ #ifdef CONFIG_CAVIUM_OCTEON_SOC
198+ #include <asm/octeon/octeon.h>
199+ static inline uint64_t dwc3_octeon_readq (void __iomem * addr )
200+ {
201+ return cvmx_readq_csr (addr );
202+ }
203+
204+ static inline void dwc3_octeon_writeq (void __iomem * base , uint64_t val )
205+ {
206+ cvmx_writeq_csr (base , val );
207+ }
199208
200209static void dwc3_octeon_config_gpio (int index , int gpio )
201210{
@@ -220,14 +229,24 @@ static void dwc3_octeon_config_gpio(int index, int gpio)
220229 cvmx_write_csr (CVMX_GPIO_XBIT_CFGX (gpio ), gpio_bit .u64 );
221230 }
222231}
232+ #else
233+ static inline uint64_t dwc3_octeon_readq (void __iomem * addr )
234+ {
235+ return 0 ;
236+ }
237+
238+ static inline void dwc3_octeon_writeq (void __iomem * base , uint64_t val ) { }
239+
240+ static inline void dwc3_octeon_config_gpio (int index , int gpio ) { }
241+ #endif
223242
224- static int dwc3_octeon_config_power (struct device * dev , u64 base )
243+ static int dwc3_octeon_config_power (struct device * dev , void __iomem * base )
225244{
226245 uint32_t gpio_pwr [3 ];
227246 int gpio , len , power_active_low ;
228247 struct device_node * node = dev -> of_node ;
229248 u64 val ;
230- u64 uctl_host_cfg_reg = base + USBDRD_UCTL_HOST_CFG ;
249+ void __iomem * uctl_host_cfg_reg = base + USBDRD_UCTL_HOST_CFG ;
231250
232251 if (of_find_property (node , "power" , & len ) != NULL ) {
233252 if (len == 12 ) {
@@ -242,33 +261,33 @@ static int dwc3_octeon_config_power(struct device *dev, u64 base)
242261 dev_err (dev , "invalid power configuration\n" );
243262 return - EINVAL ;
244263 }
245- dwc3_octeon_config_gpio ((base >> 24 ) & 1 , gpio );
264+ dwc3_octeon_config_gpio ((( u64 ) base >> 24 ) & 1 , gpio );
246265
247266 /* Enable XHCI power control and set if active high or low. */
248- val = cvmx_read_csr (uctl_host_cfg_reg );
267+ val = dwc3_octeon_readq (uctl_host_cfg_reg );
249268 val |= USBDRD_UCTL_HOST_PPC_EN ;
250269 if (power_active_low )
251270 val &= ~USBDRD_UCTL_HOST_PPC_ACTIVE_HIGH_EN ;
252271 else
253272 val |= USBDRD_UCTL_HOST_PPC_ACTIVE_HIGH_EN ;
254- cvmx_write_csr (uctl_host_cfg_reg , val );
273+ dwc3_octeon_writeq (uctl_host_cfg_reg , val );
255274 } else {
256275 /* Disable XHCI power control and set if active high. */
257- val = cvmx_read_csr (uctl_host_cfg_reg );
276+ val = dwc3_octeon_readq (uctl_host_cfg_reg );
258277 val &= ~USBDRD_UCTL_HOST_PPC_EN ;
259278 val &= ~USBDRD_UCTL_HOST_PPC_ACTIVE_HIGH_EN ;
260- cvmx_write_csr (uctl_host_cfg_reg , val );
279+ dwc3_octeon_writeq (uctl_host_cfg_reg , val );
261280 dev_info (dev , "power control disabled\n" );
262281 }
263282 return 0 ;
264283}
265284
266- static int dwc3_octeon_clocks_start (struct device * dev , u64 base )
285+ static int dwc3_octeon_clocks_start (struct device * dev , void __iomem * base )
267286{
268287 int i , mpll_mul , ref_clk_fsel , ref_clk_sel = 2 ;
269288 u32 clock_rate ;
270289 u64 div , h_clk_rate , val ;
271- u64 uctl_ctl_reg = base + USBDRD_UCTL_CTL ;
290+ void __iomem * uctl_ctl_reg = base + USBDRD_UCTL_CTL ;
272291
273292 if (dev -> of_node ) {
274293 const char * ss_clock_type ;
@@ -332,16 +351,16 @@ static int dwc3_octeon_clocks_start(struct device *dev, u64 base)
332351 /* Step 2: Select GPIO for overcurrent indication, if desired. SKIP */
333352
334353 /* Step 3: Assert all resets. */
335- val = cvmx_read_csr (uctl_ctl_reg );
354+ val = dwc3_octeon_readq (uctl_ctl_reg );
336355 val |= USBDRD_UCTL_CTL_UPHY_RST |
337356 USBDRD_UCTL_CTL_UAHC_RST |
338357 USBDRD_UCTL_CTL_UCTL_RST ;
339- cvmx_write_csr (uctl_ctl_reg , val );
358+ dwc3_octeon_writeq (uctl_ctl_reg , val );
340359
341360 /* Step 4a: Reset the clock dividers. */
342- val = cvmx_read_csr (uctl_ctl_reg );
361+ val = dwc3_octeon_readq (uctl_ctl_reg );
343362 val |= USBDRD_UCTL_CTL_H_CLKDIV_RST ;
344- cvmx_write_csr (uctl_ctl_reg , val );
363+ dwc3_octeon_writeq (uctl_ctl_reg , val );
345364
346365 /* Step 4b: Select controller clock frequency. */
347366 for (div = 0 ; div < OCTEON_H_CLKDIV_SEL ; div ++ ) {
@@ -350,12 +369,12 @@ static int dwc3_octeon_clocks_start(struct device *dev, u64 base)
350369 h_clk_rate >= OCTEON_MIN_H_CLK_RATE )
351370 break ;
352371 }
353- val = cvmx_read_csr (uctl_ctl_reg );
372+ val = dwc3_octeon_readq (uctl_ctl_reg );
354373 val &= ~USBDRD_UCTL_CTL_H_CLKDIV_SEL ;
355374 val |= FIELD_PREP (USBDRD_UCTL_CTL_H_CLKDIV_SEL , div );
356375 val |= USBDRD_UCTL_CTL_H_CLK_EN ;
357- cvmx_write_csr (uctl_ctl_reg , val );
358- val = cvmx_read_csr (uctl_ctl_reg );
376+ dwc3_octeon_writeq (uctl_ctl_reg , val );
377+ val = dwc3_octeon_readq (uctl_ctl_reg );
359378 if ((div != FIELD_GET (USBDRD_UCTL_CTL_H_CLKDIV_SEL , val )) ||
360379 (!(FIELD_GET (USBDRD_UCTL_CTL_H_CLK_EN , val )))) {
361380 dev_err (dev , "dwc3 controller clock init failure.\n" );
@@ -364,10 +383,10 @@ static int dwc3_octeon_clocks_start(struct device *dev, u64 base)
364383
365384 /* Step 4c: Deassert the controller clock divider reset. */
366385 val &= ~USBDRD_UCTL_CTL_H_CLKDIV_RST ;
367- cvmx_write_csr (uctl_ctl_reg , val );
386+ dwc3_octeon_writeq (uctl_ctl_reg , val );
368387
369388 /* Step 5a: Reference clock configuration. */
370- val = cvmx_read_csr (uctl_ctl_reg );
389+ val = dwc3_octeon_readq (uctl_ctl_reg );
371390 val &= ~USBDRD_UCTL_CTL_REF_CLK_DIV2 ;
372391 val &= ~USBDRD_UCTL_CTL_REF_CLK_SEL ;
373392 val |= FIELD_PREP (USBDRD_UCTL_CTL_REF_CLK_SEL , ref_clk_sel );
@@ -407,15 +426,15 @@ static int dwc3_octeon_clocks_start(struct device *dev, u64 base)
407426 /* Step 6a & 6b: Power up PHYs. */
408427 val |= USBDRD_UCTL_CTL_HS_POWER_EN ;
409428 val |= USBDRD_UCTL_CTL_SS_POWER_EN ;
410- cvmx_write_csr (uctl_ctl_reg , val );
429+ dwc3_octeon_writeq (uctl_ctl_reg , val );
411430
412431 /* Step 7: Wait 10 controller-clock cycles to take effect. */
413432 udelay (10 );
414433
415434 /* Step 8a: Deassert UCTL reset signal. */
416- val = cvmx_read_csr (uctl_ctl_reg );
435+ val = dwc3_octeon_readq (uctl_ctl_reg );
417436 val &= ~USBDRD_UCTL_CTL_UCTL_RST ;
418- cvmx_write_csr (uctl_ctl_reg , val );
437+ dwc3_octeon_writeq (uctl_ctl_reg , val );
419438
420439 /* Step 8b: Wait 10 controller-clock cycles. */
421440 udelay (10 );
@@ -425,49 +444,49 @@ static int dwc3_octeon_clocks_start(struct device *dev, u64 base)
425444 return - EINVAL ;
426445
427446 /* Step 8d: Deassert UAHC reset signal. */
428- val = cvmx_read_csr (uctl_ctl_reg );
447+ val = dwc3_octeon_readq (uctl_ctl_reg );
429448 val &= ~USBDRD_UCTL_CTL_UAHC_RST ;
430- cvmx_write_csr (uctl_ctl_reg , val );
449+ dwc3_octeon_writeq (uctl_ctl_reg , val );
431450
432451 /* Step 8e: Wait 10 controller-clock cycles. */
433452 udelay (10 );
434453
435454 /* Step 9: Enable conditional coprocessor clock of UCTL. */
436- val = cvmx_read_csr (uctl_ctl_reg );
455+ val = dwc3_octeon_readq (uctl_ctl_reg );
437456 val |= USBDRD_UCTL_CTL_CSCLK_EN ;
438- cvmx_write_csr (uctl_ctl_reg , val );
457+ dwc3_octeon_writeq (uctl_ctl_reg , val );
439458
440459 /*Step 10: Set for host mode only. */
441- val = cvmx_read_csr (uctl_ctl_reg );
460+ val = dwc3_octeon_readq (uctl_ctl_reg );
442461 val &= ~USBDRD_UCTL_CTL_DRD_MODE ;
443- cvmx_write_csr (uctl_ctl_reg , val );
462+ dwc3_octeon_writeq (uctl_ctl_reg , val );
444463
445464 return 0 ;
446465}
447466
448- static void __init dwc3_octeon_set_endian_mode (u64 base )
467+ static void __init dwc3_octeon_set_endian_mode (void __iomem * base )
449468{
450469 u64 val ;
451- u64 uctl_shim_cfg_reg = base + USBDRD_UCTL_SHIM_CFG ;
470+ void __iomem * uctl_shim_cfg_reg = base + USBDRD_UCTL_SHIM_CFG ;
452471
453- val = cvmx_read_csr (uctl_shim_cfg_reg );
472+ val = dwc3_octeon_readq (uctl_shim_cfg_reg );
454473 val &= ~USBDRD_UCTL_SHIM_CFG_DMA_ENDIAN_MODE ;
455474 val &= ~USBDRD_UCTL_SHIM_CFG_CSR_ENDIAN_MODE ;
456475#ifdef __BIG_ENDIAN
457476 val |= FIELD_PREP (USBDRD_UCTL_SHIM_CFG_DMA_ENDIAN_MODE , 1 );
458477 val |= FIELD_PREP (USBDRD_UCTL_SHIM_CFG_CSR_ENDIAN_MODE , 1 );
459478#endif
460- cvmx_write_csr (uctl_shim_cfg_reg , val );
479+ dwc3_octeon_writeq (uctl_shim_cfg_reg , val );
461480}
462481
463- static void __init dwc3_octeon_phy_reset (u64 base )
482+ static void __init dwc3_octeon_phy_reset (void __iomem * base )
464483{
465484 u64 val ;
466- u64 uctl_ctl_reg = base + USBDRD_UCTL_CTL ;
485+ void __iomem * uctl_ctl_reg = base + USBDRD_UCTL_CTL ;
467486
468- val = cvmx_read_csr (uctl_ctl_reg );
487+ val = dwc3_octeon_readq (uctl_ctl_reg );
469488 val &= ~USBDRD_UCTL_CTL_UPHY_RST ;
470- cvmx_write_csr (uctl_ctl_reg , val );
489+ dwc3_octeon_writeq (uctl_ctl_reg , val );
471490}
472491
473492static int __init dwc3_octeon_device_init (void )
@@ -506,10 +525,10 @@ static int __init dwc3_octeon_device_init(void)
506525 }
507526
508527 mutex_lock (& dwc3_octeon_clocks_mutex );
509- if (dwc3_octeon_clocks_start (& pdev -> dev , ( u64 ) base ) == 0 )
528+ if (dwc3_octeon_clocks_start (& pdev -> dev , base ) == 0 )
510529 dev_info (& pdev -> dev , "clocks initialized.\n" );
511- dwc3_octeon_set_endian_mode (( u64 ) base );
512- dwc3_octeon_phy_reset (( u64 ) base );
530+ dwc3_octeon_set_endian_mode (base );
531+ dwc3_octeon_phy_reset (base );
513532 mutex_unlock (& dwc3_octeon_clocks_mutex );
514533 devm_iounmap (& pdev -> dev , base );
515534 devm_release_mem_region (& pdev -> dev , res -> start ,
0 commit comments