diff options
| author | Dave Airlie <airlied@redhat.com> | 2015-04-14 22:47:29 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2015-04-14 22:47:29 -0400 |
| commit | 665ae581ae82ed6a28980a32b9d37345db4eed32 (patch) | |
| tree | 8c434951d4b0d753cb35d2f45648c6e7dddbe8ea /drivers | |
| parent | 1d2add28edd268a8290801ccf46b37f6d5239cdb (diff) | |
| parent | 4195f40685a5f2783b4decece13ed740b61ee038 (diff) | |
Merge branch 'linux-4.1' of git://anongit.freedesktop.org/git/nouveau/linux-2.6 into drm-next
- gk20a iommu support
- gm107 graphics support without needing proprietary ucode
- various random fixes
- more gm20x bring-up, fifo/ce are ok, gr is mostly complete with the
exception of ctxsw ucode.. nvidia aren't playing nice yet so there's
not much more that can be done at this point...
I spent a lot of time trying to find a viable way of doing gr ctxsw
without signed firmware, but the "security" restrictions on the
fecs/gpccs falcons are excessive and go beyond what'd be necessary to
protect the host from malicious firmware. This newer nvidia hw is
VERY open-source unfriendly.
I have some experimental host-based ctxsw work that could be a viable
(albeit unsatisfactory and slow) workaround in the meantime, but it
needs some more work and i'd like to get the 3d driver working
properly before i commit to pushing it.
* 'linux-4.1' of git://anongit.freedesktop.org/git/nouveau/linux-2.6: (40 commits)
drm/nouveau/bios: fix fetching from acpi on certain systems
drm/nouveau/gr/gm206: initial init+ctx code
drm/nouveau/ce/gm206: enable support via gm204 code
drm/nouveau/fifo/gm206: enable support via gm204 code
drm/nouveau/gr/gm204: initial init+ctx code
drm/nouveau: support for buffer moves via MaxwellDmaCopyA
drm/nouveau/ce/gm204: initial support
drm/nouveau: add support for gm20x fifo channels
drm/nouveau/fifo/gm204: initial support
drm/nouveau/gr/gk104-: prevent reading non-existent regs in intr handler
drm/nouveau/gr/gm107: very slightly demagic part of attrib cb setup
drm/nouveau/gr/gk104-: correct crop/zrop num_active_fbps setting
drm/nouveau/gr/gf100-: add symbolic names for classes
drm/nouveau/gr/gm107: support tpc "strand" ctxsw in gpccs ucode
drm/nouveau/gr/gf100-: support mmio access with gpc offset from gpccs ucode
drm/nouveau/gr: fix engine name, cosmetic search+replace mistake
drm/nouveau/pmu/gk20a: add some missing statics
drm/nouveau/platform: fix probe error path
drm/nouveau/platform: release IOMMU's mm upon exit
drm/nouveau/gr/gk104-gk20a: call pmu to disable any power-gating before ctor()
...
Diffstat (limited to 'drivers')
74 files changed, 3956 insertions, 1314 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvif/class.h b/drivers/gpu/drm/nouveau/include/nvif/class.h index 5ad17fc36ae3..0b5af0fe8659 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/class.h +++ b/drivers/gpu/drm/nouveau/include/nvif/class.h | |||
| @@ -12,6 +12,13 @@ | |||
| 12 | #define NV_DMA_TO_MEMORY 0x00000003 | 12 | #define NV_DMA_TO_MEMORY 0x00000003 |
| 13 | #define NV_DMA_IN_MEMORY 0x0000003d | 13 | #define NV_DMA_IN_MEMORY 0x0000003d |
| 14 | 14 | ||
| 15 | #define FERMI_TWOD_A 0x0000902d | ||
| 16 | |||
| 17 | #define FERMI_MEMORY_TO_MEMORY_FORMAT_A 0x0000903d | ||
| 18 | |||
| 19 | #define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 | ||
| 20 | #define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 | ||
| 21 | |||
| 15 | #define NV04_DISP 0x00000046 | 22 | #define NV04_DISP 0x00000046 |
| 16 | 23 | ||
| 17 | #define NV03_CHANNEL_DMA 0x0000006b | 24 | #define NV03_CHANNEL_DMA 0x0000006b |
| @@ -25,6 +32,7 @@ | |||
| 25 | #define G82_CHANNEL_GPFIFO 0x0000826f | 32 | #define G82_CHANNEL_GPFIFO 0x0000826f |
| 26 | #define FERMI_CHANNEL_GPFIFO 0x0000906f | 33 | #define FERMI_CHANNEL_GPFIFO 0x0000906f |
| 27 | #define KEPLER_CHANNEL_GPFIFO_A 0x0000a06f | 34 | #define KEPLER_CHANNEL_GPFIFO_A 0x0000a06f |
| 35 | #define MAXWELL_CHANNEL_GPFIFO_A 0x0000b06f | ||
| 28 | 36 | ||
| 29 | #define NV50_DISP 0x00005070 | 37 | #define NV50_DISP 0x00005070 |
| 30 | #define G82_DISP 0x00008270 | 38 | #define G82_DISP 0x00008270 |
| @@ -84,6 +92,7 @@ | |||
| 84 | #define KEPLER_C 0x0000a297 | 92 | #define KEPLER_C 0x0000a297 |
| 85 | 93 | ||
| 86 | #define MAXWELL_A 0x0000b097 | 94 | #define MAXWELL_A 0x0000b097 |
| 95 | #define MAXWELL_B 0x0000b197 | ||
| 87 | 96 | ||
| 88 | #define FERMI_COMPUTE_A 0x000090c0 | 97 | #define FERMI_COMPUTE_A 0x000090c0 |
| 89 | #define FERMI_COMPUTE_B 0x000091c0 | 98 | #define FERMI_COMPUTE_B 0x000091c0 |
| @@ -92,6 +101,7 @@ | |||
| 92 | #define KEPLER_COMPUTE_B 0x0000a1c0 | 101 | #define KEPLER_COMPUTE_B 0x0000a1c0 |
| 93 | 102 | ||
| 94 | #define MAXWELL_COMPUTE_A 0x0000b0c0 | 103 | #define MAXWELL_COMPUTE_A 0x0000b0c0 |
| 104 | #define MAXWELL_COMPUTE_B 0x0000b1c0 | ||
| 95 | 105 | ||
| 96 | 106 | ||
| 97 | /******************************************************************************* | 107 | /******************************************************************************* |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h index 7e29c52617ea..e832f729e1b4 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/ce.h | |||
| @@ -10,4 +10,7 @@ extern struct nvkm_oclass gf100_ce1_oclass; | |||
| 10 | extern struct nvkm_oclass gk104_ce0_oclass; | 10 | extern struct nvkm_oclass gk104_ce0_oclass; |
| 11 | extern struct nvkm_oclass gk104_ce1_oclass; | 11 | extern struct nvkm_oclass gk104_ce1_oclass; |
| 12 | extern struct nvkm_oclass gk104_ce2_oclass; | 12 | extern struct nvkm_oclass gk104_ce2_oclass; |
| 13 | extern struct nvkm_oclass gm204_ce0_oclass; | ||
| 14 | extern struct nvkm_oclass gm204_ce1_oclass; | ||
| 15 | extern struct nvkm_oclass gm204_ce2_oclass; | ||
| 13 | #endif | 16 | #endif |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h index 05321ce7ab15..97cdeab8e44c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/fifo.h | |||
| @@ -116,6 +116,7 @@ extern struct nvkm_oclass *gf100_fifo_oclass; | |||
| 116 | extern struct nvkm_oclass *gk104_fifo_oclass; | 116 | extern struct nvkm_oclass *gk104_fifo_oclass; |
| 117 | extern struct nvkm_oclass *gk20a_fifo_oclass; | 117 | extern struct nvkm_oclass *gk20a_fifo_oclass; |
| 118 | extern struct nvkm_oclass *gk208_fifo_oclass; | 118 | extern struct nvkm_oclass *gk208_fifo_oclass; |
| 119 | extern struct nvkm_oclass *gm204_fifo_oclass; | ||
| 119 | 120 | ||
| 120 | int nvkm_fifo_uevent_ctor(struct nvkm_object *, void *, u32, | 121 | int nvkm_fifo_uevent_ctor(struct nvkm_object *, void *, u32, |
| 121 | struct nvkm_notify *); | 122 | struct nvkm_notify *); |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h b/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h index 93ef1f2bfac4..7cbe20280760 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h | |||
| @@ -38,7 +38,7 @@ nvkm_gr(void *obj) | |||
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | #define nvkm_gr_create(p,e,c,y,d) \ | 40 | #define nvkm_gr_create(p,e,c,y,d) \ |
| 41 | nvkm_engine_create((p), (e), (c), (y), "PGR", "graphics", (d)) | 41 | nvkm_engine_create((p), (e), (c), (y), "PGRAPH", "graphics", (d)) |
| 42 | #define nvkm_gr_destroy(d) \ | 42 | #define nvkm_gr_destroy(d) \ |
| 43 | nvkm_engine_destroy(&(d)->base) | 43 | nvkm_engine_destroy(&(d)->base) |
| 44 | #define nvkm_gr_init(d) \ | 44 | #define nvkm_gr_init(d) \ |
| @@ -72,6 +72,8 @@ extern struct nvkm_oclass *gk110_gr_oclass; | |||
| 72 | extern struct nvkm_oclass *gk110b_gr_oclass; | 72 | extern struct nvkm_oclass *gk110b_gr_oclass; |
| 73 | extern struct nvkm_oclass *gk208_gr_oclass; | 73 | extern struct nvkm_oclass *gk208_gr_oclass; |
| 74 | extern struct nvkm_oclass *gm107_gr_oclass; | 74 | extern struct nvkm_oclass *gm107_gr_oclass; |
| 75 | extern struct nvkm_oclass *gm204_gr_oclass; | ||
| 76 | extern struct nvkm_oclass *gm206_gr_oclass; | ||
| 75 | 77 | ||
| 76 | #include <core/enum.h> | 78 | #include <core/enum.h> |
| 77 | 79 | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h index d104c1aac807..1bcb763cfca0 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/instmem.h | |||
| @@ -45,4 +45,5 @@ nvkm_instmem(void *obj) | |||
| 45 | extern struct nvkm_oclass *nv04_instmem_oclass; | 45 | extern struct nvkm_oclass *nv04_instmem_oclass; |
| 46 | extern struct nvkm_oclass *nv40_instmem_oclass; | 46 | extern struct nvkm_oclass *nv40_instmem_oclass; |
| 47 | extern struct nvkm_oclass *nv50_instmem_oclass; | 47 | extern struct nvkm_oclass *nv50_instmem_oclass; |
| 48 | extern struct nvkm_oclass *gk20a_instmem_oclass; | ||
| 48 | #endif | 49 | #endif |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h index 7b86acc634a0..755942352557 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pmu.h | |||
| @@ -35,6 +35,7 @@ extern struct nvkm_oclass *gt215_pmu_oclass; | |||
| 35 | extern struct nvkm_oclass *gf100_pmu_oclass; | 35 | extern struct nvkm_oclass *gf100_pmu_oclass; |
| 36 | extern struct nvkm_oclass *gf110_pmu_oclass; | 36 | extern struct nvkm_oclass *gf110_pmu_oclass; |
| 37 | extern struct nvkm_oclass *gk104_pmu_oclass; | 37 | extern struct nvkm_oclass *gk104_pmu_oclass; |
| 38 | extern struct nvkm_oclass *gk110_pmu_oclass; | ||
| 38 | extern struct nvkm_oclass *gk208_pmu_oclass; | 39 | extern struct nvkm_oclass *gk208_pmu_oclass; |
| 39 | extern struct nvkm_oclass *gk20a_pmu_oclass; | 40 | extern struct nvkm_oclass *gk20a_pmu_oclass; |
| 40 | 41 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 77326e344dad..6edcce1658b7 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c | |||
| @@ -1110,6 +1110,8 @@ nouveau_bo_move_init(struct nouveau_drm *drm) | |||
| 1110 | struct ttm_mem_reg *, struct ttm_mem_reg *); | 1110 | struct ttm_mem_reg *, struct ttm_mem_reg *); |
| 1111 | int (*init)(struct nouveau_channel *, u32 handle); | 1111 | int (*init)(struct nouveau_channel *, u32 handle); |
| 1112 | } _methods[] = { | 1112 | } _methods[] = { |
| 1113 | { "COPY", 4, 0xb0b5, nve0_bo_move_copy, nve0_bo_move_init }, | ||
| 1114 | { "GRCE", 0, 0xb0b5, nve0_bo_move_copy, nvc0_bo_move_init }, | ||
| 1113 | { "COPY", 4, 0xa0b5, nve0_bo_move_copy, nve0_bo_move_init }, | 1115 | { "COPY", 4, 0xa0b5, nve0_bo_move_copy, nve0_bo_move_init }, |
| 1114 | { "GRCE", 0, 0xa0b5, nve0_bo_move_copy, nvc0_bo_move_init }, | 1116 | { "GRCE", 0, 0xa0b5, nve0_bo_move_copy, nvc0_bo_move_init }, |
| 1115 | { "COPY1", 5, 0x90b8, nvc0_bo_move_copy, nvc0_bo_move_init }, | 1117 | { "COPY1", 5, 0x90b8, nvc0_bo_move_copy, nvc0_bo_move_init }, |
diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c index e581f63cbf25..0589babc506e 100644 --- a/drivers/gpu/drm/nouveau/nouveau_chan.c +++ b/drivers/gpu/drm/nouveau/nouveau_chan.c | |||
| @@ -184,7 +184,8 @@ static int | |||
| 184 | nouveau_channel_ind(struct nouveau_drm *drm, struct nvif_device *device, | 184 | nouveau_channel_ind(struct nouveau_drm *drm, struct nvif_device *device, |
| 185 | u32 handle, u32 engine, struct nouveau_channel **pchan) | 185 | u32 handle, u32 engine, struct nouveau_channel **pchan) |
| 186 | { | 186 | { |
| 187 | static const u16 oclasses[] = { KEPLER_CHANNEL_GPFIFO_A, | 187 | static const u16 oclasses[] = { MAXWELL_CHANNEL_GPFIFO_A, |
| 188 | KEPLER_CHANNEL_GPFIFO_A, | ||
| 188 | FERMI_CHANNEL_GPFIFO, | 189 | FERMI_CHANNEL_GPFIFO, |
| 189 | G82_CHANNEL_GPFIFO, | 190 | G82_CHANNEL_GPFIFO, |
| 190 | NV50_CHANNEL_GPFIFO, | 191 | NV50_CHANNEL_GPFIFO, |
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 860b0e2d4181..8670d90cdc11 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
| @@ -869,13 +869,20 @@ nouveau_display_dumb_create(struct drm_file *file_priv, struct drm_device *dev, | |||
| 869 | struct drm_mode_create_dumb *args) | 869 | struct drm_mode_create_dumb *args) |
| 870 | { | 870 | { |
| 871 | struct nouveau_bo *bo; | 871 | struct nouveau_bo *bo; |
| 872 | uint32_t domain; | ||
| 872 | int ret; | 873 | int ret; |
| 873 | 874 | ||
| 874 | args->pitch = roundup(args->width * (args->bpp / 8), 256); | 875 | args->pitch = roundup(args->width * (args->bpp / 8), 256); |
| 875 | args->size = args->pitch * args->height; | 876 | args->size = args->pitch * args->height; |
| 876 | args->size = roundup(args->size, PAGE_SIZE); | 877 | args->size = roundup(args->size, PAGE_SIZE); |
| 877 | 878 | ||
| 878 | ret = nouveau_gem_new(dev, args->size, 0, NOUVEAU_GEM_DOMAIN_VRAM, 0, 0, &bo); | 879 | /* Use VRAM if there is any ; otherwise fallback to system memory */ |
| 880 | if (nouveau_drm(dev)->device.info.ram_size != 0) | ||
| 881 | domain = NOUVEAU_GEM_DOMAIN_VRAM; | ||
| 882 | else | ||
| 883 | domain = NOUVEAU_GEM_DOMAIN_GART; | ||
| 884 | |||
| 885 | ret = nouveau_gem_new(dev, args->size, 0, domain, 0, 0, &bo); | ||
| 879 | if (ret) | 886 | if (ret) |
| 880 | return ret; | 887 | return ret; |
| 881 | 888 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 8763deb5188b..89049335b738 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c | |||
| @@ -181,6 +181,7 @@ nouveau_accel_init(struct nouveau_drm *drm) | |||
| 181 | break; | 181 | break; |
| 182 | case FERMI_CHANNEL_GPFIFO: | 182 | case FERMI_CHANNEL_GPFIFO: |
| 183 | case KEPLER_CHANNEL_GPFIFO_A: | 183 | case KEPLER_CHANNEL_GPFIFO_A: |
| 184 | case MAXWELL_CHANNEL_GPFIFO_A: | ||
| 184 | ret = nvc0_fence_create(drm); | 185 | ret = nvc0_fence_create(drm); |
| 185 | break; | 186 | break; |
| 186 | default: | 187 | default: |
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h index fc68f0973f9e..dd726523ca99 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.h +++ b/drivers/gpu/drm/nouveau/nouveau_drm.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | #define DRIVER_MAJOR 1 | 11 | #define DRIVER_MAJOR 1 |
| 12 | #define DRIVER_MINOR 2 | 12 | #define DRIVER_MINOR 2 |
| 13 | #define DRIVER_PATCHLEVEL 1 | 13 | #define DRIVER_PATCHLEVEL 2 |
| 14 | 14 | ||
| 15 | /* | 15 | /* |
| 16 | * 1.1.1: | 16 | * 1.1.1: |
| @@ -28,6 +28,8 @@ | |||
| 28 | * - fermi,kepler,maxwell zbc | 28 | * - fermi,kepler,maxwell zbc |
| 29 | * 1.2.1: | 29 | * 1.2.1: |
| 30 | * - allow concurrent access to bo's mapped read/write. | 30 | * - allow concurrent access to bo's mapped read/write. |
| 31 | * 1.2.2: | ||
| 32 | * - add NOUVEAU_GEM_DOMAIN_COHERENT flag | ||
| 31 | */ | 33 | */ |
| 32 | 34 | ||
| 33 | #include <nvif/client.h> | 35 | #include <nvif/client.h> |
diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c index 7c077fced1d1..0e690bf19fc9 100644 --- a/drivers/gpu/drm/nouveau/nouveau_gem.c +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c | |||
| @@ -189,6 +189,9 @@ nouveau_gem_new(struct drm_device *dev, int size, int align, uint32_t domain, | |||
| 189 | if (!flags || domain & NOUVEAU_GEM_DOMAIN_CPU) | 189 | if (!flags || domain & NOUVEAU_GEM_DOMAIN_CPU) |
| 190 | flags |= TTM_PL_FLAG_SYSTEM; | 190 | flags |= TTM_PL_FLAG_SYSTEM; |
| 191 | 191 | ||
| 192 | if (domain & NOUVEAU_GEM_DOMAIN_COHERENT) | ||
| 193 | flags |= TTM_PL_FLAG_UNCACHED; | ||
| 194 | |||
| 192 | ret = nouveau_bo_new(dev, size, align, flags, tile_mode, | 195 | ret = nouveau_bo_new(dev, size, align, flags, tile_mode, |
| 193 | tile_flags, NULL, NULL, pnvbo); | 196 | tile_flags, NULL, NULL, pnvbo); |
| 194 | if (ret) | 197 | if (ret) |
diff --git a/drivers/gpu/drm/nouveau/nouveau_platform.c b/drivers/gpu/drm/nouveau/nouveau_platform.c index dc5900bf54ff..775277f1edb0 100644 --- a/drivers/gpu/drm/nouveau/nouveau_platform.c +++ b/drivers/gpu/drm/nouveau/nouveau_platform.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/of.h> | 27 | #include <linux/of.h> |
| 28 | #include <linux/reset.h> | 28 | #include <linux/reset.h> |
| 29 | #include <linux/regulator/consumer.h> | 29 | #include <linux/regulator/consumer.h> |
| 30 | #include <linux/iommu.h> | ||
| 30 | #include <soc/tegra/fuse.h> | 31 | #include <soc/tegra/fuse.h> |
| 31 | #include <soc/tegra/pmc.h> | 32 | #include <soc/tegra/pmc.h> |
| 32 | 33 | ||
| @@ -91,6 +92,72 @@ static int nouveau_platform_power_down(struct nouveau_platform_gpu *gpu) | |||
| 91 | return 0; | 92 | return 0; |
| 92 | } | 93 | } |
| 93 | 94 | ||
| 95 | static void nouveau_platform_probe_iommu(struct device *dev, | ||
| 96 | struct nouveau_platform_gpu *gpu) | ||
| 97 | { | ||
| 98 | int err; | ||
| 99 | unsigned long pgsize_bitmap; | ||
| 100 | |||
| 101 | mutex_init(&gpu->iommu.mutex); | ||
| 102 | |||
| 103 | if (iommu_present(&platform_bus_type)) { | ||
| 104 | gpu->iommu.domain = iommu_domain_alloc(&platform_bus_type); | ||
| 105 | if (IS_ERR(gpu->iommu.domain)) | ||
| 106 | goto error; | ||
| 107 | |||
| 108 | /* | ||
| 109 | * A IOMMU is only usable if it supports page sizes smaller | ||
| 110 | * or equal to the system's PAGE_SIZE, with a preference if | ||
| 111 | * both are equal. | ||
| 112 | */ | ||
| 113 | pgsize_bitmap = gpu->iommu.domain->ops->pgsize_bitmap; | ||
| 114 | if (pgsize_bitmap & PAGE_SIZE) { | ||
| 115 | gpu->iommu.pgshift = PAGE_SHIFT; | ||
| 116 | } else { | ||
| 117 | gpu->iommu.pgshift = fls(pgsize_bitmap & ~PAGE_MASK); | ||
| 118 | if (gpu->iommu.pgshift == 0) { | ||
| 119 | dev_warn(dev, "unsupported IOMMU page size\n"); | ||
| 120 | goto free_domain; | ||
| 121 | } | ||
| 122 | gpu->iommu.pgshift -= 1; | ||
| 123 | } | ||
| 124 | |||
| 125 | err = iommu_attach_device(gpu->iommu.domain, dev); | ||
| 126 | if (err) | ||
| 127 | goto free_domain; | ||
| 128 | |||
| 129 | err = nvkm_mm_init(&gpu->iommu._mm, 0, | ||
| 130 | (1ULL << 40) >> gpu->iommu.pgshift, 1); | ||
| 131 | if (err) | ||
| 132 | goto detach_device; | ||
| 133 | |||
| 134 | gpu->iommu.mm = &gpu->iommu._mm; | ||
| 135 | } | ||
| 136 | |||
| 137 | return; | ||
| 138 | |||
| 139 | detach_device: | ||
| 140 | iommu_detach_device(gpu->iommu.domain, dev); | ||
| 141 | |||
| 142 | free_domain: | ||
| 143 | iommu_domain_free(gpu->iommu.domain); | ||
| 144 | |||
| 145 | error: | ||
| 146 | gpu->iommu.domain = NULL; | ||
| 147 | gpu->iommu.pgshift = 0; | ||
| 148 | dev_err(dev, "cannot initialize IOMMU MM\n"); | ||
| 149 | } | ||
| 150 | |||
| 151 | static void nouveau_platform_remove_iommu(struct device *dev, | ||
| 152 | struct nouveau_platform_gpu *gpu) | ||
| 153 | { | ||
| 154 | if (gpu->iommu.domain) { | ||
| 155 | nvkm_mm_fini(&gpu->iommu._mm); | ||
| 156 | iommu_detach_device(gpu->iommu.domain, dev); | ||
| 157 | iommu_domain_free(gpu->iommu.domain); | ||
| 158 | } | ||
| 159 | } | ||
| 160 | |||
| 94 | static int nouveau_platform_probe(struct platform_device *pdev) | 161 | static int nouveau_platform_probe(struct platform_device *pdev) |
| 95 | { | 162 | { |
| 96 | struct nouveau_platform_gpu *gpu; | 163 | struct nouveau_platform_gpu *gpu; |
| @@ -118,6 +185,8 @@ static int nouveau_platform_probe(struct platform_device *pdev) | |||
| 118 | if (IS_ERR(gpu->clk_pwr)) | 185 | if (IS_ERR(gpu->clk_pwr)) |
| 119 | return PTR_ERR(gpu->clk_pwr); | 186 | return PTR_ERR(gpu->clk_pwr); |
| 120 | 187 | ||
| 188 | nouveau_platform_probe_iommu(&pdev->dev, gpu); | ||
| 189 | |||
| 121 | err = nouveau_platform_power_up(gpu); | 190 | err = nouveau_platform_power_up(gpu); |
| 122 | if (err) | 191 | if (err) |
| 123 | return err; | 192 | return err; |
| @@ -140,10 +209,9 @@ static int nouveau_platform_probe(struct platform_device *pdev) | |||
| 140 | err_unref: | 209 | err_unref: |
| 141 | drm_dev_unref(drm); | 210 | drm_dev_unref(drm); |
| 142 | 211 | ||
| 143 | return 0; | ||
| 144 | |||
| 145 | power_down: | 212 | power_down: |
| 146 | nouveau_platform_power_down(gpu); | 213 | nouveau_platform_power_down(gpu); |
| 214 | nouveau_platform_remove_iommu(&pdev->dev, gpu); | ||
| 147 | 215 | ||
| 148 | return err; | 216 | return err; |
| 149 | } | 217 | } |
| @@ -154,10 +222,15 @@ static int nouveau_platform_remove(struct platform_device *pdev) | |||
| 154 | struct nouveau_drm *drm = nouveau_drm(drm_dev); | 222 | struct nouveau_drm *drm = nouveau_drm(drm_dev); |
| 155 | struct nvkm_device *device = nvxx_device(&drm->device); | 223 | struct nvkm_device *device = nvxx_device(&drm->device); |
| 156 | struct nouveau_platform_gpu *gpu = nv_device_to_platform(device)->gpu; | 224 | struct nouveau_platform_gpu *gpu = nv_device_to_platform(device)->gpu; |
| 225 | int err; | ||
| 157 | 226 | ||
| 158 | nouveau_drm_device_remove(drm_dev); | 227 | nouveau_drm_device_remove(drm_dev); |
| 159 | 228 | ||
| 160 | return nouveau_platform_power_down(gpu); | 229 | err = nouveau_platform_power_down(gpu); |
| 230 | |||
| 231 | nouveau_platform_remove_iommu(&pdev->dev, gpu); | ||
| 232 | |||
| 233 | return err; | ||
| 161 | } | 234 | } |
| 162 | 235 | ||
| 163 | #if IS_ENABLED(CONFIG_OF) | 236 | #if IS_ENABLED(CONFIG_OF) |
diff --git a/drivers/gpu/drm/nouveau/nouveau_platform.h b/drivers/gpu/drm/nouveau/nouveau_platform.h index 268bb7213681..392874cf4725 100644 --- a/drivers/gpu/drm/nouveau/nouveau_platform.h +++ b/drivers/gpu/drm/nouveau/nouveau_platform.h | |||
| @@ -24,10 +24,12 @@ | |||
| 24 | #define __NOUVEAU_PLATFORM_H__ | 24 | #define __NOUVEAU_PLATFORM_H__ |
| 25 | 25 | ||
| 26 | #include "core/device.h" | 26 | #include "core/device.h" |
| 27 | #include "core/mm.h" | ||
| 27 | 28 | ||
| 28 | struct reset_control; | 29 | struct reset_control; |
| 29 | struct clk; | 30 | struct clk; |
| 30 | struct regulator; | 31 | struct regulator; |
| 32 | struct iommu_domain; | ||
| 31 | struct platform_driver; | 33 | struct platform_driver; |
| 32 | 34 | ||
| 33 | struct nouveau_platform_gpu { | 35 | struct nouveau_platform_gpu { |
| @@ -36,6 +38,22 @@ struct nouveau_platform_gpu { | |||
| 36 | struct clk *clk_pwr; | 38 | struct clk *clk_pwr; |
| 37 | 39 | ||
| 38 | struct regulator *vdd; | 40 | struct regulator *vdd; |
| 41 | |||
| 42 | struct { | ||
| 43 | /* | ||
| 44 | * Protects accesses to mm from subsystems | ||
| 45 | */ | ||
| 46 | struct mutex mutex; | ||
| 47 | |||
| 48 | struct nvkm_mm _mm; | ||
| 49 | /* | ||
| 50 | * Just points to _mm. We need this to avoid embedding | ||
| 51 | * struct nvkm_mm in os.h | ||
| 52 | */ | ||
| 53 | struct nvkm_mm *mm; | ||
| 54 | struct iommu_domain *domain; | ||
| 55 | unsigned long pgshift; | ||
| 56 | } iommu; | ||
| 39 | }; | 57 | }; |
| 40 | 58 | ||
| 41 | struct nouveau_platform_device { | 59 | struct nouveau_platform_device { |
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c index 273e50110ec3..18f449715788 100644 --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c | |||
| @@ -82,6 +82,9 @@ nouveau_vram_manager_new(struct ttm_mem_type_manager *man, | |||
| 82 | u32 size_nc = 0; | 82 | u32 size_nc = 0; |
| 83 | int ret; | 83 | int ret; |
| 84 | 84 | ||
| 85 | if (drm->device.info.ram_size == 0) | ||
| 86 | return -ENOMEM; | ||
| 87 | |||
| 85 | if (nvbo->tile_flags & NOUVEAU_GEM_TILE_NONCONTIG) | 88 | if (nvbo->tile_flags & NOUVEAU_GEM_TILE_NONCONTIG) |
| 86 | size_nc = 1 << nvbo->page_shift; | 89 | size_nc = 1 << nvbo->page_shift; |
| 87 | 90 | ||
diff --git a/drivers/gpu/drm/nouveau/nv84_fence.c b/drivers/gpu/drm/nouveau/nv84_fence.c index bf429cabbaa8..a03db4368696 100644 --- a/drivers/gpu/drm/nouveau/nv84_fence.c +++ b/drivers/gpu/drm/nouveau/nv84_fence.c | |||
| @@ -215,6 +215,7 @@ nv84_fence_create(struct nouveau_drm *drm) | |||
| 215 | { | 215 | { |
| 216 | struct nvkm_fifo *pfifo = nvxx_fifo(&drm->device); | 216 | struct nvkm_fifo *pfifo = nvxx_fifo(&drm->device); |
| 217 | struct nv84_fence_priv *priv; | 217 | struct nv84_fence_priv *priv; |
| 218 | u32 domain; | ||
| 218 | int ret; | 219 | int ret; |
| 219 | 220 | ||
| 220 | priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL); | 221 | priv = drm->fence = kzalloc(sizeof(*priv), GFP_KERNEL); |
| @@ -231,10 +232,17 @@ nv84_fence_create(struct nouveau_drm *drm) | |||
| 231 | priv->base.context_base = fence_context_alloc(priv->base.contexts); | 232 | priv->base.context_base = fence_context_alloc(priv->base.contexts); |
| 232 | priv->base.uevent = true; | 233 | priv->base.uevent = true; |
| 233 | 234 | ||
| 234 | ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0, | 235 | /* Use VRAM if there is any ; otherwise fallback to system memory */ |
| 235 | TTM_PL_FLAG_VRAM, 0, 0, NULL, NULL, &priv->bo); | 236 | domain = drm->device.info.ram_size != 0 ? TTM_PL_FLAG_VRAM : |
| 237 | /* | ||
| 238 | * fences created in sysmem must be non-cached or we | ||
| 239 | * will lose CPU/GPU coherency! | ||
| 240 | */ | ||
| 241 | TTM_PL_FLAG_TT | TTM_PL_FLAG_UNCACHED; | ||
| 242 | ret = nouveau_bo_new(drm->dev, 16 * priv->base.contexts, 0, domain, 0, | ||
| 243 | 0, NULL, NULL, &priv->bo); | ||
| 236 | if (ret == 0) { | 244 | if (ret == 0) { |
| 237 | ret = nouveau_bo_pin(priv->bo, TTM_PL_FLAG_VRAM, false); | 245 | ret = nouveau_bo_pin(priv->bo, domain, false); |
| 238 | if (ret == 0) { | 246 | if (ret == 0) { |
| 239 | ret = nouveau_bo_map(priv->bo); | 247 | ret = nouveau_bo_map(priv->bo); |
| 240 | if (ret) | 248 | if (ret) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/ce/Kbuild index 858797453e0b..fa8cda7058cd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/Kbuild | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | nvkm-y += nvkm/engine/ce/gt215.o | 1 | nvkm-y += nvkm/engine/ce/gt215.o |
| 2 | nvkm-y += nvkm/engine/ce/gf100.o | 2 | nvkm-y += nvkm/engine/ce/gf100.o |
| 3 | nvkm-y += nvkm/engine/ce/gk104.o | 3 | nvkm-y += nvkm/engine/ce/gk104.o |
| 4 | nvkm-y += nvkm/engine/ce/gm204.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm204.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm204.c new file mode 100644 index 000000000000..577eb2eead05 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gm204.c | |||
| @@ -0,0 +1,173 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs | ||
| 23 | */ | ||
| 24 | #include <engine/ce.h> | ||
| 25 | |||
| 26 | #include <core/engctx.h> | ||
| 27 | |||
| 28 | struct gm204_ce_priv { | ||
| 29 | struct nvkm_engine base; | ||
| 30 | }; | ||
| 31 | |||
| 32 | /******************************************************************************* | ||
| 33 | * Copy object classes | ||
| 34 | ******************************************************************************/ | ||
| 35 | |||
| 36 | static struct nvkm_oclass | ||
| 37 | gm204_ce_sclass[] = { | ||
| 38 | { 0xb0b5, &nvkm_object_ofuncs }, | ||
| 39 | {}, | ||
| 40 | }; | ||
| 41 | |||
| 42 | /******************************************************************************* | ||
| 43 | * PCE context | ||
| 44 | ******************************************************************************/ | ||
| 45 | |||
| 46 | static struct nvkm_ofuncs | ||
| 47 | gm204_ce_context_ofuncs = { | ||
| 48 | .ctor = _nvkm_engctx_ctor, | ||
| 49 | .dtor = _nvkm_engctx_dtor, | ||
| 50 | .init = _nvkm_engctx_init, | ||
| 51 | .fini = _nvkm_engctx_fini, | ||
| 52 | .rd32 = _nvkm_engctx_rd32, | ||
| 53 | .wr32 = _nvkm_engctx_wr32, | ||
| 54 | }; | ||
| 55 | |||
| 56 | static struct nvkm_oclass | ||
| 57 | gm204_ce_cclass = { | ||
| 58 | .handle = NV_ENGCTX(CE0, 0x24), | ||
| 59 | .ofuncs = &gm204_ce_context_ofuncs, | ||
| 60 | }; | ||
| 61 | |||
| 62 | /******************************************************************************* | ||
| 63 | * PCE engine/subdev functions | ||
| 64 | ******************************************************************************/ | ||
| 65 | |||
| 66 | static void | ||
| 67 | gm204_ce_intr(struct nvkm_subdev *subdev) | ||
| 68 | { | ||
| 69 | const int ce = nv_subidx(subdev) - NVDEV_ENGINE_CE0; | ||
| 70 | struct gm204_ce_priv *priv = (void *)subdev; | ||
| 71 | u32 stat = nv_rd32(priv, 0x104908 + (ce * 0x1000)); | ||
| 72 | |||
| 73 | if (stat) { | ||
| 74 | nv_warn(priv, "unhandled intr 0x%08x\n", stat); | ||
| 75 | nv_wr32(priv, 0x104908 + (ce * 0x1000), stat); | ||
| 76 | } | ||
| 77 | } | ||
| 78 | |||
| 79 | static int | ||
| 80 | gm204_ce0_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 81 | struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 82 | struct nvkm_object **pobject) | ||
| 83 | { | ||
| 84 | struct gm204_ce_priv *priv; | ||
| 85 | int ret; | ||
| 86 | |||
| 87 | ret = nvkm_engine_create(parent, engine, oclass, true, | ||
| 88 | "PCE0", "ce0", &priv); | ||
| 89 | *pobject = nv_object(priv); | ||
| 90 | if (ret) | ||
| 91 | return ret; | ||
| 92 | |||
| 93 | nv_subdev(priv)->unit = 0x00000040; | ||
| 94 | nv_subdev(priv)->intr = gm204_ce_intr; | ||
| 95 | nv_engine(priv)->cclass = &gm204_ce_cclass; | ||
| 96 | nv_engine(priv)->sclass = gm204_ce_sclass; | ||
| 97 | return 0; | ||
| 98 | } | ||
| 99 | |||
| 100 | static int | ||
| 101 | gm204_ce1_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 102 | struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 103 | struct nvkm_object **pobject) | ||
| 104 | { | ||
| 105 | struct gm204_ce_priv *priv; | ||
| 106 | int ret; | ||
| 107 | |||
| 108 | ret = nvkm_engine_create(parent, engine, oclass, true, | ||
| 109 | "PCE1", "ce1", &priv); | ||
| 110 | *pobject = nv_object(priv); | ||
| 111 | if (ret) | ||
| 112 | return ret; | ||
| 113 | |||
| 114 | nv_subdev(priv)->unit = 0x00000080; | ||
| 115 | nv_subdev(priv)->intr = gm204_ce_intr; | ||
| 116 | nv_engine(priv)->cclass = &gm204_ce_cclass; | ||
| 117 | nv_engine(priv)->sclass = gm204_ce_sclass; | ||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | |||
| 121 | static int | ||
| 122 | gm204_ce2_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 123 | struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 124 | struct nvkm_object **pobject) | ||
| 125 | { | ||
| 126 | struct gm204_ce_priv *priv; | ||
| 127 | int ret; | ||
| 128 | |||
| 129 | ret = nvkm_engine_create(parent, engine, oclass, true, | ||
| 130 | "PCE2", "ce2", &priv); | ||
| 131 | *pobject = nv_object(priv); | ||
| 132 | if (ret) | ||
| 133 | return ret; | ||
| 134 | |||
| 135 | nv_subdev(priv)->unit = 0x00200000; | ||
| 136 | nv_subdev(priv)->intr = gm204_ce_intr; | ||
| 137 | nv_engine(priv)->cclass = &gm204_ce_cclass; | ||
| 138 | nv_engine(priv)->sclass = gm204_ce_sclass; | ||
| 139 | return 0; | ||
| 140 | } | ||
| 141 | |||
| 142 | struct nvkm_oclass | ||
| 143 | gm204_ce0_oclass = { | ||
| 144 | .handle = NV_ENGINE(CE0, 0x24), | ||
| 145 | .ofuncs = &(struct nvkm_ofuncs) { | ||
| 146 | .ctor = gm204_ce0_ctor, | ||
| 147 | .dtor = _nvkm_engine_dtor, | ||
| 148 | .init = _nvkm_engine_init, | ||
| 149 | .fini = _nvkm_engine_fini, | ||
| 150 | }, | ||
| 151 | }; | ||
| 152 | |||
| 153 | struct nvkm_oclass | ||
| 154 | gm204_ce1_oclass = { | ||
| 155 | .handle = NV_ENGINE(CE1, 0x24), | ||
| 156 | .ofuncs = &(struct nvkm_ofuncs) { | ||
| 157 | .ctor = gm204_ce1_ctor, | ||
| 158 | .dtor = _nvkm_engine_dtor, | ||
| 159 | .init = _nvkm_engine_init, | ||
| 160 | .fini = _nvkm_engine_fini, | ||
| 161 | }, | ||
| 162 | }; | ||
| 163 | |||
| 164 | struct nvkm_oclass | ||
| 165 | gm204_ce2_oclass = { | ||
| 166 | .handle = NV_ENGINE(CE2, 0x24), | ||
| 167 | .ofuncs = &(struct nvkm_ofuncs) { | ||
| 168 | .ctor = gm204_ce2_ctor, | ||
| 169 | .dtor = _nvkm_engine_dtor, | ||
| 170 | .init = _nvkm_engine_init, | ||
| 171 | .fini = _nvkm_engine_fini, | ||
| 172 | }, | ||
| 173 | }; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index 6efa8f38ff54..63d8e52f4b22 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | |||
| @@ -139,9 +139,13 @@ nvkm_devobj_info(struct nvkm_object *object, void *data, u32 size) | |||
| 139 | 139 | ||
| 140 | args->v0.chipset = device->chipset; | 140 | args->v0.chipset = device->chipset; |
| 141 | args->v0.revision = device->chiprev; | 141 | args->v0.revision = device->chiprev; |
| 142 | if (pfb) args->v0.ram_size = args->v0.ram_user = pfb->ram->size; | 142 | if (pfb && pfb->ram) |
| 143 | else args->v0.ram_size = args->v0.ram_user = 0; | 143 | args->v0.ram_size = args->v0.ram_user = pfb->ram->size; |
| 144 | if (imem) args->v0.ram_user = args->v0.ram_user - imem->reserved; | 144 | else |
| 145 | args->v0.ram_size = args->v0.ram_user = 0; | ||
| 146 | if (imem && args->v0.ram_size > 0) | ||
| 147 | args->v0.ram_user = args->v0.ram_user - imem->reserved; | ||
| 148 | |||
| 145 | return 0; | 149 | return 0; |
| 146 | } | 150 | } |
| 147 | 151 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c index bf5893458a47..6a9483f65d83 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/gk104.c | |||
| @@ -171,7 +171,7 @@ gk104_identify(struct nvkm_device *device) | |||
| 171 | device->oclass[NVDEV_SUBDEV_FB ] = gk20a_fb_oclass; | 171 | device->oclass[NVDEV_SUBDEV_FB ] = gk20a_fb_oclass; |
| 172 | device->oclass[NVDEV_SUBDEV_LTC ] = gk104_ltc_oclass; | 172 | device->oclass[NVDEV_SUBDEV_LTC ] = gk104_ltc_oclass; |
| 173 | device->oclass[NVDEV_SUBDEV_IBUS ] = &gk20a_ibus_oclass; | 173 | device->oclass[NVDEV_SUBDEV_IBUS ] = &gk20a_ibus_oclass; |
| 174 | device->oclass[NVDEV_SUBDEV_INSTMEM] = nv50_instmem_oclass; | 174 | device->oclass[NVDEV_SUBDEV_INSTMEM] = gk20a_instmem_oclass; |
| 175 | device->oclass[NVDEV_SUBDEV_MMU ] = &gf100_mmu_oclass; | 175 | device->oclass[NVDEV_SUBDEV_MMU ] = &gf100_mmu_oclass; |
| 176 | device->oclass[NVDEV_SUBDEV_BAR ] = &gk20a_bar_oclass; | 176 | device->oclass[NVDEV_SUBDEV_BAR ] = &gk20a_bar_oclass; |
| 177 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; | 177 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; |
| @@ -202,7 +202,7 @@ gk104_identify(struct nvkm_device *device) | |||
| 202 | device->oclass[NVDEV_SUBDEV_INSTMEM] = nv50_instmem_oclass; | 202 | device->oclass[NVDEV_SUBDEV_INSTMEM] = nv50_instmem_oclass; |
| 203 | device->oclass[NVDEV_SUBDEV_MMU ] = &gf100_mmu_oclass; | 203 | device->oclass[NVDEV_SUBDEV_MMU ] = &gf100_mmu_oclass; |
| 204 | device->oclass[NVDEV_SUBDEV_BAR ] = &gf100_bar_oclass; | 204 | device->oclass[NVDEV_SUBDEV_BAR ] = &gf100_bar_oclass; |
| 205 | device->oclass[NVDEV_SUBDEV_PMU ] = gf110_pmu_oclass; | 205 | device->oclass[NVDEV_SUBDEV_PMU ] = gk110_pmu_oclass; |
| 206 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; | 206 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; |
| 207 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; | 207 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; |
| 208 | device->oclass[NVDEV_ENGINE_FIFO ] = gk104_fifo_oclass; | 208 | device->oclass[NVDEV_ENGINE_FIFO ] = gk104_fifo_oclass; |
| @@ -236,7 +236,7 @@ gk104_identify(struct nvkm_device *device) | |||
| 236 | device->oclass[NVDEV_SUBDEV_INSTMEM] = nv50_instmem_oclass; | 236 | device->oclass[NVDEV_SUBDEV_INSTMEM] = nv50_instmem_oclass; |
| 237 | device->oclass[NVDEV_SUBDEV_MMU ] = &gf100_mmu_oclass; | 237 | device->oclass[NVDEV_SUBDEV_MMU ] = &gf100_mmu_oclass; |
| 238 | device->oclass[NVDEV_SUBDEV_BAR ] = &gf100_bar_oclass; | 238 | device->oclass[NVDEV_SUBDEV_BAR ] = &gf100_bar_oclass; |
| 239 | device->oclass[NVDEV_SUBDEV_PMU ] = gf110_pmu_oclass; | 239 | device->oclass[NVDEV_SUBDEV_PMU ] = gk110_pmu_oclass; |
| 240 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; | 240 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; |
| 241 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; | 241 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; |
| 242 | device->oclass[NVDEV_ENGINE_FIFO ] = gk104_fifo_oclass; | 242 | device->oclass[NVDEV_ENGINE_FIFO ] = gk104_fifo_oclass; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c index 108d048da764..70abf1ec7c98 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/gm100.c | |||
| @@ -127,16 +127,14 @@ gm100_identify(struct nvkm_device *device) | |||
| 127 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; | 127 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; |
| 128 | #endif | 128 | #endif |
| 129 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; | 129 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; |
| 130 | #if 0 | 130 | device->oclass[NVDEV_ENGINE_FIFO ] = gm204_fifo_oclass; |
| 131 | device->oclass[NVDEV_ENGINE_FIFO ] = gk208_fifo_oclass; | ||
| 132 | device->oclass[NVDEV_ENGINE_SW ] = gf100_sw_oclass; | 131 | device->oclass[NVDEV_ENGINE_SW ] = gf100_sw_oclass; |
| 133 | device->oclass[NVDEV_ENGINE_GR ] = gm107_gr_oclass; | 132 | device->oclass[NVDEV_ENGINE_GR ] = gm204_gr_oclass; |
| 134 | #endif | ||
| 135 | device->oclass[NVDEV_ENGINE_DISP ] = gm204_disp_oclass; | 133 | device->oclass[NVDEV_ENGINE_DISP ] = gm204_disp_oclass; |
| 136 | #if 0 | ||
| 137 | device->oclass[NVDEV_ENGINE_CE0 ] = &gm204_ce0_oclass; | 134 | device->oclass[NVDEV_ENGINE_CE0 ] = &gm204_ce0_oclass; |
| 138 | device->oclass[NVDEV_ENGINE_CE1 ] = &gm204_ce1_oclass; | 135 | device->oclass[NVDEV_ENGINE_CE1 ] = &gm204_ce1_oclass; |
| 139 | device->oclass[NVDEV_ENGINE_CE2 ] = &gm204_ce2_oclass; | 136 | device->oclass[NVDEV_ENGINE_CE2 ] = &gm204_ce2_oclass; |
| 137 | #if 0 | ||
| 140 | device->oclass[NVDEV_ENGINE_MSVLD ] = &gk104_msvld_oclass; | 138 | device->oclass[NVDEV_ENGINE_MSVLD ] = &gk104_msvld_oclass; |
| 141 | device->oclass[NVDEV_ENGINE_MSPDEC ] = &gk104_mspdec_oclass; | 139 | device->oclass[NVDEV_ENGINE_MSPDEC ] = &gk104_mspdec_oclass; |
| 142 | device->oclass[NVDEV_ENGINE_MSPPP ] = &gf100_msppp_oclass; | 140 | device->oclass[NVDEV_ENGINE_MSPPP ] = &gf100_msppp_oclass; |
| @@ -170,16 +168,14 @@ gm100_identify(struct nvkm_device *device) | |||
| 170 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; | 168 | device->oclass[NVDEV_SUBDEV_VOLT ] = &nv40_volt_oclass; |
| 171 | #endif | 169 | #endif |
| 172 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; | 170 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = gf110_dmaeng_oclass; |
| 173 | #if 0 | 171 | device->oclass[NVDEV_ENGINE_FIFO ] = gm204_fifo_oclass; |
| 174 | device->oclass[NVDEV_ENGINE_FIFO ] = gk208_fifo_oclass; | ||
| 175 | device->oclass[NVDEV_ENGINE_SW ] = gf100_sw_oclass; | 172 | device->oclass[NVDEV_ENGINE_SW ] = gf100_sw_oclass; |
| 176 | device->oclass[NVDEV_ENGINE_GR ] = gm107_gr_oclass; | 173 | device->oclass[NVDEV_ENGINE_GR ] = gm206_gr_oclass; |
| 177 | #endif | ||
| 178 | device->oclass[NVDEV_ENGINE_DISP ] = gm204_disp_oclass; | 174 | device->oclass[NVDEV_ENGINE_DISP ] = gm204_disp_oclass; |
| 179 | #if 0 | ||
| 180 | device->oclass[NVDEV_ENGINE_CE0 ] = &gm204_ce0_oclass; | 175 | device->oclass[NVDEV_ENGINE_CE0 ] = &gm204_ce0_oclass; |
| 181 | device->oclass[NVDEV_ENGINE_CE1 ] = &gm204_ce1_oclass; | 176 | device->oclass[NVDEV_ENGINE_CE1 ] = &gm204_ce1_oclass; |
| 182 | device->oclass[NVDEV_ENGINE_CE2 ] = &gm204_ce2_oclass; | 177 | device->oclass[NVDEV_ENGINE_CE2 ] = &gm204_ce2_oclass; |
| 178 | #if 0 | ||
| 183 | device->oclass[NVDEV_ENGINE_MSVLD ] = &gk104_msvld_oclass; | 179 | device->oclass[NVDEV_ENGINE_MSVLD ] = &gk104_msvld_oclass; |
| 184 | device->oclass[NVDEV_ENGINE_MSPDEC ] = &gk104_mspdec_oclass; | 180 | device->oclass[NVDEV_ENGINE_MSPDEC ] = &gk104_mspdec_oclass; |
| 185 | device->oclass[NVDEV_ENGINE_MSPPP ] = &gf100_msppp_oclass; | 181 | device->oclass[NVDEV_ENGINE_MSPPP ] = &gf100_msppp_oclass; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf110.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf110.c index 0ebf466e9ef3..9ef6728c528d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf110.c | |||
| @@ -413,8 +413,8 @@ gf110_disp_base_mthd_base = { | |||
| 413 | 413 | ||
| 414 | static const struct nv50_disp_mthd_list | 414 | static const struct nv50_disp_mthd_list |
| 415 | gf110_disp_base_mthd_image = { | 415 | gf110_disp_base_mthd_image = { |
| 416 | .mthd = 0x0400, | 416 | .mthd = 0x0020, |
| 417 | .addr = 0x000400, | 417 | .addr = 0x000020, |
| 418 | .data = { | 418 | .data = { |
| 419 | { 0x0400, 0x661400 }, | 419 | { 0x0400, 0x661400 }, |
| 420 | { 0x0404, 0x661404 }, | 420 | { 0x0404, 0x661404 }, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c index 84ade810e27c..8ba808df24ad 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c | |||
| @@ -229,7 +229,7 @@ nv50_disp_dmac_create_(struct nvkm_object *parent, | |||
| 229 | 229 | ||
| 230 | switch (dmac->pushdma->target) { | 230 | switch (dmac->pushdma->target) { |
| 231 | case NV_MEM_TARGET_VRAM: | 231 | case NV_MEM_TARGET_VRAM: |
| 232 | dmac->push = 0x00000000 | dmac->pushdma->start >> 8; | 232 | dmac->push = 0x00000001 | dmac->pushdma->start >> 8; |
| 233 | break; | 233 | break; |
| 234 | case NV_MEM_TARGET_PCI_NOSNOOP: | 234 | case NV_MEM_TARGET_PCI_NOSNOOP: |
| 235 | dmac->push = 0x00000003 | dmac->pushdma->start >> 8; | 235 | dmac->push = 0x00000003 | dmac->pushdma->start >> 8; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild index c5a2d8718c5b..42891cb71ea3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/Kbuild | |||
| @@ -9,3 +9,4 @@ nvkm-y += nvkm/engine/fifo/gf100.o | |||
| 9 | nvkm-y += nvkm/engine/fifo/gk104.o | 9 | nvkm-y += nvkm/engine/fifo/gk104.o |
| 10 | nvkm-y += nvkm/engine/fifo/gk20a.o | 10 | nvkm-y += nvkm/engine/fifo/gk20a.o |
| 11 | nvkm-y += nvkm/engine/fifo/gk208.o | 11 | nvkm-y += nvkm/engine/fifo/gk208.o |
| 12 | nvkm-y += nvkm/engine/fifo/gm204.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 9585539e59f2..e10f9644140f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | |||
| @@ -323,8 +323,8 @@ gk104_fifo_chan_fini(struct nvkm_object *object, bool suspend) | |||
| 323 | return nvkm_fifo_channel_fini(&chan->base, suspend); | 323 | return nvkm_fifo_channel_fini(&chan->base, suspend); |
| 324 | } | 324 | } |
| 325 | 325 | ||
| 326 | static struct nvkm_ofuncs | 326 | struct nvkm_ofuncs |
| 327 | gk104_fifo_ofuncs = { | 327 | gk104_fifo_chan_ofuncs = { |
| 328 | .ctor = gk104_fifo_chan_ctor, | 328 | .ctor = gk104_fifo_chan_ctor, |
| 329 | .dtor = _nvkm_fifo_channel_dtor, | 329 | .dtor = _nvkm_fifo_channel_dtor, |
| 330 | .init = gk104_fifo_chan_init, | 330 | .init = gk104_fifo_chan_init, |
| @@ -337,7 +337,7 @@ gk104_fifo_ofuncs = { | |||
| 337 | 337 | ||
| 338 | static struct nvkm_oclass | 338 | static struct nvkm_oclass |
| 339 | gk104_fifo_sclass[] = { | 339 | gk104_fifo_sclass[] = { |
| 340 | { KEPLER_CHANNEL_GPFIFO_A, &gk104_fifo_ofuncs }, | 340 | { KEPLER_CHANNEL_GPFIFO_A, &gk104_fifo_chan_ofuncs }, |
| 341 | {} | 341 | {} |
| 342 | }; | 342 | }; |
| 343 | 343 | ||
| @@ -774,6 +774,7 @@ gk104_fifo_intr_fault(struct gk104_fifo_priv *priv, int unit) | |||
| 774 | while (object) { | 774 | while (object) { |
| 775 | switch (nv_mclass(object)) { | 775 | switch (nv_mclass(object)) { |
| 776 | case KEPLER_CHANNEL_GPFIFO_A: | 776 | case KEPLER_CHANNEL_GPFIFO_A: |
| 777 | case MAXWELL_CHANNEL_GPFIFO_A: | ||
| 777 | gk104_fifo_recover(priv, engine, (void *)object); | 778 | gk104_fifo_recover(priv, engine, (void *)object); |
| 778 | break; | 779 | break; |
| 779 | } | 780 | } |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h index 3046e00ed6ba..318d30d6ee1a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h | |||
| @@ -13,4 +13,6 @@ struct gk104_fifo_impl { | |||
| 13 | struct nvkm_oclass base; | 13 | struct nvkm_oclass base; |
| 14 | u32 channels; | 14 | u32 channels; |
| 15 | }; | 15 | }; |
| 16 | |||
| 17 | extern struct nvkm_ofuncs gk104_fifo_chan_ofuncs; | ||
| 16 | #endif | 18 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm204.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm204.c new file mode 100644 index 000000000000..749d525dd8e3 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm204.c | |||
| @@ -0,0 +1,57 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs | ||
| 23 | */ | ||
| 24 | #include "gk104.h" | ||
| 25 | |||
| 26 | #include <nvif/class.h> | ||
| 27 | |||
| 28 | static struct nvkm_oclass | ||
| 29 | gm204_fifo_sclass[] = { | ||
| 30 | { MAXWELL_CHANNEL_GPFIFO_A, &gk104_fifo_chan_ofuncs }, | ||
| 31 | {} | ||
| 32 | }; | ||
| 33 | |||
| 34 | static int | ||
| 35 | gm204_fifo_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 36 | struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 37 | struct nvkm_object **pobject) | ||
| 38 | { | ||
| 39 | int ret = gk104_fifo_ctor(parent, engine, oclass, data, size, pobject); | ||
| 40 | if (ret == 0) { | ||
| 41 | struct gk104_fifo_priv *priv = (void *)*pobject; | ||
| 42 | nv_engine(priv)->sclass = gm204_fifo_sclass; | ||
| 43 | } | ||
| 44 | return ret; | ||
| 45 | } | ||
| 46 | |||
| 47 | struct nvkm_oclass * | ||
| 48 | gm204_fifo_oclass = &(struct gk104_fifo_impl) { | ||
| 49 | .base.handle = NV_ENGINE(FIFO, 0x24), | ||
| 50 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 51 | .ctor = gm204_fifo_ctor, | ||
| 52 | .dtor = gk104_fifo_dtor, | ||
| 53 | .init = gk104_fifo_init, | ||
| 54 | .fini = _nvkm_fifo_fini, | ||
| 55 | }, | ||
| 56 | .channels = 4096, | ||
| 57 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/Kbuild b/drivers/gpu/drm/nouveau/nvkm/engine/gr/Kbuild index 1771d944591b..2e1b92f71d9e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/Kbuild | |||
| @@ -12,6 +12,8 @@ nvkm-y += nvkm/engine/gr/ctxgk110.o | |||
| 12 | nvkm-y += nvkm/engine/gr/ctxgk110b.o | 12 | nvkm-y += nvkm/engine/gr/ctxgk110b.o |
| 13 | nvkm-y += nvkm/engine/gr/ctxgk208.o | 13 | nvkm-y += nvkm/engine/gr/ctxgk208.o |
| 14 | nvkm-y += nvkm/engine/gr/ctxgm107.o | 14 | nvkm-y += nvkm/engine/gr/ctxgm107.o |
| 15 | nvkm-y += nvkm/engine/gr/ctxgm204.o | ||
| 16 | nvkm-y += nvkm/engine/gr/ctxgm206.o | ||
| 15 | nvkm-y += nvkm/engine/gr/nv04.o | 17 | nvkm-y += nvkm/engine/gr/nv04.o |
| 16 | nvkm-y += nvkm/engine/gr/nv10.o | 18 | nvkm-y += nvkm/engine/gr/nv10.o |
| 17 | nvkm-y += nvkm/engine/gr/nv20.o | 19 | nvkm-y += nvkm/engine/gr/nv20.o |
| @@ -34,3 +36,5 @@ nvkm-y += nvkm/engine/gr/gk110.o | |||
| 34 | nvkm-y += nvkm/engine/gr/gk110b.o | 36 | nvkm-y += nvkm/engine/gr/gk110b.o |
| 35 | nvkm-y += nvkm/engine/gr/gk208.o | 37 | nvkm-y += nvkm/engine/gr/gk208.o |
| 36 | nvkm-y += nvkm/engine/gr/gm107.o | 38 | nvkm-y += nvkm/engine/gr/gm107.o |
| 39 | nvkm-y += nvkm/engine/gr/gm204.o | ||
| 40 | nvkm-y += nvkm/engine/gr/gm206.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h index 1166b1aa1525..3676a3342bc5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h | |||
| @@ -88,11 +88,22 @@ void gk104_grctx_generate_bundle(struct gf100_grctx *); | |||
| 88 | void gk104_grctx_generate_pagepool(struct gf100_grctx *); | 88 | void gk104_grctx_generate_pagepool(struct gf100_grctx *); |
| 89 | void gk104_grctx_generate_unkn(struct gf100_gr_priv *); | 89 | void gk104_grctx_generate_unkn(struct gf100_gr_priv *); |
| 90 | void gk104_grctx_generate_r418bb8(struct gf100_gr_priv *); | 90 | void gk104_grctx_generate_r418bb8(struct gf100_gr_priv *); |
| 91 | void gk104_grctx_generate_rop_active_fbps(struct gf100_gr_priv *); | ||
| 92 | |||
| 91 | 93 | ||
| 92 | extern struct nvkm_oclass *gk110_grctx_oclass; | 94 | extern struct nvkm_oclass *gk110_grctx_oclass; |
| 93 | extern struct nvkm_oclass *gk110b_grctx_oclass; | 95 | extern struct nvkm_oclass *gk110b_grctx_oclass; |
| 94 | extern struct nvkm_oclass *gk208_grctx_oclass; | 96 | extern struct nvkm_oclass *gk208_grctx_oclass; |
| 97 | |||
| 95 | extern struct nvkm_oclass *gm107_grctx_oclass; | 98 | extern struct nvkm_oclass *gm107_grctx_oclass; |
| 99 | void gm107_grctx_generate_bundle(struct gf100_grctx *); | ||
| 100 | void gm107_grctx_generate_pagepool(struct gf100_grctx *); | ||
| 101 | void gm107_grctx_generate_attrib(struct gf100_grctx *); | ||
| 102 | |||
| 103 | extern struct nvkm_oclass *gm204_grctx_oclass; | ||
| 104 | void gm204_grctx_generate_main(struct gf100_gr_priv *, struct gf100_grctx *); | ||
| 105 | |||
| 106 | extern struct nvkm_oclass *gm206_grctx_oclass; | ||
| 96 | 107 | ||
| 97 | /* context init value lists */ | 108 | /* context init value lists */ |
| 98 | 109 | ||
| @@ -196,4 +207,22 @@ extern const struct gf100_gr_init gk208_grctx_init_rstr2d_0[]; | |||
| 196 | 207 | ||
| 197 | extern const struct gf100_gr_init gk208_grctx_init_prop_0[]; | 208 | extern const struct gf100_gr_init gk208_grctx_init_prop_0[]; |
| 198 | extern const struct gf100_gr_init gk208_grctx_init_crstr_0[]; | 209 | extern const struct gf100_gr_init gk208_grctx_init_crstr_0[]; |
| 210 | |||
| 211 | extern const struct gf100_gr_init gm107_grctx_init_gpc_unk_0[]; | ||
| 212 | extern const struct gf100_gr_init gm107_grctx_init_wwdx_0[]; | ||
| 213 | |||
| 214 | extern const struct gf100_gr_pack gm204_grctx_pack_icmd[]; | ||
| 215 | |||
| 216 | extern const struct gf100_gr_pack gm204_grctx_pack_mthd[]; | ||
| 217 | |||
| 218 | extern const struct gf100_gr_pack gm204_grctx_pack_hub[]; | ||
| 219 | |||
| 220 | extern const struct gf100_gr_init gm204_grctx_init_prop_0[]; | ||
| 221 | extern const struct gf100_gr_init gm204_grctx_init_setup_0[]; | ||
| 222 | extern const struct gf100_gr_init gm204_grctx_init_gpm_0[]; | ||
| 223 | extern const struct gf100_gr_init gm204_grctx_init_gpc_unk_2[]; | ||
| 224 | |||
| 225 | extern const struct gf100_gr_pack gm204_grctx_pack_tpc[]; | ||
| 226 | |||
| 227 | extern const struct gf100_gr_pack gm204_grctx_pack_ppc[]; | ||
| 199 | #endif | 228 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c index 5e9454ba158f..b12f6a9fd926 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c | |||
| @@ -941,6 +941,14 @@ gk104_grctx_generate_r418bb8(struct gf100_gr_priv *priv) | |||
| 941 | } | 941 | } |
| 942 | 942 | ||
| 943 | void | 943 | void |
| 944 | gk104_grctx_generate_rop_active_fbps(struct gf100_gr_priv *priv) | ||
| 945 | { | ||
| 946 | const u32 fbp_count = nv_rd32(priv, 0x120074); | ||
| 947 | nv_mask(priv, 0x408850, 0x0000000f, fbp_count); /* zrop */ | ||
| 948 | nv_mask(priv, 0x408958, 0x0000000f, fbp_count); /* crop */ | ||
| 949 | } | ||
| 950 | |||
| 951 | void | ||
| 944 | gk104_grctx_generate_main(struct gf100_gr_priv *priv, struct gf100_grctx *info) | 952 | gk104_grctx_generate_main(struct gf100_gr_priv *priv, struct gf100_grctx *info) |
| 945 | { | 953 | { |
| 946 | struct gf100_grctx_oclass *oclass = (void *)nv_engine(priv)->cclass; | 954 | struct gf100_grctx_oclass *oclass = (void *)nv_engine(priv)->cclass; |
| @@ -970,13 +978,7 @@ gk104_grctx_generate_main(struct gf100_gr_priv *priv, struct gf100_grctx *info) | |||
| 970 | nv_wr32(priv, 0x4064d0 + (i * 0x04), 0x00000000); | 978 | nv_wr32(priv, 0x4064d0 + (i * 0x04), 0x00000000); |
| 971 | 979 | ||
| 972 | nv_wr32(priv, 0x405b00, (priv->tpc_total << 8) | priv->gpc_nr); | 980 | nv_wr32(priv, 0x405b00, (priv->tpc_total << 8) | priv->gpc_nr); |
| 973 | if (priv->gpc_nr == 1) { | 981 | gk104_grctx_generate_rop_active_fbps(priv); |
| 974 | nv_mask(priv, 0x408850, 0x0000000f, priv->tpc_nr[0]); | ||
| 975 | nv_mask(priv, 0x408958, 0x0000000f, priv->tpc_nr[0]); | ||
| 976 | } else { | ||
| 977 | nv_mask(priv, 0x408850, 0x0000000f, priv->gpc_nr); | ||
| 978 | nv_mask(priv, 0x408958, 0x0000000f, priv->gpc_nr); | ||
| 979 | } | ||
| 980 | nv_mask(priv, 0x419f78, 0x00000001, 0x00000000); | 982 | nv_mask(priv, 0x419f78, 0x00000001, 0x00000000); |
| 981 | 983 | ||
| 982 | gf100_gr_icmd(priv, oclass->icmd); | 984 | gf100_gr_icmd(priv, oclass->icmd); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c index b2fae6e389e2..fbeaae3ae6ce 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.c | |||
| @@ -699,7 +699,7 @@ gm107_grctx_pack_hub[] = { | |||
| 699 | {} | 699 | {} |
| 700 | }; | 700 | }; |
| 701 | 701 | ||
| 702 | static const struct gf100_gr_init | 702 | const struct gf100_gr_init |
| 703 | gm107_grctx_init_gpc_unk_0[] = { | 703 | gm107_grctx_init_gpc_unk_0[] = { |
| 704 | { 0x418380, 1, 0x04, 0x00000056 }, | 704 | { 0x418380, 1, 0x04, 0x00000056 }, |
| 705 | {} | 705 | {} |
| @@ -834,7 +834,7 @@ gm107_grctx_init_cbm_0[] = { | |||
| 834 | {} | 834 | {} |
| 835 | }; | 835 | }; |
| 836 | 836 | ||
| 837 | static const struct gf100_gr_init | 837 | const struct gf100_gr_init |
| 838 | gm107_grctx_init_wwdx_0[] = { | 838 | gm107_grctx_init_wwdx_0[] = { |
| 839 | { 0x41bf00, 1, 0x04, 0x0a418820 }, | 839 | { 0x41bf00, 1, 0x04, 0x0a418820 }, |
| 840 | { 0x41bf04, 1, 0x04, 0x062080e6 }, | 840 | { 0x41bf04, 1, 0x04, 0x062080e6 }, |
| @@ -860,7 +860,7 @@ gm107_grctx_pack_ppc[] = { | |||
| 860 | * PGRAPH context implementation | 860 | * PGRAPH context implementation |
| 861 | ******************************************************************************/ | 861 | ******************************************************************************/ |
| 862 | 862 | ||
| 863 | static void | 863 | void |
| 864 | gm107_grctx_generate_bundle(struct gf100_grctx *info) | 864 | gm107_grctx_generate_bundle(struct gf100_grctx *info) |
| 865 | { | 865 | { |
| 866 | const struct gf100_grctx_oclass *impl = gf100_grctx_impl(info->priv); | 866 | const struct gf100_grctx_oclass *impl = gf100_grctx_impl(info->priv); |
| @@ -877,7 +877,7 @@ gm107_grctx_generate_bundle(struct gf100_grctx *info) | |||
| 877 | mmio_wr32(info, 0x4064c8, (state_limit << 16) | token_limit); | 877 | mmio_wr32(info, 0x4064c8, (state_limit << 16) | token_limit); |
| 878 | } | 878 | } |
| 879 | 879 | ||
| 880 | static void | 880 | void |
| 881 | gm107_grctx_generate_pagepool(struct gf100_grctx *info) | 881 | gm107_grctx_generate_pagepool(struct gf100_grctx *info) |
| 882 | { | 882 | { |
| 883 | const struct gf100_grctx_oclass *impl = gf100_grctx_impl(info->priv); | 883 | const struct gf100_grctx_oclass *impl = gf100_grctx_impl(info->priv); |
| @@ -892,7 +892,7 @@ gm107_grctx_generate_pagepool(struct gf100_grctx *info) | |||
| 892 | mmio_wr32(info, 0x418e30, 0x80000000); /* guess at it being related */ | 892 | mmio_wr32(info, 0x418e30, 0x80000000); /* guess at it being related */ |
| 893 | } | 893 | } |
| 894 | 894 | ||
| 895 | static void | 895 | void |
| 896 | gm107_grctx_generate_attrib(struct gf100_grctx *info) | 896 | gm107_grctx_generate_attrib(struct gf100_grctx *info) |
| 897 | { | 897 | { |
| 898 | struct gf100_gr_priv *priv = info->priv; | 898 | struct gf100_gr_priv *priv = info->priv; |
| @@ -926,7 +926,7 @@ gm107_grctx_generate_attrib(struct gf100_grctx *info) | |||
| 926 | mmio_wr32(info, o + 0xe4, as); | 926 | mmio_wr32(info, o + 0xe4, as); |
| 927 | mmio_wr32(info, o + 0xf8, ao); | 927 | mmio_wr32(info, o + 0xf8, ao); |
| 928 | ao += impl->alpha_nr_max * priv->ppc_tpc_nr[gpc][ppc]; | 928 | ao += impl->alpha_nr_max * priv->ppc_tpc_nr[gpc][ppc]; |
| 929 | mmio_wr32(info, u, (0x715 /*XXX*/ << 16) | bs); | 929 | mmio_wr32(info, u, ((bs / 3 /*XXX*/) << 16) | bs); |
| 930 | } | 930 | } |
| 931 | } | 931 | } |
| 932 | } | 932 | } |
| @@ -982,13 +982,7 @@ gm107_grctx_generate_main(struct gf100_gr_priv *priv, struct gf100_grctx *info) | |||
| 982 | 982 | ||
| 983 | nv_wr32(priv, 0x405b00, (priv->tpc_total << 8) | priv->gpc_nr); | 983 | nv_wr32(priv, 0x405b00, (priv->tpc_total << 8) | priv->gpc_nr); |
| 984 | 984 | ||
| 985 | if (priv->gpc_nr == 1) { | 985 | gk104_grctx_generate_rop_active_fbps(priv); |
| 986 | nv_mask(priv, 0x408850, 0x0000000f, priv->tpc_nr[0]); | ||
| 987 | nv_mask(priv, 0x408958, 0x0000000f, priv->tpc_nr[0]); | ||
| 988 | } else { | ||
| 989 | nv_mask(priv, 0x408850, 0x0000000f, priv->gpc_nr); | ||
| 990 | nv_mask(priv, 0x408958, 0x0000000f, priv->gpc_nr); | ||
| 991 | } | ||
| 992 | 986 | ||
| 993 | gf100_gr_icmd(priv, oclass->icmd); | 987 | gf100_gr_icmd(priv, oclass->icmd); |
| 994 | nv_wr32(priv, 0x404154, 0x00000400); | 988 | nv_wr32(priv, 0x404154, 0x00000400); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm204.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm204.c new file mode 100644 index 000000000000..ea8e66151aa8 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm204.c | |||
| @@ -0,0 +1,1054 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
| 23 | */ | ||
| 24 | #include "ctxgf100.h" | ||
| 25 | |||
| 26 | /******************************************************************************* | ||
| 27 | * PGRAPH context register lists | ||
| 28 | ******************************************************************************/ | ||
| 29 | |||
| 30 | static const struct gf100_gr_init | ||
| 31 | gm204_grctx_init_icmd_0[] = { | ||
| 32 | { 0x001000, 1, 0x01, 0x00000002 }, | ||
| 33 | { 0x0006aa, 1, 0x01, 0x00000001 }, | ||
| 34 | { 0x0006ad, 2, 0x01, 0x00000100 }, | ||
| 35 | { 0x0006b1, 1, 0x01, 0x00000011 }, | ||
| 36 | { 0x00078c, 1, 0x01, 0x00000008 }, | ||
| 37 | { 0x000792, 1, 0x01, 0x00000001 }, | ||
| 38 | { 0x000794, 3, 0x01, 0x00000001 }, | ||
| 39 | { 0x000797, 1, 0x01, 0x000000cf }, | ||
| 40 | { 0x00079a, 1, 0x01, 0x00000002 }, | ||
| 41 | { 0x0007a1, 1, 0x01, 0x00000001 }, | ||
| 42 | { 0x0007a3, 3, 0x01, 0x00000001 }, | ||
| 43 | { 0x000831, 1, 0x01, 0x00000004 }, | ||
| 44 | { 0x01e100, 1, 0x01, 0x00000001 }, | ||
| 45 | { 0x001000, 1, 0x01, 0x00000008 }, | ||
| 46 | { 0x000039, 3, 0x01, 0x00000000 }, | ||
| 47 | { 0x000380, 1, 0x01, 0x00000001 }, | ||
| 48 | { 0x000366, 2, 0x01, 0x00000000 }, | ||
| 49 | { 0x000368, 1, 0x01, 0x00000fff }, | ||
| 50 | { 0x000370, 2, 0x01, 0x00000000 }, | ||
| 51 | { 0x000372, 1, 0x01, 0x000fffff }, | ||
| 52 | { 0x000374, 1, 0x01, 0x00000100 }, | ||
| 53 | { 0x000818, 8, 0x01, 0x00000000 }, | ||
| 54 | { 0x000848, 16, 0x01, 0x00000000 }, | ||
| 55 | { 0x000738, 1, 0x01, 0x00000000 }, | ||
| 56 | { 0x000b07, 1, 0x01, 0x00000002 }, | ||
| 57 | { 0x000b08, 2, 0x01, 0x00000100 }, | ||
| 58 | { 0x000b0a, 1, 0x01, 0x00000001 }, | ||
| 59 | { 0x000a04, 1, 0x01, 0x000000ff }, | ||
| 60 | { 0x000a0b, 1, 0x01, 0x00000040 }, | ||
| 61 | { 0x00097f, 1, 0x01, 0x00000100 }, | ||
| 62 | { 0x000a02, 1, 0x01, 0x00000001 }, | ||
| 63 | { 0x000809, 1, 0x01, 0x00000007 }, | ||
| 64 | { 0x00c221, 1, 0x01, 0x00000040 }, | ||
| 65 | { 0x00c401, 1, 0x01, 0x00000001 }, | ||
| 66 | { 0x00c402, 1, 0x01, 0x00010001 }, | ||
| 67 | { 0x00c403, 2, 0x01, 0x00000001 }, | ||
| 68 | { 0x00c40e, 1, 0x01, 0x00000020 }, | ||
| 69 | { 0x01e100, 1, 0x01, 0x00000001 }, | ||
| 70 | { 0x001000, 1, 0x01, 0x00000001 }, | ||
| 71 | { 0x000b07, 1, 0x01, 0x00000002 }, | ||
| 72 | { 0x000b08, 2, 0x01, 0x00000100 }, | ||
| 73 | { 0x000b0a, 1, 0x01, 0x00000001 }, | ||
| 74 | { 0x01e100, 1, 0x01, 0x00000001 }, | ||
| 75 | { 0x001000, 1, 0x01, 0x00000004 }, | ||
| 76 | { 0x000039, 3, 0x01, 0x00000000 }, | ||
| 77 | { 0x0000a9, 1, 0x01, 0x0000ffff }, | ||
| 78 | { 0x000038, 1, 0x01, 0x0fac6881 }, | ||
| 79 | { 0x00003d, 1, 0x01, 0x00000001 }, | ||
| 80 | { 0x0000e8, 8, 0x01, 0x00000400 }, | ||
| 81 | { 0x000078, 8, 0x01, 0x00000300 }, | ||
| 82 | { 0x000050, 1, 0x01, 0x00000011 }, | ||
| 83 | { 0x000058, 8, 0x01, 0x00000008 }, | ||
| 84 | { 0x000208, 8, 0x01, 0x00000001 }, | ||
| 85 | { 0x000081, 1, 0x01, 0x00000001 }, | ||
| 86 | { 0x000085, 1, 0x01, 0x00000004 }, | ||
| 87 | { 0x000088, 1, 0x01, 0x00000400 }, | ||
| 88 | { 0x000090, 1, 0x01, 0x00000300 }, | ||
| 89 | { 0x000098, 1, 0x01, 0x00001001 }, | ||
| 90 | { 0x0000e3, 1, 0x01, 0x00000001 }, | ||
| 91 | { 0x0000da, 1, 0x01, 0x00000001 }, | ||
| 92 | { 0x0000b4, 4, 0x01, 0x88888888 }, | ||
| 93 | { 0x0000f8, 1, 0x01, 0x00000003 }, | ||
| 94 | { 0x0000fa, 1, 0x01, 0x00000001 }, | ||
| 95 | { 0x0000b1, 2, 0x01, 0x00000001 }, | ||
| 96 | { 0x00009f, 4, 0x01, 0x0000ffff }, | ||
| 97 | { 0x0000a8, 1, 0x01, 0x0000ffff }, | ||
| 98 | { 0x0000ad, 1, 0x01, 0x0000013e }, | ||
| 99 | { 0x0000e1, 1, 0x01, 0x00000010 }, | ||
| 100 | { 0x000290, 16, 0x01, 0x00000000 }, | ||
| 101 | { 0x0003b0, 16, 0x01, 0x00000000 }, | ||
| 102 | { 0x0002a0, 16, 0x01, 0x00000000 }, | ||
| 103 | { 0x000420, 16, 0x01, 0x00000000 }, | ||
| 104 | { 0x0002b0, 16, 0x01, 0x00000000 }, | ||
| 105 | { 0x000430, 16, 0x01, 0x00000000 }, | ||
| 106 | { 0x0002c0, 16, 0x01, 0x00000000 }, | ||
| 107 | { 0x0004d0, 16, 0x01, 0x00000000 }, | ||
| 108 | { 0x000720, 16, 0x01, 0x00000000 }, | ||
| 109 | { 0x0008c0, 16, 0x01, 0x00000000 }, | ||
| 110 | { 0x000890, 16, 0x01, 0x00000000 }, | ||
| 111 | { 0x0008e0, 16, 0x01, 0x00000000 }, | ||
| 112 | { 0x0008a0, 16, 0x01, 0x00000000 }, | ||
| 113 | { 0x0008f0, 16, 0x01, 0x00000000 }, | ||
| 114 | { 0x00094c, 1, 0x01, 0x000000ff }, | ||
| 115 | { 0x00094d, 1, 0x01, 0xffffffff }, | ||
| 116 | { 0x00094e, 1, 0x01, 0x00000002 }, | ||
| 117 | { 0x0002f2, 2, 0x01, 0x00000001 }, | ||
| 118 | { 0x0002f5, 1, 0x01, 0x00000001 }, | ||
| 119 | { 0x0002f7, 1, 0x01, 0x00000001 }, | ||
| 120 | { 0x000303, 1, 0x01, 0x00000001 }, | ||
| 121 | { 0x0002e6, 1, 0x01, 0x00000001 }, | ||
| 122 | { 0x000466, 1, 0x01, 0x00000052 }, | ||
| 123 | { 0x000301, 1, 0x01, 0x3f800000 }, | ||
| 124 | { 0x000304, 1, 0x01, 0x30201000 }, | ||
| 125 | { 0x000305, 1, 0x01, 0x70605040 }, | ||
| 126 | { 0x000306, 1, 0x01, 0xb8a89888 }, | ||
| 127 | { 0x000307, 1, 0x01, 0xf8e8d8c8 }, | ||
| 128 | { 0x00030a, 1, 0x01, 0x00ffff00 }, | ||
| 129 | { 0x00030b, 1, 0x01, 0x0000001a }, | ||
| 130 | { 0x00030c, 1, 0x01, 0x00000001 }, | ||
| 131 | { 0x000318, 1, 0x01, 0x00000001 }, | ||
| 132 | { 0x000340, 1, 0x01, 0x00000000 }, | ||
| 133 | { 0x00037d, 1, 0x01, 0x00000006 }, | ||
| 134 | { 0x0003a0, 1, 0x01, 0x00000002 }, | ||
| 135 | { 0x0003aa, 1, 0x01, 0x00000001 }, | ||
| 136 | { 0x0003a9, 1, 0x01, 0x00000001 }, | ||
| 137 | { 0x000380, 1, 0x01, 0x00000001 }, | ||
| 138 | { 0x000383, 1, 0x01, 0x00000011 }, | ||
| 139 | { 0x000360, 1, 0x01, 0x00000040 }, | ||
| 140 | { 0x000366, 2, 0x01, 0x00000000 }, | ||
| 141 | { 0x000368, 1, 0x01, 0x00000fff }, | ||
| 142 | { 0x000370, 2, 0x01, 0x00000000 }, | ||
| 143 | { 0x000372, 1, 0x01, 0x000fffff }, | ||
| 144 | { 0x000374, 1, 0x01, 0x00000100 }, | ||
| 145 | { 0x00037a, 1, 0x01, 0x00000012 }, | ||
| 146 | { 0x000619, 1, 0x01, 0x00000003 }, | ||
| 147 | { 0x000811, 1, 0x01, 0x00000003 }, | ||
| 148 | { 0x000812, 1, 0x01, 0x00000004 }, | ||
| 149 | { 0x000813, 1, 0x01, 0x00000006 }, | ||
| 150 | { 0x000814, 1, 0x01, 0x00000008 }, | ||
| 151 | { 0x000815, 1, 0x01, 0x0000000b }, | ||
| 152 | { 0x000800, 6, 0x01, 0x00000001 }, | ||
| 153 | { 0x000632, 1, 0x01, 0x00000001 }, | ||
| 154 | { 0x000633, 1, 0x01, 0x00000002 }, | ||
| 155 | { 0x000634, 1, 0x01, 0x00000003 }, | ||
| 156 | { 0x000635, 1, 0x01, 0x00000004 }, | ||
| 157 | { 0x000654, 1, 0x01, 0x3f800000 }, | ||
| 158 | { 0x000657, 1, 0x01, 0x3f800000 }, | ||
| 159 | { 0x000655, 2, 0x01, 0x3f800000 }, | ||
| 160 | { 0x0006cd, 1, 0x01, 0x3f800000 }, | ||
| 161 | { 0x0007f5, 1, 0x01, 0x3f800000 }, | ||
| 162 | { 0x0007dc, 1, 0x01, 0x39291909 }, | ||
| 163 | { 0x0007dd, 1, 0x01, 0x79695949 }, | ||
| 164 | { 0x0007de, 1, 0x01, 0xb9a99989 }, | ||
| 165 | { 0x0007df, 1, 0x01, 0xf9e9d9c9 }, | ||
| 166 | { 0x0007e8, 1, 0x01, 0x00003210 }, | ||
| 167 | { 0x0007e9, 1, 0x01, 0x00007654 }, | ||
| 168 | { 0x0007ea, 1, 0x01, 0x00000098 }, | ||
| 169 | { 0x0007ec, 1, 0x01, 0x39291909 }, | ||
| 170 | { 0x0007ed, 1, 0x01, 0x79695949 }, | ||
| 171 | { 0x0007ee, 1, 0x01, 0xb9a99989 }, | ||
| 172 | { 0x0007ef, 1, 0x01, 0xf9e9d9c9 }, | ||
| 173 | { 0x0007f0, 1, 0x01, 0x00003210 }, | ||
| 174 | { 0x0007f1, 1, 0x01, 0x00007654 }, | ||
| 175 | { 0x0007f2, 1, 0x01, 0x00000098 }, | ||
| 176 | { 0x0005a5, 1, 0x01, 0x00000001 }, | ||
| 177 | { 0x0005aa, 1, 0x01, 0x00000002 }, | ||
| 178 | { 0x0005cb, 1, 0x01, 0x00000004 }, | ||
| 179 | { 0x0005d0, 1, 0x01, 0x20181008 }, | ||
| 180 | { 0x0005d1, 1, 0x01, 0x40383028 }, | ||
| 181 | { 0x0005d2, 1, 0x01, 0x60585048 }, | ||
| 182 | { 0x0005d3, 1, 0x01, 0x80787068 }, | ||
| 183 | { 0x000980, 128, 0x01, 0x00000000 }, | ||
| 184 | { 0x000468, 1, 0x01, 0x00000004 }, | ||
| 185 | { 0x00046c, 1, 0x01, 0x00000001 }, | ||
| 186 | { 0x000470, 96, 0x01, 0x00000000 }, | ||
| 187 | { 0x0005e0, 16, 0x01, 0x00000d10 }, | ||
| 188 | { 0x000510, 16, 0x01, 0x3f800000 }, | ||
| 189 | { 0x000520, 1, 0x01, 0x000002b6 }, | ||
| 190 | { 0x000529, 1, 0x01, 0x00000001 }, | ||
| 191 | { 0x000530, 16, 0x01, 0xffff0000 }, | ||
| 192 | { 0x000550, 32, 0x01, 0xffff0000 }, | ||
| 193 | { 0x000585, 1, 0x01, 0x0000003f }, | ||
| 194 | { 0x000576, 1, 0x01, 0x00000003 }, | ||
| 195 | { 0x00057b, 1, 0x01, 0x00000059 }, | ||
| 196 | { 0x000586, 1, 0x01, 0x00000040 }, | ||
| 197 | { 0x000582, 2, 0x01, 0x00000080 }, | ||
| 198 | { 0x000595, 1, 0x01, 0x00400040 }, | ||
| 199 | { 0x000596, 1, 0x01, 0x00000492 }, | ||
| 200 | { 0x000597, 1, 0x01, 0x08080203 }, | ||
| 201 | { 0x0005ad, 1, 0x01, 0x00000008 }, | ||
| 202 | { 0x000598, 1, 0x01, 0x00020001 }, | ||
| 203 | { 0x0005d4, 1, 0x01, 0x00000001 }, | ||
| 204 | { 0x0005c2, 1, 0x01, 0x00000001 }, | ||
| 205 | { 0x000638, 2, 0x01, 0x00000001 }, | ||
| 206 | { 0x00063a, 1, 0x01, 0x00000002 }, | ||
| 207 | { 0x00063b, 2, 0x01, 0x00000001 }, | ||
| 208 | { 0x00063d, 1, 0x01, 0x00000002 }, | ||
| 209 | { 0x00063e, 1, 0x01, 0x00000001 }, | ||
| 210 | { 0x0008b8, 8, 0x01, 0x00000001 }, | ||
| 211 | { 0x000900, 8, 0x01, 0x00000001 }, | ||
| 212 | { 0x000908, 8, 0x01, 0x00000002 }, | ||
| 213 | { 0x000910, 16, 0x01, 0x00000001 }, | ||
| 214 | { 0x000920, 8, 0x01, 0x00000002 }, | ||
| 215 | { 0x000928, 8, 0x01, 0x00000001 }, | ||
| 216 | { 0x000662, 1, 0x01, 0x00000001 }, | ||
| 217 | { 0x000648, 9, 0x01, 0x00000001 }, | ||
| 218 | { 0x000674, 1, 0x01, 0x00000001 }, | ||
| 219 | { 0x000658, 1, 0x01, 0x0000000f }, | ||
| 220 | { 0x0007ff, 1, 0x01, 0x0000000a }, | ||
| 221 | { 0x00066a, 1, 0x01, 0x40000000 }, | ||
| 222 | { 0x00066b, 1, 0x01, 0x10000000 }, | ||
| 223 | { 0x00066c, 2, 0x01, 0xffff0000 }, | ||
| 224 | { 0x0007af, 2, 0x01, 0x00000008 }, | ||
| 225 | { 0x0007f6, 1, 0x01, 0x00000001 }, | ||
| 226 | { 0x0006b2, 1, 0x01, 0x00000055 }, | ||
| 227 | { 0x0007ad, 1, 0x01, 0x00000003 }, | ||
| 228 | { 0x000971, 1, 0x01, 0x00000008 }, | ||
| 229 | { 0x000972, 1, 0x01, 0x00000040 }, | ||
| 230 | { 0x000973, 1, 0x01, 0x0000012c }, | ||
| 231 | { 0x00097c, 1, 0x01, 0x00000040 }, | ||
| 232 | { 0x000975, 1, 0x01, 0x00000020 }, | ||
| 233 | { 0x000976, 1, 0x01, 0x00000001 }, | ||
| 234 | { 0x000977, 1, 0x01, 0x00000020 }, | ||
| 235 | { 0x000978, 1, 0x01, 0x00000001 }, | ||
| 236 | { 0x000957, 1, 0x01, 0x00000003 }, | ||
| 237 | { 0x00095e, 1, 0x01, 0x20164010 }, | ||
| 238 | { 0x00095f, 1, 0x01, 0x00000020 }, | ||
| 239 | { 0x000a0d, 1, 0x01, 0x00000006 }, | ||
| 240 | { 0x00097d, 1, 0x01, 0x0000000c }, | ||
| 241 | { 0x000683, 1, 0x01, 0x00000006 }, | ||
| 242 | { 0x000687, 1, 0x01, 0x003fffff }, | ||
| 243 | { 0x0006a0, 1, 0x01, 0x00000005 }, | ||
| 244 | { 0x000840, 1, 0x01, 0x00400008 }, | ||
| 245 | { 0x000841, 1, 0x01, 0x08000080 }, | ||
| 246 | { 0x000842, 1, 0x01, 0x00400008 }, | ||
| 247 | { 0x000843, 1, 0x01, 0x08000080 }, | ||
| 248 | { 0x000818, 8, 0x01, 0x00000000 }, | ||
| 249 | { 0x000848, 16, 0x01, 0x00000000 }, | ||
| 250 | { 0x000738, 1, 0x01, 0x00000000 }, | ||
| 251 | { 0x0006aa, 1, 0x01, 0x00000001 }, | ||
| 252 | { 0x0006ab, 1, 0x01, 0x00000002 }, | ||
| 253 | { 0x0006ac, 1, 0x01, 0x00000080 }, | ||
| 254 | { 0x0006ad, 2, 0x01, 0x00000100 }, | ||
| 255 | { 0x0006b1, 1, 0x01, 0x00000011 }, | ||
| 256 | { 0x0006bb, 1, 0x01, 0x000000cf }, | ||
| 257 | { 0x0006ce, 1, 0x01, 0x2a712488 }, | ||
| 258 | { 0x000739, 1, 0x01, 0x4085c000 }, | ||
| 259 | { 0x00073a, 1, 0x01, 0x00000080 }, | ||
| 260 | { 0x000786, 1, 0x01, 0x80000100 }, | ||
| 261 | { 0x00073c, 1, 0x01, 0x00010100 }, | ||
| 262 | { 0x00073d, 1, 0x01, 0x02800000 }, | ||
| 263 | { 0x000787, 1, 0x01, 0x000000cf }, | ||
| 264 | { 0x00078c, 1, 0x01, 0x00000008 }, | ||
| 265 | { 0x000792, 1, 0x01, 0x00000001 }, | ||
| 266 | { 0x000794, 3, 0x01, 0x00000001 }, | ||
| 267 | { 0x000797, 1, 0x01, 0x000000cf }, | ||
| 268 | { 0x000836, 1, 0x01, 0x00000001 }, | ||
| 269 | { 0x00079a, 1, 0x01, 0x00000002 }, | ||
| 270 | { 0x000833, 1, 0x01, 0x04444480 }, | ||
| 271 | { 0x0007a1, 1, 0x01, 0x00000001 }, | ||
| 272 | { 0x0007a3, 3, 0x01, 0x00000001 }, | ||
| 273 | { 0x000831, 1, 0x01, 0x00000004 }, | ||
| 274 | { 0x000b07, 1, 0x01, 0x00000002 }, | ||
| 275 | { 0x000b08, 2, 0x01, 0x00000100 }, | ||
| 276 | { 0x000b0a, 1, 0x01, 0x00000001 }, | ||
| 277 | { 0x000a04, 1, 0x01, 0x000000ff }, | ||
| 278 | { 0x000a0b, 1, 0x01, 0x00000040 }, | ||
| 279 | { 0x00097f, 1, 0x01, 0x00000100 }, | ||
| 280 | { 0x000a02, 1, 0x01, 0x00000001 }, | ||
| 281 | { 0x000809, 1, 0x01, 0x00000007 }, | ||
| 282 | { 0x00c221, 1, 0x01, 0x00000040 }, | ||
| 283 | { 0x00c1b0, 8, 0x01, 0x0000000f }, | ||
| 284 | { 0x00c1b8, 1, 0x01, 0x0fac6881 }, | ||
| 285 | { 0x00c1b9, 1, 0x01, 0x00fac688 }, | ||
| 286 | { 0x00c401, 1, 0x01, 0x00000001 }, | ||
| 287 | { 0x00c402, 1, 0x01, 0x00010001 }, | ||
| 288 | { 0x00c403, 2, 0x01, 0x00000001 }, | ||
| 289 | { 0x00c40e, 1, 0x01, 0x00000020 }, | ||
| 290 | { 0x00c413, 4, 0x01, 0x88888888 }, | ||
| 291 | { 0x00c423, 1, 0x01, 0x0000ff00 }, | ||
| 292 | { 0x00c420, 1, 0x01, 0x00880101 }, | ||
| 293 | { 0x01e100, 1, 0x01, 0x00000001 }, | ||
| 294 | {} | ||
| 295 | }; | ||
| 296 | |||
| 297 | const struct gf100_gr_pack | ||
| 298 | gm204_grctx_pack_icmd[] = { | ||
| 299 | { gm204_grctx_init_icmd_0 }, | ||
| 300 | {} | ||
| 301 | }; | ||
| 302 | |||
| 303 | static const struct gf100_gr_init | ||
| 304 | gm204_grctx_init_b197_0[] = { | ||
| 305 | { 0x000800, 8, 0x40, 0x00000000 }, | ||
| 306 | { 0x000804, 8, 0x40, 0x00000000 }, | ||
| 307 | { 0x000808, 8, 0x40, 0x00000400 }, | ||
| 308 | { 0x00080c, 8, 0x40, 0x00000300 }, | ||
| 309 | { 0x000810, 1, 0x04, 0x000000cf }, | ||
| 310 | { 0x000850, 7, 0x40, 0x00000000 }, | ||
| 311 | { 0x000814, 8, 0x40, 0x00000040 }, | ||
| 312 | { 0x000818, 8, 0x40, 0x00000001 }, | ||
| 313 | { 0x00081c, 8, 0x40, 0x00000000 }, | ||
| 314 | { 0x000820, 8, 0x40, 0x00000000 }, | ||
| 315 | { 0x001c00, 16, 0x10, 0x00000000 }, | ||
| 316 | { 0x001c04, 16, 0x10, 0x00000000 }, | ||
| 317 | { 0x001c08, 16, 0x10, 0x00000000 }, | ||
| 318 | { 0x001c0c, 16, 0x10, 0x00000000 }, | ||
| 319 | { 0x001d00, 16, 0x10, 0x00000000 }, | ||
| 320 | { 0x001d04, 16, 0x10, 0x00000000 }, | ||
| 321 | { 0x001d08, 16, 0x10, 0x00000000 }, | ||
| 322 | { 0x001d0c, 16, 0x10, 0x00000000 }, | ||
| 323 | { 0x001f00, 16, 0x08, 0x00000000 }, | ||
| 324 | { 0x001f04, 16, 0x08, 0x00000000 }, | ||
| 325 | { 0x001f80, 16, 0x08, 0x00000000 }, | ||
| 326 | { 0x001f84, 16, 0x08, 0x00000000 }, | ||
| 327 | { 0x002000, 1, 0x04, 0x00000000 }, | ||
| 328 | { 0x002040, 1, 0x04, 0x00000011 }, | ||
| 329 | { 0x002080, 1, 0x04, 0x00000020 }, | ||
| 330 | { 0x0020c0, 1, 0x04, 0x00000030 }, | ||
| 331 | { 0x002100, 1, 0x04, 0x00000040 }, | ||
| 332 | { 0x002140, 1, 0x04, 0x00000051 }, | ||
| 333 | { 0x00200c, 6, 0x40, 0x00000001 }, | ||
| 334 | { 0x002010, 1, 0x04, 0x00000000 }, | ||
| 335 | { 0x002050, 1, 0x04, 0x00000000 }, | ||
| 336 | { 0x002090, 1, 0x04, 0x00000001 }, | ||
| 337 | { 0x0020d0, 1, 0x04, 0x00000002 }, | ||
| 338 | { 0x002110, 1, 0x04, 0x00000003 }, | ||
| 339 | { 0x002150, 1, 0x04, 0x00000004 }, | ||
| 340 | { 0x000380, 4, 0x20, 0x00000000 }, | ||
| 341 | { 0x000384, 4, 0x20, 0x00000000 }, | ||
| 342 | { 0x000388, 4, 0x20, 0x00000000 }, | ||
| 343 | { 0x00038c, 4, 0x20, 0x00000000 }, | ||
| 344 | { 0x000700, 4, 0x10, 0x00000000 }, | ||
| 345 | { 0x000704, 4, 0x10, 0x00000000 }, | ||
| 346 | { 0x000708, 4, 0x10, 0x00000000 }, | ||
| 347 | { 0x002800, 128, 0x04, 0x00000000 }, | ||
| 348 | { 0x000a00, 16, 0x20, 0x00000000 }, | ||
| 349 | { 0x000a04, 16, 0x20, 0x00000000 }, | ||
| 350 | { 0x000a08, 16, 0x20, 0x00000000 }, | ||
| 351 | { 0x000a0c, 16, 0x20, 0x00000000 }, | ||
| 352 | { 0x000a10, 16, 0x20, 0x00000000 }, | ||
| 353 | { 0x000a14, 16, 0x20, 0x00000000 }, | ||
| 354 | { 0x000a18, 16, 0x20, 0x00006420 }, | ||
| 355 | { 0x000a1c, 16, 0x20, 0x00000000 }, | ||
| 356 | { 0x000c00, 16, 0x10, 0x00000000 }, | ||
| 357 | { 0x000c04, 16, 0x10, 0x00000000 }, | ||
| 358 | { 0x000c08, 16, 0x10, 0x00000000 }, | ||
| 359 | { 0x000c0c, 16, 0x10, 0x3f800000 }, | ||
| 360 | { 0x000d00, 8, 0x08, 0xffff0000 }, | ||
| 361 | { 0x000d04, 8, 0x08, 0xffff0000 }, | ||
| 362 | { 0x000e00, 16, 0x10, 0x00000000 }, | ||
| 363 | { 0x000e04, 16, 0x10, 0xffff0000 }, | ||
| 364 | { 0x000e08, 16, 0x10, 0xffff0000 }, | ||
| 365 | { 0x000d40, 4, 0x08, 0x00000000 }, | ||
| 366 | { 0x000d44, 4, 0x08, 0x00000000 }, | ||
| 367 | { 0x001e00, 8, 0x20, 0x00000001 }, | ||
| 368 | { 0x001e04, 8, 0x20, 0x00000001 }, | ||
| 369 | { 0x001e08, 8, 0x20, 0x00000002 }, | ||
| 370 | { 0x001e0c, 8, 0x20, 0x00000001 }, | ||
| 371 | { 0x001e10, 8, 0x20, 0x00000001 }, | ||
| 372 | { 0x001e14, 8, 0x20, 0x00000002 }, | ||
| 373 | { 0x001e18, 8, 0x20, 0x00000001 }, | ||
| 374 | { 0x001480, 8, 0x10, 0x00000000 }, | ||
| 375 | { 0x001484, 8, 0x10, 0x00000000 }, | ||
| 376 | { 0x001488, 8, 0x10, 0x00000000 }, | ||
| 377 | { 0x003400, 128, 0x04, 0x00000000 }, | ||
| 378 | { 0x00030c, 1, 0x04, 0x00000001 }, | ||
| 379 | { 0x001944, 1, 0x04, 0x00000000 }, | ||
| 380 | { 0x001514, 1, 0x04, 0x00000000 }, | ||
| 381 | { 0x000d68, 1, 0x04, 0x0000ffff }, | ||
| 382 | { 0x00121c, 1, 0x04, 0x0fac6881 }, | ||
| 383 | { 0x000fac, 1, 0x04, 0x00000001 }, | ||
| 384 | { 0x001538, 1, 0x04, 0x00000001 }, | ||
| 385 | { 0x000fe0, 2, 0x04, 0x00000000 }, | ||
| 386 | { 0x000fe8, 1, 0x04, 0x00000014 }, | ||
| 387 | { 0x000fec, 1, 0x04, 0x00000040 }, | ||
| 388 | { 0x000ff0, 1, 0x04, 0x00000000 }, | ||
| 389 | { 0x00179c, 1, 0x04, 0x00000000 }, | ||
| 390 | { 0x001228, 1, 0x04, 0x00000400 }, | ||
| 391 | { 0x00122c, 1, 0x04, 0x00000300 }, | ||
| 392 | { 0x001230, 1, 0x04, 0x00010001 }, | ||
| 393 | { 0x0007f8, 1, 0x04, 0x00000000 }, | ||
| 394 | { 0x001208, 1, 0x04, 0x00000000 }, | ||
| 395 | { 0x0015b4, 1, 0x04, 0x00000001 }, | ||
| 396 | { 0x0015cc, 1, 0x04, 0x00000000 }, | ||
| 397 | { 0x001534, 1, 0x04, 0x00000000 }, | ||
| 398 | { 0x000754, 1, 0x04, 0x00000001 }, | ||
| 399 | { 0x000fb0, 1, 0x04, 0x00000000 }, | ||
| 400 | { 0x0015d0, 1, 0x04, 0x00000000 }, | ||
| 401 | { 0x0011e0, 4, 0x04, 0x88888888 }, | ||
| 402 | { 0x00153c, 1, 0x04, 0x00000000 }, | ||
| 403 | { 0x0016b4, 1, 0x04, 0x00000003 }, | ||
| 404 | { 0x000fa4, 1, 0x04, 0x00000001 }, | ||
| 405 | { 0x000fbc, 4, 0x04, 0x0000ffff }, | ||
| 406 | { 0x000fa8, 1, 0x04, 0x0000ffff }, | ||
| 407 | { 0x000df8, 2, 0x04, 0x00000000 }, | ||
| 408 | { 0x001948, 1, 0x04, 0x00000000 }, | ||
| 409 | { 0x001970, 1, 0x04, 0x00000001 }, | ||
| 410 | { 0x00161c, 1, 0x04, 0x000009f0 }, | ||
| 411 | { 0x000dcc, 1, 0x04, 0x00000010 }, | ||
| 412 | { 0x0015e4, 1, 0x04, 0x00000000 }, | ||
| 413 | { 0x001160, 32, 0x04, 0x25e00040 }, | ||
| 414 | { 0x001880, 32, 0x04, 0x00000000 }, | ||
| 415 | { 0x000f84, 2, 0x04, 0x00000000 }, | ||
| 416 | { 0x0017c8, 2, 0x04, 0x00000000 }, | ||
| 417 | { 0x0017d0, 1, 0x04, 0x000000ff }, | ||
| 418 | { 0x0017d4, 1, 0x04, 0xffffffff }, | ||
| 419 | { 0x0017d8, 1, 0x04, 0x00000002 }, | ||
| 420 | { 0x0017dc, 1, 0x04, 0x00000000 }, | ||
| 421 | { 0x0015f4, 2, 0x04, 0x00000000 }, | ||
| 422 | { 0x001434, 2, 0x04, 0x00000000 }, | ||
| 423 | { 0x000d74, 1, 0x04, 0x00000000 }, | ||
| 424 | { 0x0013a4, 1, 0x04, 0x00000000 }, | ||
| 425 | { 0x001318, 1, 0x04, 0x00000001 }, | ||
| 426 | { 0x001080, 2, 0x04, 0x00000000 }, | ||
| 427 | { 0x001088, 2, 0x04, 0x00000001 }, | ||
| 428 | { 0x001090, 1, 0x04, 0x00000000 }, | ||
| 429 | { 0x001094, 1, 0x04, 0x00000001 }, | ||
| 430 | { 0x001098, 1, 0x04, 0x00000000 }, | ||
| 431 | { 0x00109c, 1, 0x04, 0x00000001 }, | ||
| 432 | { 0x0010a0, 2, 0x04, 0x00000000 }, | ||
| 433 | { 0x001644, 1, 0x04, 0x00000000 }, | ||
| 434 | { 0x000748, 1, 0x04, 0x00000000 }, | ||
| 435 | { 0x000de8, 1, 0x04, 0x00000000 }, | ||
| 436 | { 0x001648, 1, 0x04, 0x00000000 }, | ||
| 437 | { 0x0012a4, 1, 0x04, 0x00000000 }, | ||
| 438 | { 0x001120, 4, 0x04, 0x00000000 }, | ||
| 439 | { 0x001118, 1, 0x04, 0x00000000 }, | ||
| 440 | { 0x00164c, 1, 0x04, 0x00000000 }, | ||
| 441 | { 0x001658, 1, 0x04, 0x00000000 }, | ||
| 442 | { 0x001910, 1, 0x04, 0x00000290 }, | ||
| 443 | { 0x001518, 1, 0x04, 0x00000000 }, | ||
| 444 | { 0x00165c, 1, 0x04, 0x00000001 }, | ||
| 445 | { 0x001520, 1, 0x04, 0x00000000 }, | ||
| 446 | { 0x001604, 1, 0x04, 0x00000000 }, | ||
| 447 | { 0x001570, 1, 0x04, 0x00000000 }, | ||
| 448 | { 0x0013b0, 2, 0x04, 0x3f800000 }, | ||
| 449 | { 0x00020c, 1, 0x04, 0x00000000 }, | ||
| 450 | { 0x001670, 1, 0x04, 0x30201000 }, | ||
| 451 | { 0x001674, 1, 0x04, 0x70605040 }, | ||
| 452 | { 0x001678, 1, 0x04, 0xb8a89888 }, | ||
| 453 | { 0x00167c, 1, 0x04, 0xf8e8d8c8 }, | ||
| 454 | { 0x00166c, 1, 0x04, 0x00000000 }, | ||
| 455 | { 0x001680, 1, 0x04, 0x00ffff00 }, | ||
| 456 | { 0x0012d0, 1, 0x04, 0x00000003 }, | ||
| 457 | { 0x00113c, 1, 0x04, 0x00000000 }, | ||
| 458 | { 0x0012d4, 1, 0x04, 0x00000002 }, | ||
| 459 | { 0x001684, 2, 0x04, 0x00000000 }, | ||
| 460 | { 0x000dac, 2, 0x04, 0x00001b02 }, | ||
| 461 | { 0x000db4, 1, 0x04, 0x00000000 }, | ||
| 462 | { 0x00168c, 1, 0x04, 0x00000000 }, | ||
| 463 | { 0x0015bc, 1, 0x04, 0x00000000 }, | ||
| 464 | { 0x00156c, 1, 0x04, 0x00000000 }, | ||
| 465 | { 0x00187c, 1, 0x04, 0x00000000 }, | ||
| 466 | { 0x001110, 1, 0x04, 0x00000001 }, | ||
| 467 | { 0x000dc0, 3, 0x04, 0x00000000 }, | ||
| 468 | { 0x000f40, 5, 0x04, 0x00000000 }, | ||
| 469 | { 0x001234, 1, 0x04, 0x00000000 }, | ||
| 470 | { 0x001690, 1, 0x04, 0x00000000 }, | ||
| 471 | { 0x000790, 5, 0x04, 0x00000000 }, | ||
| 472 | { 0x00077c, 1, 0x04, 0x00000000 }, | ||
| 473 | { 0x001000, 1, 0x04, 0x00000010 }, | ||
| 474 | { 0x0010fc, 1, 0x04, 0x00000000 }, | ||
| 475 | { 0x001290, 1, 0x04, 0x00000000 }, | ||
| 476 | { 0x000218, 1, 0x04, 0x00000010 }, | ||
| 477 | { 0x0012d8, 1, 0x04, 0x00000000 }, | ||
| 478 | { 0x0012dc, 1, 0x04, 0x00000010 }, | ||
| 479 | { 0x000d94, 1, 0x04, 0x00000001 }, | ||
| 480 | { 0x00155c, 2, 0x04, 0x00000000 }, | ||
| 481 | { 0x001564, 1, 0x04, 0x00000fff }, | ||
| 482 | { 0x001574, 2, 0x04, 0x00000000 }, | ||
| 483 | { 0x00157c, 1, 0x04, 0x000fffff }, | ||
| 484 | { 0x001354, 1, 0x04, 0x00000000 }, | ||
| 485 | { 0x001610, 1, 0x04, 0x00000012 }, | ||
| 486 | { 0x001608, 2, 0x04, 0x00000000 }, | ||
| 487 | { 0x00260c, 1, 0x04, 0x00000000 }, | ||
| 488 | { 0x0007ac, 1, 0x04, 0x00000000 }, | ||
| 489 | { 0x00162c, 1, 0x04, 0x00000003 }, | ||
| 490 | { 0x000210, 1, 0x04, 0x00000000 }, | ||
| 491 | { 0x000320, 1, 0x04, 0x00000000 }, | ||
| 492 | { 0x000324, 6, 0x04, 0x3f800000 }, | ||
| 493 | { 0x000750, 1, 0x04, 0x00000000 }, | ||
| 494 | { 0x000760, 1, 0x04, 0x39291909 }, | ||
| 495 | { 0x000764, 1, 0x04, 0x79695949 }, | ||
| 496 | { 0x000768, 1, 0x04, 0xb9a99989 }, | ||
| 497 | { 0x00076c, 1, 0x04, 0xf9e9d9c9 }, | ||
| 498 | { 0x000770, 1, 0x04, 0x30201000 }, | ||
| 499 | { 0x000774, 1, 0x04, 0x70605040 }, | ||
| 500 | { 0x000778, 1, 0x04, 0x00009080 }, | ||
| 501 | { 0x000780, 1, 0x04, 0x39291909 }, | ||
| 502 | { 0x000784, 1, 0x04, 0x79695949 }, | ||
| 503 | { 0x000788, 1, 0x04, 0xb9a99989 }, | ||
| 504 | { 0x00078c, 1, 0x04, 0xf9e9d9c9 }, | ||
| 505 | { 0x0007d0, 1, 0x04, 0x30201000 }, | ||
| 506 | { 0x0007d4, 1, 0x04, 0x70605040 }, | ||
| 507 | { 0x0007d8, 1, 0x04, 0x00009080 }, | ||
| 508 | { 0x001004, 1, 0x04, 0x00000000 }, | ||
| 509 | { 0x001240, 8, 0x04, 0x00000000 }, | ||
| 510 | { 0x00037c, 1, 0x04, 0x00000001 }, | ||
| 511 | { 0x000740, 1, 0x04, 0x00000000 }, | ||
| 512 | { 0x001148, 1, 0x04, 0x00000000 }, | ||
| 513 | { 0x000fb4, 1, 0x04, 0x00000000 }, | ||
| 514 | { 0x000fb8, 1, 0x04, 0x00000002 }, | ||
| 515 | { 0x001130, 1, 0x04, 0x00000002 }, | ||
| 516 | { 0x000fd4, 2, 0x04, 0x00000000 }, | ||
| 517 | { 0x001030, 1, 0x04, 0x20181008 }, | ||
| 518 | { 0x001034, 1, 0x04, 0x40383028 }, | ||
| 519 | { 0x001038, 1, 0x04, 0x60585048 }, | ||
| 520 | { 0x00103c, 1, 0x04, 0x80787068 }, | ||
| 521 | { 0x000744, 1, 0x04, 0x00000000 }, | ||
| 522 | { 0x002600, 1, 0x04, 0x00000000 }, | ||
| 523 | { 0x001918, 1, 0x04, 0x00000000 }, | ||
| 524 | { 0x00191c, 1, 0x04, 0x00000900 }, | ||
| 525 | { 0x001920, 1, 0x04, 0x00000405 }, | ||
| 526 | { 0x001308, 1, 0x04, 0x00000001 }, | ||
| 527 | { 0x001924, 1, 0x04, 0x00000000 }, | ||
| 528 | { 0x0013ac, 1, 0x04, 0x00000000 }, | ||
| 529 | { 0x00192c, 1, 0x04, 0x00000001 }, | ||
| 530 | { 0x00193c, 1, 0x04, 0x00002c1c }, | ||
| 531 | { 0x000d7c, 1, 0x04, 0x00000000 }, | ||
| 532 | { 0x000f8c, 1, 0x04, 0x00000000 }, | ||
| 533 | { 0x0002c0, 1, 0x04, 0x00000001 }, | ||
| 534 | { 0x001510, 1, 0x04, 0x00000000 }, | ||
| 535 | { 0x001940, 1, 0x04, 0x00000000 }, | ||
| 536 | { 0x000ff4, 2, 0x04, 0x00000000 }, | ||
| 537 | { 0x00194c, 2, 0x04, 0x00000000 }, | ||
| 538 | { 0x001968, 1, 0x04, 0x00000000 }, | ||
| 539 | { 0x001590, 1, 0x04, 0x0000003f }, | ||
| 540 | { 0x0007e8, 4, 0x04, 0x00000000 }, | ||
| 541 | { 0x00196c, 1, 0x04, 0x00000011 }, | ||
| 542 | { 0x0002e4, 1, 0x04, 0x0000b001 }, | ||
| 543 | { 0x00036c, 2, 0x04, 0x00000000 }, | ||
| 544 | { 0x00197c, 1, 0x04, 0x00000000 }, | ||
| 545 | { 0x000fcc, 2, 0x04, 0x00000000 }, | ||
| 546 | { 0x0002d8, 1, 0x04, 0x00000040 }, | ||
| 547 | { 0x001980, 1, 0x04, 0x00000080 }, | ||
| 548 | { 0x001504, 1, 0x04, 0x00000080 }, | ||
| 549 | { 0x001984, 1, 0x04, 0x00000000 }, | ||
| 550 | { 0x000f60, 1, 0x04, 0x00000000 }, | ||
| 551 | { 0x000f64, 1, 0x04, 0x00400040 }, | ||
| 552 | { 0x000f68, 1, 0x04, 0x00002212 }, | ||
| 553 | { 0x000f6c, 1, 0x04, 0x08080203 }, | ||
| 554 | { 0x001108, 1, 0x04, 0x00000008 }, | ||
| 555 | { 0x000f70, 1, 0x04, 0x00080001 }, | ||
| 556 | { 0x000ffc, 1, 0x04, 0x00000000 }, | ||
| 557 | { 0x001134, 1, 0x04, 0x00000000 }, | ||
| 558 | { 0x000f1c, 1, 0x04, 0x00000000 }, | ||
| 559 | { 0x0011f8, 1, 0x04, 0x00000000 }, | ||
| 560 | { 0x001138, 1, 0x04, 0x00000001 }, | ||
| 561 | { 0x000300, 1, 0x04, 0x00000001 }, | ||
| 562 | { 0x0013a8, 1, 0x04, 0x00000000 }, | ||
| 563 | { 0x001224, 1, 0x04, 0x00000000 }, | ||
| 564 | { 0x0012ec, 1, 0x04, 0x00000000 }, | ||
| 565 | { 0x001310, 1, 0x04, 0x00000000 }, | ||
| 566 | { 0x001314, 1, 0x04, 0x00000001 }, | ||
| 567 | { 0x001380, 1, 0x04, 0x00000000 }, | ||
| 568 | { 0x001384, 4, 0x04, 0x00000001 }, | ||
| 569 | { 0x001394, 1, 0x04, 0x00000000 }, | ||
| 570 | { 0x00139c, 1, 0x04, 0x00000000 }, | ||
| 571 | { 0x001398, 1, 0x04, 0x00000000 }, | ||
| 572 | { 0x001594, 1, 0x04, 0x00000000 }, | ||
| 573 | { 0x001598, 4, 0x04, 0x00000001 }, | ||
| 574 | { 0x000f54, 3, 0x04, 0x00000000 }, | ||
| 575 | { 0x0019bc, 1, 0x04, 0x00000000 }, | ||
| 576 | { 0x000f9c, 2, 0x04, 0x00000000 }, | ||
| 577 | { 0x0012cc, 1, 0x04, 0x00000000 }, | ||
| 578 | { 0x0012e8, 1, 0x04, 0x00000000 }, | ||
| 579 | { 0x00130c, 1, 0x04, 0x00000001 }, | ||
| 580 | { 0x001360, 8, 0x04, 0x00000000 }, | ||
| 581 | { 0x00133c, 2, 0x04, 0x00000001 }, | ||
| 582 | { 0x001344, 1, 0x04, 0x00000002 }, | ||
| 583 | { 0x001348, 2, 0x04, 0x00000001 }, | ||
| 584 | { 0x001350, 1, 0x04, 0x00000002 }, | ||
| 585 | { 0x001358, 1, 0x04, 0x00000001 }, | ||
| 586 | { 0x0012e4, 1, 0x04, 0x00000000 }, | ||
| 587 | { 0x00131c, 4, 0x04, 0x00000000 }, | ||
| 588 | { 0x0019c0, 1, 0x04, 0x00000000 }, | ||
| 589 | { 0x001140, 1, 0x04, 0x00000000 }, | ||
| 590 | { 0x000dd0, 1, 0x04, 0x00000000 }, | ||
| 591 | { 0x000dd4, 1, 0x04, 0x00000001 }, | ||
| 592 | { 0x0002f4, 1, 0x04, 0x00000000 }, | ||
| 593 | { 0x0019c4, 1, 0x04, 0x00000000 }, | ||
| 594 | { 0x0019c8, 1, 0x04, 0x00001500 }, | ||
| 595 | { 0x00135c, 1, 0x04, 0x00000000 }, | ||
| 596 | { 0x000f90, 1, 0x04, 0x00000000 }, | ||
| 597 | { 0x0019e0, 8, 0x04, 0x00000001 }, | ||
| 598 | { 0x0019cc, 1, 0x04, 0x00000001 }, | ||
| 599 | { 0x00111c, 1, 0x04, 0x00000001 }, | ||
| 600 | { 0x0015b8, 1, 0x04, 0x00000000 }, | ||
| 601 | { 0x001a00, 1, 0x04, 0x00001111 }, | ||
| 602 | { 0x001a04, 7, 0x04, 0x00000000 }, | ||
| 603 | { 0x000d6c, 2, 0x04, 0xffff0000 }, | ||
| 604 | { 0x0010f8, 1, 0x04, 0x00001010 }, | ||
| 605 | { 0x000d80, 5, 0x04, 0x00000000 }, | ||
| 606 | { 0x000da0, 1, 0x04, 0x00000000 }, | ||
| 607 | { 0x0007a4, 2, 0x04, 0x00000000 }, | ||
| 608 | { 0x001508, 1, 0x04, 0x80000000 }, | ||
| 609 | { 0x00150c, 1, 0x04, 0x40000000 }, | ||
| 610 | { 0x001668, 1, 0x04, 0x00000000 }, | ||
| 611 | { 0x000318, 2, 0x04, 0x00000008 }, | ||
| 612 | { 0x000d9c, 1, 0x04, 0x00000001 }, | ||
| 613 | { 0x000f14, 1, 0x04, 0x00000000 }, | ||
| 614 | { 0x000374, 1, 0x04, 0x00000000 }, | ||
| 615 | { 0x000378, 1, 0x04, 0x0000000c }, | ||
| 616 | { 0x0007dc, 1, 0x04, 0x00000000 }, | ||
| 617 | { 0x00074c, 1, 0x04, 0x00000055 }, | ||
| 618 | { 0x001420, 1, 0x04, 0x00000003 }, | ||
| 619 | { 0x001008, 1, 0x04, 0x00000008 }, | ||
| 620 | { 0x00100c, 1, 0x04, 0x00000040 }, | ||
| 621 | { 0x001010, 1, 0x04, 0x0000012c }, | ||
| 622 | { 0x000d60, 1, 0x04, 0x00000040 }, | ||
| 623 | { 0x001018, 1, 0x04, 0x00000020 }, | ||
| 624 | { 0x00101c, 1, 0x04, 0x00000001 }, | ||
| 625 | { 0x001020, 1, 0x04, 0x00000020 }, | ||
| 626 | { 0x001024, 1, 0x04, 0x00000001 }, | ||
| 627 | { 0x001444, 3, 0x04, 0x00000000 }, | ||
| 628 | { 0x000360, 1, 0x04, 0x20164010 }, | ||
| 629 | { 0x000364, 1, 0x04, 0x00000020 }, | ||
| 630 | { 0x000368, 1, 0x04, 0x00000000 }, | ||
| 631 | { 0x000da8, 1, 0x04, 0x00000030 }, | ||
| 632 | { 0x000de4, 1, 0x04, 0x00000000 }, | ||
| 633 | { 0x000204, 1, 0x04, 0x00000006 }, | ||
| 634 | { 0x0002d0, 1, 0x04, 0x003fffff }, | ||
| 635 | { 0x001220, 1, 0x04, 0x00000005 }, | ||
| 636 | { 0x000fdc, 1, 0x04, 0x00000000 }, | ||
| 637 | { 0x000f98, 1, 0x04, 0x00400008 }, | ||
| 638 | { 0x001284, 1, 0x04, 0x08000080 }, | ||
| 639 | { 0x001450, 1, 0x04, 0x00400008 }, | ||
| 640 | { 0x001454, 1, 0x04, 0x08000080 }, | ||
| 641 | { 0x000214, 1, 0x04, 0x00000000 }, | ||
| 642 | {} | ||
| 643 | }; | ||
| 644 | |||
| 645 | const struct gf100_gr_pack | ||
| 646 | gm204_grctx_pack_mthd[] = { | ||
| 647 | { gm204_grctx_init_b197_0, 0xb197 }, | ||
| 648 | { gf100_grctx_init_902d_0, 0x902d }, | ||
| 649 | {} | ||
| 650 | }; | ||
| 651 | |||
| 652 | static const struct gf100_gr_init | ||
| 653 | gm204_grctx_init_fe_0[] = { | ||
| 654 | { 0x404004, 8, 0x04, 0x00000000 }, | ||
| 655 | { 0x404024, 1, 0x04, 0x0000e000 }, | ||
| 656 | { 0x404028, 8, 0x04, 0x00000000 }, | ||
| 657 | { 0x4040a8, 8, 0x04, 0x00000000 }, | ||
| 658 | { 0x4040c8, 1, 0x04, 0xf801008f }, | ||
| 659 | { 0x4040d0, 6, 0x04, 0x00000000 }, | ||
| 660 | { 0x4040f8, 1, 0x04, 0x00000000 }, | ||
| 661 | { 0x404100, 10, 0x04, 0x00000000 }, | ||
| 662 | { 0x404130, 2, 0x04, 0x00000000 }, | ||
| 663 | { 0x404150, 1, 0x04, 0x0000002e }, | ||
| 664 | { 0x404154, 2, 0x04, 0x00000800 }, | ||
| 665 | { 0x404164, 1, 0x04, 0x00000045 }, | ||
| 666 | { 0x40417c, 2, 0x04, 0x00000000 }, | ||
| 667 | { 0x404194, 1, 0x04, 0x33000700 }, | ||
| 668 | { 0x4041a0, 4, 0x04, 0x00000000 }, | ||
| 669 | { 0x4041c4, 2, 0x04, 0x00000000 }, | ||
| 670 | {} | ||
| 671 | }; | ||
| 672 | |||
| 673 | static const struct gf100_gr_init | ||
| 674 | gm204_grctx_init_ds_0[] = { | ||
| 675 | { 0x405800, 1, 0x04, 0x8f8001bf }, | ||
| 676 | { 0x405830, 1, 0x04, 0x04001000 }, | ||
| 677 | { 0x405834, 1, 0x04, 0x08000000 }, | ||
| 678 | { 0x405838, 1, 0x04, 0x00010000 }, | ||
| 679 | { 0x405854, 1, 0x04, 0x00000000 }, | ||
| 680 | { 0x405870, 4, 0x04, 0x00000001 }, | ||
| 681 | { 0x405a00, 2, 0x04, 0x00000000 }, | ||
| 682 | { 0x405a18, 1, 0x04, 0x00000000 }, | ||
| 683 | { 0x405a1c, 1, 0x04, 0x000000ff }, | ||
| 684 | {} | ||
| 685 | }; | ||
| 686 | |||
| 687 | static const struct gf100_gr_init | ||
| 688 | gm204_grctx_init_cwd_0[] = { | ||
| 689 | { 0x405b00, 1, 0x04, 0x00000000 }, | ||
| 690 | { 0x405b10, 1, 0x04, 0x00001000 }, | ||
| 691 | { 0x405b20, 1, 0x04, 0x04000000 }, | ||
| 692 | { 0x405b60, 6, 0x04, 0x00000000 }, | ||
| 693 | { 0x405ba0, 6, 0x04, 0x00000000 }, | ||
| 694 | {} | ||
| 695 | }; | ||
| 696 | |||
| 697 | static const struct gf100_gr_init | ||
| 698 | gm204_grctx_init_pd_0[] = { | ||
| 699 | { 0x406020, 1, 0x04, 0x17410001 }, | ||
| 700 | { 0x406028, 4, 0x04, 0x00000001 }, | ||
| 701 | { 0x4064a8, 1, 0x04, 0x00000000 }, | ||
| 702 | { 0x4064ac, 1, 0x04, 0x00003fff }, | ||
| 703 | { 0x4064b0, 3, 0x04, 0x00000000 }, | ||
| 704 | { 0x4064c0, 1, 0x04, 0x80400280 }, | ||
| 705 | { 0x4064c4, 1, 0x04, 0x0400ffff }, | ||
| 706 | { 0x4064c8, 1, 0x04, 0x01800780 }, | ||
| 707 | { 0x4064cc, 9, 0x04, 0x00000000 }, | ||
| 708 | { 0x4064fc, 1, 0x04, 0x0000022a }, | ||
| 709 | { 0x406500, 1, 0x04, 0x00000000 }, | ||
| 710 | {} | ||
| 711 | }; | ||
| 712 | |||
| 713 | static const struct gf100_gr_init | ||
| 714 | gm204_grctx_init_be_0[] = { | ||
| 715 | { 0x408800, 1, 0x04, 0x32882a3c }, | ||
| 716 | { 0x408804, 1, 0x04, 0x00000040 }, | ||
| 717 | { 0x408808, 1, 0x04, 0x1003e005 }, | ||
| 718 | { 0x408840, 1, 0x04, 0x00000e0b }, | ||
| 719 | { 0x408900, 1, 0x04, 0xb080b801 }, | ||
| 720 | { 0x408904, 1, 0x04, 0x63038001 }, | ||
| 721 | { 0x408908, 1, 0x04, 0x12c8502f }, | ||
| 722 | { 0x408980, 1, 0x04, 0x0000011d }, | ||
| 723 | {} | ||
| 724 | }; | ||
| 725 | |||
| 726 | const struct gf100_gr_pack | ||
| 727 | gm204_grctx_pack_hub[] = { | ||
| 728 | { gf100_grctx_init_main_0 }, | ||
| 729 | { gm204_grctx_init_fe_0 }, | ||
| 730 | { gk110_grctx_init_pri_0 }, | ||
| 731 | { gk104_grctx_init_memfmt_0 }, | ||
| 732 | { gm204_grctx_init_ds_0 }, | ||
| 733 | { gm204_grctx_init_cwd_0 }, | ||
| 734 | { gm204_grctx_init_pd_0 }, | ||
| 735 | { gk208_grctx_init_rstr2d_0 }, | ||
| 736 | { gk104_grctx_init_scc_0 }, | ||
| 737 | { gm204_grctx_init_be_0 }, | ||
| 738 | {} | ||
| 739 | }; | ||
| 740 | |||
| 741 | const struct gf100_gr_init | ||
| 742 | gm204_grctx_init_prop_0[] = { | ||
| 743 | { 0x418400, 1, 0x04, 0x38e01e00 }, | ||
| 744 | { 0x418404, 1, 0x04, 0x70001fff }, | ||
| 745 | { 0x41840c, 1, 0x04, 0x20001008 }, | ||
| 746 | { 0x418410, 2, 0x04, 0x0fff0fff }, | ||
| 747 | { 0x418418, 1, 0x04, 0x07ff07ff }, | ||
| 748 | { 0x41841c, 1, 0x04, 0x3feffbff }, | ||
| 749 | { 0x418450, 6, 0x04, 0x00000000 }, | ||
| 750 | { 0x418468, 1, 0x04, 0x00000001 }, | ||
| 751 | { 0x41846c, 2, 0x04, 0x00000000 }, | ||
| 752 | {} | ||
| 753 | }; | ||
| 754 | |||
| 755 | static const struct gf100_gr_init | ||
| 756 | gm204_grctx_init_gpc_unk_1[] = { | ||
| 757 | { 0x418600, 1, 0x04, 0x0000007f }, | ||
| 758 | { 0x418684, 1, 0x04, 0x0000001f }, | ||
| 759 | { 0x418700, 1, 0x04, 0x00000002 }, | ||
| 760 | { 0x418704, 1, 0x04, 0x00000080 }, | ||
| 761 | { 0x418708, 1, 0x04, 0x40000000 }, | ||
| 762 | { 0x41870c, 2, 0x04, 0x00000000 }, | ||
| 763 | { 0x418728, 1, 0x04, 0x00010000 }, | ||
| 764 | {} | ||
| 765 | }; | ||
| 766 | |||
| 767 | const struct gf100_gr_init | ||
| 768 | gm204_grctx_init_setup_0[] = { | ||
| 769 | { 0x418800, 1, 0x04, 0x7006863a }, | ||
| 770 | { 0x418808, 1, 0x04, 0x00000000 }, | ||
| 771 | { 0x418810, 1, 0x04, 0x00000000 }, | ||
| 772 | { 0x418828, 1, 0x04, 0x00000044 }, | ||
| 773 | { 0x418830, 1, 0x04, 0x10000001 }, | ||
| 774 | { 0x4188d8, 1, 0x04, 0x00000008 }, | ||
| 775 | { 0x4188e0, 1, 0x04, 0x01000000 }, | ||
| 776 | { 0x4188e8, 5, 0x04, 0x00000000 }, | ||
| 777 | { 0x4188fc, 1, 0x04, 0x20100058 }, | ||
| 778 | {} | ||
| 779 | }; | ||
| 780 | |||
| 781 | const struct gf100_gr_init | ||
| 782 | gm204_grctx_init_gpm_0[] = { | ||
| 783 | { 0x418c10, 8, 0x04, 0x00000000 }, | ||
| 784 | { 0x418c40, 1, 0x04, 0xffffffff }, | ||
| 785 | { 0x418c6c, 1, 0x04, 0x00000001 }, | ||
| 786 | { 0x418c80, 1, 0x04, 0x20200000 }, | ||
| 787 | {} | ||
| 788 | }; | ||
| 789 | |||
| 790 | const struct gf100_gr_init | ||
| 791 | gm204_grctx_init_gpc_unk_2[] = { | ||
| 792 | { 0x418e00, 1, 0x04, 0x90040000 }, | ||
| 793 | { 0x418e24, 1, 0x04, 0x00000000 }, | ||
| 794 | { 0x418e28, 1, 0x04, 0x00000030 }, | ||
| 795 | { 0x418e2c, 1, 0x04, 0x00000100 }, | ||
| 796 | { 0x418e30, 3, 0x04, 0x00000000 }, | ||
| 797 | { 0x418e40, 22, 0x04, 0x00000000 }, | ||
| 798 | { 0x418ea0, 12, 0x04, 0x00000000 }, | ||
| 799 | {} | ||
| 800 | }; | ||
| 801 | |||
| 802 | static const struct gf100_gr_pack | ||
| 803 | gm204_grctx_pack_gpc[] = { | ||
| 804 | { gm107_grctx_init_gpc_unk_0 }, | ||
| 805 | { gm204_grctx_init_prop_0 }, | ||
| 806 | { gm204_grctx_init_gpc_unk_1 }, | ||
| 807 | { gm204_grctx_init_setup_0 }, | ||
| 808 | { gf100_grctx_init_zcull_0 }, | ||
| 809 | { gk208_grctx_init_crstr_0 }, | ||
| 810 | { gm204_grctx_init_gpm_0 }, | ||
| 811 | { gm204_grctx_init_gpc_unk_2 }, | ||
| 812 | { gf100_grctx_init_gcc_0 }, | ||
| 813 | {} | ||
| 814 | }; | ||
| 815 | |||
| 816 | static const struct gf100_gr_init | ||
| 817 | gm204_grctx_init_pe_0[] = { | ||
| 818 | { 0x419848, 1, 0x04, 0x00000000 }, | ||
| 819 | { 0x419864, 1, 0x04, 0x00000029 }, | ||
| 820 | { 0x419888, 1, 0x04, 0x00000000 }, | ||
| 821 | {} | ||
| 822 | }; | ||
| 823 | |||
| 824 | static const struct gf100_gr_init | ||
| 825 | gm204_grctx_init_tex_0[] = { | ||
| 826 | { 0x419a00, 1, 0x04, 0x000100f0 }, | ||
| 827 | { 0x419a04, 1, 0x04, 0x00000005 }, | ||
| 828 | { 0x419a08, 1, 0x04, 0x00000621 }, | ||
| 829 | { 0x419a0c, 1, 0x04, 0x00320000 }, | ||
| 830 | { 0x419a10, 1, 0x04, 0x00000000 }, | ||
| 831 | { 0x419a14, 1, 0x04, 0x00000200 }, | ||
| 832 | { 0x419a1c, 1, 0x04, 0x0010c000 }, | ||
| 833 | { 0x419a20, 1, 0x04, 0x20008a00 }, | ||
| 834 | { 0x419a30, 1, 0x04, 0x00000001 }, | ||
| 835 | { 0x419a3c, 1, 0x04, 0x0000181e }, | ||
| 836 | { 0x419ac4, 1, 0x04, 0x00000000 }, | ||
| 837 | {} | ||
| 838 | }; | ||
| 839 | |||
| 840 | static const struct gf100_gr_init | ||
| 841 | gm204_grctx_init_mpc_0[] = { | ||
| 842 | { 0x419c00, 1, 0x04, 0x0000009a }, | ||
| 843 | { 0x419c04, 1, 0x04, 0x80000bd6 }, | ||
| 844 | { 0x419c08, 1, 0x04, 0x00000002 }, | ||
| 845 | { 0x419c20, 1, 0x04, 0x00000000 }, | ||
| 846 | { 0x419c24, 1, 0x04, 0x00084210 }, | ||
| 847 | { 0x419c28, 1, 0x04, 0x3efbefbe }, | ||
| 848 | { 0x419c2c, 1, 0x04, 0x00000000 }, | ||
| 849 | { 0x419c34, 1, 0x04, 0x71ff1ff3 }, | ||
| 850 | { 0x419c3c, 1, 0x04, 0x00001919 }, | ||
| 851 | { 0x419c50, 1, 0x04, 0x00000005 }, | ||
| 852 | {} | ||
| 853 | }; | ||
| 854 | |||
| 855 | static const struct gf100_gr_init | ||
| 856 | gm204_grctx_init_l1c_0[] = { | ||
| 857 | { 0x419c84, 1, 0x04, 0x0000003e }, | ||
| 858 | { 0x419c90, 1, 0x04, 0x0000000a }, | ||
| 859 | {} | ||
| 860 | }; | ||
| 861 | |||
| 862 | static const struct gf100_gr_init | ||
| 863 | gm204_grctx_init_sm_0[] = { | ||
| 864 | { 0x419e04, 3, 0x04, 0x00000000 }, | ||
| 865 | { 0x419e10, 1, 0x04, 0x00001c02 }, | ||
| 866 | { 0x419e44, 1, 0x04, 0x00d3eff2 }, | ||
| 867 | { 0x419e48, 1, 0x04, 0x00000000 }, | ||
| 868 | { 0x419e4c, 1, 0x04, 0x0000007f }, | ||
| 869 | { 0x419e50, 1, 0x04, 0x00000000 }, | ||
| 870 | { 0x419e58, 6, 0x04, 0x00000000 }, | ||
| 871 | { 0x419e74, 10, 0x04, 0x00000000 }, | ||
| 872 | { 0x419eac, 1, 0x04, 0x0001cf8b }, | ||
| 873 | { 0x419eb0, 1, 0x04, 0x00030300 }, | ||
| 874 | { 0x419eb8, 1, 0x04, 0x40000000 }, | ||
| 875 | { 0x419ef0, 24, 0x04, 0x00000000 }, | ||
| 876 | { 0x419f68, 2, 0x04, 0x00000000 }, | ||
| 877 | { 0x419f70, 1, 0x04, 0x00000020 }, | ||
| 878 | { 0x419f78, 1, 0x04, 0x00010beb }, | ||
| 879 | { 0x419f7c, 1, 0x04, 0x00000000 }, | ||
| 880 | {} | ||
| 881 | }; | ||
| 882 | |||
| 883 | const struct gf100_gr_pack | ||
| 884 | gm204_grctx_pack_tpc[] = { | ||
| 885 | { gm204_grctx_init_pe_0 }, | ||
| 886 | { gm204_grctx_init_tex_0 }, | ||
| 887 | { gm204_grctx_init_mpc_0 }, | ||
| 888 | { gm204_grctx_init_l1c_0 }, | ||
| 889 | { gm204_grctx_init_sm_0 }, | ||
| 890 | {} | ||
| 891 | }; | ||
| 892 | |||
| 893 | static const struct gf100_gr_init | ||
| 894 | gm204_grctx_init_pes_0[] = { | ||
| 895 | { 0x41be24, 1, 0x04, 0x0000000e }, | ||
| 896 | {} | ||
| 897 | }; | ||
| 898 | |||
| 899 | static const struct gf100_gr_init | ||
| 900 | gm204_grctx_init_cbm_0[] = { | ||
| 901 | { 0x41bec0, 1, 0x04, 0x00000000 }, | ||
| 902 | { 0x41bec4, 1, 0x04, 0x01030000 }, | ||
| 903 | { 0x41bee4, 1, 0x04, 0x00000000 }, | ||
| 904 | { 0x41bef0, 1, 0x04, 0x000003ff }, | ||
| 905 | { 0x41bef4, 2, 0x04, 0x00000000 }, | ||
| 906 | {} | ||
| 907 | }; | ||
| 908 | |||
| 909 | const struct gf100_gr_pack | ||
| 910 | gm204_grctx_pack_ppc[] = { | ||
| 911 | { gm204_grctx_init_pes_0 }, | ||
| 912 | { gm204_grctx_init_cbm_0 }, | ||
| 913 | { gm107_grctx_init_wwdx_0 }, | ||
| 914 | {} | ||
| 915 | }; | ||
| 916 | |||
| 917 | /******************************************************************************* | ||
| 918 | * PGRAPH context implementation | ||
| 919 | ******************************************************************************/ | ||
| 920 | |||
| 921 | static void | ||
| 922 | gm204_grctx_generate_tpcid(struct gf100_gr_priv *priv) | ||
| 923 | { | ||
| 924 | int gpc, tpc, id; | ||
| 925 | |||
| 926 | for (tpc = 0, id = 0; tpc < 4; tpc++) { | ||
| 927 | for (gpc = 0; gpc < priv->gpc_nr; gpc++) { | ||
| 928 | if (tpc < priv->tpc_nr[gpc]) { | ||
| 929 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x698), id); | ||
| 930 | nv_wr32(priv, GPC_UNIT(gpc, 0x0c10 + tpc * 4), id); | ||
| 931 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x088), id); | ||
| 932 | id++; | ||
| 933 | } | ||
| 934 | } | ||
| 935 | } | ||
| 936 | } | ||
| 937 | |||
| 938 | static void | ||
| 939 | gm204_grctx_generate_rop_active_fbps(struct gf100_gr_priv *priv) | ||
| 940 | { | ||
| 941 | const u32 fbp_count = nv_rd32(priv, 0x12006c); | ||
| 942 | nv_mask(priv, 0x408850, 0x0000000f, fbp_count); /* zrop */ | ||
| 943 | nv_mask(priv, 0x408958, 0x0000000f, fbp_count); /* crop */ | ||
| 944 | } | ||
| 945 | |||
| 946 | static void | ||
| 947 | gm204_grctx_generate_405b60(struct gf100_gr_priv *priv) | ||
| 948 | { | ||
| 949 | const u32 dist_nr = DIV_ROUND_UP(priv->tpc_total, 4); | ||
| 950 | u32 dist[TPC_MAX] = {}; | ||
| 951 | u32 gpcs[GPC_MAX] = {}; | ||
| 952 | u8 tpcnr[GPC_MAX]; | ||
| 953 | int tpc, gpc, i; | ||
| 954 | |||
| 955 | memcpy(tpcnr, priv->tpc_nr, sizeof(priv->tpc_nr)); | ||
| 956 | |||
| 957 | /* won't result in the same distribution as the binary driver where | ||
| 958 | * some of the gpcs have more tpcs than others, but this shall do | ||
| 959 | * for the moment. the code for earlier gpus has this issue too. | ||
| 960 | */ | ||
| 961 | for (gpc = -1, i = 0; i < priv->tpc_total; i++) { | ||
| 962 | do { | ||
| 963 | gpc = (gpc + 1) % priv->gpc_nr; | ||
| 964 | } while(!tpcnr[gpc]); | ||
| 965 | tpc = priv->tpc_nr[gpc] - tpcnr[gpc]--; | ||
| 966 | |||
| 967 | dist[i / 4] |= ((gpc << 4) | tpc) << ((i % 4) * 8); | ||
| 968 | gpcs[gpc] |= i << (tpc * 8); | ||
| 969 | } | ||
| 970 | |||
| 971 | for (i = 0; i < dist_nr; i++) | ||
| 972 | nv_wr32(priv, 0x405b60 + (i * 4), dist[i]); | ||
| 973 | for (i = 0; i < priv->gpc_nr; i++) | ||
| 974 | nv_wr32(priv, 0x405ba0 + (i * 4), gpcs[i]); | ||
| 975 | } | ||
| 976 | |||
| 977 | void | ||
| 978 | gm204_grctx_generate_main(struct gf100_gr_priv *priv, struct gf100_grctx *info) | ||
| 979 | { | ||
| 980 | struct gf100_grctx_oclass *oclass = (void *)nv_engine(priv)->cclass; | ||
| 981 | u32 tmp; | ||
| 982 | int i; | ||
| 983 | |||
| 984 | gf100_gr_mmio(priv, oclass->hub); | ||
| 985 | gf100_gr_mmio(priv, oclass->gpc); | ||
| 986 | gf100_gr_mmio(priv, oclass->zcull); | ||
| 987 | gf100_gr_mmio(priv, oclass->tpc); | ||
| 988 | gf100_gr_mmio(priv, oclass->ppc); | ||
| 989 | |||
| 990 | nv_wr32(priv, 0x404154, 0x00000000); | ||
| 991 | |||
| 992 | oclass->bundle(info); | ||
| 993 | oclass->pagepool(info); | ||
| 994 | oclass->attrib(info); | ||
| 995 | oclass->unkn(priv); | ||
| 996 | |||
| 997 | gm204_grctx_generate_tpcid(priv); | ||
| 998 | gf100_grctx_generate_r406028(priv); | ||
| 999 | gk104_grctx_generate_r418bb8(priv); | ||
| 1000 | |||
| 1001 | for (i = 0; i < 8; i++) | ||
| 1002 | nv_wr32(priv, 0x4064d0 + (i * 0x04), 0x00000000); | ||
| 1003 | nv_wr32(priv, 0x406500, 0x00000000); | ||
| 1004 | |||
| 1005 | nv_wr32(priv, 0x405b00, (priv->tpc_total << 8) | priv->gpc_nr); | ||
| 1006 | |||
| 1007 | gm204_grctx_generate_rop_active_fbps(priv); | ||
| 1008 | |||
| 1009 | for (tmp = 0, i = 0; i < priv->gpc_nr; i++) | ||
| 1010 | tmp |= ((1 << priv->tpc_nr[i]) - 1) << (i * 4); | ||
| 1011 | nv_wr32(priv, 0x4041c4, tmp); | ||
| 1012 | |||
| 1013 | gm204_grctx_generate_405b60(priv); | ||
| 1014 | |||
| 1015 | gf100_gr_icmd(priv, oclass->icmd); | ||
| 1016 | nv_wr32(priv, 0x404154, 0x00000800); | ||
| 1017 | gf100_gr_mthd(priv, oclass->mthd); | ||
| 1018 | |||
| 1019 | nv_mask(priv, 0x418e94, 0xffffffff, 0xc4230000); | ||
| 1020 | nv_mask(priv, 0x418e4c, 0xffffffff, 0x70000000); | ||
| 1021 | } | ||
| 1022 | |||
| 1023 | struct nvkm_oclass * | ||
| 1024 | gm204_grctx_oclass = &(struct gf100_grctx_oclass) { | ||
| 1025 | .base.handle = NV_ENGCTX(GR, 0x24), | ||
| 1026 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 1027 | .ctor = gf100_gr_context_ctor, | ||
| 1028 | .dtor = gf100_gr_context_dtor, | ||
| 1029 | .init = _nvkm_gr_context_init, | ||
| 1030 | .fini = _nvkm_gr_context_fini, | ||
| 1031 | .rd32 = _nvkm_gr_context_rd32, | ||
| 1032 | .wr32 = _nvkm_gr_context_wr32, | ||
| 1033 | }, | ||
| 1034 | .main = gm204_grctx_generate_main, | ||
| 1035 | .unkn = gk104_grctx_generate_unkn, | ||
| 1036 | .hub = gm204_grctx_pack_hub, | ||
| 1037 | .gpc = gm204_grctx_pack_gpc, | ||
| 1038 | .zcull = gf100_grctx_pack_zcull, | ||
| 1039 | .tpc = gm204_grctx_pack_tpc, | ||
| 1040 | .ppc = gm204_grctx_pack_ppc, | ||
| 1041 | .icmd = gm204_grctx_pack_icmd, | ||
| 1042 | .mthd = gm204_grctx_pack_mthd, | ||
| 1043 | .bundle = gm107_grctx_generate_bundle, | ||
| 1044 | .bundle_size = 0x3000, | ||
| 1045 | .bundle_min_gpm_fifo_depth = 0x180, | ||
| 1046 | .bundle_token_limit = 0x780, | ||
| 1047 | .pagepool = gm107_grctx_generate_pagepool, | ||
| 1048 | .pagepool_size = 0x20000, | ||
| 1049 | .attrib = gm107_grctx_generate_attrib, | ||
| 1050 | .attrib_nr_max = 0x600, | ||
| 1051 | .attrib_nr = 0x400, | ||
| 1052 | .alpha_nr_max = 0x1800, | ||
| 1053 | .alpha_nr = 0x1000, | ||
| 1054 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm206.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm206.c new file mode 100644 index 000000000000..91ec41617943 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm206.c | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
| 23 | */ | ||
| 24 | #include "ctxgf100.h" | ||
| 25 | |||
| 26 | static const struct gf100_gr_init | ||
| 27 | gm206_grctx_init_gpc_unk_1[] = { | ||
| 28 | { 0x418600, 1, 0x04, 0x0000007f }, | ||
| 29 | { 0x418684, 1, 0x04, 0x0000001f }, | ||
| 30 | { 0x418700, 1, 0x04, 0x00000002 }, | ||
| 31 | { 0x418704, 1, 0x04, 0x00000080 }, | ||
| 32 | { 0x418708, 1, 0x04, 0x40000000 }, | ||
| 33 | { 0x41870c, 2, 0x04, 0x00000000 }, | ||
| 34 | { 0x418728, 1, 0x04, 0x00300020 }, | ||
| 35 | {} | ||
| 36 | }; | ||
| 37 | |||
| 38 | static const struct gf100_gr_pack | ||
| 39 | gm206_grctx_pack_gpc[] = { | ||
| 40 | { gm107_grctx_init_gpc_unk_0 }, | ||
| 41 | { gm204_grctx_init_prop_0 }, | ||
| 42 | { gm206_grctx_init_gpc_unk_1 }, | ||
| 43 | { gm204_grctx_init_setup_0 }, | ||
| 44 | { gf100_grctx_init_zcull_0 }, | ||
| 45 | { gk208_grctx_init_crstr_0 }, | ||
| 46 | { gm204_grctx_init_gpm_0 }, | ||
| 47 | { gm204_grctx_init_gpc_unk_2 }, | ||
| 48 | { gf100_grctx_init_gcc_0 }, | ||
| 49 | {} | ||
| 50 | }; | ||
| 51 | |||
| 52 | struct nvkm_oclass * | ||
| 53 | gm206_grctx_oclass = &(struct gf100_grctx_oclass) { | ||
| 54 | .base.handle = NV_ENGCTX(GR, 0x26), | ||
| 55 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 56 | .ctor = gf100_gr_context_ctor, | ||
| 57 | .dtor = gf100_gr_context_dtor, | ||
| 58 | .init = _nvkm_gr_context_init, | ||
| 59 | .fini = _nvkm_gr_context_fini, | ||
| 60 | .rd32 = _nvkm_gr_context_rd32, | ||
| 61 | .wr32 = _nvkm_gr_context_wr32, | ||
| 62 | }, | ||
| 63 | .main = gm204_grctx_generate_main, | ||
| 64 | .unkn = gk104_grctx_generate_unkn, | ||
| 65 | .hub = gm204_grctx_pack_hub, | ||
| 66 | .gpc = gm206_grctx_pack_gpc, | ||
| 67 | .zcull = gf100_grctx_pack_zcull, | ||
| 68 | .tpc = gm204_grctx_pack_tpc, | ||
| 69 | .ppc = gm204_grctx_pack_ppc, | ||
| 70 | .icmd = gm204_grctx_pack_icmd, | ||
| 71 | .mthd = gm204_grctx_pack_mthd, | ||
| 72 | .bundle = gm107_grctx_generate_bundle, | ||
| 73 | .bundle_size = 0x3000, | ||
| 74 | .bundle_min_gpm_fifo_depth = 0x180, | ||
| 75 | .bundle_token_limit = 0x780, | ||
| 76 | .pagepool = gm107_grctx_generate_pagepool, | ||
| 77 | .pagepool_size = 0x20000, | ||
| 78 | .attrib = gm107_grctx_generate_attrib, | ||
| 79 | .attrib_nr_max = 0x600, | ||
| 80 | .attrib_nr = 0x400, | ||
| 81 | .alpha_nr_max = 0x1800, | ||
| 82 | .alpha_nr = 0x1000, | ||
| 83 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc index eaed1599b90f..194afe910d21 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc | |||
| @@ -52,6 +52,12 @@ mmio_list_base: | |||
| 52 | #endif | 52 | #endif |
| 53 | 53 | ||
| 54 | #ifdef INCLUDE_CODE | 54 | #ifdef INCLUDE_CODE |
| 55 | #define gpc_wr32(addr,reg) /* | ||
| 56 | */ mov b32 $r15 reg /* | ||
| 57 | */ imm32($r14, addr) /* | ||
| 58 | */ or $r14 NV_PGRAPH_GPCX_GPCCS_MMIO_CTRL_BASE_ENABLE /* | ||
| 59 | */ call(nv_wr32) | ||
| 60 | |||
| 55 | // reports an exception to the host | 61 | // reports an exception to the host |
| 56 | // | 62 | // |
| 57 | // In: $r15 error code (see os.h) | 63 | // In: $r15 error code (see os.h) |
| @@ -64,6 +70,43 @@ error: | |||
| 64 | pop $r14 | 70 | pop $r14 |
| 65 | ret | 71 | ret |
| 66 | 72 | ||
| 73 | #if CHIPSET >= GM107 | ||
| 74 | tpc_strand_wait: | ||
| 75 | push $r9 | ||
| 76 | trace_set(T_STRTPC) | ||
| 77 | tpc_strand_busy: | ||
| 78 | nv_iord($r9, NV_PGRAPH_GPCX_GPCCS_TPC_STATUS, 0) | ||
| 79 | bra b32 $r9 0x0 ne #tpc_strand_busy | ||
| 80 | trace_clr(T_STRTPC) | ||
| 81 | pop $r9 | ||
| 82 | ret | ||
| 83 | |||
| 84 | #define tpc_strand_wait() call(tpc_strand_wait) | ||
| 85 | #define tpc_strand_enable() /* | ||
| 86 | */ mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_ENABLE /* | ||
| 87 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15) /* | ||
| 88 | */ tpc_strand_wait() | ||
| 89 | #define tpc_strand_disable() /* | ||
| 90 | */ mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_DISABLE /* | ||
| 91 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15) /* | ||
| 92 | */ tpc_strand_wait() | ||
| 93 | #define tpc_strand_seek(p) /* | ||
| 94 | */ mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL /* | ||
| 95 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_INDEX, $r15) /* | ||
| 96 | */ mov $r15 p /* | ||
| 97 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_SELECT, $r15) /* | ||
| 98 | */ mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SEEK /* | ||
| 99 | */ tpc_strand_wait() | ||
| 100 | #define tpc_strand_info(m) /* | ||
| 101 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15) /* | ||
| 102 | */ mov $r15 m /* | ||
| 103 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_DATA, $r15) /* | ||
| 104 | */ mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_GET_INFO /* | ||
| 105 | */ gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15) /* | ||
| 106 | */ tpc_strand_wait() | ||
| 107 | #endif | ||
| 108 | |||
| 109 | |||
| 67 | // GPC fuc initialisation, executed by triggering ucode start, will | 110 | // GPC fuc initialisation, executed by triggering ucode start, will |
| 68 | // fall through to main loop after completion. | 111 | // fall through to main loop after completion. |
| 69 | // | 112 | // |
| @@ -101,7 +144,7 @@ init: | |||
| 101 | // enable interrupts | 144 | // enable interrupts |
| 102 | bset $flags ie0 | 145 | bset $flags ie0 |
| 103 | 146 | ||
| 104 | // figure out which GPC we are, and how many TPCs we have | 147 | // how many TPCs do we have? |
| 105 | nv_iord($r2, NV_PGRAPH_GPCX_GPCCS_UNITS, 0) | 148 | nv_iord($r2, NV_PGRAPH_GPCX_GPCCS_UNITS, 0) |
| 106 | mov $r3 1 | 149 | mov $r3 1 |
| 107 | and $r2 0x1f | 150 | and $r2 0x1f |
| @@ -109,8 +152,12 @@ init: | |||
| 109 | sub b32 $r3 1 | 152 | sub b32 $r3 1 |
| 110 | st b32 D[$r0 + #tpc_count] $r2 | 153 | st b32 D[$r0 + #tpc_count] $r2 |
| 111 | st b32 D[$r0 + #tpc_mask] $r3 | 154 | st b32 D[$r0 + #tpc_mask] $r3 |
| 155 | |||
| 156 | // determine which GPC we are, setup (optional) mmio access offset | ||
| 112 | nv_iord($r2, NV_PGRAPH_GPCX_GPCCS_MYINDEX, 0) | 157 | nv_iord($r2, NV_PGRAPH_GPCX_GPCCS_MYINDEX, 0) |
| 113 | st b32 D[$r0 + #gpc_id] $r2 | 158 | st b32 D[$r0 + #gpc_id] $r2 |
| 159 | shl b32 $r2 15 | ||
| 160 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_MMIO_BASE, 0, $r2) | ||
| 114 | 161 | ||
| 115 | #if NV_PGRAPH_GPCX_UNK__SIZE > 0 | 162 | #if NV_PGRAPH_GPCX_UNK__SIZE > 0 |
| 116 | // figure out which, and how many, UNKs are actually present | 163 | // figure out which, and how many, UNKs are actually present |
| @@ -186,8 +233,56 @@ init: | |||
| 186 | // calculate size of strand context data | 233 | // calculate size of strand context data |
| 187 | mov b32 $r15 $r2 | 234 | mov b32 $r15 $r2 |
| 188 | call(strand_ctx_init) | 235 | call(strand_ctx_init) |
| 236 | add b32 $r2 $r15 | ||
| 189 | add b32 $r3 $r15 | 237 | add b32 $r3 $r15 |
| 190 | 238 | ||
| 239 | #if CHIPSET >= GM107 | ||
| 240 | // calculate size of tpc strand context data | ||
| 241 | mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL | ||
| 242 | gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_INDEX, $r15) | ||
| 243 | tpc_strand_enable(); | ||
| 244 | tpc_strand_seek(0); | ||
| 245 | tpc_strand_info(-1); | ||
| 246 | |||
| 247 | ld b32 $r4 D[$r0 + #tpc_count] | ||
| 248 | mov $r5 NV_PGRAPH_GPC0_TPC0 | ||
| 249 | ld b32 $r6 D[$r0 + #gpc_id] | ||
| 250 | shl b32 $r6 15 | ||
| 251 | add b32 $r5 $r6 | ||
| 252 | tpc_strand_init_tpc_loop: | ||
| 253 | add b32 $r14 $r5 NV_TPC_STRAND_CNT | ||
| 254 | call(nv_rd32) | ||
| 255 | mov b32 $r6 $r15 | ||
| 256 | clear b32 $r7 | ||
| 257 | tpc_strand_init_idx_loop: | ||
| 258 | add b32 $r14 $r5 NV_TPC_STRAND_INDEX | ||
| 259 | mov b32 $r15 $r7 | ||
| 260 | call(nv_wr32) | ||
| 261 | add b32 $r14 $r5 NV_TPC_STRAND_SAVE_SWBASE | ||
| 262 | shr b32 $r15 $r2 8 | ||
| 263 | call(nv_wr32) | ||
| 264 | add b32 $r14 $r5 NV_TPC_STRAND_LOAD_SWBASE | ||
| 265 | shr b32 $r15 $r2 8 | ||
| 266 | call(nv_wr32) | ||
| 267 | add b32 $r14 $r5 NV_TPC_STRAND_WORDS | ||
| 268 | call(nv_rd32) | ||
| 269 | shr b32 $r15 6 | ||
| 270 | add b32 $r15 1 | ||
| 271 | shl b32 $r15 8 | ||
| 272 | add b32 $r2 $r15 | ||
| 273 | add b32 $r3 $r15 | ||
| 274 | add b32 $r7 1 | ||
| 275 | sub b32 $r6 1 | ||
| 276 | bra nz #tpc_strand_init_idx_loop | ||
| 277 | add b32 $r5 NV_PGRAPH_GPC0_TPC0__SIZE | ||
| 278 | sub b32 $r4 1 | ||
| 279 | bra nz #tpc_strand_init_tpc_loop | ||
| 280 | |||
| 281 | mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL | ||
| 282 | gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_INDEX, $r15) | ||
| 283 | tpc_strand_disable(); | ||
| 284 | #endif | ||
| 285 | |||
| 191 | // save context size, and tell HUB we're done | 286 | // save context size, and tell HUB we're done |
| 192 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(1), 0, $r3) | 287 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(1), 0, $r3) |
| 193 | clear b32 $r2 | 288 | clear b32 $r2 |
| @@ -306,6 +401,9 @@ ctx_redswitch: | |||
| 306 | ctx_xfer: | 401 | ctx_xfer: |
| 307 | // set context base address | 402 | // set context base address |
| 308 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_MEM_BASE, 0, $r15) | 403 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_MEM_BASE, 0, $r15) |
| 404 | #if CHIPSET >= GM107 | ||
| 405 | gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_MEM_BASE, $r15) | ||
| 406 | #endif | ||
| 309 | bra not $p1 #ctx_xfer_not_load | 407 | bra not $p1 #ctx_xfer_not_load |
| 310 | call(ctx_redswitch) | 408 | call(ctx_redswitch) |
| 311 | ctx_xfer_not_load: | 409 | ctx_xfer_not_load: |
| @@ -318,6 +416,14 @@ ctx_xfer: | |||
| 318 | add b32 $r2 NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE | 416 | add b32 $r2 NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE |
| 319 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_STRAND_CMD, 0x3f, $r2) | 417 | nv_iowr(NV_PGRAPH_GPCX_GPCCS_STRAND_CMD, 0x3f, $r2) |
| 320 | 418 | ||
| 419 | #if CHIPSET >= GM107 | ||
| 420 | tpc_strand_enable(); | ||
| 421 | tpc_strand_seek(0); | ||
| 422 | xbit $r15 $flags $p1 // SAVE/LOAD | ||
| 423 | add b32 $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SAVE | ||
| 424 | gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15) | ||
| 425 | #endif | ||
| 426 | |||
| 321 | // mmio context | 427 | // mmio context |
| 322 | xbit $r10 $flags $p1 // direction | 428 | xbit $r10 $flags $p1 // direction |
| 323 | or $r10 2 // first | 429 | or $r10 2 // first |
| @@ -362,6 +468,9 @@ ctx_xfer: | |||
| 362 | 468 | ||
| 363 | // wait for strands to finish | 469 | // wait for strands to finish |
| 364 | call(strand_wait) | 470 | call(strand_wait) |
| 471 | #if CHIPSET >= GM107 | ||
| 472 | tpc_strand_wait() | ||
| 473 | #endif | ||
| 365 | 474 | ||
| 366 | // if load, or a save without a load following, do some | 475 | // if load, or a save without a load following, do some |
| 367 | // unknown stuff that's done after finishing a block of | 476 | // unknown stuff that's done after finishing a block of |
| @@ -370,6 +479,9 @@ ctx_xfer: | |||
| 370 | bra not $p2 #ctx_xfer_done | 479 | bra not $p2 #ctx_xfer_done |
| 371 | ctx_xfer_post: | 480 | ctx_xfer_post: |
| 372 | call(strand_post) | 481 | call(strand_post) |
| 482 | #if CHIPSET >= GM107 | ||
| 483 | tpc_strand_disable() | ||
| 484 | #endif | ||
| 373 | 485 | ||
| 374 | // mark completion in HUB's barrier | 486 | // mark completion in HUB's barrier |
| 375 | ctx_xfer_done: | 487 | ctx_xfer_done: |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf100.fuc3.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf100.fuc3.h index ea32f56c0a92..231f696d1e0a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf100.fuc3.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf100.fuc3.h | |||
| @@ -310,7 +310,7 @@ uint32_t gf100_grgpc_code[] = { | |||
| 310 | 0x03f01200, | 310 | 0x03f01200, |
| 311 | 0x0002d000, | 311 | 0x0002d000, |
| 312 | 0x17f104bd, | 312 | 0x17f104bd, |
| 313 | 0x10fe04e6, | 313 | 0x10fe04f8, |
| 314 | 0x0007f100, | 314 | 0x0007f100, |
| 315 | 0x0003f007, | 315 | 0x0003f007, |
| 316 | 0xbd0000d0, | 316 | 0xbd0000d0, |
| @@ -329,157 +329,157 @@ uint32_t gf100_grgpc_code[] = { | |||
| 329 | 0xf0860027, | 329 | 0xf0860027, |
| 330 | 0x22cf0123, | 330 | 0x22cf0123, |
| 331 | 0x04028000, | 331 | 0x04028000, |
| 332 | 0x010027f1, | 332 | 0xf10f24b6, |
| 333 | 0xcf0223f0, | 333 | 0xf0c90007, |
| 334 | 0x34bd0022, | 334 | 0x02d00103, |
| 335 | 0xf1082595, | ||
| 336 | 0xf0c00007, | ||
| 337 | 0x05d00103, | ||
| 338 | 0xf104bd00, | 335 | 0xf104bd00, |
| 339 | 0xf0c10007, | 336 | 0xf0010027, |
| 340 | 0x05d00103, | 337 | 0x22cf0223, |
| 341 | 0x9804bd00, | 338 | 0x9534bd00, |
| 342 | 0x0f98000e, | 339 | 0x07f10825, |
| 343 | 0x5021f501, | 340 | 0x03f0c000, |
| 344 | 0x002fbb01, | 341 | 0x0005d001, |
| 345 | 0x98003fbb, | 342 | 0x07f104bd, |
| 346 | 0x0f98010e, | 343 | 0x03f0c100, |
| 347 | 0x5021f502, | 344 | 0x0005d001, |
| 348 | 0x050e9801, | 345 | 0x0e9804bd, |
| 349 | 0xbb00effd, | 346 | 0x010f9800, |
| 350 | 0x3ebb002e, | 347 | 0x015021f5, |
| 351 | 0x0235b600, | 348 | 0xbb002fbb, |
| 352 | 0xd30007f1, | 349 | 0x0e98003f, |
| 353 | 0xd00103f0, | 350 | 0x020f9801, |
| 354 | 0x04bd0003, | 351 | 0x015021f5, |
| 355 | 0xb60825b6, | 352 | 0xfd050e98, |
| 356 | 0x20b60635, | 353 | 0x2ebb00ef, |
| 357 | 0x0130b601, | 354 | 0x003ebb00, |
| 358 | 0xb60824b6, | 355 | 0xf10235b6, |
| 359 | 0x2fb90834, | 356 | 0xf0d30007, |
| 360 | 0xd321f502, | 357 | 0x03d00103, |
| 361 | 0x003fbb02, | 358 | 0xb604bd00, |
| 362 | 0x010007f1, | 359 | 0x35b60825, |
| 360 | 0x0120b606, | ||
| 361 | 0xb60130b6, | ||
| 362 | 0x34b60824, | ||
| 363 | 0x022fb908, | ||
| 364 | 0x02d321f5, | ||
| 365 | 0xbb002fbb, | ||
| 366 | 0x07f1003f, | ||
| 367 | 0x03f00100, | ||
| 368 | 0x0003d002, | ||
| 369 | 0x24bd04bd, | ||
| 370 | 0xf11f29f0, | ||
| 371 | 0xf0080007, | ||
| 372 | 0x02d00203, | ||
| 373 | /* 0x04bb: main */ | ||
| 374 | 0xf404bd00, | ||
| 375 | 0x28f40031, | ||
| 376 | 0x1cd7f000, | ||
| 377 | 0xf43921f4, | ||
| 378 | 0xe4b0f401, | ||
| 379 | 0x1e18f404, | ||
| 380 | 0xf00181fe, | ||
| 381 | 0x20bd0627, | ||
| 382 | 0xb60412fd, | ||
| 383 | 0x1efd01e4, | ||
| 384 | 0x0018fe05, | ||
| 385 | 0x05b021f5, | ||
| 386 | /* 0x04eb: main_not_ctx_xfer */ | ||
| 387 | 0x94d30ef4, | ||
| 388 | 0xf5f010ef, | ||
| 389 | 0x7e21f501, | ||
| 390 | 0xc60ef403, | ||
| 391 | /* 0x04f8: ih */ | ||
| 392 | 0x88fe80f9, | ||
| 393 | 0xf980f901, | ||
| 394 | 0xf9a0f990, | ||
| 395 | 0xf9d0f9b0, | ||
| 396 | 0xbdf0f9e0, | ||
| 397 | 0x00a7f104, | ||
| 398 | 0x00a3f002, | ||
| 399 | 0xc400aacf, | ||
| 400 | 0x0bf404ab, | ||
| 401 | 0x1cd7f02c, | ||
| 402 | 0x1a00e7f1, | ||
| 403 | 0xcf00e3f0, | ||
| 404 | 0xf7f100ee, | ||
| 405 | 0xf3f01900, | ||
| 406 | 0x00ffcf00, | ||
| 407 | 0xf00421f4, | ||
| 408 | 0x07f101e7, | ||
| 409 | 0x03f01d00, | ||
| 410 | 0x000ed000, | ||
| 411 | /* 0x0546: ih_no_fifo */ | ||
| 412 | 0x07f104bd, | ||
| 413 | 0x03f00100, | ||
| 414 | 0x000ad000, | ||
| 415 | 0xf0fc04bd, | ||
| 416 | 0xd0fce0fc, | ||
| 417 | 0xa0fcb0fc, | ||
| 418 | 0x80fc90fc, | ||
| 419 | 0xfc0088fe, | ||
| 420 | 0x0032f480, | ||
| 421 | /* 0x056a: hub_barrier_done */ | ||
| 422 | 0xf7f001f8, | ||
| 423 | 0x040e9801, | ||
| 424 | 0xb904febb, | ||
| 425 | 0xe7f102ff, | ||
| 426 | 0xe3f09418, | ||
| 427 | 0x9d21f440, | ||
| 428 | /* 0x0582: ctx_redswitch */ | ||
| 429 | 0xf7f000f8, | ||
| 430 | 0x0007f120, | ||
| 431 | 0x0103f085, | ||
| 432 | 0xbd000fd0, | ||
| 433 | 0x08e7f004, | ||
| 434 | /* 0x0594: ctx_redswitch_delay */ | ||
| 435 | 0xf401e2b6, | ||
| 436 | 0xf5f1fd1b, | ||
| 437 | 0xf5f10800, | ||
| 438 | 0x07f10200, | ||
| 439 | 0x03f08500, | ||
| 440 | 0x000fd001, | ||
| 441 | 0x00f804bd, | ||
| 442 | /* 0x05b0: ctx_xfer */ | ||
| 443 | 0x810007f1, | ||
| 363 | 0xd00203f0, | 444 | 0xd00203f0, |
| 364 | 0x04bd0003, | ||
| 365 | 0x29f024bd, | ||
| 366 | 0x0007f11f, | ||
| 367 | 0x0203f008, | ||
| 368 | 0xbd0002d0, | ||
| 369 | /* 0x04a9: main */ | ||
| 370 | 0x0031f404, | ||
| 371 | 0xf00028f4, | ||
| 372 | 0x21f41cd7, | ||
| 373 | 0xf401f439, | ||
| 374 | 0xf404e4b0, | ||
| 375 | 0x81fe1e18, | ||
| 376 | 0x0627f001, | ||
| 377 | 0x12fd20bd, | ||
| 378 | 0x01e4b604, | ||
| 379 | 0xfe051efd, | ||
| 380 | 0x21f50018, | ||
| 381 | 0x0ef4059e, | ||
| 382 | /* 0x04d9: main_not_ctx_xfer */ | ||
| 383 | 0x10ef94d3, | ||
| 384 | 0xf501f5f0, | ||
| 385 | 0xf4037e21, | ||
| 386 | /* 0x04e6: ih */ | ||
| 387 | 0x80f9c60e, | ||
| 388 | 0xf90188fe, | ||
| 389 | 0xf990f980, | ||
| 390 | 0xf9b0f9a0, | ||
| 391 | 0xf9e0f9d0, | ||
| 392 | 0xf104bdf0, | ||
| 393 | 0xf00200a7, | ||
| 394 | 0xaacf00a3, | ||
| 395 | 0x04abc400, | ||
| 396 | 0xf02c0bf4, | ||
| 397 | 0xe7f11cd7, | ||
| 398 | 0xe3f01a00, | ||
| 399 | 0x00eecf00, | ||
| 400 | 0x1900f7f1, | ||
| 401 | 0xcf00f3f0, | ||
| 402 | 0x21f400ff, | ||
| 403 | 0x01e7f004, | ||
| 404 | 0x1d0007f1, | ||
| 405 | 0xd00003f0, | ||
| 406 | 0x04bd000e, | ||
| 407 | /* 0x0534: ih_no_fifo */ | ||
| 408 | 0x010007f1, | ||
| 409 | 0xd00003f0, | ||
| 410 | 0x04bd000a, | ||
| 411 | 0xe0fcf0fc, | ||
| 412 | 0xb0fcd0fc, | ||
| 413 | 0x90fca0fc, | ||
| 414 | 0x88fe80fc, | ||
| 415 | 0xf480fc00, | ||
| 416 | 0x01f80032, | ||
| 417 | /* 0x0558: hub_barrier_done */ | ||
| 418 | 0x9801f7f0, | ||
| 419 | 0xfebb040e, | ||
| 420 | 0x02ffb904, | ||
| 421 | 0x9418e7f1, | ||
| 422 | 0xf440e3f0, | ||
| 423 | 0x00f89d21, | ||
| 424 | /* 0x0570: ctx_redswitch */ | ||
| 425 | 0xf120f7f0, | ||
| 426 | 0xf0850007, | ||
| 427 | 0x0fd00103, | ||
| 428 | 0xf004bd00, | ||
| 429 | /* 0x0582: ctx_redswitch_delay */ | ||
| 430 | 0xe2b608e7, | ||
| 431 | 0xfd1bf401, | ||
| 432 | 0x0800f5f1, | ||
| 433 | 0x0200f5f1, | ||
| 434 | 0x850007f1, | ||
| 435 | 0xd00103f0, | ||
| 436 | 0x04bd000f, | 445 | 0x04bd000f, |
| 437 | /* 0x059e: ctx_xfer */ | 446 | 0xf50711f4, |
| 438 | 0x07f100f8, | 447 | /* 0x05c3: ctx_xfer_not_load */ |
| 439 | 0x03f08100, | 448 | 0xf5058221, |
| 440 | 0x000fd002, | 449 | 0xbd026a21, |
| 441 | 0x11f404bd, | 450 | 0xfc07f124, |
| 442 | 0x7021f507, | 451 | 0x0203f047, |
| 443 | /* 0x05b1: ctx_xfer_not_load */ | 452 | 0xbd0002d0, |
| 444 | 0x6a21f505, | 453 | 0x012cf004, |
| 445 | 0xf124bd02, | 454 | 0xf10320b6, |
| 446 | 0xf047fc07, | 455 | 0xf04afc07, |
| 447 | 0x02d00203, | 456 | 0x02d00203, |
| 448 | 0xf004bd00, | 457 | 0xf004bd00, |
| 449 | 0x20b6012c, | 458 | 0xa5f001ac, |
| 450 | 0xfc07f103, | 459 | 0x00b7f102, |
| 451 | 0x0203f04a, | 460 | 0x50b3f000, |
| 452 | 0xbd0002d0, | 461 | 0xb6040c98, |
| 453 | 0x01acf004, | 462 | 0xbcbb0fc4, |
| 454 | 0xf102a5f0, | 463 | 0x000c9800, |
| 455 | 0xf00000b7, | 464 | 0xf0010d98, |
| 456 | 0x0c9850b3, | 465 | 0x21f500e7, |
| 457 | 0x0fc4b604, | 466 | 0xacf0016f, |
| 458 | 0x9800bcbb, | 467 | 0x04a5f001, |
| 459 | 0x0d98000c, | 468 | 0x4000b7f1, |
| 460 | 0x00e7f001, | 469 | 0x9850b3f0, |
| 461 | 0x016f21f5, | 470 | 0xc4b6040c, |
| 462 | 0xf001acf0, | 471 | 0x00bcbb0f, |
| 463 | 0xb7f104a5, | 472 | 0x98010c98, |
| 464 | 0xb3f04000, | 473 | 0x0f98020d, |
| 465 | 0x040c9850, | 474 | 0x00e7f106, |
| 466 | 0xbb0fc4b6, | 475 | 0x6f21f508, |
| 467 | 0x0c9800bc, | 476 | 0x5e21f501, |
| 468 | 0x020d9801, | 477 | 0x0601f402, |
| 469 | 0xf1060f98, | 478 | /* 0x063b: ctx_xfer_post */ |
| 470 | 0xf50800e7, | 479 | 0xf50712f4, |
| 471 | 0xf5016f21, | 480 | /* 0x063f: ctx_xfer_done */ |
| 472 | 0xf4025e21, | 481 | 0xf5027f21, |
| 473 | 0x12f40601, | 482 | 0xf8056a21, |
| 474 | /* 0x0629: ctx_xfer_post */ | ||
| 475 | 0x7f21f507, | ||
| 476 | /* 0x062d: ctx_xfer_done */ | ||
| 477 | 0x5821f502, | ||
| 478 | 0x0000f805, | ||
| 479 | 0x00000000, | ||
| 480 | 0x00000000, | ||
| 481 | 0x00000000, | ||
| 482 | 0x00000000, | ||
| 483 | 0x00000000, | 483 | 0x00000000, |
| 484 | 0x00000000, | 484 | 0x00000000, |
| 485 | 0x00000000, | 485 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf117.fuc3.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf117.fuc3.h index 9a36d9cbb8a5..64d07df4b8b1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf117.fuc3.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf117.fuc3.h | |||
| @@ -314,7 +314,7 @@ uint32_t gf117_grgpc_code[] = { | |||
| 314 | 0x03f01200, | 314 | 0x03f01200, |
| 315 | 0x0002d000, | 315 | 0x0002d000, |
| 316 | 0x17f104bd, | 316 | 0x17f104bd, |
| 317 | 0x10fe0530, | 317 | 0x10fe0542, |
| 318 | 0x0007f100, | 318 | 0x0007f100, |
| 319 | 0x0003f007, | 319 | 0x0003f007, |
| 320 | 0xbd0000d0, | 320 | 0xbd0000d0, |
| @@ -333,188 +333,188 @@ uint32_t gf117_grgpc_code[] = { | |||
| 333 | 0xf0860027, | 333 | 0xf0860027, |
| 334 | 0x22cf0123, | 334 | 0x22cf0123, |
| 335 | 0x04028000, | 335 | 0x04028000, |
| 336 | 0x0c30e7f1, | 336 | 0xf10f24b6, |
| 337 | 0xbd50e3f0, | 337 | 0xf0c90007, |
| 338 | 0xbd34bd24, | 338 | 0x02d00103, |
| 339 | /* 0x0421: init_unk_loop */ | ||
| 340 | 0x6821f444, | ||
| 341 | 0xf400f6b0, | ||
| 342 | 0xf7f00f0b, | ||
| 343 | 0x04f2bb01, | ||
| 344 | 0xb6054ffd, | ||
| 345 | /* 0x0436: init_unk_next */ | ||
| 346 | 0x20b60130, | ||
| 347 | 0x04e0b601, | ||
| 348 | 0xf40126b0, | ||
| 349 | /* 0x0442: init_unk_done */ | ||
| 350 | 0x0380e21b, | ||
| 351 | 0x08048007, | ||
| 352 | 0x010027f1, | ||
| 353 | 0xcf0223f0, | ||
| 354 | 0x34bd0022, | ||
| 355 | 0xf1082595, | ||
| 356 | 0xf0c00007, | ||
| 357 | 0x05d00103, | ||
| 358 | 0xf104bd00, | 339 | 0xf104bd00, |
| 359 | 0xf0c10007, | 340 | 0xf00c30e7, |
| 360 | 0x05d00103, | 341 | 0x24bd50e3, |
| 361 | 0x9804bd00, | 342 | 0x44bd34bd, |
| 362 | 0x0f98000e, | 343 | /* 0x0430: init_unk_loop */ |
| 363 | 0x5021f501, | 344 | 0xb06821f4, |
| 364 | 0x002fbb01, | 345 | 0x0bf400f6, |
| 365 | 0x98003fbb, | 346 | 0x01f7f00f, |
| 366 | 0x0f98010e, | 347 | 0xfd04f2bb, |
| 367 | 0x5021f502, | 348 | 0x30b6054f, |
| 368 | 0x050e9801, | 349 | /* 0x0445: init_unk_next */ |
| 369 | 0xbb00effd, | 350 | 0x0120b601, |
| 370 | 0x3ebb002e, | 351 | 0xb004e0b6, |
| 371 | 0x020e9800, | 352 | 0x1bf40126, |
| 372 | 0xf5030f98, | 353 | /* 0x0451: init_unk_done */ |
| 373 | 0x98015021, | 354 | 0x070380e2, |
| 374 | 0xeffd070e, | 355 | 0xf1080480, |
| 375 | 0x002ebb00, | 356 | 0xf0010027, |
| 376 | 0xb6003ebb, | 357 | 0x22cf0223, |
| 377 | 0x07f10235, | 358 | 0x9534bd00, |
| 378 | 0x03f0d300, | 359 | 0x07f10825, |
| 379 | 0x0003d001, | 360 | 0x03f0c000, |
| 380 | 0x25b604bd, | 361 | 0x0005d001, |
| 381 | 0x0635b608, | ||
| 382 | 0xb60120b6, | ||
| 383 | 0x24b60130, | ||
| 384 | 0x0834b608, | ||
| 385 | 0xf5022fb9, | ||
| 386 | 0xbb02d321, | ||
| 387 | 0x07f1003f, | ||
| 388 | 0x03f00100, | ||
| 389 | 0x0003d002, | ||
| 390 | 0x24bd04bd, | ||
| 391 | 0xf11f29f0, | ||
| 392 | 0xf0080007, | ||
| 393 | 0x02d00203, | ||
| 394 | /* 0x04f3: main */ | ||
| 395 | 0xf404bd00, | ||
| 396 | 0x28f40031, | ||
| 397 | 0x24d7f000, | ||
| 398 | 0xf43921f4, | ||
| 399 | 0xe4b0f401, | ||
| 400 | 0x1e18f404, | ||
| 401 | 0xf00181fe, | ||
| 402 | 0x20bd0627, | ||
| 403 | 0xb60412fd, | ||
| 404 | 0x1efd01e4, | ||
| 405 | 0x0018fe05, | ||
| 406 | 0x05e821f5, | ||
| 407 | /* 0x0523: main_not_ctx_xfer */ | ||
| 408 | 0x94d30ef4, | ||
| 409 | 0xf5f010ef, | ||
| 410 | 0x7e21f501, | ||
| 411 | 0xc60ef403, | ||
| 412 | /* 0x0530: ih */ | ||
| 413 | 0x88fe80f9, | ||
| 414 | 0xf980f901, | ||
| 415 | 0xf9a0f990, | ||
| 416 | 0xf9d0f9b0, | ||
| 417 | 0xbdf0f9e0, | ||
| 418 | 0x00a7f104, | ||
| 419 | 0x00a3f002, | ||
| 420 | 0xc400aacf, | ||
| 421 | 0x0bf404ab, | ||
| 422 | 0x24d7f02c, | ||
| 423 | 0x1a00e7f1, | ||
| 424 | 0xcf00e3f0, | ||
| 425 | 0xf7f100ee, | ||
| 426 | 0xf3f01900, | ||
| 427 | 0x00ffcf00, | ||
| 428 | 0xf00421f4, | ||
| 429 | 0x07f101e7, | ||
| 430 | 0x03f01d00, | ||
| 431 | 0x000ed000, | ||
| 432 | /* 0x057e: ih_no_fifo */ | ||
| 433 | 0x07f104bd, | 362 | 0x07f104bd, |
| 434 | 0x03f00100, | 363 | 0x03f0c100, |
| 435 | 0x000ad000, | 364 | 0x0005d001, |
| 436 | 0xf0fc04bd, | 365 | 0x0e9804bd, |
| 437 | 0xd0fce0fc, | 366 | 0x010f9800, |
| 438 | 0xa0fcb0fc, | 367 | 0x015021f5, |
| 439 | 0x80fc90fc, | 368 | 0xbb002fbb, |
| 440 | 0xfc0088fe, | 369 | 0x0e98003f, |
| 441 | 0x0032f480, | 370 | 0x020f9801, |
| 442 | /* 0x05a2: hub_barrier_done */ | 371 | 0x015021f5, |
| 443 | 0xf7f001f8, | 372 | 0xfd050e98, |
| 444 | 0x040e9801, | 373 | 0x2ebb00ef, |
| 445 | 0xb904febb, | 374 | 0x003ebb00, |
| 446 | 0xe7f102ff, | 375 | 0x98020e98, |
| 447 | 0xe3f09418, | 376 | 0x21f5030f, |
| 448 | 0x9d21f440, | 377 | 0x0e980150, |
| 449 | /* 0x05ba: ctx_redswitch */ | 378 | 0x00effd07, |
| 450 | 0xf7f000f8, | 379 | 0xbb002ebb, |
| 451 | 0x0007f120, | 380 | 0x35b6003e, |
| 452 | 0x0103f085, | 381 | 0x0007f102, |
| 453 | 0xbd000fd0, | 382 | 0x0103f0d3, |
| 454 | 0x08e7f004, | 383 | 0xbd0003d0, |
| 455 | /* 0x05cc: ctx_redswitch_delay */ | 384 | 0x0825b604, |
| 456 | 0xf401e2b6, | 385 | 0xb60635b6, |
| 457 | 0xf5f1fd1b, | 386 | 0x30b60120, |
| 458 | 0xf5f10800, | 387 | 0x0824b601, |
| 459 | 0x07f10200, | 388 | 0xb90834b6, |
| 460 | 0x03f08500, | 389 | 0x21f5022f, |
| 461 | 0x000fd001, | 390 | 0x2fbb02d3, |
| 462 | 0x00f804bd, | 391 | 0x003fbb00, |
| 463 | /* 0x05e8: ctx_xfer */ | 392 | 0x010007f1, |
| 464 | 0x810007f1, | ||
| 465 | 0xd00203f0, | 393 | 0xd00203f0, |
| 466 | 0x04bd000f, | 394 | 0x04bd0003, |
| 467 | 0xf50711f4, | 395 | 0x29f024bd, |
| 468 | /* 0x05fb: ctx_xfer_not_load */ | 396 | 0x0007f11f, |
| 469 | 0xf505ba21, | 397 | 0x0203f008, |
| 470 | 0xbd026a21, | ||
| 471 | 0xfc07f124, | ||
| 472 | 0x0203f047, | ||
| 473 | 0xbd0002d0, | 398 | 0xbd0002d0, |
| 474 | 0x012cf004, | 399 | /* 0x0505: main */ |
| 475 | 0xf10320b6, | 400 | 0x0031f404, |
| 476 | 0xf04afc07, | 401 | 0xf00028f4, |
| 402 | 0x21f424d7, | ||
| 403 | 0xf401f439, | ||
| 404 | 0xf404e4b0, | ||
| 405 | 0x81fe1e18, | ||
| 406 | 0x0627f001, | ||
| 407 | 0x12fd20bd, | ||
| 408 | 0x01e4b604, | ||
| 409 | 0xfe051efd, | ||
| 410 | 0x21f50018, | ||
| 411 | 0x0ef405fa, | ||
| 412 | /* 0x0535: main_not_ctx_xfer */ | ||
| 413 | 0x10ef94d3, | ||
| 414 | 0xf501f5f0, | ||
| 415 | 0xf4037e21, | ||
| 416 | /* 0x0542: ih */ | ||
| 417 | 0x80f9c60e, | ||
| 418 | 0xf90188fe, | ||
| 419 | 0xf990f980, | ||
| 420 | 0xf9b0f9a0, | ||
| 421 | 0xf9e0f9d0, | ||
| 422 | 0xf104bdf0, | ||
| 423 | 0xf00200a7, | ||
| 424 | 0xaacf00a3, | ||
| 425 | 0x04abc400, | ||
| 426 | 0xf02c0bf4, | ||
| 427 | 0xe7f124d7, | ||
| 428 | 0xe3f01a00, | ||
| 429 | 0x00eecf00, | ||
| 430 | 0x1900f7f1, | ||
| 431 | 0xcf00f3f0, | ||
| 432 | 0x21f400ff, | ||
| 433 | 0x01e7f004, | ||
| 434 | 0x1d0007f1, | ||
| 435 | 0xd00003f0, | ||
| 436 | 0x04bd000e, | ||
| 437 | /* 0x0590: ih_no_fifo */ | ||
| 438 | 0x010007f1, | ||
| 439 | 0xd00003f0, | ||
| 440 | 0x04bd000a, | ||
| 441 | 0xe0fcf0fc, | ||
| 442 | 0xb0fcd0fc, | ||
| 443 | 0x90fca0fc, | ||
| 444 | 0x88fe80fc, | ||
| 445 | 0xf480fc00, | ||
| 446 | 0x01f80032, | ||
| 447 | /* 0x05b4: hub_barrier_done */ | ||
| 448 | 0x9801f7f0, | ||
| 449 | 0xfebb040e, | ||
| 450 | 0x02ffb904, | ||
| 451 | 0x9418e7f1, | ||
| 452 | 0xf440e3f0, | ||
| 453 | 0x00f89d21, | ||
| 454 | /* 0x05cc: ctx_redswitch */ | ||
| 455 | 0xf120f7f0, | ||
| 456 | 0xf0850007, | ||
| 457 | 0x0fd00103, | ||
| 458 | 0xf004bd00, | ||
| 459 | /* 0x05de: ctx_redswitch_delay */ | ||
| 460 | 0xe2b608e7, | ||
| 461 | 0xfd1bf401, | ||
| 462 | 0x0800f5f1, | ||
| 463 | 0x0200f5f1, | ||
| 464 | 0x850007f1, | ||
| 465 | 0xd00103f0, | ||
| 466 | 0x04bd000f, | ||
| 467 | /* 0x05fa: ctx_xfer */ | ||
| 468 | 0x07f100f8, | ||
| 469 | 0x03f08100, | ||
| 470 | 0x000fd002, | ||
| 471 | 0x11f404bd, | ||
| 472 | 0xcc21f507, | ||
| 473 | /* 0x060d: ctx_xfer_not_load */ | ||
| 474 | 0x6a21f505, | ||
| 475 | 0xf124bd02, | ||
| 476 | 0xf047fc07, | ||
| 477 | 0x02d00203, | 477 | 0x02d00203, |
| 478 | 0xf004bd00, | 478 | 0xf004bd00, |
| 479 | 0xa5f001ac, | 479 | 0x20b6012c, |
| 480 | 0x00b7f102, | 480 | 0xfc07f103, |
| 481 | 0x50b3f000, | 481 | 0x0203f04a, |
| 482 | 0xb6040c98, | 482 | 0xbd0002d0, |
| 483 | 0xbcbb0fc4, | 483 | 0x01acf004, |
| 484 | 0x000c9800, | 484 | 0xf102a5f0, |
| 485 | 0xf0010d98, | 485 | 0xf00000b7, |
| 486 | 0x21f500e7, | 486 | 0x0c9850b3, |
| 487 | 0xacf0016f, | 487 | 0x0fc4b604, |
| 488 | 0x00b7f101, | 488 | 0x9800bcbb, |
| 489 | 0x50b3f040, | 489 | 0x0d98000c, |
| 490 | 0xb6040c98, | 490 | 0x00e7f001, |
| 491 | 0xbcbb0fc4, | 491 | 0x016f21f5, |
| 492 | 0x010c9800, | 492 | 0xf101acf0, |
| 493 | 0x98020d98, | 493 | 0xf04000b7, |
| 494 | 0xe7f1060f, | 494 | 0x0c9850b3, |
| 495 | 0x21f50800, | 495 | 0x0fc4b604, |
| 496 | 0xacf0016f, | 496 | 0x9800bcbb, |
| 497 | 0x04a5f001, | 497 | 0x0d98010c, |
| 498 | 0x3000b7f1, | 498 | 0x060f9802, |
| 499 | 0x9850b3f0, | 499 | 0x0800e7f1, |
| 500 | 0xc4b6040c, | 500 | 0x016f21f5, |
| 501 | 0x00bcbb0f, | 501 | 0xf001acf0, |
| 502 | 0x98020c98, | 502 | 0xb7f104a5, |
| 503 | 0x0f98030d, | 503 | 0xb3f03000, |
| 504 | 0x00e7f108, | 504 | 0x040c9850, |
| 505 | 0x6f21f502, | 505 | 0xbb0fc4b6, |
| 506 | 0x5e21f501, | 506 | 0x0c9800bc, |
| 507 | 0x0601f402, | 507 | 0x030d9802, |
| 508 | /* 0x0697: ctx_xfer_post */ | 508 | 0xf1080f98, |
| 509 | 0xf50712f4, | 509 | 0xf50200e7, |
| 510 | /* 0x069b: ctx_xfer_done */ | 510 | 0xf5016f21, |
| 511 | 0xf5027f21, | 511 | 0xf4025e21, |
| 512 | 0xf805a221, | 512 | 0x12f40601, |
| 513 | 0x00000000, | 513 | /* 0x06a9: ctx_xfer_post */ |
| 514 | 0x00000000, | 514 | 0x7f21f507, |
| 515 | 0x00000000, | 515 | /* 0x06ad: ctx_xfer_done */ |
| 516 | 0x00000000, | 516 | 0xb421f502, |
| 517 | 0x00000000, | 517 | 0x0000f805, |
| 518 | 0x00000000, | 518 | 0x00000000, |
| 519 | 0x00000000, | 519 | 0x00000000, |
| 520 | 0x00000000, | 520 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk104.fuc3.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk104.fuc3.h index 49020fff4317..2f596433c222 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk104.fuc3.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk104.fuc3.h | |||
| @@ -314,7 +314,7 @@ uint32_t gk104_grgpc_code[] = { | |||
| 314 | 0x03f01200, | 314 | 0x03f01200, |
| 315 | 0x0002d000, | 315 | 0x0002d000, |
| 316 | 0x17f104bd, | 316 | 0x17f104bd, |
| 317 | 0x10fe0530, | 317 | 0x10fe0542, |
| 318 | 0x0007f100, | 318 | 0x0007f100, |
| 319 | 0x0003f007, | 319 | 0x0003f007, |
| 320 | 0xbd0000d0, | 320 | 0xbd0000d0, |
| @@ -333,188 +333,188 @@ uint32_t gk104_grgpc_code[] = { | |||
| 333 | 0xf0860027, | 333 | 0xf0860027, |
| 334 | 0x22cf0123, | 334 | 0x22cf0123, |
| 335 | 0x04028000, | 335 | 0x04028000, |
| 336 | 0x0c30e7f1, | 336 | 0xf10f24b6, |
| 337 | 0xbd50e3f0, | 337 | 0xf0c90007, |
| 338 | 0xbd34bd24, | 338 | 0x02d00103, |
| 339 | /* 0x0421: init_unk_loop */ | ||
| 340 | 0x6821f444, | ||
| 341 | 0xf400f6b0, | ||
| 342 | 0xf7f00f0b, | ||
| 343 | 0x04f2bb01, | ||
| 344 | 0xb6054ffd, | ||
| 345 | /* 0x0436: init_unk_next */ | ||
| 346 | 0x20b60130, | ||
| 347 | 0x04e0b601, | ||
| 348 | 0xf40126b0, | ||
| 349 | /* 0x0442: init_unk_done */ | ||
| 350 | 0x0380e21b, | ||
| 351 | 0x08048007, | ||
| 352 | 0x010027f1, | ||
| 353 | 0xcf0223f0, | ||
| 354 | 0x34bd0022, | ||
| 355 | 0xf1082595, | ||
| 356 | 0xf0c00007, | ||
| 357 | 0x05d00103, | ||
| 358 | 0xf104bd00, | 339 | 0xf104bd00, |
| 359 | 0xf0c10007, | 340 | 0xf00c30e7, |
| 360 | 0x05d00103, | 341 | 0x24bd50e3, |
| 361 | 0x9804bd00, | 342 | 0x44bd34bd, |
| 362 | 0x0f98000e, | 343 | /* 0x0430: init_unk_loop */ |
| 363 | 0x5021f501, | 344 | 0xb06821f4, |
| 364 | 0x002fbb01, | 345 | 0x0bf400f6, |
| 365 | 0x98003fbb, | 346 | 0x01f7f00f, |
| 366 | 0x0f98010e, | 347 | 0xfd04f2bb, |
| 367 | 0x5021f502, | 348 | 0x30b6054f, |
| 368 | 0x050e9801, | 349 | /* 0x0445: init_unk_next */ |
| 369 | 0xbb00effd, | 350 | 0x0120b601, |
| 370 | 0x3ebb002e, | 351 | 0xb004e0b6, |
| 371 | 0x020e9800, | 352 | 0x1bf40126, |
| 372 | 0xf5030f98, | 353 | /* 0x0451: init_unk_done */ |
| 373 | 0x98015021, | 354 | 0x070380e2, |
| 374 | 0xeffd070e, | 355 | 0xf1080480, |
| 375 | 0x002ebb00, | 356 | 0xf0010027, |
| 376 | 0xb6003ebb, | 357 | 0x22cf0223, |
| 377 | 0x07f10235, | 358 | 0x9534bd00, |
| 378 | 0x03f0d300, | 359 | 0x07f10825, |
| 379 | 0x0003d001, | 360 | 0x03f0c000, |
| 380 | 0x25b604bd, | 361 | 0x0005d001, |
| 381 | 0x0635b608, | ||
| 382 | 0xb60120b6, | ||
| 383 | 0x24b60130, | ||
| 384 | 0x0834b608, | ||
| 385 | 0xf5022fb9, | ||
| 386 | 0xbb02d321, | ||
| 387 | 0x07f1003f, | ||
| 388 | 0x03f00100, | ||
| 389 | 0x0003d002, | ||
| 390 | 0x24bd04bd, | ||
| 391 | 0xf11f29f0, | ||
| 392 | 0xf0080007, | ||
| 393 | 0x02d00203, | ||
| 394 | /* 0x04f3: main */ | ||
| 395 | 0xf404bd00, | ||
| 396 | 0x28f40031, | ||
| 397 | 0x24d7f000, | ||
| 398 | 0xf43921f4, | ||
| 399 | 0xe4b0f401, | ||
| 400 | 0x1e18f404, | ||
| 401 | 0xf00181fe, | ||
| 402 | 0x20bd0627, | ||
| 403 | 0xb60412fd, | ||
| 404 | 0x1efd01e4, | ||
| 405 | 0x0018fe05, | ||
| 406 | 0x05e821f5, | ||
| 407 | /* 0x0523: main_not_ctx_xfer */ | ||
| 408 | 0x94d30ef4, | ||
| 409 | 0xf5f010ef, | ||
| 410 | 0x7e21f501, | ||
| 411 | 0xc60ef403, | ||
| 412 | /* 0x0530: ih */ | ||
| 413 | 0x88fe80f9, | ||
| 414 | 0xf980f901, | ||
| 415 | 0xf9a0f990, | ||
| 416 | 0xf9d0f9b0, | ||
| 417 | 0xbdf0f9e0, | ||
| 418 | 0x00a7f104, | ||
| 419 | 0x00a3f002, | ||
| 420 | 0xc400aacf, | ||
| 421 | 0x0bf404ab, | ||
| 422 | 0x24d7f02c, | ||
| 423 | 0x1a00e7f1, | ||
| 424 | 0xcf00e3f0, | ||
| 425 | 0xf7f100ee, | ||
| 426 | 0xf3f01900, | ||
| 427 | 0x00ffcf00, | ||
| 428 | 0xf00421f4, | ||
| 429 | 0x07f101e7, | ||
| 430 | 0x03f01d00, | ||
| 431 | 0x000ed000, | ||
| 432 | /* 0x057e: ih_no_fifo */ | ||
| 433 | 0x07f104bd, | 362 | 0x07f104bd, |
| 434 | 0x03f00100, | 363 | 0x03f0c100, |
| 435 | 0x000ad000, | 364 | 0x0005d001, |
| 436 | 0xf0fc04bd, | 365 | 0x0e9804bd, |
| 437 | 0xd0fce0fc, | 366 | 0x010f9800, |
| 438 | 0xa0fcb0fc, | 367 | 0x015021f5, |
| 439 | 0x80fc90fc, | 368 | 0xbb002fbb, |
| 440 | 0xfc0088fe, | 369 | 0x0e98003f, |
| 441 | 0x0032f480, | 370 | 0x020f9801, |
| 442 | /* 0x05a2: hub_barrier_done */ | 371 | 0x015021f5, |
| 443 | 0xf7f001f8, | 372 | 0xfd050e98, |
| 444 | 0x040e9801, | 373 | 0x2ebb00ef, |
| 445 | 0xb904febb, | 374 | 0x003ebb00, |
| 446 | 0xe7f102ff, | 375 | 0x98020e98, |
| 447 | 0xe3f09418, | 376 | 0x21f5030f, |
| 448 | 0x9d21f440, | 377 | 0x0e980150, |
| 449 | /* 0x05ba: ctx_redswitch */ | 378 | 0x00effd07, |
| 450 | 0xf7f000f8, | 379 | 0xbb002ebb, |
| 451 | 0x0007f120, | 380 | 0x35b6003e, |
| 452 | 0x0103f085, | 381 | 0x0007f102, |
| 453 | 0xbd000fd0, | 382 | 0x0103f0d3, |
| 454 | 0x08e7f004, | 383 | 0xbd0003d0, |
| 455 | /* 0x05cc: ctx_redswitch_delay */ | 384 | 0x0825b604, |
| 456 | 0xf401e2b6, | 385 | 0xb60635b6, |
| 457 | 0xf5f1fd1b, | 386 | 0x30b60120, |
| 458 | 0xf5f10800, | 387 | 0x0824b601, |
| 459 | 0x07f10200, | 388 | 0xb90834b6, |
| 460 | 0x03f08500, | 389 | 0x21f5022f, |
| 461 | 0x000fd001, | 390 | 0x2fbb02d3, |
| 462 | 0x00f804bd, | 391 | 0x003fbb00, |
| 463 | /* 0x05e8: ctx_xfer */ | 392 | 0x010007f1, |
| 464 | 0x810007f1, | ||
| 465 | 0xd00203f0, | 393 | 0xd00203f0, |
| 466 | 0x04bd000f, | 394 | 0x04bd0003, |
| 467 | 0xf50711f4, | 395 | 0x29f024bd, |
| 468 | /* 0x05fb: ctx_xfer_not_load */ | 396 | 0x0007f11f, |
| 469 | 0xf505ba21, | 397 | 0x0203f008, |
| 470 | 0xbd026a21, | ||
| 471 | 0xfc07f124, | ||
| 472 | 0x0203f047, | ||
| 473 | 0xbd0002d0, | 398 | 0xbd0002d0, |
| 474 | 0x012cf004, | 399 | /* 0x0505: main */ |
| 475 | 0xf10320b6, | 400 | 0x0031f404, |
| 476 | 0xf04afc07, | 401 | 0xf00028f4, |
| 402 | 0x21f424d7, | ||
| 403 | 0xf401f439, | ||
| 404 | 0xf404e4b0, | ||
| 405 | 0x81fe1e18, | ||
| 406 | 0x0627f001, | ||
| 407 | 0x12fd20bd, | ||
| 408 | 0x01e4b604, | ||
| 409 | 0xfe051efd, | ||
| 410 | 0x21f50018, | ||
| 411 | 0x0ef405fa, | ||
| 412 | /* 0x0535: main_not_ctx_xfer */ | ||
| 413 | 0x10ef94d3, | ||
| 414 | 0xf501f5f0, | ||
| 415 | 0xf4037e21, | ||
| 416 | /* 0x0542: ih */ | ||
| 417 | 0x80f9c60e, | ||
| 418 | 0xf90188fe, | ||
| 419 | 0xf990f980, | ||
| 420 | 0xf9b0f9a0, | ||
| 421 | 0xf9e0f9d0, | ||
| 422 | 0xf104bdf0, | ||
| 423 | 0xf00200a7, | ||
| 424 | 0xaacf00a3, | ||
| 425 | 0x04abc400, | ||
| 426 | 0xf02c0bf4, | ||
| 427 | 0xe7f124d7, | ||
| 428 | 0xe3f01a00, | ||
| 429 | 0x00eecf00, | ||
| 430 | 0x1900f7f1, | ||
| 431 | 0xcf00f3f0, | ||
| 432 | 0x21f400ff, | ||
| 433 | 0x01e7f004, | ||
| 434 | 0x1d0007f1, | ||
| 435 | 0xd00003f0, | ||
| 436 | 0x04bd000e, | ||
| 437 | /* 0x0590: ih_no_fifo */ | ||
| 438 | 0x010007f1, | ||
| 439 | 0xd00003f0, | ||
| 440 | 0x04bd000a, | ||
| 441 | 0xe0fcf0fc, | ||
| 442 | 0xb0fcd0fc, | ||
| 443 | 0x90fca0fc, | ||
| 444 | 0x88fe80fc, | ||
| 445 | 0xf480fc00, | ||
| 446 | 0x01f80032, | ||
| 447 | /* 0x05b4: hub_barrier_done */ | ||
| 448 | 0x9801f7f0, | ||
| 449 | 0xfebb040e, | ||
| 450 | 0x02ffb904, | ||
| 451 | 0x9418e7f1, | ||
| 452 | 0xf440e3f0, | ||
| 453 | 0x00f89d21, | ||
| 454 | /* 0x05cc: ctx_redswitch */ | ||
| 455 | 0xf120f7f0, | ||
| 456 | 0xf0850007, | ||
| 457 | 0x0fd00103, | ||
| 458 | 0xf004bd00, | ||
| 459 | /* 0x05de: ctx_redswitch_delay */ | ||
| 460 | 0xe2b608e7, | ||
| 461 | 0xfd1bf401, | ||
| 462 | 0x0800f5f1, | ||
| 463 | 0x0200f5f1, | ||
| 464 | 0x850007f1, | ||
| 465 | 0xd00103f0, | ||
| 466 | 0x04bd000f, | ||
| 467 | /* 0x05fa: ctx_xfer */ | ||
| 468 | 0x07f100f8, | ||
| 469 | 0x03f08100, | ||
| 470 | 0x000fd002, | ||
| 471 | 0x11f404bd, | ||
| 472 | 0xcc21f507, | ||
| 473 | /* 0x060d: ctx_xfer_not_load */ | ||
| 474 | 0x6a21f505, | ||
| 475 | 0xf124bd02, | ||
| 476 | 0xf047fc07, | ||
| 477 | 0x02d00203, | 477 | 0x02d00203, |
| 478 | 0xf004bd00, | 478 | 0xf004bd00, |
| 479 | 0xa5f001ac, | 479 | 0x20b6012c, |
| 480 | 0x00b7f102, | 480 | 0xfc07f103, |
| 481 | 0x50b3f000, | 481 | 0x0203f04a, |
| 482 | 0xb6040c98, | 482 | 0xbd0002d0, |
| 483 | 0xbcbb0fc4, | 483 | 0x01acf004, |
| 484 | 0x000c9800, | 484 | 0xf102a5f0, |
| 485 | 0xf0010d98, | 485 | 0xf00000b7, |
| 486 | 0x21f500e7, | 486 | 0x0c9850b3, |
| 487 | 0xacf0016f, | 487 | 0x0fc4b604, |
| 488 | 0x00b7f101, | 488 | 0x9800bcbb, |
| 489 | 0x50b3f040, | 489 | 0x0d98000c, |
| 490 | 0xb6040c98, | 490 | 0x00e7f001, |
| 491 | 0xbcbb0fc4, | 491 | 0x016f21f5, |
| 492 | 0x010c9800, | 492 | 0xf101acf0, |
| 493 | 0x98020d98, | 493 | 0xf04000b7, |
| 494 | 0xe7f1060f, | 494 | 0x0c9850b3, |
| 495 | 0x21f50800, | 495 | 0x0fc4b604, |
| 496 | 0xacf0016f, | 496 | 0x9800bcbb, |
| 497 | 0x04a5f001, | 497 | 0x0d98010c, |
| 498 | 0x3000b7f1, | 498 | 0x060f9802, |
| 499 | 0x9850b3f0, | 499 | 0x0800e7f1, |
| 500 | 0xc4b6040c, | 500 | 0x016f21f5, |
| 501 | 0x00bcbb0f, | 501 | 0xf001acf0, |
| 502 | 0x98020c98, | 502 | 0xb7f104a5, |
| 503 | 0x0f98030d, | 503 | 0xb3f03000, |
| 504 | 0x00e7f108, | 504 | 0x040c9850, |
| 505 | 0x6f21f502, | 505 | 0xbb0fc4b6, |
| 506 | 0x5e21f501, | 506 | 0x0c9800bc, |
| 507 | 0x0601f402, | 507 | 0x030d9802, |
| 508 | /* 0x0697: ctx_xfer_post */ | 508 | 0xf1080f98, |
| 509 | 0xf50712f4, | 509 | 0xf50200e7, |
| 510 | /* 0x069b: ctx_xfer_done */ | 510 | 0xf5016f21, |
| 511 | 0xf5027f21, | 511 | 0xf4025e21, |
| 512 | 0xf805a221, | 512 | 0x12f40601, |
| 513 | 0x00000000, | 513 | /* 0x06a9: ctx_xfer_post */ |
| 514 | 0x00000000, | 514 | 0x7f21f507, |
| 515 | 0x00000000, | 515 | /* 0x06ad: ctx_xfer_done */ |
| 516 | 0x00000000, | 516 | 0xb421f502, |
| 517 | 0x00000000, | 517 | 0x0000f805, |
| 518 | 0x00000000, | 518 | 0x00000000, |
| 519 | 0x00000000, | 519 | 0x00000000, |
| 520 | 0x00000000, | 520 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk110.fuc3.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk110.fuc3.h index c95b07e3bce5..ee8e54db8fc9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk110.fuc3.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk110.fuc3.h | |||
| @@ -314,7 +314,7 @@ uint32_t gk110_grgpc_code[] = { | |||
| 314 | 0x03f01200, | 314 | 0x03f01200, |
| 315 | 0x0002d000, | 315 | 0x0002d000, |
| 316 | 0x17f104bd, | 316 | 0x17f104bd, |
| 317 | 0x10fe0530, | 317 | 0x10fe0542, |
| 318 | 0x0007f100, | 318 | 0x0007f100, |
| 319 | 0x0003f007, | 319 | 0x0003f007, |
| 320 | 0xbd0000d0, | 320 | 0xbd0000d0, |
| @@ -333,188 +333,188 @@ uint32_t gk110_grgpc_code[] = { | |||
| 333 | 0xf0860027, | 333 | 0xf0860027, |
| 334 | 0x22cf0123, | 334 | 0x22cf0123, |
| 335 | 0x04028000, | 335 | 0x04028000, |
| 336 | 0x0c30e7f1, | 336 | 0xf10f24b6, |
| 337 | 0xbd50e3f0, | 337 | 0xf0c90007, |
| 338 | 0xbd34bd24, | 338 | 0x02d00103, |
| 339 | /* 0x0421: init_unk_loop */ | ||
| 340 | 0x6821f444, | ||
| 341 | 0xf400f6b0, | ||
| 342 | 0xf7f00f0b, | ||
| 343 | 0x04f2bb01, | ||
| 344 | 0xb6054ffd, | ||
| 345 | /* 0x0436: init_unk_next */ | ||
| 346 | 0x20b60130, | ||
| 347 | 0x04e0b601, | ||
| 348 | 0xf40226b0, | ||
| 349 | /* 0x0442: init_unk_done */ | ||
| 350 | 0x0380e21b, | ||
| 351 | 0x08048007, | ||
| 352 | 0x010027f1, | ||
| 353 | 0xcf0223f0, | ||
| 354 | 0x34bd0022, | ||
| 355 | 0xf1082595, | ||
| 356 | 0xf0c00007, | ||
| 357 | 0x05d00103, | ||
| 358 | 0xf104bd00, | 339 | 0xf104bd00, |
| 359 | 0xf0c10007, | 340 | 0xf00c30e7, |
| 360 | 0x05d00103, | 341 | 0x24bd50e3, |
| 361 | 0x9804bd00, | 342 | 0x44bd34bd, |
| 362 | 0x0f98000e, | 343 | /* 0x0430: init_unk_loop */ |
| 363 | 0x5021f501, | 344 | 0xb06821f4, |
| 364 | 0x002fbb01, | 345 | 0x0bf400f6, |
| 365 | 0x98003fbb, | 346 | 0x01f7f00f, |
| 366 | 0x0f98010e, | 347 | 0xfd04f2bb, |
| 367 | 0x5021f502, | 348 | 0x30b6054f, |
| 368 | 0x050e9801, | 349 | /* 0x0445: init_unk_next */ |
| 369 | 0xbb00effd, | 350 | 0x0120b601, |
| 370 | 0x3ebb002e, | 351 | 0xb004e0b6, |
| 371 | 0x020e9800, | 352 | 0x1bf40226, |
| 372 | 0xf5030f98, | 353 | /* 0x0451: init_unk_done */ |
| 373 | 0x98015021, | 354 | 0x070380e2, |
| 374 | 0xeffd070e, | 355 | 0xf1080480, |
| 375 | 0x002ebb00, | 356 | 0xf0010027, |
| 376 | 0xb6003ebb, | 357 | 0x22cf0223, |
| 377 | 0x07f10235, | 358 | 0x9534bd00, |
| 378 | 0x03f0d300, | 359 | 0x07f10825, |
| 379 | 0x0003d001, | 360 | 0x03f0c000, |
| 380 | 0x25b604bd, | 361 | 0x0005d001, |
| 381 | 0x0635b608, | ||
| 382 | 0xb60120b6, | ||
| 383 | 0x24b60130, | ||
| 384 | 0x0834b608, | ||
| 385 | 0xf5022fb9, | ||
| 386 | 0xbb02d321, | ||
| 387 | 0x07f1003f, | ||
| 388 | 0x03f00100, | ||
| 389 | 0x0003d002, | ||
| 390 | 0x24bd04bd, | ||
| 391 | 0xf11f29f0, | ||
| 392 | 0xf0300007, | ||
| 393 | 0x02d00203, | ||
| 394 | /* 0x04f3: main */ | ||
| 395 | 0xf404bd00, | ||
| 396 | 0x28f40031, | ||
| 397 | 0x24d7f000, | ||
| 398 | 0xf43921f4, | ||
| 399 | 0xe4b0f401, | ||
| 400 | 0x1e18f404, | ||
| 401 | 0xf00181fe, | ||
| 402 | 0x20bd0627, | ||
| 403 | 0xb60412fd, | ||
| 404 | 0x1efd01e4, | ||
| 405 | 0x0018fe05, | ||
| 406 | 0x05e821f5, | ||
| 407 | /* 0x0523: main_not_ctx_xfer */ | ||
| 408 | 0x94d30ef4, | ||
| 409 | 0xf5f010ef, | ||
| 410 | 0x7e21f501, | ||
| 411 | 0xc60ef403, | ||
| 412 | /* 0x0530: ih */ | ||
| 413 | 0x88fe80f9, | ||
| 414 | 0xf980f901, | ||
| 415 | 0xf9a0f990, | ||
| 416 | 0xf9d0f9b0, | ||
| 417 | 0xbdf0f9e0, | ||
| 418 | 0x00a7f104, | ||
| 419 | 0x00a3f002, | ||
| 420 | 0xc400aacf, | ||
| 421 | 0x0bf404ab, | ||
| 422 | 0x24d7f02c, | ||
| 423 | 0x1a00e7f1, | ||
| 424 | 0xcf00e3f0, | ||
| 425 | 0xf7f100ee, | ||
| 426 | 0xf3f01900, | ||
| 427 | 0x00ffcf00, | ||
| 428 | 0xf00421f4, | ||
| 429 | 0x07f101e7, | ||
| 430 | 0x03f01d00, | ||
| 431 | 0x000ed000, | ||
| 432 | /* 0x057e: ih_no_fifo */ | ||
| 433 | 0x07f104bd, | 362 | 0x07f104bd, |
| 434 | 0x03f00100, | 363 | 0x03f0c100, |
| 435 | 0x000ad000, | 364 | 0x0005d001, |
| 436 | 0xf0fc04bd, | 365 | 0x0e9804bd, |
| 437 | 0xd0fce0fc, | 366 | 0x010f9800, |
| 438 | 0xa0fcb0fc, | 367 | 0x015021f5, |
| 439 | 0x80fc90fc, | 368 | 0xbb002fbb, |
| 440 | 0xfc0088fe, | 369 | 0x0e98003f, |
| 441 | 0x0032f480, | 370 | 0x020f9801, |
| 442 | /* 0x05a2: hub_barrier_done */ | 371 | 0x015021f5, |
| 443 | 0xf7f001f8, | 372 | 0xfd050e98, |
| 444 | 0x040e9801, | 373 | 0x2ebb00ef, |
| 445 | 0xb904febb, | 374 | 0x003ebb00, |
| 446 | 0xe7f102ff, | 375 | 0x98020e98, |
| 447 | 0xe3f09418, | 376 | 0x21f5030f, |
| 448 | 0x9d21f440, | 377 | 0x0e980150, |
| 449 | /* 0x05ba: ctx_redswitch */ | 378 | 0x00effd07, |
| 450 | 0xf7f000f8, | 379 | 0xbb002ebb, |
| 451 | 0x0007f120, | 380 | 0x35b6003e, |
| 452 | 0x0103f085, | 381 | 0x0007f102, |
| 453 | 0xbd000fd0, | 382 | 0x0103f0d3, |
| 454 | 0x08e7f004, | 383 | 0xbd0003d0, |
| 455 | /* 0x05cc: ctx_redswitch_delay */ | 384 | 0x0825b604, |
| 456 | 0xf401e2b6, | 385 | 0xb60635b6, |
| 457 | 0xf5f1fd1b, | 386 | 0x30b60120, |
| 458 | 0xf5f10800, | 387 | 0x0824b601, |
| 459 | 0x07f10200, | 388 | 0xb90834b6, |
| 460 | 0x03f08500, | 389 | 0x21f5022f, |
| 461 | 0x000fd001, | 390 | 0x2fbb02d3, |
| 462 | 0x00f804bd, | 391 | 0x003fbb00, |
| 463 | /* 0x05e8: ctx_xfer */ | 392 | 0x010007f1, |
| 464 | 0x810007f1, | ||
| 465 | 0xd00203f0, | 393 | 0xd00203f0, |
| 466 | 0x04bd000f, | 394 | 0x04bd0003, |
| 467 | 0xf50711f4, | 395 | 0x29f024bd, |
| 468 | /* 0x05fb: ctx_xfer_not_load */ | 396 | 0x0007f11f, |
| 469 | 0xf505ba21, | 397 | 0x0203f030, |
| 470 | 0xbd026a21, | ||
| 471 | 0xfc07f124, | ||
| 472 | 0x0203f047, | ||
| 473 | 0xbd0002d0, | 398 | 0xbd0002d0, |
| 474 | 0x012cf004, | 399 | /* 0x0505: main */ |
| 475 | 0xf10320b6, | 400 | 0x0031f404, |
| 476 | 0xf04afc07, | 401 | 0xf00028f4, |
| 402 | 0x21f424d7, | ||
| 403 | 0xf401f439, | ||
| 404 | 0xf404e4b0, | ||
| 405 | 0x81fe1e18, | ||
| 406 | 0x0627f001, | ||
| 407 | 0x12fd20bd, | ||
| 408 | 0x01e4b604, | ||
| 409 | 0xfe051efd, | ||
| 410 | 0x21f50018, | ||
| 411 | 0x0ef405fa, | ||
| 412 | /* 0x0535: main_not_ctx_xfer */ | ||
| 413 | 0x10ef94d3, | ||
| 414 | 0xf501f5f0, | ||
| 415 | 0xf4037e21, | ||
| 416 | /* 0x0542: ih */ | ||
| 417 | 0x80f9c60e, | ||
| 418 | 0xf90188fe, | ||
| 419 | 0xf990f980, | ||
| 420 | 0xf9b0f9a0, | ||
| 421 | 0xf9e0f9d0, | ||
| 422 | 0xf104bdf0, | ||
| 423 | 0xf00200a7, | ||
| 424 | 0xaacf00a3, | ||
| 425 | 0x04abc400, | ||
| 426 | 0xf02c0bf4, | ||
| 427 | 0xe7f124d7, | ||
| 428 | 0xe3f01a00, | ||
| 429 | 0x00eecf00, | ||
| 430 | 0x1900f7f1, | ||
| 431 | 0xcf00f3f0, | ||
| 432 | 0x21f400ff, | ||
| 433 | 0x01e7f004, | ||
| 434 | 0x1d0007f1, | ||
| 435 | 0xd00003f0, | ||
| 436 | 0x04bd000e, | ||
| 437 | /* 0x0590: ih_no_fifo */ | ||
| 438 | 0x010007f1, | ||
| 439 | 0xd00003f0, | ||
| 440 | 0x04bd000a, | ||
| 441 | 0xe0fcf0fc, | ||
| 442 | 0xb0fcd0fc, | ||
| 443 | 0x90fca0fc, | ||
| 444 | 0x88fe80fc, | ||
| 445 | 0xf480fc00, | ||
| 446 | 0x01f80032, | ||
| 447 | /* 0x05b4: hub_barrier_done */ | ||
| 448 | 0x9801f7f0, | ||
| 449 | 0xfebb040e, | ||
| 450 | 0x02ffb904, | ||
| 451 | 0x9418e7f1, | ||
| 452 | 0xf440e3f0, | ||
| 453 | 0x00f89d21, | ||
| 454 | /* 0x05cc: ctx_redswitch */ | ||
| 455 | 0xf120f7f0, | ||
| 456 | 0xf0850007, | ||
| 457 | 0x0fd00103, | ||
| 458 | 0xf004bd00, | ||
| 459 | /* 0x05de: ctx_redswitch_delay */ | ||
| 460 | 0xe2b608e7, | ||
| 461 | 0xfd1bf401, | ||
| 462 | 0x0800f5f1, | ||
| 463 | 0x0200f5f1, | ||
| 464 | 0x850007f1, | ||
| 465 | 0xd00103f0, | ||
| 466 | 0x04bd000f, | ||
| 467 | /* 0x05fa: ctx_xfer */ | ||
| 468 | 0x07f100f8, | ||
| 469 | 0x03f08100, | ||
| 470 | 0x000fd002, | ||
| 471 | 0x11f404bd, | ||
| 472 | 0xcc21f507, | ||
| 473 | /* 0x060d: ctx_xfer_not_load */ | ||
| 474 | 0x6a21f505, | ||
| 475 | 0xf124bd02, | ||
| 476 | 0xf047fc07, | ||
| 477 | 0x02d00203, | 477 | 0x02d00203, |
| 478 | 0xf004bd00, | 478 | 0xf004bd00, |
| 479 | 0xa5f001ac, | 479 | 0x20b6012c, |
| 480 | 0x00b7f102, | 480 | 0xfc07f103, |
| 481 | 0x50b3f000, | 481 | 0x0203f04a, |
| 482 | 0xb6040c98, | 482 | 0xbd0002d0, |
| 483 | 0xbcbb0fc4, | 483 | 0x01acf004, |
| 484 | 0x000c9800, | 484 | 0xf102a5f0, |
| 485 | 0xf0010d98, | 485 | 0xf00000b7, |
| 486 | 0x21f500e7, | 486 | 0x0c9850b3, |
| 487 | 0xacf0016f, | 487 | 0x0fc4b604, |
| 488 | 0x00b7f101, | 488 | 0x9800bcbb, |
| 489 | 0x50b3f040, | 489 | 0x0d98000c, |
| 490 | 0xb6040c98, | 490 | 0x00e7f001, |
| 491 | 0xbcbb0fc4, | 491 | 0x016f21f5, |
| 492 | 0x010c9800, | 492 | 0xf101acf0, |
| 493 | 0x98020d98, | 493 | 0xf04000b7, |
| 494 | 0xe7f1060f, | 494 | 0x0c9850b3, |
| 495 | 0x21f50800, | 495 | 0x0fc4b604, |
| 496 | 0xacf0016f, | 496 | 0x9800bcbb, |
| 497 | 0x04a5f001, | 497 | 0x0d98010c, |
| 498 | 0x3000b7f1, | 498 | 0x060f9802, |
| 499 | 0x9850b3f0, | 499 | 0x0800e7f1, |
| 500 | 0xc4b6040c, | 500 | 0x016f21f5, |
| 501 | 0x00bcbb0f, | 501 | 0xf001acf0, |
| 502 | 0x98020c98, | 502 | 0xb7f104a5, |
| 503 | 0x0f98030d, | 503 | 0xb3f03000, |
| 504 | 0x00e7f108, | 504 | 0x040c9850, |
| 505 | 0x6f21f502, | 505 | 0xbb0fc4b6, |
| 506 | 0x5e21f501, | 506 | 0x0c9800bc, |
| 507 | 0x0601f402, | 507 | 0x030d9802, |
| 508 | /* 0x0697: ctx_xfer_post */ | 508 | 0xf1080f98, |
| 509 | 0xf50712f4, | 509 | 0xf50200e7, |
| 510 | /* 0x069b: ctx_xfer_done */ | 510 | 0xf5016f21, |
| 511 | 0xf5027f21, | 511 | 0xf4025e21, |
| 512 | 0xf805a221, | 512 | 0x12f40601, |
| 513 | 0x00000000, | 513 | /* 0x06a9: ctx_xfer_post */ |
| 514 | 0x00000000, | 514 | 0x7f21f507, |
| 515 | 0x00000000, | 515 | /* 0x06ad: ctx_xfer_done */ |
| 516 | 0x00000000, | 516 | 0xb421f502, |
| 517 | 0x00000000, | 517 | 0x0000f805, |
| 518 | 0x00000000, | 518 | 0x00000000, |
| 519 | 0x00000000, | 519 | 0x00000000, |
| 520 | 0x00000000, | 520 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk208.fuc5.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk208.fuc5.h index 7e1c28ee7591..fbcc342f896f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk208.fuc5.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk208.fuc5.h | |||
| @@ -276,7 +276,7 @@ uint32_t gk208_grgpc_code[] = { | |||
| 276 | 0x02020014, | 276 | 0x02020014, |
| 277 | 0xf6120040, | 277 | 0xf6120040, |
| 278 | 0x04bd0002, | 278 | 0x04bd0002, |
| 279 | 0xfe047241, | 279 | 0xfe048141, |
| 280 | 0x00400010, | 280 | 0x00400010, |
| 281 | 0x0000f607, | 281 | 0x0000f607, |
| 282 | 0x040204bd, | 282 | 0x040204bd, |
| @@ -291,20 +291,23 @@ uint32_t gk208_grgpc_code[] = { | |||
| 291 | 0x820603b5, | 291 | 0x820603b5, |
| 292 | 0xcf018600, | 292 | 0xcf018600, |
| 293 | 0x02b50022, | 293 | 0x02b50022, |
| 294 | 0x0f24b604, | ||
| 295 | 0x01c90080, | ||
| 296 | 0xbd0002f6, | ||
| 294 | 0x0c308e04, | 297 | 0x0c308e04, |
| 295 | 0xbd24bd50, | 298 | 0xbd24bd50, |
| 296 | /* 0x0377: init_unk_loop */ | 299 | /* 0x0383: init_unk_loop */ |
| 297 | 0x7e44bd34, | 300 | 0x7e44bd34, |
| 298 | 0xb0000065, | 301 | 0xb0000065, |
| 299 | 0x0bf400f6, | 302 | 0x0bf400f6, |
| 300 | 0xbb010f0e, | 303 | 0xbb010f0e, |
| 301 | 0x4ffd04f2, | 304 | 0x4ffd04f2, |
| 302 | 0x0130b605, | 305 | 0x0130b605, |
| 303 | /* 0x038c: init_unk_next */ | 306 | /* 0x0398: init_unk_next */ |
| 304 | 0xb60120b6, | 307 | 0xb60120b6, |
| 305 | 0x26b004e0, | 308 | 0x26b004e0, |
| 306 | 0xe21bf401, | 309 | 0xe21bf401, |
| 307 | /* 0x0398: init_unk_done */ | 310 | /* 0x03a4: init_unk_done */ |
| 308 | 0xb50703b5, | 311 | 0xb50703b5, |
| 309 | 0x00820804, | 312 | 0x00820804, |
| 310 | 0x22cf0201, | 313 | 0x22cf0201, |
| @@ -338,121 +341,118 @@ uint32_t gk208_grgpc_code[] = { | |||
| 338 | 0xb60824b6, | 341 | 0xb60824b6, |
| 339 | 0x2fb20834, | 342 | 0x2fb20834, |
| 340 | 0x0002687e, | 343 | 0x0002687e, |
| 341 | 0x80003fbb, | 344 | 0xbb002fbb, |
| 342 | 0xf6020100, | 345 | 0x0080003f, |
| 343 | 0x04bd0003, | 346 | 0x03f60201, |
| 344 | 0x29f024bd, | 347 | 0xbd04bd00, |
| 345 | 0x3000801f, | 348 | 0x1f29f024, |
| 346 | 0x0002f602, | 349 | 0x02300080, |
| 347 | /* 0x0436: main */ | 350 | 0xbd0002f6, |
| 348 | 0x31f404bd, | 351 | /* 0x0445: main */ |
| 349 | 0x0028f400, | 352 | 0x0031f404, |
| 350 | 0x377e240d, | 353 | 0x0d0028f4, |
| 351 | 0x01f40000, | 354 | 0x00377e24, |
| 352 | 0x04e4b0f4, | 355 | 0xf401f400, |
| 353 | 0xfe1d18f4, | 356 | 0xf404e4b0, |
| 354 | 0x06020181, | 357 | 0x81fe1d18, |
| 355 | 0x12fd20bd, | 358 | 0xbd060201, |
| 356 | 0x01e4b604, | 359 | 0x0412fd20, |
| 357 | 0xfe051efd, | 360 | 0xfd01e4b6, |
| 358 | 0x097e0018, | 361 | 0x18fe051e, |
| 359 | 0x0ef40005, | 362 | 0x05187e00, |
| 360 | /* 0x0465: main_not_ctx_xfer */ | 363 | 0xd40ef400, |
| 361 | 0x10ef94d4, | 364 | /* 0x0474: main_not_ctx_xfer */ |
| 362 | 0x7e01f5f0, | 365 | 0xf010ef94, |
| 363 | 0xf40002f8, | 366 | 0xf87e01f5, |
| 364 | /* 0x0472: ih */ | 367 | 0x0ef40002, |
| 365 | 0x80f9c70e, | 368 | /* 0x0481: ih */ |
| 366 | 0xf90188fe, | 369 | 0xfe80f9c7, |
| 367 | 0xf990f980, | 370 | 0x80f90188, |
| 368 | 0xf9b0f9a0, | 371 | 0xa0f990f9, |
| 369 | 0xf9e0f9d0, | 372 | 0xd0f9b0f9, |
| 370 | 0x4a04bdf0, | 373 | 0xf0f9e0f9, |
| 371 | 0xaacf0200, | 374 | 0x004a04bd, |
| 372 | 0x04abc400, | 375 | 0x00aacf02, |
| 373 | 0x0d1f0bf4, | 376 | 0xf404abc4, |
| 374 | 0x1a004e24, | 377 | 0x240d1f0b, |
| 375 | 0x4f00eecf, | 378 | 0xcf1a004e, |
| 376 | 0xffcf1900, | 379 | 0x004f00ee, |
| 377 | 0x00047e00, | 380 | 0x00ffcf19, |
| 378 | 0x40010e00, | 381 | 0x0000047e, |
| 379 | 0x0ef61d00, | 382 | 0x0040010e, |
| 380 | /* 0x04af: ih_no_fifo */ | 383 | 0x000ef61d, |
| 381 | 0x4004bd00, | 384 | /* 0x04be: ih_no_fifo */ |
| 382 | 0x0af60100, | 385 | 0x004004bd, |
| 383 | 0xfc04bd00, | 386 | 0x000af601, |
| 384 | 0xfce0fcf0, | 387 | 0xf0fc04bd, |
| 385 | 0xfcb0fcd0, | 388 | 0xd0fce0fc, |
| 386 | 0xfc90fca0, | 389 | 0xa0fcb0fc, |
| 387 | 0x0088fe80, | 390 | 0x80fc90fc, |
| 388 | 0x32f480fc, | 391 | 0xfc0088fe, |
| 389 | /* 0x04cf: hub_barrier_done */ | 392 | 0x0032f480, |
| 390 | 0x0f01f800, | 393 | /* 0x04de: hub_barrier_done */ |
| 391 | 0x040e9801, | 394 | 0x010f01f8, |
| 392 | 0xb204febb, | 395 | 0xbb040e98, |
| 393 | 0x94188eff, | 396 | 0xffb204fe, |
| 394 | 0x008f7e40, | 397 | 0x4094188e, |
| 395 | /* 0x04e3: ctx_redswitch */ | 398 | 0x00008f7e, |
| 396 | 0x0f00f800, | 399 | /* 0x04f2: ctx_redswitch */ |
| 397 | 0x85008020, | 400 | 0x200f00f8, |
| 401 | 0x01850080, | ||
| 402 | 0xbd000ff6, | ||
| 403 | /* 0x04ff: ctx_redswitch_delay */ | ||
| 404 | 0xb6080e04, | ||
| 405 | 0x1bf401e2, | ||
| 406 | 0x00f5f1fd, | ||
| 407 | 0x00f5f108, | ||
| 408 | 0x85008002, | ||
| 398 | 0x000ff601, | 409 | 0x000ff601, |
| 399 | 0x080e04bd, | 410 | 0x00f804bd, |
| 400 | /* 0x04f0: ctx_redswitch_delay */ | 411 | /* 0x0518: ctx_xfer */ |
| 401 | 0xf401e2b6, | 412 | 0x02810080, |
| 402 | 0xf5f1fd1b, | 413 | 0xbd000ff6, |
| 403 | 0xf5f10800, | 414 | 0x0711f404, |
| 404 | 0x00800200, | 415 | 0x0004f27e, |
| 405 | 0x0ff60185, | 416 | /* 0x0528: ctx_xfer_not_load */ |
| 406 | 0xf804bd00, | 417 | 0x0002167e, |
| 407 | /* 0x0509: ctx_xfer */ | 418 | 0xfc8024bd, |
| 408 | 0x81008000, | 419 | 0x02f60247, |
| 409 | 0x000ff602, | ||
| 410 | 0x11f404bd, | ||
| 411 | 0x04e37e07, | ||
| 412 | /* 0x0519: ctx_xfer_not_load */ | ||
| 413 | 0x02167e00, | ||
| 414 | 0x8024bd00, | ||
| 415 | 0xf60247fc, | ||
| 416 | 0x04bd0002, | ||
| 417 | 0xb6012cf0, | ||
| 418 | 0xfc800320, | ||
| 419 | 0x02f6024a, | ||
| 420 | 0xf004bd00, | 420 | 0xf004bd00, |
| 421 | 0xa5f001ac, | 421 | 0x20b6012c, |
| 422 | 0x00008b02, | 422 | 0x4afc8003, |
| 423 | 0x040c9850, | 423 | 0x0002f602, |
| 424 | 0xbb0fc4b6, | 424 | 0xacf004bd, |
| 425 | 0x0c9800bc, | 425 | 0x02a5f001, |
| 426 | 0x010d9800, | 426 | 0x5000008b, |
| 427 | 0x3d7e000e, | ||
| 428 | 0xacf00001, | ||
| 429 | 0x40008b01, | ||
| 430 | 0x040c9850, | ||
| 431 | 0xbb0fc4b6, | ||
| 432 | 0x0c9800bc, | ||
| 433 | 0x020d9801, | ||
| 434 | 0x4e060f98, | ||
| 435 | 0x3d7e0800, | ||
| 436 | 0xacf00001, | ||
| 437 | 0x04a5f001, | ||
| 438 | 0x5030008b, | ||
| 439 | 0xb6040c98, | 427 | 0xb6040c98, |
| 440 | 0xbcbb0fc4, | 428 | 0xbcbb0fc4, |
| 441 | 0x020c9800, | 429 | 0x000c9800, |
| 442 | 0x98030d98, | 430 | 0x0e010d98, |
| 443 | 0x004e080f, | 431 | 0x013d7e00, |
| 444 | 0x013d7e02, | 432 | 0x01acf000, |
| 445 | 0x020a7e00, | 433 | 0x5040008b, |
| 446 | 0x0601f400, | 434 | 0xb6040c98, |
| 447 | /* 0x05a3: ctx_xfer_post */ | 435 | 0xbcbb0fc4, |
| 448 | 0x7e0712f4, | 436 | 0x010c9800, |
| 449 | /* 0x05a7: ctx_xfer_done */ | 437 | 0x98020d98, |
| 450 | 0x7e000227, | 438 | 0x004e060f, |
| 451 | 0xf80004cf, | 439 | 0x013d7e08, |
| 452 | 0x00000000, | 440 | 0x01acf000, |
| 453 | 0x00000000, | 441 | 0x8b04a5f0, |
| 454 | 0x00000000, | 442 | 0x98503000, |
| 455 | 0x00000000, | 443 | 0xc4b6040c, |
| 444 | 0x00bcbb0f, | ||
| 445 | 0x98020c98, | ||
| 446 | 0x0f98030d, | ||
| 447 | 0x02004e08, | ||
| 448 | 0x00013d7e, | ||
| 449 | 0x00020a7e, | ||
| 450 | 0xf40601f4, | ||
| 451 | /* 0x05b2: ctx_xfer_post */ | ||
| 452 | 0x277e0712, | ||
| 453 | /* 0x05b6: ctx_xfer_done */ | ||
| 454 | 0xde7e0002, | ||
| 455 | 0x00f80004, | ||
| 456 | 0x00000000, | 456 | 0x00000000, |
| 457 | 0x00000000, | 457 | 0x00000000, |
| 458 | 0x00000000, | 458 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5 b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5 index e730603891d7..47802c7ecca1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5 +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5 | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | #define NV_PGRAPH_GPCX_UNK__SIZE 0x00000002 | 25 | #define NV_PGRAPH_GPCX_UNK__SIZE 0x00000002 |
| 26 | 26 | ||
| 27 | #define CHIPSET GK208 | 27 | #define CHIPSET GM107 |
| 28 | #include "macros.fuc" | 28 | #include "macros.fuc" |
| 29 | 29 | ||
| 30 | .section #gm107_grgpc_data | 30 | .section #gm107_grgpc_data |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h index 6d53b67dd3c4..51f5c3c6e966 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h | |||
| @@ -41,7 +41,7 @@ uint32_t gm107_grgpc_data[] = { | |||
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | uint32_t gm107_grgpc_code[] = { | 43 | uint32_t gm107_grgpc_code[] = { |
| 44 | 0x03140ef5, | 44 | 0x03410ef5, |
| 45 | /* 0x0004: queue_put */ | 45 | /* 0x0004: queue_put */ |
| 46 | 0x9800d898, | 46 | 0x9800d898, |
| 47 | 0x86f001d9, | 47 | 0x86f001d9, |
| @@ -268,187 +268,319 @@ uint32_t gm107_grgpc_code[] = { | |||
| 268 | 0x409c1c8e, | 268 | 0x409c1c8e, |
| 269 | 0x00008f7e, | 269 | 0x00008f7e, |
| 270 | 0x00f8e0fc, | 270 | 0x00f8e0fc, |
| 271 | /* 0x0314: init */ | 271 | /* 0x0314: tpc_strand_wait */ |
| 272 | 0x004104bd, | 272 | 0x94bd90f9, |
| 273 | 0x0011cf42, | 273 | 0x800a99f0, |
| 274 | 0x010911e7, | 274 | 0xf6023700, |
| 275 | 0xfe0814b6, | 275 | 0x04bd0009, |
| 276 | 0x02020014, | 276 | /* 0x0324: tpc_strand_busy */ |
| 277 | 0xf6120040, | 277 | 0x033f0089, |
| 278 | 0x04bd0002, | 278 | 0xb30099cf, |
| 279 | 0xfe047241, | 279 | 0xbdf90094, |
| 280 | 0x00400010, | 280 | 0x0a99f094, |
| 281 | 0x0000f607, | 281 | 0x02170080, |
| 282 | 0x040204bd, | 282 | 0xbd0009f6, |
| 283 | 0xf6040040, | 283 | 0xf890fc04, |
| 284 | 0x04bd0002, | 284 | /* 0x0341: init */ |
| 285 | 0x821031f4, | 285 | 0x4104bd00, |
| 286 | 0xcf018200, | 286 | 0x11cf4200, |
| 287 | 0x01030022, | 287 | 0x0911e700, |
| 288 | 0xbb1f24f0, | 288 | 0x0814b601, |
| 289 | 0x32b60432, | 289 | 0x020014fe, |
| 290 | 0x0502b501, | 290 | 0x12004002, |
| 291 | 0x820603b5, | 291 | 0xbd0002f6, |
| 292 | 0xcf018600, | 292 | 0x05b04104, |
| 293 | 0x02b50022, | 293 | 0x400010fe, |
| 294 | 0x0c308e04, | 294 | 0x00f60700, |
| 295 | 0xbd24bd50, | 295 | 0x0204bd00, |
| 296 | /* 0x0377: init_unk_loop */ | 296 | 0x04004004, |
| 297 | 0x7e44bd34, | 297 | 0xbd0002f6, |
| 298 | 0xb0000065, | 298 | 0x1031f404, |
| 299 | 0x0bf400f6, | 299 | 0x01820082, |
| 300 | 0xbb010f0e, | 300 | 0x030022cf, |
| 301 | 0x4ffd04f2, | 301 | 0x1f24f001, |
| 302 | 0x0130b605, | 302 | 0xb60432bb, |
| 303 | /* 0x038c: init_unk_next */ | 303 | 0x02b50132, |
| 304 | 0xb60120b6, | 304 | 0x0603b505, |
| 305 | 0x26b004e0, | 305 | 0x01860082, |
| 306 | 0xe21bf402, | 306 | 0xb50022cf, |
| 307 | /* 0x0398: init_unk_done */ | 307 | 0x24b60402, |
| 308 | 0xb50703b5, | 308 | 0xc900800f, |
| 309 | 0x00820804, | 309 | 0x0002f601, |
| 310 | 0x22cf0201, | 310 | 0x308e04bd, |
| 311 | 0x9534bd00, | 311 | 0x24bd500c, |
| 312 | 0x00800825, | 312 | 0x44bd34bd, |
| 313 | 0x05f601c0, | 313 | /* 0x03b0: init_unk_loop */ |
| 314 | 0x8004bd00, | 314 | 0x0000657e, |
| 315 | 0xf601c100, | 315 | 0xf400f6b0, |
| 316 | 0x010f0e0b, | ||
| 317 | 0xfd04f2bb, | ||
| 318 | 0x30b6054f, | ||
| 319 | /* 0x03c5: init_unk_next */ | ||
| 320 | 0x0120b601, | ||
| 321 | 0xb004e0b6, | ||
| 322 | 0x1bf40226, | ||
| 323 | /* 0x03d1: init_unk_done */ | ||
| 324 | 0x0703b5e2, | ||
| 325 | 0x820804b5, | ||
| 326 | 0xcf020100, | ||
| 327 | 0x34bd0022, | ||
| 328 | 0x80082595, | ||
| 329 | 0xf601c000, | ||
| 316 | 0x04bd0005, | 330 | 0x04bd0005, |
| 317 | 0x98000e98, | 331 | 0x01c10080, |
| 318 | 0x207e010f, | 332 | 0xbd0005f6, |
| 319 | 0x2fbb0001, | 333 | 0x000e9804, |
| 334 | 0x7e010f98, | ||
| 335 | 0xbb000120, | ||
| 336 | 0x3fbb002f, | ||
| 337 | 0x010e9800, | ||
| 338 | 0x7e020f98, | ||
| 339 | 0x98000120, | ||
| 340 | 0xeffd050e, | ||
| 341 | 0x002ebb00, | ||
| 342 | 0x98003ebb, | ||
| 343 | 0x0f98020e, | ||
| 344 | 0x01207e03, | ||
| 345 | 0x070e9800, | ||
| 346 | 0xbb00effd, | ||
| 347 | 0x3ebb002e, | ||
| 348 | 0x0235b600, | ||
| 349 | 0x01d30080, | ||
| 350 | 0xbd0003f6, | ||
| 351 | 0x0825b604, | ||
| 352 | 0xb60635b6, | ||
| 353 | 0x30b60120, | ||
| 354 | 0x0824b601, | ||
| 355 | 0xb20834b6, | ||
| 356 | 0x02687e2f, | ||
| 357 | 0x002fbb00, | ||
| 358 | 0x0f003fbb, | ||
| 359 | 0x8effb23f, | ||
| 360 | 0xf0501d60, | ||
| 361 | 0x8f7e01e5, | ||
| 362 | 0x0c0f0000, | ||
| 363 | 0xa88effb2, | ||
| 364 | 0xe5f0501d, | ||
| 365 | 0x008f7e01, | ||
| 366 | 0x03147e00, | ||
| 367 | 0xb23f0f00, | ||
| 368 | 0x1d608eff, | ||
| 369 | 0x01e5f050, | ||
| 370 | 0x00008f7e, | ||
| 371 | 0xffb2000f, | ||
| 372 | 0x501d9c8e, | ||
| 373 | 0x7e01e5f0, | ||
| 374 | 0x0f00008f, | ||
| 375 | 0x03147e01, | ||
| 376 | 0x8effb200, | ||
| 377 | 0xf0501da8, | ||
| 378 | 0x8f7e01e5, | ||
| 379 | 0xff0f0000, | ||
| 380 | 0x988effb2, | ||
| 381 | 0xe5f0501d, | ||
| 382 | 0x008f7e01, | ||
| 383 | 0xb2020f00, | ||
| 384 | 0x1da88eff, | ||
| 385 | 0x01e5f050, | ||
| 386 | 0x00008f7e, | ||
| 387 | 0x0003147e, | ||
| 388 | 0x85050498, | ||
| 389 | 0x98504000, | ||
| 390 | 0x64b60406, | ||
| 391 | 0x0056bb0f, | ||
| 392 | /* 0x04e0: tpc_strand_init_tpc_loop */ | ||
| 393 | 0x05705eb8, | ||
| 394 | 0x00657e00, | ||
| 395 | 0xbdf6b200, | ||
| 396 | /* 0x04ed: tpc_strand_init_idx_loop */ | ||
| 397 | 0x605eb874, | ||
| 398 | 0x7fb20005, | ||
| 399 | 0x00008f7e, | ||
| 400 | 0x05885eb8, | ||
| 401 | 0x082f9500, | ||
| 402 | 0x00008f7e, | ||
| 403 | 0x058c5eb8, | ||
| 404 | 0x082f9500, | ||
| 405 | 0x00008f7e, | ||
| 406 | 0x05905eb8, | ||
| 407 | 0x00657e00, | ||
| 408 | 0x06f5b600, | ||
| 409 | 0xb601f0b6, | ||
| 410 | 0x2fbb08f4, | ||
| 320 | 0x003fbb00, | 411 | 0x003fbb00, |
| 321 | 0x98010e98, | 412 | 0xb60170b6, |
| 322 | 0x207e020f, | 413 | 0x1bf40162, |
| 323 | 0x0e980001, | 414 | 0x0050b7bf, |
| 324 | 0x00effd05, | 415 | 0x0142b608, |
| 325 | 0xbb002ebb, | 416 | 0x0fa81bf4, |
| 326 | 0x0e98003e, | 417 | 0x8effb23f, |
| 327 | 0x030f9802, | 418 | 0xf0501d60, |
| 328 | 0x0001207e, | 419 | 0x8f7e01e5, |
| 329 | 0xfd070e98, | 420 | 0x0d0f0000, |
| 330 | 0x2ebb00ef, | 421 | 0xa88effb2, |
| 331 | 0x003ebb00, | 422 | 0xe5f0501d, |
| 332 | 0x800235b6, | 423 | 0x008f7e01, |
| 333 | 0xf601d300, | 424 | 0x03147e00, |
| 334 | 0x04bd0003, | 425 | 0x01008000, |
| 335 | 0xb60825b6, | 426 | 0x0003f602, |
| 336 | 0x20b60635, | 427 | 0x24bd04bd, |
| 337 | 0x0130b601, | 428 | 0x801f29f0, |
| 338 | 0xb60824b6, | 429 | 0xf6023000, |
| 339 | 0x2fb20834, | ||
| 340 | 0x0002687e, | ||
| 341 | 0x80003fbb, | ||
| 342 | 0xf6020100, | ||
| 343 | 0x04bd0003, | ||
| 344 | 0x29f024bd, | ||
| 345 | 0x3000801f, | ||
| 346 | 0x0002f602, | ||
| 347 | /* 0x0436: main */ | ||
| 348 | 0x31f404bd, | ||
| 349 | 0x0028f400, | ||
| 350 | 0x377e240d, | ||
| 351 | 0x01f40000, | ||
| 352 | 0x04e4b0f4, | ||
| 353 | 0xfe1d18f4, | ||
| 354 | 0x06020181, | ||
| 355 | 0x12fd20bd, | ||
| 356 | 0x01e4b604, | ||
| 357 | 0xfe051efd, | ||
| 358 | 0x097e0018, | ||
| 359 | 0x0ef40005, | ||
| 360 | /* 0x0465: main_not_ctx_xfer */ | ||
| 361 | 0x10ef94d4, | ||
| 362 | 0x7e01f5f0, | ||
| 363 | 0xf40002f8, | ||
| 364 | /* 0x0472: ih */ | ||
| 365 | 0x80f9c70e, | ||
| 366 | 0xf90188fe, | ||
| 367 | 0xf990f980, | ||
| 368 | 0xf9b0f9a0, | ||
| 369 | 0xf9e0f9d0, | ||
| 370 | 0x4a04bdf0, | ||
| 371 | 0xaacf0200, | ||
| 372 | 0x04abc400, | ||
| 373 | 0x0d1f0bf4, | ||
| 374 | 0x1a004e24, | ||
| 375 | 0x4f00eecf, | ||
| 376 | 0xffcf1900, | ||
| 377 | 0x00047e00, | ||
| 378 | 0x40010e00, | ||
| 379 | 0x0ef61d00, | ||
| 380 | /* 0x04af: ih_no_fifo */ | ||
| 381 | 0x4004bd00, | ||
| 382 | 0x0af60100, | ||
| 383 | 0xfc04bd00, | ||
| 384 | 0xfce0fcf0, | ||
| 385 | 0xfcb0fcd0, | ||
| 386 | 0xfc90fca0, | ||
| 387 | 0x0088fe80, | ||
| 388 | 0x32f480fc, | ||
| 389 | /* 0x04cf: hub_barrier_done */ | ||
| 390 | 0x0f01f800, | ||
| 391 | 0x040e9801, | ||
| 392 | 0xb204febb, | ||
| 393 | 0x94188eff, | ||
| 394 | 0x008f7e40, | ||
| 395 | /* 0x04e3: ctx_redswitch */ | ||
| 396 | 0x0f00f800, | ||
| 397 | 0x85008020, | ||
| 398 | 0x000ff601, | ||
| 399 | 0x080e04bd, | ||
| 400 | /* 0x04f0: ctx_redswitch_delay */ | ||
| 401 | 0xf401e2b6, | ||
| 402 | 0xf5f1fd1b, | ||
| 403 | 0xf5f10800, | ||
| 404 | 0x00800200, | ||
| 405 | 0x0ff60185, | ||
| 406 | 0xf804bd00, | ||
| 407 | /* 0x0509: ctx_xfer */ | ||
| 408 | 0x81008000, | ||
| 409 | 0x000ff602, | ||
| 410 | 0x11f404bd, | ||
| 411 | 0x04e37e07, | ||
| 412 | /* 0x0519: ctx_xfer_not_load */ | ||
| 413 | 0x02167e00, | ||
| 414 | 0x8024bd00, | ||
| 415 | 0xf60247fc, | ||
| 416 | 0x04bd0002, | 430 | 0x04bd0002, |
| 417 | 0xb6012cf0, | 431 | /* 0x0574: main */ |
| 418 | 0xfc800320, | 432 | 0xf40031f4, |
| 419 | 0x02f6024a, | 433 | 0x240d0028, |
| 434 | 0x0000377e, | ||
| 435 | 0xb0f401f4, | ||
| 436 | 0x18f404e4, | ||
| 437 | 0x0181fe1d, | ||
| 438 | 0x20bd0602, | ||
| 439 | 0xb60412fd, | ||
| 440 | 0x1efd01e4, | ||
| 441 | 0x0018fe05, | ||
| 442 | 0x0006477e, | ||
| 443 | /* 0x05a3: main_not_ctx_xfer */ | ||
| 444 | 0x94d40ef4, | ||
| 445 | 0xf5f010ef, | ||
| 446 | 0x02f87e01, | ||
| 447 | 0xc70ef400, | ||
| 448 | /* 0x05b0: ih */ | ||
| 449 | 0x88fe80f9, | ||
| 450 | 0xf980f901, | ||
| 451 | 0xf9a0f990, | ||
| 452 | 0xf9d0f9b0, | ||
| 453 | 0xbdf0f9e0, | ||
| 454 | 0x02004a04, | ||
| 455 | 0xc400aacf, | ||
| 456 | 0x0bf404ab, | ||
| 457 | 0x4e240d1f, | ||
| 458 | 0xeecf1a00, | ||
| 459 | 0x19004f00, | ||
| 460 | 0x7e00ffcf, | ||
| 461 | 0x0e000004, | ||
| 462 | 0x1d004001, | ||
| 463 | 0xbd000ef6, | ||
| 464 | /* 0x05ed: ih_no_fifo */ | ||
| 465 | 0x01004004, | ||
| 466 | 0xbd000af6, | ||
| 467 | 0xfcf0fc04, | ||
| 468 | 0xfcd0fce0, | ||
| 469 | 0xfca0fcb0, | ||
| 470 | 0xfe80fc90, | ||
| 471 | 0x80fc0088, | ||
| 472 | 0xf80032f4, | ||
| 473 | /* 0x060d: hub_barrier_done */ | ||
| 474 | 0x98010f01, | ||
| 475 | 0xfebb040e, | ||
| 476 | 0x8effb204, | ||
| 477 | 0x7e409418, | ||
| 478 | 0xf800008f, | ||
| 479 | /* 0x0621: ctx_redswitch */ | ||
| 480 | 0x80200f00, | ||
| 481 | 0xf6018500, | ||
| 482 | 0x04bd000f, | ||
| 483 | /* 0x062e: ctx_redswitch_delay */ | ||
| 484 | 0xe2b6080e, | ||
| 485 | 0xfd1bf401, | ||
| 486 | 0x0800f5f1, | ||
| 487 | 0x0200f5f1, | ||
| 488 | 0x01850080, | ||
| 489 | 0xbd000ff6, | ||
| 490 | /* 0x0647: ctx_xfer */ | ||
| 491 | 0x8000f804, | ||
| 492 | 0xf6028100, | ||
| 493 | 0x04bd000f, | ||
| 494 | 0xc48effb2, | ||
| 495 | 0xe5f0501d, | ||
| 496 | 0x008f7e01, | ||
| 497 | 0x0711f400, | ||
| 498 | 0x0006217e, | ||
| 499 | /* 0x0664: ctx_xfer_not_load */ | ||
| 500 | 0x0002167e, | ||
| 501 | 0xfc8024bd, | ||
| 502 | 0x02f60247, | ||
| 420 | 0xf004bd00, | 503 | 0xf004bd00, |
| 504 | 0x20b6012c, | ||
| 505 | 0x4afc8003, | ||
| 506 | 0x0002f602, | ||
| 507 | 0x0c0f04bd, | ||
| 508 | 0xa88effb2, | ||
| 509 | 0xe5f0501d, | ||
| 510 | 0x008f7e01, | ||
| 511 | 0x03147e00, | ||
| 512 | 0xb23f0f00, | ||
| 513 | 0x1d608eff, | ||
| 514 | 0x01e5f050, | ||
| 515 | 0x00008f7e, | ||
| 516 | 0xffb2000f, | ||
| 517 | 0x501d9c8e, | ||
| 518 | 0x7e01e5f0, | ||
| 519 | 0x0f00008f, | ||
| 520 | 0x03147e01, | ||
| 521 | 0x01fcf000, | ||
| 522 | 0xb203f0b6, | ||
| 523 | 0x1da88eff, | ||
| 524 | 0x01e5f050, | ||
| 525 | 0x00008f7e, | ||
| 526 | 0xf001acf0, | ||
| 527 | 0x008b02a5, | ||
| 528 | 0x0c985000, | ||
| 529 | 0x0fc4b604, | ||
| 530 | 0x9800bcbb, | ||
| 531 | 0x0d98000c, | ||
| 532 | 0x7e000e01, | ||
| 533 | 0xf000013d, | ||
| 534 | 0x008b01ac, | ||
| 535 | 0x0c985040, | ||
| 536 | 0x0fc4b604, | ||
| 537 | 0x9800bcbb, | ||
| 538 | 0x0d98010c, | ||
| 539 | 0x060f9802, | ||
| 540 | 0x7e08004e, | ||
| 541 | 0xf000013d, | ||
| 421 | 0xa5f001ac, | 542 | 0xa5f001ac, |
| 422 | 0x00008b02, | 543 | 0x30008b04, |
| 423 | 0x040c9850, | 544 | 0x040c9850, |
| 424 | 0xbb0fc4b6, | 545 | 0xbb0fc4b6, |
| 425 | 0x0c9800bc, | 546 | 0x0c9800bc, |
| 426 | 0x010d9800, | 547 | 0x030d9802, |
| 427 | 0x3d7e000e, | 548 | 0x4e080f98, |
| 428 | 0xacf00001, | 549 | 0x3d7e0200, |
| 429 | 0x40008b01, | 550 | 0x0a7e0001, |
| 430 | 0x040c9850, | 551 | 0x147e0002, |
| 431 | 0xbb0fc4b6, | 552 | 0x01f40003, |
| 432 | 0x0c9800bc, | 553 | 0x1a12f406, |
| 433 | 0x020d9801, | 554 | /* 0x073c: ctx_xfer_post */ |
| 434 | 0x4e060f98, | 555 | 0x0002277e, |
| 435 | 0x3d7e0800, | 556 | 0xffb20d0f, |
| 436 | 0xacf00001, | 557 | 0x501da88e, |
| 437 | 0x04a5f001, | 558 | 0x7e01e5f0, |
| 438 | 0x5030008b, | 559 | 0x7e00008f, |
| 439 | 0xb6040c98, | 560 | /* 0x0753: ctx_xfer_done */ |
| 440 | 0xbcbb0fc4, | 561 | 0x7e000314, |
| 441 | 0x020c9800, | 562 | 0xf800060d, |
| 442 | 0x98030d98, | 563 | 0x00000000, |
| 443 | 0x004e080f, | 564 | 0x00000000, |
| 444 | 0x013d7e02, | 565 | 0x00000000, |
| 445 | 0x020a7e00, | 566 | 0x00000000, |
| 446 | 0x0601f400, | 567 | 0x00000000, |
| 447 | /* 0x05a3: ctx_xfer_post */ | 568 | 0x00000000, |
| 448 | 0x7e0712f4, | 569 | 0x00000000, |
| 449 | /* 0x05a7: ctx_xfer_done */ | 570 | 0x00000000, |
| 450 | 0x7e000227, | 571 | 0x00000000, |
| 451 | 0xf80004cf, | 572 | 0x00000000, |
| 573 | 0x00000000, | ||
| 574 | 0x00000000, | ||
| 575 | 0x00000000, | ||
| 576 | 0x00000000, | ||
| 577 | 0x00000000, | ||
| 578 | 0x00000000, | ||
| 579 | 0x00000000, | ||
| 580 | 0x00000000, | ||
| 581 | 0x00000000, | ||
| 582 | 0x00000000, | ||
| 583 | 0x00000000, | ||
| 452 | 0x00000000, | 584 | 0x00000000, |
| 453 | 0x00000000, | 585 | 0x00000000, |
| 454 | 0x00000000, | 586 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/macros.fuc b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/macros.fuc index 2a0b0f844299..fa618066441a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/macros.fuc +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/macros.fuc | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #define GK100 0xe0 | 29 | #define GK100 0xe0 |
| 30 | #define GK110 0xf0 | 30 | #define GK110 0xf0 |
| 31 | #define GK208 0x108 | 31 | #define GK208 0x108 |
| 32 | #define GM107 0x117 | ||
| 32 | 33 | ||
| 33 | #define NV_PGRAPH_TRAPPED_ADDR 0x400704 | 34 | #define NV_PGRAPH_TRAPPED_ADDR 0x400704 |
| 34 | #define NV_PGRAPH_TRAPPED_DATA_LO 0x400708 | 35 | #define NV_PGRAPH_TRAPPED_DATA_LO 0x400708 |
| @@ -79,7 +80,9 @@ | |||
| 79 | #define NV_PGRAPH_FECS_MMCTX_MULTI_STRIDE 0x409718 | 80 | #define NV_PGRAPH_FECS_MMCTX_MULTI_STRIDE 0x409718 |
| 80 | #define NV_PGRAPH_FECS_MMCTX_MULTI_MASK 0x40971c | 81 | #define NV_PGRAPH_FECS_MMCTX_MULTI_MASK 0x40971c |
| 81 | #define NV_PGRAPH_FECS_MMCTX_QUEUE 0x409720 | 82 | #define NV_PGRAPH_FECS_MMCTX_QUEUE 0x409720 |
| 83 | #define NV_PGRAPH_FECS_MMIO_BASE 0x409724 | ||
| 82 | #define NV_PGRAPH_FECS_MMIO_CTRL 0x409728 | 84 | #define NV_PGRAPH_FECS_MMIO_CTRL 0x409728 |
| 85 | #define NV_PGRAPH_FECS_MMIO_CTRL_BASE_ENABLE 0x00000001 | ||
| 83 | #define NV_PGRAPH_FECS_MMIO_RDVAL 0x40972c | 86 | #define NV_PGRAPH_FECS_MMIO_RDVAL 0x40972c |
| 84 | #define NV_PGRAPH_FECS_MMIO_WRVAL 0x409730 | 87 | #define NV_PGRAPH_FECS_MMIO_WRVAL 0x409730 |
| 85 | #define NV_PGRAPH_FECS_MMCTX_LOAD_COUNT 0x40974c | 88 | #define NV_PGRAPH_FECS_MMCTX_LOAD_COUNT 0x40974c |
| @@ -147,6 +150,11 @@ | |||
| 147 | #define NV_PGRAPH_GPCX_GPCCS_MYINDEX 0x41a618 | 150 | #define NV_PGRAPH_GPCX_GPCCS_MYINDEX 0x41a618 |
| 148 | #define NV_PGRAPH_GPCX_GPCCS_MMCTX_SAVE_SWBASE 0x41a700 | 151 | #define NV_PGRAPH_GPCX_GPCCS_MMCTX_SAVE_SWBASE 0x41a700 |
| 149 | #define NV_PGRAPH_GPCX_GPCCS_MMCTX_LOAD_SWBASE 0x41a704 | 152 | #define NV_PGRAPH_GPCX_GPCCS_MMCTX_LOAD_SWBASE 0x41a704 |
| 153 | #define NV_PGRAPH_GPCX_GPCCS_MMIO_BASE 0x41a724 | ||
| 154 | #define NV_PGRAPH_GPCX_GPCCS_MMIO_CTRL 0x41a728 | ||
| 155 | #define NV_PGRAPH_GPCX_GPCCS_MMIO_CTRL_BASE_ENABLE 0x00000001 | ||
| 156 | #define NV_PGRAPH_GPCX_GPCCS_MMIO_RDVAL 0x41a72c | ||
| 157 | #define NV_PGRAPH_GPCX_GPCCS_MMIO_WRVAL 0x41a730 | ||
| 150 | #define NV_PGRAPH_GPCX_GPCCS_MMCTX_LOAD_COUNT 0x41a74c | 158 | #define NV_PGRAPH_GPCX_GPCCS_MMCTX_LOAD_COUNT 0x41a74c |
| 151 | #if CHIPSET < GK110 | 159 | #if CHIPSET < GK110 |
| 152 | #define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(n) ((n) * 4 + 0x41a800) | 160 | #define NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(n) ((n) * 4 + 0x41a800) |
| @@ -164,6 +172,29 @@ | |||
| 164 | #define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE 0x00000003 | 172 | #define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE 0x00000003 |
| 165 | #define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_LOAD 0x00000004 | 173 | #define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_LOAD 0x00000004 |
| 166 | #define NV_PGRAPH_GPCX_GPCCS_MEM_BASE 0x41aa04 | 174 | #define NV_PGRAPH_GPCX_GPCCS_MEM_BASE 0x41aa04 |
| 175 | #define NV_PGRAPH_GPCX_GPCCS_TPC_STATUS 0x41acfc | ||
| 176 | |||
| 177 | #define NV_PGRAPH_GPC0_TPC0 0x504000 | ||
| 178 | #define NV_PGRAPH_GPC0_TPC0__SIZE 0x000800 | ||
| 179 | |||
| 180 | #define NV_PGRAPH_GPC0_TPCX_STRAND_INDEX 0x501d60 | ||
| 181 | #define NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL 0x0000003f | ||
| 182 | #define NV_PGRAPH_GPC0_TPCX_STRAND_DATA 0x501d98 | ||
| 183 | #define NV_PGRAPH_GPC0_TPCX_STRAND_SELECT 0x501d9c | ||
| 184 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD 0x501da8 | ||
| 185 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SEEK 0x00000001 | ||
| 186 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_GET_INFO 0x00000002 | ||
| 187 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SAVE 0x00000003 | ||
| 188 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_LOAD 0x00000004 | ||
| 189 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_ENABLE 0x0000000c | ||
| 190 | #define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_DISABLE 0x0000000d | ||
| 191 | #define NV_PGRAPH_GPC0_TPCX_STRAND_MEM_BASE 0x501dc4 | ||
| 192 | |||
| 193 | #define NV_TPC_STRAND_INDEX 0x560 | ||
| 194 | #define NV_TPC_STRAND_CNT 0x570 | ||
| 195 | #define NV_TPC_STRAND_SAVE_SWBASE 0x588 | ||
| 196 | #define NV_TPC_STRAND_LOAD_SWBASE 0x58c | ||
| 197 | #define NV_TPC_STRAND_WORDS 0x590 | ||
| 167 | 198 | ||
| 168 | #define mmctx_data(r,c) .b32 (((c - 1) << 26) | r) | 199 | #define mmctx_data(r,c) .b32 (((c - 1) << 26) | r) |
| 169 | #define queue_init .skip 72 // (2 * 4) + ((8 * 4) * 2) | 200 | #define queue_init .skip 72 // (2 * 4) + ((8 * 4) * 2) |
| @@ -178,6 +209,7 @@ | |||
| 178 | #define T_SAVE 7 | 209 | #define T_SAVE 7 |
| 179 | #define T_LCHAN 8 | 210 | #define T_LCHAN 8 |
| 180 | #define T_LCTXH 9 | 211 | #define T_LCTXH 9 |
| 212 | #define T_STRTPC 10 | ||
| 181 | 213 | ||
| 182 | #if CHIPSET < GK208 | 214 | #if CHIPSET < GK208 |
| 183 | #define imm32(reg,val) /* | 215 | #define imm32(reg,val) /* |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c index 1dd482e9da77..5606c25e5d02 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c | |||
| @@ -236,7 +236,7 @@ static int | |||
| 236 | gf100_gr_set_shader_exceptions(struct nvkm_object *object, u32 mthd, | 236 | gf100_gr_set_shader_exceptions(struct nvkm_object *object, u32 mthd, |
| 237 | void *pdata, u32 size) | 237 | void *pdata, u32 size) |
| 238 | { | 238 | { |
| 239 | struct gf100_gr_priv *priv = (void *)nv_engine(object); | 239 | struct gf100_gr_priv *priv = (void *)object->engine; |
| 240 | if (size >= sizeof(u32)) { | 240 | if (size >= sizeof(u32)) { |
| 241 | u32 data = *(u32 *)pdata ? 0xffffffff : 0x00000000; | 241 | u32 data = *(u32 *)pdata ? 0xffffffff : 0x00000000; |
| 242 | nv_wr32(priv, 0x419e44, data); | 242 | nv_wr32(priv, 0x419e44, data); |
| @@ -260,8 +260,8 @@ gf100_gr_90c0_omthds[] = { | |||
| 260 | 260 | ||
| 261 | struct nvkm_oclass | 261 | struct nvkm_oclass |
| 262 | gf100_gr_sclass[] = { | 262 | gf100_gr_sclass[] = { |
| 263 | { 0x902d, &nvkm_object_ofuncs }, | 263 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 264 | { 0x9039, &nvkm_object_ofuncs }, | 264 | { FERMI_MEMORY_TO_MEMORY_FORMAT_A, &nvkm_object_ofuncs }, |
| 265 | { FERMI_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 265 | { FERMI_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 266 | { FERMI_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | 266 | { FERMI_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, |
| 267 | {} | 267 | {} |
| @@ -1097,12 +1097,26 @@ gf100_gr_intr(struct nvkm_subdev *subdev) | |||
| 1097 | u32 subc = (addr & 0x00070000) >> 16; | 1097 | u32 subc = (addr & 0x00070000) >> 16; |
| 1098 | u32 data = nv_rd32(priv, 0x400708); | 1098 | u32 data = nv_rd32(priv, 0x400708); |
| 1099 | u32 code = nv_rd32(priv, 0x400110); | 1099 | u32 code = nv_rd32(priv, 0x400110); |
| 1100 | u32 class = nv_rd32(priv, 0x404200 + (subc * 4)); | 1100 | u32 class; |
| 1101 | int chid; | 1101 | int chid; |
| 1102 | 1102 | ||
| 1103 | if (nv_device(priv)->card_type < NV_E0 || subc < 4) | ||
| 1104 | class = nv_rd32(priv, 0x404200 + (subc * 4)); | ||
| 1105 | else | ||
| 1106 | class = 0x0000; | ||
| 1107 | |||
| 1103 | engctx = nvkm_engctx_get(engine, inst); | 1108 | engctx = nvkm_engctx_get(engine, inst); |
| 1104 | chid = pfifo->chid(pfifo, engctx); | 1109 | chid = pfifo->chid(pfifo, engctx); |
| 1105 | 1110 | ||
| 1111 | if (stat & 0x00000001) { | ||
| 1112 | /* | ||
| 1113 | * notifier interrupt, only needed for cyclestats | ||
| 1114 | * can be safely ignored | ||
| 1115 | */ | ||
| 1116 | nv_wr32(priv, 0x400100, 0x00000001); | ||
| 1117 | stat &= ~0x00000001; | ||
| 1118 | } | ||
| 1119 | |||
| 1106 | if (stat & 0x00000010) { | 1120 | if (stat & 0x00000010) { |
| 1107 | handle = nvkm_handle_get_class(engctx, class); | 1121 | handle = nvkm_handle_get_class(engctx, class); |
| 1108 | if (!handle || nv_call(handle->object, mthd, data)) { | 1122 | if (!handle || nv_call(handle->object, mthd, data)) { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h index aeeca1be9cf0..8af1a89eda84 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h | |||
| @@ -124,10 +124,12 @@ void gf100_gr_dtor(struct nvkm_object *); | |||
| 124 | int gf100_gr_init(struct nvkm_object *); | 124 | int gf100_gr_init(struct nvkm_object *); |
| 125 | void gf100_gr_zbc_init(struct gf100_gr_priv *); | 125 | void gf100_gr_zbc_init(struct gf100_gr_priv *); |
| 126 | 126 | ||
| 127 | int gk104_gr_fini(struct nvkm_object *, bool); | 127 | int gk104_gr_ctor(struct nvkm_object *, struct nvkm_object *, |
| 128 | struct nvkm_oclass *, void *data, u32 size, | ||
| 129 | struct nvkm_object **); | ||
| 128 | int gk104_gr_init(struct nvkm_object *); | 130 | int gk104_gr_init(struct nvkm_object *); |
| 129 | 131 | ||
| 130 | int gk110_gr_fini(struct nvkm_object *, bool); | 132 | int gm204_gr_init(struct nvkm_object *); |
| 131 | 133 | ||
| 132 | extern struct nvkm_ofuncs gf100_fermi_ofuncs; | 134 | extern struct nvkm_ofuncs gf100_fermi_ofuncs; |
| 133 | 135 | ||
| @@ -136,6 +138,7 @@ extern struct nvkm_omthds gf100_gr_9097_omthds[]; | |||
| 136 | extern struct nvkm_omthds gf100_gr_90c0_omthds[]; | 138 | extern struct nvkm_omthds gf100_gr_90c0_omthds[]; |
| 137 | extern struct nvkm_oclass gf110_gr_sclass[]; | 139 | extern struct nvkm_oclass gf110_gr_sclass[]; |
| 138 | extern struct nvkm_oclass gk110_gr_sclass[]; | 140 | extern struct nvkm_oclass gk110_gr_sclass[]; |
| 141 | extern struct nvkm_oclass gm204_gr_sclass[]; | ||
| 139 | 142 | ||
| 140 | struct gf100_gr_init { | 143 | struct gf100_gr_init { |
| 141 | u32 addr; | 144 | u32 addr; |
| @@ -247,4 +250,17 @@ extern const struct gf100_gr_init gk110_gr_init_tex_0[]; | |||
| 247 | extern const struct gf100_gr_init gk110_gr_init_sm_0[]; | 250 | extern const struct gf100_gr_init gk110_gr_init_sm_0[]; |
| 248 | 251 | ||
| 249 | extern const struct gf100_gr_init gk208_gr_init_gpc_unk_0[]; | 252 | extern const struct gf100_gr_init gk208_gr_init_gpc_unk_0[]; |
| 253 | |||
| 254 | extern const struct gf100_gr_init gm107_gr_init_scc_0[]; | ||
| 255 | extern const struct gf100_gr_init gm107_gr_init_prop_0[]; | ||
| 256 | extern const struct gf100_gr_init gm107_gr_init_setup_1[]; | ||
| 257 | extern const struct gf100_gr_init gm107_gr_init_zcull_0[]; | ||
| 258 | extern const struct gf100_gr_init gm107_gr_init_gpc_unk_1[]; | ||
| 259 | extern const struct gf100_gr_init gm107_gr_init_tex_0[]; | ||
| 260 | extern const struct gf100_gr_init gm107_gr_init_l1c_0[]; | ||
| 261 | extern const struct gf100_gr_init gm107_gr_init_wwdx_0[]; | ||
| 262 | extern const struct gf100_gr_init gm107_gr_init_cbm_0[]; | ||
| 263 | void gm107_gr_init_bios(struct gf100_gr_priv *); | ||
| 264 | |||
| 265 | extern const struct gf100_gr_pack gm204_gr_pack_mmio[]; | ||
| 250 | #endif | 266 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c index 5362c8176e64..8df73421c78c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c | |||
| @@ -32,8 +32,8 @@ | |||
| 32 | 32 | ||
| 33 | static struct nvkm_oclass | 33 | static struct nvkm_oclass |
| 34 | gf108_gr_sclass[] = { | 34 | gf108_gr_sclass[] = { |
| 35 | { 0x902d, &nvkm_object_ofuncs }, | 35 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 36 | { 0x9039, &nvkm_object_ofuncs }, | 36 | { FERMI_MEMORY_TO_MEMORY_FORMAT_A, &nvkm_object_ofuncs }, |
| 37 | { FERMI_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 37 | { FERMI_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 38 | { FERMI_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 38 | { FERMI_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 39 | { FERMI_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | 39 | { FERMI_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c index 88beb491b7b8..ef76e2dd1d31 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c | |||
| @@ -32,8 +32,8 @@ | |||
| 32 | 32 | ||
| 33 | struct nvkm_oclass | 33 | struct nvkm_oclass |
| 34 | gf110_gr_sclass[] = { | 34 | gf110_gr_sclass[] = { |
| 35 | { 0x902d, &nvkm_object_ofuncs }, | 35 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 36 | { 0x9039, &nvkm_object_ofuncs }, | 36 | { FERMI_MEMORY_TO_MEMORY_FORMAT_A, &nvkm_object_ofuncs }, |
| 37 | { FERMI_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 37 | { FERMI_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 38 | { FERMI_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 38 | { FERMI_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 39 | { FERMI_C, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 39 | { FERMI_C, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c index 489fdd94b885..46f7844eca70 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c | |||
| @@ -34,8 +34,8 @@ | |||
| 34 | 34 | ||
| 35 | static struct nvkm_oclass | 35 | static struct nvkm_oclass |
| 36 | gk104_gr_sclass[] = { | 36 | gk104_gr_sclass[] = { |
| 37 | { 0x902d, &nvkm_object_ofuncs }, | 37 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 38 | { 0xa040, &nvkm_object_ofuncs }, | 38 | { KEPLER_INLINE_TO_MEMORY_A, &nvkm_object_ofuncs }, |
| 39 | { KEPLER_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 39 | { KEPLER_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 40 | { KEPLER_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | 40 | { KEPLER_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, |
| 41 | {} | 41 | {} |
| @@ -310,6 +310,17 @@ gk104_gr_init(struct nvkm_object *object) | |||
| 310 | return gf100_gr_init_ctxctl(priv); | 310 | return gf100_gr_init_ctxctl(priv); |
| 311 | } | 311 | } |
| 312 | 312 | ||
| 313 | int | ||
| 314 | gk104_gr_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 315 | struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 316 | struct nvkm_object **pobject) | ||
| 317 | { | ||
| 318 | struct nvkm_pmu *pmu = nvkm_pmu(parent); | ||
| 319 | if (pmu) | ||
| 320 | pmu->pgob(pmu, false); | ||
| 321 | return gf100_gr_ctor(parent, engine, oclass, data, size, pobject); | ||
| 322 | } | ||
| 323 | |||
| 313 | #include "fuc/hubgk104.fuc3.h" | 324 | #include "fuc/hubgk104.fuc3.h" |
| 314 | 325 | ||
| 315 | static struct gf100_gr_ucode | 326 | static struct gf100_gr_ucode |
| @@ -334,7 +345,7 @@ struct nvkm_oclass * | |||
| 334 | gk104_gr_oclass = &(struct gf100_gr_oclass) { | 345 | gk104_gr_oclass = &(struct gf100_gr_oclass) { |
| 335 | .base.handle = NV_ENGINE(GR, 0xe4), | 346 | .base.handle = NV_ENGINE(GR, 0xe4), |
| 336 | .base.ofuncs = &(struct nvkm_ofuncs) { | 347 | .base.ofuncs = &(struct nvkm_ofuncs) { |
| 337 | .ctor = gf100_gr_ctor, | 348 | .ctor = gk104_gr_ctor, |
| 338 | .dtor = gf100_gr_dtor, | 349 | .dtor = gf100_gr_dtor, |
| 339 | .init = gk104_gr_init, | 350 | .init = gk104_gr_init, |
| 340 | .fini = _nvkm_gr_fini, | 351 | .fini = _nvkm_gr_fini, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c index 78e03ab1608e..f4cd8e5546af 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c | |||
| @@ -34,8 +34,8 @@ | |||
| 34 | 34 | ||
| 35 | struct nvkm_oclass | 35 | struct nvkm_oclass |
| 36 | gk110_gr_sclass[] = { | 36 | gk110_gr_sclass[] = { |
| 37 | { 0x902d, &nvkm_object_ofuncs }, | 37 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 38 | { 0xa140, &nvkm_object_ofuncs }, | 38 | { KEPLER_INLINE_TO_MEMORY_B, &nvkm_object_ofuncs }, |
| 39 | { KEPLER_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 39 | { KEPLER_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 40 | { KEPLER_COMPUTE_B, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | 40 | { KEPLER_COMPUTE_B, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, |
| 41 | {} | 41 | {} |
| @@ -173,43 +173,6 @@ gk110_gr_pack_mmio[] = { | |||
| 173 | * PGRAPH engine/subdev functions | 173 | * PGRAPH engine/subdev functions |
| 174 | ******************************************************************************/ | 174 | ******************************************************************************/ |
| 175 | 175 | ||
| 176 | int | ||
| 177 | gk110_gr_fini(struct nvkm_object *object, bool suspend) | ||
| 178 | { | ||
| 179 | struct gf100_gr_priv *priv = (void *)object; | ||
| 180 | static const struct { | ||
| 181 | u32 addr; | ||
| 182 | u32 data; | ||
| 183 | } magic[] = { | ||
| 184 | { 0x020520, 0xfffffffc }, | ||
| 185 | { 0x020524, 0xfffffffe }, | ||
| 186 | { 0x020524, 0xfffffffc }, | ||
| 187 | { 0x020524, 0xfffffff8 }, | ||
| 188 | { 0x020524, 0xffffffe0 }, | ||
| 189 | { 0x020530, 0xfffffffe }, | ||
| 190 | { 0x02052c, 0xfffffffa }, | ||
| 191 | { 0x02052c, 0xfffffff0 }, | ||
| 192 | { 0x02052c, 0xffffffc0 }, | ||
| 193 | { 0x02052c, 0xffffff00 }, | ||
| 194 | { 0x02052c, 0xfffffc00 }, | ||
| 195 | { 0x02052c, 0xfffcfc00 }, | ||
| 196 | { 0x02052c, 0xfff0fc00 }, | ||
| 197 | { 0x02052c, 0xff80fc00 }, | ||
| 198 | { 0x020528, 0xfffffffe }, | ||
| 199 | { 0x020528, 0xfffffffc }, | ||
| 200 | }; | ||
| 201 | int i; | ||
| 202 | |||
| 203 | nv_mask(priv, 0x000200, 0x08001000, 0x00000000); | ||
| 204 | nv_mask(priv, 0x0206b4, 0x00000000, 0x00000000); | ||
| 205 | for (i = 0; i < ARRAY_SIZE(magic); i++) { | ||
| 206 | nv_wr32(priv, magic[i].addr, magic[i].data); | ||
| 207 | nv_wait(priv, magic[i].addr, 0x80000000, 0x00000000); | ||
| 208 | } | ||
| 209 | |||
| 210 | return nvkm_gr_fini(&priv->base, suspend); | ||
| 211 | } | ||
| 212 | |||
| 213 | #include "fuc/hubgk110.fuc3.h" | 176 | #include "fuc/hubgk110.fuc3.h" |
| 214 | 177 | ||
| 215 | struct gf100_gr_ucode | 178 | struct gf100_gr_ucode |
| @@ -234,10 +197,10 @@ struct nvkm_oclass * | |||
| 234 | gk110_gr_oclass = &(struct gf100_gr_oclass) { | 197 | gk110_gr_oclass = &(struct gf100_gr_oclass) { |
| 235 | .base.handle = NV_ENGINE(GR, 0xf0), | 198 | .base.handle = NV_ENGINE(GR, 0xf0), |
| 236 | .base.ofuncs = &(struct nvkm_ofuncs) { | 199 | .base.ofuncs = &(struct nvkm_ofuncs) { |
| 237 | .ctor = gf100_gr_ctor, | 200 | .ctor = gk104_gr_ctor, |
| 238 | .dtor = gf100_gr_dtor, | 201 | .dtor = gf100_gr_dtor, |
| 239 | .init = gk104_gr_init, | 202 | .init = gk104_gr_init, |
| 240 | .fini = gk110_gr_fini, | 203 | .fini = _nvkm_gr_fini, |
| 241 | }, | 204 | }, |
| 242 | .cclass = &gk110_grctx_oclass, | 205 | .cclass = &gk110_grctx_oclass, |
| 243 | .sclass = gk110_gr_sclass, | 206 | .sclass = gk110_gr_sclass, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c index 5292c5a9a38c..9ff9eab0ccaf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c | |||
| @@ -102,10 +102,10 @@ struct nvkm_oclass * | |||
| 102 | gk110b_gr_oclass = &(struct gf100_gr_oclass) { | 102 | gk110b_gr_oclass = &(struct gf100_gr_oclass) { |
| 103 | .base.handle = NV_ENGINE(GR, 0xf1), | 103 | .base.handle = NV_ENGINE(GR, 0xf1), |
| 104 | .base.ofuncs = &(struct nvkm_ofuncs) { | 104 | .base.ofuncs = &(struct nvkm_ofuncs) { |
| 105 | .ctor = gf100_gr_ctor, | 105 | .ctor = gk104_gr_ctor, |
| 106 | .dtor = gf100_gr_dtor, | 106 | .dtor = gf100_gr_dtor, |
| 107 | .init = gk104_gr_init, | 107 | .init = gk104_gr_init, |
| 108 | .fini = gk110_gr_fini, | 108 | .fini = _nvkm_gr_fini, |
| 109 | }, | 109 | }, |
| 110 | .cclass = &gk110b_grctx_oclass, | 110 | .cclass = &gk110b_grctx_oclass, |
| 111 | .sclass = gk110_gr_sclass, | 111 | .sclass = gk110_gr_sclass, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c index ae6b853173b6..85f44a3d5d11 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c | |||
| @@ -34,10 +34,10 @@ | |||
| 34 | 34 | ||
| 35 | static struct nvkm_oclass | 35 | static struct nvkm_oclass |
| 36 | gk208_gr_sclass[] = { | 36 | gk208_gr_sclass[] = { |
| 37 | { 0x902d, &nvkm_object_ofuncs }, | 37 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 38 | { 0xa140, &nvkm_object_ofuncs }, | 38 | { KEPLER_INLINE_TO_MEMORY_B, &nvkm_object_ofuncs }, |
| 39 | { KEPLER_B, &gf100_fermi_ofuncs }, | 39 | { KEPLER_B, &gf100_fermi_ofuncs }, |
| 40 | { 0xa1c0, &nvkm_object_ofuncs }, | 40 | { KEPLER_COMPUTE_B, &nvkm_object_ofuncs }, |
| 41 | {} | 41 | {} |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| @@ -152,43 +152,6 @@ gk208_gr_pack_mmio[] = { | |||
| 152 | * PGRAPH engine/subdev functions | 152 | * PGRAPH engine/subdev functions |
| 153 | ******************************************************************************/ | 153 | ******************************************************************************/ |
| 154 | 154 | ||
| 155 | static int | ||
| 156 | gk208_gr_fini(struct nvkm_object *object, bool suspend) | ||
| 157 | { | ||
| 158 | struct gf100_gr_priv *priv = (void *)object; | ||
| 159 | static const struct { | ||
| 160 | u32 addr; | ||
| 161 | u32 data; | ||
| 162 | } magic[] = { | ||
| 163 | { 0x020520, 0xfffffffc }, | ||
| 164 | { 0x020524, 0xfffffffe }, | ||
| 165 | { 0x020524, 0xfffffffc }, | ||
| 166 | { 0x020524, 0xfffffff8 }, | ||
| 167 | { 0x020524, 0xffffffe0 }, | ||
| 168 | { 0x020530, 0xfffffffe }, | ||
| 169 | { 0x02052c, 0xfffffffa }, | ||
| 170 | { 0x02052c, 0xfffffff0 }, | ||
| 171 | { 0x02052c, 0xffffffc0 }, | ||
| 172 | { 0x02052c, 0xffffff00 }, | ||
| 173 | { 0x02052c, 0xfffffc00 }, | ||
| 174 | { 0x02052c, 0xfffcfc00 }, | ||
| 175 | { 0x02052c, 0xfff0fc00 }, | ||
| 176 | { 0x02052c, 0xff80fc00 }, | ||
| 177 | { 0x020528, 0xfffffffe }, | ||
| 178 | { 0x020528, 0xfffffffc }, | ||
| 179 | }; | ||
| 180 | int i; | ||
| 181 | |||
| 182 | nv_mask(priv, 0x000200, 0x08001000, 0x00000000); | ||
| 183 | nv_mask(priv, 0x0206b4, 0x00000000, 0x00000000); | ||
| 184 | for (i = 0; i < ARRAY_SIZE(magic); i++) { | ||
| 185 | nv_wr32(priv, magic[i].addr, magic[i].data); | ||
| 186 | nv_wait(priv, magic[i].addr, 0x80000000, 0x00000000); | ||
| 187 | } | ||
| 188 | |||
| 189 | return nvkm_gr_fini(&priv->base, suspend); | ||
| 190 | } | ||
| 191 | |||
| 192 | #include "fuc/hubgk208.fuc5.h" | 155 | #include "fuc/hubgk208.fuc5.h" |
| 193 | 156 | ||
| 194 | static struct gf100_gr_ucode | 157 | static struct gf100_gr_ucode |
| @@ -213,10 +176,10 @@ struct nvkm_oclass * | |||
| 213 | gk208_gr_oclass = &(struct gf100_gr_oclass) { | 176 | gk208_gr_oclass = &(struct gf100_gr_oclass) { |
| 214 | .base.handle = NV_ENGINE(GR, 0x08), | 177 | .base.handle = NV_ENGINE(GR, 0x08), |
| 215 | .base.ofuncs = &(struct nvkm_ofuncs) { | 178 | .base.ofuncs = &(struct nvkm_ofuncs) { |
| 216 | .ctor = gf100_gr_ctor, | 179 | .ctor = gk104_gr_ctor, |
| 217 | .dtor = gf100_gr_dtor, | 180 | .dtor = gf100_gr_dtor, |
| 218 | .init = gk104_gr_init, | 181 | .init = gk104_gr_init, |
| 219 | .fini = gk208_gr_fini, | 182 | .fini = _nvkm_gr_fini, |
| 220 | }, | 183 | }, |
| 221 | .cclass = &gk208_grctx_oclass, | 184 | .cclass = &gk208_grctx_oclass, |
| 222 | .sclass = gk208_gr_sclass, | 185 | .sclass = gk208_gr_sclass, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c index 213755534084..40ff5eb9180c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.c | |||
| @@ -26,8 +26,8 @@ | |||
| 26 | 26 | ||
| 27 | static struct nvkm_oclass | 27 | static struct nvkm_oclass |
| 28 | gk20a_gr_sclass[] = { | 28 | gk20a_gr_sclass[] = { |
| 29 | { 0x902d, &nvkm_object_ofuncs }, | 29 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 30 | { 0xa040, &nvkm_object_ofuncs }, | 30 | { KEPLER_INLINE_TO_MEMORY_A, &nvkm_object_ofuncs }, |
| 31 | { KEPLER_C, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 31 | { KEPLER_C, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 32 | { KEPLER_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | 32 | { KEPLER_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, |
| 33 | {} | 33 | {} |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c index 124492b8a2d6..a5ebd459bc24 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c | |||
| @@ -35,8 +35,8 @@ | |||
| 35 | 35 | ||
| 36 | static struct nvkm_oclass | 36 | static struct nvkm_oclass |
| 37 | gm107_gr_sclass[] = { | 37 | gm107_gr_sclass[] = { |
| 38 | { 0x902d, &nvkm_object_ofuncs }, | 38 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, |
| 39 | { 0xa140, &nvkm_object_ofuncs }, | 39 | { KEPLER_INLINE_TO_MEMORY_B, &nvkm_object_ofuncs }, |
| 40 | { MAXWELL_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | 40 | { MAXWELL_A, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, |
| 41 | { MAXWELL_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | 41 | { MAXWELL_COMPUTE_A, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, |
| 42 | {} | 42 | {} |
| @@ -71,7 +71,7 @@ gm107_gr_init_ds_0[] = { | |||
| 71 | {} | 71 | {} |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | static const struct gf100_gr_init | 74 | const struct gf100_gr_init |
| 75 | gm107_gr_init_scc_0[] = { | 75 | gm107_gr_init_scc_0[] = { |
| 76 | { 0x40803c, 1, 0x04, 0x00000010 }, | 76 | { 0x40803c, 1, 0x04, 0x00000010 }, |
| 77 | {} | 77 | {} |
| @@ -85,14 +85,14 @@ gm107_gr_init_sked_0[] = { | |||
| 85 | {} | 85 | {} |
| 86 | }; | 86 | }; |
| 87 | 87 | ||
| 88 | static const struct gf100_gr_init | 88 | const struct gf100_gr_init |
| 89 | gm107_gr_init_prop_0[] = { | 89 | gm107_gr_init_prop_0[] = { |
| 90 | { 0x418408, 1, 0x04, 0x00000000 }, | 90 | { 0x418408, 1, 0x04, 0x00000000 }, |
| 91 | { 0x4184a0, 1, 0x04, 0x00000000 }, | 91 | { 0x4184a0, 1, 0x04, 0x00000000 }, |
| 92 | {} | 92 | {} |
| 93 | }; | 93 | }; |
| 94 | 94 | ||
| 95 | static const struct gf100_gr_init | 95 | const struct gf100_gr_init |
| 96 | gm107_gr_init_setup_1[] = { | 96 | gm107_gr_init_setup_1[] = { |
| 97 | { 0x4188c8, 2, 0x04, 0x00000000 }, | 97 | { 0x4188c8, 2, 0x04, 0x00000000 }, |
| 98 | { 0x4188d0, 1, 0x04, 0x00010000 }, | 98 | { 0x4188d0, 1, 0x04, 0x00010000 }, |
| @@ -100,7 +100,7 @@ gm107_gr_init_setup_1[] = { | |||
| 100 | {} | 100 | {} |
| 101 | }; | 101 | }; |
| 102 | 102 | ||
| 103 | static const struct gf100_gr_init | 103 | const struct gf100_gr_init |
| 104 | gm107_gr_init_zcull_0[] = { | 104 | gm107_gr_init_zcull_0[] = { |
| 105 | { 0x418910, 1, 0x04, 0x00010001 }, | 105 | { 0x418910, 1, 0x04, 0x00010001 }, |
| 106 | { 0x418914, 1, 0x04, 0x00000301 }, | 106 | { 0x418914, 1, 0x04, 0x00000301 }, |
| @@ -111,7 +111,7 @@ gm107_gr_init_zcull_0[] = { | |||
| 111 | {} | 111 | {} |
| 112 | }; | 112 | }; |
| 113 | 113 | ||
| 114 | static const struct gf100_gr_init | 114 | const struct gf100_gr_init |
| 115 | gm107_gr_init_gpc_unk_1[] = { | 115 | gm107_gr_init_gpc_unk_1[] = { |
| 116 | { 0x418d00, 1, 0x04, 0x00000000 }, | 116 | { 0x418d00, 1, 0x04, 0x00000000 }, |
| 117 | { 0x418f00, 1, 0x04, 0x00000400 }, | 117 | { 0x418f00, 1, 0x04, 0x00000400 }, |
| @@ -134,7 +134,7 @@ gm107_gr_init_tpccs_0[] = { | |||
| 134 | {} | 134 | {} |
| 135 | }; | 135 | }; |
| 136 | 136 | ||
| 137 | static const struct gf100_gr_init | 137 | const struct gf100_gr_init |
| 138 | gm107_gr_init_tex_0[] = { | 138 | gm107_gr_init_tex_0[] = { |
| 139 | { 0x419ab0, 1, 0x04, 0x00000000 }, | 139 | { 0x419ab0, 1, 0x04, 0x00000000 }, |
| 140 | { 0x419ab8, 1, 0x04, 0x000000e7 }, | 140 | { 0x419ab8, 1, 0x04, 0x000000e7 }, |
| @@ -160,7 +160,7 @@ gm107_gr_init_pe_0[] = { | |||
| 160 | {} | 160 | {} |
| 161 | }; | 161 | }; |
| 162 | 162 | ||
| 163 | static const struct gf100_gr_init | 163 | const struct gf100_gr_init |
| 164 | gm107_gr_init_l1c_0[] = { | 164 | gm107_gr_init_l1c_0[] = { |
| 165 | { 0x419c98, 1, 0x04, 0x00000000 }, | 165 | { 0x419c98, 1, 0x04, 0x00000000 }, |
| 166 | { 0x419cc0, 2, 0x04, 0x00000000 }, | 166 | { 0x419cc0, 2, 0x04, 0x00000000 }, |
| @@ -206,14 +206,14 @@ gm107_gr_init_pes_0[] = { | |||
| 206 | {} | 206 | {} |
| 207 | }; | 207 | }; |
| 208 | 208 | ||
| 209 | static const struct gf100_gr_init | 209 | const struct gf100_gr_init |
| 210 | gm107_gr_init_wwdx_0[] = { | 210 | gm107_gr_init_wwdx_0[] = { |
| 211 | { 0x41bfd4, 1, 0x04, 0x00800000 }, | 211 | { 0x41bfd4, 1, 0x04, 0x00800000 }, |
| 212 | { 0x41bfdc, 1, 0x04, 0x00000000 }, | 212 | { 0x41bfdc, 1, 0x04, 0x00000000 }, |
| 213 | {} | 213 | {} |
| 214 | }; | 214 | }; |
| 215 | 215 | ||
| 216 | static const struct gf100_gr_init | 216 | const struct gf100_gr_init |
| 217 | gm107_gr_init_cbm_0[] = { | 217 | gm107_gr_init_cbm_0[] = { |
| 218 | { 0x41becc, 1, 0x04, 0x00000000 }, | 218 | { 0x41becc, 1, 0x04, 0x00000000 }, |
| 219 | {} | 219 | {} |
| @@ -291,7 +291,7 @@ gm107_gr_pack_mmio[] = { | |||
| 291 | * PGRAPH engine/subdev functions | 291 | * PGRAPH engine/subdev functions |
| 292 | ******************************************************************************/ | 292 | ******************************************************************************/ |
| 293 | 293 | ||
| 294 | static void | 294 | void |
| 295 | gm107_gr_init_bios(struct gf100_gr_priv *priv) | 295 | gm107_gr_init_bios(struct gf100_gr_priv *priv) |
| 296 | { | 296 | { |
| 297 | static const struct { | 297 | static const struct { |
| @@ -464,7 +464,7 @@ gm107_gr_oclass = &(struct gf100_gr_oclass) { | |||
| 464 | .cclass = &gm107_grctx_oclass, | 464 | .cclass = &gm107_grctx_oclass, |
| 465 | .sclass = gm107_gr_sclass, | 465 | .sclass = gm107_gr_sclass, |
| 466 | .mmio = gm107_gr_pack_mmio, | 466 | .mmio = gm107_gr_pack_mmio, |
| 467 | .fecs.ucode = 0 ? &gm107_gr_fecs_ucode : NULL, | 467 | .fecs.ucode = &gm107_gr_fecs_ucode, |
| 468 | .gpccs.ucode = &gm107_gr_gpccs_ucode, | 468 | .gpccs.ucode = &gm107_gr_gpccs_ucode, |
| 469 | .ppc_nr = 2, | 469 | .ppc_nr = 2, |
| 470 | }.base; | 470 | }.base; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm204.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm204.c new file mode 100644 index 000000000000..2f5eadd12a9b --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm204.c | |||
| @@ -0,0 +1,387 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
| 23 | */ | ||
| 24 | #include "gf100.h" | ||
| 25 | #include "ctxgf100.h" | ||
| 26 | |||
| 27 | #include <nvif/class.h> | ||
| 28 | |||
| 29 | /******************************************************************************* | ||
| 30 | * Graphics object classes | ||
| 31 | ******************************************************************************/ | ||
| 32 | |||
| 33 | struct nvkm_oclass | ||
| 34 | gm204_gr_sclass[] = { | ||
| 35 | { FERMI_TWOD_A, &nvkm_object_ofuncs }, | ||
| 36 | { KEPLER_INLINE_TO_MEMORY_B, &nvkm_object_ofuncs }, | ||
| 37 | { MAXWELL_B, &gf100_fermi_ofuncs, gf100_gr_9097_omthds }, | ||
| 38 | { MAXWELL_COMPUTE_B, &nvkm_object_ofuncs, gf100_gr_90c0_omthds }, | ||
| 39 | {} | ||
| 40 | }; | ||
| 41 | |||
| 42 | /******************************************************************************* | ||
| 43 | * PGRAPH register lists | ||
| 44 | ******************************************************************************/ | ||
| 45 | |||
| 46 | static const struct gf100_gr_init | ||
| 47 | gm204_gr_init_main_0[] = { | ||
| 48 | { 0x400080, 1, 0x04, 0x003003e2 }, | ||
| 49 | { 0x400088, 1, 0x04, 0xe007bfe7 }, | ||
| 50 | { 0x40008c, 1, 0x04, 0x00060000 }, | ||
| 51 | { 0x400090, 1, 0x04, 0x00000030 }, | ||
| 52 | { 0x40013c, 1, 0x04, 0x003901f3 }, | ||
| 53 | { 0x400140, 1, 0x04, 0x00000100 }, | ||
| 54 | { 0x400144, 1, 0x04, 0x00000000 }, | ||
| 55 | { 0x400148, 1, 0x04, 0x00000110 }, | ||
| 56 | { 0x400138, 1, 0x04, 0x00000000 }, | ||
| 57 | { 0x400130, 2, 0x04, 0x00000000 }, | ||
| 58 | { 0x400124, 1, 0x04, 0x00000002 }, | ||
| 59 | {} | ||
| 60 | }; | ||
| 61 | |||
| 62 | static const struct gf100_gr_init | ||
| 63 | gm204_gr_init_fe_0[] = { | ||
| 64 | { 0x40415c, 1, 0x04, 0x00000000 }, | ||
| 65 | { 0x404170, 1, 0x04, 0x00000000 }, | ||
| 66 | { 0x4041b4, 1, 0x04, 0x00000000 }, | ||
| 67 | { 0x4041b8, 1, 0x04, 0x00000010 }, | ||
| 68 | {} | ||
| 69 | }; | ||
| 70 | |||
| 71 | static const struct gf100_gr_init | ||
| 72 | gm204_gr_init_ds_0[] = { | ||
| 73 | { 0x40583c, 1, 0x04, 0x00000000 }, | ||
| 74 | { 0x405844, 1, 0x04, 0x00ffffff }, | ||
| 75 | { 0x40584c, 1, 0x04, 0x00000001 }, | ||
| 76 | { 0x405850, 1, 0x04, 0x00000000 }, | ||
| 77 | { 0x405900, 1, 0x04, 0x00000000 }, | ||
| 78 | { 0x405908, 1, 0x04, 0x00000000 }, | ||
| 79 | {} | ||
| 80 | }; | ||
| 81 | |||
| 82 | static const struct gf100_gr_init | ||
| 83 | gm204_gr_init_sked_0[] = { | ||
| 84 | { 0x407010, 1, 0x04, 0x00000000 }, | ||
| 85 | { 0x407040, 1, 0x04, 0x80440434 }, | ||
| 86 | { 0x407048, 1, 0x04, 0x00000008 }, | ||
| 87 | {} | ||
| 88 | }; | ||
| 89 | |||
| 90 | static const struct gf100_gr_init | ||
| 91 | gm204_gr_init_tpccs_0[] = { | ||
| 92 | { 0x419d60, 1, 0x04, 0x0000003f }, | ||
| 93 | { 0x419d88, 3, 0x04, 0x00000000 }, | ||
| 94 | { 0x419dc4, 1, 0x04, 0x00000000 }, | ||
| 95 | { 0x419dc8, 1, 0x04, 0x00000501 }, | ||
| 96 | { 0x419dd0, 1, 0x04, 0x00000000 }, | ||
| 97 | { 0x419dd4, 1, 0x04, 0x00000100 }, | ||
| 98 | { 0x419dd8, 1, 0x04, 0x00000001 }, | ||
| 99 | { 0x419ddc, 1, 0x04, 0x00000002 }, | ||
| 100 | { 0x419de0, 1, 0x04, 0x00000001 }, | ||
| 101 | { 0x419de8, 1, 0x04, 0x000000cc }, | ||
| 102 | { 0x419dec, 1, 0x04, 0x00000000 }, | ||
| 103 | { 0x419df0, 1, 0x04, 0x000000cc }, | ||
| 104 | { 0x419df4, 1, 0x04, 0x00000000 }, | ||
| 105 | { 0x419d0c, 1, 0x04, 0x00000000 }, | ||
| 106 | { 0x419d10, 1, 0x04, 0x00000014 }, | ||
| 107 | {} | ||
| 108 | }; | ||
| 109 | |||
| 110 | static const struct gf100_gr_init | ||
| 111 | gm204_gr_init_pe_0[] = { | ||
| 112 | { 0x419900, 1, 0x04, 0x000000ff }, | ||
| 113 | { 0x419810, 1, 0x04, 0x00000000 }, | ||
| 114 | { 0x41980c, 1, 0x04, 0x00000010 }, | ||
| 115 | { 0x419844, 1, 0x04, 0x00000000 }, | ||
| 116 | { 0x419838, 1, 0x04, 0x000000ff }, | ||
| 117 | { 0x419850, 1, 0x04, 0x00000004 }, | ||
| 118 | { 0x419854, 2, 0x04, 0x00000000 }, | ||
| 119 | { 0x419894, 3, 0x04, 0x00100401 }, | ||
| 120 | {} | ||
| 121 | }; | ||
| 122 | |||
| 123 | static const struct gf100_gr_init | ||
| 124 | gm204_gr_init_sm_0[] = { | ||
| 125 | { 0x419e30, 1, 0x04, 0x000000ff }, | ||
| 126 | { 0x419e00, 1, 0x04, 0x00000000 }, | ||
| 127 | { 0x419ea0, 1, 0x04, 0x00000000 }, | ||
| 128 | { 0x419ee4, 1, 0x04, 0x00000000 }, | ||
| 129 | { 0x419ea4, 1, 0x04, 0x00000100 }, | ||
| 130 | { 0x419ea8, 1, 0x04, 0x00000000 }, | ||
| 131 | { 0x419ee8, 1, 0x04, 0x00000091 }, | ||
| 132 | { 0x419eb4, 1, 0x04, 0x00000000 }, | ||
| 133 | { 0x419ebc, 2, 0x04, 0x00000000 }, | ||
| 134 | { 0x419edc, 1, 0x04, 0x000c1810 }, | ||
| 135 | { 0x419ed8, 1, 0x04, 0x00000000 }, | ||
| 136 | { 0x419ee0, 1, 0x04, 0x00000000 }, | ||
| 137 | {} | ||
| 138 | }; | ||
| 139 | |||
| 140 | static const struct gf100_gr_init | ||
| 141 | gm204_gr_init_l1c_1[] = { | ||
| 142 | { 0x419cf8, 2, 0x04, 0x00000000 }, | ||
| 143 | {} | ||
| 144 | }; | ||
| 145 | |||
| 146 | static const struct gf100_gr_init | ||
| 147 | gm204_gr_init_sm_1[] = { | ||
| 148 | { 0x419f74, 1, 0x04, 0x00055155 }, | ||
| 149 | { 0x419f80, 4, 0x04, 0x00000000 }, | ||
| 150 | {} | ||
| 151 | }; | ||
| 152 | |||
| 153 | static const struct gf100_gr_init | ||
| 154 | gm204_gr_init_l1c_2[] = { | ||
| 155 | { 0x419ccc, 2, 0x04, 0x00000000 }, | ||
| 156 | { 0x419c80, 1, 0x04, 0x3f006022 }, | ||
| 157 | { 0x419c88, 1, 0x04, 0x00210000 }, | ||
| 158 | {} | ||
| 159 | }; | ||
| 160 | |||
| 161 | static const struct gf100_gr_init | ||
| 162 | gm204_gr_init_pes_0[] = { | ||
| 163 | { 0x41be50, 1, 0x04, 0x000000ff }, | ||
| 164 | { 0x41be04, 1, 0x04, 0x00000000 }, | ||
| 165 | { 0x41be08, 1, 0x04, 0x00000004 }, | ||
| 166 | { 0x41be0c, 1, 0x04, 0x00000008 }, | ||
| 167 | { 0x41be10, 1, 0x04, 0x2e3b8bc7 }, | ||
| 168 | { 0x41be14, 2, 0x04, 0x00000000 }, | ||
| 169 | { 0x41be3c, 5, 0x04, 0x00100401 }, | ||
| 170 | {} | ||
| 171 | }; | ||
| 172 | |||
| 173 | static const struct gf100_gr_init | ||
| 174 | gm204_gr_init_be_0[] = { | ||
| 175 | { 0x408890, 1, 0x04, 0x000000ff }, | ||
| 176 | { 0x40880c, 1, 0x04, 0x00000000 }, | ||
| 177 | { 0x408850, 1, 0x04, 0x00000004 }, | ||
| 178 | { 0x408878, 1, 0x04, 0x01b4201c }, | ||
| 179 | { 0x40887c, 1, 0x04, 0x80004c55 }, | ||
| 180 | { 0x408880, 1, 0x04, 0x0018c258 }, | ||
| 181 | { 0x408884, 1, 0x04, 0x0000160f }, | ||
| 182 | { 0x408974, 1, 0x04, 0x000000ff }, | ||
| 183 | { 0x408910, 9, 0x04, 0x00000000 }, | ||
| 184 | { 0x408950, 1, 0x04, 0x00000000 }, | ||
| 185 | { 0x408954, 1, 0x04, 0x0000ffff }, | ||
| 186 | { 0x408958, 1, 0x04, 0x00000034 }, | ||
| 187 | { 0x40895c, 1, 0x04, 0x84b17403 }, | ||
| 188 | { 0x408960, 1, 0x04, 0x04c1884f }, | ||
| 189 | { 0x408964, 1, 0x04, 0x04714445 }, | ||
| 190 | { 0x408968, 1, 0x04, 0x0280802f }, | ||
| 191 | { 0x40896c, 1, 0x04, 0x04304856 }, | ||
| 192 | { 0x408970, 1, 0x04, 0x00012800 }, | ||
| 193 | { 0x408984, 1, 0x04, 0x00000000 }, | ||
| 194 | { 0x408988, 1, 0x04, 0x08040201 }, | ||
| 195 | { 0x40898c, 1, 0x04, 0x80402010 }, | ||
| 196 | {} | ||
| 197 | }; | ||
| 198 | |||
| 199 | const struct gf100_gr_pack | ||
| 200 | gm204_gr_pack_mmio[] = { | ||
| 201 | { gm204_gr_init_main_0 }, | ||
| 202 | { gm204_gr_init_fe_0 }, | ||
| 203 | { gf100_gr_init_pri_0 }, | ||
| 204 | { gf100_gr_init_rstr2d_0 }, | ||
| 205 | { gf100_gr_init_pd_0 }, | ||
| 206 | { gm204_gr_init_ds_0 }, | ||
| 207 | { gm107_gr_init_scc_0 }, | ||
| 208 | { gm204_gr_init_sked_0 }, | ||
| 209 | { gk110_gr_init_cwd_0 }, | ||
| 210 | { gm107_gr_init_prop_0 }, | ||
| 211 | { gk208_gr_init_gpc_unk_0 }, | ||
| 212 | { gf100_gr_init_setup_0 }, | ||
| 213 | { gf100_gr_init_crstr_0 }, | ||
| 214 | { gm107_gr_init_setup_1 }, | ||
| 215 | { gm107_gr_init_zcull_0 }, | ||
| 216 | { gf100_gr_init_gpm_0 }, | ||
| 217 | { gm107_gr_init_gpc_unk_1 }, | ||
| 218 | { gf100_gr_init_gcc_0 }, | ||
| 219 | { gm204_gr_init_tpccs_0 }, | ||
| 220 | { gm107_gr_init_tex_0 }, | ||
| 221 | { gm204_gr_init_pe_0 }, | ||
| 222 | { gm107_gr_init_l1c_0 }, | ||
| 223 | { gf100_gr_init_mpc_0 }, | ||
| 224 | { gm204_gr_init_sm_0 }, | ||
| 225 | { gm204_gr_init_l1c_1 }, | ||
| 226 | { gm204_gr_init_sm_1 }, | ||
| 227 | { gm204_gr_init_l1c_2 }, | ||
| 228 | { gm204_gr_init_pes_0 }, | ||
| 229 | { gm107_gr_init_wwdx_0 }, | ||
| 230 | { gm107_gr_init_cbm_0 }, | ||
| 231 | { gm204_gr_init_be_0 }, | ||
| 232 | {} | ||
| 233 | }; | ||
| 234 | |||
| 235 | const struct gf100_gr_pack * | ||
| 236 | gm204_gr_data[] = { | ||
| 237 | gm204_gr_pack_mmio, | ||
| 238 | NULL | ||
| 239 | }; | ||
| 240 | |||
| 241 | /******************************************************************************* | ||
| 242 | * PGRAPH engine/subdev functions | ||
| 243 | ******************************************************************************/ | ||
| 244 | |||
| 245 | static int | ||
| 246 | gm204_gr_init_ctxctl(struct gf100_gr_priv *priv) | ||
| 247 | { | ||
| 248 | return 0; | ||
| 249 | } | ||
| 250 | |||
| 251 | int | ||
| 252 | gm204_gr_init(struct nvkm_object *object) | ||
| 253 | { | ||
| 254 | struct gf100_gr_oclass *oclass = (void *)object->oclass; | ||
| 255 | struct gf100_gr_priv *priv = (void *)object; | ||
| 256 | const u32 magicgpc918 = DIV_ROUND_UP(0x00800000, priv->tpc_total); | ||
| 257 | u32 data[TPC_MAX / 8] = {}; | ||
| 258 | u8 tpcnr[GPC_MAX]; | ||
| 259 | int gpc, tpc, ppc, rop; | ||
| 260 | int ret, i; | ||
| 261 | u32 tmp; | ||
| 262 | |||
| 263 | ret = nvkm_gr_init(&priv->base); | ||
| 264 | if (ret) | ||
| 265 | return ret; | ||
| 266 | |||
| 267 | tmp = nv_rd32(priv, 0x100c80); /*XXX: mask? */ | ||
| 268 | nv_wr32(priv, 0x418880, 0x00001000 | (tmp & 0x00000fff)); | ||
| 269 | nv_wr32(priv, 0x418890, 0x00000000); | ||
| 270 | nv_wr32(priv, 0x418894, 0x00000000); | ||
| 271 | nv_wr32(priv, 0x4188b4, priv->unk4188b4->addr >> 8); | ||
| 272 | nv_wr32(priv, 0x4188b8, priv->unk4188b8->addr >> 8); | ||
| 273 | nv_mask(priv, 0x4188b0, 0x00040000, 0x00040000); | ||
| 274 | |||
| 275 | /*XXX: belongs in fb */ | ||
| 276 | nv_wr32(priv, 0x100cc8, priv->unk4188b4->addr >> 8); | ||
| 277 | nv_wr32(priv, 0x100ccc, priv->unk4188b8->addr >> 8); | ||
| 278 | nv_mask(priv, 0x100cc4, 0x00040000, 0x00040000); | ||
| 279 | |||
| 280 | gf100_gr_mmio(priv, oclass->mmio); | ||
| 281 | |||
| 282 | gm107_gr_init_bios(priv); | ||
| 283 | |||
| 284 | nv_wr32(priv, GPC_UNIT(0, 0x3018), 0x00000001); | ||
| 285 | |||
| 286 | memset(data, 0x00, sizeof(data)); | ||
| 287 | memcpy(tpcnr, priv->tpc_nr, sizeof(priv->tpc_nr)); | ||
| 288 | for (i = 0, gpc = -1; i < priv->tpc_total; i++) { | ||
| 289 | do { | ||
| 290 | gpc = (gpc + 1) % priv->gpc_nr; | ||
| 291 | } while (!tpcnr[gpc]); | ||
| 292 | tpc = priv->tpc_nr[gpc] - tpcnr[gpc]--; | ||
| 293 | |||
| 294 | data[i / 8] |= tpc << ((i % 8) * 4); | ||
| 295 | } | ||
| 296 | |||
| 297 | nv_wr32(priv, GPC_BCAST(0x0980), data[0]); | ||
| 298 | nv_wr32(priv, GPC_BCAST(0x0984), data[1]); | ||
| 299 | nv_wr32(priv, GPC_BCAST(0x0988), data[2]); | ||
| 300 | nv_wr32(priv, GPC_BCAST(0x098c), data[3]); | ||
| 301 | |||
| 302 | for (gpc = 0; gpc < priv->gpc_nr; gpc++) { | ||
| 303 | nv_wr32(priv, GPC_UNIT(gpc, 0x0914), | ||
| 304 | priv->magic_not_rop_nr << 8 | priv->tpc_nr[gpc]); | ||
| 305 | nv_wr32(priv, GPC_UNIT(gpc, 0x0910), 0x00040000 | | ||
| 306 | priv->tpc_total); | ||
| 307 | nv_wr32(priv, GPC_UNIT(gpc, 0x0918), magicgpc918); | ||
| 308 | } | ||
| 309 | |||
| 310 | nv_wr32(priv, GPC_BCAST(0x3fd4), magicgpc918); | ||
| 311 | nv_wr32(priv, GPC_BCAST(0x08ac), nv_rd32(priv, 0x100800)); | ||
| 312 | nv_wr32(priv, GPC_BCAST(0x033c), nv_rd32(priv, 0x100804)); | ||
| 313 | |||
| 314 | nv_wr32(priv, 0x400500, 0x00010001); | ||
| 315 | nv_wr32(priv, 0x400100, 0xffffffff); | ||
| 316 | nv_wr32(priv, 0x40013c, 0xffffffff); | ||
| 317 | nv_wr32(priv, 0x400124, 0x00000002); | ||
| 318 | nv_wr32(priv, 0x409c24, 0x000e0000); | ||
| 319 | nv_wr32(priv, 0x405848, 0xc0000000); | ||
| 320 | nv_wr32(priv, 0x40584c, 0x00000001); | ||
| 321 | nv_wr32(priv, 0x404000, 0xc0000000); | ||
| 322 | nv_wr32(priv, 0x404600, 0xc0000000); | ||
| 323 | nv_wr32(priv, 0x408030, 0xc0000000); | ||
| 324 | nv_wr32(priv, 0x404490, 0xc0000000); | ||
| 325 | nv_wr32(priv, 0x406018, 0xc0000000); | ||
| 326 | nv_wr32(priv, 0x407020, 0x40000000); | ||
| 327 | nv_wr32(priv, 0x405840, 0xc0000000); | ||
| 328 | nv_wr32(priv, 0x405844, 0x00ffffff); | ||
| 329 | nv_mask(priv, 0x419cc0, 0x00000008, 0x00000008); | ||
| 330 | |||
| 331 | for (gpc = 0; gpc < priv->gpc_nr; gpc++) { | ||
| 332 | printk(KERN_ERR "ppc %d %d\n", gpc, priv->ppc_nr[gpc]); | ||
| 333 | for (ppc = 0; ppc < priv->ppc_nr[gpc]; ppc++) | ||
| 334 | nv_wr32(priv, PPC_UNIT(gpc, ppc, 0x038), 0xc0000000); | ||
| 335 | nv_wr32(priv, GPC_UNIT(gpc, 0x0420), 0xc0000000); | ||
| 336 | nv_wr32(priv, GPC_UNIT(gpc, 0x0900), 0xc0000000); | ||
| 337 | nv_wr32(priv, GPC_UNIT(gpc, 0x1028), 0xc0000000); | ||
| 338 | nv_wr32(priv, GPC_UNIT(gpc, 0x0824), 0xc0000000); | ||
| 339 | for (tpc = 0; tpc < priv->tpc_nr[gpc]; tpc++) { | ||
| 340 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x508), 0xffffffff); | ||
| 341 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x50c), 0xffffffff); | ||
| 342 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x224), 0xc0000000); | ||
| 343 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x48c), 0xc0000000); | ||
| 344 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x084), 0xc0000000); | ||
| 345 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x430), 0xc0000000); | ||
| 346 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x644), 0x00dffffe); | ||
| 347 | nv_wr32(priv, TPC_UNIT(gpc, tpc, 0x64c), 0x00000005); | ||
| 348 | } | ||
| 349 | nv_wr32(priv, GPC_UNIT(gpc, 0x2c90), 0xffffffff); | ||
| 350 | nv_wr32(priv, GPC_UNIT(gpc, 0x2c94), 0xffffffff); | ||
| 351 | } | ||
| 352 | |||
| 353 | for (rop = 0; rop < priv->rop_nr; rop++) { | ||
| 354 | nv_wr32(priv, ROP_UNIT(rop, 0x144), 0x40000000); | ||
| 355 | nv_wr32(priv, ROP_UNIT(rop, 0x070), 0x40000000); | ||
| 356 | nv_wr32(priv, ROP_UNIT(rop, 0x204), 0xffffffff); | ||
| 357 | nv_wr32(priv, ROP_UNIT(rop, 0x208), 0xffffffff); | ||
| 358 | } | ||
| 359 | |||
| 360 | nv_wr32(priv, 0x400108, 0xffffffff); | ||
| 361 | nv_wr32(priv, 0x400138, 0xffffffff); | ||
| 362 | nv_wr32(priv, 0x400118, 0xffffffff); | ||
| 363 | nv_wr32(priv, 0x400130, 0xffffffff); | ||
| 364 | nv_wr32(priv, 0x40011c, 0xffffffff); | ||
| 365 | nv_wr32(priv, 0x400134, 0xffffffff); | ||
| 366 | |||
| 367 | nv_wr32(priv, 0x400054, 0x2c350f63); | ||
| 368 | |||
| 369 | gf100_gr_zbc_init(priv); | ||
| 370 | |||
| 371 | return gm204_gr_init_ctxctl(priv); | ||
| 372 | } | ||
| 373 | |||
| 374 | struct nvkm_oclass * | ||
| 375 | gm204_gr_oclass = &(struct gf100_gr_oclass) { | ||
| 376 | .base.handle = NV_ENGINE(GR, 0x24), | ||
| 377 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 378 | .ctor = gf100_gr_ctor, | ||
| 379 | .dtor = gf100_gr_dtor, | ||
| 380 | .init = gm204_gr_init, | ||
| 381 | .fini = _nvkm_gr_fini, | ||
| 382 | }, | ||
| 383 | .cclass = &gm204_grctx_oclass, | ||
| 384 | .sclass = gm204_gr_sclass, | ||
| 385 | .mmio = gm204_gr_pack_mmio, | ||
| 386 | .ppc_nr = 2, | ||
| 387 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm206.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm206.c new file mode 100644 index 000000000000..04b9733d146a --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm206.c | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
| 23 | */ | ||
| 24 | #include "gf100.h" | ||
| 25 | #include "ctxgf100.h" | ||
| 26 | |||
| 27 | struct nvkm_oclass * | ||
| 28 | gm206_gr_oclass = &(struct gf100_gr_oclass) { | ||
| 29 | .base.handle = NV_ENGINE(GR, 0x26), | ||
| 30 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 31 | .ctor = gf100_gr_ctor, | ||
| 32 | .dtor = gf100_gr_dtor, | ||
| 33 | .init = gm204_gr_init, | ||
| 34 | .fini = _nvkm_gr_fini, | ||
| 35 | }, | ||
| 36 | .cclass = &gm206_grctx_oclass, | ||
| 37 | .sclass = gm204_gr_sclass, | ||
| 38 | .mmio = gm204_gr_pack_mmio, | ||
| 39 | .ppc_nr = 2, | ||
| 40 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c index 1fbd93bbb561..f9d0eb5647fa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c | |||
| @@ -52,7 +52,7 @@ acpi_read_fast(void *data, u32 offset, u32 length, struct nvkm_bios *bios) | |||
| 52 | u32 start = offset & ~0x00000fff; | 52 | u32 start = offset & ~0x00000fff; |
| 53 | u32 fetch = limit - start; | 53 | u32 fetch = limit - start; |
| 54 | 54 | ||
| 55 | if (nvbios_extend(bios, limit) > 0) { | 55 | if (nvbios_extend(bios, limit) >= 0) { |
| 56 | int ret = nouveau_acpi_get_bios_chunk(bios->data, start, fetch); | 56 | int ret = nouveau_acpi_get_bios_chunk(bios->data, start, fetch); |
| 57 | if (ret == fetch) | 57 | if (ret == fetch) |
| 58 | return fetch; | 58 | return fetch; |
| @@ -73,7 +73,7 @@ acpi_read_slow(void *data, u32 offset, u32 length, struct nvkm_bios *bios) | |||
| 73 | u32 start = offset & ~0xfff; | 73 | u32 start = offset & ~0xfff; |
| 74 | u32 fetch = 0; | 74 | u32 fetch = 0; |
| 75 | 75 | ||
| 76 | if (nvbios_extend(bios, limit) > 0) { | 76 | if (nvbios_extend(bios, limit) >= 0) { |
| 77 | while (start + fetch < limit) { | 77 | while (start + fetch < limit) { |
| 78 | int ret = nouveau_acpi_get_bios_chunk(bios->data, | 78 | int ret = nouveau_acpi_get_bios_chunk(bios->data, |
| 79 | start + fetch, | 79 | start + fetch, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c index b8853bf16b23..7622b41619a0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.c | |||
| @@ -29,7 +29,7 @@ struct nvkm_hwsq { | |||
| 29 | u32 data; | 29 | u32 data; |
| 30 | struct { | 30 | struct { |
| 31 | u8 data[512]; | 31 | u8 data[512]; |
| 32 | u8 size; | 32 | u16 size; |
| 33 | } c; | 33 | } c; |
| 34 | }; | 34 | }; |
| 35 | 35 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.h b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.h index 3394a5ea8a9f..ebf709c27e3a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.h | |||
| @@ -11,17 +11,34 @@ struct hwsq { | |||
| 11 | struct hwsq_reg { | 11 | struct hwsq_reg { |
| 12 | int sequence; | 12 | int sequence; |
| 13 | bool force; | 13 | bool force; |
| 14 | u32 addr[2]; | 14 | u32 addr; |
| 15 | u32 stride; /* in bytes */ | ||
| 16 | u32 mask; | ||
| 15 | u32 data; | 17 | u32 data; |
| 16 | }; | 18 | }; |
| 17 | 19 | ||
| 18 | static inline struct hwsq_reg | 20 | static inline struct hwsq_reg |
| 21 | hwsq_stride(u32 addr, u32 stride, u32 mask) | ||
| 22 | { | ||
| 23 | return (struct hwsq_reg) { | ||
| 24 | .sequence = 0, | ||
| 25 | .force = 0, | ||
| 26 | .addr = addr, | ||
| 27 | .stride = stride, | ||
| 28 | .mask = mask, | ||
| 29 | .data = 0xdeadbeef, | ||
| 30 | }; | ||
| 31 | } | ||
| 32 | |||
| 33 | static inline struct hwsq_reg | ||
| 19 | hwsq_reg2(u32 addr1, u32 addr2) | 34 | hwsq_reg2(u32 addr1, u32 addr2) |
| 20 | { | 35 | { |
| 21 | return (struct hwsq_reg) { | 36 | return (struct hwsq_reg) { |
| 22 | .sequence = 0, | 37 | .sequence = 0, |
| 23 | .force = 0, | 38 | .force = 0, |
| 24 | .addr = { addr1, addr2 }, | 39 | .addr = addr1, |
| 40 | .stride = addr2 - addr1, | ||
| 41 | .mask = 0x3, | ||
| 25 | .data = 0xdeadbeef, | 42 | .data = 0xdeadbeef, |
| 26 | }; | 43 | }; |
| 27 | } | 44 | } |
| @@ -29,7 +46,14 @@ hwsq_reg2(u32 addr1, u32 addr2) | |||
| 29 | static inline struct hwsq_reg | 46 | static inline struct hwsq_reg |
| 30 | hwsq_reg(u32 addr) | 47 | hwsq_reg(u32 addr) |
| 31 | { | 48 | { |
| 32 | return hwsq_reg2(addr, addr); | 49 | return (struct hwsq_reg) { |
| 50 | .sequence = 0, | ||
| 51 | .force = 0, | ||
| 52 | .addr = addr, | ||
| 53 | .stride = 0, | ||
| 54 | .mask = 0x1, | ||
| 55 | .data = 0xdeadbeef, | ||
| 56 | }; | ||
| 33 | } | 57 | } |
| 34 | 58 | ||
| 35 | static inline int | 59 | static inline int |
| @@ -62,18 +86,24 @@ static inline u32 | |||
| 62 | hwsq_rd32(struct hwsq *ram, struct hwsq_reg *reg) | 86 | hwsq_rd32(struct hwsq *ram, struct hwsq_reg *reg) |
| 63 | { | 87 | { |
| 64 | if (reg->sequence != ram->sequence) | 88 | if (reg->sequence != ram->sequence) |
| 65 | reg->data = nv_rd32(ram->subdev, reg->addr[0]); | 89 | reg->data = nv_rd32(ram->subdev, reg->addr); |
| 66 | return reg->data; | 90 | return reg->data; |
| 67 | } | 91 | } |
| 68 | 92 | ||
| 69 | static inline void | 93 | static inline void |
| 70 | hwsq_wr32(struct hwsq *ram, struct hwsq_reg *reg, u32 data) | 94 | hwsq_wr32(struct hwsq *ram, struct hwsq_reg *reg, u32 data) |
| 71 | { | 95 | { |
| 96 | u32 mask, off = 0; | ||
| 97 | |||
| 72 | reg->sequence = ram->sequence; | 98 | reg->sequence = ram->sequence; |
| 73 | reg->data = data; | 99 | reg->data = data; |
| 74 | if (reg->addr[0] != reg->addr[1]) | 100 | |
| 75 | nvkm_hwsq_wr32(ram->hwsq, reg->addr[1], reg->data); | 101 | for (mask = reg->mask; mask > 0; mask = (mask & ~1) >> 1) { |
| 76 | nvkm_hwsq_wr32(ram->hwsq, reg->addr[0], reg->data); | 102 | if (mask & 1) |
| 103 | nvkm_hwsq_wr32(ram->hwsq, reg->addr+off, reg->data); | ||
| 104 | |||
| 105 | off += reg->stride; | ||
| 106 | } | ||
| 77 | } | 107 | } |
| 78 | 108 | ||
| 79 | static inline void | 109 | static inline void |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c index b24a9cc04b73..39a83d82e0cd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c | |||
| @@ -184,7 +184,7 @@ nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei) | |||
| 184 | nv_debug(clk, "setting performance state %d\n", pstatei); | 184 | nv_debug(clk, "setting performance state %d\n", pstatei); |
| 185 | clk->pstate = pstatei; | 185 | clk->pstate = pstatei; |
| 186 | 186 | ||
| 187 | if (pfb->ram->calc) { | 187 | if (pfb->ram && pfb->ram->calc) { |
| 188 | int khz = pstate->base.domain[nv_clk_src_mem]; | 188 | int khz = pstate->base.domain[nv_clk_src_mem]; |
| 189 | do { | 189 | do { |
| 190 | ret = pfb->ram->calc(pfb, khz); | 190 | ret = pfb->ram->calc(pfb, khz); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h index 14a51a9ff7d0..7c63abf11e22 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.h | |||
| @@ -5,7 +5,7 @@ struct nvkm_pll_vals; | |||
| 5 | 5 | ||
| 6 | struct nv04_devinit_priv { | 6 | struct nv04_devinit_priv { |
| 7 | struct nvkm_devinit base; | 7 | struct nvkm_devinit base; |
| 8 | u8 owner; | 8 | int owner; |
| 9 | }; | 9 | }; |
| 10 | 10 | ||
| 11 | int nv04_devinit_ctor(struct nvkm_object *, struct nvkm_object *, | 11 | int nv04_devinit_ctor(struct nvkm_object *, struct nvkm_object *, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/Kbuild index 904d601e8a50..d6be4c6c5408 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/Kbuild | |||
| @@ -37,7 +37,6 @@ nvkm-y += nvkm/subdev/fb/ramgt215.o | |||
| 37 | nvkm-y += nvkm/subdev/fb/rammcp77.o | 37 | nvkm-y += nvkm/subdev/fb/rammcp77.o |
| 38 | nvkm-y += nvkm/subdev/fb/ramgf100.o | 38 | nvkm-y += nvkm/subdev/fb/ramgf100.o |
| 39 | nvkm-y += nvkm/subdev/fb/ramgk104.o | 39 | nvkm-y += nvkm/subdev/fb/ramgk104.o |
| 40 | nvkm-y += nvkm/subdev/fb/ramgk20a.o | ||
| 41 | nvkm-y += nvkm/subdev/fb/ramgm107.o | 40 | nvkm-y += nvkm/subdev/fb/ramgm107.o |
| 42 | nvkm-y += nvkm/subdev/fb/sddr2.o | 41 | nvkm-y += nvkm/subdev/fb/sddr2.o |
| 43 | nvkm-y += nvkm/subdev/fb/sddr3.o | 42 | nvkm-y += nvkm/subdev/fb/sddr3.o |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c index 16589fa613cd..61fde43dab71 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.c | |||
| @@ -55,9 +55,11 @@ _nvkm_fb_fini(struct nvkm_object *object, bool suspend) | |||
| 55 | struct nvkm_fb *pfb = (void *)object; | 55 | struct nvkm_fb *pfb = (void *)object; |
| 56 | int ret; | 56 | int ret; |
| 57 | 57 | ||
| 58 | ret = nv_ofuncs(pfb->ram)->fini(nv_object(pfb->ram), suspend); | 58 | if (pfb->ram) { |
| 59 | if (ret && suspend) | 59 | ret = nv_ofuncs(pfb->ram)->fini(nv_object(pfb->ram), suspend); |
| 60 | return ret; | 60 | if (ret && suspend) |
| 61 | return ret; | ||
| 62 | } | ||
| 61 | 63 | ||
| 62 | return nvkm_subdev_fini(&pfb->base, suspend); | 64 | return nvkm_subdev_fini(&pfb->base, suspend); |
| 63 | } | 65 | } |
| @@ -72,9 +74,11 @@ _nvkm_fb_init(struct nvkm_object *object) | |||
| 72 | if (ret) | 74 | if (ret) |
| 73 | return ret; | 75 | return ret; |
| 74 | 76 | ||
| 75 | ret = nv_ofuncs(pfb->ram)->init(nv_object(pfb->ram)); | 77 | if (pfb->ram) { |
| 76 | if (ret) | 78 | ret = nv_ofuncs(pfb->ram)->init(nv_object(pfb->ram)); |
| 77 | return ret; | 79 | if (ret) |
| 80 | return ret; | ||
| 81 | } | ||
| 78 | 82 | ||
| 79 | for (i = 0; i < pfb->tile.regions; i++) | 83 | for (i = 0; i < pfb->tile.regions; i++) |
| 80 | pfb->tile.prog(pfb, i, &pfb->tile.region[i]); | 84 | pfb->tile.prog(pfb, i, &pfb->tile.region[i]); |
| @@ -91,9 +95,12 @@ _nvkm_fb_dtor(struct nvkm_object *object) | |||
| 91 | for (i = 0; i < pfb->tile.regions; i++) | 95 | for (i = 0; i < pfb->tile.regions; i++) |
| 92 | pfb->tile.fini(pfb, i, &pfb->tile.region[i]); | 96 | pfb->tile.fini(pfb, i, &pfb->tile.region[i]); |
| 93 | nvkm_mm_fini(&pfb->tags); | 97 | nvkm_mm_fini(&pfb->tags); |
| 94 | nvkm_mm_fini(&pfb->vram); | ||
| 95 | 98 | ||
| 96 | nvkm_object_ref(NULL, (struct nvkm_object **)&pfb->ram); | 99 | if (pfb->ram) { |
| 100 | nvkm_mm_fini(&pfb->vram); | ||
| 101 | nvkm_object_ref(NULL, (struct nvkm_object **)&pfb->ram); | ||
| 102 | } | ||
| 103 | |||
| 97 | nvkm_subdev_destroy(&pfb->base); | 104 | nvkm_subdev_destroy(&pfb->base); |
| 98 | } | 105 | } |
| 99 | 106 | ||
| @@ -127,6 +134,9 @@ nvkm_fb_create_(struct nvkm_object *parent, struct nvkm_object *engine, | |||
| 127 | 134 | ||
| 128 | pfb->memtype_valid = impl->memtype; | 135 | pfb->memtype_valid = impl->memtype; |
| 129 | 136 | ||
| 137 | if (!impl->ram) | ||
| 138 | return 0; | ||
| 139 | |||
| 130 | ret = nvkm_object_ctor(nv_object(pfb), NULL, impl->ram, NULL, 0, &ram); | 140 | ret = nvkm_object_ctor(nv_object(pfb), NULL, impl->ram, NULL, 0, &ram); |
| 131 | if (ret) { | 141 | if (ret) { |
| 132 | nv_fatal(pfb, "error detecting memory configuration!!\n"); | 142 | nv_fatal(pfb, "error detecting memory configuration!!\n"); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c index 6762847c05e8..a5d7857d3898 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.c | |||
| @@ -65,5 +65,4 @@ gk20a_fb_oclass = &(struct nvkm_fb_impl) { | |||
| 65 | .fini = _nvkm_fb_fini, | 65 | .fini = _nvkm_fb_fini, |
| 66 | }, | 66 | }, |
| 67 | .memtype = gf100_fb_memtype_valid, | 67 | .memtype = gf100_fb_memtype_valid, |
| 68 | .ram = &gk20a_ram_oclass, | ||
| 69 | }.base; | 68 | }.base; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h index d82da02daa1f..485c4b64819a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/priv.h | |||
| @@ -32,7 +32,6 @@ extern struct nvkm_oclass gt215_ram_oclass; | |||
| 32 | extern struct nvkm_oclass mcp77_ram_oclass; | 32 | extern struct nvkm_oclass mcp77_ram_oclass; |
| 33 | extern struct nvkm_oclass gf100_ram_oclass; | 33 | extern struct nvkm_oclass gf100_ram_oclass; |
| 34 | extern struct nvkm_oclass gk104_ram_oclass; | 34 | extern struct nvkm_oclass gk104_ram_oclass; |
| 35 | extern struct nvkm_oclass gk20a_ram_oclass; | ||
| 36 | extern struct nvkm_oclass gm107_ram_oclass; | 35 | extern struct nvkm_oclass gm107_ram_oclass; |
| 37 | 36 | ||
| 38 | int nvkm_sddr2_calc(struct nvkm_ram *ram); | 37 | int nvkm_sddr2_calc(struct nvkm_ram *ram); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk20a.c deleted file mode 100644 index 5f30db140b47..000000000000 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk20a.c +++ /dev/null | |||
| @@ -1,149 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 20 | * DEALINGS IN THE SOFTWARE. | ||
| 21 | */ | ||
| 22 | #include "priv.h" | ||
| 23 | |||
| 24 | #include <core/device.h> | ||
| 25 | |||
| 26 | struct gk20a_mem { | ||
| 27 | struct nvkm_mem base; | ||
| 28 | void *cpuaddr; | ||
| 29 | dma_addr_t handle; | ||
| 30 | }; | ||
| 31 | #define to_gk20a_mem(m) container_of(m, struct gk20a_mem, base) | ||
| 32 | |||
| 33 | static void | ||
| 34 | gk20a_ram_put(struct nvkm_fb *pfb, struct nvkm_mem **pmem) | ||
| 35 | { | ||
| 36 | struct device *dev = nv_device_base(nv_device(pfb)); | ||
| 37 | struct gk20a_mem *mem = to_gk20a_mem(*pmem); | ||
| 38 | |||
| 39 | *pmem = NULL; | ||
| 40 | if (unlikely(mem == NULL)) | ||
| 41 | return; | ||
| 42 | |||
| 43 | if (likely(mem->cpuaddr)) | ||
| 44 | dma_free_coherent(dev, mem->base.size << PAGE_SHIFT, | ||
| 45 | mem->cpuaddr, mem->handle); | ||
| 46 | |||
| 47 | kfree(mem->base.pages); | ||
| 48 | kfree(mem); | ||
| 49 | } | ||
| 50 | |||
| 51 | static int | ||
| 52 | gk20a_ram_get(struct nvkm_fb *pfb, u64 size, u32 align, u32 ncmin, | ||
| 53 | u32 memtype, struct nvkm_mem **pmem) | ||
| 54 | { | ||
| 55 | struct device *dev = nv_device_base(nv_device(pfb)); | ||
| 56 | struct gk20a_mem *mem; | ||
| 57 | u32 type = memtype & 0xff; | ||
| 58 | u32 npages, order; | ||
| 59 | int i; | ||
| 60 | |||
| 61 | nv_debug(pfb, "%s: size: %llx align: %x, ncmin: %x\n", __func__, size, | ||
| 62 | align, ncmin); | ||
| 63 | |||
| 64 | npages = size >> PAGE_SHIFT; | ||
| 65 | if (npages == 0) | ||
| 66 | npages = 1; | ||
| 67 | |||
| 68 | if (align == 0) | ||
| 69 | align = PAGE_SIZE; | ||
| 70 | align >>= PAGE_SHIFT; | ||
| 71 | |||
| 72 | /* round alignment to the next power of 2, if needed */ | ||
| 73 | order = fls(align); | ||
| 74 | if ((align & (align - 1)) == 0) | ||
| 75 | order--; | ||
| 76 | align = BIT(order); | ||
| 77 | |||
| 78 | /* ensure returned address is correctly aligned */ | ||
| 79 | npages = max(align, npages); | ||
| 80 | |||
| 81 | mem = kzalloc(sizeof(*mem), GFP_KERNEL); | ||
| 82 | if (!mem) | ||
| 83 | return -ENOMEM; | ||
| 84 | |||
| 85 | mem->base.size = npages; | ||
| 86 | mem->base.memtype = type; | ||
| 87 | |||
| 88 | mem->base.pages = kzalloc(sizeof(dma_addr_t) * npages, GFP_KERNEL); | ||
| 89 | if (!mem->base.pages) { | ||
| 90 | kfree(mem); | ||
| 91 | return -ENOMEM; | ||
| 92 | } | ||
| 93 | |||
| 94 | *pmem = &mem->base; | ||
| 95 | |||
| 96 | mem->cpuaddr = dma_alloc_coherent(dev, npages << PAGE_SHIFT, | ||
| 97 | &mem->handle, GFP_KERNEL); | ||
| 98 | if (!mem->cpuaddr) { | ||
| 99 | nv_error(pfb, "%s: cannot allocate memory!\n", __func__); | ||
| 100 | gk20a_ram_put(pfb, pmem); | ||
| 101 | return -ENOMEM; | ||
| 102 | } | ||
| 103 | |||
| 104 | align <<= PAGE_SHIFT; | ||
| 105 | |||
| 106 | /* alignment check */ | ||
| 107 | if (unlikely(mem->handle & (align - 1))) | ||
| 108 | nv_warn(pfb, "memory not aligned as requested: %pad (0x%x)\n", | ||
| 109 | &mem->handle, align); | ||
| 110 | |||
| 111 | nv_debug(pfb, "alloc size: 0x%x, align: 0x%x, paddr: %pad, vaddr: %p\n", | ||
| 112 | npages << PAGE_SHIFT, align, &mem->handle, mem->cpuaddr); | ||
| 113 | |||
| 114 | for (i = 0; i < npages; i++) | ||
| 115 | mem->base.pages[i] = mem->handle + (PAGE_SIZE * i); | ||
| 116 | |||
| 117 | mem->base.offset = (u64)mem->base.pages[0]; | ||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | |||
| 121 | static int | ||
| 122 | gk20a_ram_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 123 | struct nvkm_oclass *oclass, void *data, u32 datasize, | ||
| 124 | struct nvkm_object **pobject) | ||
| 125 | { | ||
| 126 | struct nvkm_ram *ram; | ||
| 127 | int ret; | ||
| 128 | |||
| 129 | ret = nvkm_ram_create(parent, engine, oclass, &ram); | ||
| 130 | *pobject = nv_object(ram); | ||
| 131 | if (ret) | ||
| 132 | return ret; | ||
| 133 | ram->type = NV_MEM_TYPE_STOLEN; | ||
| 134 | ram->size = get_num_physpages() << PAGE_SHIFT; | ||
| 135 | |||
| 136 | ram->get = gk20a_ram_get; | ||
| 137 | ram->put = gk20a_ram_put; | ||
| 138 | return 0; | ||
| 139 | } | ||
| 140 | |||
| 141 | struct nvkm_oclass | ||
| 142 | gk20a_ram_oclass = { | ||
| 143 | .ofuncs = &(struct nvkm_ofuncs) { | ||
| 144 | .ctor = gk20a_ram_ctor, | ||
| 145 | .dtor = _nvkm_ram_dtor, | ||
| 146 | .init = _nvkm_ram_init, | ||
| 147 | .fini = _nvkm_ram_fini, | ||
| 148 | }, | ||
| 149 | }; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c index ba19158a5912..0b256aa4960f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.c | |||
| @@ -45,10 +45,8 @@ gm107_fuse_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | |||
| 45 | 45 | ||
| 46 | ret = nvkm_fuse_create(parent, engine, oclass, &priv); | 46 | ret = nvkm_fuse_create(parent, engine, oclass, &priv); |
| 47 | *pobject = nv_object(priv); | 47 | *pobject = nv_object(priv); |
| 48 | if (ret) | ||
| 49 | return ret; | ||
| 50 | 48 | ||
| 51 | return 0; | 49 | return ret; |
| 52 | } | 50 | } |
| 53 | 51 | ||
| 54 | struct nvkm_oclass | 52 | struct nvkm_oclass |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/Kbuild index e6f35abe7879..13bb7fc0a569 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/Kbuild | |||
| @@ -2,3 +2,4 @@ nvkm-y += nvkm/subdev/instmem/base.o | |||
| 2 | nvkm-y += nvkm/subdev/instmem/nv04.o | 2 | nvkm-y += nvkm/subdev/instmem/nv04.o |
| 3 | nvkm-y += nvkm/subdev/instmem/nv40.o | 3 | nvkm-y += nvkm/subdev/instmem/nv40.o |
| 4 | nvkm-y += nvkm/subdev/instmem/nv50.o | 4 | nvkm-y += nvkm/subdev/instmem/nv50.o |
| 5 | nvkm-y += nvkm/subdev/instmem/gk20a.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c new file mode 100644 index 000000000000..dd0994d9ebfc --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c | |||
| @@ -0,0 +1,440 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 20 | * DEALINGS IN THE SOFTWARE. | ||
| 21 | */ | ||
| 22 | |||
| 23 | /* | ||
| 24 | * GK20A does not have dedicated video memory, and to accurately represent this | ||
| 25 | * fact Nouveau will not create a RAM device for it. Therefore its instmem | ||
| 26 | * implementation must be done directly on top of system memory, while providing | ||
| 27 | * coherent read and write operations. | ||
| 28 | * | ||
| 29 | * Instmem can be allocated through two means: | ||
| 30 | * 1) If an IOMMU mapping has been probed, the IOMMU API is used to make memory | ||
| 31 | * pages contiguous to the GPU. This is the preferred way. | ||
| 32 | * 2) If no IOMMU mapping is probed, the DMA API is used to allocate physically | ||
| 33 | * contiguous memory. | ||
| 34 | * | ||
| 35 | * In both cases CPU read and writes are performed using PRAMIN (i.e. using the | ||
| 36 | * GPU path) to ensure these operations are coherent for the GPU. This allows us | ||
| 37 | * to use more "relaxed" allocation parameters when using the DMA API, since we | ||
| 38 | * never need a kernel mapping. | ||
| 39 | */ | ||
| 40 | |||
| 41 | #include <subdev/fb.h> | ||
| 42 | #include <core/mm.h> | ||
| 43 | #include <core/device.h> | ||
| 44 | |||
| 45 | #ifdef __KERNEL__ | ||
| 46 | #include <linux/dma-attrs.h> | ||
| 47 | #include <linux/iommu.h> | ||
| 48 | #include <nouveau_platform.h> | ||
| 49 | #endif | ||
| 50 | |||
| 51 | #include "priv.h" | ||
| 52 | |||
| 53 | struct gk20a_instobj_priv { | ||
| 54 | struct nvkm_instobj base; | ||
| 55 | /* Must be second member here - see nouveau_gpuobj_map_vm() */ | ||
| 56 | struct nvkm_mem *mem; | ||
| 57 | /* Pointed by mem */ | ||
| 58 | struct nvkm_mem _mem; | ||
| 59 | }; | ||
| 60 | |||
| 61 | /* | ||
| 62 | * Used for objects allocated using the DMA API | ||
| 63 | */ | ||
| 64 | struct gk20a_instobj_dma { | ||
| 65 | struct gk20a_instobj_priv base; | ||
| 66 | |||
| 67 | void *cpuaddr; | ||
| 68 | dma_addr_t handle; | ||
| 69 | struct nvkm_mm_node r; | ||
| 70 | }; | ||
| 71 | |||
| 72 | /* | ||
| 73 | * Used for objects flattened using the IOMMU API | ||
| 74 | */ | ||
| 75 | struct gk20a_instobj_iommu { | ||
| 76 | struct gk20a_instobj_priv base; | ||
| 77 | |||
| 78 | /* array of base.mem->size pages */ | ||
| 79 | struct page *pages[]; | ||
| 80 | }; | ||
| 81 | |||
| 82 | struct gk20a_instmem_priv { | ||
| 83 | struct nvkm_instmem base; | ||
| 84 | spinlock_t lock; | ||
| 85 | u64 addr; | ||
| 86 | |||
| 87 | /* Only used if IOMMU if present */ | ||
| 88 | struct mutex *mm_mutex; | ||
| 89 | struct nvkm_mm *mm; | ||
| 90 | struct iommu_domain *domain; | ||
| 91 | unsigned long iommu_pgshift; | ||
| 92 | |||
| 93 | /* Only used by DMA API */ | ||
| 94 | struct dma_attrs attrs; | ||
| 95 | }; | ||
| 96 | |||
| 97 | /* | ||
| 98 | * Use PRAMIN to read/write data and avoid coherency issues. | ||
| 99 | * PRAMIN uses the GPU path and ensures data will always be coherent. | ||
| 100 | * | ||
| 101 | * A dynamic mapping based solution would be desirable in the future, but | ||
| 102 | * the issue remains of how to maintain coherency efficiently. On ARM it is | ||
| 103 | * not easy (if possible at all?) to create uncached temporary mappings. | ||
| 104 | */ | ||
| 105 | |||
| 106 | static u32 | ||
| 107 | gk20a_instobj_rd32(struct nvkm_object *object, u64 offset) | ||
| 108 | { | ||
| 109 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(object); | ||
| 110 | struct gk20a_instobj_priv *node = (void *)object; | ||
| 111 | unsigned long flags; | ||
| 112 | u64 base = (node->mem->offset + offset) & 0xffffff00000ULL; | ||
| 113 | u64 addr = (node->mem->offset + offset) & 0x000000fffffULL; | ||
| 114 | u32 data; | ||
| 115 | |||
| 116 | spin_lock_irqsave(&priv->lock, flags); | ||
| 117 | if (unlikely(priv->addr != base)) { | ||
| 118 | nv_wr32(priv, 0x001700, base >> 16); | ||
| 119 | priv->addr = base; | ||
| 120 | } | ||
| 121 | data = nv_rd32(priv, 0x700000 + addr); | ||
| 122 | spin_unlock_irqrestore(&priv->lock, flags); | ||
| 123 | return data; | ||
| 124 | } | ||
| 125 | |||
| 126 | static void | ||
| 127 | gk20a_instobj_wr32(struct nvkm_object *object, u64 offset, u32 data) | ||
| 128 | { | ||
| 129 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(object); | ||
| 130 | struct gk20a_instobj_priv *node = (void *)object; | ||
| 131 | unsigned long flags; | ||
| 132 | u64 base = (node->mem->offset + offset) & 0xffffff00000ULL; | ||
| 133 | u64 addr = (node->mem->offset + offset) & 0x000000fffffULL; | ||
| 134 | |||
| 135 | spin_lock_irqsave(&priv->lock, flags); | ||
| 136 | if (unlikely(priv->addr != base)) { | ||
| 137 | nv_wr32(priv, 0x001700, base >> 16); | ||
| 138 | priv->addr = base; | ||
| 139 | } | ||
| 140 | nv_wr32(priv, 0x700000 + addr, data); | ||
| 141 | spin_unlock_irqrestore(&priv->lock, flags); | ||
| 142 | } | ||
| 143 | |||
| 144 | static void | ||
| 145 | gk20a_instobj_dtor_dma(struct gk20a_instobj_priv *_node) | ||
| 146 | { | ||
| 147 | struct gk20a_instobj_dma *node = (void *)_node; | ||
| 148 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(node); | ||
| 149 | struct device *dev = nv_device_base(nv_device(priv)); | ||
| 150 | |||
| 151 | if (unlikely(!node->cpuaddr)) | ||
| 152 | return; | ||
| 153 | |||
| 154 | dma_free_attrs(dev, _node->mem->size << PAGE_SHIFT, node->cpuaddr, | ||
| 155 | node->handle, &priv->attrs); | ||
| 156 | } | ||
| 157 | |||
| 158 | static void | ||
| 159 | gk20a_instobj_dtor_iommu(struct gk20a_instobj_priv *_node) | ||
| 160 | { | ||
| 161 | struct gk20a_instobj_iommu *node = (void *)_node; | ||
| 162 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(node); | ||
| 163 | struct nvkm_mm_node *r; | ||
| 164 | int i; | ||
| 165 | |||
| 166 | if (unlikely(list_empty(&_node->mem->regions))) | ||
| 167 | return; | ||
| 168 | |||
| 169 | r = list_first_entry(&_node->mem->regions, struct nvkm_mm_node, | ||
| 170 | rl_entry); | ||
| 171 | |||
| 172 | /* clear bit 34 to unmap pages */ | ||
| 173 | r->offset &= ~BIT(34 - priv->iommu_pgshift); | ||
| 174 | |||
| 175 | /* Unmap pages from GPU address space and free them */ | ||
| 176 | for (i = 0; i < _node->mem->size; i++) { | ||
| 177 | iommu_unmap(priv->domain, | ||
| 178 | (r->offset + i) << priv->iommu_pgshift, PAGE_SIZE); | ||
| 179 | __free_page(node->pages[i]); | ||
| 180 | } | ||
| 181 | |||
| 182 | /* Release area from GPU address space */ | ||
| 183 | mutex_lock(priv->mm_mutex); | ||
| 184 | nvkm_mm_free(priv->mm, &r); | ||
| 185 | mutex_unlock(priv->mm_mutex); | ||
| 186 | } | ||
| 187 | |||
| 188 | static void | ||
| 189 | gk20a_instobj_dtor(struct nvkm_object *object) | ||
| 190 | { | ||
| 191 | struct gk20a_instobj_priv *node = (void *)object; | ||
| 192 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(node); | ||
| 193 | |||
| 194 | if (priv->domain) | ||
| 195 | gk20a_instobj_dtor_iommu(node); | ||
| 196 | else | ||
| 197 | gk20a_instobj_dtor_dma(node); | ||
| 198 | |||
| 199 | nvkm_instobj_destroy(&node->base); | ||
| 200 | } | ||
| 201 | |||
| 202 | static int | ||
| 203 | gk20a_instobj_ctor_dma(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 204 | struct nvkm_oclass *oclass, u32 npages, u32 align, | ||
| 205 | struct gk20a_instobj_priv **_node) | ||
| 206 | { | ||
| 207 | struct gk20a_instobj_dma *node; | ||
| 208 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(parent); | ||
| 209 | struct device *dev = nv_device_base(nv_device(parent)); | ||
| 210 | int ret; | ||
| 211 | |||
| 212 | ret = nvkm_instobj_create_(parent, engine, oclass, sizeof(*node), | ||
| 213 | (void **)&node); | ||
| 214 | *_node = &node->base; | ||
| 215 | if (ret) | ||
| 216 | return ret; | ||
| 217 | |||
| 218 | node->cpuaddr = dma_alloc_attrs(dev, npages << PAGE_SHIFT, | ||
| 219 | &node->handle, GFP_KERNEL, | ||
| 220 | &priv->attrs); | ||
| 221 | if (!node->cpuaddr) { | ||
| 222 | nv_error(priv, "cannot allocate DMA memory\n"); | ||
| 223 | return -ENOMEM; | ||
| 224 | } | ||
| 225 | |||
| 226 | /* alignment check */ | ||
| 227 | if (unlikely(node->handle & (align - 1))) | ||
| 228 | nv_warn(priv, "memory not aligned as requested: %pad (0x%x)\n", | ||
| 229 | &node->handle, align); | ||
| 230 | |||
| 231 | /* present memory for being mapped using small pages */ | ||
| 232 | node->r.type = 12; | ||
| 233 | node->r.offset = node->handle >> 12; | ||
| 234 | node->r.length = (npages << PAGE_SHIFT) >> 12; | ||
| 235 | |||
| 236 | node->base._mem.offset = node->handle; | ||
| 237 | |||
| 238 | INIT_LIST_HEAD(&node->base._mem.regions); | ||
| 239 | list_add_tail(&node->r.rl_entry, &node->base._mem.regions); | ||
| 240 | |||
| 241 | return 0; | ||
| 242 | } | ||
| 243 | |||
| 244 | static int | ||
| 245 | gk20a_instobj_ctor_iommu(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 246 | struct nvkm_oclass *oclass, u32 npages, u32 align, | ||
| 247 | struct gk20a_instobj_priv **_node) | ||
| 248 | { | ||
| 249 | struct gk20a_instobj_iommu *node; | ||
| 250 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(parent); | ||
| 251 | struct nvkm_mm_node *r; | ||
| 252 | int ret; | ||
| 253 | int i; | ||
| 254 | |||
| 255 | ret = nvkm_instobj_create_(parent, engine, oclass, | ||
| 256 | sizeof(*node) + sizeof(node->pages[0]) * npages, | ||
| 257 | (void **)&node); | ||
| 258 | *_node = &node->base; | ||
| 259 | if (ret) | ||
| 260 | return ret; | ||
| 261 | |||
| 262 | /* Allocate backing memory */ | ||
| 263 | for (i = 0; i < npages; i++) { | ||
| 264 | struct page *p = alloc_page(GFP_KERNEL); | ||
| 265 | |||
| 266 | if (p == NULL) { | ||
| 267 | ret = -ENOMEM; | ||
| 268 | goto free_pages; | ||
| 269 | } | ||
| 270 | node->pages[i] = p; | ||
| 271 | } | ||
| 272 | |||
| 273 | mutex_lock(priv->mm_mutex); | ||
| 274 | /* Reserve area from GPU address space */ | ||
| 275 | ret = nvkm_mm_head(priv->mm, 0, 1, npages, npages, | ||
| 276 | align >> priv->iommu_pgshift, &r); | ||
| 277 | mutex_unlock(priv->mm_mutex); | ||
| 278 | if (ret) { | ||
| 279 | nv_error(priv, "virtual space is full!\n"); | ||
| 280 | goto free_pages; | ||
| 281 | } | ||
| 282 | |||
| 283 | /* Map into GPU address space */ | ||
| 284 | for (i = 0; i < npages; i++) { | ||
| 285 | struct page *p = node->pages[i]; | ||
| 286 | u32 offset = (r->offset + i) << priv->iommu_pgshift; | ||
| 287 | |||
| 288 | ret = iommu_map(priv->domain, offset, page_to_phys(p), | ||
| 289 | PAGE_SIZE, IOMMU_READ | IOMMU_WRITE); | ||
| 290 | if (ret < 0) { | ||
| 291 | nv_error(priv, "IOMMU mapping failure: %d\n", ret); | ||
| 292 | |||
| 293 | while (i-- > 0) { | ||
| 294 | offset -= PAGE_SIZE; | ||
| 295 | iommu_unmap(priv->domain, offset, PAGE_SIZE); | ||
| 296 | } | ||
| 297 | goto release_area; | ||
| 298 | } | ||
| 299 | } | ||
| 300 | |||
| 301 | /* Bit 34 tells that an address is to be resolved through the IOMMU */ | ||
| 302 | r->offset |= BIT(34 - priv->iommu_pgshift); | ||
| 303 | |||
| 304 | node->base._mem.offset = ((u64)r->offset) << priv->iommu_pgshift; | ||
| 305 | |||
| 306 | INIT_LIST_HEAD(&node->base._mem.regions); | ||
| 307 | list_add_tail(&r->rl_entry, &node->base._mem.regions); | ||
| 308 | |||
| 309 | return 0; | ||
| 310 | |||
| 311 | release_area: | ||
| 312 | mutex_lock(priv->mm_mutex); | ||
| 313 | nvkm_mm_free(priv->mm, &r); | ||
| 314 | mutex_unlock(priv->mm_mutex); | ||
| 315 | |||
| 316 | free_pages: | ||
| 317 | for (i = 0; i < npages && node->pages[i] != NULL; i++) | ||
| 318 | __free_page(node->pages[i]); | ||
| 319 | |||
| 320 | return ret; | ||
| 321 | } | ||
| 322 | |||
| 323 | static int | ||
| 324 | gk20a_instobj_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 325 | struct nvkm_oclass *oclass, void *data, u32 _size, | ||
| 326 | struct nvkm_object **pobject) | ||
| 327 | { | ||
| 328 | struct nvkm_instobj_args *args = data; | ||
| 329 | struct gk20a_instmem_priv *priv = (void *)nvkm_instmem(parent); | ||
| 330 | struct gk20a_instobj_priv *node; | ||
| 331 | u32 size, align; | ||
| 332 | int ret; | ||
| 333 | |||
| 334 | nv_debug(parent, "%s (%s): size: %x align: %x\n", __func__, | ||
| 335 | priv->domain ? "IOMMU" : "DMA", args->size, args->align); | ||
| 336 | |||
| 337 | /* Round size and align to page bounds */ | ||
| 338 | size = max(roundup(args->size, PAGE_SIZE), PAGE_SIZE); | ||
| 339 | align = max(roundup(args->align, PAGE_SIZE), PAGE_SIZE); | ||
| 340 | |||
| 341 | if (priv->domain) | ||
| 342 | ret = gk20a_instobj_ctor_iommu(parent, engine, oclass, | ||
| 343 | size >> PAGE_SHIFT, align, &node); | ||
| 344 | else | ||
| 345 | ret = gk20a_instobj_ctor_dma(parent, engine, oclass, | ||
| 346 | size >> PAGE_SHIFT, align, &node); | ||
| 347 | *pobject = nv_object(node); | ||
| 348 | if (ret) | ||
| 349 | return ret; | ||
| 350 | |||
| 351 | node->mem = &node->_mem; | ||
| 352 | |||
| 353 | /* present memory for being mapped using small pages */ | ||
| 354 | node->mem->size = size >> 12; | ||
| 355 | node->mem->memtype = 0; | ||
| 356 | node->mem->page_shift = 12; | ||
| 357 | |||
| 358 | node->base.addr = node->mem->offset; | ||
| 359 | node->base.size = size; | ||
| 360 | |||
| 361 | nv_debug(parent, "alloc size: 0x%x, align: 0x%x, gaddr: 0x%llx\n", | ||
| 362 | size, align, node->mem->offset); | ||
| 363 | |||
| 364 | return 0; | ||
| 365 | } | ||
| 366 | |||
| 367 | static struct nvkm_instobj_impl | ||
| 368 | gk20a_instobj_oclass = { | ||
| 369 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 370 | .ctor = gk20a_instobj_ctor, | ||
| 371 | .dtor = gk20a_instobj_dtor, | ||
| 372 | .init = _nvkm_instobj_init, | ||
| 373 | .fini = _nvkm_instobj_fini, | ||
| 374 | .rd32 = gk20a_instobj_rd32, | ||
| 375 | .wr32 = gk20a_instobj_wr32, | ||
| 376 | }, | ||
| 377 | }; | ||
| 378 | |||
| 379 | |||
| 380 | |||
| 381 | static int | ||
| 382 | gk20a_instmem_fini(struct nvkm_object *object, bool suspend) | ||
| 383 | { | ||
| 384 | struct gk20a_instmem_priv *priv = (void *)object; | ||
| 385 | priv->addr = ~0ULL; | ||
| 386 | return nvkm_instmem_fini(&priv->base, suspend); | ||
| 387 | } | ||
| 388 | |||
| 389 | static int | ||
| 390 | gk20a_instmem_ctor(struct nvkm_object *parent, struct nvkm_object *engine, | ||
| 391 | struct nvkm_oclass *oclass, void *data, u32 size, | ||
| 392 | struct nvkm_object **pobject) | ||
| 393 | { | ||
| 394 | struct gk20a_instmem_priv *priv; | ||
| 395 | struct nouveau_platform_device *plat; | ||
| 396 | int ret; | ||
| 397 | |||
| 398 | ret = nvkm_instmem_create(parent, engine, oclass, &priv); | ||
| 399 | *pobject = nv_object(priv); | ||
| 400 | if (ret) | ||
| 401 | return ret; | ||
| 402 | |||
| 403 | spin_lock_init(&priv->lock); | ||
| 404 | |||
| 405 | plat = nv_device_to_platform(nv_device(parent)); | ||
| 406 | if (plat->gpu->iommu.domain) { | ||
| 407 | priv->domain = plat->gpu->iommu.domain; | ||
| 408 | priv->mm = plat->gpu->iommu.mm; | ||
| 409 | priv->iommu_pgshift = plat->gpu->iommu.pgshift; | ||
| 410 | priv->mm_mutex = &plat->gpu->iommu.mutex; | ||
| 411 | |||
| 412 | nv_info(priv, "using IOMMU\n"); | ||
| 413 | } else { | ||
| 414 | init_dma_attrs(&priv->attrs); | ||
| 415 | /* | ||
| 416 | * We will access instmem through PRAMIN and thus do not need a | ||
| 417 | * consistent CPU pointer or kernel mapping | ||
| 418 | */ | ||
| 419 | dma_set_attr(DMA_ATTR_NON_CONSISTENT, &priv->attrs); | ||
| 420 | dma_set_attr(DMA_ATTR_WEAK_ORDERING, &priv->attrs); | ||
| 421 | dma_set_attr(DMA_ATTR_WRITE_COMBINE, &priv->attrs); | ||
| 422 | dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &priv->attrs); | ||
| 423 | |||
| 424 | nv_info(priv, "using DMA API\n"); | ||
| 425 | } | ||
| 426 | |||
| 427 | return 0; | ||
| 428 | } | ||
| 429 | |||
| 430 | struct nvkm_oclass * | ||
| 431 | gk20a_instmem_oclass = &(struct nvkm_instmem_impl) { | ||
| 432 | .base.handle = NV_SUBDEV(INSTMEM, 0xea), | ||
| 433 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 434 | .ctor = gk20a_instmem_ctor, | ||
| 435 | .dtor = _nvkm_instmem_dtor, | ||
| 436 | .init = _nvkm_instmem_init, | ||
| 437 | .fini = gk20a_instmem_fini, | ||
| 438 | }, | ||
| 439 | .instobj = &gk20a_instobj_oclass.base, | ||
| 440 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c index 8e7cc6200d60..7fb5ea0314cb 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c | |||
| @@ -136,7 +136,8 @@ gf100_ltc_dtor(struct nvkm_object *object) | |||
| 136 | struct nvkm_ltc_priv *priv = (void *)object; | 136 | struct nvkm_ltc_priv *priv = (void *)object; |
| 137 | 137 | ||
| 138 | nvkm_mm_fini(&priv->tags); | 138 | nvkm_mm_fini(&priv->tags); |
| 139 | nvkm_mm_free(&pfb->vram, &priv->tag_ram); | 139 | if (pfb->ram) |
| 140 | nvkm_mm_free(&pfb->vram, &priv->tag_ram); | ||
| 140 | 141 | ||
| 141 | nvkm_ltc_destroy(priv); | 142 | nvkm_ltc_destroy(priv); |
| 142 | } | 143 | } |
| @@ -149,6 +150,12 @@ gf100_ltc_init_tag_ram(struct nvkm_fb *pfb, struct nvkm_ltc_priv *priv) | |||
| 149 | u32 tag_size, tag_margin, tag_align; | 150 | u32 tag_size, tag_margin, tag_align; |
| 150 | int ret; | 151 | int ret; |
| 151 | 152 | ||
| 153 | /* No VRAM, no tags for now. */ | ||
| 154 | if (!pfb->ram) { | ||
| 155 | priv->num_tags = 0; | ||
| 156 | goto mm_init; | ||
| 157 | } | ||
| 158 | |||
| 152 | /* tags for 1/4 of VRAM should be enough (8192/4 per GiB of VRAM) */ | 159 | /* tags for 1/4 of VRAM should be enough (8192/4 per GiB of VRAM) */ |
| 153 | priv->num_tags = (pfb->ram->size >> 17) / 4; | 160 | priv->num_tags = (pfb->ram->size >> 17) / 4; |
| 154 | if (priv->num_tags > (1 << 17)) | 161 | if (priv->num_tags > (1 << 17)) |
| @@ -183,6 +190,7 @@ gf100_ltc_init_tag_ram(struct nvkm_fb *pfb, struct nvkm_ltc_priv *priv) | |||
| 183 | priv->tag_base = tag_base; | 190 | priv->tag_base = tag_base; |
| 184 | } | 191 | } |
| 185 | 192 | ||
| 193 | mm_init: | ||
| 186 | ret = nvkm_mm_init(&priv->tags, 0, priv->num_tags, 1); | 194 | ret = nvkm_mm_init(&priv->tags, 0, priv->num_tags, 1); |
| 187 | return ret; | 195 | return ret; |
| 188 | } | 196 | } |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c index 42cac13ca629..f20e4ca87e17 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.c | |||
| @@ -182,7 +182,7 @@ mxm_show_unmatched(struct nvkm_mxm *mxm, u8 *data, void *info) | |||
| 182 | { | 182 | { |
| 183 | u64 desc = *(u64 *)data; | 183 | u64 desc = *(u64 *)data; |
| 184 | if ((desc & 0xf0) != 0xf0) | 184 | if ((desc & 0xf0) != 0xf0) |
| 185 | nv_info(mxm, "unmatched output device 0x%016llx\n", desc); | 185 | nv_info(mxm, "unmatched output device 0x%016llx\n", desc); |
| 186 | return true; | 186 | return true; |
| 187 | } | 187 | } |
| 188 | 188 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/Kbuild index 9a150d520225..7081d6a9b95f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/Kbuild | |||
| @@ -4,5 +4,6 @@ nvkm-y += nvkm/subdev/pmu/gt215.o | |||
| 4 | nvkm-y += nvkm/subdev/pmu/gf100.o | 4 | nvkm-y += nvkm/subdev/pmu/gf100.o |
| 5 | nvkm-y += nvkm/subdev/pmu/gf110.o | 5 | nvkm-y += nvkm/subdev/pmu/gf110.o |
| 6 | nvkm-y += nvkm/subdev/pmu/gk104.o | 6 | nvkm-y += nvkm/subdev/pmu/gk104.o |
| 7 | nvkm-y += nvkm/subdev/pmu/gk110.o | ||
| 7 | nvkm-y += nvkm/subdev/pmu/gk208.o | 8 | nvkm-y += nvkm/subdev/pmu/gk208.o |
| 8 | nvkm-y += nvkm/subdev/pmu/gk20a.o | 9 | nvkm-y += nvkm/subdev/pmu/gk20a.o |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c new file mode 100644 index 000000000000..89bb94b0af8b --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.c | |||
| @@ -0,0 +1,95 @@ | |||
| 1 | /* | ||
| 2 | * Copyright 2015 Red Hat Inc. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
| 20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
| 21 | * | ||
| 22 | * Authors: Ben Skeggs | ||
| 23 | */ | ||
| 24 | #define gf110_pmu_code gk110_pmu_code | ||
| 25 | #define gf110_pmu_data gk110_pmu_data | ||
| 26 | #include "priv.h" | ||
| 27 | #include "fuc/gf110.fuc4.h" | ||
| 28 | |||
| 29 | #include <subdev/timer.h> | ||
| 30 | |||
| 31 | void | ||
| 32 | gk110_pmu_pgob(struct nvkm_pmu *pmu, bool enable) | ||
| 33 | { | ||
| 34 | static const struct { | ||
| 35 | u32 addr; | ||
| 36 | u32 data; | ||
| 37 | } magic[] = { | ||
| 38 | { 0x020520, 0xfffffffc }, | ||
| 39 | { 0x020524, 0xfffffffe }, | ||
| 40 | { 0x020524, 0xfffffffc }, | ||
| 41 | { 0x020524, 0xfffffff8 }, | ||
| 42 | { 0x020524, 0xffffffe0 }, | ||
| 43 | { 0x020530, 0xfffffffe }, | ||
| 44 | { 0x02052c, 0xfffffffa }, | ||
| 45 | { 0x02052c, 0xfffffff0 }, | ||
| 46 | { 0x02052c, 0xffffffc0 }, | ||
| 47 | { 0x02052c, 0xffffff00 }, | ||
| 48 | { 0x02052c, 0xfffffc00 }, | ||
| 49 | { 0x02052c, 0xfffcfc00 }, | ||
| 50 | { 0x02052c, 0xfff0fc00 }, | ||
| 51 | { 0x02052c, 0xff80fc00 }, | ||
| 52 | { 0x020528, 0xfffffffe }, | ||
| 53 | { 0x020528, 0xfffffffc }, | ||
| 54 | }; | ||
| 55 | int i; | ||
| 56 | |||
| 57 | nv_mask(pmu, 0x000200, 0x00001000, 0x00000000); | ||
| 58 | nv_rd32(pmu, 0x000200); | ||
| 59 | nv_mask(pmu, 0x000200, 0x08000000, 0x08000000); | ||
| 60 | msleep(50); | ||
| 61 | |||
| 62 | nv_mask(pmu, 0x10a78c, 0x00000002, 0x00000002); | ||
| 63 | nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000001); | ||
| 64 | nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000000); | ||
| 65 | |||
| 66 | nv_mask(pmu, 0x0206b4, 0x00000000, 0x00000000); | ||
| 67 | for (i = 0; i < ARRAY_SIZE(magic); i++) { | ||
| 68 | nv_wr32(pmu, magic[i].addr, magic[i].data); | ||
| 69 | nv_wait(pmu, magic[i].addr, 0x80000000, 0x00000000); | ||
| 70 | } | ||
| 71 | |||
| 72 | nv_mask(pmu, 0x10a78c, 0x00000002, 0x00000000); | ||
| 73 | nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000001); | ||
| 74 | nv_mask(pmu, 0x10a78c, 0x00000001, 0x00000000); | ||
| 75 | |||
| 76 | nv_mask(pmu, 0x000200, 0x08000000, 0x00000000); | ||
| 77 | nv_mask(pmu, 0x000200, 0x00001000, 0x00001000); | ||
| 78 | nv_rd32(pmu, 0x000200); | ||
| 79 | } | ||
| 80 | |||
| 81 | struct nvkm_oclass * | ||
| 82 | gk110_pmu_oclass = &(struct nvkm_pmu_impl) { | ||
| 83 | .base.handle = NV_SUBDEV(PMU, 0xf0), | ||
| 84 | .base.ofuncs = &(struct nvkm_ofuncs) { | ||
| 85 | .ctor = _nvkm_pmu_ctor, | ||
| 86 | .dtor = _nvkm_pmu_dtor, | ||
| 87 | .init = _nvkm_pmu_init, | ||
| 88 | .fini = _nvkm_pmu_fini, | ||
| 89 | }, | ||
| 90 | .code.data = gk110_pmu_code, | ||
| 91 | .code.size = sizeof(gk110_pmu_code), | ||
| 92 | .data.data = gk110_pmu_data, | ||
| 93 | .data.size = sizeof(gk110_pmu_data), | ||
| 94 | .pgob = gk110_pmu_pgob, | ||
| 95 | }.base; | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c index 6f9c09af1a49..b14134ef9ea5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.c | |||
| @@ -37,4 +37,5 @@ gk208_pmu_oclass = &(struct nvkm_pmu_impl) { | |||
| 37 | .code.size = sizeof(gk208_pmu_code), | 37 | .code.size = sizeof(gk208_pmu_code), |
| 38 | .data.data = gk208_pmu_data, | 38 | .data.data = gk208_pmu_data, |
| 39 | .data.size = sizeof(gk208_pmu_data), | 39 | .data.size = sizeof(gk208_pmu_data), |
| 40 | .pgob = gk110_pmu_pgob, | ||
| 40 | }.base; | 41 | }.base; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c index a49934bbe637..594f746e68f2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.c | |||
| @@ -159,7 +159,7 @@ resched: | |||
| 159 | nvkm_timer_alarm(priv, 100000000, alarm); | 159 | nvkm_timer_alarm(priv, 100000000, alarm); |
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | int | 162 | static int |
| 163 | gk20a_pmu_fini(struct nvkm_object *object, bool suspend) | 163 | gk20a_pmu_fini(struct nvkm_object *object, bool suspend) |
| 164 | { | 164 | { |
| 165 | struct nvkm_pmu *pmu = (void *)object; | 165 | struct nvkm_pmu *pmu = (void *)object; |
| @@ -170,7 +170,7 @@ gk20a_pmu_fini(struct nvkm_object *object, bool suspend) | |||
| 170 | return nvkm_subdev_fini(&pmu->base, suspend); | 170 | return nvkm_subdev_fini(&pmu->base, suspend); |
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | int | 173 | static int |
| 174 | gk20a_pmu_init(struct nvkm_object *object) | 174 | gk20a_pmu_init(struct nvkm_object *object) |
| 175 | { | 175 | { |
| 176 | struct nvkm_pmu *pmu = (void *)object; | 176 | struct nvkm_pmu *pmu = (void *)object; |
| @@ -192,7 +192,8 @@ gk20a_pmu_init(struct nvkm_object *object) | |||
| 192 | return ret; | 192 | return ret; |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | struct gk20a_pmu_dvfs_data gk20a_dvfs_data= { | 195 | static struct gk20a_pmu_dvfs_data |
| 196 | gk20a_dvfs_data= { | ||
| 196 | .p_load_target = 70, | 197 | .p_load_target = 70, |
| 197 | .p_load_max = 90, | 198 | .p_load_max = 90, |
| 198 | .p_smooth = 1, | 199 | .p_smooth = 1, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h index 998410563bfd..799e7c8b88f5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/priv.h | |||
| @@ -40,4 +40,6 @@ struct nvkm_pmu_impl { | |||
| 40 | 40 | ||
| 41 | void (*pgob)(struct nvkm_pmu *, bool); | 41 | void (*pgob)(struct nvkm_pmu *, bool); |
| 42 | }; | 42 | }; |
| 43 | |||
| 44 | void gk110_pmu_pgob(struct nvkm_pmu *, bool); | ||
| 43 | #endif | 45 | #endif |
