|
@@ -179,6 +179,17 @@ static uint64_t xive_tm_pull_pool_ctx(XivePresenter *xptr, XiveTCTX *tctx,
|
|
|
return qw2w2;
|
|
|
}
|
|
|
|
|
|
+static uint64_t xive_tm_pull_phys_ctx(XivePresenter *xptr, XiveTCTX *tctx,
|
|
|
+ hwaddr offset, unsigned size)
|
|
|
+{
|
|
|
+ uint8_t qw3b8_prev = tctx->regs[TM_QW3_HV_PHYS + TM_WORD2];
|
|
|
+ uint8_t qw3b8;
|
|
|
+
|
|
|
+ qw3b8 = qw3b8_prev & ~TM_QW3B8_VT;
|
|
|
+ tctx->regs[TM_QW3_HV_PHYS + TM_WORD2] = qw3b8;
|
|
|
+ return qw3b8;
|
|
|
+}
|
|
|
+
|
|
|
static void xive_tm_vt_push(XivePresenter *xptr, XiveTCTX *tctx, hwaddr offset,
|
|
|
uint64_t value, unsigned size)
|
|
|
{
|
|
@@ -527,6 +538,8 @@ static const XiveTmOp xive_tm_operations[] = {
|
|
|
xive_tm_pull_pool_ctx },
|
|
|
{ XIVE_TM_HV_PAGE, TM_SPC_PULL_POOL_CTX, 8, NULL,
|
|
|
xive_tm_pull_pool_ctx },
|
|
|
+ { XIVE_TM_HV_PAGE, TM_SPC_PULL_PHYS_CTX, 1, NULL,
|
|
|
+ xive_tm_pull_phys_ctx },
|
|
|
};
|
|
|
|
|
|
static const XiveTmOp xive2_tm_operations[] = {
|
|
@@ -566,6 +579,8 @@ static const XiveTmOp xive2_tm_operations[] = {
|
|
|
xive_tm_pull_pool_ctx },
|
|
|
{ XIVE_TM_HV_PAGE, TM_SPC_PULL_OS_CTX_OL, 1, xive2_tm_pull_os_ctx_ol,
|
|
|
NULL },
|
|
|
+ { XIVE_TM_HV_PAGE, TM_SPC_PULL_PHYS_CTX, 1, NULL,
|
|
|
+ xive_tm_pull_phys_ctx },
|
|
|
};
|
|
|
|
|
|
static const XiveTmOp *xive_tm_find_op(XivePresenter *xptr, hwaddr offset,
|