AUB CSR: Ensured PTE bits be set correctly for Global GTT

This commit fixes the issue with setting reserved bits in PTE for GGTT.

Change-Id: I08582e20914419a3363c9e61085dcf03ba355a61
This commit is contained in:
Milczarek, Slawomir
2018-06-21 14:54:59 +02:00
committed by sys_ocldev
parent 3e65a39c62
commit fb10f666e9
9 changed files with 45 additions and 15 deletions

View File

@@ -25,6 +25,5 @@
struct AubGTTData {
bool present;
bool writable;
bool userSupervisor;
bool localMemory;
};

View File

@@ -79,7 +79,18 @@ union IAPageTableEntry {
uint64_t uiData;
};
typedef IAPageTableEntry MiGttEntry;
union MiGttEntry {
struct
{
uint64_t Present : 1; //[0]
uint64_t LocalMemory : 1; //[1]
uint64_t FunctionNumber : 10; //[11:2]
uint64_t PhysicalAddress : 35; //[46:12]
uint64_t Ignored : 17; //[63:47]
} pageConfig;
uint32_t dwordData[2];
uint64_t uiData;
};
// Use the latest DeviceValues enumerations available
typedef CmdServicesMemTraceVersion::DeviceValues DeviceValues;
@@ -282,7 +293,7 @@ struct AubDump : public TypeSelector<AubPageTableHelper32<TraitsIn>, AubPageTabl
static uint64_t reserveAddressGGTT(Stream &stream, uint32_t addr, size_t size, uint64_t physStart, AubGTTData data);
static uint64_t reserveAddressGGTT(Stream &stream, const void *memory, size_t size, uint64_t physStart, AubGTTData data);
static void reserveAddressGGTTAndWriteMmeory(Stream &stream, uintptr_t gfxAddress, const void *memory, uint64_t physAddress, size_t size, size_t offset, uint64_t additionalBits);
static void setGttEntry(IAPageTableEntry &entry, uint64_t address, AubGTTData data);
static void setGttEntry(MiGttEntry &entry, uint64_t address, AubGTTData data);
private:
static uint64_t reserveAddress(Stream &stream, uint32_t addr, size_t size, unsigned int addressSpace /* = AddressSpaceValues::TraceGttEntry*/, uint64_t physStart, AubGTTData data);

View File

@@ -141,12 +141,11 @@ void AubDump<Traits>::reserveAddressGGTTAndWriteMmeory(typename Traits::Stream &
}
template <typename Traits>
void AubDump<Traits>::setGttEntry(IAPageTableEntry &entry, uint64_t address, AubGTTData data) {
void AubDump<Traits>::setGttEntry(MiGttEntry &entry, uint64_t address, AubGTTData data) {
entry.uiData = 0;
entry.pageConfig.PhysicalAddress = address / 4096;
entry.pageConfig.Present = data.present;
entry.pageConfig.Writable = data.writable;
entry.pageConfig.UserSupervisor = data.userSupervisor;
entry.pageConfig.LocalMemory = data.localMemory;
}
template <typename Traits>