• Jeffrey Lee's avatar
    Ensure IIC bus list is fully initialised · 82a9c908
    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'
    82a9c908
IIC 31.9 KB