From 7aeef175e89cd1bce4eb4eacfa235432b28ab2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20=C3=98ye=20Amundsen?= Date: Fri, 7 Jan 2022 13:09:18 +0100 Subject: [PATCH] dts: nrf_qspi_nor: add option for specifying size in bytes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a user has a 1GB external flash it is currently not possible to configure this through DTS. To allow for such a configuration we add an option which specifies the size in bytes not bits. Signed-off-by: Håkon Øye Amundsen --- drivers/flash/nrf_qspi_nor.c | 11 +++++++++++ dts/bindings/mtd/nordic,qspi-nor.yaml | 11 ++++++++++- .../flash/boards/nrf52840_size_in_bytes.overlay | 10 ++++++++++ tests/drivers/flash/src/main.c | 10 ++++++++-- tests/drivers/flash/testcase.yaml | 8 ++++++++ 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 tests/drivers/flash/boards/nrf52840_size_in_bytes.overlay diff --git a/drivers/flash/nrf_qspi_nor.c b/drivers/flash/nrf_qspi_nor.c index ae0cb6796fc..60501064639 100644 --- a/drivers/flash/nrf_qspi_nor.c +++ b/drivers/flash/nrf_qspi_nor.c @@ -64,7 +64,18 @@ struct qspi_nor_config { #define QSPI_BLOCK_SIZE SPI_NOR_BLOCK_SIZE /* instance 0 flash size in bytes */ +#if DT_INST_NODE_HAS_PROP(0, size_in_bytes) +#define INST_0_BYTES (DT_INST_PROP(0, size_in_bytes)) +#elif DT_INST_NODE_HAS_PROP(0, size) #define INST_0_BYTES (DT_INST_PROP(0, size) / 8) +#else +#error "No size specified. 'size' or 'size-in-bytes' must be set" +#endif + +BUILD_ASSERT(!(DT_INST_NODE_HAS_PROP(0, size_in_bytes) && DT_INST_NODE_HAS_PROP(0, size)), + "Node " DT_NODE_PATH(DT_DRV_INST(0)) " has both size and size-in-bytes " + "properties; use exactly one"); + /* * Determine a configuration value (INST_0_SCK_CFG) to be used to achieve the diff --git a/dts/bindings/mtd/nordic,qspi-nor.yaml b/dts/bindings/mtd/nordic,qspi-nor.yaml index 613effb5735..d725bb9717e 100644 --- a/dts/bindings/mtd/nordic,qspi-nor.yaml +++ b/dts/bindings/mtd/nordic,qspi-nor.yaml @@ -21,7 +21,16 @@ properties: required: true size: - required: true + type: int + required: false + description: | + The size in bits. Set this or size-in-bytes, but not both. + + size-in-bytes: + type: int + required: false + description: | + The size in bytes. Set this or size, but not both. # Match original driver NORDIC_QSPI_NOR_QE_BIT Kconfig default. quad-enable-requirements: diff --git a/tests/drivers/flash/boards/nrf52840_size_in_bytes.overlay b/tests/drivers/flash/boards/nrf52840_size_in_bytes.overlay new file mode 100644 index 00000000000..6cb0ce0ffa7 --- /dev/null +++ b/tests/drivers/flash/boards/nrf52840_size_in_bytes.overlay @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2022, Nordic Semiconductor ASA + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&mx25r64 { + /delete-property/ size; + size-in-bytes = <8388608>; +}; diff --git a/tests/drivers/flash/src/main.c b/tests/drivers/flash/src/main.c index 6262851e391..dac587d71a3 100644 --- a/tests/drivers/flash/src/main.c +++ b/tests/drivers/flash/src/main.c @@ -11,9 +11,15 @@ #include #if (CONFIG_NORDIC_QSPI_NOR - 0) -#define FLASH_DEVICE DT_LABEL(DT_INST(0, nordic_qspi_nor)) +#define NORDIC_QSPI_NOR_NODE DT_INST(0, nordic_qspi_nor) +#define FLASH_DEVICE DT_LABEL(NORDIC_QSPI_NOR_NODE) #define FLASH_TEST_REGION_OFFSET 0xff000 -#define TEST_AREA_MAX DT_PROP(DT_INST(0, nordic_qspi_nor), size) + +#if DT_NODE_HAS_PROP(NORDIC_QSPI_NOR_NODE, size_in_bytes) +#define TEST_AREA_MAX (DT_PROP(DT_INST(0, nordic_qspi_nor), size_in_bytes)) +#else +#define TEST_AREA_MAX DT_PROP(DT_INST(0, nordic_qspi_nor), size * 8) +#endif #elif defined(CONFIG_FLASH_MCUX_FLEXSPI_NOR) diff --git a/tests/drivers/flash/testcase.yaml b/tests/drivers/flash/testcase.yaml index 4f66f6dd719..1e9d44bb074 100644 --- a/tests/drivers/flash/testcase.yaml +++ b/tests/drivers/flash/testcase.yaml @@ -5,6 +5,14 @@ tests: extra_args: OVERLAY_CONFIG=boards/nrf52840_flash_qspi.conf integration_platforms: - nrf52840dk_nrf52840 + drivers.flash.nrf_qspi_nor.size_in_bytes: + platform_allow: nrf52840dk_nrf52840 + tags: flash nrf52 nrf_qspi_fash + extra_args: + OVERLAY_CONFIG=boards/nrf52840_flash_qspi.conf + DTC_OVERLAY_FILE=boards/nrf52840_size_in_bytes.overlay + integration_platforms: + - nrf52840dk_nrf52840 drivers.flash.soc_flash_nrf: platform_allow: nrf52840dk_nrf52840 tags: nrf52 soc_flash_nrf