aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nouveau_channel.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-10-19 20:06:01 +1000
committerBen Skeggs <bskeggs@redhat.com>2010-12-03 15:06:58 +1000
commitbd2e597de8dbd000a3977871f15cb81e2925d63e (patch)
tree4e3fbd24cbc262566cb93dc743cf6b14405eae21 /drivers/gpu/drm/nouveau/nouveau_channel.c
parentb8c157d3a9a13871742c8a8d3d4598c3791ed5f5 (diff)
downloadkernel_samsung_smdk4412-bd2e597de8dbd000a3977871f15cb81e2925d63e.zip
kernel_samsung_smdk4412-bd2e597de8dbd000a3977871f15cb81e2925d63e.tar.gz
kernel_samsung_smdk4412-bd2e597de8dbd000a3977871f15cb81e2925d63e.tar.bz2
drm/nv84: add support for the PCRYPT engine
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_channel.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_channel.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c
index 76033c5..8f2df6b 100644
--- a/drivers/gpu/drm/nouveau/nouveau_channel.c
+++ b/drivers/gpu/drm/nouveau/nouveau_channel.c
@@ -112,6 +112,7 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
struct drm_nouveau_private *dev_priv = dev->dev_private;
struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph;
struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo;
+ struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt;
struct nouveau_channel *chan;
unsigned long flags;
int user, ret;
@@ -214,6 +215,14 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
return ret;
}
+ if (pcrypt->create_context) {
+ ret = pcrypt->create_context(chan);
+ if (ret) {
+ nouveau_channel_put(&chan);
+ return ret;
+ }
+ }
+
/* Construct inital RAMFC for new channel */
ret = pfifo->create_context(chan);
if (ret) {
@@ -280,6 +289,7 @@ nouveau_channel_put_unlocked(struct nouveau_channel **pchan)
struct drm_nouveau_private *dev_priv = dev->dev_private;
struct nouveau_fifo_engine *pfifo = &dev_priv->engine.fifo;
struct nouveau_pgraph_engine *pgraph = &dev_priv->engine.graph;
+ struct nouveau_crypt_engine *pcrypt = &dev_priv->engine.crypt;
unsigned long flags;
int ret;
@@ -328,6 +338,8 @@ nouveau_channel_put_unlocked(struct nouveau_channel **pchan)
/* destroy the engine specific contexts */
pfifo->destroy_context(chan);
pgraph->destroy_context(chan);
+ if (pcrypt->destroy_context)
+ pcrypt->destroy_context(chan);
pfifo->reassign(dev, true);