Skip to content

stm32_eth: Fix excessively long critical section in ifdown handler#10815

Merged
xiaoxiang781216 merged 1 commit into
apache:masterfrom
devEmbedded:dev_stm32_eth_critical_section
Sep 26, 2023
Merged

stm32_eth: Fix excessively long critical section in ifdown handler#10815
xiaoxiang781216 merged 1 commit into
apache:masterfrom
devEmbedded:dev_stm32_eth_critical_section

Conversation

@PetteriAimonen
Copy link
Copy Markdown
Contributor

Summary

stm32_ifdown() holds critical section when calling stm32_ethreset().
That function used to call up_mdelay(10) while waiting for the ethernet peripheral reset to complete.
This resulted in excessively long critical section time with interrupts disabled.

The actual expected delay is a few clock ticks of the 50 MHz clock domain.
This commit changes polling interval to 1us and maximum to 10us.

Impact

Reduces critical section time. Shouldn't cause functional changes.

If for some reason (stopped clock?) the ethernet peripheral reset doesn't complete, log message ERROR: stm32_ethreset failed (timeout), still assuming it's going down. will be printed after 10 us, instead of the previous 100 ms wait.

Testing

Tested on custom STM32F417 board with KSZ8081RNA PHY.

stm32_ifdown() holds critical section when calling stm32_ethreset().
That function used to call up_mdelay(10) while waiting for the ethernet
peripheral reset to complete. This resulted in excessively long
critical section time with interrupts disabled.

The actual expected delay is a few clock ticks of the 50 MHz clock domain.
This commit changes polling interval to 1us and maximum to 10us.
@xiaoxiang781216 xiaoxiang781216 merged commit d68c8ec into apache:master Sep 26, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants