stmmac: print Tx error statuses

This commit is contained in:
Mark Poliakov 2025-01-27 16:48:02 +02:00
parent f2cfc9136a
commit 57d46ed070
2 changed files with 17 additions and 12 deletions

View File

@ -164,7 +164,6 @@ impl Device for Stmmac {
// TODO get these params from device tree // TODO get these params from device tree
regs.DMA.DMASBMR.write( regs.DMA.DMASBMR.write(
DMASBMR::FB::SET DMASBMR::FB::SET
+ DMASBMR::AAL::SET
+ DMASBMR::BLEN256::SET + DMASBMR::BLEN256::SET
+ DMASBMR::BLEN128::SET + DMASBMR::BLEN128::SET
+ DMASBMR::BLEN64::SET + DMASBMR::BLEN64::SET
@ -191,13 +190,13 @@ impl Device for Stmmac {
.set(rx_ring_base + (rx_ring_capacity * size_of::<RxDescriptor>()) as u32); .set(rx_ring_base + (rx_ring_capacity * size_of::<RxDescriptor>()) as u32);
// Setup DMA maximum segmen size, Rx buffer size + max burst len // Setup DMA maximum segmen size, Rx buffer size + max burst len
regs.DMA.DMAC0CR.write(DMACiCR::PBLX8::CLEAR);
regs.DMA regs.DMA
.DMAC0CR .DMAC0TXCR
.write(DMACiCR::PBLX8::CLEAR + DMACiCR::MSS.val(1024)); .write(DMACiTXCR::TXPBL.val(32) + DMACiTXCR::OSF::SET);
regs.DMA.DMAC0TXCR.write(DMACiTXCR::TXPBL.val(256));
regs.DMA regs.DMA
.DMAC0RXCR .DMAC0RXCR
.write(DMAC0RXCR::RBSZ.val(4096) + DMAC0RXCR::RXPBL.val(256)); .write(DMAC0RXCR::RBSZ.val(4096) + DMAC0RXCR::RXPBL.val(32));
// Enable DMA interrupts // Enable DMA interrupts
// TODO enable abnormal interrupts to handle errors properly // TODO enable abnormal interrupts to handle errors properly
@ -222,9 +221,9 @@ impl Device for Stmmac {
// TODO get TQS, RQS from device tree // TODO get TQS, RQS from device tree
regs.MTL regs.MTL
.MTLTXQ0OMR .MTLTXQ0OMR
.write(MTLTXQiOMR::TSF::SET + MTLTXQiOMR::TQS.val(1) + MTLTXQiOMR::TXQEN::Enable); .write(MTLTXQiOMR::TSF::SET + MTLTXQiOMR::TQS.val(7) + MTLTXQiOMR::TXQEN::Enable);
regs.MTL.MTLRXQ0OMR.write( regs.MTL.MTLRXQ0OMR.write(
MTLRXQiOMR::RQS.val(1) MTLRXQiOMR::RQS.val(7)
+ MTLRXQiOMR::DIS_TCP_EF::SET + MTLRXQiOMR::DIS_TCP_EF::SET
+ MTLRXQiOMR::RSF::SET + MTLRXQiOMR::RSF::SET
+ MTLRXQiOMR::FEP::SET + MTLRXQiOMR::FEP::SET
@ -263,7 +262,7 @@ impl Device for Stmmac {
// Setup link information // Setup link information
regs.MAC regs.MAC
.MACCR .MACCR
.modify(MACCR::PS::Ps1000Mbps + MACCR::FES::Fes100Mbps + MACCR::DM::FullDuplex); .modify(MACCR::PS::Ps1000Mbps + MACCR::DM::FullDuplex);
// Start Tx/Rx // Start Tx/Rx
regs.MAC.MACCR.modify(MACCR::TE::SET + MACCR::RE::SET); regs.MAC.MACCR.modify(MACCR::TE::SET + MACCR::RE::SET);

View File

@ -102,8 +102,10 @@ impl TxRing {
break; break;
} }
if entry.tx_completed() { if let Some(status) = entry.tx_status() {
// Drop the buffer if status != 0 {
log::warn!("tx_ring[{index}] error: {status:#x}");
}
let _ = self.buffers[index].take().unwrap(); let _ = self.buffers[index].take().unwrap();
self.rd = self.rd.wrapping_add(1); self.rd = self.rd.wrapping_add(1);
count += 1; count += 1;
@ -131,8 +133,12 @@ impl TxDescriptor {
} }
} }
pub fn tx_completed(&self) -> bool { pub fn tx_status(&self) -> Option<u32> {
self.tdes3 & Self::TDES3_OWN == 0 if self.tdes3 & Self::TDES3_OWN == 0 {
Some(self.tdes3 & !(0xFFFF << 16))
} else {
None
}
} }
pub fn setup_tx( pub fn setup_tx(