137e1c45aSBen Skeggs /*
237e1c45aSBen Skeggs * Copyright 2018 Red Hat Inc.
337e1c45aSBen Skeggs *
437e1c45aSBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a
537e1c45aSBen Skeggs * copy of this software and associated documentation files (the "Software"),
637e1c45aSBen Skeggs * to deal in the Software without restriction, including without limitation
737e1c45aSBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense,
837e1c45aSBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the
937e1c45aSBen Skeggs * Software is furnished to do so, subject to the following conditions:
1037e1c45aSBen Skeggs *
1137e1c45aSBen Skeggs * The above copyright notice and this permission notice shall be included in
1237e1c45aSBen Skeggs * all copies or substantial portions of the Software.
1337e1c45aSBen Skeggs *
1437e1c45aSBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1537e1c45aSBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1637e1c45aSBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
1737e1c45aSBen Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
1837e1c45aSBen Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1937e1c45aSBen Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2037e1c45aSBen Skeggs * OTHER DEALINGS IN THE SOFTWARE.
2137e1c45aSBen Skeggs */
2237e1c45aSBen Skeggs #include <nvif/user.h>
2337e1c45aSBen Skeggs
24*58e92b5eSBen Skeggs static u64
nvif_userc361_time(struct nvif_user * user)25*58e92b5eSBen Skeggs nvif_userc361_time(struct nvif_user *user)
26*58e92b5eSBen Skeggs {
27*58e92b5eSBen Skeggs u32 hi, lo;
28*58e92b5eSBen Skeggs
29*58e92b5eSBen Skeggs do {
30*58e92b5eSBen Skeggs hi = nvif_rd32(&user->object, 0x084);
31*58e92b5eSBen Skeggs lo = nvif_rd32(&user->object, 0x080);
32*58e92b5eSBen Skeggs } while (hi != nvif_rd32(&user->object, 0x084));
33*58e92b5eSBen Skeggs
34*58e92b5eSBen Skeggs return ((u64)hi << 32 | lo);
35*58e92b5eSBen Skeggs }
36*58e92b5eSBen Skeggs
3737e1c45aSBen Skeggs static void
nvif_userc361_doorbell(struct nvif_user * user,u32 token)3837e1c45aSBen Skeggs nvif_userc361_doorbell(struct nvif_user *user, u32 token)
3937e1c45aSBen Skeggs {
4037e1c45aSBen Skeggs nvif_wr32(&user->object, 0x90, token);
4137e1c45aSBen Skeggs }
4237e1c45aSBen Skeggs
4337e1c45aSBen Skeggs const struct nvif_user_func
4437e1c45aSBen Skeggs nvif_userc361 = {
4537e1c45aSBen Skeggs .doorbell = nvif_userc361_doorbell,
46*58e92b5eSBen Skeggs .time = nvif_userc361_time,
4737e1c45aSBen Skeggs };
48