Skip to content

Commit 86cda19

Browse files
committed
Enable enhanced descriptors to support checksums
1 parent f3ff7fb commit 86cda19

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

src/desc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use volatile_register::{RO, RW};
55

66
#[repr(C)]
77
pub struct Descriptor {
8-
desc: Aligned<A8, [u32; 4]>,
8+
desc: Aligned<A8, [u32; 8]>,
99
}
1010

1111
impl Clone for Descriptor {
@@ -25,7 +25,7 @@ impl Default for Descriptor {
2525
impl Descriptor {
2626
pub const fn new() -> Self {
2727
Self {
28-
desc: Aligned([0; 4]),
28+
desc: Aligned([0; 8]),
2929
}
3030
}
3131

src/lib.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,12 @@ pub unsafe fn new_unchecked<'rx, 'tx>(
240240
eth_mmc.mmctimr.modify(|r, w| w.bits(r.bits() | (1 << 21)));
241241

242242
// bus mode register
243-
eth_dma.dmabmr.modify(|_, w|
243+
eth_dma.dmabmr.modify(|_, w| {
244+
// For any non-f107 chips, we must use enhanced descriptor format to support checksum
245+
// offloading and/or timestamps.
246+
#[cfg(not(feature = "stm32f107"))]
247+
let w = w.edfe().set_bit();
248+
244249
// Address-aligned beats
245250
w.aab()
246251
.set_bit()
@@ -258,7 +263,8 @@ pub unsafe fn new_unchecked<'rx, 'tx>(
258263
.bits(0b01)
259264
// Use separate PBL
260265
.usp()
261-
.set_bit());
266+
.set_bit()
267+
});
262268

263269
let mut dma = EthernetDMA {
264270
eth_dma,

0 commit comments

Comments
 (0)