gpu/intel: add w/a for gen9 kabylake a0-b0 stepping

issue #4254
This commit is contained in:
Alexander Boettcher 2021-08-04 14:54:50 +02:00 committed by Christian Helmuth
parent bac7381be3
commit 7a4626861e

View File

@ -568,9 +568,14 @@ struct Igd::Device
Ring_buffer::Index advance = 0;
bool dc_flush_wa = _device.match(Device_info::Platform::KABYLAKE,
Device_info::Stepping::A0,
Device_info::Stepping::B0);
size_t const need = 4 /* batchbuffer cmd */ + 6 /* prolog */
+ ((_device.generation().value == 9) ? 6 : 0)
+ ((_device.generation().value == 8) ? 20 : 22); /* epilog + w/a */
+ ((_device.generation().value == 8) ? 20 : 22) /* epilog + w/a */
+ (dc_flush_wa ? 12 : 0);
if (!el.ring_avail(need)) { el.ring_reset_and_fill_zero(); }
/* save old tail */
@ -597,6 +602,18 @@ struct Igd::Device
}
}
if (dc_flush_wa) {
enum { CMD_NUM = 6 };
Genode::uint32_t cmd[CMD_NUM] = {};
Igd::Pipe_control pc(CMD_NUM);
cmd[0] = pc.value;
cmd[1] = Igd::Pipe_control::DC_FLUSH_ENABLE;
for (size_t i = 0; i < CMD_NUM; i++) {
advance += el.ring_append(cmd[i]);
}
}
/* prolog */
if (1)
{
@ -630,6 +647,18 @@ struct Igd::Device
}
}
if (dc_flush_wa) {
enum { CMD_NUM = 6 };
Genode::uint32_t cmd[CMD_NUM] = {};
Igd::Pipe_control pc(CMD_NUM);
cmd[0] = pc.value;
cmd[1] = Igd::Pipe_control::CS_STALL;
for (size_t i = 0; i < CMD_NUM; i++) {
advance += el.ring_append(cmd[i]);
}
}
#define MI_INSTR(opcode, flags) (((opcode) << 23) | (flags))
#define MI_NOOP MI_INSTR(0u, 0)
#define MI_ARB_ON_OFF MI_INSTR(0x08u, 0)