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);
|
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)
|
static bool gen8_gtt_test_ips(struct intel_gvt_gtt_entry *e)
|
||||||
{
|
{
|
||||||
if (GEM_WARN_ON(e->type != GTT_TYPE_PPGTT_PDE_ENTRY))
|
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,
|
.set_present = gtt_entry_set_present,
|
||||||
.test_present = gen8_gtt_test_present,
|
.test_present = gen8_gtt_test_present,
|
||||||
.test_pse = gen8_gtt_test_pse,
|
.test_pse = gen8_gtt_test_pse,
|
||||||
|
.clear_pse = gen8_gtt_clear_pse,
|
||||||
.clear_ips = gen8_gtt_clear_ips,
|
.clear_ips = gen8_gtt_clear_ips,
|
||||||
.test_ips = gen8_gtt_test_ips,
|
.test_ips = gen8_gtt_test_ips,
|
||||||
.clear_64k_splited = gen8_gtt_clear_64k_splited,
|
.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 (*clear_present)(struct intel_gvt_gtt_entry *e);
|
||||||
void (*set_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);
|
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);
|
bool (*test_ips)(struct intel_gvt_gtt_entry *e);
|
||||||
void (*clear_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);
|
bool (*test_64k_splited)(struct intel_gvt_gtt_entry *e);
|
||||||
|
|
Loading…
Reference in New Issue