1@startuml 2 3participant arm_io_storage 4participant io_storage 5 6 -> arm_io_storage : plat_get_image_source(image_id, &dev_handle, &image_spec) 7 8group init and check device (image_id) 9 10alt image_id = BL2_IMAGE_ID 11note over arm_io_storage 12 get BL2_IMAGE_ID policy: 13 - fip_dev_handle 14 - open_fip() 15end note 16opt policy->check() 17 arm_io_storage -> arm_io_storage : open_fip(spec) 18 activate arm_io_storage 19 arm_io_storage -> io_storage : io_dev_init(fip_dev_handle, FIP_IMAGE_ID) 20 ref over io_storage : dev_init() on fip device 21 22 arm_io_storage -> io_storage : io_open(fip_dev_handle, spec, &local_image_handle) 23 ref over io_storage : io_open() on fip device 24 25 arm_io_storage -> io_storage : io_close(local_image_handle) 26 ref over io_storage : io_close() on fip device 27 28 hnote over arm_io_storage 29 fip_dev_handle ready 30 end note 31end opt 32deactivate arm_io_storage 33 34else image_id = FIP_IMAGE_ID 35activate arm_io_storage 36note over arm_io_storage 37 get FIP_IMAGE_ID policy: 38 - memmap_dev_handle 39 - open_memmap() 40end note 41opt policy->check() 42 arm_io_storage -> arm_io_storage : open_memmap(spec) 43 activate arm_io_storage 44 arm_io_storage -> io_storage : io_dev_init(memmap_dev_handle, NULL) 45 ref over io_storage : dev_init() on memmap device 46 47 arm_io_storage -> io_storage : io_open(memmap_dev_handle, spec, &local_image_handle) 48 ref over io_storage : io_open() on memmap device 49 50 arm_io_storage -> io_storage : io_close(local_image_handle) 51 ref over io_storage : io_close() on memmap device 52 53 hnote over arm_io_storage 54 memmap_dev_handle ready 55 end note 56 deactivate arm_io_storage 57end opt 58deactivate arm_io_storage 59end alt 60 61end group 62@enduml 63