diff --git a/shared-module/usb_hid/__init__.c b/shared-module/usb_hid/__init__.c index 18b9eeb8eea0c..81a62c8eb3f90 100644 --- a/shared-module/usb_hid/__init__.c +++ b/shared-module/usb_hid/__init__.c @@ -259,9 +259,14 @@ void usb_hid_save_report_descriptor(uint8_t *report_descriptor_space, size_t rep void usb_hid_gc_collect(void) { gc_collect_ptr(hid_devices_tuple); - // Mark any heap pointers in the static device list as in use. + // Mark possible heap pointers in the static device list as in use. for (mp_int_t i = 0; i < num_hid_devices; i++) { - gc_collect_ptr(&hid_devices[i]); + // Cast away the const for .report_descriptor. It could be in flash or on the heap. + // Constant report descriptors must be const so that they are used directly from flash + // and not copied into RAM. + gc_collect_ptr((void *)hid_devices[i].report_descriptor); + gc_collect_ptr(hid_devices[i].in_report_buffer); + gc_collect_ptr(hid_devices[i].out_report_buffer); } }