Browse Source

drm/radeon: add a module parameter to control deep color support

Some monitors seem to have problems with deep color enabled, even
though they claim to support it.  I'm not sure if the monitor
need a quirk or if the driver is doing something the monitor doesn't
like.  At this point lets just disable deep color by default like
we did for hdmi audio and work through the bugs so we can eventually
enable it by default.

bug:
https://bugs.freedesktop.org/show_bug.cgi?id=80531

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Alex Deucher 11 năm trước cách đây
mục cha
commit
a624f4290a

+ 1 - 0
drivers/gpu/drm/radeon/radeon.h

@@ -102,6 +102,7 @@ extern int radeon_runtime_pm;
 extern int radeon_hard_reset;
 extern int radeon_hard_reset;
 extern int radeon_vm_size;
 extern int radeon_vm_size;
 extern int radeon_vm_block_size;
 extern int radeon_vm_block_size;
+extern int radeon_deep_color;
 
 
 /*
 /*
  * Copy from radeon_drv.h so we don't have to include both and have conflicting
  * Copy from radeon_drv.h so we don't have to include both and have conflicting

+ 3 - 0
drivers/gpu/drm/radeon/radeon_connectors.c

@@ -199,6 +199,9 @@ int radeon_get_monitor_bpc(struct drm_connector *connector)
 		}
 		}
 	}
 	}
 
 
+	if ((radeon_deep_color == 0) && (bpc > 8))
+		bpc = 8;
+
 	DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n",
 	DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n",
 			  connector->name, connector->display_info.bpc, bpc);
 			  connector->name, connector->display_info.bpc, bpc);
 
 

+ 4 - 0
drivers/gpu/drm/radeon/radeon_drv.c

@@ -175,6 +175,7 @@ int radeon_runtime_pm = -1;
 int radeon_hard_reset = 0;
 int radeon_hard_reset = 0;
 int radeon_vm_size = 4096;
 int radeon_vm_size = 4096;
 int radeon_vm_block_size = 9;
 int radeon_vm_block_size = 9;
+int radeon_deep_color = 0;
 
 
 MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
 MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
 module_param_named(no_wb, radeon_no_wb, int, 0444);
 module_param_named(no_wb, radeon_no_wb, int, 0444);
@@ -248,6 +249,9 @@ module_param_named(vm_size, radeon_vm_size, int, 0444);
 MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default 9)");
 MODULE_PARM_DESC(vm_block_size, "VM page table size in bits (default 9)");
 module_param_named(vm_block_size, radeon_vm_block_size, int, 0444);
 module_param_named(vm_block_size, radeon_vm_block_size, int, 0444);
 
 
+MODULE_PARM_DESC(deep_color, "Deep Color support (1 = enable, 0 = disable (default))");
+module_param_named(deep_color, radeon_deep_color, int, 0444);
+
 static struct pci_device_id pciidlist[] = {
 static struct pci_device_id pciidlist[] = {
 	radeon_PCI_IDS
 	radeon_PCI_IDS
 };
 };