Jeffrey Lee
authored
IICInit only initialises the entries for valid IIC buses (i.e up to the limit returned by HAL_IICBuses), but some code accesses the array without checking against the HAL_IICBuses limit. This causes problems because the array lives in the SkippedTables area of workspace, meaning it isn't zero-initialised automatically. Ensure that the entries for the invalid bus numbers are zero-initialised, so that code which doesn't check against HAL_IICBuses won't mistake the invalid entries for valid IRQ-driven buses (InitialiseIRQ1Vtable, Reset_IRQ_Handler, etc.) Also, protect against overwriting the end of the array if HAL_IICBuses is more than the OS supports. Fixes hang on startup on Pi 4 if memory is filled with -1 (and OS is told that RAM isn't clear), and on Pi400 with normal memory: https://www.riscosopen.org/forum/forums/11/topics/16313 Version 6.55. Tagged as 'Kernel-6_55'