05.09.2020 13:34, Mikko Perttunen пишет: > + } else { > + struct host1x_job *failed_job = job; > + > + host1x_job_dump(dev, job); > + > + host1x_syncpt_set_locked(job->syncpt); > + failed_job->cancelled = true; > + > + list_for_each_entry_continue(job, &cdma->sync_queue, list) { > + unsigned int i; > + > + if (job->syncpt != failed_job->syncpt) > + continue; > + > + for (i = 0; i < job->num_slots; i++) { > + unsigned int slot = (job->first_get/8 + i) % > + HOST1X_PUSHBUFFER_SLOTS; > + u32 *mapped = cdma->push_buffer.mapped; > + > + mapped[2*slot+0] = 0x1bad0000; > + mapped[2*slot+1] = 0x1bad0000; The 0x1bad0000 is a valid memory address on Tegra20. The 0x60000000 is invalid phys address for all hardware generations. It's used by grate-kernel [1] and VDE driver [2]. Note that the 0x6 << 28 is also invalid Host1x opcode, while 0x1 should break CDMA parser during of PB debug-dumping. [1] https://github.com/grate-driver/linux/blob/master/drivers/gpu/drm/tegra/gem.h#L16 [2] https://elixir.bootlin.com/linux/v5.9-rc4/source/drivers/staging/media/tegra-vde/iommu.c#L99 The VDE driver reserves the trapping IOVA addresses, I assume the Host1x driver should do the same.