[Nouveau] [PATCH 2/3] ltc/gf100: add flush/invalidate functions

Ben Skeggs skeggsb at gmail.com
Thu Sep 3 00:19:54 PDT 2015


On 3 September 2015 at 17:13, Alexandre Courbot <gnurou at gmail.com> wrote:
> 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. :)
Indeed it shouldn't, but when things get horribly messed up (as
happens occasionally :P) it's annoying and can potentially stall the
whole system until things are sorted out.  The patch is fine as-is, I
was mostly wondering if NVIDIA have data on a maximum time this should
ever take that we could use instead.

>
> 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?
I'm fine doing that, the reason I didn't in the first place was that
I'd planned on not having the constant 2s timeout everywhere (as
already mentioned) :)


More information about the Nouveau mailing list