mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-06 22:24:33 +02:00
mmu: add ll func used to invalidate the mmu entry
This commit is contained in:
@@ -11,7 +11,8 @@
|
|||||||
#include "soc/ext_mem_defs.h"
|
#include "soc/ext_mem_defs.h"
|
||||||
#include "hal/assert.h"
|
#include "hal/assert.h"
|
||||||
#include "hal/mmu_types.h"
|
#include "hal/mmu_types.h"
|
||||||
|
#include "soc/mmu.h"
|
||||||
|
#include "soc/dport_access.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -68,6 +69,31 @@ static inline bool mmu_ll_check_valid_ext_vaddr_region(uint32_t mmu_id, uint32_t
|
|||||||
(ADDRESS_IN_DROM0_CACHE(vaddr_start) && ADDRESS_IN_DROM0_CACHE(vaddr_end));
|
(ADDRESS_IN_DROM0_CACHE(vaddr_start) && ADDRESS_IN_DROM0_CACHE(vaddr_end));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MMU table entry as invalid
|
||||||
|
*
|
||||||
|
* @param mmu_id MMU ID
|
||||||
|
* @param entry_id MMU entry ID
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline))
|
||||||
|
static inline void mmu_ll_set_entry_invalid(uint32_t mmu_id, uint32_t entry_id)
|
||||||
|
{
|
||||||
|
HAL_ASSERT(entry_id < MMU_MAX_ENTRY_NUM);
|
||||||
|
|
||||||
|
DPORT_INTERRUPT_DISABLE();
|
||||||
|
switch (mmu_id) {
|
||||||
|
case MMU_TABLE_PRO:
|
||||||
|
DPORT_WRITE_PERI_REG((uint32_t)&SOC_MMU_DPORT_PRO_FLASH_MMU_TABLE[entry_id], SOC_MMU_INVALID_ENTRY_VAL);
|
||||||
|
break;
|
||||||
|
case MMU_TABLE_APP:
|
||||||
|
DPORT_WRITE_PERI_REG((uint32_t)&SOC_MMU_DPORT_APP_FLASH_MMU_TABLE[entry_id], SOC_MMU_INVALID_ENTRY_VAL);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
HAL_ASSERT(false && "invalid mmu_id");
|
||||||
|
}
|
||||||
|
DPORT_INTERRUPT_RESTORE();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -147,6 +147,20 @@ static inline void mmu_ll_write_entry(uint32_t mmu_id, uint32_t entry_id, uint32
|
|||||||
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | MMU_ACCESS_FLASH | MMU_VALID;
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | MMU_ACCESS_FLASH | MMU_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MMU table entry as invalid
|
||||||
|
*
|
||||||
|
* @param mmu_id MMU ID
|
||||||
|
* @param entry_id MMU entry ID
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline))
|
||||||
|
static inline void mmu_ll_set_entry_invalid(uint32_t mmu_id, uint32_t entry_id)
|
||||||
|
{
|
||||||
|
(void)mmu_id;
|
||||||
|
HAL_ASSERT(entry_id < MMU_MAX_ENTRY_NUM);
|
||||||
|
|
||||||
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = MMU_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@@ -114,6 +114,20 @@ static inline void mmu_ll_write_entry(uint32_t mmu_id, uint32_t entry_id, uint32
|
|||||||
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | MMU_ACCESS_FLASH | MMU_VALID;
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | MMU_ACCESS_FLASH | MMU_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MMU table entry as invalid
|
||||||
|
*
|
||||||
|
* @param mmu_id MMU ID
|
||||||
|
* @param entry_id MMU entry ID
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline))
|
||||||
|
static inline void mmu_ll_set_entry_invalid(uint32_t mmu_id, uint32_t entry_id)
|
||||||
|
{
|
||||||
|
(void)mmu_id;
|
||||||
|
HAL_ASSERT(entry_id < MMU_MAX_ENTRY_NUM);
|
||||||
|
|
||||||
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = MMU_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@@ -114,6 +114,20 @@ static inline void mmu_ll_write_entry(uint32_t mmu_id, uint32_t entry_id, uint32
|
|||||||
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | MMU_ACCESS_FLASH | MMU_VALID;
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | MMU_ACCESS_FLASH | MMU_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MMU table entry as invalid
|
||||||
|
*
|
||||||
|
* @param mmu_id MMU ID
|
||||||
|
* @param entry_id MMU entry ID
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline))
|
||||||
|
static inline void mmu_ll_set_entry_invalid(uint32_t mmu_id, uint32_t entry_id)
|
||||||
|
{
|
||||||
|
(void)mmu_id;
|
||||||
|
HAL_ASSERT(entry_id < MMU_MAX_ENTRY_NUM);
|
||||||
|
|
||||||
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = MMU_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@@ -138,6 +138,21 @@ static inline void mmu_ll_write_entry(uint32_t mmu_id, uint32_t entry_id, uint32
|
|||||||
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | target_code | MMU_VALID;
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | target_code | MMU_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MMU table entry as invalid
|
||||||
|
*
|
||||||
|
* @param mmu_id MMU ID
|
||||||
|
* @param entry_id MMU entry ID
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline))
|
||||||
|
static inline void mmu_ll_set_entry_invalid(uint32_t mmu_id, uint32_t entry_id)
|
||||||
|
{
|
||||||
|
(void)mmu_id;
|
||||||
|
HAL_ASSERT(entry_id < MMU_MAX_ENTRY_NUM);
|
||||||
|
|
||||||
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = MMU_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -114,6 +114,21 @@ static inline void mmu_ll_write_entry(uint32_t mmu_id, uint32_t entry_id, uint32
|
|||||||
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | target_code | MMU_VALID;
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = mmu_val | target_code | MMU_VALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set MMU table entry as invalid
|
||||||
|
*
|
||||||
|
* @param mmu_id MMU ID
|
||||||
|
* @param entry_id MMU entry ID
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline))
|
||||||
|
static inline void mmu_ll_set_entry_invalid(uint32_t mmu_id, uint32_t entry_id)
|
||||||
|
{
|
||||||
|
(void)mmu_id;
|
||||||
|
HAL_ASSERT(entry_id < MMU_MAX_ENTRY_NUM);
|
||||||
|
|
||||||
|
*(uint32_t *)(DR_REG_MMU_TABLE + entry_id * 4) = MMU_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1,16 +1,9 @@
|
|||||||
// Copyright 2020 Espressif Systems (Shanghai) PTE LTD
|
/*
|
||||||
//
|
* SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
*
|
||||||
// you may not use this file except in compliance with the License.
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
// 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.
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@@ -31,7 +24,8 @@ extern "C" {
|
|||||||
#define SOC_MMU_INVALID_ENTRY_VAL DPORT_FLASH_MMU_TABLE_INVALID_VAL
|
#define SOC_MMU_INVALID_ENTRY_VAL DPORT_FLASH_MMU_TABLE_INVALID_VAL
|
||||||
#define SOC_MMU_ADDR_MASK DPORT_MMU_ADDRESS_MASK
|
#define SOC_MMU_ADDR_MASK DPORT_MMU_ADDRESS_MASK
|
||||||
#define SOC_MMU_PAGE_IN_FLASH(page) (page)
|
#define SOC_MMU_PAGE_IN_FLASH(page) (page)
|
||||||
#define SOC_MMU_DPORT_PRO_FLASH_MMU_TABLE ((volatile uint32_t*) 0x3FF10000)
|
#define SOC_MMU_DPORT_PRO_FLASH_MMU_TABLE DPORT_PRO_FLASH_MMU_TABLE
|
||||||
|
#define SOC_MMU_DPORT_APP_FLASH_MMU_TABLE DPORT_APP_FLASH_MMU_TABLE
|
||||||
#define SOC_MMU_VADDR1_START_ADDR SOC_IROM_MASK_LOW
|
#define SOC_MMU_VADDR1_START_ADDR SOC_IROM_MASK_LOW
|
||||||
#define SOC_MMU_PRO_IRAM0_FIRST_USABLE_PAGE ((SOC_MMU_VADDR1_FIRST_USABLE_ADDR - SOC_MMU_VADDR1_START_ADDR) / SPI_FLASH_MMU_PAGE_SIZE + SOC_MMU_IROM0_PAGES_START)
|
#define SOC_MMU_PRO_IRAM0_FIRST_USABLE_PAGE ((SOC_MMU_VADDR1_FIRST_USABLE_ADDR - SOC_MMU_VADDR1_START_ADDR) / SPI_FLASH_MMU_PAGE_SIZE + SOC_MMU_IROM0_PAGES_START)
|
||||||
#define SOC_MMU_VADDR0_START_ADDR SOC_DROM_LOW
|
#define SOC_MMU_VADDR0_START_ADDR SOC_DROM_LOW
|
||||||
|
@@ -1242,7 +1242,6 @@ components/soc/esp32/include/soc/i2c_struct.h
|
|||||||
components/soc/esp32/include/soc/io_mux_reg.h
|
components/soc/esp32/include/soc/io_mux_reg.h
|
||||||
components/soc/esp32/include/soc/ledc_reg.h
|
components/soc/esp32/include/soc/ledc_reg.h
|
||||||
components/soc/esp32/include/soc/ledc_struct.h
|
components/soc/esp32/include/soc/ledc_struct.h
|
||||||
components/soc/esp32/include/soc/mmu.h
|
|
||||||
components/soc/esp32/include/soc/nrx_reg.h
|
components/soc/esp32/include/soc/nrx_reg.h
|
||||||
components/soc/esp32/include/soc/pid.h
|
components/soc/esp32/include/soc/pid.h
|
||||||
components/soc/esp32/include/soc/reset_reasons.h
|
components/soc/esp32/include/soc/reset_reasons.h
|
||||||
|
Reference in New Issue
Block a user