Commit d5e5dedd authored by Dave Airlie's avatar Dave Airlie

Merge remote branch 'nouveau/for-airlied' into drm-linus

* nouveau/for-airlied:
  drm/nouveau: add module option to disable TV detection
  drm/nouveau: Never evict VRAM buffers to system.
  drm/nv50: fix connector table parsing for some cards
  drm/nv50: add a memory barrier to pushbuf submission
  drm/nouveau: print a message very early during suspend
  drm/nv04-nv40: Fix up the programmed horizontal sync pulse delay.
  drm/nouveau: Gigabyte NX85T connector table lies, it has DVI-I not HDMI
  drm/nouveau: add option to allow override of dcb connector table types
  drm/nv50: Improve PGRAPH interrupt handling.
  drm/nv50: Make ctxprog wait until interrupt handler is done.
  drm/nouveau: Fix fbcon corruption with font width not divisible by 8
  drm/nv50: Remove redundant/incorrect ctxvals initialisation.
parents 44fef224 f4053509
...@@ -12,7 +12,7 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \ ...@@ -12,7 +12,7 @@ nouveau-y := nouveau_drv.o nouveau_state.o nouveau_channel.o nouveau_mem.o \
nouveau_dp.o nouveau_grctx.o \ nouveau_dp.o nouveau_grctx.o \
nv04_timer.o \ nv04_timer.o \
nv04_mc.o nv40_mc.o nv50_mc.o \ nv04_mc.o nv40_mc.o nv50_mc.o \
nv04_fb.o nv10_fb.o nv40_fb.o \ nv04_fb.o nv10_fb.o nv40_fb.o nv50_fb.o \
nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \ nv04_fifo.o nv10_fifo.o nv40_fifo.o nv50_fifo.o \
nv04_graph.o nv10_graph.o nv20_graph.o \ nv04_graph.o nv10_graph.o nv20_graph.o \
nv40_graph.o nv50_graph.o \ nv40_graph.o nv50_graph.o \
......
...@@ -5210,6 +5210,21 @@ divine_connector_type(struct nvbios *bios, int index) ...@@ -5210,6 +5210,21 @@ divine_connector_type(struct nvbios *bios, int index)
return type; return type;
} }
static void
apply_dcb_connector_quirks(struct nvbios *bios, int idx)
{
struct dcb_connector_table_entry *cte = &bios->dcb.connector.entry[idx];
struct drm_device *dev = bios->dev;
/* Gigabyte NX85T */
if ((dev->pdev->device == 0x0421) &&
(dev->pdev->subsystem_vendor == 0x1458) &&
(dev->pdev->subsystem_device == 0x344c)) {
if (cte->type == DCB_CONNECTOR_HDMI_1)
cte->type = DCB_CONNECTOR_DVI_I;
}
}
static void static void
parse_dcb_connector_table(struct nvbios *bios) parse_dcb_connector_table(struct nvbios *bios)
{ {
...@@ -5238,13 +5253,14 @@ parse_dcb_connector_table(struct nvbios *bios) ...@@ -5238,13 +5253,14 @@ parse_dcb_connector_table(struct nvbios *bios)
entry = conntab + conntab[1]; entry = conntab + conntab[1];
cte = &ct->entry[0]; cte = &ct->entry[0];
for (i = 0; i < conntab[2]; i++, entry += conntab[3], cte++) { for (i = 0; i < conntab[2]; i++, entry += conntab[3], cte++) {
cte->index = i;
if (conntab[3] == 2) if (conntab[3] == 2)
cte->entry = ROM16(entry[0]); cte->entry = ROM16(entry[0]);
else else
cte->entry = ROM32(entry[0]); cte->entry = ROM32(entry[0]);
cte->type = (cte->entry & 0x000000ff) >> 0; cte->type = (cte->entry & 0x000000ff) >> 0;
cte->index = (cte->entry & 0x00000f00) >> 8; cte->index2 = (cte->entry & 0x00000f00) >> 8;
switch (cte->entry & 0x00033000) { switch (cte->entry & 0x00033000) {
case 0x00001000: case 0x00001000:
cte->gpio_tag = 0x07; cte->gpio_tag = 0x07;
...@@ -5266,6 +5282,8 @@ parse_dcb_connector_table(struct nvbios *bios) ...@@ -5266,6 +5282,8 @@ parse_dcb_connector_table(struct nvbios *bios)
if (cte->type == 0xff) if (cte->type == 0xff)
continue; continue;
apply_dcb_connector_quirks(bios, i);
NV_INFO(dev, " %d: 0x%08x: type 0x%02x idx %d tag 0x%02x\n", NV_INFO(dev, " %d: 0x%08x: type 0x%02x idx %d tag 0x%02x\n",
i, cte->entry, cte->type, cte->index, cte->gpio_tag); i, cte->entry, cte->type, cte->index, cte->gpio_tag);
...@@ -5287,10 +5305,16 @@ parse_dcb_connector_table(struct nvbios *bios) ...@@ -5287,10 +5305,16 @@ parse_dcb_connector_table(struct nvbios *bios)
break; break;
default: default:
cte->type = divine_connector_type(bios, cte->index); cte->type = divine_connector_type(bios, cte->index);
NV_WARN(dev, "unknown type, using 0x%02x", cte->type); NV_WARN(dev, "unknown type, using 0x%02x\n", cte->type);
break; break;
} }
if (nouveau_override_conntype) {
int type = divine_connector_type(bios, cte->index);
if (type != cte->type)
NV_WARN(dev, " -> type 0x%02x\n", cte->type);
}
} }
} }
......
...@@ -72,9 +72,10 @@ enum dcb_connector_type { ...@@ -72,9 +72,10 @@ enum dcb_connector_type {
}; };
struct dcb_connector_table_entry { struct dcb_connector_table_entry {
uint8_t index;
uint32_t entry; uint32_t entry;
enum dcb_connector_type type; enum dcb_connector_type type;
uint8_t index; uint8_t index2;
uint8_t gpio_tag; uint8_t gpio_tag;
}; };
......
...@@ -439,8 +439,7 @@ nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl) ...@@ -439,8 +439,7 @@ nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl)
switch (bo->mem.mem_type) { switch (bo->mem.mem_type) {
case TTM_PL_VRAM: case TTM_PL_VRAM:
nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_TT | nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_TT);
TTM_PL_FLAG_SYSTEM);
break; break;
default: default:
nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_SYSTEM); nouveau_bo_placement_set(nvbo, TTM_PL_FLAG_SYSTEM);
......
...@@ -302,7 +302,7 @@ nouveau_connector_detect(struct drm_connector *connector) ...@@ -302,7 +302,7 @@ nouveau_connector_detect(struct drm_connector *connector)
detect_analog: detect_analog:
nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG); nv_encoder = find_encoder_by_type(connector, OUTPUT_ANALOG);
if (!nv_encoder) if (!nv_encoder && !nouveau_tv_disable)
nv_encoder = find_encoder_by_type(connector, OUTPUT_TV); nv_encoder = find_encoder_by_type(connector, OUTPUT_TV);
if (nv_encoder) { if (nv_encoder) {
struct drm_encoder *encoder = to_drm_encoder(nv_encoder); struct drm_encoder *encoder = to_drm_encoder(nv_encoder);
......
...@@ -190,6 +190,11 @@ nv50_dma_push(struct nouveau_channel *chan, struct nouveau_bo *bo, ...@@ -190,6 +190,11 @@ nv50_dma_push(struct nouveau_channel *chan, struct nouveau_bo *bo,
nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8); nouveau_bo_wr32(pb, ip++, upper_32_bits(offset) | length << 8);
chan->dma.ib_put = (chan->dma.ib_put + 1) & chan->dma.ib_max; chan->dma.ib_put = (chan->dma.ib_put + 1) & chan->dma.ib_max;
DRM_MEMORYBARRIER();
/* Flush writes. */
nouveau_bo_rd32(pb, 0);
nvchan_wr32(chan, 0x8c, chan->dma.ib_put); nvchan_wr32(chan, 0x8c, chan->dma.ib_put);
chan->dma.ib_free--; chan->dma.ib_free--;
} }
......
...@@ -83,6 +83,14 @@ MODULE_PARM_DESC(nofbaccel, "Disable fbcon acceleration"); ...@@ -83,6 +83,14 @@ MODULE_PARM_DESC(nofbaccel, "Disable fbcon acceleration");
int nouveau_nofbaccel = 0; int nouveau_nofbaccel = 0;
module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400); module_param_named(nofbaccel, nouveau_nofbaccel, int, 0400);
MODULE_PARM_DESC(override_conntype, "Ignore DCB connector type");
int nouveau_override_conntype = 0;
module_param_named(override_conntype, nouveau_override_conntype, int, 0400);
MODULE_PARM_DESC(tv_disable, "Disable TV-out detection\n");
int nouveau_tv_disable = 0;
module_param_named(tv_disable, nouveau_tv_disable, int, 0400);
MODULE_PARM_DESC(tv_norm, "Default TV norm.\n" MODULE_PARM_DESC(tv_norm, "Default TV norm.\n"
"\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n" "\t\tSupported: PAL, PAL-M, PAL-N, PAL-Nc, NTSC-M, NTSC-J,\n"
"\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n" "\t\t\thd480i, hd480p, hd576i, hd576p, hd720p, hd1080i.\n"
...@@ -154,9 +162,11 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state) ...@@ -154,9 +162,11 @@ nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state)
if (pm_state.event == PM_EVENT_PRETHAW) if (pm_state.event == PM_EVENT_PRETHAW)
return 0; return 0;
NV_INFO(dev, "Disabling fbcon acceleration...\n");
fbdev_flags = dev_priv->fbdev_info->flags; fbdev_flags = dev_priv->fbdev_info->flags;
dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED; dev_priv->fbdev_info->flags |= FBINFO_HWACCEL_DISABLED;
NV_INFO(dev, "Unpinning framebuffer(s)...\n");
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
struct nouveau_framebuffer *nouveau_fb; struct nouveau_framebuffer *nouveau_fb;
......
...@@ -681,6 +681,7 @@ extern int nouveau_uscript_tmds; ...@@ -681,6 +681,7 @@ extern int nouveau_uscript_tmds;
extern int nouveau_vram_pushbuf; extern int nouveau_vram_pushbuf;
extern int nouveau_vram_notify; extern int nouveau_vram_notify;
extern int nouveau_fbpercrtc; extern int nouveau_fbpercrtc;
extern int nouveau_tv_disable;
extern char *nouveau_tv_norm; extern char *nouveau_tv_norm;
extern int nouveau_reg_debug; extern int nouveau_reg_debug;
extern char *nouveau_vbios; extern char *nouveau_vbios;
...@@ -688,6 +689,7 @@ extern int nouveau_ctxfw; ...@@ -688,6 +689,7 @@ extern int nouveau_ctxfw;
extern int nouveau_ignorelid; extern int nouveau_ignorelid;
extern int nouveau_nofbaccel; extern int nouveau_nofbaccel;
extern int nouveau_noaccel; extern int nouveau_noaccel;
extern int nouveau_override_conntype;
extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state); extern int nouveau_pci_suspend(struct pci_dev *pdev, pm_message_t pm_state);
extern int nouveau_pci_resume(struct pci_dev *pdev); extern int nouveau_pci_resume(struct pci_dev *pdev);
...@@ -926,6 +928,10 @@ extern void nv40_fb_takedown(struct drm_device *); ...@@ -926,6 +928,10 @@ extern void nv40_fb_takedown(struct drm_device *);
extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t, extern void nv40_fb_set_region_tiling(struct drm_device *, int, uint32_t,
uint32_t, uint32_t); uint32_t, uint32_t);
/* nv50_fb.c */
extern int nv50_fb_init(struct drm_device *);
extern void nv50_fb_takedown(struct drm_device *);
/* nv04_fifo.c */ /* nv04_fifo.c */
extern int nv04_fifo_init(struct drm_device *); extern int nv04_fifo_init(struct drm_device *);
extern void nv04_fifo_disable(struct drm_device *); extern void nv04_fifo_disable(struct drm_device *);
......
This diff is collapsed.
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include "nouveau_drm.h" #include "nouveau_drm.h"
#include "nv50_display.h" #include "nv50_display.h"
static int nouveau_stub_init(struct drm_device *dev) { return 0; }
static void nouveau_stub_takedown(struct drm_device *dev) {} static void nouveau_stub_takedown(struct drm_device *dev) {}
static int nouveau_init_engine_ptrs(struct drm_device *dev) static int nouveau_init_engine_ptrs(struct drm_device *dev)
...@@ -277,8 +276,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) ...@@ -277,8 +276,8 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
engine->timer.init = nv04_timer_init; engine->timer.init = nv04_timer_init;
engine->timer.read = nv04_timer_read; engine->timer.read = nv04_timer_read;
engine->timer.takedown = nv04_timer_takedown; engine->timer.takedown = nv04_timer_takedown;
engine->fb.init = nouveau_stub_init; engine->fb.init = nv50_fb_init;
engine->fb.takedown = nouveau_stub_takedown; engine->fb.takedown = nv50_fb_takedown;
engine->graph.grclass = nv50_graph_grclass; engine->graph.grclass = nv50_graph_grclass;
engine->graph.init = nv50_graph_init; engine->graph.init = nv50_graph_init;
engine->graph.takedown = nv50_graph_takedown; engine->graph.takedown = nv50_graph_takedown;
......
...@@ -231,8 +231,8 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode) ...@@ -231,8 +231,8 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode)
/* Calculate our timings */ /* Calculate our timings */
int horizDisplay = (mode->crtc_hdisplay >> 3) - 1; int horizDisplay = (mode->crtc_hdisplay >> 3) - 1;
int horizStart = (mode->crtc_hsync_start >> 3) - 1; int horizStart = (mode->crtc_hsync_start >> 3) + 1;
int horizEnd = (mode->crtc_hsync_end >> 3) - 1; int horizEnd = (mode->crtc_hsync_end >> 3) + 1;
int horizTotal = (mode->crtc_htotal >> 3) - 5; int horizTotal = (mode->crtc_htotal >> 3) - 5;
int horizBlankStart = (mode->crtc_hdisplay >> 3) - 1; int horizBlankStart = (mode->crtc_hdisplay >> 3) - 1;
int horizBlankEnd = (mode->crtc_htotal >> 3) - 1; int horizBlankEnd = (mode->crtc_htotal >> 3) - 1;
......
...@@ -118,8 +118,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) ...@@ -118,8 +118,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
return; return;
} }
width = ALIGN(image->width, 32); width = ALIGN(image->width, 8);
dsize = (width * image->height) >> 5; dsize = ALIGN(width * image->height, 32) >> 5;
if (info->fix.visual == FB_VISUAL_TRUECOLOR || if (info->fix.visual == FB_VISUAL_TRUECOLOR ||
info->fix.visual == FB_VISUAL_DIRECTCOLOR) { info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
...@@ -136,8 +136,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image) ...@@ -136,8 +136,8 @@ nv04_fbcon_imageblit(struct fb_info *info, const struct fb_image *image)
((image->dx + image->width) & 0xffff)); ((image->dx + image->width) & 0xffff));
OUT_RING(chan, bg); OUT_RING(chan, bg);
OUT_RING(chan, fg); OUT_RING(chan, fg);
OUT_RING(chan, (image->height << 16) | image->width);
OUT_RING(chan, (image->height << 16) | width); OUT_RING(chan, (image->height << 16) | width);
OUT_RING(chan, (image->height << 16) | image->width);
OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff)); OUT_RING(chan, (image->dy << 16) | (image->dx & 0xffff));
while (dsize) { while (dsize) {
......
...@@ -522,8 +522,8 @@ int nv50_display_create(struct drm_device *dev) ...@@ -522,8 +522,8 @@ int nv50_display_create(struct drm_device *dev)
} }
for (i = 0 ; i < dcb->connector.entries; i++) { for (i = 0 ; i < dcb->connector.entries; i++) {
if (i != 0 && dcb->connector.entry[i].index == if (i != 0 && dcb->connector.entry[i].index2 ==
dcb->connector.entry[i - 1].index) dcb->connector.entry[i - 1].index2)
continue; continue;
nouveau_connector_create(dev, &dcb->connector.entry[i]); nouveau_connector_create(dev, &dcb->connector.entry[i]);
} }
......
#include "drmP.h"
#include "drm.h"
#include "nouveau_drv.h"
#include "nouveau_drm.h"
int
nv50_fb_init(struct drm_device *dev)
{
/* This is needed to get meaningful information from 100c90
* on traps. No idea what these values mean exactly. */
struct drm_nouveau_private *dev_priv = dev->dev_private;
switch (dev_priv->chipset) {
case 0x50:
nv_wr32(dev, 0x100c90, 0x0707ff);
break;
case 0xa5:
case 0xa8:
nv_wr32(dev, 0x100c90, 0x0d0fff);
break;
default:
nv_wr32(dev, 0x100c90, 0x1d07ff);
break;
}
return 0;
}
void
nv50_fb_takedown(struct drm_device *dev)
{
}
...@@ -233,7 +233,7 @@ nv50_fbcon_accel_init(struct fb_info *info) ...@@ -233,7 +233,7 @@ nv50_fbcon_accel_init(struct fb_info *info)
BEGIN_RING(chan, NvSub2D, 0x0808, 3); BEGIN_RING(chan, NvSub2D, 0x0808, 3);
OUT_RING(chan, 0); OUT_RING(chan, 0);
OUT_RING(chan, 0); OUT_RING(chan, 0);
OUT_RING(chan, 0); OUT_RING(chan, 1);
BEGIN_RING(chan, NvSub2D, 0x081c, 1); BEGIN_RING(chan, NvSub2D, 0x081c, 1);
OUT_RING(chan, 1); OUT_RING(chan, 1);
BEGIN_RING(chan, NvSub2D, 0x0840, 4); BEGIN_RING(chan, NvSub2D, 0x0840, 4);
......
...@@ -56,6 +56,10 @@ nv50_graph_init_intr(struct drm_device *dev) ...@@ -56,6 +56,10 @@ nv50_graph_init_intr(struct drm_device *dev)
static void static void
nv50_graph_init_regs__nv(struct drm_device *dev) nv50_graph_init_regs__nv(struct drm_device *dev)
{ {
struct drm_nouveau_private *dev_priv = dev->dev_private;
uint32_t units = nv_rd32(dev, 0x1540);
int i;
NV_DEBUG(dev, "\n"); NV_DEBUG(dev, "\n");
nv_wr32(dev, 0x400804, 0xc0000000); nv_wr32(dev, 0x400804, 0xc0000000);
...@@ -65,6 +69,20 @@ nv50_graph_init_regs__nv(struct drm_device *dev) ...@@ -65,6 +69,20 @@ nv50_graph_init_regs__nv(struct drm_device *dev)
nv_wr32(dev, 0x405018, 0xc0000000); nv_wr32(dev, 0x405018, 0xc0000000);
nv_wr32(dev, 0x402000, 0xc0000000); nv_wr32(dev, 0x402000, 0xc0000000);
for (i = 0; i < 16; i++) {
if (units & 1 << i) {
if (dev_priv->chipset < 0xa0) {
nv_wr32(dev, 0x408900 + (i << 12), 0xc0000000);
nv_wr32(dev, 0x408e08 + (i << 12), 0xc0000000);
nv_wr32(dev, 0x408314 + (i << 12), 0xc0000000);
} else {
nv_wr32(dev, 0x408600 + (i << 11), 0xc0000000);
nv_wr32(dev, 0x408708 + (i << 11), 0xc0000000);
nv_wr32(dev, 0x40831c + (i << 11), 0xc0000000);
}
}
}
nv_wr32(dev, 0x400108, 0xffffffff); nv_wr32(dev, 0x400108, 0xffffffff);
nv_wr32(dev, 0x400824, 0x00004000); nv_wr32(dev, 0x400824, 0x00004000);
...@@ -229,10 +247,6 @@ nv50_graph_create_context(struct nouveau_channel *chan) ...@@ -229,10 +247,6 @@ nv50_graph_create_context(struct nouveau_channel *chan)
nouveau_grctx_vals_load(dev, ctx); nouveau_grctx_vals_load(dev, ctx);
} }
nv_wo32(dev, ctx, 0x00000/4, chan->ramin->instance >> 12); nv_wo32(dev, ctx, 0x00000/4, chan->ramin->instance >> 12);
if ((dev_priv->chipset & 0xf0) == 0xa0)
nv_wo32(dev, ctx, 0x00004/4, 0x00000000);
else
nv_wo32(dev, ctx, 0x0011c/4, 0x00000000);
dev_priv->engine.instmem.finish_access(dev); dev_priv->engine.instmem.finish_access(dev);
return 0; return 0;
......
...@@ -64,6 +64,9 @@ ...@@ -64,6 +64,9 @@
#define CP_FLAG_ALWAYS ((2 * 32) + 13) #define CP_FLAG_ALWAYS ((2 * 32) + 13)
#define CP_FLAG_ALWAYS_FALSE 0 #define CP_FLAG_ALWAYS_FALSE 0
#define CP_FLAG_ALWAYS_TRUE 1 #define CP_FLAG_ALWAYS_TRUE 1
#define CP_FLAG_INTR ((2 * 32) + 15)
#define CP_FLAG_INTR_NOT_PENDING 0
#define CP_FLAG_INTR_PENDING 1
#define CP_CTX 0x00100000 #define CP_CTX 0x00100000
#define CP_CTX_COUNT 0x000f0000 #define CP_CTX_COUNT 0x000f0000
...@@ -214,6 +217,8 @@ nv50_grctx_init(struct nouveau_grctx *ctx) ...@@ -214,6 +217,8 @@ nv50_grctx_init(struct nouveau_grctx *ctx)
cp_name(ctx, cp_setup_save); cp_name(ctx, cp_setup_save);
cp_set (ctx, UNK1D, SET); cp_set (ctx, UNK1D, SET);
cp_wait(ctx, STATUS, BUSY); cp_wait(ctx, STATUS, BUSY);
cp_wait(ctx, INTR, PENDING);
cp_bra (ctx, STATUS, BUSY, cp_setup_save);
cp_set (ctx, UNK01, SET); cp_set (ctx, UNK01, SET);
cp_set (ctx, SWAP_DIRECTION, SAVE); cp_set (ctx, SWAP_DIRECTION, SAVE);
...@@ -269,7 +274,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx) ...@@ -269,7 +274,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx)
int offset, base; int offset, base;
uint32_t units = nv_rd32 (ctx->dev, 0x1540); uint32_t units = nv_rd32 (ctx->dev, 0x1540);
/* 0800 */ /* 0800: DISPATCH */
cp_ctx(ctx, 0x400808, 7); cp_ctx(ctx, 0x400808, 7);
gr_def(ctx, 0x400814, 0x00000030); gr_def(ctx, 0x400814, 0x00000030);
cp_ctx(ctx, 0x400834, 0x32); cp_ctx(ctx, 0x400834, 0x32);
...@@ -300,7 +305,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx) ...@@ -300,7 +305,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx)
gr_def(ctx, 0x400b20, 0x0001629d); gr_def(ctx, 0x400b20, 0x0001629d);
} }
/* 0C00 */ /* 0C00: VFETCH */
cp_ctx(ctx, 0x400c08, 0x2); cp_ctx(ctx, 0x400c08, 0x2);
gr_def(ctx, 0x400c08, 0x0000fe0c); gr_def(ctx, 0x400c08, 0x0000fe0c);
...@@ -326,7 +331,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx) ...@@ -326,7 +331,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx)
cp_ctx(ctx, 0x401540, 0x5); cp_ctx(ctx, 0x401540, 0x5);
gr_def(ctx, 0x401550, 0x00001018); gr_def(ctx, 0x401550, 0x00001018);
/* 1800 */ /* 1800: STREAMOUT */
cp_ctx(ctx, 0x401814, 0x1); cp_ctx(ctx, 0x401814, 0x1);
gr_def(ctx, 0x401814, 0x000000ff); gr_def(ctx, 0x401814, 0x000000ff);
if (dev_priv->chipset == 0x50) { if (dev_priv->chipset == 0x50) {
...@@ -641,7 +646,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx) ...@@ -641,7 +646,7 @@ nv50_graph_construct_mmio(struct nouveau_grctx *ctx)
if (dev_priv->chipset == 0x50) if (dev_priv->chipset == 0x50)
cp_ctx(ctx, 0x4063e0, 0x1); cp_ctx(ctx, 0x4063e0, 0x1);
/* 6800 */ /* 6800: M2MF */
if (dev_priv->chipset < 0x90) { if (dev_priv->chipset < 0x90) {
cp_ctx(ctx, 0x406814, 0x2b); cp_ctx(ctx, 0x406814, 0x2b);
gr_def(ctx, 0x406818, 0x00000f80); gr_def(ctx, 0x406818, 0x00000f80);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment