📄 ucc_geth.c
字号:
(u32) & ugeth->p_tx_glbl_pram->temoder, in_be16(&ugeth->p_tx_glbl_pram->temoder)); ugeth_info("sqptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->sqptr, in_be32(&ugeth->p_tx_glbl_pram->sqptr)); ugeth_info("schedulerbasepointer: addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->schedulerbasepointer, in_be32(&ugeth->p_tx_glbl_pram-> schedulerbasepointer)); ugeth_info("txrmonbaseptr: addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->txrmonbaseptr, in_be32(&ugeth->p_tx_glbl_pram->txrmonbaseptr)); ugeth_info("tstate : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->tstate, in_be32(&ugeth->p_tx_glbl_pram->tstate)); ugeth_info("iphoffset[0] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[0], ugeth->p_tx_glbl_pram->iphoffset[0]); ugeth_info("iphoffset[1] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[1], ugeth->p_tx_glbl_pram->iphoffset[1]); ugeth_info("iphoffset[2] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[2], ugeth->p_tx_glbl_pram->iphoffset[2]); ugeth_info("iphoffset[3] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[3], ugeth->p_tx_glbl_pram->iphoffset[3]); ugeth_info("iphoffset[4] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[4], ugeth->p_tx_glbl_pram->iphoffset[4]); ugeth_info("iphoffset[5] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[5], ugeth->p_tx_glbl_pram->iphoffset[5]); ugeth_info("iphoffset[6] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[6], ugeth->p_tx_glbl_pram->iphoffset[6]); ugeth_info("iphoffset[7] : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_tx_glbl_pram->iphoffset[7], ugeth->p_tx_glbl_pram->iphoffset[7]); ugeth_info("vtagtable[0] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[0], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[0])); ugeth_info("vtagtable[1] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[1], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[1])); ugeth_info("vtagtable[2] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[2], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[2])); ugeth_info("vtagtable[3] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[3], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[3])); ugeth_info("vtagtable[4] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[4], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[4])); ugeth_info("vtagtable[5] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[5], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[5])); ugeth_info("vtagtable[6] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[6], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[6])); ugeth_info("vtagtable[7] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->vtagtable[7], in_be32(&ugeth->p_tx_glbl_pram->vtagtable[7])); ugeth_info("tqptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_tx_glbl_pram->tqptr, in_be32(&ugeth->p_tx_glbl_pram->tqptr)); } if (ugeth->p_rx_glbl_pram) { ugeth_info("RX global param:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_rx_glbl_pram); ugeth_info("remoder : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->remoder, in_be32(&ugeth->p_rx_glbl_pram->remoder)); ugeth_info("rqptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->rqptr, in_be32(&ugeth->p_rx_glbl_pram->rqptr)); ugeth_info("typeorlen : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->typeorlen, in_be16(&ugeth->p_rx_glbl_pram->typeorlen)); ugeth_info("rxgstpack : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_rx_glbl_pram->rxgstpack, ugeth->p_rx_glbl_pram->rxgstpack); ugeth_info("rxrmonbaseptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->rxrmonbaseptr, in_be32(&ugeth->p_rx_glbl_pram->rxrmonbaseptr)); ugeth_info("intcoalescingptr: addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->intcoalescingptr, in_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr)); ugeth_info("rstate : addr - 0x%08x, val - 0x%02x", (u32) & ugeth->p_rx_glbl_pram->rstate, ugeth->p_rx_glbl_pram->rstate); ugeth_info("mrblr : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->mrblr, in_be16(&ugeth->p_rx_glbl_pram->mrblr)); ugeth_info("rbdqptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->rbdqptr, in_be32(&ugeth->p_rx_glbl_pram->rbdqptr)); ugeth_info("mflr : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->mflr, in_be16(&ugeth->p_rx_glbl_pram->mflr)); ugeth_info("minflr : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->minflr, in_be16(&ugeth->p_rx_glbl_pram->minflr)); ugeth_info("maxd1 : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->maxd1, in_be16(&ugeth->p_rx_glbl_pram->maxd1)); ugeth_info("maxd2 : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->maxd2, in_be16(&ugeth->p_rx_glbl_pram->maxd2)); ugeth_info("ecamptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->ecamptr, in_be32(&ugeth->p_rx_glbl_pram->ecamptr)); ugeth_info("l2qt : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l2qt, in_be32(&ugeth->p_rx_glbl_pram->l2qt)); ugeth_info("l3qt[0] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[0], in_be32(&ugeth->p_rx_glbl_pram->l3qt[0])); ugeth_info("l3qt[1] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[1], in_be32(&ugeth->p_rx_glbl_pram->l3qt[1])); ugeth_info("l3qt[2] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[2], in_be32(&ugeth->p_rx_glbl_pram->l3qt[2])); ugeth_info("l3qt[3] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[3], in_be32(&ugeth->p_rx_glbl_pram->l3qt[3])); ugeth_info("l3qt[4] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[4], in_be32(&ugeth->p_rx_glbl_pram->l3qt[4])); ugeth_info("l3qt[5] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[5], in_be32(&ugeth->p_rx_glbl_pram->l3qt[5])); ugeth_info("l3qt[6] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[6], in_be32(&ugeth->p_rx_glbl_pram->l3qt[6])); ugeth_info("l3qt[7] : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->l3qt[7], in_be32(&ugeth->p_rx_glbl_pram->l3qt[7])); ugeth_info("vlantype : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->vlantype, in_be16(&ugeth->p_rx_glbl_pram->vlantype)); ugeth_info("vlantci : addr - 0x%08x, val - 0x%04x", (u32) & ugeth->p_rx_glbl_pram->vlantci, in_be16(&ugeth->p_rx_glbl_pram->vlantci)); for (i = 0; i < 64; i++) ugeth_info ("addressfiltering[%d]: addr - 0x%08x, val - 0x%02x", i, (u32) & ugeth->p_rx_glbl_pram->addressfiltering[i], ugeth->p_rx_glbl_pram->addressfiltering[i]); ugeth_info("exfGlobalParam : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_glbl_pram->exfGlobalParam, in_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam)); } if (ugeth->p_send_q_mem_reg) { ugeth_info("Send Q memory registers:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_send_q_mem_reg); for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) { ugeth_info("SQQD[%d]:", i); ugeth_info("Base address: 0x%08x", (u32) & ugeth->p_send_q_mem_reg->sqqd[i]); mem_disp((u8 *) & ugeth->p_send_q_mem_reg->sqqd[i], sizeof(struct ucc_geth_send_queue_qd)); } } if (ugeth->p_scheduler) { ugeth_info("Scheduler:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_scheduler); mem_disp((u8 *) ugeth->p_scheduler, sizeof(*ugeth->p_scheduler)); } if (ugeth->p_tx_fw_statistics_pram) { ugeth_info("TX FW statistics pram:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_tx_fw_statistics_pram); mem_disp((u8 *) ugeth->p_tx_fw_statistics_pram, sizeof(*ugeth->p_tx_fw_statistics_pram)); } if (ugeth->p_rx_fw_statistics_pram) { ugeth_info("RX FW statistics pram:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_rx_fw_statistics_pram); mem_disp((u8 *) ugeth->p_rx_fw_statistics_pram, sizeof(*ugeth->p_rx_fw_statistics_pram)); } if (ugeth->p_rx_irq_coalescing_tbl) { ugeth_info("RX IRQ coalescing tables:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_rx_irq_coalescing_tbl); for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { ugeth_info("RX IRQ coalescing table entry[%d]:", i); ugeth_info("Base address: 0x%08x", (u32) & ugeth->p_rx_irq_coalescing_tbl-> coalescingentry[i]); ugeth_info ("interruptcoalescingmaxvalue: addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_irq_coalescing_tbl-> coalescingentry[i].interruptcoalescingmaxvalue, in_be32(&ugeth->p_rx_irq_coalescing_tbl-> coalescingentry[i]. interruptcoalescingmaxvalue)); ugeth_info ("interruptcoalescingcounter : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_irq_coalescing_tbl-> coalescingentry[i].interruptcoalescingcounter, in_be32(&ugeth->p_rx_irq_coalescing_tbl-> coalescingentry[i]. interruptcoalescingcounter)); } } if (ugeth->p_rx_bd_qs_tbl) { ugeth_info("RX BD QS tables:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_rx_bd_qs_tbl); for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) { ugeth_info("RX BD QS table[%d]:", i); ugeth_info("Base address: 0x%08x", (u32) & ugeth->p_rx_bd_qs_tbl[i]); ugeth_info ("bdbaseptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_bd_qs_tbl[i].bdbaseptr, in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdbaseptr)); ugeth_info ("bdptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_bd_qs_tbl[i].bdptr, in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdptr)); ugeth_info ("externalbdbaseptr: addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr, in_be32(&ugeth->p_rx_bd_qs_tbl[i]. externalbdbaseptr)); ugeth_info ("externalbdptr : addr - 0x%08x, val - 0x%08x", (u32) & ugeth->p_rx_bd_qs_tbl[i].externalbdptr, in_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdptr)); ugeth_info("ucode RX Prefetched BDs:"); ugeth_info("Base address: 0x%08x", (u32) qe_muram_addr(in_be32 (&ugeth->p_rx_bd_qs_tbl[i]. bdbaseptr))); mem_disp((u8 *) qe_muram_addr(in_be32 (&ugeth->p_rx_bd_qs_tbl[i]. bdbaseptr)), sizeof(struct ucc_geth_rx_prefetched_bds)); } } if (ugeth->p_init_enet_param_shadow) { int size; ugeth_info("Init enet param shadow:"); ugeth_info("Base address: 0x%08x", (u32) ugeth->p_init_enet_param_shadow); mem_disp((u8 *) ugeth->p_init_enet_param_shadow, sizeof(*ugeth->p_init_enet_param_shadow)); size = sizeof(struct ucc_geth_thread_rx_pram); if (ugeth->ug_info->rxExtendedFiltering) { size += THREAD_RX_PRAM_ADDITIONAL_FOR_EXTENDED_FILTERING; if (ugeth->ug_info->largestexternallookupkeysize == QE_FLTR_TABLE_LOOKUP_KEY_SIZE_8_BYTES) size += THREAD_RX_PRAM_ADDITIONAL_FOR_EXTENDED_FILTERING_8; if (ugeth->ug_info->largestexternallookupkeysize == QE_FLTR_TABLE_LOOKUP_KEY_SIZE_16_BYTES) size += THREAD_RX_PRAM_ADDITIONAL_FOR_EXTENDED_FILTERING_16; } dump_init_enet_entries(ugeth, &(ugeth->p_init_enet_param_shadow-> txthread[0]), ENET_INIT_PARAM_MAX_ENTRIES_TX, sizeof(struct ucc_geth_thread_tx_pram), ugeth->ug_info->riscTx, 0); dump_init_enet_entries(ugeth, &(ugeth->p_init_enet_param_shadow-> rxthread[0]), ENET_INIT_PARAM_MAX_ENTRIES_RX, size, ugeth->ug_info->riscRx, 1); }}#endif /* DEBUG */static void init_default_reg_vals(volatile u32 *upsmr_register, volatile u32 *maccfg1_register, volatile u32 *maccfg2_register){ out_be32(upsmr_register, UCC_GETH_UPSMR_INIT); out_be32(maccfg1_register, UCC_GETH_MACCFG1_INIT); out_be32(maccfg2_register, UCC_GETH_MACCFG2_INIT);}static int init_half_duplex_params(int alt_beb, int back_pressure_no_backoff, int no_backoff, int excess_defer, u8 alt_beb_truncation, u8 max_retransmissions, u8 collision_window, volatile u32 *hafdup_register){ u32 value = 0; if ((alt_beb_truncation > HALFDUP_ALT_BEB_TRUNCATION_MAX) || (max_retransmissions > HALFDUP_MAX_RETRANSMISSION_MAX) || (collision_window > HALFDUP_COLLISION_WINDOW_MAX)) return -EINVAL; value = (u32) (alt_beb_truncation << HALFDUP_ALT_BEB_TRUNCATION_SHIFT); if (alt_beb) value |= HALFDUP_ALT_BEB; if (back_pressure_no_backoff) value |= HALFDUP_BACK_PRESSURE_NO_BACKOFF; if (no_backoff) value |= HALFDUP_NO_BACKOFF; if (excess_defer) value |= HALFDUP_EXCESSIVE_DEFER; value |= (max_retransmissions << HALFDUP_MAX_RETRANSMISSION_SHIFT); value |= collision_window; out_be32(hafdup_register, value); return 0;}static int init_inter_frame_gap_params(u8 non_btb_cs_ipg, u8 non_btb_ipg, u8 min_ifg, u8 btb_ipg, volatile u32 *ipgifg_register){ u32 value = 0; /* Non-Back-to-back IPG part 1 should be <= Non-Back-to-back IPG part 2 */ if (non_btb_cs_ipg > non_btb_ipg) return -EINVAL; if ((non_btb_cs_ipg > IPGIFG_NON_BACK_TO_BACK_IFG_PART1_MAX) || (non_btb_ipg > IPGIFG_NON_BACK_TO_BACK_IFG_PART2_MAX) || /*(min_ifg > IPGIFG_MINIMUM_IFG_ENFORCEMENT_MAX) || */ (btb_ipg > IPGIFG_BACK_TO_BACK_IFG_MAX)) return -EINVAL; value |= ((non_btb_cs_ipg << IPGIFG_NON_BACK_TO_BACK_IFG_PART1_SHIFT) & IPGIFG_NBTB_CS_IPG_MASK); value |= ((non_btb_ipg << IPGIFG_NON_BACK_TO_BACK_IFG_PART2_SHIFT) & IPGIFG_NBTB_IPG_MASK); value |= ((min_ifg << IPGIFG_MINIMUM_IFG_ENFORCEMENT_SHIFT) & IPGIFG_MIN_IFG_MASK); value |= (btb_ipg & IPGIFG_BTB_IPG_MASK); out_be32(ipgifg_register, value); return 0;}int init_flow_control_params(u32 automatic_flow_control_mode, int rx_flow_control_enable, int tx_flow_control_enable, u16 pause_period, u16 extension_field, volatile u32 *upsmr_register, volatile u32 *uempr_register, volatile u32 *maccfg1_register){ u32 value = 0; /* Set UEMPR register */ value = (u32) pause_period << UEMPR_PAUSE_TIME_VALUE_SHIFT; value |= (u32) extension_field << UEMPR_EXTENDED_PAUSE_TIME_VALUE_SHIFT; out_be32(uempr_register, value); /* Set UPSMR register */ value = in_be32(upsmr_register); value |= automatic_flow_control_mode; out_be32(upsmr_register, value); value = in_be32(maccfg1_register); if (rx_flow_control_enable) value |= MACCFG1_FLOW_RX; if (tx_flow_control_enable) value |= MACCFG1_FLOW_TX; out_be32(maccfg1_register, value); return 0;}static int init_hw_statistics_gathering_mode(int enable_hardware_statistics, int auto_zero_hardware_statistics, volatile u32 *upsmr_register, volatile u16 *uescr_register){ u32 upsmr_value = 0; u16 uescr_value = 0; /* Enable hardware statistics gathering if requested */ if (enable_hardware_statistics) { upsmr_value = in_be32(upsmr_register); upsmr_value |= UPSMR_HSE; out_be32(upsmr_register, upsmr_value); } /* Clear hardware statistics counters */ uescr_value = in_be16(uescr_register); uescr_value |= UESCR_CLRCNT; /* Automatically zero hardware statistics counters on read, if requested */ if (auto_zero_hardware_statistics) uescr_value |= UESCR_AUTOZ; out_be16(uescr_register, uescr_value); return 0;}static int init_firmware_statistics_gathering_mode(int enable_tx_firmware_statistics, int enable_rx_firmware_statistics,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -