Skip to content

Commit 53d859a

Browse files
authored
Expand SDRAM code space to 4MB. (#288)
* Add hash block size field to file header. * Expand SDRAM code space to 4MB.
1 parent cd4c4cc commit 53d859a

File tree

9 files changed

+114
-197
lines changed

9 files changed

+114
-197
lines changed

core/embed/emmc_wrapper/emmc_commands.c

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -600,10 +600,18 @@ static int check_file_contents(uint8_t iface_num, const uint8_t* buffer, uint32_
600600
}
601601
);
602602

603+
if ( file_hdr.codelen - (FIRMWARE_IMAGE_INNER_SIZE - (file_vhdr.hdrlen + file_hdr.hdrlen)) >
604+
FMC_SDRAM_FIRMWARE_P2_LEN )
605+
{
606+
send_failure(iface_num, FailureType_Failure_ProcessError, "Firmware file P2 too big!");
607+
return -1;
608+
}
609+
603610
// check file firmware hash
604611
ExecuteCheck_MSGS_ADV(
605612
check_image_contents_ADV(
606-
&file_vhdr, &file_hdr, p_data + file_vhdr.hdrlen + file_hdr.hdrlen, 0, file_hdr.codelen
613+
&file_vhdr, &file_hdr, p_data + file_vhdr.hdrlen + file_hdr.hdrlen, 0, file_hdr.codelen,
614+
true
607615
),
608616
sectrue,
609617
{
@@ -614,9 +622,7 @@ static int check_file_contents(uint8_t iface_num, const uint8_t* buffer, uint32_
614622

615623
// check file size
616624
ExecuteCheck_MSGS_ADV(
617-
(file_vhdr.hdrlen + file_hdr.hdrlen + file_hdr.codelen <=
618-
FIRMWARE_SECTORS_COUNT * FLASH_FIRMWARE_SECTOR_SIZE),
619-
true,
625+
(file_vhdr.hdrlen + file_hdr.hdrlen + file_hdr.codelen <= FIRMWARE_IMAGE_MAXSIZE), true,
620626
{
621627
send_failure(iface_num, FailureType_Failure_ProcessError, "Firmware file is too big!");
622628
return -1;
@@ -844,7 +850,7 @@ int check_bootloader_update(image_header* file_hdr)
844850
) )
845851
return -1;
846852

847-
if ( !check_image_contents_ADV(NULL, file_hdr, buffer + file_hdr->hdrlen, 0, file_hdr->codelen) )
853+
if ( !check_image_contents_ADV(NULL, file_hdr, buffer + file_hdr->hdrlen, 0, file_hdr->codelen, true) )
848854
return -1;
849855

850856
// check header stated size matchs file size

core/embed/extmod/modtrezorutils/modtrezorutils.c

Lines changed: 8 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@
4646
#include "mini_printf.h"
4747
#endif
4848

49-
static void ui_progress(mp_obj_t ui_wait_callback, uint32_t current,
50-
uint32_t total) {
51-
if (mp_obj_is_callable(ui_wait_callback)) {
52-
mp_call_function_2_protected(ui_wait_callback, mp_obj_new_int(current),
53-
mp_obj_new_int(total));
54-
}
55-
}
49+
// static void ui_progress(mp_obj_t ui_wait_callback, uint32_t current,
50+
// uint32_t total) {
51+
// if (mp_obj_is_callable(ui_wait_callback)) {
52+
// mp_call_function_2_protected(ui_wait_callback, mp_obj_new_int(current),
53+
// mp_obj_new_int(total));
54+
// }
55+
// }
5656

5757
/// def consteq(sec: bytes, pub: bytes) -> bool:
5858
/// """
@@ -162,44 +162,9 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_reset_obj,
162162
/// """
163163
STATIC mp_obj_t mod_trezorutils_firmware_hash(size_t n_args,
164164
const mp_obj_t *args) {
165-
BLAKE2S_CTX ctx;
166-
mp_buffer_info_t chal = {0};
167-
if (n_args > 0 && args[0] != mp_const_none) {
168-
mp_get_buffer_raise(args[0], &chal, MP_BUFFER_READ);
169-
}
170-
171-
if (chal.len != 0) {
172-
if (blake2s_InitKey(&ctx, BLAKE2S_DIGEST_LENGTH, chal.buf, chal.len) != 0) {
173-
mp_raise_msg(&mp_type_ValueError, "Invalid challenge.");
174-
}
175-
} else {
176-
blake2s_Init(&ctx, BLAKE2S_DIGEST_LENGTH);
177-
}
178-
179-
mp_obj_t ui_wait_callback = mp_const_none;
180-
if (n_args > 1 && args[1] != mp_const_none) {
181-
ui_wait_callback = args[1];
182-
}
183-
184-
ui_progress(ui_wait_callback, 0, FIRMWARE_SECTORS_COUNT);
185-
for (int i = 0; i < FIRMWARE_SECTORS_COUNT; i++) {
186-
uint8_t sector = FIRMWARE_SECTORS[i];
187-
uint32_t size = flash_sector_size(sector);
188-
const void *data = flash_get_address(sector, 0, size);
189-
if (data == NULL) {
190-
mp_raise_msg(&mp_type_RuntimeError, "Failed to read firmware.");
191-
}
192-
blake2s_Update(&ctx, data, size);
193-
ui_progress(ui_wait_callback, i + 1, FIRMWARE_SECTORS_COUNT);
194-
}
195-
165+
// we use onekey firmware hash
196166
vstr_t vstr = {0};
197167
vstr_init_len(&vstr, BLAKE2S_DIGEST_LENGTH);
198-
if (blake2s_Final(&ctx, vstr.buf, vstr.len) != 0) {
199-
vstr_clear(&vstr);
200-
mp_raise_msg(&mp_type_RuntimeError, "Failed to finalize firmware hash.");
201-
}
202-
203168
return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
204169
}
205170
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorutils_firmware_hash_obj, 0,

core/embed/firmware/header.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ g_header:
2727
.byte ONEKEY_VERSION_MINOR // onekey_minor
2828
.byte ONEKEY_VERSION_PATCH // onekey_patch
2929
.byte ONEKEY_VERSION_BUILD // onekey_build
30-
. = . + 4 // reserved
30+
.word 0 // hash block size
3131
. = . + 512 // hash1 ... hash16
3232

3333
#if !defined TREZOR_MODEL_1

core/embed/firmware/memory_H.ld

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ ENTRY(reset_handler)
44

55
MEMORY {
66
FLASH (rx) : ORIGIN = 0x08060000, LENGTH = 1536K
7-
FLASH2 (r) : ORIGIN = 0x90000000, LENGTH = 2048K
7+
FLASH2 (r) : ORIGIN = 0x90000000, LENGTH = 4096K
88
AXIRAM (wal) : ORIGIN = 0x24000000, LENGTH = 512K
99
SRAM (wal) : ORIGIN = 0x20000000, LENGTH = 128K
1010
SRAM1 (wal) : ORIGIN = 0x30000000, LENGTH = 128K
1111
SRAM2 (wal) : ORIGIN = 0x30020000, LENGTH = 128K
1212
/* SRAM3 is used for DMA */
1313
SRAM3 (wal) : ORIGIN = 0x30040000, LENGTH = 32K
14-
EXRAM (wal) : ORIGIN = 0xD1C00000, LENGTH = 2048K
14+
EXRAM (wal) : ORIGIN = 0xD1C00000, LENGTH = 4096K
1515
}
1616

1717
main_stack_base = ORIGIN(SRAM) + LENGTH(SRAM); /* 8-byte aligned full descending stack */

0 commit comments

Comments
 (0)