Lines Matching refs:lmac_id

64 static int cgx_fwi_link_change(struct cgx *cgx, int lmac_id, bool en);
82 bool is_lmac_valid(struct cgx *cgx, int lmac_id) in is_lmac_valid() argument
84 if (!cgx || lmac_id < 0 || lmac_id >= MAX_LMAC_PER_CGX) in is_lmac_valid()
86 return test_bit(lmac_id, &cgx->lmac_bmap); in is_lmac_valid()
109 struct lmac *lmac_pdata(u8 lmac_id, struct cgx *cgx) in lmac_pdata() argument
111 if (!cgx || lmac_id >= MAX_LMAC_PER_CGX) in lmac_pdata()
114 return cgx->lmac_idmap[lmac_id]; in lmac_pdata()
153 void cgx_lmac_write(int cgx_id, int lmac_id, u64 offset, u64 val) in cgx_lmac_write() argument
157 cgx_write(cgx_dev, lmac_id, offset, val); in cgx_lmac_write()
160 u64 cgx_lmac_read(int cgx_id, int lmac_id, u64 offset) in cgx_lmac_read() argument
164 return cgx_read(cgx_dev, lmac_id, offset); in cgx_lmac_read()
177 u8 cgx_lmac_get_p2x(int cgx_id, int lmac_id) in cgx_lmac_get_p2x() argument
182 cfg = cgx_read(cgx_dev, lmac_id, CGXX_CMRX_CFG); in cgx_lmac_get_p2x()
192 int cgx_get_link_info(void *cgxd, int lmac_id, in cgx_get_link_info() argument
195 struct lmac *lmac = lmac_pdata(lmac_id, cgxd); in cgx_get_link_info()
214 int cgx_lmac_addr_set(u8 cgx_id, u8 lmac_id, u8 *mac_addr) in cgx_lmac_addr_set() argument
226 cgx_write(cgx_dev, 0, (CGXX_CMRX_RX_DMAC_CAM0 + (lmac_id * 0x8)), in cgx_lmac_addr_set()
227 cfg | CGX_DMAC_CAM_ADDR_ENABLE | ((u64)lmac_id << 49)); in cgx_lmac_addr_set()
229 cfg = cgx_read(cgx_dev, lmac_id, CGXX_CMRX_RX_DMAC_CTL0); in cgx_lmac_addr_set()
231 cgx_write(cgx_dev, lmac_id, CGXX_CMRX_RX_DMAC_CTL0, cfg); in cgx_lmac_addr_set()
236 u64 cgx_lmac_addr_get(u8 cgx_id, u8 lmac_id) in cgx_lmac_addr_get() argument
244 cfg = cgx_read(cgx_dev, 0, CGXX_CMRX_RX_DMAC_CAM0 + lmac_id * 0x8); in cgx_lmac_addr_get()
248 int cgx_set_pkind(void *cgxd, u8 lmac_id, int pkind) in cgx_set_pkind() argument
252 if (!is_lmac_valid(cgx, lmac_id)) in cgx_set_pkind()
255 cgx_write(cgx, lmac_id, CGXX_CMRX_RX_ID_MAP, (pkind & 0x3F)); in cgx_set_pkind()
259 static u8 cgx_get_lmac_type(void *cgxd, int lmac_id) in cgx_get_lmac_type() argument
264 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_CFG); in cgx_get_lmac_type()
269 int cgx_lmac_internal_loopback(void *cgxd, int lmac_id, bool enable) in cgx_lmac_internal_loopback() argument
275 if (!is_lmac_valid(cgx, lmac_id)) in cgx_lmac_internal_loopback()
278 lmac_type = cgx->mac_ops->get_lmac_type(cgx, lmac_id); in cgx_lmac_internal_loopback()
280 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_PCS_MRX_CTL); in cgx_lmac_internal_loopback()
285 cgx_write(cgx, lmac_id, CGXX_GMP_PCS_MRX_CTL, cfg); in cgx_lmac_internal_loopback()
287 cfg = cgx_read(cgx, lmac_id, CGXX_SPUX_CONTROL1); in cgx_lmac_internal_loopback()
292 cgx_write(cgx, lmac_id, CGXX_SPUX_CONTROL1, cfg); in cgx_lmac_internal_loopback()
297 void cgx_lmac_promisc_config(int cgx_id, int lmac_id, bool enable) in cgx_lmac_promisc_config() argument
309 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0); in cgx_lmac_promisc_config()
312 cgx_write(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0, cfg); in cgx_lmac_promisc_config()
315 (CGXX_CMRX_RX_DMAC_CAM0 + lmac_id * 0x8)); in cgx_lmac_promisc_config()
318 (CGXX_CMRX_RX_DMAC_CAM0 + lmac_id * 0x8), cfg); in cgx_lmac_promisc_config()
321 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0); in cgx_lmac_promisc_config()
323 cgx_write(cgx, lmac_id, CGXX_CMRX_RX_DMAC_CTL0, cfg); in cgx_lmac_promisc_config()
325 (CGXX_CMRX_RX_DMAC_CAM0 + lmac_id * 0x8)); in cgx_lmac_promisc_config()
328 (CGXX_CMRX_RX_DMAC_CAM0 + lmac_id * 0x8), cfg); in cgx_lmac_promisc_config()
333 void cgx_lmac_enadis_rx_pause_fwding(void *cgxd, int lmac_id, bool enable) in cgx_lmac_enadis_rx_pause_fwding() argument
342 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL); in cgx_lmac_enadis_rx_pause_fwding()
344 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg); in cgx_lmac_enadis_rx_pause_fwding()
346 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_enadis_rx_pause_fwding()
348 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_enadis_rx_pause_fwding()
350 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL); in cgx_lmac_enadis_rx_pause_fwding()
352 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg); in cgx_lmac_enadis_rx_pause_fwding()
354 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_enadis_rx_pause_fwding()
356 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_enadis_rx_pause_fwding()
360 int cgx_get_rx_stats(void *cgxd, int lmac_id, int idx, u64 *rx_stat) in cgx_get_rx_stats() argument
364 if (!is_lmac_valid(cgx, lmac_id)) in cgx_get_rx_stats()
366 *rx_stat = cgx_read(cgx, lmac_id, CGXX_CMRX_RX_STAT0 + (idx * 8)); in cgx_get_rx_stats()
370 int cgx_get_tx_stats(void *cgxd, int lmac_id, int idx, u64 *tx_stat) in cgx_get_tx_stats() argument
374 if (!is_lmac_valid(cgx, lmac_id)) in cgx_get_tx_stats()
376 *tx_stat = cgx_read(cgx, lmac_id, CGXX_CMRX_TX_STAT0 + (idx * 8)); in cgx_get_tx_stats()
413 int cgx_get_fec_stats(void *cgxd, int lmac_id, struct cgx_fec_stats_rsp *rsp) in cgx_get_fec_stats() argument
419 if (!cgx || lmac_id >= cgx->lmac_count) in cgx_get_fec_stats()
422 cgx_set_fec_stats_count(&cgx->lmac_idmap[lmac_id]->link_info); in cgx_get_fec_stats()
423 if (cgx->lmac_idmap[lmac_id]->link_info.fec == OTX2_FEC_BASER) { in cgx_get_fec_stats()
432 cgx_read(cgx, lmac_id, corr_reg + (stats * 8)); in cgx_get_fec_stats()
434 cgx_read(cgx, lmac_id, uncorr_reg + (stats * 8)); in cgx_get_fec_stats()
439 int cgx_lmac_rx_tx_enable(void *cgxd, int lmac_id, bool enable) in cgx_lmac_rx_tx_enable() argument
444 if (!is_lmac_valid(cgx, lmac_id)) in cgx_lmac_rx_tx_enable()
447 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_CFG); in cgx_lmac_rx_tx_enable()
452 cgx_write(cgx, lmac_id, CGXX_CMRX_CFG, cfg); in cgx_lmac_rx_tx_enable()
456 int cgx_lmac_tx_enable(void *cgxd, int lmac_id, bool enable) in cgx_lmac_tx_enable() argument
461 if (!is_lmac_valid(cgx, lmac_id)) in cgx_lmac_tx_enable()
464 cfg = cgx_read(cgx, lmac_id, CGXX_CMRX_CFG); in cgx_lmac_tx_enable()
472 cgx_write(cgx, lmac_id, CGXX_CMRX_CFG, cfg); in cgx_lmac_tx_enable()
476 static int cgx_lmac_get_pause_frm_status(void *cgxd, int lmac_id, in cgx_lmac_get_pause_frm_status() argument
485 if (!is_lmac_valid(cgx, lmac_id)) in cgx_lmac_get_pause_frm_status()
488 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_get_pause_frm_status()
491 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL); in cgx_lmac_get_pause_frm_status()
496 static int cgx_lmac_enadis_pause_frm(void *cgxd, int lmac_id, in cgx_lmac_enadis_pause_frm() argument
505 if (!is_lmac_valid(cgx, lmac_id)) in cgx_lmac_enadis_pause_frm()
508 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_enadis_pause_frm()
511 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_enadis_pause_frm()
513 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL); in cgx_lmac_enadis_pause_frm()
516 cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg); in cgx_lmac_enadis_pause_frm()
520 cfg &= ~CGX_CMR_RX_OVR_BP_EN(lmac_id); in cgx_lmac_enadis_pause_frm()
522 cfg |= CGX_CMR_RX_OVR_BP_EN(lmac_id); in cgx_lmac_enadis_pause_frm()
523 cfg &= ~CGX_CMR_RX_OVR_BP_BP(lmac_id); in cgx_lmac_enadis_pause_frm()
529 static void cgx_lmac_pause_frm_config(void *cgxd, int lmac_id, bool enable) in cgx_lmac_pause_frm_config() argument
534 if (!is_lmac_valid(cgx, lmac_id)) in cgx_lmac_pause_frm_config()
538 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_pause_frm_config()
540 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_pause_frm_config()
542 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL); in cgx_lmac_pause_frm_config()
544 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg); in cgx_lmac_pause_frm_config()
547 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL); in cgx_lmac_pause_frm_config()
549 cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg); in cgx_lmac_pause_frm_config()
552 cgx_write(cgx, lmac_id, CGXX_SMUX_TX_PAUSE_PKT_TIME, in cgx_lmac_pause_frm_config()
554 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_PAUSE_PKT_INTERVAL); in cgx_lmac_pause_frm_config()
556 cgx_write(cgx, lmac_id, CGXX_SMUX_TX_PAUSE_PKT_INTERVAL, in cgx_lmac_pause_frm_config()
559 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_TX_PAUSE_PKT_TIME, in cgx_lmac_pause_frm_config()
562 cfg = cgx_read(cgx, lmac_id, in cgx_lmac_pause_frm_config()
565 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_TX_PAUSE_PKT_INTERVAL, in cgx_lmac_pause_frm_config()
569 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_pause_frm_config()
571 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_pause_frm_config()
573 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL); in cgx_lmac_pause_frm_config()
575 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg); in cgx_lmac_pause_frm_config()
578 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_TX_CTL); in cgx_lmac_pause_frm_config()
580 cgx_write(cgx, lmac_id, CGXX_SMUX_TX_CTL, cfg); in cgx_lmac_pause_frm_config()
584 void cgx_lmac_ptp_config(void *cgxd, int lmac_id, bool enable) in cgx_lmac_ptp_config() argument
597 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL); in cgx_lmac_ptp_config()
599 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg); in cgx_lmac_ptp_config()
601 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_ptp_config()
603 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_ptp_config()
606 cfg = cgx_read(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL); in cgx_lmac_ptp_config()
608 cgx_write(cgx, lmac_id, CGXX_GMP_GMI_RXX_FRM_CTL, cfg); in cgx_lmac_ptp_config()
610 cfg = cgx_read(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL); in cgx_lmac_ptp_config()
612 cgx_write(cgx, lmac_id, CGXX_SMUX_RX_FRM_CTL, cfg); in cgx_lmac_ptp_config()
630 cmd = cgx_read(cgx, lmac->lmac_id, CGX_COMMAND_REG); in cgx_fwi_cmd_send()
643 cgx_write(cgx, lmac->lmac_id, CGX_COMMAND_REG, req); in cgx_fwi_cmd_send()
650 cgx->cgx_id, lmac->lmac_id); in cgx_fwi_cmd_send()
665 int cgx_fwi_cmd_generic(u64 req, u64 *resp, struct cgx *cgx, int lmac_id) in cgx_fwi_cmd_generic() argument
670 lmac = lmac_pdata(lmac_id, cgx); in cgx_fwi_cmd_generic()
826 struct cgx *cgx, u8 lmac_id) in link_status_user_format() argument
835 linfo->lmac_type_id = cgx_get_lmac_type(cgx, lmac_id); in link_status_user_format()
852 link_status_user_format(lstat, &event.link_uinfo, cgx, lmac->lmac_id); in cgx_link_change_handler()
856 event.lmac_id = lmac->lmac_id; in cgx_link_change_handler()
870 cgx->cgx_id, lmac->lmac_id); in cgx_link_change_handler()
873 cgx->cgx_id, lmac->lmac_id, err_type); in cgx_link_change_handler()
876 cgx->cgx_id, lmac->lmac_id, in cgx_link_change_handler()
920 event = cgx_read(cgx, lmac->lmac_id, CGX_EVENT_REG); in cgx_fwi_event_handler()
954 cgx_write(lmac->cgx, lmac->lmac_id, CGX_EVENT_REG, 0); in cgx_fwi_event_handler()
955 cgx_write(lmac->cgx, lmac->lmac_id, offset, clear_bit); in cgx_fwi_event_handler()
963 int cgx_lmac_evh_register(struct cgx_event_cb *cb, void *cgxd, int lmac_id) in cgx_lmac_evh_register() argument
968 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_evh_register()
977 int cgx_lmac_evh_unregister(void *cgxd, int lmac_id) in cgx_lmac_evh_unregister() argument
983 lmac = lmac_pdata(lmac_id, cgx); in cgx_lmac_evh_unregister()
1016 int cgx_id, int lmac_id) in cgx_set_link_mode() argument
1037 return cgx_fwi_cmd_generic(req, &resp, cgx, lmac_id); in cgx_set_link_mode()
1039 int cgx_set_fec(u64 fec, int cgx_id, int lmac_id) in cgx_set_fec() argument
1051 err = cgx_fwi_cmd_generic(req, &resp, cgx, lmac_id); in cgx_set_fec()
1055 cgx->lmac_idmap[lmac_id]->link_info.fec = in cgx_set_fec()
1057 return cgx->lmac_idmap[lmac_id]->link_info.fec; in cgx_set_fec()
1060 int cgx_get_phy_fec_stats(void *cgxd, int lmac_id) in cgx_get_phy_fec_stats() argument
1069 return cgx_fwi_cmd_generic(req, &resp, cgx, lmac_id); in cgx_get_phy_fec_stats()
1072 static int cgx_fwi_link_change(struct cgx *cgx, int lmac_id, bool enable) in cgx_fwi_link_change() argument
1082 return cgx_fwi_cmd_generic(req, &resp, cgx, lmac_id); in cgx_fwi_link_change()
1176 cgx_write(cgx, lmac->lmac_id, offset, ena_bit); in cgx_configure_interrupt()
1191 return cgx->lmac_idmap[lmac_index]->lmac_id; in cgx_get_lmacid()
1230 lmac->lmac_id = __ffs64(lmac_list); in cgx_lmac_init()
1231 lmac_list &= ~BIT_ULL(lmac->lmac_id); in cgx_lmac_init()
1233 lmac->lmac_id = i; in cgx_lmac_init()
1240 err = cgx_configure_interrupt(cgx, lmac, lmac->lmac_id, false); in cgx_lmac_init()
1245 cgx->lmac_idmap[lmac->lmac_id] = lmac; in cgx_lmac_init()
1246 cgx->mac_ops->mac_pause_frm_config(cgx, lmac->lmac_id, true); in cgx_lmac_init()
1247 set_bit(lmac->lmac_id, &cgx->lmac_bmap); in cgx_lmac_init()
1275 cgx->mac_ops->mac_pause_frm_config(cgx, lmac->lmac_id, false); in cgx_lmac_exit()
1276 cgx_configure_interrupt(cgx, lmac, lmac->lmac_id, true); in cgx_lmac_exit()