Lines Matching refs:interface

97  * @param interface Interface to init
98 * @param index Index of prot on the interface
102 static int __cvmx_helper_sgmii_hardware_init_one_time(int interface, int index)
110 gmxx_prtx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
112 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmxx_prtx_cfg.u64);
117 pcsx_miscx_ctl_reg.u64 = cvmx_read_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface));
118 pcsx_linkx_timer_count_reg.u64 = cvmx_read_csr(CVMX_PCSX_LINKX_TIMER_COUNT_REG(index, interface));
135 cvmx_write_csr(CVMX_PCSX_LINKX_TIMER_COUNT_REG(index, interface), pcsx_linkx_timer_count_reg.u64);
147 pcsx_anx_adv_reg.u64 = cvmx_read_csr(CVMX_PCSX_ANX_ADV_REG(index, interface));
152 cvmx_write_csr(CVMX_PCSX_ANX_ADV_REG(index, interface), pcsx_anx_adv_reg.u64);
157 /* If the interface does not have PHY, then set explicitly in PHY mode
161 cvmx_dprintf("SGMII%d%d: Forcing PHY mode as PHY address is not set\n", interface, index);
163 cvmx_write_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface), pcsx_miscx_ctl_reg.u64);
170 pcsx_sgmx_an_adv_reg.u64 = cvmx_read_csr(CVMX_PCSX_SGMX_AN_ADV_REG(index, interface));
173 cvmx_write_csr(CVMX_PCSX_SGMX_AN_ADV_REG(index, interface), pcsx_sgmx_an_adv_reg.u64);
201 * @param interface Interface to init
202 * @param index Index of prot on the interface
206 static int __cvmx_helper_sgmii_hardware_init_link(int interface, int index)
223 control_reg.u64 = cvmx_read_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface));
230 if( (cvmx_sysinfo_get()->board_type == CVMX_BOARD_TYPE_CUST_TNPA56X4) && (interface == 0) )
236 cvmx_write_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface), control_reg.u64);
237 if (CVMX_WAIT_FOR_FIELD64(CVMX_PCSX_MRX_CONTROL_REG(index, interface), cvmx_pcsx_mrx_control_reg_t, reset, ==, 0, link_timeout))
239 cvmx_dprintf("SGMII%d: Timeout waiting for port %d to finish reset\n", interface, index);
248 cvmx_write_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface), control_reg.u64);
254 CVMX_WAIT_FOR_FIELD64(CVMX_PCSX_MRX_STATUS_REG(index, interface), cvmx_pcsx_mrx_status_reg_t, an_cpt, ==, 1, 10000))
256 //cvmx_dprintf("SGMII%d: Port %d link timeout\n", interface, index);
268 * @param interface Interface to init
269 * @param index Index of prot on the interface
274 static int __cvmx_helper_sgmii_hardware_init_link_speed(int interface, int index, cvmx_helper_link_info_t link_info)
286 gmxx_prtx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
289 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmxx_prtx_cfg.u64);
292 if (CVMX_WAIT_FOR_FIELD64(CVMX_GMXX_PRTX_CFG(index, interface), cvmx_gmxx_prtx_cfg_t, rx_idle, ==, 1, 10000) ||
293 CVMX_WAIT_FOR_FIELD64(CVMX_GMXX_PRTX_CFG(index, interface), cvmx_gmxx_prtx_cfg_t, tx_idle, ==, 1, 10000))
295 cvmx_dprintf("SGMII%d: Timeout waiting for port %d to be idle\n", interface, index);
300 gmxx_prtx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
303 pcsx_miscx_ctl_reg.u64 = cvmx_read_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface));
320 cvmx_write_csr(CVMX_GMXX_TXX_SLOT(index, interface), 64);
321 cvmx_write_csr(CVMX_GMXX_TXX_BURST(index, interface), 0);
328 cvmx_write_csr(CVMX_GMXX_TXX_SLOT(index, interface), 64);
329 cvmx_write_csr(CVMX_GMXX_TXX_BURST(index, interface), 0);
336 cvmx_write_csr(CVMX_GMXX_TXX_SLOT(index, interface), 512);
338 cvmx_write_csr(CVMX_GMXX_TXX_BURST(index, interface), 0); // full duplex
340 cvmx_write_csr(CVMX_GMXX_TXX_BURST(index, interface), 8192); // half duplex
347 cvmx_write_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface), pcsx_miscx_ctl_reg.u64);
350 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmxx_prtx_cfg.u64);
353 gmxx_prtx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
357 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmxx_prtx_cfg.u64);
365 * Bring up the SGMII interface to be ready for packet I/O but
369 * @param interface Interface to bringup
370 * @param num_ports Number of ports on the interface
374 static int __cvmx_helper_sgmii_hardware_init(int interface, int num_ports)
410 __cvmx_helper_setup_gmx(interface, num_ports);
414 int ipd_port = cvmx_helper_get_ipd_port(interface, index);
415 __cvmx_helper_sgmii_hardware_init_one_time(interface, index);
430 int __cvmx_helper_sgmii_enumerate(int interface)
440 * Probe a SGMII interface and determine the number of ports
441 * connected to it. The SGMII interface should still be down after
444 * @param interface Interface to probe
446 * @return Number of ports on the interface. Zero to disable.
448 int __cvmx_helper_sgmii_probe(int interface)
456 int qlm = cvmx_qlm_interface(interface);
462 /* Due to errata GMX-700 on CN56XXp1.x and CN52XXp1.x, the interface
465 mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
467 cvmx_write_csr(CVMX_GMXX_INF_MODE(interface), mode.u64);
469 return __cvmx_helper_sgmii_enumerate(interface);
475 * Bringup and enable a SGMII interface. After this call packet
479 * @param interface Interface to bring up
483 int __cvmx_helper_sgmii_enable(int interface)
485 int num_ports = cvmx_helper_ports_on_interface(interface);
498 gmxx_prtx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
499 gmxx_prtx_cfg.s.pknd = cvmx_helper_get_pknd(interface, index);
500 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmxx_prtx_cfg.u64);
503 bpid_map.u64 = cvmx_read_csr(CVMX_GMXX_BPID_MAPX(index, interface));
505 bpid_map.s.bpid = cvmx_helper_get_bpid(interface, index);
506 cvmx_write_csr(CVMX_GMXX_BPID_MAPX(index, interface), bpid_map.u64);
508 bpid_msk.u64 = cvmx_read_csr(CVMX_GMXX_BPID_MSK(interface));
511 cvmx_write_csr(CVMX_GMXX_BPID_MSK(interface), bpid_msk.u64);
515 __cvmx_helper_sgmii_hardware_init(interface, num_ports);
525 CVMX_GMXX_TXX_APPEND(index, interface));
528 cvmx_write_csr(CVMX_GMXX_TXX_APPEND(index, interface),
540 append_cfg.u64 = cvmx_read_csr(CVMX_GMXX_TXX_APPEND(index, interface));
541 sgmii_ctl.u64 = cvmx_read_csr(CVMX_GMXX_TXX_SGMII_CTL(index, interface));
543 cvmx_write_csr(CVMX_GMXX_TXX_SGMII_CTL(index, interface), sgmii_ctl.u64);
545 gmxx_prtx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
547 cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmxx_prtx_cfg.u64);
568 int interface = cvmx_helper_get_interface_num(ipd_port);
586 inf_mode.u64 = cvmx_read_csr(CVMX_GMXX_INF_MODE(interface));
594 qlm = cvmx_qlm_interface(interface);
601 pcsx_mrx_control_reg.u64 = cvmx_read_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface));
612 pcsx_miscx_ctl_reg.u64 = cvmx_read_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface));
617 int interface = cvmx_helper_get_interface_num(ipd_port);
624 anxx_adv.u64 = cvmx_read_csr(CVMX_PCSX_ANX_ADV_REG(index, interface));
625 mrx_status.u64 = cvmx_read_csr(CVMX_PCSX_MRX_STATUS_REG(index, interface));
626 mode_type.u64 = cvmx_read_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface));
629 inband_status.u64 = cvmx_read_csr(CVMX_PCSX_ANX_RESULTS_REG(index, interface));
661 pcsx_mrx_status_reg.u64 = cvmx_read_csr(CVMX_PCSX_MRX_STATUS_REG(index, interface));
664 if (__cvmx_helper_sgmii_hardware_init_link(interface, index) != 0)
669 pcsx_anx_results_reg.u64 = cvmx_read_csr(CVMX_PCSX_ANX_RESULTS_REG(index, interface));
723 int interface = cvmx_helper_get_interface_num(ipd_port);
727 __cvmx_helper_sgmii_hardware_init_link(interface, index);
732 control_reg.u64 = cvmx_read_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface));
734 cvmx_write_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface), control_reg.u64);
735 cvmx_read_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface));
738 cvmx_write_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface), pcsx_miscx_ctl_reg.u64);
739 cvmx_read_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface));
742 return __cvmx_helper_sgmii_hardware_init_link_speed(interface, index, link_info);
761 int interface = cvmx_helper_get_interface_num(ipd_port);
766 pcsx_mrx_control_reg.u64 = cvmx_read_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface));
768 cvmx_write_csr(CVMX_PCSX_MRX_CONTROL_REG(index, interface), pcsx_mrx_control_reg.u64);
770 pcsx_miscx_ctl_reg.u64 = cvmx_read_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface));
772 cvmx_write_csr(CVMX_PCSX_MISCX_CTL_REG(index, interface), pcsx_miscx_ctl_reg.u64);
774 __cvmx_helper_sgmii_hardware_init_link(interface, index);