From 324d24c01a2c32c83e76582cbd3504c7f7c5896c Mon Sep 17 00:00:00 2001 From: Kytezign Date: Wed, 1 Oct 2025 16:19:14 -0700 Subject: [PATCH 1/2] Ensure RP2040 tx buffer control is respected See also "4.1.2.7.1. Concurrent access" in the RP2040 datasheet. --- port/raspberrypi/rp2xxx/src/hal/usb.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/port/raspberrypi/rp2xxx/src/hal/usb.zig b/port/raspberrypi/rp2xxx/src/hal/usb.zig index a64c0f95f..374ecc8e7 100644 --- a/port/raspberrypi/rp2xxx/src/hal/usb.zig +++ b/port/raspberrypi/rp2xxx/src/hal/usb.zig @@ -254,6 +254,8 @@ pub fn F(comptime config: UsbConfig) type { // TODO: assert!(UsbDir::of_endpoint_addr(ep.descriptor.endpoint_address) == UsbDir::In); const ep = hardware_endpoint_get_by_address(ep_addr); + // wait for controller to give processor ownership of the buffer before writing it. + while (ep.buffer_control.?.read().AVAILABLE_0 == 1) {} // TODO: please fixme: https://github.com/ZigEmbeddedGroup/microzig/issues/452 std.mem.copyForwards(u8, ep.data_buffer[0..buffer.len], buffer); From f0ae3661025f8edbf7f3ae9325e77ed65abdd695 Mon Sep 17 00:00:00 2001 From: Kytezign Date: Fri, 3 Oct 2025 12:15:31 -0700 Subject: [PATCH 2/2] fmt fix usb.zig --- port/raspberrypi/rp2xxx/src/hal/usb.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/port/raspberrypi/rp2xxx/src/hal/usb.zig b/port/raspberrypi/rp2xxx/src/hal/usb.zig index 374ecc8e7..d846bed48 100644 --- a/port/raspberrypi/rp2xxx/src/hal/usb.zig +++ b/port/raspberrypi/rp2xxx/src/hal/usb.zig @@ -254,7 +254,7 @@ pub fn F(comptime config: UsbConfig) type { // TODO: assert!(UsbDir::of_endpoint_addr(ep.descriptor.endpoint_address) == UsbDir::In); const ep = hardware_endpoint_get_by_address(ep_addr); - // wait for controller to give processor ownership of the buffer before writing it. + // wait for controller to give processor ownership of the buffer before writing it. while (ep.buffer_control.?.read().AVAILABLE_0 == 1) {} // TODO: please fixme: https://github.com/ZigEmbeddedGroup/microzig/issues/452