Subversion Repositories Kolibri OS

Rev

Rev 3298 | Rev 3482 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3298 Rev 3480
Line 995... Line 995...
995
        value = 1;
995
        value = 1;
996
		break;
996
		break;
997
	case I915_PARAM_HAS_PINNED_BATCHES:
997
	case I915_PARAM_HAS_PINNED_BATCHES:
998
		value = 1;
998
		value = 1;
999
		break;
999
		break;
-
 
1000
	case I915_PARAM_HAS_EXEC_NO_RELOC:
-
 
1001
		value = 1;
-
 
1002
        break;
-
 
1003
	case I915_PARAM_HAS_EXEC_HANDLE_LUT:
-
 
1004
        value = 1;
-
 
1005
        break;
1000
	default:
1006
	default:
1001
		DRM_DEBUG_DRIVER("Unknown parameter %d\n",
1007
		DRM_DEBUG_DRIVER("Unknown parameter %d\n",
1002
				 param->param);
1008
				 param->param);
1003
		return -EINVAL;
1009
		return -EINVAL;
1004
	}
1010
	}
Line 1049... Line 1055...
1049
	return 0;
1055
	return 0;
1050
}
1056
}
1051
#endif
1057
#endif
Line 1052... Line -...
1052
 
-
 
1053
 
-
 
1054
static int i915_set_status_page(struct drm_device *dev, void *data,
-
 
1055
				struct drm_file *file_priv)
-
 
1056
{
-
 
1057
	drm_i915_private_t *dev_priv = dev->dev_private;
-
 
1058
	drm_i915_hws_addr_t *hws = data;
-
 
1059
	struct intel_ring_buffer *ring;
-
 
1060
 
-
 
1061
	if (drm_core_check_feature(dev, DRIVER_MODESET))
-
 
1062
		return -ENODEV;
-
 
1063
 
-
 
1064
	if (!I915_NEED_GFX_HWS(dev))
-
 
1065
		return -EINVAL;
-
 
1066
 
-
 
1067
	if (!dev_priv) {
-
 
1068
		DRM_ERROR("called with no initialization\n");
-
 
1069
		return -EINVAL;
-
 
1070
	}
-
 
1071
 
-
 
1072
	if (drm_core_check_feature(dev, DRIVER_MODESET)) {
-
 
1073
		WARN(1, "tried to set status page when mode setting active\n");
-
 
1074
		return 0;
-
 
1075
	}
-
 
1076
 
-
 
1077
	DRM_DEBUG_DRIVER("set status page addr 0x%08x\n", (u32)hws->addr);
-
 
1078
 
-
 
1079
	ring = LP_RING(dev_priv);
-
 
1080
	ring->status_page.gfx_addr = hws->addr & (0x1ffff<<12);
-
 
1081
 
-
 
1082
	dev_priv->dri1.gfx_hws_cpu_addr =
-
 
1083
        ioremap(dev_priv->mm.gtt_base_addr + hws->addr, 4096);
-
 
1084
	if (dev_priv->dri1.gfx_hws_cpu_addr == NULL) {
-
 
1085
		i915_dma_cleanup(dev);
-
 
1086
		ring->status_page.gfx_addr = 0;
-
 
1087
		DRM_ERROR("can not ioremap virtual address for"
-
 
1088
				" G33 hw status page\n");
-
 
1089
		return -ENOMEM;
-
 
1090
	}
-
 
1091
 
-
 
1092
    memset(dev_priv->dri1.gfx_hws_cpu_addr, 0, PAGE_SIZE);
-
 
1093
	I915_WRITE(HWS_PGA, ring->status_page.gfx_addr);
-
 
1094
 
-
 
1095
	DRM_DEBUG_DRIVER("load hws HWS_PGA with gfx mem 0x%x\n",
-
 
1096
			 ring->status_page.gfx_addr);
-
 
1097
	DRM_DEBUG_DRIVER("load hws at %p\n",
-
 
1098
			 ring->status_page.page_addr);
-
 
Line 1099... Line 1058...
1099
	return 0;
1058
 
1100
}
1059
 
1101
 
1060
 
Line 1198... Line 1157...
1198
	 */
1157
	 */
1199
	ret = i915_gem_init_stolen(dev);
1158
	ret = i915_gem_init_stolen(dev);
1200
	if (ret)
1159
	if (ret)
1201
		goto cleanup_vga_switcheroo;
1160
		goto cleanup_vga_switcheroo;
Line -... Line 1161...
-
 
1161
 
-
 
1162
	ret = drm_irq_install(dev);
-
 
1163
	if (ret)
-
 
1164
		goto cleanup_gem_stolen;
-
 
1165
 
-
 
1166
	/* Important: The output setup functions called by modeset_init need
1202
 
1167
	 * working irqs for e.g. gmbus and dp aux transfers. */
Line 1203... Line 1168...
1203
    intel_modeset_init(dev);
1168
    intel_modeset_init(dev);
1204
 
1169
 
1205
	ret = i915_gem_init(dev);
1170
	ret = i915_gem_init(dev);
Line 1206... Line -...
1206
    if (ret)
-
 
Line 1207... Line 1171...
1207
		goto cleanup_gem_stolen;
1171
    if (ret)
1208
 
-
 
1209
    intel_modeset_gem_init(dev);
-
 
Line 1210... Line 1172...
1210
 
1172
		goto cleanup_irq;
1211
	ret = drm_irq_install(dev);
1173
 
1212
	if (ret)
1174
 
Line 1213... Line 1175...
1213
		goto cleanup_gem;
1175
    intel_modeset_gem_init(dev);
1214
 
1176
 
1215
    /* Always safe in the mode setting case. */
1177
    /* Always safe in the mode setting case. */
Line -... Line 1178...
-
 
1178
    /* FIXME: do pre/post-mode set stuff in core KMS code */
-
 
1179
    dev->vblank_disable_allowed = 1;
-
 
1180
 
-
 
1181
    ret = intel_fbdev_init(dev);
-
 
1182
    if (ret)
-
 
1183
		goto cleanup_gem;
-
 
1184
 
-
 
1185
	/* Only enable hotplug handling once the fbdev is fully set up. */
-
 
1186
	intel_hpd_init(dev);
-
 
1187
 
-
 
1188
	/*
-
 
1189
	 * Some ports require correctly set-up hpd registers for detection to
-
 
1190
	 * work properly (leading to ghost connected connector status), e.g. VGA
-
 
1191
	 * on gm45.  Hence we can only set up the initial fbdev config after hpd
-
 
1192
	 * irqs are fully enabled. Now we should scan for the initial config
-
 
1193
	 * only once hotplug handling is enabled, but due to screwed-up locking
-
 
1194
	 * around kms/fbdev init we can't protect the fdbev initial config
-
 
1195
	 * scanning against hotplug events. Hence do this first and ignore the
1216
    /* FIXME: do pre/post-mode set stuff in core KMS code */
1196
	 * tiny window where we will loose hotplug notifactions.
Line 1217... Line 1197...
1217
    dev->vblank_disable_allowed = 1;
1197
	 */
1218
 
1198
	intel_fbdev_initial_config(dev);
Line 1219... Line 1199...
1219
    ret = intel_fbdev_init(dev);
1199
 
Line -... Line 1200...
-
 
1200
	/* Only enable hotplug handling once the fbdev is fully set up. */
-
 
1201
	dev_priv->enable_hotplug_processing = true;
-
 
1202
 
-
 
1203
	drm_kms_helper_poll_init(dev);
-
 
1204
 
1220
    if (ret)
1205
    /* We're off and running w/KMS */
1221
        goto cleanup_irq;
1206
    dev_priv->mm.suspended = 0;
1222
 
-
 
1223
//    drm_kms_helper_poll_init(dev);
-
 
1224
 
-
 
1225
    /* We're off and running w/KMS */
-
 
1226
    dev_priv->mm.suspended = 0;
-
 
1227
 
1207
 
1228
    return 0;
1208
    return 0;
1229
 
1209
 
1230
cleanup_irq:
1210
cleanup_gem:
1231
//    drm_irq_uninstall(dev);
1211
	mutex_lock(&dev->struct_mutex);
Line 1334... Line 1314...
1334
        DRM_ERROR("failed to map registers\n");
1314
        DRM_ERROR("failed to map registers\n");
1335
        ret = -EIO;
1315
        ret = -EIO;
1336
		goto put_gmch;
1316
		goto put_gmch;
1337
    }
1317
    }
Line 1338... Line 1318...
1338
 
1318
 
1339
	aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
-
 
Line 1340... Line 1319...
1340
	dev_priv->mm.gtt_base_addr = dev_priv->mm.gtt->gma_bus_addr;
1319
	aperture_size = dev_priv->gtt.mappable_end;
1341
 
1320
 
Line 1387... Line 1366...
1387
     * be lost or delayed, but we use them anyways to avoid
1366
     * be lost or delayed, but we use them anyways to avoid
1388
     * stuck interrupts on some machines.
1367
     * stuck interrupts on some machines.
1389
     */
1368
     */
Line 1390... Line 1369...
1390
 
1369
 
1391
    spin_lock_init(&dev_priv->irq_lock);
1370
    spin_lock_init(&dev_priv->irq_lock);
1392
    spin_lock_init(&dev_priv->error_lock);
1371
	spin_lock_init(&dev_priv->gpu_error.lock);
1393
	spin_lock_init(&dev_priv->rps.lock);
1372
	spin_lock_init(&dev_priv->rps.lock);
Line 1394... Line 1373...
1394
	spin_lock_init(&dev_priv->dpio_lock);
1373
	mutex_init(&dev_priv->dpio_lock);
-
 
1374
 
Line 1395... Line 1375...
1395
 
1375
	mutex_init(&dev_priv->rps.hw_lock);
1396
	mutex_init(&dev_priv->rps.hw_lock);
1376
	mutex_init(&dev_priv->modeset_restore_lock);
1397
 
1377
 
1398
	if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
1378
	if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
Line 1442... Line 1422...
1442
//	}
1422
//	}
1443
//	io_mapping_free(dev_priv->mm.gtt_mapping);
1423
//	io_mapping_free(dev_priv->mm.gtt_mapping);
1444
out_rmmap:
1424
out_rmmap:
1445
    pci_iounmap(dev->pdev, dev_priv->regs);
1425
    pci_iounmap(dev->pdev, dev_priv->regs);
1446
put_gmch:
1426
put_gmch:
1447
//   intel_gmch_remove();
1427
//	dev_priv->gtt.gtt_remove(dev);
1448
put_bridge:
1428
put_bridge:
1449
//    pci_dev_put(dev_priv->bridge_dev);
1429
//    pci_dev_put(dev_priv->bridge_dev);
1450
free_priv:
1430
free_priv:
1451
    kfree(dev_priv);
1431
    kfree(dev_priv);
1452
    return ret;
1432
    return ret;
Line 1474... Line 1454...
1474
	mutex_unlock(&dev->struct_mutex);
1454
	mutex_unlock(&dev->struct_mutex);
Line 1475... Line 1455...
1475
 
1455
 
1476
	/* Cancel the retire work handler, which should be idle now. */
1456
	/* Cancel the retire work handler, which should be idle now. */
Line 1477... Line 1457...
1477
	cancel_delayed_work_sync(&dev_priv->mm.retire_work);
1457
	cancel_delayed_work_sync(&dev_priv->mm.retire_work);
1478
 
1458
 
1479
	io_mapping_free(dev_priv->mm.gtt_mapping);
1459
	io_mapping_free(dev_priv->gtt.mappable);
1480
	if (dev_priv->mm.gtt_mtrr >= 0) {
1460
	if (dev_priv->mm.gtt_mtrr >= 0) {
1481
		mtrr_del(dev_priv->mm.gtt_mtrr,
1461
		mtrr_del(dev_priv->mm.gtt_mtrr,
1482
			 dev_priv->mm.gtt_base_addr,
1462
			 dev_priv->gtt.mappable_base,
1483
			 dev_priv->mm.gtt->gtt_mappable_entries * PAGE_SIZE);
1463
			 dev_priv->gtt.mappable_end);
Line 1484... Line 1464...
1484
		dev_priv->mm.gtt_mtrr = -1;
1464
		dev_priv->mm.gtt_mtrr = -1;
Line 1504... Line 1484...
1504
		vga_switcheroo_unregister_client(dev->pdev);
1484
		vga_switcheroo_unregister_client(dev->pdev);
1505
		vga_client_register(dev->pdev, NULL, NULL, NULL);
1485
		vga_client_register(dev->pdev, NULL, NULL, NULL);
1506
	}
1486
	}
Line 1507... Line 1487...
1507
 
1487
 
1508
	/* Free error state after interrupts are fully disabled. */
1488
	/* Free error state after interrupts are fully disabled. */
1509
	del_timer_sync(&dev_priv->hangcheck_timer);
1489
	del_timer_sync(&dev_priv->gpu_error.hangcheck_timer);
1510
	cancel_work_sync(&dev_priv->error_work);
1490
	cancel_work_sync(&dev_priv->gpu_error.work);
Line 1511... Line 1491...
1511
	i915_destroy_error_state(dev);
1491
	i915_destroy_error_state(dev);
1512
 
1492
 
Line 1524... Line 1504...
1524
		i915_gem_cleanup_ringbuffer(dev);
1504
		i915_gem_cleanup_ringbuffer(dev);
1525
		i915_gem_context_fini(dev);
1505
		i915_gem_context_fini(dev);
1526
		mutex_unlock(&dev->struct_mutex);
1506
		mutex_unlock(&dev->struct_mutex);
1527
		i915_gem_cleanup_aliasing_ppgtt(dev);
1507
		i915_gem_cleanup_aliasing_ppgtt(dev);
1528
		i915_gem_cleanup_stolen(dev);
1508
		i915_gem_cleanup_stolen(dev);
1529
		drm_mm_takedown(&dev_priv->mm.stolen);
-
 
1530
 
-
 
1531
		intel_cleanup_overlay(dev);
-
 
Line 1532... Line 1509...
1532
 
1509
 
1533
		if (!I915_NEED_GFX_HWS(dev))
1510
		if (!I915_NEED_GFX_HWS(dev))
1534
			i915_free_hws(dev);
1511
			i915_free_hws(dev);
Line 1539... Line 1516...
1539
 
1516
 
1540
	intel_teardown_gmbus(dev);
1517
	intel_teardown_gmbus(dev);
Line 1541... Line 1518...
1541
	intel_teardown_mchbar(dev);
1518
	intel_teardown_mchbar(dev);
-
 
1519
 
-
 
1520
	destroy_workqueue(dev_priv->wq);
-
 
1521
	pm_qos_remove_request(&dev_priv->pm_qos);
-
 
1522
 
Line 1542... Line 1523...
1542
 
1523
	if (dev_priv->slab)
1543
	destroy_workqueue(dev_priv->wq);
1524
		kmem_cache_destroy(dev_priv->slab);
Line 1544... Line 1525...
1544
 
1525