summaryrefslogtreecommitdiff
path: root/drivers/mxc/amd-gpu/common/gsl_drawctxt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mxc/amd-gpu/common/gsl_drawctxt.c')
-rw-r--r--drivers/mxc/amd-gpu/common/gsl_drawctxt.c63
1 files changed, 11 insertions, 52 deletions
diff --git a/drivers/mxc/amd-gpu/common/gsl_drawctxt.c b/drivers/mxc/amd-gpu/common/gsl_drawctxt.c
index 14c413e8e908..afa44e618794 100644
--- a/drivers/mxc/amd-gpu/common/gsl_drawctxt.c
+++ b/drivers/mxc/amd-gpu/common/gsl_drawctxt.c
@@ -117,23 +117,6 @@
#define CONTEXT_SIZE (SHADER_OFFSET + 3 * SHADER_SHADOW_SIZE)
-/////////////////////////////////////////////////////////////////////////////
-// macros
-//////////////////////////////////////////////////////////////////////////////
-#ifdef GSL_LOCKING_FINEGRAIN
-#define GSL_CONTEXT_MUTEX_CREATE() device->drawctxt_mutex = kos_mutex_create("gsl_drawctxt"); \
- if (!device->drawctxt_mutex) {return (GSL_FAILURE);}
-#define GSL_CONTEXT_MUTEX_LOCK() kos_mutex_lock(device->drawctxt_mutex)
-#define GSL_CONTEXT_MUTEX_UNLOCK() kos_mutex_unlock(device->drawctxt_mutex)
-#define GSL_CONTEXT_MUTEX_FREE() kos_mutex_free(device->drawctxt_mutex); device->drawctxt_mutex = 0;
-#else
-#define GSL_CONTEXT_MUTEX_CREATE() (void) device // unreferenced formal parameter
-#define GSL_CONTEXT_MUTEX_LOCK()
-#define GSL_CONTEXT_MUTEX_UNLOCK()
-#define GSL_CONTEXT_MUTEX_FREE() (void) device // unreferenced formal parameter
-#endif
-
-
//////////////////////////////////////////////////////////////////////////////
// temporary work structure
//////////////////////////////////////////////////////////////////////////////
@@ -1279,13 +1262,13 @@ create_gpustate_shadow(gsl_device_t *device, gsl_drawctxt_t *drawctxt, ctx_t *ct
KGSL_DEBUG(GSL_DBGFLAGS_DUMPX, flags = (GSL_MEMFLAGS_EMEM | GSL_MEMFLAGS_ALIGN8K));
// allocate memory to allow HW to save sub-blocks for efficient context save/restore
- if (kgsl_sharedmem_alloc(device->id, flags, CONTEXT_SIZE, &drawctxt->gpustate) != GSL_SUCCESS)
+ if (kgsl_sharedmem_alloc0(device->id, flags, CONTEXT_SIZE, &drawctxt->gpustate) != GSL_SUCCESS)
return GSL_FAILURE;
drawctxt->flags |= CTXT_FLAGS_STATE_SHADOW;
// Blank out h/w register, constant, and command buffer shadows.
- kgsl_sharedmem_set(&drawctxt->gpustate, 0, 0, CONTEXT_SIZE);
+ kgsl_sharedmem_set0(&drawctxt->gpustate, 0, 0, CONTEXT_SIZE);
// set-up command and vertex buffer pointers
ctx->cmd = ctx->start = (unsigned int *) ((char *)drawctxt->gpustate.hostptr + CMD_OFFSET);
@@ -1307,12 +1290,12 @@ static int
allocate_gmem_shadow_buffer(gsl_device_t *device, gsl_drawctxt_t *drawctxt)
{
// allocate memory for GMEM shadow
- if (kgsl_sharedmem_alloc(device->id, (GSL_MEMFLAGS_EMEM | GSL_MEMFLAGS_ALIGN8K),
+ if (kgsl_sharedmem_alloc0(device->id, (GSL_MEMFLAGS_CONPHYS | GSL_MEMFLAGS_ALIGN8K),
drawctxt->context_gmem_shadow.size, &drawctxt->context_gmem_shadow.gmemshadow) != GSL_SUCCESS)
return GSL_FAILURE;
// blank out gmem shadow.
- kgsl_sharedmem_set(&drawctxt->context_gmem_shadow.gmemshadow, 0, 0, drawctxt->context_gmem_shadow.size);
+ kgsl_sharedmem_set0(&drawctxt->context_gmem_shadow.gmemshadow, 0, 0, drawctxt->context_gmem_shadow.size);
return GSL_SUCCESS;
}
@@ -1375,8 +1358,6 @@ create_gmem_shadow(gsl_device_t *device, gsl_drawctxt_t *drawctxt, ctx_t *ctx)
int
kgsl_drawctxt_init(gsl_device_t *device)
{
- GSL_CONTEXT_MUTEX_CREATE();
-
return (GSL_SUCCESS);
}
@@ -1388,8 +1369,6 @@ kgsl_drawctxt_init(gsl_device_t *device)
int
kgsl_drawctxt_close(gsl_device_t *device)
{
- GSL_CONTEXT_MUTEX_FREE();
-
return (GSL_SUCCESS);
}
@@ -1405,14 +1384,10 @@ kgsl_drawctxt_create(gsl_device_t* device, gsl_context_type_t type, unsigned int
int index;
ctx_t ctx;
- GSL_CONTEXT_MUTEX_LOCK();
-
kgsl_device_active(device);
-
+
if (device->drawctxt_count >= GSL_CONTEXT_MAX)
{
- GSL_CONTEXT_MUTEX_UNLOCK();
- GSL_API_MUTEX_UNLOCK();
return (GSL_FAILURE);
}
@@ -1428,7 +1403,6 @@ kgsl_drawctxt_create(gsl_device_t* device, gsl_context_type_t type, unsigned int
if (index >= GSL_CONTEXT_MAX)
{
- GSL_CONTEXT_MUTEX_UNLOCK();
return (GSL_FAILURE);
}
@@ -1448,7 +1422,6 @@ kgsl_drawctxt_create(gsl_device_t* device, gsl_context_type_t type, unsigned int
if (create_gpustate_shadow(device, drawctxt, &ctx) != GSL_SUCCESS)
{
kgsl_drawctxt_destroy(device, index);
- GSL_CONTEXT_MUTEX_UNLOCK();
return (GSL_FAILURE);
}
@@ -1465,7 +1438,6 @@ kgsl_drawctxt_create(gsl_device_t* device, gsl_context_type_t type, unsigned int
if (create_gmem_shadow(device, drawctxt, &ctx) != GSL_SUCCESS)
{
kgsl_drawctxt_destroy(device, index);
- GSL_CONTEXT_MUTEX_UNLOCK();
return (GSL_FAILURE);
}
@@ -1475,7 +1447,6 @@ kgsl_drawctxt_create(gsl_device_t* device, gsl_context_type_t type, unsigned int
*drawctxt_id = index;
- GSL_CONTEXT_MUTEX_UNLOCK();
return (GSL_SUCCESS);
}
@@ -1489,8 +1460,6 @@ kgsl_drawctxt_destroy(gsl_device_t* device, unsigned int drawctxt_id)
{
gsl_drawctxt_t *drawctxt;
- GSL_CONTEXT_MUTEX_LOCK();
-
drawctxt = &device->drawctxt[drawctxt_id];
if (drawctxt->flags != CTXT_FLAGS_NOT_IN_USE)
@@ -1504,17 +1473,17 @@ kgsl_drawctxt_destroy(gsl_device_t* device, unsigned int drawctxt_id)
kgsl_drawctxt_switch(device, GSL_CONTEXT_NONE, 0);
}
- kgsl_device_idle(device->id, GSL_TIMEOUT_DEFAULT);
+ device->ftbl.device_idle(device, GSL_TIMEOUT_DEFAULT);
// destroy state shadow, if allocated
if (drawctxt->flags & CTXT_FLAGS_STATE_SHADOW)
- kgsl_sharedmem_free(&drawctxt->gpustate);
+ kgsl_sharedmem_free0(&drawctxt->gpustate, GSL_CALLER_PROCESSID_GET());
// destroy gmem shadow, if allocated
if (drawctxt->context_gmem_shadow.gmemshadow.size > 0)
{
- kgsl_sharedmem_free(&drawctxt->context_gmem_shadow.gmemshadow);
+ kgsl_sharedmem_free0(&drawctxt->context_gmem_shadow.gmemshadow, GSL_CALLER_PROCESSID_GET());
drawctxt->context_gmem_shadow.gmemshadow.size = 0;
}
@@ -1525,8 +1494,6 @@ kgsl_drawctxt_destroy(gsl_device_t* device, unsigned int drawctxt_id)
KOS_ASSERT(device->drawctxt_count >= 0);
}
- GSL_CONTEXT_MUTEX_UNLOCK();
-
return (GSL_SUCCESS);
}
@@ -1561,11 +1528,8 @@ KGSL_API int kgsl_drawctxt_bind_gmem_shadow(gsl_deviceid_t device_id, unsigned i
GSL_API_MUTEX_LOCK();
-
device = &gsl_driver.device[device_id-1]; // device_id is 1 based
- GSL_CONTEXT_MUTEX_LOCK();
-
drawctxt = &device->drawctxt[drawctxt_id];
shadow = &drawctxt->user_gmem_shadow[buffer_id];
@@ -1650,7 +1614,7 @@ KGSL_API int kgsl_drawctxt_bind_gmem_shadow(gsl_deviceid_t device_id, unsigned i
// Release context GMEM shadow if found
if (drawctxt->context_gmem_shadow.gmemshadow.size > 0)
{
- kgsl_sharedmem_free(&drawctxt->context_gmem_shadow.gmemshadow);
+ kgsl_sharedmem_free0(&drawctxt->context_gmem_shadow.gmemshadow, GSL_CALLER_PROCESSID_GET());
drawctxt->context_gmem_shadow.gmemshadow.size = 0;
}
}
@@ -1665,7 +1629,6 @@ KGSL_API int kgsl_drawctxt_bind_gmem_shadow(gsl_deviceid_t device_id, unsigned i
}
}
- GSL_CONTEXT_MUTEX_UNLOCK();
GSL_API_MUTEX_UNLOCK();
return (GSL_SUCCESS);
@@ -1803,8 +1766,6 @@ kgsl_drawctxt_destroyall(gsl_device_t *device)
int i;
gsl_drawctxt_t *drawctxt;
- GSL_CONTEXT_MUTEX_LOCK();
-
for (i = 0; i < GSL_CONTEXT_MAX; i++)
{
drawctxt = &device->drawctxt[i];
@@ -1813,12 +1774,12 @@ kgsl_drawctxt_destroyall(gsl_device_t *device)
{
// destroy state shadow, if allocated
if (drawctxt->flags & CTXT_FLAGS_STATE_SHADOW)
- kgsl_sharedmem_free(&drawctxt->gpustate);
+ kgsl_sharedmem_free0(&drawctxt->gpustate, GSL_CALLER_PROCESSID_GET());
// destroy gmem shadow, if allocated
if (drawctxt->context_gmem_shadow.gmemshadow.size > 0)
{
- kgsl_sharedmem_free(&drawctxt->context_gmem_shadow.gmemshadow);
+ kgsl_sharedmem_free0(&drawctxt->context_gmem_shadow.gmemshadow, GSL_CALLER_PROCESSID_GET());
drawctxt->context_gmem_shadow.gmemshadow.size = 0;
}
@@ -1829,8 +1790,6 @@ kgsl_drawctxt_destroyall(gsl_device_t *device)
}
}
- GSL_CONTEXT_MUTEX_UNLOCK();
-
return (GSL_SUCCESS);
}