blob: a353f57ca8833a11ac897b8681d64258579fcefe [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#ifndef OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_EPMP_DEFS_H_
#define OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_EPMP_DEFS_H_
/**
* Constants for use when interacting with the enhanced Physical Memory
* Protection control registers.
*
* See the Ibex Physical Memory Protection documentation for more
* details:
*
* https://ibex-core.readthedocs.io/en/latest/03_reference/pmp.html
*
* Note: this file must be usable from assembly, C and C++ files and
* should therefore only contain constant definitions.
*/
/**
* Address of the Machine Security Configuration control register.
*
* For use with CSR operations such as read, write, set and clear.
*/
#define EPMP_MSECCFG 0x747
/**
* Machine Security Configuration bits.
*
* MML = Machine Mode Lockdown
* MMWP = Machine Mode Whitelist Policy
* RLB = Rule Locking Bypass
*/
#define EPMP_MSECCFG_MML (1 << 0)
#define EPMP_MSECCFG_MMWP (1 << 1)
#define EPMP_MSECCFG_RLB (1 << 2)
/**
* PMP configuration (`pmpNcfg`) register fields.
*
* 8 7 5 3 2 1 0
* +---+-------+-------+---+---+---+
* | L | 0 | A | X | W | R |
* +---+-------+-------+---+---+---+
*
* Key:
*
* L - lock
* A - addressing mode (OFF=0, TOR=1, NA4=2, NAPOT=3)
* X - execute
* W - write
* R - read
*
* Note that there are four 8-bit configuration fields (`pmpNcfg`)
* packed into each hardware configuration register (`pmpcfgN`).
*/
#define EPMP_CFG_L (1 << 7)
#define EPMP_CFG_A_OFF (0 << 3)
#define EPMP_CFG_A_TOR (1 << 3)
#define EPMP_CFG_A_NA4 (2 << 3)
#define EPMP_CFG_A_NAPOT (3 << 3)
#define EPMP_CFG_X (1 << 2)
#define EPMP_CFG_W (1 << 1)
#define EPMP_CFG_R (1 << 0)
/**
* Common PMP configuration (`pmpNcfg`) permission combinations.
*/
#define EPMP_CFG_LR (EPMP_CFG_L | EPMP_CFG_R)
#define EPMP_CFG_LRX (EPMP_CFG_L | EPMP_CFG_R | EPMP_CFG_X)
#define EPMP_CFG_LRW (EPMP_CFG_L | EPMP_CFG_R | EPMP_CFG_W)
#define EPMP_CFG_LRWX (EPMP_CFG_L | EPMP_CFG_R | EPMP_CFG_W | EPMP_CFG_X)
#endif // OPENTITAN_SW_DEVICE_SILICON_CREATOR_LIB_EPMP_DEFS_H_