fix: force align DMA transfers
This commit is contained in:
parent
665767c250
commit
0287c9a260
|
@ -182,10 +182,12 @@ fn DmaController(comptime id: u2) type {
|
||||||
const transfer_type = is_fifo or self.cnt.transfer_type.read();
|
const transfer_type = is_fifo or self.cnt.transfer_type.read();
|
||||||
const offset: u32 = if (transfer_type) @sizeOf(u32) else @sizeOf(u16);
|
const offset: u32 = if (transfer_type) @sizeOf(u32) else @sizeOf(u16);
|
||||||
|
|
||||||
|
const mask = if (transfer_type) ~@as(u32, 3) else ~@as(u32, 1);
|
||||||
|
|
||||||
if (transfer_type) {
|
if (transfer_type) {
|
||||||
cpu.bus.write(u32, self._dad, cpu.bus.read(u32, self._sad));
|
cpu.bus.write(u32, self._dad & mask, cpu.bus.read(u32, self._sad & mask));
|
||||||
} else {
|
} else {
|
||||||
cpu.bus.write(u16, self._dad, cpu.bus.read(u16, self._sad));
|
cpu.bus.write(u16, self._dad & mask, cpu.bus.read(u16, self._sad & mask));
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (sad_adj) {
|
switch (sad_adj) {
|
||||||
|
|
Loading…
Reference in New Issue