.. | .. |
---|
261 | 261 | * |
---|
262 | 262 | * Returns Link state |
---|
263 | 263 | */ |
---|
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) |
---|
265 | 265 | { |
---|
266 | 266 | int interface = cvmx_helper_get_interface_num(ipd_port); |
---|
267 | 267 | int index = cvmx_helper_get_interface_index_num(ipd_port); |
---|
.. | .. |
---|
270 | 270 | asxx_prt_loop.u64 = cvmx_read_csr(CVMX_ASXX_PRT_LOOP(interface)); |
---|
271 | 271 | if (asxx_prt_loop.s.int_loop & (1 << index)) { |
---|
272 | 272 | /* Force 1Gbps full duplex on internal loopback */ |
---|
273 | | - cvmx_helper_link_info_t result; |
---|
| 273 | + union cvmx_helper_link_info result; |
---|
274 | 274 | result.u64 = 0; |
---|
275 | 275 | result.s.full_duplex = 1; |
---|
276 | 276 | result.s.link_up = 1; |
---|
.. | .. |
---|
292 | 292 | * Returns Zero on success, negative on failure |
---|
293 | 293 | */ |
---|
294 | 294 | 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) |
---|
296 | 296 | { |
---|
297 | 297 | int result = 0; |
---|
298 | 298 | int interface = cvmx_helper_get_interface_num(ipd_port); |
---|
.. | .. |
---|
448 | 448 | cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), new_gmx_cfg.u64); |
---|
449 | 449 | |
---|
450 | 450 | 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; |
---|
519 | 451 | } |
---|