mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
target/arm: Pass MemOp to get_phys_addr
Zero is the safe do-nothing value for callers to use. Reviewed-by: Helge Deller <deller@gmx.de> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
99746de612
commit
ec2c933701
4 changed files with 8 additions and 7 deletions
|
@ -1432,6 +1432,7 @@ typedef struct GetPhysAddrResult {
|
||||||
* @env: CPUARMState
|
* @env: CPUARMState
|
||||||
* @address: virtual address to get physical address for
|
* @address: virtual address to get physical address for
|
||||||
* @access_type: 0 for read, 1 for write, 2 for execute
|
* @access_type: 0 for read, 1 for write, 2 for execute
|
||||||
|
* @memop: memory operation feeding this access, or 0 for none
|
||||||
* @mmu_idx: MMU index indicating required translation regime
|
* @mmu_idx: MMU index indicating required translation regime
|
||||||
* @result: set on translation success.
|
* @result: set on translation success.
|
||||||
* @fi: set to fault info if the translation fails
|
* @fi: set to fault info if the translation fails
|
||||||
|
@ -1450,7 +1451,7 @@ typedef struct GetPhysAddrResult {
|
||||||
* value.
|
* value.
|
||||||
*/
|
*/
|
||||||
bool get_phys_addr(CPUARMState *env, vaddr address,
|
bool get_phys_addr(CPUARMState *env, vaddr address,
|
||||||
MMUAccessType access_type, ARMMMUIdx mmu_idx,
|
MMUAccessType access_type, MemOp memop, ARMMMUIdx mmu_idx,
|
||||||
GetPhysAddrResult *result, ARMMMUFaultInfo *fi)
|
GetPhysAddrResult *result, ARMMMUFaultInfo *fi)
|
||||||
__attribute__((nonnull));
|
__attribute__((nonnull));
|
||||||
|
|
||||||
|
|
|
@ -3572,7 +3572,7 @@ bool get_phys_addr_with_space_nogpc(CPUARMState *env, vaddr address,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get_phys_addr(CPUARMState *env, vaddr address,
|
bool get_phys_addr(CPUARMState *env, vaddr address,
|
||||||
MMUAccessType access_type, ARMMMUIdx mmu_idx,
|
MMUAccessType access_type, MemOp memop, ARMMMUIdx mmu_idx,
|
||||||
GetPhysAddrResult *result, ARMMMUFaultInfo *fi)
|
GetPhysAddrResult *result, ARMMMUFaultInfo *fi)
|
||||||
{
|
{
|
||||||
S1Translate ptw = {
|
S1Translate ptw = {
|
||||||
|
|
|
@ -222,7 +222,7 @@ static bool v7m_stack_write(ARMCPU *cpu, uint32_t addr, uint32_t value,
|
||||||
int exc;
|
int exc;
|
||||||
bool exc_secure;
|
bool exc_secure;
|
||||||
|
|
||||||
if (get_phys_addr(env, addr, MMU_DATA_STORE, mmu_idx, &res, &fi)) {
|
if (get_phys_addr(env, addr, MMU_DATA_STORE, 0, mmu_idx, &res, &fi)) {
|
||||||
/* MPU/SAU lookup failed */
|
/* MPU/SAU lookup failed */
|
||||||
if (fi.type == ARMFault_QEMU_SFault) {
|
if (fi.type == ARMFault_QEMU_SFault) {
|
||||||
if (mode == STACK_LAZYFP) {
|
if (mode == STACK_LAZYFP) {
|
||||||
|
@ -311,7 +311,7 @@ static bool v7m_stack_read(ARMCPU *cpu, uint32_t *dest, uint32_t addr,
|
||||||
bool exc_secure;
|
bool exc_secure;
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
if (get_phys_addr(env, addr, MMU_DATA_LOAD, mmu_idx, &res, &fi)) {
|
if (get_phys_addr(env, addr, MMU_DATA_LOAD, 0, mmu_idx, &res, &fi)) {
|
||||||
/* MPU/SAU lookup failed */
|
/* MPU/SAU lookup failed */
|
||||||
if (fi.type == ARMFault_QEMU_SFault) {
|
if (fi.type == ARMFault_QEMU_SFault) {
|
||||||
qemu_log_mask(CPU_LOG_INT,
|
qemu_log_mask(CPU_LOG_INT,
|
||||||
|
@ -2009,7 +2009,7 @@ static bool v7m_read_half_insn(ARMCPU *cpu, ARMMMUIdx mmu_idx, bool secure,
|
||||||
"...really SecureFault with SFSR.INVEP\n");
|
"...really SecureFault with SFSR.INVEP\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (get_phys_addr(env, addr, MMU_INST_FETCH, mmu_idx, &res, &fi)) {
|
if (get_phys_addr(env, addr, MMU_INST_FETCH, 0, mmu_idx, &res, &fi)) {
|
||||||
/* the MPU lookup failed */
|
/* the MPU lookup failed */
|
||||||
env->v7m.cfsr[env->v7m.secure] |= R_V7M_CFSR_IACCVIOL_MASK;
|
env->v7m.cfsr[env->v7m.secure] |= R_V7M_CFSR_IACCVIOL_MASK;
|
||||||
armv7m_nvic_set_pending(env->nvic, ARMV7M_EXCP_MEM, env->v7m.secure);
|
armv7m_nvic_set_pending(env->nvic, ARMV7M_EXCP_MEM, env->v7m.secure);
|
||||||
|
@ -2045,7 +2045,7 @@ static bool v7m_read_sg_stack_word(ARMCPU *cpu, ARMMMUIdx mmu_idx,
|
||||||
ARMMMUFaultInfo fi = {};
|
ARMMMUFaultInfo fi = {};
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
|
|
||||||
if (get_phys_addr(env, addr, MMU_DATA_LOAD, mmu_idx, &res, &fi)) {
|
if (get_phys_addr(env, addr, MMU_DATA_LOAD, 0, mmu_idx, &res, &fi)) {
|
||||||
/* MPU/SAU lookup failed */
|
/* MPU/SAU lookup failed */
|
||||||
if (fi.type == ARMFault_QEMU_SFault) {
|
if (fi.type == ARMFault_QEMU_SFault) {
|
||||||
qemu_log_mask(CPU_LOG_INT,
|
qemu_log_mask(CPU_LOG_INT,
|
||||||
|
|
|
@ -344,7 +344,7 @@ bool arm_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
|
||||||
* return false. Otherwise populate fsr with ARM DFSR/IFSR fault
|
* return false. Otherwise populate fsr with ARM DFSR/IFSR fault
|
||||||
* register format, and signal the fault.
|
* register format, and signal the fault.
|
||||||
*/
|
*/
|
||||||
ret = get_phys_addr(&cpu->env, address, access_type,
|
ret = get_phys_addr(&cpu->env, address, access_type, 0,
|
||||||
core_to_arm_mmu_idx(&cpu->env, mmu_idx),
|
core_to_arm_mmu_idx(&cpu->env, mmu_idx),
|
||||||
&res, fi);
|
&res, fi);
|
||||||
if (likely(!ret)) {
|
if (likely(!ret)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue