Skip to content

Commit 2c974e7

Browse files
committed
Pass autodiscovery string size from acl_kernel_if_init to get_auto_discovery_string
1 parent a95ddb2 commit 2c974e7

File tree

2 files changed

+13
-31
lines changed

2 files changed

+13
-31
lines changed

include/acl_hal_mmd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494

9595
#define RESET_TIMEOUT (2 * 1000 * 1000 * 1000)
9696

97-
// acl_pll
97+
//// acl_pll
9898
// Address map
9999
// For unit tests to work, these defines must match those in the unit test
100100
// header file

src/acl_kernel_if.cpp

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,8 @@ static int check_version_id(acl_kernel_if *kern) {
114114
}
115115

116116
// Loads auto-discovery config string. Returns 0 if was successful.
117-
static int get_auto_discovery_string(acl_kernel_if *kern, char *config_str) {
118-
unsigned int version, rom_address;
119-
char description_size_msb[KERNEL_ROM_SIZE_BYTES_READ + 1];
120-
char description_size_lsb[KERNEL_ROM_SIZE_BYTES_READ + 1];
121-
unsigned int size_location;
122-
unsigned int size, rom_size;
117+
static int get_auto_discovery_string(acl_kernel_if *kern, char *config_str, size_t config_str_len) {
118+
unsigned int version, rom_address, rom_size;
123119
size_t r;
124120
int result;
125121
acl_assert_locked();
@@ -129,39 +125,25 @@ static int get_auto_discovery_string(acl_kernel_if *kern, char *config_str) {
129125
version = 0;
130126
acl_kernel_if_read_32b(kern, OFFSET_KERNEL_VERSION_ID, &version);
131127
if (version == KERNEL_ROM_VERSION_ID) {
132-
// Read autodiscovery size
133-
size_location = OFFSET_KERNEL_ROM_LOCATION_MSB;
134-
acl_kernel_rom_cra_read_32b(kern, size_location,
135-
(unsigned int *)description_size_msb);
136-
description_size_msb[KERNEL_ROM_SIZE_BYTES_READ] = '\0';
137-
size = (unsigned int)strtol(description_size_msb, NULL, 16);
138-
size = size << 16;
139-
140-
size_location = OFFSET_KERNEL_ROM_LOCATION_LSB;
141-
acl_kernel_rom_cra_read_32b(kern, size_location,
142-
(unsigned int *)description_size_lsb);
143-
description_size_lsb[KERNEL_ROM_SIZE_BYTES_READ] = '\0';
144-
size += (unsigned int)strtol(description_size_lsb, NULL, 16);
145-
146128
// Find beginning address of ROM
147-
rom_size = 1 << ((unsigned)log2(size + KERNEL_ROM_SIZE_BYTES) + 1);
129+
rom_size = 1 << ((unsigned)log2((double)config_str_len + KERNEL_ROM_SIZE_BYTES) + 1);
148130
rom_address = OFFSET_KERNEL_MAX_ADDRESS - rom_size + 1;
149131
config_str[0] = '\0';
150132
result = acl_kernel_rom_cra_read_block(kern, rom_address, config_str,
151-
(size_t)size);
133+
(size_t)config_str_len);
152134

153135
if (result < 0)
154136
return -1;
155137
// Pad autodiscovery with NULL
156-
*(config_str + (unsigned int)size) = '\0';
138+
*(config_str + (unsigned int)config_str_len) = '\0';
157139
// Read is verified above
158140
// Set rom_size and r equal to support old flow and big-endian shuffle
159-
rom_size = size;
141+
rom_size = (unsigned int)config_str_len;
160142
r = rom_size;
161143
} else if (version == KERNEL_VERSION_ID) {
162-
rom_size = CONFIGURATION_ROM_BYTES;
144+
rom_size = (unsigned int)config_str_len;
163145
r = kern->io.read(&kern->io, (dev_addr_t)OFFSET_CONFIGURATION_ROM,
164-
config_str, (size_t)CONFIGURATION_ROM_BYTES);
146+
config_str, config_str_len);
165147
} else {
166148
kern->io.printf(" HAL Kern: Version ID incorrect\n");
167149
return -1;
@@ -690,16 +672,16 @@ int acl_kernel_if_init(acl_kernel_if *kern, acl_bsp_io bsp_io,
690672
description_size_msb, description_size_lsb,
691673
size);
692674

693-
config_str_len = size + 1;
675+
config_str_len = size;
694676
} else if (version == KERNEL_VERSION_ID) {
695-
config_str_len = CONFIGURATION_ROM_BYTES + 1;
677+
config_str_len = CONFIGURATION_ROM_BYTES;
696678
} else {
697679
kern->io.printf(" HAL Kern: Version ID incorrect\n");
698680
return -1;
699681
}
700682

701-
std::vector<char> config_str(config_str_len);
702-
result |= get_auto_discovery_string(kern, config_str.data());
683+
std::vector<char> config_str(config_str_len+1); // +1 for null byte padding
684+
result |= get_auto_discovery_string(kern, config_str.data(), config_str_len);
703685
std::string config_string{config_str.data()};
704686

705687
if (result != 0) {

0 commit comments

Comments
 (0)