forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/arch/mips/cavium-octeon/executive/cvmx-helper-rgmii.c
....@@ -261,7 +261,7 @@
261261 *
262262 * Returns Link state
263263 */
264
-cvmx_helper_link_info_t __cvmx_helper_rgmii_link_get(int ipd_port)
264
+union cvmx_helper_link_info __cvmx_helper_rgmii_link_get(int ipd_port)
265265 {
266266 int interface = cvmx_helper_get_interface_num(ipd_port);
267267 int index = cvmx_helper_get_interface_index_num(ipd_port);
....@@ -270,7 +270,7 @@
270270 asxx_prt_loop.u64 = cvmx_read_csr(CVMX_ASXX_PRT_LOOP(interface));
271271 if (asxx_prt_loop.s.int_loop & (1 << index)) {
272272 /* Force 1Gbps full duplex on internal loopback */
273
- cvmx_helper_link_info_t result;
273
+ union cvmx_helper_link_info result;
274274 result.u64 = 0;
275275 result.s.full_duplex = 1;
276276 result.s.link_up = 1;
....@@ -292,7 +292,7 @@
292292 * Returns Zero on success, negative on failure
293293 */
294294 int __cvmx_helper_rgmii_link_set(int ipd_port,
295
- cvmx_helper_link_info_t link_info)
295
+ union cvmx_helper_link_info link_info)
296296 {
297297 int result = 0;
298298 int interface = cvmx_helper_get_interface_num(ipd_port);
....@@ -448,72 +448,4 @@
448448 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), new_gmx_cfg.u64);
449449
450450 return result;
451
-}
452
-
453
-/**
454
- * Configure a port for internal and/or external loopback. Internal loopback
455
- * causes packets sent by the port to be received by Octeon. External loopback
456
- * causes packets received from the wire to sent out again.
457
- *
458
- * @ipd_port: IPD/PKO port to loopback.
459
- * @enable_internal:
460
- * Non zero if you want internal loopback
461
- * @enable_external:
462
- * Non zero if you want external loopback
463
- *
464
- * Returns Zero on success, negative on failure.
465
- */
466
-int __cvmx_helper_rgmii_configure_loopback(int ipd_port, int enable_internal,
467
- int enable_external)
468
-{
469
- int interface = cvmx_helper_get_interface_num(ipd_port);
470
- int index = cvmx_helper_get_interface_index_num(ipd_port);
471
- int original_enable;
472
- union cvmx_gmxx_prtx_cfg gmx_cfg;
473
- union cvmx_asxx_prt_loop asxx_prt_loop;
474
-
475
- /* Read the current enable state and save it */
476
- gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
477
- original_enable = gmx_cfg.s.en;
478
- /* Force port to be disabled */
479
- gmx_cfg.s.en = 0;
480
- if (enable_internal) {
481
- /* Force speed if we're doing internal loopback */
482
- gmx_cfg.s.duplex = 1;
483
- gmx_cfg.s.slottime = 1;
484
- gmx_cfg.s.speed = 1;
485
- cvmx_write_csr(CVMX_GMXX_TXX_CLK(index, interface), 1);
486
- cvmx_write_csr(CVMX_GMXX_TXX_SLOT(index, interface), 0x200);
487
- cvmx_write_csr(CVMX_GMXX_TXX_BURST(index, interface), 0x2000);
488
- }
489
- cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64);
490
-
491
- /* Set the loopback bits */
492
- asxx_prt_loop.u64 = cvmx_read_csr(CVMX_ASXX_PRT_LOOP(interface));
493
- if (enable_internal)
494
- asxx_prt_loop.s.int_loop |= 1 << index;
495
- else
496
- asxx_prt_loop.s.int_loop &= ~(1 << index);
497
- if (enable_external)
498
- asxx_prt_loop.s.ext_loop |= 1 << index;
499
- else
500
- asxx_prt_loop.s.ext_loop &= ~(1 << index);
501
- cvmx_write_csr(CVMX_ASXX_PRT_LOOP(interface), asxx_prt_loop.u64);
502
-
503
- /* Force enables in internal loopback */
504
- if (enable_internal) {
505
- uint64_t tmp;
506
- tmp = cvmx_read_csr(CVMX_ASXX_TX_PRT_EN(interface));
507
- cvmx_write_csr(CVMX_ASXX_TX_PRT_EN(interface),
508
- (1 << index) | tmp);
509
- tmp = cvmx_read_csr(CVMX_ASXX_RX_PRT_EN(interface));
510
- cvmx_write_csr(CVMX_ASXX_RX_PRT_EN(interface),
511
- (1 << index) | tmp);
512
- original_enable = 1;
513
- }
514
-
515
- /* Restore the enable state */
516
- gmx_cfg.s.en = original_enable;
517
- cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64);
518
- return 0;
519451 }