ppc/xive2: add interrupt priority configuration flags
Adds support for extracting additional configuration flags from the XIVE configuration register that are needed for redistribution of group interrupts. Signed-off-by: Glenn Miles <milesg@linux.ibm.com> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Michael Kowal <kowal@linux.ibm.com> Tested-by: Gautam Menghani <gautam@linux.ibm.com> Link: https://lore.kernel.org/qemu-devel/20250512031100.439842-22-npiggin@gmail.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
parent
9898cc8030
commit
b22ffb4299
3 changed files with 18 additions and 7 deletions
|
|
@ -605,20 +605,28 @@ static uint32_t pnv_xive2_get_config(Xive2Router *xrtr)
|
|||
{
|
||||
PnvXive2 *xive = PNV_XIVE2(xrtr);
|
||||
uint32_t cfg = 0;
|
||||
uint64_t reg = xive->cq_regs[CQ_XIVE_CFG >> 3];
|
||||
|
||||
if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_GEN1_TIMA_OS) {
|
||||
if (reg & CQ_XIVE_CFG_GEN1_TIMA_OS) {
|
||||
cfg |= XIVE2_GEN1_TIMA_OS;
|
||||
}
|
||||
|
||||
if (xive->cq_regs[CQ_XIVE_CFG >> 3] & CQ_XIVE_CFG_EN_VP_SAVE_RESTORE) {
|
||||
if (reg & CQ_XIVE_CFG_EN_VP_SAVE_RESTORE) {
|
||||
cfg |= XIVE2_VP_SAVE_RESTORE;
|
||||
}
|
||||
|
||||
if (GETFIELD(CQ_XIVE_CFG_HYP_HARD_RANGE,
|
||||
xive->cq_regs[CQ_XIVE_CFG >> 3]) == CQ_XIVE_CFG_THREADID_8BITS) {
|
||||
if (GETFIELD(CQ_XIVE_CFG_HYP_HARD_RANGE, reg) ==
|
||||
CQ_XIVE_CFG_THREADID_8BITS) {
|
||||
cfg |= XIVE2_THREADID_8BITS;
|
||||
}
|
||||
|
||||
if (reg & CQ_XIVE_CFG_EN_VP_GRP_PRIORITY) {
|
||||
cfg |= XIVE2_EN_VP_GRP_PRIORITY;
|
||||
}
|
||||
|
||||
cfg = SETFIELD(XIVE2_VP_INT_PRIO, cfg,
|
||||
GETFIELD(CQ_XIVE_CFG_VP_INT_PRIO, reg));
|
||||
|
||||
return cfg;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@
|
|||
#define CQ_XIVE_CFG_GEN1_TIMA_HYP_BLK0 PPC_BIT(26) /* 0 if bit[25]=0 */
|
||||
#define CQ_XIVE_CFG_GEN1_TIMA_CROWD_DIS PPC_BIT(27) /* 0 if bit[25]=0 */
|
||||
#define CQ_XIVE_CFG_GEN1_END_ESX PPC_BIT(28)
|
||||
#define CQ_XIVE_CFG_EN_VP_GRP_PRIORITY PPC_BIT(32) /* 0 if bit[25]=1 */
|
||||
#define CQ_XIVE_CFG_EN_VP_SAVE_RESTORE PPC_BIT(38) /* 0 if bit[25]=1 */
|
||||
#define CQ_XIVE_CFG_EN_VP_SAVE_REST_STRICT PPC_BIT(39) /* 0 if bit[25]=1 */
|
||||
|
||||
|
|
|
|||
|
|
@ -29,9 +29,11 @@ OBJECT_DECLARE_TYPE(Xive2Router, Xive2RouterClass, XIVE2_ROUTER);
|
|||
* Configuration flags
|
||||
*/
|
||||
|
||||
#define XIVE2_GEN1_TIMA_OS 0x00000001
|
||||
#define XIVE2_VP_SAVE_RESTORE 0x00000002
|
||||
#define XIVE2_THREADID_8BITS 0x00000004
|
||||
#define XIVE2_GEN1_TIMA_OS 0x00000001
|
||||
#define XIVE2_VP_SAVE_RESTORE 0x00000002
|
||||
#define XIVE2_THREADID_8BITS 0x00000004
|
||||
#define XIVE2_EN_VP_GRP_PRIORITY 0x00000008
|
||||
#define XIVE2_VP_INT_PRIO 0x00000030
|
||||
|
||||
typedef struct Xive2RouterClass {
|
||||
SysBusDeviceClass parent;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue