5
5
#include < cassert>
6
6
#include < cinttypes>
7
7
#include < cstdint>
8
+ #include < cmath>
8
9
#include < stdio.h>
9
10
#include < stdlib.h>
10
11
#include < string>
@@ -36,84 +37,6 @@ extern int
36
37
acl_process_autorun_profiler_scan_chain (unsigned int physical_device_id,
37
38
unsigned int accel_id);
38
39
39
- // Versioning: This value must be read from addr 0
40
- // For unit tests to work, this defines must match the one in the unit test
41
- // header file
42
- #define KERNEL_VERSION_ID (0xa0c00001 )
43
- #define KERNEL_ROM_VERSION_ID (0xa0c00002 )
44
- // Version number in the top 16-bits of the 32-bit status register. Used
45
- // to verify that the hardware and HAL have an identical view of the CSR
46
- // address map.
47
- #define CSR_VERSION_ID_18_1 (3 )
48
- #define CSR_VERSION_ID_19_1 (4 )
49
- #define CSR_VERSION_ID_23_1 (5 )
50
- #define CSR_VERSION_ID CSR_VERSION_ID_23_1
51
-
52
- // Address map
53
- // For unit tests to work, these defines must match those in the unit test
54
- // header file
55
- #define OFFSET_VERSION_ID ((dev_addr_t )0x0000 )
56
- #define OFFSET_KERNEL_CRA_SEGMENT ((dev_addr_t )0x0020 )
57
- #define OFFSET_SW_RESET ((dev_addr_t )0x0030 )
58
- #define OFFSET_KERNEL_CRA ((dev_addr_t )0x1000 )
59
- #define OFFSET_CONFIGURATION_ROM ((dev_addr_t )0x2000 )
60
-
61
- // Addressses for Kernel System ROM
62
- #define OFFSET_KERNEL_ROM_LOCATION_MSB (0x3ffffff8 )
63
- #define OFFSET_KERNEL_ROM_LOCATION_LSB (0x3ffffffc )
64
- #define OFFSET_KERNEL_MAX_ADDRESS (0x3fffffff )
65
-
66
- #define KERNEL_CRA_SEGMENT_SIZE (0x1000 )
67
- #define KERNEL_ROM_SIZE_BYTES_READ 4
68
- #define KERNEL_ROM_SIZE_BYTES 8
69
-
70
- // Byte offsets into the CRA:
71
- // For CSR version >= 5 byte offsets are pushed back with the proper
72
- // value except for the CSR later on in the runtime execution
73
- #define KERNEL_OFFSET_CSR 0
74
- #define KERNEL_OFFSET_PRINTF_BUFFER_SIZE 0x4
75
- #define KERNEL_OFFSET_CSR_PROFILE_CTRL 0xC
76
- #define KERNEL_OFFSET_CSR_PROFILE_DATA 0x10
77
- #define KERNEL_OFFSET_CSR_PROFILE_START_CYCLE 0x18
78
- #define KERNEL_OFFSET_CSR_PROFILE_STOP_CYCLE 0x20
79
- #define KERNEL_OFFSET_FINISH_COUNTER 0x28
80
- #define KERNEL_OFFSET_INVOCATION_IMAGE 0x30
81
-
82
- // CSR version >= 5 byte offsets
83
- #define KERNEL_OFFSET_START_REG 0x8
84
-
85
- // Backwards compatibility with CSR_VERSION_ID 3
86
- #define KERNEL_OFFSET_INVOCATION_IMAGE_181 0x28
87
-
88
- // Bit positions
89
- #define KERNEL_CSR_START 0
90
- #define KERNEL_CSR_DONE 1
91
- #define KERNEL_CSR_STALLED 3
92
- #define KERNEL_CSR_UNSTALL 4
93
- #define KERNEL_CSR_PROFILE_TEMPORAL_STATUS 5
94
- #define KERNEL_CSR_PROFILE_TEMPORAL_RESET 6
95
- #define KERNEL_CSR_LAST_STATUS_BIT KERNEL_CSR_PROFILE_TEMPORAL_RESET
96
- #define KERNEL_CSR_STATUS_BITS_MASK \
97
- ((unsigned )((1 << (KERNEL_CSR_LAST_STATUS_BIT + 1 )) - 1 ))
98
- #define KERNEL_CSR_LMEM_INVALID_BANK 11
99
- #define KERNEL_CSR_LSU_ACTIVE 12
100
- #define KERNEL_CSR_WR_ACTIVE 13
101
- #define KERNEL_CSR_BUSY 14
102
- #define KERNEL_CSR_RUNNING 15
103
- #define KERNEL_CSR_FIRST_VERSION_BIT 16
104
- #define KERNEL_CSR_LAST_VERSION_BIT 31
105
-
106
- #define KERNEL_CSR_PROFILE_SHIFT64_BIT 0
107
- #define KERNEL_CSR_PROFILE_RESET_BIT 1
108
- #define KERNEL_CSR_PROFILE_ALLOW_PROFILING_BIT 2
109
- #define KERNEL_CSR_PROFILE_LOAD_BUFFER_BIT 3
110
- #define KERNEL_CSR_PROFILE_SHARED_CONTROL_BIT1 4
111
- #define KERNEL_CSR_PROFILE_SHARED_CONTROL_BIT2 5
112
-
113
- #define CONFIGURATION_ROM_BYTES 4096
114
-
115
- #define RESET_TIMEOUT (2 * 1000 * 1000 * 1000 )
116
-
117
40
#define ACL_KERNEL_READ_BIT (w, b ) (((w) >> (b)) & 1 )
118
41
#define ACL_KERNEL_READ_BIT_RANGE (w, h, l ) \
119
42
(((w) >> (l)) & ((1 << ((h) - (l) + 1 )) - 1 ))
@@ -178,7 +101,7 @@ static int check_version_id(acl_kernel_if *kern) {
178
101
int r;
179
102
acl_assert_locked ();
180
103
181
- r = acl_kernel_if_read_32b (kern, OFFSET_VERSION_ID , &version);
104
+ r = acl_kernel_if_read_32b (kern, OFFSET_KERNEL_VERSION_ID , &version);
182
105
ACL_KERNEL_IF_DEBUG_MSG (kern, " Version ID check, read: %08x\n " , version);
183
106
if (r != 0 ||
184
107
(version != KERNEL_VERSION_ID && version != KERNEL_ROM_VERSION_ID)) {
@@ -196,15 +119,15 @@ static int get_auto_discovery_string(acl_kernel_if *kern, char *config_str) {
196
119
char description_size_msb[KERNEL_ROM_SIZE_BYTES_READ + 1 ];
197
120
char description_size_lsb[KERNEL_ROM_SIZE_BYTES_READ + 1 ];
198
121
unsigned int size_location;
199
- unsigned int size, temp_size, rom_size;
122
+ unsigned int size, rom_size;
200
123
size_t r;
201
124
int result;
202
125
acl_assert_locked ();
203
126
204
127
kern->cur_segment = 0xffffffff ;
205
128
206
129
version = 0 ;
207
- acl_kernel_if_read_32b (kern, OFFSET_VERSION_ID , &version);
130
+ acl_kernel_if_read_32b (kern, OFFSET_KERNEL_VERSION_ID , &version);
208
131
if (version == KERNEL_ROM_VERSION_ID) {
209
132
// Read autodiscovery size
210
133
size_location = OFFSET_KERNEL_ROM_LOCATION_MSB;
@@ -221,12 +144,7 @@ static int get_auto_discovery_string(acl_kernel_if *kern, char *config_str) {
221
144
size += (unsigned int )strtol (description_size_lsb, NULL , 16 );
222
145
223
146
// Find beginning address of ROM
224
- temp_size = size + KERNEL_ROM_SIZE_BYTES;
225
- rom_size = 1 ;
226
- while (temp_size > 0 ) {
227
- temp_size = temp_size >> 1 ;
228
- rom_size = rom_size << 1 ;
229
- }
147
+ rom_size = 1 << ((unsigned )log2 (size + KERNEL_ROM_SIZE_BYTES) + 1 );
230
148
rom_address = OFFSET_KERNEL_MAX_ADDRESS - rom_size + 1 ;
231
149
config_str[0 ] = ' \0 ' ;
232
150
result = acl_kernel_rom_cra_read_block (kern, rom_address, config_str,
@@ -728,7 +646,7 @@ int acl_kernel_if_init(acl_kernel_if *kern, acl_bsp_io bsp_io,
728
646
}
729
647
730
648
version = 0 ;
731
- acl_kernel_if_read_32b (kern, OFFSET_VERSION_ID , &version);
649
+ acl_kernel_if_read_32b (kern, OFFSET_KERNEL_VERSION_ID , &version);
732
650
ACL_KERNEL_IF_DEBUG_MSG_VERBOSE (kern, 2 , " :: Kernel version 0x%x\n " ,
733
651
version);
734
652
size_t config_str_len = 0 ;
@@ -1226,8 +1144,8 @@ void acl_kernel_if_launch_kernel_on_custom_sof(
1226
1144
offset = (unsigned int )(KERNEL_OFFSET_INVOCATION_IMAGE +
1227
1145
kern->cra_address_offset );
1228
1146
image_p = (uintptr_t ) & (image->work_dim );
1229
- image_size_static =
1230
- (size_t )((uintptr_t ) & (image->arg_value ) - (uintptr_t ) &
1147
+ image_size_static =
1148
+ (size_t )((uintptr_t ) & (image->arg_value ) - (uintptr_t ) &
1231
1149
(image->work_dim ));
1232
1150
}
1233
1151
0 commit comments