Skip to content

Commit fc072f5

Browse files
committed
[rescue,usb] Avoid large rodata initializer for dfu_ctx_t
The `dfu_ctx_t` struct has a large buffer allocated for USB transfers. Using a designated initializer for this struct produces a large, mostly zero-filled initializer in `rodata`, consuming approximately 2.5K of ROM_EXT flash space. To reclaim this space, this change replaces the designated initializer with manual field-by-field initialization, eliminating the bloated `rodata` payload. Change-Id: Ifbbdc4977104cc980677af2b8ca61507d592f1a3 Signed-off-by: Yi-Hsuan Deng <yhdeng@google.com>
1 parent 7ccbcd6 commit fc072f5

2 files changed

Lines changed: 13 additions & 14 deletions

File tree

sw/device/silicon_creator/lib/rescue/rescue_spi.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,10 @@ void dfu_transport_result(dfu_ctx_t *ctx, rom_error_t result) {
7878

7979
rom_error_t rescue_protocol(boot_data_t *bootdata, boot_log_t *boot_log,
8080
const owner_rescue_config_t *config) {
81-
dfu_ctx_t ctx = {
82-
.dfu_state = kDfuStateIdle,
83-
.dfu_error = kDfuErrOk,
84-
};
81+
dfu_ctx_t ctx;
82+
memset(&ctx, 0, sizeof(ctx));
83+
ctx.dfu_state = kDfuStateIdle;
84+
ctx.dfu_error = kDfuErrOk;
8585
dbg_printf("SPI-DFU rescue ready\r\n");
8686
rescue_state_init(&ctx.state, bootdata, boot_log, config);
8787
spi_device_init(

sw/device/silicon_creator/lib/rescue/rescue_usb.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "sw/device/lib/arch/device.h"
99
#include "sw/device/lib/base/macros.h"
10+
#include "sw/device/lib/base/memory.h"
1011
#include "sw/device/silicon_creator/lib/boot_data.h"
1112
#include "sw/device/silicon_creator/lib/dbg_print.h"
1213
#include "sw/device/silicon_creator/lib/drivers/lifecycle.h"
@@ -164,16 +165,14 @@ void dfu_transport_result(dfu_ctx_t *ctx, rom_error_t result) {
164165
rom_error_t rescue_protocol(boot_data_t *bootdata, boot_log_t *boot_log,
165166
const owner_rescue_config_t *config) {
166167
set_serialnumber();
167-
dfu_ctx_t ctx = {
168-
.ep0 =
169-
{
170-
.device_desc = &device_desc,
171-
.config_desc = config_desc,
172-
.string_desc = string_desc,
173-
},
174-
.dfu_state = kDfuStateIdle,
175-
.dfu_error = kDfuErrOk,
176-
};
168+
dfu_ctx_t ctx;
169+
memset(&ctx, 0, sizeof(ctx));
170+
ctx.ep0.device_desc = &device_desc;
171+
ctx.ep0.config_desc = config_desc;
172+
ctx.ep0.string_desc = string_desc;
173+
ctx.dfu_state = kDfuStateIdle;
174+
ctx.dfu_error = kDfuErrOk;
175+
177176
dbg_printf("USB-DFU rescue ready\r\n");
178177
rescue_state_init(&ctx.state, bootdata, boot_log, config);
179178
pinmux_init_usb();

0 commit comments

Comments
 (0)