mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
ppc/pnv: Implement the ChipTOD to Core transfer
One of the functions of the ChipTOD is to transfer TOD to the Core (aka PC - Pervasive Core) timebase facility. The ChipTOD can be programmed with a target address to send the TOD value to. The hardware implementation seems to perform this by sending the TOD value to a SCOM address. This implementation grabs the core directly and manipulates the timebase facility state in the core. This is a hack, but it works enough for now. A better implementation would implement the transfer to the PnvCore xscom register and drive the timebase state machine from there. Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
This commit is contained in:
parent
de3ba0cc38
commit
cde2ba34a9
5 changed files with 166 additions and 0 deletions
|
@ -28,6 +28,7 @@
|
|||
|
||||
#define TYPE_PNV_CHIP "pnv-chip"
|
||||
|
||||
typedef struct PnvCore PnvCore;
|
||||
typedef struct PnvChip PnvChip;
|
||||
typedef struct Pnv8Chip Pnv8Chip;
|
||||
typedef struct Pnv9Chip Pnv9Chip;
|
||||
|
@ -56,6 +57,7 @@ DECLARE_INSTANCE_CHECKER(PnvChip, PNV_CHIP_POWER9,
|
|||
DECLARE_INSTANCE_CHECKER(PnvChip, PNV_CHIP_POWER10,
|
||||
TYPE_PNV_CHIP_POWER10)
|
||||
|
||||
PnvCore *pnv_chip_find_core(PnvChip *chip, uint32_t core_id);
|
||||
PowerPCCPU *pnv_chip_find_cpu(PnvChip *chip, uint32_t pir);
|
||||
|
||||
typedef struct PnvPHB PnvPHB;
|
||||
|
|
|
@ -25,6 +25,8 @@ enum tod_state {
|
|||
tod_stopped = 1,
|
||||
};
|
||||
|
||||
typedef struct PnvCore PnvCore;
|
||||
|
||||
struct PnvChipTOD {
|
||||
DeviceState xd;
|
||||
|
||||
|
@ -36,12 +38,14 @@ struct PnvChipTOD {
|
|||
enum tod_state tod_state;
|
||||
uint64_t tod_error;
|
||||
uint64_t pss_mss_ctrl_reg;
|
||||
PnvCore *slave_pc_target;
|
||||
};
|
||||
|
||||
struct PnvChipTODClass {
|
||||
DeviceClass parent_class;
|
||||
|
||||
void (*broadcast_ttype)(PnvChipTOD *sender, uint32_t trigger);
|
||||
PnvCore *(*tx_ttype_target)(PnvChipTOD *chiptod, uint64_t val);
|
||||
|
||||
int xscom_size;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue