|
|
@@ -340,8 +340,39 @@ static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
|
|
|
static int radeon_pci_probe(struct pci_dev *pdev,
|
|
|
const struct pci_device_id *ent)
|
|
|
{
|
|
|
+ unsigned long flags = 0;
|
|
|
int ret;
|
|
|
|
|
|
+ if (!ent)
|
|
|
+ return -ENODEV; /* Avoid NULL-ptr deref in drm_get_pci_dev */
|
|
|
+
|
|
|
+ flags = ent->driver_data;
|
|
|
+
|
|
|
+ if (!radeon_si_support) {
|
|
|
+ switch (flags & RADEON_FAMILY_MASK) {
|
|
|
+ case CHIP_TAHITI:
|
|
|
+ case CHIP_PITCAIRN:
|
|
|
+ case CHIP_VERDE:
|
|
|
+ case CHIP_OLAND:
|
|
|
+ case CHIP_HAINAN:
|
|
|
+ dev_info(&pdev->dev,
|
|
|
+ "SI support disabled by module param\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!radeon_cik_support) {
|
|
|
+ switch (flags & RADEON_FAMILY_MASK) {
|
|
|
+ case CHIP_KAVERI:
|
|
|
+ case CHIP_BONAIRE:
|
|
|
+ case CHIP_HAWAII:
|
|
|
+ case CHIP_KABINI:
|
|
|
+ case CHIP_MULLINS:
|
|
|
+ dev_info(&pdev->dev,
|
|
|
+ "CIK support disabled by module param\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (vga_switcheroo_client_probe_defer(pdev))
|
|
|
return -EPROBE_DEFER;
|
|
|
|