From d683edf7d96ba65c0711d81d73b5b30f145660e8 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 25 Oct 2024 10:19:26 +0200 Subject: [PATCH 1/2] Reapply "Opta: secure_qspi: simplify code" This reverts commit 1399d6477548f3f5585155652511d68d3ef85951. --- variants/OPTA/variant.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/variants/OPTA/variant.cpp b/variants/OPTA/variant.cpp index e076647bb..342a7a3c8 100644 --- a/variants/OPTA/variant.cpp +++ b/variants/OPTA/variant.cpp @@ -283,19 +283,17 @@ static bool has_otp_info = false; bool getSecureFlashData() { static OptaBoardInfo info; - uint8_t temp_buf[sizeof(OptaBoardInfo) + 1]; - int ret = 0; - static SecureQSPIFBlockDevice secure_root; - secure_root.init(); - // read secure sector 2 ( address 1 << 13 ) - ret = secure_root.readSecure(temp_buf, (1 << 13), sizeof(temp_buf)); + char temp_buf[sizeof(OptaBoardInfo) + 1]; + int ret = QSPI_STATUS_OK; + mbed::QSPI _qspi(QSPI_FLASH1_IO0, QSPI_FLASH1_IO1, QSPI_FLASH1_IO2, QSPI_FLASH1_IO3, QSPI_FLASH1_SCK, QSPI_FLASH1_CSN, QSPIF_POLARITY_MODE_0); + auto rxlen = sizeof(temp_buf); + ret = _qspi.read(0x48, -1, 1 << 13, temp_buf, &rxlen); memcpy(&info, &temp_buf[1], sizeof(OptaBoardInfo)); if (info.magic == OTP_QSPI_MAGIC) { _boardInfo = (uint8_t*)&info; has_otp_info = true; } - secure_root.deinit(); - return ret == 0; + return ret == QSPI_STATUS_OK; } uint8_t* boardInfo() { From 4ad1efd1414e3814438ae81f64a2379cdc213d79 Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 25 Oct 2024 13:45:33 +0200 Subject: [PATCH 2/2] Ensure getSecureFlashData is called before QSPIFBlockDevice constructor --- variants/OPTA/variant.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/variants/OPTA/variant.cpp b/variants/OPTA/variant.cpp index 342a7a3c8..eabe1cdab 100644 --- a/variants/OPTA/variant.cpp +++ b/variants/OPTA/variant.cpp @@ -296,6 +296,15 @@ bool getSecureFlashData() { return ret == QSPI_STATUS_OK; } +class SecureQSPIReader { +public: + SecureQSPIReader() { + getSecureFlashData(); + } +}; + +SecureQSPIReader __reader __attribute__ ((init_priority (101))); + uint8_t* boardInfo() { return _boardInfo; }