From 3a11b1fbd280b2b46ef0a8011bead180800f83c2 Mon Sep 17 00:00:00 2001 From: Ollrogge Date: Tue, 19 Oct 2021 09:33:07 +0200 Subject: [PATCH] cpu/riscv_common: extend flashpage API --- cpu/riscv_common/ldscripts/riscv_base.ld | 8 +++++ cpu/riscv_common/periph/flashpage.c | 37 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 cpu/riscv_common/periph/flashpage.c diff --git a/cpu/riscv_common/ldscripts/riscv_base.ld b/cpu/riscv_common/ldscripts/riscv_base.ld index 906b2b16e8..17f2f9406a 100644 --- a/cpu/riscv_common/ldscripts/riscv_base.ld +++ b/cpu/riscv_common/ldscripts/riscv_base.ld @@ -34,6 +34,10 @@ SECTIONS { __stack_size = DEFINED(__stack_size) ? __stack_size : 256; + /* Populate information about rom size */ + _srom = ORIGIN(rom); + _erom = ORIGIN(rom) + LENGTH(rom); + .init : { KEEP (*(SORT_NONE(.init))) @@ -213,4 +217,8 @@ SECTIONS . = __stack_size; PROVIDE( _sp = . ); } >ram AT>ram :ram + + .end_fw (NOLOAD) : ALIGN(4) { + _end_fw = . ; + } > rom } diff --git a/cpu/riscv_common/periph/flashpage.c b/cpu/riscv_common/periph/flashpage.c new file mode 100644 index 0000000000..628d64f4d9 --- /dev/null +++ b/cpu/riscv_common/periph/flashpage.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2021 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup cpu_riscv_common + * @ingroup drivers_periph_pm + * @{ + * @file + * @brief common periph/flashpage functions + * + * @author Nils Ollrogge + * @} + */ + +#include "periph/flashpage.h" + +/** + * @brief Memory markers, defined in the linker script + * @{ + */ +extern uint32_t _end_fw; +extern uint32_t _erom; + +unsigned flashpage_first_free(void) +{ + return flashpage_page(&_end_fw) + 1; +} + +unsigned flashpage_last_free(void) +{ + return flashpage_page(&_erom) - 1; +}