stmmac: print Tx error statuses
This commit is contained in:
parent
b423fd960f
commit
66ecf49c22
@ -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);
|
||||||
|
@ -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(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user