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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy