Sanitise includes across codebase
[project/bcm63xx/atf.git] / plat / arm / css / drivers / scp / css_sds.c
1 /*
2 * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <assert.h>
8 #include <stdint.h>
9
10 #include <arch_helpers.h>
11 #include <common/debug.h>
12 #include <drivers/delay_timer.h>
13 #include <plat/common/platform.h>
14
15 #include <css_def.h>
16
17 #include "css_scp.h"
18 #include "../sds/sds.h"
19
20 int css_scp_boot_image_xfer(void *image, unsigned int image_size)
21 {
22 int ret;
23 unsigned int image_offset, image_flags;
24
25 ret = sds_init();
26 if (ret != SDS_OK) {
27 ERROR("SCP SDS initialization failed\n");
28 panic();
29 }
30
31 VERBOSE("Writing SCP image metadata\n");
32 image_offset = (uintptr_t) image - ARM_TRUSTED_SRAM_BASE;
33 ret = sds_struct_write(SDS_SCP_IMG_STRUCT_ID, SDS_SCP_IMG_ADDR_OFFSET,
34 &image_offset, SDS_SCP_IMG_ADDR_SIZE,
35 SDS_ACCESS_MODE_NON_CACHED);
36 if (ret != SDS_OK)
37 goto sds_fail;
38
39 ret = sds_struct_write(SDS_SCP_IMG_STRUCT_ID, SDS_SCP_IMG_SIZE_OFFSET,
40 &image_size, SDS_SCP_IMG_SIZE_SIZE,
41 SDS_ACCESS_MODE_NON_CACHED);
42 if (ret != SDS_OK)
43 goto sds_fail;
44
45 VERBOSE("Marking SCP image metadata as valid\n");
46 image_flags = SDS_SCP_IMG_VALID_FLAG_BIT;
47 ret = sds_struct_write(SDS_SCP_IMG_STRUCT_ID, SDS_SCP_IMG_FLAG_OFFSET,
48 &image_flags, SDS_SCP_IMG_FLAG_SIZE,
49 SDS_ACCESS_MODE_NON_CACHED);
50 if (ret != SDS_OK)
51 goto sds_fail;
52
53 return 0;
54 sds_fail:
55 ERROR("SCP SDS write to SCP IMG struct failed\n");
56 panic();
57 }
58
59 /*
60 * API to wait for SCP to signal till it's ready after booting the transferred
61 * image.
62 */
63 int css_scp_boot_ready(void)
64 {
65 uint32_t scp_feature_availability_flags;
66 int ret, retry = CSS_SCP_READY_10US_RETRIES;
67
68
69 VERBOSE("Waiting for SCP RAM to complete its initialization process\n");
70
71 /* Wait for the SCP RAM Firmware to complete its initialization process */
72 while (retry > 0) {
73 ret = sds_struct_read(SDS_FEATURE_AVAIL_STRUCT_ID, 0,
74 &scp_feature_availability_flags,
75 SDS_FEATURE_AVAIL_SIZE,
76 SDS_ACCESS_MODE_NON_CACHED);
77 if (ret == SDS_ERR_STRUCT_NOT_FINALIZED)
78 continue;
79
80 if (ret != SDS_OK) {
81 ERROR(" sds_struct_read failed\n");
82 panic();
83 }
84
85 if (scp_feature_availability_flags &
86 SDS_FEATURE_AVAIL_SCP_RAM_READY_BIT)
87 return 0;
88
89 udelay(10);
90 retry--;
91 }
92
93 ERROR("Timeout of %d ms expired waiting for SCP RAM Ready flag\n",
94 CSS_SCP_READY_10US_RETRIES/100);
95
96 plat_panic_handler();
97 }