8000 Merge pull request #8952 from dhalbert/memento-storage-crash · bablokb/circuitpython@cbdaaea · GitHub
[go: up one dir, main page]

Skip to content

Commit cbdaaea

Browse files
authored
Merge pull request adafruit#8952 from dhalbert/memento-storage-crash
Espressif: fix handling of single-partition CIRCUITPY (non-CIRCUITPY_STORAGE_EXTEND) - fixes MEMENTO bug
2 parents 499cc01 + 9a3e087 commit cbdaaea

File tree

9 files changed

+81
-16
lines changed

9 files changed

+81
-16
lines changed

ports/espressif/Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,12 @@ endif
417417
do-sdkconfig: $(BUILD)/esp-idf/config/sdkconfig.h
418418
QSTR_GLOBAL_REQUIREMENTS += $(BUILD)/esp-idf/config/sdkconfig.h
419419
$(BUILD)/esp-idf/config/sdkconfig.h: boards/$(BOARD)/sdkconfig boards/$(BOARD)/mpconfigboard.mk CMakeLists.txt | $(BUILD)/esp-idf
420-
IDF_PATH=$(IDF_PATH) cmake -S . -B $(BUILD)/esp-idf -DSDKCONFIG=$(BUILD)/esp-idf/sdkconfig -DSDKCONFIG_DEFAULTS="$(SDKCONFIGS)" -DCMAKE_TOOLCHAIN_FILE=$(IDF_PATH)/tools/cmake/toolchain-$(IDF_TARGET).cmake -DIDF_TARGET=$(IDF_TARGET) -GNinja
420+
$(STEPECHO) "LINK $@"
421+
$(Q)env IDF_PATH=$(IDF_PATH) cmake -S . -B $(BUILD)/esp-idf -DSDKCONFIG=$(BUILD)/esp-idf/sdkconfig -DSDKCONFIG_DEFAULTS="$(SDKCONFIGS)" -DCMAKE_TOOLCHAIN_FILE=$(IDF_PATH)/tools/cmake/toolchain-$(IDF_TARGET).cmake -DIDF_TARGET=$(IDF_TARGET) -GNinja
422+
$(Q)$(PYTHON) tools/check-sdkconfig.py \
423+
CIRCUITPY_DUALBANK=$(CIRCUITPY_DUALBANK) \
424+
CIRCUITPY_STORAGE_EXTEND=$(CIRCUITPY_STORAGE_EXTEND) \
425+
$@
421426

422427
# build a lib
423428
# Adding -d explain -j 1 -v to the ninja line will output debug info

ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
1212
CIRCUITPY_ESP_PSRAM_SIZE = 2MB
1313
CIRCUITPY_ESP_PSRAM_MODE = qio
1414
CIRCUITPY_ESP_PSRAM_FREQ = 80m
15-
FLASH_SDKCONFIG = esp-idf-config/sdkconfig-4MB-1ota.defaults
15+
16+
# No OTA partition: larger firmware partition
17+
FLASH_SIZE_SDKCONFIG = esp-idf-config/sdkconfig-flash-$(CIRCUITPY_ESP_FLASH_SIZE)-no-ota.defaults
1618

1719
CIRCUITPY_AUDIOBUSIO = 0
1820
CIRCUITPY_CANIO = 0
21+
CIRCUITPY_DUALBANK = 0
1922
CIRCUITPY_ESPCAMERA = 1
2023
CIRCUITPY_FRAMEBUFFERIO = 0
2124
CIRCUITPY_KEYPAD = 0
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
#
2+
# Espressif IoT Development Framework Configuration
3+
#
4+
#
25
# Serial flasher config
36
#
47
# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set
58
# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set
69
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y
710
# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set
811
# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set
12+
# CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set
13+
# CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set
14+
# CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set
915
CONFIG_ESPTOOLPY_FLASHSIZE="4MB"
10-
CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y
1116
# end of Serial flasher config
1217

13-
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="esp-idf-config/partitions-4MB-1ota.csv"
1418
#
1519
# Partition Table
1620
#
17-
CONFIG_PARTITION_TABLE_FILENAME="esp-idf-config/partitions-4MB-1ota.csv"
21+
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="esp-idf-config/partitions-4MB-no-ota.csv"
22+
CONFIG_PARTITION_TABLE_FILENAME="esp-idf-config/partitions-4MB-no-ota.csv"
1823
# end of Partition Table
24+
25+
# end of Espressif IoT Development Framework Configuration

ports/espressif/mpconfigport.mk

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ CIRCUITPY_AUDIOMP3 ?= 0
2626
CIRCUITPY_BLEIO_HCI = 0
2727
CIRCUITPY_CANIO ?= 1
2828
CIRCUITPY_COUNTIO ?= 1
29-
CIRCUITPY_DOTCLOCKFRAMEBUFFER_USES_SUPERVISOR_ALLOCATION = 0
3029
CIRCUITPY_DUALBANK ?= 1
3130
CIRCUITPY_ESPCAMERA ?= 1
3231
CIRCUITPY_ESPIDF ?= 1
@@ -113,14 +112,12 @@ else ifeq ($(IDF_TARGET),esp32s2)
113112
# Modules
114113
# No BLE in hw
115114
CIRCUITPY_BLEIO = 0
116-
CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION = 0
117115

118116
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 0
119117

120118
else ifeq ($(IDF_TARGET),esp32s3)
121119
# Modules
122120
CIRCUITPY_BITMAPFILTER ?= $(CIRCUITPY_ESPCAMERA)
123-
CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION = 0
124121
CIRCUITPY_ESP_USB_SERIAL_JTAG ?= 0
125122

126123
# No room for _bleio on boards with 4MB flash

ports/espressif/supervisor/internal_flash.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ mp_uint_t supervisor_flash_write_blocks(const uint8_t *src, uint32_t lba, uint32
168168
#if CIRCUITPY_STORAGE_EXTEND
169169
multi_partition_rw(_cache, sector_offset, SECTOR_SIZE, OP_WRITE);
170170
#else
171-
single_partition_rw(_partition[0], _cache, sector_offset, SECTOR_SIZE, OP_READ);
171+
single_partition_rw(_partition[0], _cache, sector_offset, SECTOR_SIZE, OP_WRITE);
172172
#endif
173173
}
174174
return 0; // success
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/usr/bin/env python3
2+
import sys
3+
4+
import click
5+
6+
7+
def int_or_string(s):
8+
try:
9+
return int(s)
10+
except ValueError:
11+
return s.strip('"')
12+
13+
14+
def collect_definitions(file):
15+
"""Collect all definitions in supplied sdkconfig.h."""
16+
sdk_config = {}
17+
for line in file:
18+
if line.startswith("#define "):
19+
_, k, v = line.strip().split(None, 2)
20+
# Handle transitive definitions like '#define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL'
21+
v = sdk_config.get(k, v)
22+
sdk_config[k] = int_or_string(v)
23+
return sdk_config
24+
25+
26+
def validate(sdk_config, circuitpy_config):
27+
partition_table = sdk_config.get("CONFIG_PARTITION_TABLE_FILENAME")
28+
for var in ("CIRCUITPY_STORAGE_EXTEND", "CIRCUITPY_DUALBANK"):
29+
if circuitpy_config.get(var):
30+
with open(partition_table) as f:
31+
content = f.read()
32+
if not "ota_1" in content:
33+
raise SystemExit(
34+
f"{var} is incompatible with {partition_table=} (no ota_1 partition)"
35+
)
36+
37+
# Add more checks here for other things we want to verify.
38+
return
39+
40+
41+
@click.command()
42+
@click.argument("definitions", nargs=-1, metavar="CIRCUITPY_X=1 CIRCUITPY_Y=0 ...")
43+
@click.argument(
44+
"sdkconfig_h", required=True, nargs=1, type=click.File("r"), metavar="<path to sdkconfig.h>"
45+
)
46+
def run(definitions, sdkconfig_h):
47+
sdk_config = collect_definitions(sdkconfig_h)
48+
49+
# Parse definitions arguments
50+
circuitpy_config = {}
51+
for definition in definitions:
52+
k, v = definition.split("=", 1)
53+
circuitpy_config[k] = int_or_string(v)
54+
55+
# Validate.
56+
validate(sdk_config, circuitpy_config)
57+
58+
59+
if __name__ == "__main__":
60+
run()

py/circuitpy_mpconfig.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,9 +415,6 @@ extern const struct _mp_obj_module_t nvm_module;
415415

416416
#define MP_STATE_PORT MP_STATE_VM
417417

418-
// From supervisor/memory.c
419-
struct _supervisor_allocation_node;
420-
421418
void background_callback_run_all(void);
422419
#define RUN_BACKGROUND_TASKS (background_callback_run_all())
423420

py/circuitpy_mpconfig.mk

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,6 @@ CFLAGS += -DCIRCUITPY_PARALLELDISPLAYBUS=$(CIRCUITPY_PARALLELDISPLAYBUS)
237237

238238
CIRCUITPY_DOTCLOCKFRAMEBUFFER ?= 0
239239
CFLAGS += -DCIRCUITPY_DOTCLOCKFRAMEBUFFER=$(CIRCUITPY_DOTCLOCKFRAMEBUFFER)
240-
CIRCUITPY_DOTCLOCKFRAMEBUFFER_USES_SUPERVISOR_ALLOCATION ?= 1
241-
CFLAGS += -DCIRCUITPY_DOTCLOCKFRAMEBUFFER_USES_SUPERVISOR_ALLOCATION=$(CIRCUITPY_DOTCLOCKFRAMEBUFFER_USES_SUPERVISOR_ALLOCATION)
242240

243241
# bitmaptools and framebufferio rely on displayio and are not on small boards
244242
CIRCUITPY_BITMAPTOOLS ?= $(call enable-if-all,$(CIRCUITPY_FULL_BUILD) $(CIRCUITPY_DISPLAYIO))
@@ -435,8 +433,6 @@ CFLAGS += -DCIRCUITPY_RP2PIO=$(CIRCUITPY_RP2PIO)
435433

436434
CIRCUITPY_RGBMATRIX ?= 0
437435
CFLAGS += -DCIRCUITPY_RGBMATRIX=$(CIRCUITPY_RGBMATRIX)
438-
CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION ?= 1
439-
CFLAGS += -DCIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION=$(CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION)
440436

441437
CIRCUITPY_ROTARYIO ?= 1
442438
CFLAGS += -DCIRCUITPY_ROTARYIO=$(CIRCUITPY_ROTARYIO)

0 commit comments

Comments
 (0)
0