From 6677565a3237c993f1518fb057402c24a8d89f17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 14 May 2007 15:29:38 +0200 Subject: [PATCH] i915: HWZ userspace interface cleanup. Remove anything dealing with the unused 'HWZ' ring buffer, do round robing of available BPLs internally and rename static_state_offset to static_state_start. --- shared-core/i915_dma.c | 3 --- shared-core/i915_drm.h | 6 +----- shared-core/i915_drv.h | 3 +-- shared-core/i915_hwz.c | 44 ++++++++++++++++++------------------------ 4 files changed, 21 insertions(+), 35 deletions(-) diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index 29de86f2..8621fafb 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c @@ -102,9 +102,6 @@ static int i915_dma_cleanup(drm_device_t * dev) if (dev_priv->hwb_ring.virtual_start) { drm_core_ioremapfree(&dev_priv->hwb_ring.map, dev); } - if (dev_priv->hwz_ring.virtual_start) { - drm_core_ioremapfree(&dev_priv->hwz_ring.map, dev); - } if (dev_priv->status_page_dmah) { drm_pci_free(dev, dev_priv->status_page_dmah); diff --git a/shared-core/i915_drm.h b/shared-core/i915_drm.h index 09b08642..3c7afaa0 100644 --- a/shared-core/i915_drm.h +++ b/shared-core/i915_drm.h @@ -330,9 +330,6 @@ typedef struct drm_i915_hwz { unsigned int hwb_start; unsigned int hwb_end; unsigned int hwb_size; - unsigned int hwz_start; - unsigned int hwz_end; - unsigned int hwz_size; } init; struct drm_i915_hwz_alloc { unsigned int num_buffers; @@ -340,11 +337,10 @@ typedef struct drm_i915_hwz { uint64_t cliprects; } alloc; struct drm_i915_hwz_render { - unsigned int bpl_num; unsigned int batch_start; int DR1; int DR4; - unsigned int static_state_offset; + unsigned int static_state_start; unsigned int static_state_size; unsigned int wait_flips; } render; diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index 41651f86..2bc41fd3 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h @@ -97,7 +97,6 @@ typedef struct drm_i915_private { drm_i915_sarea_t *sarea_priv; drm_i915_ring_buffer_t ring; drm_i915_ring_buffer_t hwb_ring; - drm_i915_ring_buffer_t hwz_ring; drm_dma_handle_t *status_page_dmah; void *hw_status_page; @@ -155,7 +154,7 @@ struct drm_i915_driver_file_fields { drm_dma_handle_t *bmp, **bmp_pool, **bins[3]; drm_clip_rect_t **bin_rects; - unsigned int num_bpls, num_bins, num_rects; + unsigned int bpl_num, num_bpls, num_bins, num_rects; unsigned int bin_cols, bin_rows, *bin_nrects; unsigned short bin_x1, bin_x2, bin_y1, bin_y2; }; diff --git a/shared-core/i915_hwz.c b/shared-core/i915_hwz.c index 7cdf183a..296abf8a 100644 --- a/shared-core/i915_hwz.c +++ b/shared-core/i915_hwz.c @@ -707,7 +707,7 @@ static int i915_hwz_render(drm_device_t *dev, { drm_i915_private_t *dev_priv = dev->dev_private; int ret, i; - int static_state_off = render->static_state_offset - + int static_state_off = render->static_state_start - virt_to_phys((void*)dev_priv->priv1_addr); RING_LOCALS; @@ -723,24 +723,25 @@ static int i915_hwz_render(drm_device_t *dev, return DRM_ERR(EINVAL); } - DRM_DEBUG("bpl_num = %d, batch_start = 0x%x\n", render->bpl_num, + filp_priv->bpl_num = (filp_priv->bpl_num + 1) % filp_priv->num_bpls; + + DRM_DEBUG("bpl_num = %d, batch_start = 0x%x\n", filp_priv->bpl_num, render->batch_start); if (dev_priv->hwb_ring.tail != (I915_READ(HWB_RING + RING_TAIL) & TAIL_ADDR)) { - DRM_INFO("Refreshing contexts of HWZ ring buffers\n"); + DRM_INFO("Refreshing context of HWB ring buffer\n"); i915_kernel_lost_context(dev_priv, &dev_priv->hwb_ring); - i915_kernel_lost_context(dev_priv, &dev_priv->hwz_ring); } - if (i915_hwb_idle(dev, filp_priv, render->bpl_num)) { + if (i915_hwb_idle(dev, filp_priv, filp_priv->bpl_num)) { return DRM_ERR(EBUSY); } - ret = i915_bin_init(dev, filp_priv, render->bpl_num); + ret = i915_bin_init(dev, filp_priv, filp_priv->bpl_num); if (ret) { - DRM_ERROR("Failed to initialize BPL %d\n", render->bpl_num); + DRM_ERROR("Failed to initialize BPL %d\n", filp_priv->bpl_num); return ret; } @@ -750,19 +751,19 @@ static int i915_hwz_render(drm_device_t *dev, I915_WRITE(BINSKPD, (VIRTUAL_BPL<<7) | (1<<(7+16))); #if VIRTUAL_BPL - ret = drm_buffer_object_validate(filp_priv->bpl[render->bpl_num], 0, 0); + ret = drm_buffer_object_validate(filp_priv->bpl[filp_priv->bpl_num], 0, 0); if (ret) { - DRM_ERROR("Failed to validate BPL %i\n", render->bpl_num); + DRM_ERROR("Failed to validate BPL %i\n", filp_priv->bpl_num); return ret; } - DRM_INFO("BPL %d validated to offset 0x%lx\n", render->bpl_num, - filp_priv->bpl[render->bpl_num]->offset); + DRM_INFO("BPL %d validated to offset 0x%lx\n", filp_priv->bpl_num, + filp_priv->bpl[filp_priv->bpl_num]->offset); - I915_WRITE(BINCTL, filp_priv->bpl[render->bpl_num]->offset | BC_MASK); + I915_WRITE(BINCTL, filp_priv->bpl[filp_priv->bpl_num]->offset | BC_MASK); #else - I915_WRITE(BINCTL, filp_priv->bpl[render->bpl_num]->busaddr | BC_MASK); + I915_WRITE(BINCTL, filp_priv->bpl[filp_priv->bpl_num]->busaddr | BC_MASK); #endif BEGIN_RING(&dev_priv->hwb_ring, 16); @@ -795,7 +796,7 @@ static int i915_hwz_render(drm_device_t *dev, ADVANCE_RING(); #if DEBUG_HWZ - i915_hwb_idle(dev, filp_priv, render->bpl_num); + i915_hwb_idle(dev, filp_priv, filp_priv->bpl_num); #endif BEGIN_RING(&dev_priv->hwb_ring, 2); @@ -812,7 +813,7 @@ static int i915_hwz_render(drm_device_t *dev, (render->wait_flips ? 2 : 0) + 1) & ~1); OUT_RING(GFX_OP_LOAD_INDIRECT | (0x3f<<8) | (0<<14) | 10); - OUT_RING(render->static_state_offset | (1<<1) | (1<<0)); + OUT_RING(render->static_state_start | (1<<1) | (1<<0)); OUT_RING(render->static_state_size - 1); OUT_RING(0); OUT_RING(0); @@ -847,7 +848,7 @@ static int i915_hwz_render(drm_device_t *dev, OUT_RING(rect->y2 << 16 | rect->x2); OUT_RING(render->DR4); OUT_RING(MI_BATCH_BUFFER_START); - OUT_RING(filp_priv->bins[render->bpl_num][i]->busaddr); + OUT_RING(filp_priv->bins[filp_priv->bpl_num][i]->busaddr); } } @@ -859,7 +860,7 @@ static int i915_hwz_render(drm_device_t *dev, if (filp_priv->num_rects & 0x1) OUT_RING(0); - i915_hwb_idle(dev, filp_priv, render->bpl_num); + i915_hwb_idle(dev, filp_priv, filp_priv->bpl_num); ADVANCE_RING(); @@ -900,15 +901,8 @@ static int i915_hwz_init(drm_device_t *dev, struct drm_i915_hwz_init *init) return DRM_ERR(ENOMEM); } - if (i915_init_ring(dev, &dev_priv->hwz_ring, init->hwz_start, - init->hwz_end, init->hwz_size, HP_RING)) { - DRM_ERROR("Failed to initialize HWZ ring buffer\n"); - return DRM_ERR(ENOMEM); - } - - DRM_DEBUG("Refreshing contexts of HWZ ring buffers\n"); + DRM_DEBUG("Refreshing context of HWB ring buffer\n"); i915_kernel_lost_context(dev_priv, &dev_priv->hwb_ring); - i915_kernel_lost_context(dev_priv, &dev_priv->hwz_ring); I915_WRITE(BINSCENE, BS_MASK | BS_OP_LOAD);