From a5c340d18050f5da363e46b0a093f97dc6d44f1a Mon Sep 17 00:00:00 2001 From: jflyper Date: Tue, 23 Jul 2019 10:12:15 +0900 Subject: [PATCH] [G4] MEMPROT support --- src/main/drivers/memprot_stm32g4xx.c | 74 ++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/main/drivers/memprot_stm32g4xx.c diff --git a/src/main/drivers/memprot_stm32g4xx.c b/src/main/drivers/memprot_stm32g4xx.c new file mode 100644 index 0000000000..d8daae2682 --- /dev/null +++ b/src/main/drivers/memprot_stm32g4xx.c @@ -0,0 +1,74 @@ +/* + * This file is part of Cleanflight and Betaflight. + * + * Cleanflight and Betaflight are free software. You can redistribute + * this software and/or modify this software under the terms of the + * GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * Cleanflight and Betaflight are distributed in the hope that they + * will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software. + * + * If not, see . + */ + +#include "platform.h" + +#include "memprot.h" + +// Defined in linker script +extern uint8_t dma_ram_r_start; +extern uint8_t dma_ram_r_end; + +extern uint8_t dma_ram_w_start; +extern uint8_t dma_ram_w_end; + +extern uint8_t dma_ram_rw_start; +extern uint8_t dma_ram_rw_end; + +mpuRegion_t mpuRegions[] = { + { + // DMA_RAM_R + // DMA receive buffer in SRAM + .start = (uint32_t)&dma_ram_r_start, + .end = (uint32_t)&dma_ram_r_end, + .size = 0, // Size determined by ".end" + .perm = MPU_REGION_FULL_ACCESS, + .exec = MPU_INSTRUCTION_ACCESS_ENABLE, + .shareable = MPU_ACCESS_SHAREABLE, + .cacheable = MPU_ACCESS_NOT_CACHEABLE, + .bufferable = MPU_ACCESS_BUFFERABLE, + }, + { + // DMA_RAM_W + // DMA transmit buffer in SRAM + .start = (uint32_t)&dma_ram_w_start, + .end = (uint32_t)&dma_ram_w_end, + .size = 0, // Size determined by ".end" + .perm = MPU_REGION_FULL_ACCESS, + .exec = MPU_INSTRUCTION_ACCESS_ENABLE, + .shareable = MPU_ACCESS_SHAREABLE, + .cacheable = MPU_ACCESS_CACHEABLE, + .bufferable = MPU_ACCESS_NOT_BUFFERABLE, + }, + { + // DMA_RAM_RW + // DMA transmit and receive buffer in SRAM + .start = (uint32_t)&dma_ram_rw_start, + .end = (uint32_t)&dma_ram_rw_end, + .size = 0, // Size determined by ".end" + .perm = MPU_REGION_FULL_ACCESS, + .exec = MPU_INSTRUCTION_ACCESS_ENABLE, + .shareable = MPU_ACCESS_SHAREABLE, + .cacheable = MPU_ACCESS_NOT_CACHEABLE, + .bufferable = MPU_ACCESS_NOT_BUFFERABLE, + }, +}; + +unsigned mpuRegionCount = ARRAYLEN(mpuRegions);