Commit 7798a736 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-misc-fixes-2021-11-25' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes



One removal fix for hyperv, one fix in aspeed for the vga_pw sysfs file
content, one error-checking fix for vc4 and two fixes for nouveau, one
to support a new device and another one to properly check for errors.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20211125101819.ynu7zgbs7yfwedri@houat
parents f3caa226 e048834c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -291,7 +291,7 @@ vga_pw_show(struct device *dev, struct device_attribute *attr, char *buf)
	if (rc)
		return rc;

	return sprintf(buf, "%u\n", reg & 1);
	return sprintf(buf, "%u\n", reg);
}
static DEVICE_ATTR_RO(vga_pw);

+18 −1
Original line number Diff line number Diff line
@@ -225,12 +225,29 @@ static int hyperv_vmbus_remove(struct hv_device *hdev)
{
	struct drm_device *dev = hv_get_drvdata(hdev);
	struct hyperv_drm_device *hv = to_hv(dev);
	struct pci_dev *pdev;

	drm_dev_unplug(dev);
	drm_atomic_helper_shutdown(dev);
	vmbus_close(hdev->channel);
	hv_set_drvdata(hdev, NULL);

	/*
	 * Free allocated MMIO memory only on Gen2 VMs.
	 * On Gen1 VMs, release the PCI device
	 */
	if (efi_enabled(EFI_BOOT)) {
		vmbus_free_mmio(hv->mem->start, hv->fb_size);
	} else {
		pdev = pci_get_device(PCI_VENDOR_ID_MICROSOFT,
				      PCI_DEVICE_ID_HYPERV_VIDEO, NULL);
		if (!pdev) {
			drm_err(dev, "Unable to find PCI Hyper-V video\n");
			return -ENODEV;
		}
		pci_release_region(pdev, 0);
		pci_dev_put(pdev);
	}

	return 0;
}
+22 −0
Original line number Diff line number Diff line
@@ -2626,6 +2626,27 @@ nv174_chipset = {
	.fifo     = { 0x00000001, ga102_fifo_new },
};

static const struct nvkm_device_chip
nv176_chipset = {
	.name = "GA106",
	.bar      = { 0x00000001, tu102_bar_new },
	.bios     = { 0x00000001, nvkm_bios_new },
	.devinit  = { 0x00000001, ga100_devinit_new },
	.fb       = { 0x00000001, ga102_fb_new },
	.gpio     = { 0x00000001, ga102_gpio_new },
	.i2c      = { 0x00000001, gm200_i2c_new },
	.imem     = { 0x00000001, nv50_instmem_new },
	.mc       = { 0x00000001, ga100_mc_new },
	.mmu      = { 0x00000001, tu102_mmu_new },
	.pci      = { 0x00000001, gp100_pci_new },
	.privring = { 0x00000001, gm200_privring_new },
	.timer    = { 0x00000001, gk20a_timer_new },
	.top      = { 0x00000001, ga100_top_new },
	.disp     = { 0x00000001, ga102_disp_new },
	.dma      = { 0x00000001, gv100_dma_new },
	.fifo     = { 0x00000001, ga102_fifo_new },
};

static const struct nvkm_device_chip
nv177_chipset = {
	.name = "GA107",
@@ -3072,6 +3093,7 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
		case 0x168: device->chip = &nv168_chipset; break;
		case 0x172: device->chip = &nv172_chipset; break;
		case 0x174: device->chip = &nv174_chipset; break;
		case 0x176: device->chip = &nv176_chipset; break;
		case 0x177: device->chip = &nv177_chipset; break;
		default:
			if (nvkm_boolopt(device->cfgopt, "NvEnableUnsupportedChipsets", false)) {
+4 −2
Original line number Diff line number Diff line
@@ -207,11 +207,13 @@ int
gm200_acr_wpr_parse(struct nvkm_acr *acr)
{
	const struct wpr_header *hdr = (void *)acr->wpr_fw->data;
	struct nvkm_acr_lsfw *lsfw;

	while (hdr->falcon_id != WPR_HEADER_V0_FALCON_ID_INVALID) {
		wpr_header_dump(&acr->subdev, hdr);
		if (!nvkm_acr_lsfw_add(NULL, acr, NULL, (hdr++)->falcon_id))
			return -ENOMEM;
		lsfw = nvkm_acr_lsfw_add(NULL, acr, NULL, (hdr++)->falcon_id);
		if (IS_ERR(lsfw))
			return PTR_ERR(lsfw);
	}

	return 0;
+4 −2
Original line number Diff line number Diff line
@@ -161,11 +161,13 @@ int
gp102_acr_wpr_parse(struct nvkm_acr *acr)
{
	const struct wpr_header_v1 *hdr = (void *)acr->wpr_fw->data;
	struct nvkm_acr_lsfw *lsfw;

	while (hdr->falcon_id != WPR_HEADER_V1_FALCON_ID_INVALID) {
		wpr_header_v1_dump(&acr->subdev, hdr);
		if (!nvkm_acr_lsfw_add(NULL, acr, NULL, (hdr++)->falcon_id))
			return -ENOMEM;
		lsfw = nvkm_acr_lsfw_add(NULL, acr, NULL, (hdr++)->falcon_id);
		if (IS_ERR(lsfw))
			return PTR_ERR(lsfw);
	}

	return 0;
Loading