105d271c3SBen Skeggs /*
205d271c3SBen Skeggs * Copyright 2021 Red Hat Inc.
305d271c3SBen Skeggs *
405d271c3SBen Skeggs * Permission is hereby granted, free of charge, to any person obtaining a
505d271c3SBen Skeggs * copy of this software and associated documentation files (the "Software"),
605d271c3SBen Skeggs * to deal in the Software without restriction, including without limitation
705d271c3SBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense,
805d271c3SBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the
905d271c3SBen Skeggs * Software is furnished to do so, subject to the following conditions:
1005d271c3SBen Skeggs *
1105d271c3SBen Skeggs * The above copyright notice and this permission notice shall be included in
1205d271c3SBen Skeggs * all copies or substantial portions of the Software.
1305d271c3SBen Skeggs *
1405d271c3SBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1505d271c3SBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1605d271c3SBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
1705d271c3SBen Skeggs * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
1805d271c3SBen Skeggs * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1905d271c3SBen Skeggs * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
2005d271c3SBen Skeggs * OTHER DEALINGS IN THE SOFTWARE.
2105d271c3SBen Skeggs */
2205d271c3SBen Skeggs #include "priv.h"
2305d271c3SBen Skeggs
240e55453fSBen Skeggs #include <subdev/gsp.h>
250e55453fSBen Skeggs
2605d271c3SBen Skeggs #include <nvif/class.h>
2705d271c3SBen Skeggs
2805d271c3SBen Skeggs static const struct nvkm_engine_func
2905d271c3SBen Skeggs ga102_ce = {
3005d271c3SBen Skeggs .oneinit = ga100_ce_oneinit,
3105d271c3SBen Skeggs .init = ga100_ce_init,
3205d271c3SBen Skeggs .fini = ga100_ce_fini,
3355e1a599SBen Skeggs .nonstall = ga100_ce_nonstall,
3405d271c3SBen Skeggs .cclass = &gv100_ce_cclass,
3505d271c3SBen Skeggs .sclass = {
3605d271c3SBen Skeggs { -1, -1, AMPERE_DMA_COPY_A },
3705d271c3SBen Skeggs { -1, -1, AMPERE_DMA_COPY_B },
3805d271c3SBen Skeggs {}
3905d271c3SBen Skeggs }
4005d271c3SBen Skeggs };
4105d271c3SBen Skeggs
4205d271c3SBen Skeggs int
ga102_ce_new(struct nvkm_device * device,enum nvkm_subdev_type type,int inst,struct nvkm_engine ** pengine)4305d271c3SBen Skeggs ga102_ce_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
4405d271c3SBen Skeggs struct nvkm_engine **pengine)
4505d271c3SBen Skeggs {
460e55453fSBen Skeggs if (nvkm_gsp_rm(device->gsp))
47*b5ce219aSBen Skeggs return r535_ce_new(&ga102_ce, device, type, inst, pengine);
480e55453fSBen Skeggs
4905d271c3SBen Skeggs return nvkm_engine_new_(&ga102_ce, device, type, inst, true, pengine);
5005d271c3SBen Skeggs }
51