mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge branch '04.01-ampere-lite' of git://github.com/skeggsb/linux into topic/nouveau-ampere-modeset
This adds support for basic modeseting on the nvidia ampere chipsets. This code should all be contained to just those and have no effect on current hardware. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Ben Skeggs <skeggsb@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/CACAvsv5LmMP+HbDUQBf_dy1-0eS9fA32k8HWo4y5X4-7rsw-yw@mail.gmail.com
This commit is contained in:
@@ -37,6 +37,7 @@ nouveau-y += dispnv50/wimmc37b.o
|
||||
nouveau-y += dispnv50/wndw.o
|
||||
nouveau-y += dispnv50/wndwc37e.o
|
||||
nouveau-y += dispnv50/wndwc57e.o
|
||||
nouveau-y += dispnv50/wndwc67e.o
|
||||
|
||||
nouveau-y += dispnv50/base.o
|
||||
nouveau-y += dispnv50/base507c.o
|
||||
|
||||
@@ -42,6 +42,7 @@ nv50_core_new(struct nouveau_drm *drm, struct nv50_core **pcore)
|
||||
int version;
|
||||
int (*new)(struct nouveau_drm *, s32, struct nv50_core **);
|
||||
} cores[] = {
|
||||
{ GA102_DISP_CORE_CHANNEL_DMA, 0, corec57d_new },
|
||||
{ TU102_DISP_CORE_CHANNEL_DMA, 0, corec57d_new },
|
||||
{ GV100_DISP_CORE_CHANNEL_DMA, 0, corec37d_new },
|
||||
{ GP102_DISP_CORE_CHANNEL_DMA, 0, core917d_new },
|
||||
|
||||
@@ -31,6 +31,7 @@ nv50_curs_new(struct nouveau_drm *drm, int head, struct nv50_wndw **pwndw)
|
||||
int version;
|
||||
int (*new)(struct nouveau_drm *, int, s32, struct nv50_wndw **);
|
||||
} curses[] = {
|
||||
{ GA102_DISP_CURSOR, 0, cursc37a_new },
|
||||
{ TU102_DISP_CURSOR, 0, cursc37a_new },
|
||||
{ GV100_DISP_CURSOR, 0, cursc37a_new },
|
||||
{ GK104_DISP_CURSOR, 0, curs907a_new },
|
||||
|
||||
@@ -31,6 +31,7 @@ nv50_wimm_init(struct nouveau_drm *drm, struct nv50_wndw *wndw)
|
||||
int version;
|
||||
int (*init)(struct nouveau_drm *, s32, struct nv50_wndw *);
|
||||
} wimms[] = {
|
||||
{ GA102_DISP_WINDOW_IMM_CHANNEL_DMA, 0, wimmc37b_init },
|
||||
{ TU102_DISP_WINDOW_IMM_CHANNEL_DMA, 0, wimmc37b_init },
|
||||
{ GV100_DISP_WINDOW_IMM_CHANNEL_DMA, 0, wimmc37b_init },
|
||||
{}
|
||||
|
||||
@@ -784,6 +784,7 @@ nv50_wndw_new(struct nouveau_drm *drm, enum drm_plane_type type, int index,
|
||||
int (*new)(struct nouveau_drm *, enum drm_plane_type,
|
||||
int, s32, struct nv50_wndw **);
|
||||
} wndws[] = {
|
||||
{ GA102_DISP_WINDOW_CHANNEL_DMA, 0, wndwc67e_new },
|
||||
{ TU102_DISP_WINDOW_CHANNEL_DMA, 0, wndwc57e_new },
|
||||
{ GV100_DISP_WINDOW_CHANNEL_DMA, 0, wndwc37e_new },
|
||||
{}
|
||||
|
||||
@@ -129,6 +129,14 @@ int wndwc37e_update(struct nv50_wndw *, u32 *);
|
||||
|
||||
int wndwc57e_new(struct nouveau_drm *, enum drm_plane_type, int, s32,
|
||||
struct nv50_wndw **);
|
||||
bool wndwc57e_ilut(struct nv50_wndw *, struct nv50_wndw_atom *, int);
|
||||
int wndwc57e_ilut_set(struct nv50_wndw *, struct nv50_wndw_atom *);
|
||||
int wndwc57e_ilut_clr(struct nv50_wndw *);
|
||||
int wndwc57e_csc_set(struct nv50_wndw *, struct nv50_wndw_atom *);
|
||||
int wndwc57e_csc_clr(struct nv50_wndw *);
|
||||
|
||||
int wndwc67e_new(struct nouveau_drm *, enum drm_plane_type, int, s32,
|
||||
struct nv50_wndw **);
|
||||
|
||||
int nv50_wndw_new(struct nouveau_drm *, enum drm_plane_type, int index,
|
||||
struct nv50_wndw **);
|
||||
|
||||
@@ -80,7 +80,7 @@ wndwc57e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
wndwc57e_csc_clr(struct nv50_wndw *wndw)
|
||||
{
|
||||
struct nvif_push *push = wndw->wndw.push;
|
||||
@@ -98,7 +98,7 @@ wndwc57e_csc_clr(struct nv50_wndw *wndw)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
wndwc57e_csc_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
|
||||
{
|
||||
struct nvif_push *push = wndw->wndw.push;
|
||||
@@ -111,7 +111,7 @@ wndwc57e_csc_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
wndwc57e_ilut_clr(struct nv50_wndw *wndw)
|
||||
{
|
||||
struct nvif_push *push = wndw->wndw.push;
|
||||
@@ -124,7 +124,7 @@ wndwc57e_ilut_clr(struct nv50_wndw *wndw)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
wndwc57e_ilut_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
|
||||
{
|
||||
struct nvif_push *push = wndw->wndw.push;
|
||||
@@ -179,7 +179,7 @@ wndwc57e_ilut_load(struct drm_color_lut *in, int size, void __iomem *mem)
|
||||
writew(readw(mem - 4), mem + 4);
|
||||
}
|
||||
|
||||
static bool
|
||||
bool
|
||||
wndwc57e_ilut(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw, int size)
|
||||
{
|
||||
if (size = size ? size : 1024, size != 256 && size != 1024)
|
||||
|
||||
106
drivers/gpu/drm/nouveau/dispnv50/wndwc67e.c
Normal file
106
drivers/gpu/drm/nouveau/dispnv50/wndwc67e.c
Normal file
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright 2021 Red Hat Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include "wndw.h"
|
||||
#include "atom.h"
|
||||
|
||||
#include <nvif/pushc37b.h>
|
||||
|
||||
#include <nvhw/class/clc57e.h>
|
||||
|
||||
static int
|
||||
wndwc67e_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
|
||||
{
|
||||
struct nvif_push *push = wndw->wndw.push;
|
||||
int ret;
|
||||
|
||||
if ((ret = PUSH_WAIT(push, 17)))
|
||||
return ret;
|
||||
|
||||
PUSH_MTHD(push, NVC57E, SET_PRESENT_CONTROL,
|
||||
NVVAL(NVC57E, SET_PRESENT_CONTROL, MIN_PRESENT_INTERVAL, asyw->image.interval) |
|
||||
NVVAL(NVC57E, SET_PRESENT_CONTROL, BEGIN_MODE, asyw->image.mode) |
|
||||
NVDEF(NVC57E, SET_PRESENT_CONTROL, TIMESTAMP_MODE, DISABLE));
|
||||
|
||||
PUSH_MTHD(push, NVC57E, SET_SIZE,
|
||||
NVVAL(NVC57E, SET_SIZE, WIDTH, asyw->image.w) |
|
||||
NVVAL(NVC57E, SET_SIZE, HEIGHT, asyw->image.h),
|
||||
|
||||
SET_STORAGE,
|
||||
NVVAL(NVC57E, SET_STORAGE, BLOCK_HEIGHT, asyw->image.blockh),
|
||||
|
||||
SET_PARAMS,
|
||||
NVVAL(NVC57E, SET_PARAMS, FORMAT, asyw->image.format) |
|
||||
NVDEF(NVC57E, SET_PARAMS, CLAMP_BEFORE_BLEND, DISABLE) |
|
||||
NVDEF(NVC57E, SET_PARAMS, SWAP_UV, DISABLE) |
|
||||
NVDEF(NVC57E, SET_PARAMS, FMT_ROUNDING_MODE, ROUND_TO_NEAREST),
|
||||
|
||||
SET_PLANAR_STORAGE(0),
|
||||
NVVAL(NVC57E, SET_PLANAR_STORAGE, PITCH, asyw->image.blocks[0]) |
|
||||
NVVAL(NVC57E, SET_PLANAR_STORAGE, PITCH, asyw->image.pitch[0] >> 6));
|
||||
|
||||
PUSH_MTHD(push, NVC57E, SET_CONTEXT_DMA_ISO(0), asyw->image.handle, 1);
|
||||
PUSH_MTHD(push, NVC57E, SET_OFFSET(0), asyw->image.offset[0] >> 8);
|
||||
|
||||
PUSH_MTHD(push, NVC57E, SET_POINT_IN(0),
|
||||
NVVAL(NVC57E, SET_POINT_IN, X, asyw->state.src_x >> 16) |
|
||||
NVVAL(NVC57E, SET_POINT_IN, Y, asyw->state.src_y >> 16));
|
||||
|
||||
PUSH_MTHD(push, NVC57E, SET_SIZE_IN,
|
||||
NVVAL(NVC57E, SET_SIZE_IN, WIDTH, asyw->state.src_w >> 16) |
|
||||
NVVAL(NVC57E, SET_SIZE_IN, HEIGHT, asyw->state.src_h >> 16));
|
||||
|
||||
PUSH_MTHD(push, NVC57E, SET_SIZE_OUT,
|
||||
NVVAL(NVC57E, SET_SIZE_OUT, WIDTH, asyw->state.crtc_w) |
|
||||
NVVAL(NVC57E, SET_SIZE_OUT, HEIGHT, asyw->state.crtc_h));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct nv50_wndw_func
|
||||
wndwc67e = {
|
||||
.acquire = wndwc37e_acquire,
|
||||
.release = wndwc37e_release,
|
||||
.sema_set = wndwc37e_sema_set,
|
||||
.sema_clr = wndwc37e_sema_clr,
|
||||
.ntfy_set = wndwc37e_ntfy_set,
|
||||
.ntfy_clr = wndwc37e_ntfy_clr,
|
||||
.ntfy_reset = corec37d_ntfy_init,
|
||||
.ntfy_wait_begun = base507c_ntfy_wait_begun,
|
||||
.ilut = wndwc57e_ilut,
|
||||
.ilut_identity = true,
|
||||
.ilut_size = 1024,
|
||||
.xlut_set = wndwc57e_ilut_set,
|
||||
.xlut_clr = wndwc57e_ilut_clr,
|
||||
.csc = base907c_csc,
|
||||
.csc_set = wndwc57e_csc_set,
|
||||
.csc_clr = wndwc57e_csc_clr,
|
||||
.image_set = wndwc67e_image_set,
|
||||
.image_clr = wndwc37e_image_clr,
|
||||
.blend_set = wndwc37e_blend_set,
|
||||
.update = wndwc37e_update,
|
||||
};
|
||||
|
||||
int
|
||||
wndwc67e_new(struct nouveau_drm *drm, enum drm_plane_type type, int index,
|
||||
s32 oclass, struct nv50_wndw **pwndw)
|
||||
{
|
||||
return wndwc37e_new_(&wndwc67e, drm, type, index, oclass, BIT(index >> 1), pwndw);
|
||||
}
|
||||
@@ -33,6 +33,7 @@ struct nv_device_info_v0 {
|
||||
#define NV_DEVICE_INFO_V0_PASCAL 0x0a
|
||||
#define NV_DEVICE_INFO_V0_VOLTA 0x0b
|
||||
#define NV_DEVICE_INFO_V0_TURING 0x0c
|
||||
#define NV_DEVICE_INFO_V0_AMPERE 0x0d
|
||||
__u8 family;
|
||||
__u8 pad06[2];
|
||||
__u64 ram_size;
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
#define GP102_DISP /* cl5070.h */ 0x00009870
|
||||
#define GV100_DISP /* cl5070.h */ 0x0000c370
|
||||
#define TU102_DISP /* cl5070.h */ 0x0000c570
|
||||
#define GA102_DISP /* cl5070.h */ 0x0000c670
|
||||
|
||||
#define GV100_DISP_CAPS 0x0000c373
|
||||
|
||||
@@ -103,6 +104,7 @@
|
||||
#define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a
|
||||
#define GV100_DISP_CURSOR /* cl507a.h */ 0x0000c37a
|
||||
#define TU102_DISP_CURSOR /* cl507a.h */ 0x0000c57a
|
||||
#define GA102_DISP_CURSOR /* cl507a.h */ 0x0000c67a
|
||||
|
||||
#define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b
|
||||
#define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b
|
||||
@@ -112,6 +114,7 @@
|
||||
|
||||
#define GV100_DISP_WINDOW_IMM_CHANNEL_DMA /* clc37b.h */ 0x0000c37b
|
||||
#define TU102_DISP_WINDOW_IMM_CHANNEL_DMA /* clc37b.h */ 0x0000c57b
|
||||
#define GA102_DISP_WINDOW_IMM_CHANNEL_DMA /* clc37b.h */ 0x0000c67b
|
||||
|
||||
#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c
|
||||
#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c
|
||||
@@ -135,6 +138,7 @@
|
||||
#define GP102_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000987d
|
||||
#define GV100_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000c37d
|
||||
#define TU102_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000c57d
|
||||
#define GA102_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000c67d
|
||||
|
||||
#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e
|
||||
#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e
|
||||
@@ -145,6 +149,7 @@
|
||||
|
||||
#define GV100_DISP_WINDOW_CHANNEL_DMA /* clc37e.h */ 0x0000c37e
|
||||
#define TU102_DISP_WINDOW_CHANNEL_DMA /* clc37e.h */ 0x0000c57e
|
||||
#define GA102_DISP_WINDOW_CHANNEL_DMA /* clc37e.h */ 0x0000c67e
|
||||
|
||||
#define NV50_TESLA 0x00005097
|
||||
#define G82_TESLA 0x00008297
|
||||
|
||||
@@ -120,6 +120,7 @@ struct nvkm_device {
|
||||
GP100 = 0x130,
|
||||
GV100 = 0x140,
|
||||
TU100 = 0x160,
|
||||
GA100 = 0x170,
|
||||
} card_type;
|
||||
u32 chipset;
|
||||
u8 chiprev;
|
||||
|
||||
@@ -37,4 +37,5 @@ int gp100_disp_new(struct nvkm_device *, int, struct nvkm_disp **);
|
||||
int gp102_disp_new(struct nvkm_device *, int, struct nvkm_disp **);
|
||||
int gv100_disp_new(struct nvkm_device *, int, struct nvkm_disp **);
|
||||
int tu102_disp_new(struct nvkm_device *, int, struct nvkm_disp **);
|
||||
int ga102_disp_new(struct nvkm_device *, int, struct nvkm_disp **);
|
||||
#endif
|
||||
|
||||
@@ -32,4 +32,5 @@ int gm107_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **);
|
||||
int gm200_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **);
|
||||
int gv100_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **);
|
||||
int tu102_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **);
|
||||
int ga100_devinit_new(struct nvkm_device *, int, struct nvkm_devinit **);
|
||||
#endif
|
||||
|
||||
@@ -86,6 +86,8 @@ int gp100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gp102_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gp10b_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int gv100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int ga100_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
int ga102_fb_new(struct nvkm_device *, int, struct nvkm_fb **);
|
||||
|
||||
#include <subdev/bios.h>
|
||||
#include <subdev/bios/ramcfg.h>
|
||||
|
||||
@@ -37,4 +37,5 @@ int nv50_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
|
||||
int g94_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
|
||||
int gf119_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
|
||||
int gk104_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
|
||||
int ga102_gpio_new(struct nvkm_device *, int, struct nvkm_gpio **);
|
||||
#endif
|
||||
|
||||
@@ -32,4 +32,5 @@ int gk20a_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int gp100_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int gp10b_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int tu102_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
int ga100_mc_new(struct nvkm_device *, int, struct nvkm_mc **);
|
||||
#endif
|
||||
|
||||
@@ -256,6 +256,7 @@ nouveau_backlight_init(struct drm_connector *connector)
|
||||
case NV_DEVICE_INFO_V0_PASCAL:
|
||||
case NV_DEVICE_INFO_V0_VOLTA:
|
||||
case NV_DEVICE_INFO_V0_TURING:
|
||||
case NV_DEVICE_INFO_V0_AMPERE: //XXX: not confirmed
|
||||
ret = nv50_backlight_init(nv_encoder, &props, &ops);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -35,6 +35,7 @@ nvif_disp_ctor(struct nvif_device *device, const char *name, s32 oclass,
|
||||
struct nvif_disp *disp)
|
||||
{
|
||||
static const struct nvif_mclass disps[] = {
|
||||
{ GA102_DISP, -1 },
|
||||
{ TU102_DISP, -1 },
|
||||
{ GV100_DISP, -1 },
|
||||
{ GP102_DISP, -1 },
|
||||
|
||||
@@ -2652,6 +2652,61 @@ nv168_chipset = {
|
||||
.sec2 = tu102_sec2_new,
|
||||
};
|
||||
|
||||
static const struct nvkm_device_chip
|
||||
nv170_chipset = {
|
||||
.name = "GA100",
|
||||
.bar = tu102_bar_new,
|
||||
.bios = nvkm_bios_new,
|
||||
.devinit = ga100_devinit_new,
|
||||
.fb = ga100_fb_new,
|
||||
.gpio = gk104_gpio_new,
|
||||
.i2c = gm200_i2c_new,
|
||||
.ibus = gm200_ibus_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = ga100_mc_new,
|
||||
.mmu = tu102_mmu_new,
|
||||
.pci = gp100_pci_new,
|
||||
.timer = gk20a_timer_new,
|
||||
};
|
||||
|
||||
static const struct nvkm_device_chip
|
||||
nv172_chipset = {
|
||||
.name = "GA102",
|
||||
.bar = tu102_bar_new,
|
||||
.bios = nvkm_bios_new,
|
||||
.devinit = ga100_devinit_new,
|
||||
.fb = ga102_fb_new,
|
||||
.gpio = ga102_gpio_new,
|
||||
.i2c = gm200_i2c_new,
|
||||
.ibus = gm200_ibus_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = ga100_mc_new,
|
||||
.mmu = tu102_mmu_new,
|
||||
.pci = gp100_pci_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.disp = ga102_disp_new,
|
||||
.dma = gv100_dma_new,
|
||||
};
|
||||
|
||||
static const struct nvkm_device_chip
|
||||
nv174_chipset = {
|
||||
.name = "GA104",
|
||||
.bar = tu102_bar_new,
|
||||
.bios = nvkm_bios_new,
|
||||
.devinit = ga100_devinit_new,
|
||||
.fb = ga102_fb_new,
|
||||
.gpio = ga102_gpio_new,
|
||||
.i2c = gm200_i2c_new,
|
||||
.ibus = gm200_ibus_new,
|
||||
.imem = nv50_instmem_new,
|
||||
.mc = ga100_mc_new,
|
||||
.mmu = tu102_mmu_new,
|
||||
.pci = gp100_pci_new,
|
||||
.timer = gk20a_timer_new,
|
||||
.disp = ga102_disp_new,
|
||||
.dma = gv100_dma_new,
|
||||
};
|
||||
|
||||
static int
|
||||
nvkm_device_event_ctor(struct nvkm_object *object, void *data, u32 size,
|
||||
struct nvkm_notify *notify)
|
||||
@@ -3063,6 +3118,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
case 0x130: device->card_type = GP100; break;
|
||||
case 0x140: device->card_type = GV100; break;
|
||||
case 0x160: device->card_type = TU100; break;
|
||||
case 0x170: device->card_type = GA100; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -3160,10 +3216,23 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
|
||||
case 0x166: device->chip = &nv166_chipset; break;
|
||||
case 0x167: device->chip = &nv167_chipset; break;
|
||||
case 0x168: device->chip = &nv168_chipset; break;
|
||||
case 0x172: device->chip = &nv172_chipset; break;
|
||||
case 0x174: device->chip = &nv174_chipset; break;
|
||||
default:
|
||||
nvdev_error(device, "unknown chipset (%08x)\n", boot0);
|
||||
ret = -ENODEV;
|
||||
goto done;
|
||||
if (nvkm_boolopt(device->cfgopt, "NvEnableUnsupportedChipsets", false)) {
|
||||
switch (device->chipset) {
|
||||
case 0x170: device->chip = &nv170_chipset; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!device->chip) {
|
||||
nvdev_error(device, "unknown chipset (%08x)\n", boot0);
|
||||
ret = -ENODEV;
|
||||
goto done;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
nvdev_info(device, "NVIDIA %s (%08x)\n",
|
||||
|
||||
@@ -176,6 +176,7 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size)
|
||||
case GP100: args->v0.family = NV_DEVICE_INFO_V0_PASCAL; break;
|
||||
case GV100: args->v0.family = NV_DEVICE_INFO_V0_VOLTA; break;
|
||||
case TU100: args->v0.family = NV_DEVICE_INFO_V0_TURING; break;
|
||||
case GA100: args->v0.family = NV_DEVICE_INFO_V0_AMPERE; break;
|
||||
default:
|
||||
args->v0.family = 0;
|
||||
break;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user