mirror of
https://git.proxmox.com/git/qemu
synced 2025-07-03 08:38:46 +00:00
target-arm: Remove old cpu_arm_set_cp_io infrastructure
All the users of cpu_arm_set_cp_io have been converted, so we can remove it and the infrastructure it used. Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
9ee703b096
commit
e8070a23a8
@ -228,12 +228,6 @@ typedef struct CPUARMState {
|
|||||||
/* Internal CPU feature flags. */
|
/* Internal CPU feature flags. */
|
||||||
uint32_t features;
|
uint32_t features;
|
||||||
|
|
||||||
/* Coprocessor IO used by peripherals */
|
|
||||||
struct {
|
|
||||||
ARMReadCPFunc *cp_read;
|
|
||||||
ARMWriteCPFunc *cp_write;
|
|
||||||
void *opaque;
|
|
||||||
} cp[15];
|
|
||||||
void *nvic;
|
void *nvic;
|
||||||
const struct arm_boot_info *boot_info;
|
const struct arm_boot_info *boot_info;
|
||||||
} CPUARMState;
|
} CPUARMState;
|
||||||
@ -406,10 +400,6 @@ void armv7m_nvic_set_pending(void *opaque, int irq);
|
|||||||
int armv7m_nvic_acknowledge_irq(void *opaque);
|
int armv7m_nvic_acknowledge_irq(void *opaque);
|
||||||
void armv7m_nvic_complete_irq(void *opaque, int irq);
|
void armv7m_nvic_complete_irq(void *opaque, int irq);
|
||||||
|
|
||||||
void cpu_arm_set_cp_io(CPUARMState *env, int cpnum,
|
|
||||||
ARMReadCPFunc *cp_read, ARMWriteCPFunc *cp_write,
|
|
||||||
void *opaque);
|
|
||||||
|
|
||||||
/* Interface for defining coprocessor registers.
|
/* Interface for defining coprocessor registers.
|
||||||
* Registers are defined in tables of arm_cp_reginfo structs
|
* Registers are defined in tables of arm_cp_reginfo structs
|
||||||
* which are passed to define_arm_cp_regs().
|
* which are passed to define_arm_cp_regs().
|
||||||
|
@ -386,21 +386,6 @@ int cpu_arm_handle_mmu_fault (CPUARMState *env, target_ulong address, int rw,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* These should probably raise undefined insn exceptions. */
|
|
||||||
void HELPER(set_cp)(CPUARMState *env, uint32_t insn, uint32_t val)
|
|
||||||
{
|
|
||||||
int op1 = (insn >> 8) & 0xf;
|
|
||||||
cpu_abort(env, "cp%i insn %08x\n", op1, insn);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t HELPER(get_cp)(CPUARMState *env, uint32_t insn)
|
|
||||||
{
|
|
||||||
int op1 = (insn >> 8) & 0xf;
|
|
||||||
cpu_abort(env, "cp%i insn %08x\n", op1, insn);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HELPER(set_cp15)(CPUARMState *env, uint32_t insn, uint32_t val)
|
void HELPER(set_cp15)(CPUARMState *env, uint32_t insn, uint32_t val)
|
||||||
{
|
{
|
||||||
cpu_abort(env, "cp15 insn %08x\n", insn);
|
cpu_abort(env, "cp15 insn %08x\n", insn);
|
||||||
@ -1137,31 +1122,6 @@ target_phys_addr_t cpu_get_phys_page_debug(CPUARMState *env, target_ulong addr)
|
|||||||
return phys_addr;
|
return phys_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HELPER(set_cp)(CPUARMState *env, uint32_t insn, uint32_t val)
|
|
||||||
{
|
|
||||||
int cp_num = (insn >> 8) & 0xf;
|
|
||||||
int cp_info = (insn >> 5) & 7;
|
|
||||||
int src = (insn >> 16) & 0xf;
|
|
||||||
int operand = insn & 0xf;
|
|
||||||
|
|
||||||
if (env->cp[cp_num].cp_write)
|
|
||||||
env->cp[cp_num].cp_write(env->cp[cp_num].opaque,
|
|
||||||
cp_info, src, operand, val);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t HELPER(get_cp)(CPUARMState *env, uint32_t insn)
|
|
||||||
{
|
|
||||||
int cp_num = (insn >> 8) & 0xf;
|
|
||||||
int cp_info = (insn >> 5) & 7;
|
|
||||||
int dest = (insn >> 16) & 0xf;
|
|
||||||
int operand = insn & 0xf;
|
|
||||||
|
|
||||||
if (env->cp[cp_num].cp_read)
|
|
||||||
return env->cp[cp_num].cp_read(env->cp[cp_num].opaque,
|
|
||||||
cp_info, dest, operand);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return basic MPU access permission bits. */
|
/* Return basic MPU access permission bits. */
|
||||||
static uint32_t simple_mpu_ap_bits(uint32_t val)
|
static uint32_t simple_mpu_ap_bits(uint32_t val)
|
||||||
{
|
{
|
||||||
@ -2125,20 +2085,6 @@ void HELPER(v7m_msr)(CPUARMState *env, uint32_t reg, uint32_t val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_arm_set_cp_io(CPUARMState *env, int cpnum,
|
|
||||||
ARMReadCPFunc *cp_read, ARMWriteCPFunc *cp_write,
|
|
||||||
void *opaque)
|
|
||||||
{
|
|
||||||
if (cpnum < 0 || cpnum > 14) {
|
|
||||||
cpu_abort(env, "Bad coprocessor number: %i\n", cpnum);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
env->cp[cpnum].cp_read = cp_read;
|
|
||||||
env->cp[cpnum].cp_write = cp_write;
|
|
||||||
env->cp[cpnum].opaque = opaque;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note that signed overflow is undefined in C. The following routines are
|
/* Note that signed overflow is undefined in C. The following routines are
|
||||||
|
@ -62,9 +62,6 @@ DEF_HELPER_2(v7m_mrs, i32, env, i32)
|
|||||||
DEF_HELPER_3(set_cp15, void, env, i32, i32)
|
DEF_HELPER_3(set_cp15, void, env, i32, i32)
|
||||||
DEF_HELPER_2(get_cp15, i32, env, i32)
|
DEF_HELPER_2(get_cp15, i32, env, i32)
|
||||||
|
|
||||||
DEF_HELPER_3(set_cp, void, env, i32, i32)
|
|
||||||
DEF_HELPER_2(get_cp, i32, env, i32)
|
|
||||||
|
|
||||||
DEF_HELPER_3(set_cp_reg, void, env, ptr, i32)
|
DEF_HELPER_3(set_cp_reg, void, env, ptr, i32)
|
||||||
DEF_HELPER_2(get_cp_reg, i32, env, ptr)
|
DEF_HELPER_2(get_cp_reg, i32, env, ptr)
|
||||||
DEF_HELPER_3(set_cp_reg64, void, env, ptr, i64)
|
DEF_HELPER_3(set_cp_reg64, void, env, ptr, i64)
|
||||||
|
@ -2439,39 +2439,6 @@ static int disas_dsp_insn(CPUARMState *env, DisasContext *s, uint32_t insn)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disassemble system coprocessor instruction. Return nonzero if
|
|
||||||
instruction is not defined. */
|
|
||||||
static int disas_cp_insn(CPUARMState *env, DisasContext *s, uint32_t insn)
|
|
||||||
{
|
|
||||||
TCGv tmp, tmp2;
|
|
||||||
uint32_t rd = (insn >> 12) & 0xf;
|
|
||||||
uint32_t cp = (insn >> 8) & 0xf;
|
|
||||||
if (IS_USER(s)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (insn & ARM_CP_RW_BIT) {
|
|
||||||
if (!env->cp[cp].cp_read)
|
|
||||||
return 1;
|
|
||||||
gen_set_pc_im(s->pc);
|
|
||||||
tmp = tcg_temp_new_i32();
|
|
||||||
tmp2 = tcg_const_i32(insn);
|
|
||||||
gen_helper_get_cp(tmp, cpu_env, tmp2);
|
|
||||||
tcg_temp_free(tmp2);
|
|
||||||
store_reg(s, rd, tmp);
|
|
||||||
} else {
|
|
||||||
if (!env->cp[cp].cp_write)
|
|
||||||
return 1;
|
|
||||||
gen_set_pc_im(s->pc);
|
|
||||||
tmp = load_reg(s, rd);
|
|
||||||
tmp2 = tcg_const_i32(insn);
|
|
||||||
gen_helper_set_cp(cpu_env, tmp2, tmp);
|
|
||||||
tcg_temp_free(tmp2);
|
|
||||||
tcg_temp_free_i32(tmp);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cp15_user_ok(CPUARMState *env, uint32_t insn)
|
static int cp15_user_ok(CPUARMState *env, uint32_t insn)
|
||||||
{
|
{
|
||||||
int cpn = (insn >> 16) & 0xf;
|
int cpn = (insn >> 16) & 0xf;
|
||||||
@ -6653,10 +6620,6 @@ static int disas_coproc_insn(CPUARMState * env, DisasContext *s, uint32_t insn)
|
|||||||
*/
|
*/
|
||||||
switch (cpnum) {
|
switch (cpnum) {
|
||||||
case 14:
|
case 14:
|
||||||
/* Coprocessors 7-15 are architecturally reserved by ARM.
|
|
||||||
Unfortunately Intel decided to ignore this. */
|
|
||||||
if (arm_feature(env, ARM_FEATURE_XSCALE))
|
|
||||||
goto board;
|
|
||||||
if (insn & (1 << 20))
|
if (insn & (1 << 20))
|
||||||
return disas_cp14_read(env, s, insn);
|
return disas_cp14_read(env, s, insn);
|
||||||
else
|
else
|
||||||
@ -6664,9 +6627,7 @@ static int disas_coproc_insn(CPUARMState * env, DisasContext *s, uint32_t insn)
|
|||||||
case 15:
|
case 15:
|
||||||
return disas_cp15_insn (env, s, insn);
|
return disas_cp15_insn (env, s, insn);
|
||||||
default:
|
default:
|
||||||
board:
|
return 1;
|
||||||
/* Unknown coprocessor. See if the board has hooked it. */
|
|
||||||
return disas_cp_insn (env, s, insn);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user