/**************************************************************************** Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT be copied by any method or incorporated into another program without the express written consent of Aerospace C.Power. This Information or any portion thereof remains the property of Aerospace C.Power. The Information contained herein is believed to be accurate and Aerospace C.Power assumes no responsibility or liability for its use in any way and conveys no license or title under any patent or copyright and makes no representation or warranty that this Information is free from patent or copyright infringement. ****************************************************************************/ #include "phy_status.h" #include "phy_bb.h" #include "hw_tonemask.h" #include "hw_reg_api.h" #include "phy_dfe_reg.h" #include "phy_tx_reg.h" #include "phy_reg.h" #include "phy_ana.h" #include "phy_txrx_pwr.h" #include "hw_phy_api.h" #include "iot_dbglog_api.h" #include "iot_dbglog.h" #include "iot_io.h" #if DEG_TX_ABORT #include "mac_tmr_reg.h" #include "mac_raw_reg.h" #include "mac_sys_reg.h" #endif /* 30 minutes period, uint 10 mimutes */ #define PHY_PERIOD_30_MIN 3 /* 60 minutes period, uint 10 mimutes */ #define PHY_PERIOD_60_MIN 6 static uint8_t g_phy_period_30_min_cnt = 0, g_phy_period_60_min_cnt = 0; uint32_t phy_get_rx_dc() { #if HW_PLATFORM >= HW_PLATFORM_FPGA volatile uint16_t dc_pgf = 0; volatile uint16_t dc_pga = 0; /* scan each gain */ uint8_t i; for(i = 0; i < 8; i++) { phy_pgf_pga_dc_cal_get(i+77, &dc_pgf, &dc_pga); g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[i] = dc_pga; g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[i] = dc_pga; } #endif return 0; } /* dc comp */ void phy_dc_comp_gain_get(volatile uint16_t *gain0, volatile uint16_t *gain1, volatile uint16_t *gain2, volatile uint16_t *gain3) { #if HW_PLATFORM >= HW_PLATFORM_FPGA uint32_t tmp = 0; tmp = PHY_DFE_READ_REG(CFG_BB_DC_COMP0_ADDR); *gain0 = (uint16_t)REG_FIELD_GET(SW_DC_COMP_GAIN0, tmp); *gain1 = (uint16_t)REG_FIELD_GET(SW_DC_COMP_GAIN1, tmp); tmp = PHY_DFE_READ_REG(CFG_BB_DC_COMP1_ADDR); *gain2 = (uint16_t)REG_FIELD_GET(SW_DC_COMP_GAIN2, tmp); *gain3 = (uint16_t)REG_FIELD_GET(SW_DC_COMP_GAIN3, tmp); #else (void)gain0; (void)gain1; (void)gain2; (void)gain3; #endif } uint32_t phy_get_tx_dc() { #if HW_PLATFORM >= HW_PLATFORM_FPGA volatile uint16_t tx_dc_gain0 = 0; volatile uint16_t tx_dc_gain1 = 0; volatile uint16_t tx_dc_gain2 = 0; volatile uint16_t tx_dc_gain3 = 0; phy_dc_comp_gain_get(&tx_dc_gain0, &tx_dc_gain1,\ &tx_dc_gain2, &tx_dc_gain3); g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[0] = tx_dc_gain0; g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[1] = tx_dc_gain1; g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[2] = tx_dc_gain2; g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[3] = tx_dc_gain3; #endif return 0; } uint32_t phy_add_dc_cal_cnt() { g_phy_ctxt.dep.phy_status.dc_cal_cnt++; return 0; } uint32_t phy_get_dc_cal_cnt() { return g_phy_ctxt.dep.phy_status.dc_cal_cnt; } uint32_t IRAM_ATTR phy_add_overstress_cnt() { g_phy_ctxt.indep.ovs_ctxt.os_cnt++; g_phy_ctxt.indep.ovs_ctxt.no_ovs_cnt = 0; return 0; } uint32_t phy_get_overstress_cnt() { return g_phy_ctxt.indep.ovs_ctxt.os_cnt; } uint32_t phy_get_periodic_fc_err_num() { return g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_fc_fail_cnt_clr; } uint32_t phy_get_rxtd_reg_tx_pkt() { iot_phy_sts_info_t pkt_sts; phy_sts_get(&pkt_sts); g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_fc_ok_cnt = \ pkt_sts.fc_crc_ok_cnt; g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_fc_fail_cnt = \ pkt_sts.fc_crc_fail_cnt; g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_pld_ok_cnt = \ pkt_sts.pld_crc_ok_cnt; g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_pld_fail_cnt = \ pkt_sts.pld_crc_fail_cnt; g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_pkt_cnt = \ pkt_sts.sync_ok_cnt; g_phy_ctxt.dep.phy_status.phy_tx_pkt_cnt = pkt_sts.mac_tx_ok_cnt; return 0; } #if 0 uint32_t phy_get_granite_reg() { uint32_t i; uint8_t rodata = 0; uint32_t rdata = 0; for(i = 0; i < 11; i++) { phy_ana_i2c_read(i, &rdata, &rodata); g_phy_ctxt.dep.phy_status.granite_reg[i] = rdata; //需要改 } return 0; } #endif uint32_t phy_get_txfd_reg() { #if HW_PLATFORM >= HW_PLATFORM_FPGA g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt0_bd0 = \ PHY_TX_READ_REG(CFG_BB_DB_AMP_CTRL_RATE0_BAND0_ADDR); g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt0_bd1 = \ PHY_TX_READ_REG(CFG_BB_DB_AMP_CTRL_RATE0_BAND1_ADDR); g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt0_bd2 = \ PHY_TX_READ_REG(CFG_BB_DB_AMP_CTRL_RATE0_BAND2_ADDR); g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt1_bd0 = \ PHY_TX_READ_REG(CFG_BB_DB_AMP_CTRL_RATE1_BAND0_ADDR); g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt1_bd1 = \ PHY_TX_READ_REG(CFG_BB_DB_AMP_CTRL_RATE1_BAND1_ADDR); g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt1_bd2 = \ PHY_TX_READ_REG(CFG_BB_DB_AMP_CTRL_RATE1_BAND2_ADDR); #endif return 0; } uint32_t phy_get_dfe_reg() { #if HW_PLATFORM >= HW_PLATFORM_FPGA g_phy_ctxt.dep.phy_status.phy_gain_adjust_info = \ PHY_DFE_READ_REG(CFG_BB_SW_ADJUST_GAIN_ADDR); #endif return 0; } uint32_t phy_get_version() { #if HW_PLATFORM >= HW_PLATFORM_FPGA g_phy_ctxt.dep.phy_status.phy_mode = \ PHY_READ_REG(CFG_BB_VERSION_ADDR); #endif return 0; } uint32_t phy_get_band_cfg() { #if HW_PLATFORM >= HW_PLATFORM_FPGA g_phy_ctxt.dep.phy_status.phy_band.bb_r0_b0 = \ PHY_READ_REG(CFG_BB_R0_B0_TONE_ADDR); g_phy_ctxt.dep.phy_status.phy_band.bb_r0_b1 = \ PHY_READ_REG(CFG_BB_R0_B1_TONE_ADDR); g_phy_ctxt.dep.phy_status.phy_band.bb_r0_b2 = \ PHY_READ_REG(CFG_BB_R0_B2_TONE_ADDR); g_phy_ctxt.dep.phy_status.phy_band.bb_r1_b0 = \ PHY_READ_REG(CFG_BB_R1_B0_TONE_ADDR); g_phy_ctxt.dep.phy_status.phy_band.bb_r1_b1 = \ PHY_READ_REG(CFG_BB_R1_B1_TONE_ADDR); g_phy_ctxt.dep.phy_status.phy_band.bb_r1_b2 = \ PHY_READ_REG(CFG_BB_R1_B2_TONE_ADDR); #endif return 0; } uint16_t phy_set_init_cnt() { g_phy_ctxt.dep.phy_status.phy_init_cnt++; return 0; } uint16_t phy_get_init_cnt() { return g_phy_ctxt.dep.phy_status.phy_init_cnt; } uint16_t phy_set_reinit_cnt() { g_phy_ctxt.dep.phy_status.phy_reinit_cnt++; return 0; } uint16_t phy_get_reinit_cnt() { return g_phy_ctxt.dep.phy_status.phy_reinit_cnt; } void phy_print_ana_dbg_info() { } uint32_t phy_get_status() { phy_get_rx_dc(); phy_get_tx_dc(); phy_get_dc_cal_cnt(); phy_get_overstress_cnt(); /* update by log print, share with flash log */ //phy_get_rxtd_reg_tx_pkt(); //phy_get_granite_reg(); phy_get_txfd_reg(); phy_get_dfe_reg(); phy_get_version(); phy_get_band_cfg(); return 0; } void phy_get_status_printf() { phy_get_status(); if (++g_phy_period_60_min_cnt >= PHY_PERIOD_60_MIN) { iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS0_ID, 9,\ g_phy_ctxt.dep.phy_status.ppm_value,\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[0],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[0],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[1],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[1],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[2],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[2],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[3],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[3]); iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS1_ID, 9,\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[4],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[4],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[5],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[5],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[6],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[6],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pga[7],\ g_phy_ctxt.dep.phy_status.gain_dc.rx_dc_pgf[7],\ g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[0]); g_phy_period_60_min_cnt = 0; } iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS2_ID, 9,\ g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[1],\ g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[2],\ g_phy_ctxt.dep.phy_status.gain_dc.tx_dc[3],\ g_phy_ctxt.dep.phy_status.dc_cal_cnt,\ g_phy_ctxt.indep.ovs_ctxt.os_cnt,\ g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_pkt_cnt,\ g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_fc_ok_cnt,\ g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_fc_fail_cnt,\ g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_pld_ok_cnt); iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS3_ID, 9,\ g_phy_ctxt.dep.phy_status.phy_rx_cnt.phy_rx_pld_fail_cnt,\ g_phy_ctxt.dep.phy_status.phy_tx_pkt_cnt,\ g_phy_ctxt.dep.phy_status.granite_reg[0],\ g_phy_ctxt.dep.phy_status.granite_reg[1],\ g_phy_ctxt.dep.phy_status.granite_reg[2],\ g_phy_ctxt.dep.phy_status.granite_reg[3],\ g_phy_ctxt.dep.phy_status.granite_reg[4],\ g_phy_ctxt.dep.phy_status.granite_reg[5],\ g_phy_ctxt.dep.phy_status.granite_reg[6]); if (++g_phy_period_30_min_cnt >= PHY_PERIOD_30_MIN) { iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS4_ID, 9,\ g_phy_ctxt.dep.phy_status.granite_reg[7],\ g_phy_ctxt.dep.phy_status.granite_reg[8],\ g_phy_ctxt.dep.phy_status.granite_reg[9],\ g_phy_ctxt.dep.phy_status.granite_reg[10],\ g_phy_ctxt.dep.phy_status.temp_res,\ g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt0_bd0,\ g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt0_bd1,\ g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt0_bd2,\ g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt1_bd0); iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS5_ID, 8,\ g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt1_bd1,\ g_phy_ctxt.dep.phy_status.phy_tx_pwr_reg.bb_rt1_bd2,\ g_phy_ctxt.dep.phy_status.phy_band.bb_r0_b0,\ g_phy_ctxt.dep.phy_status.phy_band.bb_r0_b1,\ g_phy_ctxt.dep.phy_status.phy_band.bb_r0_b2,\ g_phy_ctxt.dep.phy_status.phy_band.bb_r1_b0,\ g_phy_ctxt.dep.phy_status.phy_band.bb_r1_b1,\ g_phy_ctxt.dep.phy_status.phy_band.bb_r1_b2); g_phy_period_30_min_cnt = 0; } iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS6_ID, 5,\ g_phy_ctxt.dep.phy_status.phy_gain_adjust_info,\ g_phy_ctxt.dep.phy_status.phy_mode, \ g_phy_ctxt.dep.phy_status.spur_array[9],\ phy_get_init_cnt(),\ phy_get_reinit_cnt()); iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS7_ID, 9,\ g_phy_ctxt.dep.phy_status.spur_array[0],\ g_phy_ctxt.dep.phy_status.spur_array[1],\ g_phy_ctxt.dep.phy_status.spur_array[2],\ g_phy_ctxt.dep.phy_status.spur_array[3],\ g_phy_ctxt.dep.phy_status.spur_array[4],\ g_phy_ctxt.dep.phy_status.spur_array[5],\ g_phy_ctxt.dep.phy_status.spur_array[6],\ g_phy_ctxt.dep.phy_status.spur_array[7],\ g_phy_ctxt.dep.phy_status.spur_array[8]); iot_dbglog_input(PLC_PHY_STATUS_MID, DBGLOG_ERR, IOT_PHY_STATUS8_ID, 7,\ g_phy_cpu_share_ctxt.nf_192p,\ g_phy_cpu_share_ctxt.nf_384p,\ g_phy_cpu_share_ctxt.nf_768p,\ g_phy_cpu_share_ctxt.nf_1536p,\ g_phy_cpu_share_ctxt.nf_3072p,\ g_phy_cpu_share_ctxt.nf_6144p,\ phy_spike_shift_en_get()); } void phy_tx_dbg_cnt_clr(void) { uint32_t tmp = 0; tmp = PHY_READ_REG(CFG_BB_TX_END_FRM_CNT_ADDR); REG_FIELD_SET(PHY_TX_ABORT_CNT_CLR, tmp, 1); REG_FIELD_SET(PHY_TX_DONE_CNT_CLR, tmp, 1); PHY_WRITE_REG(CFG_BB_TX_END_FRM_CNT_ADDR, tmp); tmp = PHY_READ_REG(CFG_BB_TX_ST_FRM_CNT_ADDR); REG_FIELD_SET(PHY_TX_PRS_CNT_CLR, tmp, 1); REG_FIELD_SET(PHY_TX_START_CNT_CLR, tmp, 1); PHY_WRITE_REG(CFG_BB_TX_ST_FRM_CNT_ADDR, tmp); } uint32_t phy_get_tx_abort_info() { #if DEG_TX_ABORT uint32_t tmp; uint32_t sw_is_tx_rawdata; uint32_t sw_timeout_en; uint32_t tx_abort_cnt; tmp = PHY_READ_REG(CFG_BB_TX_END_FRM_CNT_ADDR); tx_abort_cnt = REG_FIELD_GET(PHY_TX_ABORT_CNT, tmp); if (g_phy_ctxt.dep.tx_abort_cnt != tx_abort_cnt) { g_phy_ctxt.dep.tx_abort_cnt = tx_abort_cnt; tmp = PHY_READ_REG(CFG_BB_RAW_DATA_MODE_CTRL_ADDR); sw_is_tx_rawdata = REG_FIELD_GET(SW_IS_TX_RAW_DATA_MODE, tmp); tmp = PHY_TX_READ_REG(CFG_BB_TX_WAROUND_CTRL_ADDR); sw_timeout_en = REG_FIELD_GET(SW_TIME_OUT_EN, tmp); iot_printf("HW dbg log, sw_is_tx_rawdata:0x%x, sw_timeout_en:0x%x,"\ "tx_abort_cnt = %d," "lock_vl:0x%x, phy_tx_int_raw:0x%x, mac_30:0x%x," "sts_0:0x%x, sts_1:0x%x,sts_2:0x%x,sts_3:0x%x,"\ "sts_4:0x%x, sts_5:0x%x,sts_6:0x%x,sts_7:0x%x,"\ "mtd0:0x%x, mtd1:0x%x, mtd2:0x%x, mtd3:0x%x, mtd4:0x%x,mtd5:0x%x\n"\ "timestap:0x%x, cur_ptr_lat:0x%x, tx_fc0:0x%x, tx_fc1:0x%x,"\ "tx_fc2:%x, tx_fc3:%x, pb_sumnum:0x%x\n",\ sw_is_tx_rawdata,\ sw_timeout_en,\ g_phy_ctxt.dep.tx_abort_cnt,\ g_phy_ctxt.dep.phy_dbg_bus_lock_value,\ g_phy_ctxt.dep.phy_tx_int_raw,\ g_phy_ctxt.dep.mac_reg_30,\ g_phy_ctxt.dep.dbg_sts_0,\ g_phy_ctxt.dep.dbg_sts_1,\ g_phy_ctxt.dep.dbg_sts_2,\ g_phy_ctxt.dep.dbg_sts_3,\ g_phy_ctxt.dep.dbg_sts_4,\ g_phy_ctxt.dep.dbg_sts_5,\ g_phy_ctxt.dep.dbg_sts_6,\ g_phy_ctxt.dep.dbg_sts_7,\ g_phy_ctxt.dep.mac_tx_data_0,\ g_phy_ctxt.dep.mac_tx_data_1,\ g_phy_ctxt.dep.mac_tx_data_2,\ g_phy_ctxt.dep.mac_tx_data_3,\ g_phy_ctxt.dep.mac_tx_data_4,\ g_phy_ctxt.dep.mac_tx_data_5,\ g_phy_ctxt.dep.timestap,\ g_phy_ctxt.dep.cur_ptr_lat,\ g_phy_ctxt.dep.tx_fc0,\ g_phy_ctxt.dep.tx_fc1,\ g_phy_ctxt.dep.tx_fc2,\ g_phy_ctxt.dep.tx_fc3,\ g_phy_ctxt.dep.pb_sumnum ); } #endif return 0; } void phy_set_sw_time_out_en(uint8_t flag) { #if HW_PLATFORM >= HW_PLATFORM_FPGA uint32_t tmp = PHY_TX_READ_REG(CFG_BB_TX_WAROUND_CTRL_ADDR); REG_FIELD_SET(SW_TIME_OUT_EN, tmp, !!flag); PHY_TX_WRITE_REG(CFG_BB_TX_WAROUND_CTRL_ADDR, tmp); #else (void)flag; #endif return; } void phy_dbg_set_tx_abort_reg() { #if HW_PLATFORM >= HW_PLATFORM_FPGA #if DEG_TX_ABORT uint32_t tmp; tmp = PHY_READ_REG(CFG_BB_DBG_BUS_SEL_ADDR); REG_FIELD_SET(BB_DBG_BUS_SEL, tmp, 0); PHY_WRITE_REG(CFG_BB_DBG_BUS_SEL_ADDR, tmp); tmp = PHY_READ_REG(CFG_BB_PHY_DBG_BUS_LOCK_CTRL_ADDR); REG_FIELD_SET(SW_PHY_DBG_BUS_LOCK_CHOS, tmp, 43); REG_FIELD_SET(SW_PHY_DBG_BUS_LOCK_ENA, tmp, 1); PHY_WRITE_REG(CFG_BB_PHY_DBG_BUS_LOCK_CTRL_ADDR, tmp); tmp = RGF_TMR_READ_REG(CFG_PHY_TX_TIMEOUT_ADDR); REG_FIELD_SET(CFG_PHY_TX_TIMEOUT_EN, tmp, 0); RGF_TMR_WRITE_REG(CFG_PHY_TX_TIMEOUT_ADDR, tmp); tmp = PHY_READ_REG(CFG_BB_PHY_MPI_CTRL_ADDR); REG_FIELD_SET(SW_MAC_BAND_RATE_SEL, tmp, 1); PHY_WRITE_REG(CFG_BB_PHY_MPI_CTRL_ADDR, tmp); g_phy_ctxt.dep.tx_abort_cnt= 0; #endif #else (void); #endif return; } void IRAM_ATTR phy_dbg_get_tx_abort_lock_value() { #if HW_PLATFORM >= HW_PLATFORM_FPGA #if DEG_TX_ABORT uint32_t tmp; volatile uint8_t flag = 1; uint32_t cur_time = 0; int64_t time_span = 0; uint32_t start_time = RGF_MAC_READ_REG(CFG_RD_NTB_ADDR); do { cur_time = RGF_MAC_READ_REG(CFG_RD_NTB_ADDR); time_span = cur_time - start_time; if (time_span < 0) { // wrap around time_span = (0x100000000LL) - start_time + cur_time; } /* if timeout 10us , assert */ if (time_span > 25 * 10) { IOT_ASSERT(0); } tmp = PHY_READ_REG(CFG_BB_PHY_DBG_BUS_LOCK_CTRL_ADDR); /* wait lock enable = 0 */ if (!REG_FIELD_GET(SW_PHY_DBG_BUS_LOCK_ENA, tmp)) { flag = 0; /* record lock value */ g_phy_ctxt.dep.phy_dbg_bus_lock_value = \ PHY_READ_REG(CFG_BB_PHY_DBG_BUS_LOCK_VALUE_ADDR); g_phy_ctxt.dep.phy_tx_int_raw = \ PHY_TX_READ_REG(CFG_BB_TX_INT_RAW_ADDR); /* clr int */ PHY_TX_WRITE_REG(CFG_BB_TX_INT_CLR_ADDR, \ g_phy_ctxt.dep.phy_tx_int_raw); g_phy_ctxt.dep.mac_reg_30 = \ RGF_MAC_READ_REG(CFG_TX_DBG_CTRL_ADDR); g_phy_ctxt.dep.dbg_sts_0 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_0_ADDR); g_phy_ctxt.dep.dbg_sts_1 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_1_ADDR); g_phy_ctxt.dep.dbg_sts_2 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_2_ADDR); g_phy_ctxt.dep.dbg_sts_3 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_3_ADDR); g_phy_ctxt.dep.dbg_sts_4 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_4_ADDR); g_phy_ctxt.dep.dbg_sts_5 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_5_ADDR); g_phy_ctxt.dep.dbg_sts_6 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_6_ADDR); g_phy_ctxt.dep.dbg_sts_7 =\ PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_STS_7_ADDR); /*clear all sts registers*/ tmp = PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_CTRL_ADDR); REG_FIELD_SET(SW_TX_ABORT_DBG_CLR, tmp, 1); PHY_TX_WRITE_REG(CFG_BB_TX_ABORT_DBG_CTRL_ADDR, tmp); /* release for HW next lock */ tmp = PHY_TX_READ_REG(CFG_BB_TX_ABORT_DBG_CTRL_ADDR); REG_FIELD_SET(SW_TX_ABORT_DBG_LOCK_CLR, tmp, 1); PHY_TX_WRITE_REG(CFG_BB_TX_ABORT_DBG_CTRL_ADDR, tmp); /* set lock enable = 1 */ tmp = PHY_READ_REG(CFG_BB_PHY_DBG_BUS_LOCK_CTRL_ADDR); REG_FIELD_SET(SW_PHY_DBG_BUS_LOCK_ENA, tmp, 1); PHY_WRITE_REG(CFG_BB_PHY_DBG_BUS_LOCK_CTRL_ADDR, tmp); g_phy_ctxt.dep.mac_tx_data_0 = RGF_MAC_READ_REG(CFG_MAC_TX_DATA0_ADDR); g_phy_ctxt.dep.mac_tx_data_1 = RGF_MAC_READ_REG(CFG_MAC_TX_DATA1_ADDR); g_phy_ctxt.dep.mac_tx_data_2 = RGF_MAC_READ_REG(CFG_MAC_TX_DATA2_ADDR); g_phy_ctxt.dep.mac_tx_data_3 = RGF_MAC_READ_REG(CFG_MAC_TX_DATA3_ADDR); g_phy_ctxt.dep.mac_tx_data_4 = RGF_MAC_READ_REG(CFG_MAC_TX_DATA4_ADDR); g_phy_ctxt.dep.mac_tx_data_5 = RGF_MAC_READ_REG(CFG_MAC_TX_DATA5_ADDR); g_phy_ctxt.dep.timestap = RGF_RAW_READ_REG(CFG_TX_TIMESTAP_ADDR); g_phy_ctxt.dep.cur_ptr_lat = RGF_RAW_READ_REG(CFG_TX_CUR_PTR_LAT_ADDR); g_phy_ctxt.dep.tx_fc0 = RGF_RAW_READ_REG(CFG_DESC_SW_TX_FC0_ADDR); g_phy_ctxt.dep.tx_fc1 = RGF_RAW_READ_REG(CFG_DESC_SW_TX_FC1_ADDR); g_phy_ctxt.dep.tx_fc2 = RGF_RAW_READ_REG(CFG_DESC_SW_TX_FC2_ADDR); g_phy_ctxt.dep.tx_fc3 = RGF_RAW_READ_REG(CFG_DESC_SW_TX_FC3_ADDR); g_phy_ctxt.dep.pb_sumnum = RGF_RAW_READ_REG(CFG_DESC_PB_SYMNUM_ADDR); } } while(flag); #endif #else (void); #endif return; } void phy_dump_busy_set(bool_t en) { (void)en; } bool_t phy_busy_get(void *phy_ctxt, PHY_BUSY_ID id) { (void)id; (void)phy_ctxt; return false; }