diff --git a/components/bootloader_support/include/esp_app_format.h b/components/bootloader_support/include/esp_app_format.h index 64744fdfe5..ef4f7f4f48 100644 --- a/components/bootloader_support/include/esp_app_format.h +++ b/components/bootloader_support/include/esp_app_format.h @@ -55,6 +55,9 @@ typedef enum { ESP_IMAGE_FLASH_SIZE_4MB, /*!< SPI flash size 4 MB */ ESP_IMAGE_FLASH_SIZE_8MB, /*!< SPI flash size 8 MB */ ESP_IMAGE_FLASH_SIZE_16MB, /*!< SPI flash size 16 MB */ + ESP_IMAGE_FLASH_SIZE_32MB, /*!< SPI flash size 32 MB */ + ESP_IMAGE_FLASH_SIZE_64MB, /*!< SPI flash size 64 MB */ + ESP_IMAGE_FLASH_SIZE_128MB, /*!< SPI flash size 128 MB */ ESP_IMAGE_FLASH_SIZE_MAX /*!< SPI flash size MAX */ } esp_image_flash_size_t; diff --git a/components/bootloader_support/src/esp32s2/bootloader_esp32s2.c b/components/bootloader_support/src/esp32s2/bootloader_esp32s2.c index 177ce835c1..2346ce4b79 100644 --- a/components/bootloader_support/src/esp32s2/bootloader_esp32s2.c +++ b/components/bootloader_support/src/esp32s2/bootloader_esp32s2.c @@ -101,6 +101,15 @@ static void update_flash_config(const esp_image_header_t *bootloader_hdr) case ESP_IMAGE_FLASH_SIZE_16MB: size = 16; break; + case ESP_IMAGE_FLASH_SIZE_32MB: + size = 32; + break; + case ESP_IMAGE_FLASH_SIZE_64MB: + size = 64; + break; + case ESP_IMAGE_FLASH_SIZE_128MB: + size = 128; + break; default: size = 2; } @@ -174,6 +183,15 @@ static void print_flash_info(const esp_image_header_t *bootloader_hdr) case ESP_IMAGE_FLASH_SIZE_16MB: str = "16MB"; break; + case ESP_IMAGE_FLASH_SIZE_32MB: + str = "32MB"; + break; + case ESP_IMAGE_FLASH_SIZE_64MB: + str = "64MB"; + break; + case ESP_IMAGE_FLASH_SIZE_128MB: + str = "128MB"; + break; default: str = "2MB"; break; diff --git a/components/bootloader_support/src/esp32s3/bootloader_esp32s3.c b/components/bootloader_support/src/esp32s3/bootloader_esp32s3.c index 8346b00d02..2cfabce583 100644 --- a/components/bootloader_support/src/esp32s3/bootloader_esp32s3.c +++ b/components/bootloader_support/src/esp32s3/bootloader_esp32s3.c @@ -103,6 +103,15 @@ static void update_flash_config(const esp_image_header_t *bootloader_hdr) case ESP_IMAGE_FLASH_SIZE_16MB: size = 16; break; + case ESP_IMAGE_FLASH_SIZE_32MB: + size = 32; + break; + case ESP_IMAGE_FLASH_SIZE_64MB: + size = 64; + break; + case ESP_IMAGE_FLASH_SIZE_128MB: + size = 128; + break; default: size = 2; } @@ -176,6 +185,15 @@ static void print_flash_info(const esp_image_header_t *bootloader_hdr) case ESP_IMAGE_FLASH_SIZE_16MB: str = "16MB"; break; + case ESP_IMAGE_FLASH_SIZE_32MB: + str = "32MB"; + break; + case ESP_IMAGE_FLASH_SIZE_64MB: + str = "64MB"; + break; + case ESP_IMAGE_FLASH_SIZE_128MB: + str = "128MB"; + break; default: str = "2MB"; break; diff --git a/components/bootloader_support/src/esp_image_format.c b/components/bootloader_support/src/esp_image_format.c index ebdf7f334f..b0adc849b1 100644 --- a/components/bootloader_support/src/esp_image_format.c +++ b/components/bootloader_support/src/esp_image_format.c @@ -901,6 +901,12 @@ int esp_image_get_flash_size(esp_image_flash_size_t app_flash_size) return 8 * 1024 * 1024; case ESP_IMAGE_FLASH_SIZE_16MB: return 16 * 1024 * 1024; + case ESP_IMAGE_FLASH_SIZE_32MB: + return 32 * 1024 * 1024; + case ESP_IMAGE_FLASH_SIZE_64MB: + return 64 * 1024 * 1024; + case ESP_IMAGE_FLASH_SIZE_128MB: + return 128 * 1024 * 1024; default: return 0; } diff --git a/components/esptool_py/Kconfig.projbuild b/components/esptool_py/Kconfig.projbuild index 2e45a3177a..3c54a1f534 100644 --- a/components/esptool_py/Kconfig.projbuild +++ b/components/esptool_py/Kconfig.projbuild @@ -170,6 +170,12 @@ menu "Serial flasher config" bool "8 MB" config ESPTOOLPY_FLASHSIZE_16MB bool "16 MB" + config ESPTOOLPY_FLASHSIZE_32MB + bool "32 MB" + config ESPTOOLPY_FLASHSIZE_64MB + bool "64 MB" + config ESPTOOLPY_FLASHSIZE_128MB + bool "128 MB" endchoice config ESPTOOLPY_FLASHSIZE @@ -179,6 +185,9 @@ menu "Serial flasher config" default "4MB" if ESPTOOLPY_FLASHSIZE_4MB default "8MB" if ESPTOOLPY_FLASHSIZE_8MB default "16MB" if ESPTOOLPY_FLASHSIZE_16MB + default "32MB" if ESPTOOLPY_FLASHSIZE_32MB + default "64MB" if ESPTOOLPY_FLASHSIZE_64MB + default "128MB" if ESPTOOLPY_FLASHSIZE_128MB config ESPTOOLPY_FLASHSIZE_DETECT bool "Detect flash size when flashing bootloader" diff --git a/components/partition_table/check_sizes.py b/components/partition_table/check_sizes.py index c53e8c0725..8e9efac102 100755 --- a/components/partition_table/check_sizes.py +++ b/components/partition_table/check_sizes.py @@ -7,19 +7,9 @@ # # (Can also check if the bootloader binary fits before the partition table.) # -# Copyright 2020 Espressif Systems (Shanghai) PTE LTD -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + from __future__ import division, print_function, unicode_literals import argparse diff --git a/components/partition_table/gen_empty_partition.py b/components/partition_table/gen_empty_partition.py index 0e29baa681..a49217f78d 100644 --- a/components/partition_table/gen_empty_partition.py +++ b/components/partition_table/gen_empty_partition.py @@ -4,19 +4,9 @@ # # This tool generates an empty binary file of the required size. # -# Copyright 2018 Espressif Systems (Shanghai) PTE LTD -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http:#www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + from __future__ import division, print_function, unicode_literals import argparse diff --git a/components/partition_table/gen_esp32part.py b/components/partition_table/gen_esp32part.py index f1423a310e..ba6ba6c5da 100755 --- a/components/partition_table/gen_esp32part.py +++ b/components/partition_table/gen_esp32part.py @@ -7,19 +7,9 @@ # See https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/partition-tables.html # for explanation of partition table structure and uses. # -# Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http:#www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# SPDX-FileCopyrightText: 2016-2021 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 + from __future__ import division, print_function, unicode_literals import argparse @@ -261,6 +251,17 @@ class PartitionTable(list): return 0 # empty table! return last.offset + last.size + def verify_size_fits(self, flash_size_bytes: int) -> None: + """ Check that partition table fits into the given flash size. + Raises InputError otherwise. + """ + table_size = self.flash_size() + if flash_size_bytes < table_size: + mb = 1024 * 1024 + raise InputError('Partitions tables occupies %.1fMB of flash (%d bytes) which does not fit in configured ' + "flash size %dMB. Change the flash size in menuconfig under the 'Serial Flasher Config' menu." % + (table_size / mb, table_size, flash_size_bytes / mb)) + @classmethod def from_binary(cls, b): md5 = hashlib.md5() @@ -505,7 +506,7 @@ def main(): parser = argparse.ArgumentParser(description='ESP32 partition table utility') parser.add_argument('--flash-size', help='Optional flash size limit, checks partition table fits in flash', - nargs='?', choices=['1MB', '2MB', '4MB', '8MB', '16MB']) + nargs='?', choices=['1MB', '2MB', '4MB', '8MB', '16MB', '32MB', '64MB', '128MB']) parser.add_argument('--disable-md5sum', help='Disable md5 checksum for the partition table', default=False, action='store_true') parser.add_argument('--no-verify', help="Don't verify partition table fields", action='store_true') parser.add_argument('--verify', '-v', help='Verify partition table fields (deprecated, this behaviour is ' @@ -531,12 +532,7 @@ def main(): if args.flash_size: size_mb = int(args.flash_size.replace('MB', '')) - size = size_mb * 1024 * 1024 # flash memory uses honest megabytes! - table_size = table.flash_size() - if size < table_size: - raise InputError("Partitions defined in '%s' occupy %.1fMB of flash (%d bytes) which does not fit in configured " - "flash size %dMB. Change the flash size in menuconfig under the 'Serial Flasher Config' menu." % - (args.input.name, table_size / 1024.0 / 1024.0, table_size, size_mb)) + table.verify_size_fits(size_mb * 1024 * 1024) # Make sure that the output directory is created output_dir = os.path.abspath(os.path.dirname(args.output)) diff --git a/components/partition_table/test/test_partition.c b/components/partition_table/test/test_partition.c index 0abc1c82ad..50b2ce5a3b 100644 --- a/components/partition_table/test/test_partition.c +++ b/components/partition_table/test/test_partition.c @@ -1,3 +1,8 @@ +/* + * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ #include #include #include "unity.h" diff --git a/components/partition_table/test_gen_esp32part_host/check_sizes_test.py b/components/partition_table/test_gen_esp32part_host/check_sizes_test.py index 8dcd4a106b..0987e21457 100755 --- a/components/partition_table/test_gen_esp32part_host/check_sizes_test.py +++ b/components/partition_table/test_gen_esp32part_host/check_sizes_test.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 from __future__ import division, print_function import io diff --git a/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py b/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py index 11dd2170e2..7ba1878151 100755 --- a/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py +++ b/components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 from __future__ import division, print_function import csv @@ -467,6 +469,14 @@ ota_1, 0, ota_1, , 1M, finally: sys.stderr = sys.__stderr__ + def test_size_error(self): + csv_txt = """ +factory, app, factory, 0x10000, 20M + """ + with self.assertRaisesRegex(gen_esp32part.InputError, r'does not fit'): + t = gen_esp32part.PartitionTable.from_csv(csv_txt) + t.verify_size_fits(16 * 1024 * 1024) + class PartToolTests(Py23TestCase): diff --git a/components/partition_table/test_gen_esp32part_host/test_utils.py b/components/partition_table/test_gen_esp32part_host/test_utils.py index 688d6626ae..4eceac35fb 100644 --- a/components/partition_table/test_gen_esp32part_host/test_utils.py +++ b/components/partition_table/test_gen_esp32part_host/test_utils.py @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD +# SPDX-License-Identifier: Apache-2.0 import unittest try: