Implement code cache (SQC I$, SQC K$, TCP, GL1, GL2) invalidation for gfx10

Change-Id: I8b2a59118094fbb55e3f575fa9f79959d3725d7d


[ROCm/ROCR-Runtime commit: 5b64fbd0e5]
Этот коммит содержится в:
Jay Cornwall
2019-09-12 14:43:31 -04:00
коммит произвёл Chris Freehill
родитель e729948e41
Коммит 933f052033
2 изменённых файлов: 30 добавлений и 13 удалений
+6
Просмотреть файл
@@ -72,6 +72,12 @@
# define PM4_ACQUIRE_MEM_COHER_CNTL_SH_ICACHE_ACTION_ENA (1 << 29)
#define PM4_ACQUIRE_MEM_DW2_COHER_SIZE(x) (((x) & 0xFFFFFFFF) << 0)
#define PM4_ACQUIRE_MEM_DW3_COHER_SIZE_HI(x) (((x) & 0xFF) << 0)
#define PM4_ACQUIRE_MEM_DW7_GCR_CNTL(x) (((x) & 0x7FFFF) << 0)
# define PM4_ACQUIRE_MEM_GCR_CNTL_GLI_INV(x) (((x) & 0x3) << 0)
# define PM4_ACQUIRE_MEM_GCR_CNTL_GLK_INV (1 << 7)
# define PM4_ACQUIRE_MEM_GCR_CNTL_GLV_INV (1 << 8)
# define PM4_ACQUIRE_MEM_GCR_CNTL_GL1_INV (1 << 9)
# define PM4_ACQUIRE_MEM_GCR_CNTL_GL2_INV (1 << 14)
#define PM4_RELEASE_MEM_DW1_EVENT_INDEX(x) (((x) & 0xF) << 8)
# define PM4_RELEASE_MEM_EVENT_INDEX_AQL 0x7
+24 -13
Просмотреть файл
@@ -1203,29 +1203,40 @@ void GpuAgent::InvalidateCodeCaches() {
// Microcode is handling code cache invalidation.
return;
}
} else if (isa_->GetMajorVersion() > 9) {
} else if (isa_->GetMajorVersion() > 10) {
assert(false && "Code cache invalidation not implemented for this agent");
}
// Invalidate caches which may hold lines of code object allocation.
constexpr uint32_t cache_inv_size_dw = 7;
uint32_t cache_inv[cache_inv_size_dw];
uint32_t cache_inv[8] = {0};
uint32_t cache_inv_size_dw;
if (isa_->GetMajorVersion() < 10) {
cache_inv[1] = PM4_ACQUIRE_MEM_DW1_COHER_CNTL(
PM4_ACQUIRE_MEM_COHER_CNTL_SH_ICACHE_ACTION_ENA |
PM4_ACQUIRE_MEM_COHER_CNTL_SH_KCACHE_ACTION_ENA |
PM4_ACQUIRE_MEM_COHER_CNTL_TC_ACTION_ENA |
PM4_ACQUIRE_MEM_COHER_CNTL_TC_WB_ACTION_ENA);
cache_inv_size_dw = 7;
} else {
cache_inv[7] = PM4_ACQUIRE_MEM_DW7_GCR_CNTL(
PM4_ACQUIRE_MEM_GCR_CNTL_GLI_INV(1) |
PM4_ACQUIRE_MEM_GCR_CNTL_GLK_INV |
PM4_ACQUIRE_MEM_GCR_CNTL_GLV_INV |
PM4_ACQUIRE_MEM_GCR_CNTL_GL1_INV |
PM4_ACQUIRE_MEM_GCR_CNTL_GL2_INV);
cache_inv_size_dw = 8;
}
cache_inv[0] = PM4_HDR(PM4_HDR_IT_OPCODE_ACQUIRE_MEM, cache_inv_size_dw,
isa_->GetMajorVersion());
cache_inv[1] = PM4_ACQUIRE_MEM_DW1_COHER_CNTL(
PM4_ACQUIRE_MEM_COHER_CNTL_SH_ICACHE_ACTION_ENA |
PM4_ACQUIRE_MEM_COHER_CNTL_SH_KCACHE_ACTION_ENA |
PM4_ACQUIRE_MEM_COHER_CNTL_TC_ACTION_ENA |
PM4_ACQUIRE_MEM_COHER_CNTL_TC_WB_ACTION_ENA);
isa_->GetMajorVersion());
cache_inv[2] = PM4_ACQUIRE_MEM_DW2_COHER_SIZE(0xFFFFFFFF);
cache_inv[3] = PM4_ACQUIRE_MEM_DW3_COHER_SIZE_HI(0xFF);
cache_inv[4] = 0;
cache_inv[5] = 0;
cache_inv[6] = 0;
// Submit the command to the utility queue and wait for it to complete.
queues_[QueueUtility]->ExecutePM4(cache_inv, sizeof(cache_inv));
queues_[QueueUtility]->ExecutePM4(cache_inv, cache_inv_size_dw * sizeof(uint32_t));
}
lazy_ptr<core::Blit>& GpuAgent::GetXgmiBlit(const core::Agent& dst_agent) {