Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4f7d1bc9 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'drm-nouveau-next' of...

Merge branch 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6 into drm-fixes

A couple of bios parser fixes (one for ancient chips, another for new ones - important in Optimus configs).  Another to make sure KMS is enabled on certain Optimus configs, and a TTM failure path fix.

* 'drm-nouveau-next' of git://anongit.freedesktop.org/git/nouveau/linux-2.6:
  drm/nouveau/ttm: prevent double-free in nouveau_sgdma_create_ttm() failure path
  drm/nouveau/bios/init: fix thinko in INIT_CONFIGURE_MEM
  drm/nouveau/kms: enable for non-vga pci classes
  drm/nouveau/bios/init: stub opcode 0xaa
parents d5227129 7a59cc34
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -579,8 +579,22 @@ static void
init_reserved(struct nvbios_init *init)
{
	u8 opcode = nv_ro08(init->bios, init->offset);
	trace("RESERVED\t0x%02x\n", opcode);
	init->offset += 1;
	u8 length, i;

	switch (opcode) {
	case 0xaa:
		length = 4;
		break;
	default:
		length = 1;
		break;
	}

	trace("RESERVED 0x%02x\t", opcode);
	for (i = 1; i < length; i++)
		cont(" 0x%02x", nv_ro08(init->bios, init->offset + i));
	cont("\n");
	init->offset += length;
}

/**
@@ -1437,7 +1451,7 @@ init_configure_mem(struct nvbios_init *init)
	data = init_rdvgai(init, 0x03c4, 0x01);
	init_wrvgai(init, 0x03c4, 0x01, data | 0x20);

	while ((addr = nv_ro32(bios, sdata)) != 0xffffffff) {
	for (; (addr = nv_ro32(bios, sdata)) != 0xffffffff; sdata += 4) {
		switch (addr) {
		case 0x10021c: /* CKE_NORMAL */
		case 0x1002d0: /* CMD_REFRESH */
@@ -2135,6 +2149,7 @@ static struct nvbios_init_opcode {
	[0x99] = { init_zm_auxch },
	[0x9a] = { init_i2c_long_if },
	[0xa9] = { init_gpio_ne },
	[0xaa] = { init_reserved },
};

#define init_opcode_nr (sizeof(init_opcode) / sizeof(init_opcode[0]))
+15 −20
Original line number Diff line number Diff line
@@ -278,7 +278,6 @@ nouveau_display_create(struct drm_device *dev)
{
	struct nouveau_drm *drm = nouveau_drm(dev);
	struct nouveau_display *disp;
	u32 pclass = dev->pdev->class >> 8;
	int ret, gen;

	disp = drm->display = kzalloc(sizeof(*disp), GFP_KERNEL);
@@ -340,8 +339,6 @@ nouveau_display_create(struct drm_device *dev)
	drm_kms_helper_poll_init(dev);
	drm_kms_helper_poll_disable(dev);

	if (nouveau_modeset == 1 ||
	    (nouveau_modeset < 0 && pclass == PCI_CLASS_DISPLAY_VGA)) {
	if (drm->vbios.dcb.entries) {
		if (nv_device(drm->device)->card_type < NV_50)
			ret = nv04_display_create(dev);
@@ -361,8 +358,6 @@ nouveau_display_create(struct drm_device *dev)
	}

	nouveau_backlight_init(dev);
	}

	return 0;

vblank_err:
+2 −1
Original line number Diff line number Diff line
@@ -454,7 +454,8 @@ nouveau_fbcon_init(struct drm_device *dev)
	int preferred_bpp;
	int ret;

	if (!dev->mode_config.num_crtc)
	if (!dev->mode_config.num_crtc ||
	    (dev->pdev->class >> 8) != PCI_CLASS_DISPLAY_VGA)
		return 0;

	fbcon = kzalloc(sizeof(struct nouveau_fbdev), GFP_KERNEL);
+1 −3
Original line number Diff line number Diff line
@@ -104,9 +104,7 @@ nouveau_sgdma_create_ttm(struct ttm_bo_device *bdev,
	else
		nvbe->ttm.ttm.func = &nv50_sgdma_backend;

	if (ttm_dma_tt_init(&nvbe->ttm, bdev, size, page_flags, dummy_read_page)) {
		kfree(nvbe);
	if (ttm_dma_tt_init(&nvbe->ttm, bdev, size, page_flags, dummy_read_page))
		return NULL;
	}
	return &nvbe->ttm.ttm;
}