Skip to content

Commit 5be7a2b

Browse files
committed
fix(usb): disable ICACHE
When USB is used on STM32H5 and ICACHE enable it does not work so disable it. Signed-off-by: Frederic Pillon <[email protected]>
1 parent c44d050 commit 5be7a2b

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

Diff for: cores/arduino/stm32/usb/cdc/usbd_cdc_if.c

+20
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ USBD_HandleTypeDef hUSBD_Device_CDC;
4848

4949
static bool CDC_initialized = false;
5050
static bool CDC_DTR_enabled = true;
51+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
52+
static bool icache_enabled = false;
53+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
5154

5255
/* Received Data over USB are stored in this buffer */
5356
CDC_TransmitQueue_TypeDef TransmitQueue;
@@ -270,6 +273,15 @@ static int8_t USBD_CDC_TransmitCplt(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
270273

271274
void CDC_init(void)
272275
{
276+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
277+
if (HAL_ICACHE_IsEnabled() == 1) {
278+
icache_enabled = true;
279+
/* Disable instruction cache prior to internal cacheable memory update */
280+
if (HAL_ICACHE_Disable() != HAL_OK) {
281+
Error_Handler();
282+
}
283+
}
284+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
273285
if (!CDC_initialized) {
274286
/* Init Device Library */
275287
if (USBD_Init(&hUSBD_Device_CDC, &USBD_Desc, 0) == USBD_OK) {
@@ -294,6 +306,14 @@ void CDC_deInit(void)
294306
USBD_DeInit(&hUSBD_Device_CDC);
295307
CDC_initialized = false;
296308
}
309+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
310+
if (icache_enabled) {
311+
/* Re-enable instruction cache */
312+
if (HAL_ICACHE_Enable() != HAL_OK) {
313+
Error_Handler();
314+
}
315+
}
316+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
297317
}
298318

299319
bool CDC_connected()

Diff for: cores/arduino/stm32/usb/hid/usbd_hid_composite_if.c

+20
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ USBD_HandleTypeDef hUSBD_Device_HID;
2828

2929
static bool HID_keyboard_initialized = false;
3030
static bool HID_mouse_initialized = false;
31+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
32+
static bool icache_enabled = false;
33+
#endif
3134

3235
/**
3336
* @brief Initialize USB devices
@@ -36,6 +39,15 @@ static bool HID_mouse_initialized = false;
3639
*/
3740
void HID_Composite_Init(HID_Interface device)
3841
{
42+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
43+
if (HAL_ICACHE_IsEnabled() == 1) {
44+
icache_enabled = true;
45+
/* Disable instruction cache prior to internal cacheable memory update */
46+
if (HAL_ICACHE_Disable() != HAL_OK) {
47+
Error_Handler();
48+
}
49+
}
50+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
3951
if (IS_HID_INTERFACE(device) &&
4052
!HID_keyboard_initialized && !HID_mouse_initialized) {
4153
/* Init Device Library */
@@ -72,6 +84,14 @@ void HID_Composite_DeInit(HID_Interface device)
7284
/* DeInit Device Library */
7385
USBD_DeInit(&hUSBD_Device_HID);
7486
}
87+
#if defined(ICACHE) && defined (HAL_ICACHE_MODULE_ENABLED) && !defined(HAL_ICACHE_MODULE_DISABLED)
88+
if (icache_enabled) {
89+
/* Re-enable instruction cache */
90+
if (HAL_ICACHE_Enable() != HAL_OK) {
91+
Error_Handler();
92+
}
93+
}
94+
#endif /* ICACHE && HAL_ICACHE_MODULE_ENABLED && !HAL_ICACHE_MODULE_DISABLED */
7595
if (device == HID_KEYBOARD) {
7696
HID_keyboard_initialized = false;
7797
}

0 commit comments

Comments
 (0)