[Nouveau] [PATCH 2/3] ltc/gf100: add flush/invalidate functions
Alexandre Courbot
gnurou at gmail.com
Thu Sep 3 00:13:39 PDT 2015
On Thu, Sep 3, 2015 at 4:09 PM, Ben Skeggs <skeggsb at gmail.com> wrote:
> On 3 September 2015 at 16:42, Alexandre Courbot <acourbot at nvidia.com> wrote:
>> Allow clients to manually flush and invalidate L2. This will be useful
>> for Tegra systems for which we want to write instmem using the CPU.
>>
>> Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
>> ---
>> drm/nouveau/include/nvkm/subdev/ltc.h | 1 +
>> drm/nouveau/nvkm/subdev/ltc/gf100.c | 36 +++++++++++++++++++++++++++++++++++
>> drm/nouveau/nvkm/subdev/ltc/gk104.c | 2 ++
>> drm/nouveau/nvkm/subdev/ltc/gm107.c | 2 ++
>> drm/nouveau/nvkm/subdev/ltc/priv.h | 2 ++
>> 5 files changed, 43 insertions(+)
>>
>> diff --git a/drm/nouveau/include/nvkm/subdev/ltc.h b/drm/nouveau/include/nvkm/subdev/ltc.h
>> index 5464fcf482f1..3d4dbbf9aab3 100644
>> --- a/drm/nouveau/include/nvkm/subdev/ltc.h
>> +++ b/drm/nouveau/include/nvkm/subdev/ltc.h
>> @@ -35,5 +35,6 @@ void nvkm_ltc_flush(struct nvkm_ltc *);
>>
>> int gf100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
>> int gk104_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
>> +int gk20a_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
>> int gm107_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
>> #endif
>> diff --git a/drm/nouveau/nvkm/subdev/ltc/gf100.c b/drm/nouveau/nvkm/subdev/ltc/gf100.c
>> index 45ac765b753e..42ae77533865 100644
>> --- a/drm/nouveau/nvkm/subdev/ltc/gf100.c
>> +++ b/drm/nouveau/nvkm/subdev/ltc/gf100.c
>> @@ -122,6 +122,40 @@ gf100_ltc_intr(struct nvkm_ltc *ltc)
>> }
>> }
>>
>> +void
>> +gf100_ltc_invalidate(struct nvkm_ltc *ltc)
>> +{
>> + struct nvkm_device *device = ltc->subdev.device;
>> + s64 taken;
>> +
>> + nvkm_wr32(device, 0x70004, 0x00000001);
>> + if ((taken = nvkm_msec(device, 2000,
> I don't suppose you have access to information on more realistic
> timeouts? I'd like to improve all the potential 2s timeout values
> across the driver in general, to avoid things hanging for a long time
> when the GPU craps itself :)
The longest values I have ever seen are ~270ms (only during driver
initialization, and at low clock speeds), but anyway this should never
ever timeout. If it does, then we will have bigger issues than 2
second timeouts. :)
Btw, wouldn't it be worth to restore macros like the old nvkm_wait()
to avoid having to write this verbose code every time we need to wait
on a register value?
More information about the Nouveau
mailing list