xref: /arm-trusted-firmware/plat/renesas/common/plat_storage.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2020, Renesas Electronics Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #include <string.h>
8*91f16700Schasinglulu 
9*91f16700Schasinglulu #include <common/debug.h>
10*91f16700Schasinglulu #include <drivers/io/io_driver.h>
11*91f16700Schasinglulu #include <drivers/io/io_storage.h>
12*91f16700Schasinglulu #include <drivers/io/io_semihosting.h>
13*91f16700Schasinglulu 
14*91f16700Schasinglulu #include "io_common.h"
15*91f16700Schasinglulu #include "io_memdrv.h"
16*91f16700Schasinglulu #include "io_emmcdrv.h"
17*91f16700Schasinglulu #include "io_private.h"
18*91f16700Schasinglulu #include "io_rcar.h"
19*91f16700Schasinglulu #include <platform_def.h>
20*91f16700Schasinglulu 
21*91f16700Schasinglulu static uintptr_t emmcdrv_dev_handle;
22*91f16700Schasinglulu static uintptr_t memdrv_dev_handle;
23*91f16700Schasinglulu static uintptr_t rcar_dev_handle;
24*91f16700Schasinglulu 
25*91f16700Schasinglulu static uintptr_t boot_io_drv_id;
26*91f16700Schasinglulu 
27*91f16700Schasinglulu static const io_block_spec_t rcar_block_spec = {
28*91f16700Schasinglulu 	.offset = FLASH0_BASE,
29*91f16700Schasinglulu 	.length = FLASH0_SIZE
30*91f16700Schasinglulu };
31*91f16700Schasinglulu 
32*91f16700Schasinglulu static const io_block_spec_t bl2_file_spec = {
33*91f16700Schasinglulu 	.offset = BL2_IMAGE_ID,
34*91f16700Schasinglulu };
35*91f16700Schasinglulu 
36*91f16700Schasinglulu static const io_block_spec_t bl31_file_spec = {
37*91f16700Schasinglulu 	.offset = BL31_IMAGE_ID,
38*91f16700Schasinglulu };
39*91f16700Schasinglulu 
40*91f16700Schasinglulu static const io_block_spec_t bl32_file_spec = {
41*91f16700Schasinglulu 	.offset = BL32_IMAGE_ID,
42*91f16700Schasinglulu };
43*91f16700Schasinglulu 
44*91f16700Schasinglulu static const io_block_spec_t bl33_file_spec = {
45*91f16700Schasinglulu 	.offset = BL33_IMAGE_ID,
46*91f16700Schasinglulu };
47*91f16700Schasinglulu 
48*91f16700Schasinglulu static const io_block_spec_t bl332_file_spec = {
49*91f16700Schasinglulu 	.offset = BL332_IMAGE_ID,
50*91f16700Schasinglulu };
51*91f16700Schasinglulu 
52*91f16700Schasinglulu static const io_block_spec_t bl333_file_spec = {
53*91f16700Schasinglulu 	.offset = BL333_IMAGE_ID,
54*91f16700Schasinglulu };
55*91f16700Schasinglulu 
56*91f16700Schasinglulu static const io_block_spec_t bl334_file_spec = {
57*91f16700Schasinglulu 	.offset = BL334_IMAGE_ID,
58*91f16700Schasinglulu };
59*91f16700Schasinglulu 
60*91f16700Schasinglulu static const io_block_spec_t bl335_file_spec = {
61*91f16700Schasinglulu 	.offset = BL335_IMAGE_ID,
62*91f16700Schasinglulu };
63*91f16700Schasinglulu 
64*91f16700Schasinglulu static const io_block_spec_t bl336_file_spec = {
65*91f16700Schasinglulu 	.offset = BL336_IMAGE_ID,
66*91f16700Schasinglulu };
67*91f16700Schasinglulu 
68*91f16700Schasinglulu static const io_block_spec_t bl337_file_spec = {
69*91f16700Schasinglulu 	.offset = BL337_IMAGE_ID,
70*91f16700Schasinglulu };
71*91f16700Schasinglulu 
72*91f16700Schasinglulu static const io_block_spec_t bl338_file_spec = {
73*91f16700Schasinglulu 	.offset = BL338_IMAGE_ID,
74*91f16700Schasinglulu };
75*91f16700Schasinglulu 
76*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT
77*91f16700Schasinglulu static const io_block_spec_t trusted_key_cert_file_spec = {
78*91f16700Schasinglulu 	.offset = TRUSTED_KEY_CERT_ID,
79*91f16700Schasinglulu };
80*91f16700Schasinglulu 
81*91f16700Schasinglulu static const io_block_spec_t bl31_key_cert_file_spec = {
82*91f16700Schasinglulu 	.offset = SOC_FW_KEY_CERT_ID,
83*91f16700Schasinglulu };
84*91f16700Schasinglulu 
85*91f16700Schasinglulu static const io_block_spec_t bl32_key_cert_file_spec = {
86*91f16700Schasinglulu 	.offset = TRUSTED_OS_FW_KEY_CERT_ID,
87*91f16700Schasinglulu };
88*91f16700Schasinglulu 
89*91f16700Schasinglulu static const io_block_spec_t bl33_key_cert_file_spec = {
90*91f16700Schasinglulu 	.offset = NON_TRUSTED_FW_KEY_CERT_ID,
91*91f16700Schasinglulu };
92*91f16700Schasinglulu 
93*91f16700Schasinglulu static const io_block_spec_t bl332_key_cert_file_spec = {
94*91f16700Schasinglulu 	.offset = BL332_KEY_CERT_ID,
95*91f16700Schasinglulu };
96*91f16700Schasinglulu 
97*91f16700Schasinglulu static const io_block_spec_t bl333_key_cert_file_spec = {
98*91f16700Schasinglulu 	.offset = BL333_KEY_CERT_ID,
99*91f16700Schasinglulu };
100*91f16700Schasinglulu 
101*91f16700Schasinglulu static const io_block_spec_t bl334_key_cert_file_spec = {
102*91f16700Schasinglulu 	.offset = BL334_KEY_CERT_ID,
103*91f16700Schasinglulu };
104*91f16700Schasinglulu 
105*91f16700Schasinglulu static const io_block_spec_t bl335_key_cert_file_spec = {
106*91f16700Schasinglulu 	.offset = BL335_KEY_CERT_ID,
107*91f16700Schasinglulu };
108*91f16700Schasinglulu 
109*91f16700Schasinglulu static const io_block_spec_t bl336_key_cert_file_spec = {
110*91f16700Schasinglulu 	.offset = BL336_KEY_CERT_ID,
111*91f16700Schasinglulu };
112*91f16700Schasinglulu 
113*91f16700Schasinglulu static const io_block_spec_t bl337_key_cert_file_spec = {
114*91f16700Schasinglulu 	.offset = BL337_KEY_CERT_ID,
115*91f16700Schasinglulu };
116*91f16700Schasinglulu 
117*91f16700Schasinglulu static const io_block_spec_t bl338_key_cert_file_spec = {
118*91f16700Schasinglulu 	.offset = BL338_KEY_CERT_ID,
119*91f16700Schasinglulu };
120*91f16700Schasinglulu 
121*91f16700Schasinglulu static const io_block_spec_t bl31_cert_file_spec = {
122*91f16700Schasinglulu 	.offset = SOC_FW_CONTENT_CERT_ID,
123*91f16700Schasinglulu };
124*91f16700Schasinglulu 
125*91f16700Schasinglulu static const io_block_spec_t bl32_cert_file_spec = {
126*91f16700Schasinglulu 	.offset = TRUSTED_OS_FW_CONTENT_CERT_ID,
127*91f16700Schasinglulu };
128*91f16700Schasinglulu 
129*91f16700Schasinglulu static const io_block_spec_t bl33_cert_file_spec = {
130*91f16700Schasinglulu 	.offset = NON_TRUSTED_FW_CONTENT_CERT_ID,
131*91f16700Schasinglulu };
132*91f16700Schasinglulu 
133*91f16700Schasinglulu static const io_block_spec_t bl332_cert_file_spec = {
134*91f16700Schasinglulu 	.offset = BL332_CERT_ID,
135*91f16700Schasinglulu };
136*91f16700Schasinglulu 
137*91f16700Schasinglulu static const io_block_spec_t bl333_cert_file_spec = {
138*91f16700Schasinglulu 	.offset = BL333_CERT_ID,
139*91f16700Schasinglulu };
140*91f16700Schasinglulu 
141*91f16700Schasinglulu static const io_block_spec_t bl334_cert_file_spec = {
142*91f16700Schasinglulu 	.offset = BL334_CERT_ID,
143*91f16700Schasinglulu };
144*91f16700Schasinglulu 
145*91f16700Schasinglulu static const io_block_spec_t bl335_cert_file_spec = {
146*91f16700Schasinglulu 	.offset = BL335_CERT_ID,
147*91f16700Schasinglulu };
148*91f16700Schasinglulu 
149*91f16700Schasinglulu static const io_block_spec_t bl336_cert_file_spec = {
150*91f16700Schasinglulu 	.offset = BL336_CERT_ID,
151*91f16700Schasinglulu };
152*91f16700Schasinglulu 
153*91f16700Schasinglulu static const io_block_spec_t bl337_cert_file_spec = {
154*91f16700Schasinglulu 	.offset = BL337_CERT_ID,
155*91f16700Schasinglulu };
156*91f16700Schasinglulu 
157*91f16700Schasinglulu static const io_block_spec_t bl338_cert_file_spec = {
158*91f16700Schasinglulu 	.offset = BL338_CERT_ID,
159*91f16700Schasinglulu };
160*91f16700Schasinglulu #endif
161*91f16700Schasinglulu 
162*91f16700Schasinglulu static int32_t open_emmcdrv(const uintptr_t spec);
163*91f16700Schasinglulu static int32_t open_memmap(const uintptr_t spec);
164*91f16700Schasinglulu static int32_t open_rcar(const uintptr_t spec);
165*91f16700Schasinglulu 
166*91f16700Schasinglulu struct plat_io_policy {
167*91f16700Schasinglulu 	uintptr_t *dev_handle;
168*91f16700Schasinglulu 	uintptr_t image_spec;
169*91f16700Schasinglulu 	int32_t (*check)(const uintptr_t spec);
170*91f16700Schasinglulu };
171*91f16700Schasinglulu 
172*91f16700Schasinglulu static const struct plat_io_policy policies[] = {
173*91f16700Schasinglulu 	[FIP_IMAGE_ID] = {
174*91f16700Schasinglulu 			  &memdrv_dev_handle,
175*91f16700Schasinglulu 			  (uintptr_t) &rcar_block_spec,
176*91f16700Schasinglulu 			  &open_memmap},
177*91f16700Schasinglulu 	[BL2_IMAGE_ID] = {
178*91f16700Schasinglulu 			  &rcar_dev_handle,
179*91f16700Schasinglulu 			  (uintptr_t) &bl2_file_spec,
180*91f16700Schasinglulu 			  &open_rcar},
181*91f16700Schasinglulu 	[BL31_IMAGE_ID] = {
182*91f16700Schasinglulu 			   &rcar_dev_handle,
183*91f16700Schasinglulu 			   (uintptr_t) &bl31_file_spec,
184*91f16700Schasinglulu 			   &open_rcar},
185*91f16700Schasinglulu 	[BL32_IMAGE_ID] = {
186*91f16700Schasinglulu 			   &rcar_dev_handle,
187*91f16700Schasinglulu 			   (uintptr_t) &bl32_file_spec,
188*91f16700Schasinglulu 			   &open_rcar},
189*91f16700Schasinglulu 	[BL33_IMAGE_ID] = {
190*91f16700Schasinglulu 			   &rcar_dev_handle,
191*91f16700Schasinglulu 			   (uintptr_t) &bl33_file_spec,
192*91f16700Schasinglulu 			   &open_rcar},
193*91f16700Schasinglulu 	[BL332_IMAGE_ID] = {
194*91f16700Schasinglulu 			    &rcar_dev_handle,
195*91f16700Schasinglulu 			    (uintptr_t) &bl332_file_spec,
196*91f16700Schasinglulu 			    &open_rcar},
197*91f16700Schasinglulu 	[BL333_IMAGE_ID] = {
198*91f16700Schasinglulu 			    &rcar_dev_handle,
199*91f16700Schasinglulu 			    (uintptr_t) &bl333_file_spec,
200*91f16700Schasinglulu 			    &open_rcar},
201*91f16700Schasinglulu 	[BL334_IMAGE_ID] = {
202*91f16700Schasinglulu 			    &rcar_dev_handle,
203*91f16700Schasinglulu 			    (uintptr_t) &bl334_file_spec,
204*91f16700Schasinglulu 			    &open_rcar},
205*91f16700Schasinglulu 	[BL335_IMAGE_ID] = {
206*91f16700Schasinglulu 			    &rcar_dev_handle,
207*91f16700Schasinglulu 			    (uintptr_t) &bl335_file_spec,
208*91f16700Schasinglulu 			    &open_rcar},
209*91f16700Schasinglulu 	[BL336_IMAGE_ID] = {
210*91f16700Schasinglulu 			    &rcar_dev_handle,
211*91f16700Schasinglulu 			    (uintptr_t) &bl336_file_spec,
212*91f16700Schasinglulu 			    &open_rcar},
213*91f16700Schasinglulu 	[BL337_IMAGE_ID] = {
214*91f16700Schasinglulu 			    &rcar_dev_handle,
215*91f16700Schasinglulu 			    (uintptr_t) &bl337_file_spec,
216*91f16700Schasinglulu 			    &open_rcar},
217*91f16700Schasinglulu 	[BL338_IMAGE_ID] = {
218*91f16700Schasinglulu 			    &rcar_dev_handle,
219*91f16700Schasinglulu 			    (uintptr_t) &bl338_file_spec,
220*91f16700Schasinglulu 			    &open_rcar},
221*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT
222*91f16700Schasinglulu 	[TRUSTED_KEY_CERT_ID] = {
223*91f16700Schasinglulu 				 &rcar_dev_handle,
224*91f16700Schasinglulu 				 (uintptr_t) &trusted_key_cert_file_spec,
225*91f16700Schasinglulu 				 &open_rcar},
226*91f16700Schasinglulu 	[SOC_FW_KEY_CERT_ID] = {
227*91f16700Schasinglulu 				&rcar_dev_handle,
228*91f16700Schasinglulu 				(uintptr_t) &bl31_key_cert_file_spec,
229*91f16700Schasinglulu 				&open_rcar},
230*91f16700Schasinglulu 	[TRUSTED_OS_FW_KEY_CERT_ID] = {
231*91f16700Schasinglulu 				       &rcar_dev_handle,
232*91f16700Schasinglulu 				       (uintptr_t) &bl32_key_cert_file_spec,
233*91f16700Schasinglulu 				       &open_rcar},
234*91f16700Schasinglulu 	[NON_TRUSTED_FW_KEY_CERT_ID] = {
235*91f16700Schasinglulu 					&rcar_dev_handle,
236*91f16700Schasinglulu 					(uintptr_t) &bl33_key_cert_file_spec,
237*91f16700Schasinglulu 					&open_rcar},
238*91f16700Schasinglulu 	[BL332_KEY_CERT_ID] = {
239*91f16700Schasinglulu 			       &rcar_dev_handle,
240*91f16700Schasinglulu 			       (uintptr_t) &bl332_key_cert_file_spec,
241*91f16700Schasinglulu 			       &open_rcar},
242*91f16700Schasinglulu 	[BL333_KEY_CERT_ID] = {
243*91f16700Schasinglulu 			       &rcar_dev_handle,
244*91f16700Schasinglulu 			       (uintptr_t) &bl333_key_cert_file_spec,
245*91f16700Schasinglulu 			       &open_rcar},
246*91f16700Schasinglulu 	[BL334_KEY_CERT_ID] = {
247*91f16700Schasinglulu 			       &rcar_dev_handle,
248*91f16700Schasinglulu 			       (uintptr_t) &bl334_key_cert_file_spec,
249*91f16700Schasinglulu 			       &open_rcar},
250*91f16700Schasinglulu 	[BL335_KEY_CERT_ID] = {
251*91f16700Schasinglulu 			       &rcar_dev_handle,
252*91f16700Schasinglulu 			       (uintptr_t) &bl335_key_cert_file_spec,
253*91f16700Schasinglulu 			       &open_rcar},
254*91f16700Schasinglulu 	[BL336_KEY_CERT_ID] = {
255*91f16700Schasinglulu 			       &rcar_dev_handle,
256*91f16700Schasinglulu 			       (uintptr_t) &bl336_key_cert_file_spec,
257*91f16700Schasinglulu 			       &open_rcar},
258*91f16700Schasinglulu 	[BL337_KEY_CERT_ID] = {
259*91f16700Schasinglulu 			       &rcar_dev_handle,
260*91f16700Schasinglulu 			       (uintptr_t) &bl337_key_cert_file_spec,
261*91f16700Schasinglulu 			       &open_rcar},
262*91f16700Schasinglulu 	[BL338_KEY_CERT_ID] = {
263*91f16700Schasinglulu 			       &rcar_dev_handle,
264*91f16700Schasinglulu 			       (uintptr_t) &bl338_key_cert_file_spec,
265*91f16700Schasinglulu 			       &open_rcar},
266*91f16700Schasinglulu 	[SOC_FW_CONTENT_CERT_ID] = {
267*91f16700Schasinglulu 				    &rcar_dev_handle,
268*91f16700Schasinglulu 				    (uintptr_t) &bl31_cert_file_spec,
269*91f16700Schasinglulu 				    &open_rcar},
270*91f16700Schasinglulu 	[TRUSTED_OS_FW_CONTENT_CERT_ID] = {
271*91f16700Schasinglulu 					   &rcar_dev_handle,
272*91f16700Schasinglulu 					   (uintptr_t) &bl32_cert_file_spec,
273*91f16700Schasinglulu 					   &open_rcar},
274*91f16700Schasinglulu 	[NON_TRUSTED_FW_CONTENT_CERT_ID] = {
275*91f16700Schasinglulu 					    &rcar_dev_handle,
276*91f16700Schasinglulu 					    (uintptr_t) &bl33_cert_file_spec,
277*91f16700Schasinglulu 					    &open_rcar},
278*91f16700Schasinglulu 	[BL332_CERT_ID] = {
279*91f16700Schasinglulu 			   &rcar_dev_handle,
280*91f16700Schasinglulu 			   (uintptr_t) &bl332_cert_file_spec,
281*91f16700Schasinglulu 			   &open_rcar},
282*91f16700Schasinglulu 	[BL333_CERT_ID] = {
283*91f16700Schasinglulu 			   &rcar_dev_handle,
284*91f16700Schasinglulu 			   (uintptr_t) &bl333_cert_file_spec,
285*91f16700Schasinglulu 			   &open_rcar},
286*91f16700Schasinglulu 	[BL334_CERT_ID] = {
287*91f16700Schasinglulu 			   &rcar_dev_handle,
288*91f16700Schasinglulu 			   (uintptr_t) &bl334_cert_file_spec,
289*91f16700Schasinglulu 			   &open_rcar},
290*91f16700Schasinglulu 	[BL335_CERT_ID] = {
291*91f16700Schasinglulu 			   &rcar_dev_handle,
292*91f16700Schasinglulu 			   (uintptr_t) &bl335_cert_file_spec,
293*91f16700Schasinglulu 			   &open_rcar},
294*91f16700Schasinglulu 	[BL336_CERT_ID] = {
295*91f16700Schasinglulu 			   &rcar_dev_handle,
296*91f16700Schasinglulu 			   (uintptr_t) &bl336_cert_file_spec,
297*91f16700Schasinglulu 			   &open_rcar},
298*91f16700Schasinglulu 	[BL337_CERT_ID] = {
299*91f16700Schasinglulu 			   &rcar_dev_handle,
300*91f16700Schasinglulu 			   (uintptr_t) &bl337_cert_file_spec,
301*91f16700Schasinglulu 			   &open_rcar},
302*91f16700Schasinglulu 	[BL338_CERT_ID] = {
303*91f16700Schasinglulu 			   &rcar_dev_handle,
304*91f16700Schasinglulu 			   (uintptr_t) &bl338_cert_file_spec,
305*91f16700Schasinglulu 			   &open_rcar}, {
306*91f16700Schasinglulu #else
307*91f16700Schasinglulu 					{
308*91f16700Schasinglulu #endif
309*91f16700Schasinglulu 					 0, 0, 0}
310*91f16700Schasinglulu };
311*91f16700Schasinglulu 
312*91f16700Schasinglulu static io_drv_spec_t io_drv_spec_memdrv = {
313*91f16700Schasinglulu 	FLASH0_BASE,
314*91f16700Schasinglulu 	FLASH0_SIZE,
315*91f16700Schasinglulu 	0,
316*91f16700Schasinglulu };
317*91f16700Schasinglulu 
318*91f16700Schasinglulu static io_drv_spec_t io_drv_spec_emmcdrv = {
319*91f16700Schasinglulu 	0,
320*91f16700Schasinglulu 	0,
321*91f16700Schasinglulu 	0,
322*91f16700Schasinglulu };
323*91f16700Schasinglulu 
324*91f16700Schasinglulu static struct plat_io_policy drv_policies[] __attribute__ ((section(".data"))) = {
325*91f16700Schasinglulu 	/* FLASH_DEV_ID */
326*91f16700Schasinglulu 	{ &memdrv_dev_handle, (uintptr_t) &io_drv_spec_memdrv, &open_memmap, },
327*91f16700Schasinglulu 	/* EMMC_DEV_ID */
328*91f16700Schasinglulu 	{ &emmcdrv_dev_handle, (uintptr_t) &io_drv_spec_emmcdrv, &open_emmcdrv, }
329*91f16700Schasinglulu };
330*91f16700Schasinglulu 
331*91f16700Schasinglulu static int32_t open_rcar(const uintptr_t spec)
332*91f16700Schasinglulu {
333*91f16700Schasinglulu 	return io_dev_init(rcar_dev_handle, boot_io_drv_id);
334*91f16700Schasinglulu }
335*91f16700Schasinglulu 
336*91f16700Schasinglulu static int32_t open_memmap(const uintptr_t spec)
337*91f16700Schasinglulu {
338*91f16700Schasinglulu 	uintptr_t handle;
339*91f16700Schasinglulu 	int32_t result;
340*91f16700Schasinglulu 
341*91f16700Schasinglulu 	result = io_dev_init(memdrv_dev_handle, 0);
342*91f16700Schasinglulu 	if (result != IO_SUCCESS)
343*91f16700Schasinglulu 		return result;
344*91f16700Schasinglulu 
345*91f16700Schasinglulu 	result = io_open(memdrv_dev_handle, spec, &handle);
346*91f16700Schasinglulu 	if (result == IO_SUCCESS)
347*91f16700Schasinglulu 		io_close(handle);
348*91f16700Schasinglulu 
349*91f16700Schasinglulu 	return result;
350*91f16700Schasinglulu }
351*91f16700Schasinglulu 
352*91f16700Schasinglulu static int32_t open_emmcdrv(const uintptr_t spec)
353*91f16700Schasinglulu {
354*91f16700Schasinglulu 	return io_dev_init(emmcdrv_dev_handle, 0);
355*91f16700Schasinglulu }
356*91f16700Schasinglulu 
357*91f16700Schasinglulu void rcar_io_setup(void)
358*91f16700Schasinglulu {
359*91f16700Schasinglulu 	const io_dev_connector_t *memmap;
360*91f16700Schasinglulu 	const io_dev_connector_t *rcar;
361*91f16700Schasinglulu 
362*91f16700Schasinglulu 	boot_io_drv_id = FLASH_DEV_ID;
363*91f16700Schasinglulu 
364*91f16700Schasinglulu 	rcar_register_io_dev(&rcar);
365*91f16700Schasinglulu 	rcar_register_io_dev_memdrv(&memmap);
366*91f16700Schasinglulu 	io_dev_open(rcar, 0, &rcar_dev_handle);
367*91f16700Schasinglulu 	io_dev_open(memmap, 0, &memdrv_dev_handle);
368*91f16700Schasinglulu }
369*91f16700Schasinglulu 
370*91f16700Schasinglulu void rcar_io_emmc_setup(void)
371*91f16700Schasinglulu {
372*91f16700Schasinglulu 	const io_dev_connector_t *rcar;
373*91f16700Schasinglulu 	const io_dev_connector_t *emmc;
374*91f16700Schasinglulu 
375*91f16700Schasinglulu 	boot_io_drv_id = EMMC_DEV_ID;
376*91f16700Schasinglulu 
377*91f16700Schasinglulu 	rcar_register_io_dev(&rcar);
378*91f16700Schasinglulu 	rcar_register_io_dev_emmcdrv(&emmc);
379*91f16700Schasinglulu 	io_dev_open(rcar, 0, &rcar_dev_handle);
380*91f16700Schasinglulu 	io_dev_open(emmc, 0, &emmcdrv_dev_handle);
381*91f16700Schasinglulu }
382*91f16700Schasinglulu 
383*91f16700Schasinglulu int plat_get_image_source(unsigned int image_id, uintptr_t *dev_handle,
384*91f16700Schasinglulu 			  uintptr_t *image_spec)
385*91f16700Schasinglulu {
386*91f16700Schasinglulu 	const struct plat_io_policy *policy;
387*91f16700Schasinglulu 	int result;
388*91f16700Schasinglulu 
389*91f16700Schasinglulu 	policy = &policies[image_id];
390*91f16700Schasinglulu 
391*91f16700Schasinglulu 	result = policy->check(policy->image_spec);
392*91f16700Schasinglulu 	if (result != IO_SUCCESS)
393*91f16700Schasinglulu 		return result;
394*91f16700Schasinglulu 
395*91f16700Schasinglulu 	*image_spec = policy->image_spec;
396*91f16700Schasinglulu 	*dev_handle = *(policy->dev_handle);
397*91f16700Schasinglulu 
398*91f16700Schasinglulu 	return IO_SUCCESS;
399*91f16700Schasinglulu }
400*91f16700Schasinglulu 
401*91f16700Schasinglulu int32_t plat_get_drv_source(uint32_t io_drv_id, uintptr_t *dev_handle,
402*91f16700Schasinglulu 			    uintptr_t *image_spec)
403*91f16700Schasinglulu {
404*91f16700Schasinglulu 	const struct plat_io_policy *policy;
405*91f16700Schasinglulu 	int32_t result;
406*91f16700Schasinglulu 
407*91f16700Schasinglulu 	policy = &drv_policies[io_drv_id];
408*91f16700Schasinglulu 
409*91f16700Schasinglulu 	result = policy->check(policy->image_spec);
410*91f16700Schasinglulu 	if (result != IO_SUCCESS)
411*91f16700Schasinglulu 		return result;
412*91f16700Schasinglulu 
413*91f16700Schasinglulu 	*image_spec = policy->image_spec;
414*91f16700Schasinglulu 	*dev_handle = *(policy->dev_handle);
415*91f16700Schasinglulu 
416*91f16700Schasinglulu 	return IO_SUCCESS;
417*91f16700Schasinglulu }
418