mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
hw/mips_cmgcr: implement RESET_BASE register in CM GCR
Implement RESET_BASE register which is local to each VP and a write to it changes VP's reset exception base. Also, add OTHER register to allow a software running on one VP to access other VP's local registers. Guest can use this mechanism to specify custom address from which a VP will start execution. Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
parent
dff94251f0
commit
c09199fe73
2 changed files with 71 additions and 1 deletions
|
@ -35,6 +35,7 @@
|
|||
/* Core Local and Core Other Block Register Map */
|
||||
#define GCR_CL_CONFIG_OFS 0x0010
|
||||
#define GCR_CL_OTHER_OFS 0x0018
|
||||
#define GCR_CL_RESETBASE_OFS 0x0020
|
||||
|
||||
/* GCR_L2_CONFIG register fields */
|
||||
#define GCR_L2_CONFIG_BYPASS_SHF 20
|
||||
|
@ -50,6 +51,20 @@
|
|||
#define GCR_CPC_BASE_CPCBASE_MSK 0xFFFFFFFF8000ULL
|
||||
#define GCR_CPC_BASE_MSK (GCR_CPC_BASE_CPCEN_MSK | GCR_CPC_BASE_CPCBASE_MSK)
|
||||
|
||||
/* GCR_CL_OTHER_OFS register fields */
|
||||
#define GCR_CL_OTHER_VPOTHER_MSK 0x7
|
||||
#define GCR_CL_OTHER_MSK GCR_CL_OTHER_VPOTHER_MSK
|
||||
|
||||
/* GCR_CL_RESETBASE_OFS register fields */
|
||||
#define GCR_CL_RESET_BASE_RESETBASE_MSK 0xFFFFF000U
|
||||
#define GCR_CL_RESET_BASE_MSK GCR_CL_RESET_BASE_RESETBASE_MSK
|
||||
|
||||
typedef struct MIPSGCRVPState MIPSGCRVPState;
|
||||
struct MIPSGCRVPState {
|
||||
uint32_t other;
|
||||
uint64_t reset_base;
|
||||
};
|
||||
|
||||
typedef struct MIPSGCRState MIPSGCRState;
|
||||
struct MIPSGCRState {
|
||||
SysBusDevice parent_obj;
|
||||
|
@ -63,6 +78,9 @@ struct MIPSGCRState {
|
|||
|
||||
uint64_t cpc_base;
|
||||
uint64_t gic_base;
|
||||
|
||||
/* VP Local/Other Registers */
|
||||
MIPSGCRVPState *vps;
|
||||
};
|
||||
|
||||
#endif /* _MIPS_GCR_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue