mirror of https://gitee.com/openkylin/linux.git
drm/i915/gvt: Add GTT clear_pse operation
Add clear_pse operation in case we need to split huge gtt into small pages. v2: correct description. Signed-off-by: Changbin Du <changbin.du@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
7163484856
commit
c3e697635f
|
@ -390,6 +390,24 @@ static bool gen8_gtt_test_pse(struct intel_gvt_gtt_entry *e)
|
|||
return !!(e->val64 & _PAGE_PSE);
|
||||
}
|
||||
|
||||
static void gen8_gtt_clear_pse(struct intel_gvt_gtt_entry *e)
|
||||
{
|
||||
if (gen8_gtt_test_pse(e)) {
|
||||
switch (e->type) {
|
||||
case GTT_TYPE_PPGTT_PTE_2M_ENTRY:
|
||||
e->val64 &= ~_PAGE_PSE;
|
||||
e->type = GTT_TYPE_PPGTT_PDE_ENTRY;
|
||||
break;
|
||||
case GTT_TYPE_PPGTT_PTE_1G_ENTRY:
|
||||
e->type = GTT_TYPE_PPGTT_PDP_ENTRY;
|
||||
e->val64 &= ~_PAGE_PSE;
|
||||
break;
|
||||
default:
|
||||
WARN_ON(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool gen8_gtt_test_ips(struct intel_gvt_gtt_entry *e)
|
||||
{
|
||||
if (GEM_WARN_ON(e->type != GTT_TYPE_PPGTT_PDE_ENTRY))
|
||||
|
@ -477,6 +495,7 @@ static struct intel_gvt_gtt_pte_ops gen8_gtt_pte_ops = {
|
|||
.set_present = gtt_entry_set_present,
|
||||
.test_present = gen8_gtt_test_present,
|
||||
.test_pse = gen8_gtt_test_pse,
|
||||
.clear_pse = gen8_gtt_clear_pse,
|
||||
.clear_ips = gen8_gtt_clear_ips,
|
||||
.test_ips = gen8_gtt_test_ips,
|
||||
.clear_64k_splited = gen8_gtt_clear_64k_splited,
|
||||
|
|
|
@ -63,6 +63,7 @@ struct intel_gvt_gtt_pte_ops {
|
|||
void (*clear_present)(struct intel_gvt_gtt_entry *e);
|
||||
void (*set_present)(struct intel_gvt_gtt_entry *e);
|
||||
bool (*test_pse)(struct intel_gvt_gtt_entry *e);
|
||||
void (*clear_pse)(struct intel_gvt_gtt_entry *e);
|
||||
bool (*test_ips)(struct intel_gvt_gtt_entry *e);
|
||||
void (*clear_ips)(struct intel_gvt_gtt_entry *e);
|
||||
bool (*test_64k_splited)(struct intel_gvt_gtt_entry *e);
|
||||
|
|
Loading…
Reference in New Issue