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