Loading drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h 0 → 100644 +20 −0 Original line number Diff line number Diff line #ifndef __NVKM_FALCON_H__ #define __NVKM_FALCON_H__ #include <engine/falcon.h> int nvkm_falcon_ctor(const struct nvkm_falcon_func *, struct nvkm_subdev *owner, const char *name, u32 addr, struct nvkm_falcon *); void nvkm_falcon_dtor(struct nvkm_falcon *); void nvkm_falcon_v1_load_imem(struct nvkm_falcon *, void *, u32, u32, u16, u8, bool); void nvkm_falcon_v1_load_dmem(struct nvkm_falcon *, void *, u32, u32, u8); void nvkm_falcon_v1_read_dmem(struct nvkm_falcon *, u32, u32, u8, void *); void nvkm_falcon_v1_bind_context(struct nvkm_falcon *, struct nvkm_memory *); int nvkm_falcon_v1_wait_for_halt(struct nvkm_falcon *, u32); int nvkm_falcon_v1_clear_interrupt(struct nvkm_falcon *, u32); void nvkm_falcon_v1_set_start_addr(struct nvkm_falcon *, u32 start_addr); void nvkm_falcon_v1_start(struct nvkm_falcon *); int nvkm_falcon_v1_enable(struct nvkm_falcon *); void nvkm_falcon_v1_disable(struct nvkm_falcon *); #endif drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h +2 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: MIT */ #ifndef __NVKM_FALCON_H__ #define __NVKM_FALCON_H__ #ifndef __NVKM_FLCNEN_H__ #define __NVKM_FLCNEN_H__ #define nvkm_falcon(p) container_of((p), struct nvkm_falcon, engine) #include <core/engine.h> struct nvkm_fifo_chan; Loading Loading @@ -124,5 +124,4 @@ int nvkm_falcon_clear_interrupt(struct nvkm_falcon *, u32); int nvkm_falcon_enable(struct nvkm_falcon *); void nvkm_falcon_disable(struct nvkm_falcon *); int nvkm_falcon_reset(struct nvkm_falcon *); #endif drivers/gpu/drm/nouveau/nvkm/falcon/base.c +7 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,11 @@ nvkm_falcon_get(struct nvkm_falcon *falcon, const struct nvkm_subdev *user) } void nvkm_falcon_dtor(struct nvkm_falcon *falcon) { } int nvkm_falcon_ctor(const struct nvkm_falcon_func *func, struct nvkm_subdev *subdev, const char *name, u32 addr, struct nvkm_falcon *falcon) Loading @@ -236,12 +241,14 @@ nvkm_falcon_ctor(const struct nvkm_falcon_func *func, falcon->addr = addr; mutex_init(&falcon->mutex); mutex_init(&falcon->dmem_mutex); return 0; } void nvkm_falcon_del(struct nvkm_falcon **pfalcon) { if (*pfalcon) { nvkm_falcon_dtor(*pfalcon); kfree(*pfalcon); *pfalcon = NULL; } Loading drivers/gpu/drm/nouveau/nvkm/falcon/priv.h +1 −5 Original line number Diff line number Diff line /* SPDX-License-Identifier: MIT */ #ifndef __NVKM_FALCON_PRIV_H__ #define __NVKM_FALCON_PRIV_H__ #include <engine/falcon.h> void nvkm_falcon_ctor(const struct nvkm_falcon_func *, struct nvkm_subdev *, const char *, u32, struct nvkm_falcon *); #include <core/falcon.h> #endif drivers/gpu/drm/nouveau/nvkm/falcon/v1.c +11 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ #include <core/memory.h> #include <subdev/timer.h> static void void nvkm_falcon_v1_load_imem(struct nvkm_falcon *falcon, void *data, u32 start, u32 size, u16 tag, u8 port, bool secure) { Loading Loading @@ -91,7 +91,7 @@ nvkm_falcon_v1_load_emem(struct nvkm_falcon *falcon, void *data, u32 start, static const u32 EMEM_START_ADDR = 0x1000000; static void void nvkm_falcon_v1_load_dmem(struct nvkm_falcon *falcon, void *data, u32 start, u32 size, u8 port) { Loading Loading @@ -148,7 +148,7 @@ nvkm_falcon_v1_read_emem(struct nvkm_falcon *falcon, u32 start, u32 size, } } static void void nvkm_falcon_v1_read_dmem(struct nvkm_falcon *falcon, u32 start, u32 size, u8 port, void *data) { Loading Loading @@ -179,7 +179,7 @@ nvkm_falcon_v1_read_dmem(struct nvkm_falcon *falcon, u32 start, u32 size, } } static void void nvkm_falcon_v1_bind_context(struct nvkm_falcon *falcon, struct nvkm_memory *ctx) { struct nvkm_device *device = falcon->owner->device; Loading Loading @@ -271,13 +271,13 @@ nvkm_falcon_v1_bind_context(struct nvkm_falcon *falcon, struct nvkm_memory *ctx) } } static void void nvkm_falcon_v1_set_start_addr(struct nvkm_falcon *falcon, u32 start_addr) { nvkm_falcon_wr32(falcon, 0x104, start_addr); } static void void nvkm_falcon_v1_start(struct nvkm_falcon *falcon) { u32 reg = nvkm_falcon_rd32(falcon, 0x100); Loading @@ -288,7 +288,7 @@ nvkm_falcon_v1_start(struct nvkm_falcon *falcon) nvkm_falcon_wr32(falcon, 0x100, 0x2); } static int int nvkm_falcon_v1_wait_for_halt(struct nvkm_falcon *falcon, u32 ms) { struct nvkm_device *device = falcon->owner->device; Loading @@ -301,7 +301,7 @@ nvkm_falcon_v1_wait_for_halt(struct nvkm_falcon *falcon, u32 ms) return 0; } static int int nvkm_falcon_v1_clear_interrupt(struct nvkm_falcon *falcon, u32 mask) { struct nvkm_device *device = falcon->owner->device; Loading Loading @@ -330,7 +330,7 @@ falcon_v1_wait_idle(struct nvkm_falcon *falcon) return 0; } static int int nvkm_falcon_v1_enable(struct nvkm_falcon *falcon) { struct nvkm_device *device = falcon->owner->device; Loading @@ -352,7 +352,7 @@ nvkm_falcon_v1_enable(struct nvkm_falcon *falcon) return 0; } static void void nvkm_falcon_v1_disable(struct nvkm_falcon *falcon) { /* disable IRQs and wait for any previous code to complete */ Loading Loading
drivers/gpu/drm/nouveau/include/nvkm/core/falcon.h 0 → 100644 +20 −0 Original line number Diff line number Diff line #ifndef __NVKM_FALCON_H__ #define __NVKM_FALCON_H__ #include <engine/falcon.h> int nvkm_falcon_ctor(const struct nvkm_falcon_func *, struct nvkm_subdev *owner, const char *name, u32 addr, struct nvkm_falcon *); void nvkm_falcon_dtor(struct nvkm_falcon *); void nvkm_falcon_v1_load_imem(struct nvkm_falcon *, void *, u32, u32, u16, u8, bool); void nvkm_falcon_v1_load_dmem(struct nvkm_falcon *, void *, u32, u32, u8); void nvkm_falcon_v1_read_dmem(struct nvkm_falcon *, u32, u32, u8, void *); void nvkm_falcon_v1_bind_context(struct nvkm_falcon *, struct nvkm_memory *); int nvkm_falcon_v1_wait_for_halt(struct nvkm_falcon *, u32); int nvkm_falcon_v1_clear_interrupt(struct nvkm_falcon *, u32); void nvkm_falcon_v1_set_start_addr(struct nvkm_falcon *, u32 start_addr); void nvkm_falcon_v1_start(struct nvkm_falcon *); int nvkm_falcon_v1_enable(struct nvkm_falcon *); void nvkm_falcon_v1_disable(struct nvkm_falcon *); #endif
drivers/gpu/drm/nouveau/include/nvkm/engine/falcon.h +2 −3 Original line number Diff line number Diff line /* SPDX-License-Identifier: MIT */ #ifndef __NVKM_FALCON_H__ #define __NVKM_FALCON_H__ #ifndef __NVKM_FLCNEN_H__ #define __NVKM_FLCNEN_H__ #define nvkm_falcon(p) container_of((p), struct nvkm_falcon, engine) #include <core/engine.h> struct nvkm_fifo_chan; Loading Loading @@ -124,5 +124,4 @@ int nvkm_falcon_clear_interrupt(struct nvkm_falcon *, u32); int nvkm_falcon_enable(struct nvkm_falcon *); void nvkm_falcon_disable(struct nvkm_falcon *); int nvkm_falcon_reset(struct nvkm_falcon *); #endif
drivers/gpu/drm/nouveau/nvkm/falcon/base.c +7 −0 Original line number Diff line number Diff line Loading @@ -226,6 +226,11 @@ nvkm_falcon_get(struct nvkm_falcon *falcon, const struct nvkm_subdev *user) } void nvkm_falcon_dtor(struct nvkm_falcon *falcon) { } int nvkm_falcon_ctor(const struct nvkm_falcon_func *func, struct nvkm_subdev *subdev, const char *name, u32 addr, struct nvkm_falcon *falcon) Loading @@ -236,12 +241,14 @@ nvkm_falcon_ctor(const struct nvkm_falcon_func *func, falcon->addr = addr; mutex_init(&falcon->mutex); mutex_init(&falcon->dmem_mutex); return 0; } void nvkm_falcon_del(struct nvkm_falcon **pfalcon) { if (*pfalcon) { nvkm_falcon_dtor(*pfalcon); kfree(*pfalcon); *pfalcon = NULL; } Loading
drivers/gpu/drm/nouveau/nvkm/falcon/priv.h +1 −5 Original line number Diff line number Diff line /* SPDX-License-Identifier: MIT */ #ifndef __NVKM_FALCON_PRIV_H__ #define __NVKM_FALCON_PRIV_H__ #include <engine/falcon.h> void nvkm_falcon_ctor(const struct nvkm_falcon_func *, struct nvkm_subdev *, const char *, u32, struct nvkm_falcon *); #include <core/falcon.h> #endif
drivers/gpu/drm/nouveau/nvkm/falcon/v1.c +11 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ #include <core/memory.h> #include <subdev/timer.h> static void void nvkm_falcon_v1_load_imem(struct nvkm_falcon *falcon, void *data, u32 start, u32 size, u16 tag, u8 port, bool secure) { Loading Loading @@ -91,7 +91,7 @@ nvkm_falcon_v1_load_emem(struct nvkm_falcon *falcon, void *data, u32 start, static const u32 EMEM_START_ADDR = 0x1000000; static void void nvkm_falcon_v1_load_dmem(struct nvkm_falcon *falcon, void *data, u32 start, u32 size, u8 port) { Loading Loading @@ -148,7 +148,7 @@ nvkm_falcon_v1_read_emem(struct nvkm_falcon *falcon, u32 start, u32 size, } } static void void nvkm_falcon_v1_read_dmem(struct nvkm_falcon *falcon, u32 start, u32 size, u8 port, void *data) { Loading Loading @@ -179,7 +179,7 @@ nvkm_falcon_v1_read_dmem(struct nvkm_falcon *falcon, u32 start, u32 size, } } static void void nvkm_falcon_v1_bind_context(struct nvkm_falcon *falcon, struct nvkm_memory *ctx) { struct nvkm_device *device = falcon->owner->device; Loading Loading @@ -271,13 +271,13 @@ nvkm_falcon_v1_bind_context(struct nvkm_falcon *falcon, struct nvkm_memory *ctx) } } static void void nvkm_falcon_v1_set_start_addr(struct nvkm_falcon *falcon, u32 start_addr) { nvkm_falcon_wr32(falcon, 0x104, start_addr); } static void void nvkm_falcon_v1_start(struct nvkm_falcon *falcon) { u32 reg = nvkm_falcon_rd32(falcon, 0x100); Loading @@ -288,7 +288,7 @@ nvkm_falcon_v1_start(struct nvkm_falcon *falcon) nvkm_falcon_wr32(falcon, 0x100, 0x2); } static int int nvkm_falcon_v1_wait_for_halt(struct nvkm_falcon *falcon, u32 ms) { struct nvkm_device *device = falcon->owner->device; Loading @@ -301,7 +301,7 @@ nvkm_falcon_v1_wait_for_halt(struct nvkm_falcon *falcon, u32 ms) return 0; } static int int nvkm_falcon_v1_clear_interrupt(struct nvkm_falcon *falcon, u32 mask) { struct nvkm_device *device = falcon->owner->device; Loading Loading @@ -330,7 +330,7 @@ falcon_v1_wait_idle(struct nvkm_falcon *falcon) return 0; } static int int nvkm_falcon_v1_enable(struct nvkm_falcon *falcon) { struct nvkm_device *device = falcon->owner->device; Loading @@ -352,7 +352,7 @@ nvkm_falcon_v1_enable(struct nvkm_falcon *falcon) return 0; } static void void nvkm_falcon_v1_disable(struct nvkm_falcon *falcon) { /* disable IRQs and wait for any previous code to complete */ Loading