xref: /linux/drivers/gpu/drm/nouveau/nvkm/engine/ce/ga102.c (revision 0ea5c948cb64bab5bc7a5516774eb8536f05aa0d)
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