[RFC PATCH v2 10/17] WIP: gpu: host1x: Add no-recovery mode
Dmitry Osipenko
digetx at gmail.com
Fri Sep 11 16:40:09 UTC 2020
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.
More information about the dri-devel
mailing list