forked from KolibriOS/kolibrios
i915: vsync video support
git-svn-id: svn://kolibrios.org@4389 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c42c7651f7
commit
34c5bdcedc
@ -435,7 +435,7 @@ static int intel_gtt_init(void)
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
asm volatile("wbinvd");
|
asm volatile("wbinvd":::"memory");
|
||||||
|
|
||||||
intel_private.stolen_size = intel_gtt_stolen_size();
|
intel_private.stolen_size = intel_gtt_stolen_size();
|
||||||
|
|
||||||
@ -578,6 +578,60 @@ void intel_gtt_clear_range(unsigned int first_entry, unsigned int num_entries)
|
|||||||
}
|
}
|
||||||
readl(intel_private.gtt+i-1);
|
readl(intel_private.gtt+i-1);
|
||||||
}
|
}
|
||||||
|
static void intel_i915_setup_chipset_flush(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
u32 temp;
|
||||||
|
|
||||||
|
pci_read_config_dword(intel_private.bridge_dev, I915_IFPADDR, &temp);
|
||||||
|
if (!(temp & 0x1)) {
|
||||||
|
// intel_alloc_chipset_flush_resource();
|
||||||
|
// intel_private.resource_valid = 1;
|
||||||
|
// pci_write_config_dword(intel_private.bridge_dev, I915_IFPADDR, (intel_private.ifp_resource.start & 0xffffffff) | 0x1);
|
||||||
|
} else {
|
||||||
|
temp &= ~1;
|
||||||
|
|
||||||
|
intel_private.resource_valid = 1;
|
||||||
|
intel_private.ifp_resource.start = temp;
|
||||||
|
intel_private.ifp_resource.end = temp + PAGE_SIZE;
|
||||||
|
// ret = request_resource(&iomem_resource, &intel_private.ifp_resource);
|
||||||
|
/* some BIOSes reserve this area in a pnp some don't */
|
||||||
|
// if (ret)
|
||||||
|
// intel_private.resource_valid = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void intel_i965_g33_setup_chipset_flush(void)
|
||||||
|
{
|
||||||
|
u32 temp_hi, temp_lo;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
pci_read_config_dword(intel_private.bridge_dev, I965_IFPADDR + 4, &temp_hi);
|
||||||
|
pci_read_config_dword(intel_private.bridge_dev, I965_IFPADDR, &temp_lo);
|
||||||
|
|
||||||
|
if (!(temp_lo & 0x1)) {
|
||||||
|
|
||||||
|
// intel_alloc_chipset_flush_resource();
|
||||||
|
|
||||||
|
// intel_private.resource_valid = 1;
|
||||||
|
// pci_write_config_dword(intel_private.bridge_dev, I965_IFPADDR + 4,
|
||||||
|
// upper_32_bits(intel_private.ifp_resource.start));
|
||||||
|
// pci_write_config_dword(intel_private.bridge_dev, I965_IFPADDR, (intel_private.ifp_resource.start & 0xffffffff) | 0x1);
|
||||||
|
} else {
|
||||||
|
u64 l64;
|
||||||
|
|
||||||
|
temp_lo &= ~0x1;
|
||||||
|
l64 = ((u64)temp_hi << 32) | temp_lo;
|
||||||
|
|
||||||
|
intel_private.resource_valid = 1;
|
||||||
|
intel_private.ifp_resource.start = l64;
|
||||||
|
intel_private.ifp_resource.end = l64 + PAGE_SIZE;
|
||||||
|
// ret = request_resource(&iomem_resource, &intel_private.ifp_resource);
|
||||||
|
/* some BIOSes reserve this area in a pnp some don't */
|
||||||
|
// if (ret)
|
||||||
|
// intel_private.resource_valid = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void intel_i9xx_setup_flush(void)
|
static void intel_i9xx_setup_flush(void)
|
||||||
{
|
{
|
||||||
@ -589,20 +643,18 @@ static void intel_i9xx_setup_flush(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* setup a resource for this object */
|
/* setup a resource for this object */
|
||||||
// intel_private.ifp_resource.name = "Intel Flush Page";
|
intel_private.ifp_resource.name = "Intel Flush Page";
|
||||||
// intel_private.ifp_resource.flags = IORESOURCE_MEM;
|
intel_private.ifp_resource.flags = IORESOURCE_MEM;
|
||||||
|
|
||||||
intel_private.resource_valid = 0;
|
|
||||||
|
|
||||||
/* Setup chipset flush for 915 */
|
/* Setup chipset flush for 915 */
|
||||||
// if (IS_G33 || INTEL_GTT_GEN >= 4) {
|
if (IS_G33 || INTEL_GTT_GEN >= 4) {
|
||||||
// intel_i965_g33_setup_chipset_flush();
|
intel_i965_g33_setup_chipset_flush();
|
||||||
// } else {
|
} else {
|
||||||
// intel_i915_setup_chipset_flush();
|
intel_i915_setup_chipset_flush();
|
||||||
// }
|
}
|
||||||
|
|
||||||
// if (intel_private.ifp_resource.start)
|
if (intel_private.ifp_resource.start)
|
||||||
// intel_private.i9xx_flush_page = ioremap_nocache(intel_private.ifp_resource.start, PAGE_SIZE);
|
intel_private.i9xx_flush_page = ioremap(intel_private.ifp_resource.start, PAGE_SIZE);
|
||||||
if (!intel_private.i9xx_flush_page)
|
if (!intel_private.i9xx_flush_page)
|
||||||
dev_err(&intel_private.pcidev->dev,
|
dev_err(&intel_private.pcidev->dev,
|
||||||
"can't ioremap flush page - no chipset flushing\n");
|
"can't ioremap flush page - no chipset flushing\n");
|
||||||
|
@ -16,9 +16,9 @@ CFLAGS_OPT = -Os -march=i686 -msse2 -fomit-frame-pointer -fno-builtin-printf -mn
|
|||||||
CFLAGS_OPT+= -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2 -mno-ms-bitfields -flto
|
CFLAGS_OPT+= -mpreferred-stack-boundary=2 -mincoming-stack-boundary=2 -mno-ms-bitfields -flto
|
||||||
CFLAGS = -c $(INCLUDES) $(DEFINES) $(CFLAGS_OPT)
|
CFLAGS = -c $(INCLUDES) $(DEFINES) $(CFLAGS_OPT)
|
||||||
|
|
||||||
LIBPATH:= $(DDK_TOPDIR)
|
LIBPATH:= ../../../ddk
|
||||||
|
|
||||||
LIBS:= libddk.a libcore.a libgcc.a
|
LIBS:= -lddk -lcore -lgcc
|
||||||
|
|
||||||
LDFLAGS = -e,_drvEntry,-nostdlib,-shared,-s,--image-base,0,--file-alignment,512,--section-alignment,4096
|
LDFLAGS = -e,_drvEntry,-nostdlib,-shared,-s,--image-base,0,--file-alignment,512,--section-alignment,4096
|
||||||
|
|
||||||
|
@ -2652,9 +2652,6 @@ static void i965_write_fence_reg(struct drm_device *dev, int reg,
|
|||||||
POSTING_READ(fence_reg + 4);
|
POSTING_READ(fence_reg + 4);
|
||||||
|
|
||||||
I915_WRITE(fence_reg + 0, val);
|
I915_WRITE(fence_reg + 0, val);
|
||||||
|
|
||||||
dbgprintf("%s val %x%x\n",__FUNCTION__, (int)(val >> 32), (int)val);
|
|
||||||
|
|
||||||
POSTING_READ(fence_reg);
|
POSTING_READ(fence_reg);
|
||||||
} else {
|
} else {
|
||||||
I915_WRITE(fence_reg + 4, 0);
|
I915_WRITE(fence_reg + 4, 0);
|
||||||
|
@ -1828,8 +1828,6 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
|
|||||||
u32 alignment;
|
u32 alignment;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
switch (obj->tiling_mode) {
|
switch (obj->tiling_mode) {
|
||||||
case I915_TILING_NONE:
|
case I915_TILING_NONE:
|
||||||
if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
|
if (IS_BROADWATER(dev) || IS_CRESTLINE(dev))
|
||||||
@ -1879,8 +1877,6 @@ intel_pin_and_fence_fb_obj(struct drm_device *dev,
|
|||||||
|
|
||||||
dev_priv->mm.interruptible = true;
|
dev_priv->mm.interruptible = true;
|
||||||
|
|
||||||
LEAVE();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_unpin:
|
err_unpin:
|
||||||
|
@ -100,8 +100,6 @@ static int intelfb_create(struct drm_fb_helper *helper,
|
|||||||
struct device *device = &dev->pdev->dev;
|
struct device *device = &dev->pdev->dev;
|
||||||
int size, ret;
|
int size, ret;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
/* we don't do packed 24bpp */
|
/* we don't do packed 24bpp */
|
||||||
if (sizes->surface_bpp == 24)
|
if (sizes->surface_bpp == 24)
|
||||||
sizes->surface_bpp = 32;
|
sizes->surface_bpp = 32;
|
||||||
|
@ -319,7 +319,7 @@ int get_boot_mode(struct drm_connector *connector, videomode_t *usermode)
|
|||||||
|
|
||||||
list_for_each_entry(mode, &connector->modes, head)
|
list_for_each_entry(mode, &connector->modes, head)
|
||||||
{
|
{
|
||||||
dbgprintf("check mode w:%d h:%d %dHz\n",
|
DRM_DEBUG_KMS("check mode w:%d h:%d %dHz\n",
|
||||||
drm_mode_width(mode), drm_mode_height(mode),
|
drm_mode_width(mode), drm_mode_height(mode),
|
||||||
drm_mode_vrefresh(mode));
|
drm_mode_vrefresh(mode));
|
||||||
|
|
||||||
@ -348,8 +348,6 @@ int init_display_kms(struct drm_device *dev, videomode_t *usermode)
|
|||||||
u32_t ifl;
|
u32_t ifl;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
ENTER();
|
|
||||||
|
|
||||||
mutex_lock(&dev->mode_config.mutex);
|
mutex_lock(&dev->mode_config.mutex);
|
||||||
|
|
||||||
connector = get_active_connector(dev) ;
|
connector = get_active_connector(dev) ;
|
||||||
@ -366,8 +364,6 @@ int init_display_kms(struct drm_device *dev, videomode_t *usermode)
|
|||||||
if(crtc == NULL)
|
if(crtc == NULL)
|
||||||
crtc = get_possible_crtc(dev, encoder);
|
crtc = get_possible_crtc(dev, encoder);
|
||||||
|
|
||||||
dbgprintf("CRTC %p\n", crtc);
|
|
||||||
|
|
||||||
if(crtc == NULL)
|
if(crtc == NULL)
|
||||||
{
|
{
|
||||||
DRM_DEBUG_KMS("No CRTC for encoder %d\n", encoder->base.id);
|
DRM_DEBUG_KMS("No CRTC for encoder %d\n", encoder->base.id);
|
||||||
@ -701,6 +697,9 @@ cursor_t* __stdcall select_cursor_kms(cursor_t *cursor)
|
|||||||
|
|
||||||
int i915_fbinfo(struct drm_i915_fb_info *fb)
|
int i915_fbinfo(struct drm_i915_fb_info *fb)
|
||||||
{
|
{
|
||||||
|
struct drm_i915_private *dev_priv = os_display->ddev->dev_private;
|
||||||
|
struct intel_crtc *crtc = to_intel_crtc(os_display->crtc);
|
||||||
|
|
||||||
struct drm_i915_gem_object *obj = get_fb_obj();
|
struct drm_i915_gem_object *obj = get_fb_obj();
|
||||||
|
|
||||||
fb->name = obj->base.name;
|
fb->name = obj->base.name;
|
||||||
@ -708,6 +707,8 @@ int i915_fbinfo(struct drm_i915_fb_info *fb)
|
|||||||
fb->height = os_display->height;
|
fb->height = os_display->height;
|
||||||
fb->pitch = obj->stride;
|
fb->pitch = obj->stride;
|
||||||
fb->tiling = obj->tiling_mode;
|
fb->tiling = obj->tiling_mode;
|
||||||
|
fb->crtc = crtc->base.base.id;
|
||||||
|
fb->pipe = crtc->pipe;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -200,7 +200,7 @@ kos_gem_fb_object_create(struct drm_device *dev,
|
|||||||
/* Allocate a reference for the name table. */
|
/* Allocate a reference for the name table. */
|
||||||
drm_gem_object_reference(&obj->base);
|
drm_gem_object_reference(&obj->base);
|
||||||
|
|
||||||
printf("%s allocate fb name %d\n", __FUNCTION__, obj->base.name );
|
DRM_DEBUG_KMS("%s allocate fb name %d\n", __FUNCTION__, obj->base.name );
|
||||||
}
|
}
|
||||||
|
|
||||||
idr_preload_end();
|
idr_preload_end();
|
||||||
|
Loading…
Reference in New Issue
Block a user