From c45784b8c488b596f61545f0b8b2e5a581dc2d69 Mon Sep 17 00:00:00 2001 From: Darian Leung Date: Thu, 26 May 2022 16:11:11 +0800 Subject: [PATCH] hal: Fix systimer counter value bit field This commit fixes the systimer_counter_value_t by adding a resreved field so that the type fills 64-bits. Without the reserved field, when compiling with -O0 optimization, the unoccupied high bits would not be initalized by the compiler, leading to systimer_hal_get_counter_value() returning a garbage value. --- components/hal/include/hal/systimer_types.h | 21 ++++++++------------- tools/ci/check_copyright_ignore.txt | 1 - 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/components/hal/include/hal/systimer_types.h b/components/hal/include/hal/systimer_types.h index 2af2f60f30..68c6248c05 100644 --- a/components/hal/include/hal/systimer_types.h +++ b/components/hal/include/hal/systimer_types.h @@ -1,16 +1,8 @@ -// 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 + */ #pragma once @@ -30,6 +22,9 @@ typedef struct { struct { uint64_t lo : SOC_SYSTIMER_BIT_WIDTH_LO; /*!< Low part of counter value */ uint64_t hi : SOC_SYSTIMER_BIT_WIDTH_HI; /*!< High part of counter value */ +#if (SOC_SYSTIMER_BIT_WIDTH_LO + SOC_SYSTIMER_BIT_WIDTH_HI) < 64 + uint64_t reserved: (64 - (SOC_SYSTIMER_BIT_WIDTH_LO + SOC_SYSTIMER_BIT_WIDTH_HI)); +#endif }; uint64_t val; /*!< counter value */ }; diff --git a/tools/ci/check_copyright_ignore.txt b/tools/ci/check_copyright_ignore.txt index a3fbfc1880..672cfd8849 100644 --- a/tools/ci/check_copyright_ignore.txt +++ b/tools/ci/check_copyright_ignore.txt @@ -890,7 +890,6 @@ components/hal/include/hal/spi_flash_encrypt_hal.h components/hal/include/hal/spi_slave_hal.h components/hal/include/hal/spi_slave_hd_hal.h components/hal/include/hal/systimer_hal.h -components/hal/include/hal/systimer_types.h components/hal/include/hal/twai_types.h components/hal/include/hal/uhci_types.h components/hal/include/hal/usb_hal.h