gfx: pvr: add debugfs entry to reset sgx
authorImre Deak <imre.deak@intel.com>
Thu, 10 Nov 2011 16:39:08 +0000 (18:39 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 3 Jul 2012 09:28:37 +0000 (12:28 +0300)
Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
drivers/staging/mrst/pvr/pvr_debugfs.c

index 6f527a6..c735d94 100644 (file)
@@ -31,6 +31,7 @@
 #include "sgxinfokm.h"
 #include "syscommon.h"
 #include "pvr_bridge_km.h"
+#include "sgx_bridge_km.h"
 #include "sgxutils.h"
 #include "pvr_debugfs.h"
 #include "mmu.h"
 #include "pvr_trace_cmd.h"
 
 static struct dentry *pvr_debugfs_dir;
+static u32 reset_sgx;
+
+static int pvr_debugfs_reset_sgx(void)
+{
+       PVRSRV_DEVICE_NODE *dev_node;
+       PVRSRV_ERROR err;
+       int r = 0;
+
+       dev_node = pvr_get_sgx_dev_node();
+       if (!dev_node)
+               return -ENODEV;
+
+       err = PVRSRVSetDevicePowerStateKM(dev_node->sDevId.ui32DeviceIndex,
+                                         PVRSRV_DEV_POWER_STATE_ON,
+                                         KERNEL_ID, IMG_FALSE);
+       if (err != PVRSRV_OK)
+               return -EIO;
+
+       HWRecoveryResetSGX(dev_node, 0, KERNEL_ID);
+
+       /* power down if no activity */
+       SGXTestActivePowerEvent(dev_node, KERNEL_ID);
+
+       return r;
+}
+
+static int pvr_debugfs_reset_sgx_wrapper(void *data, u64 val)
+{
+       u32 *var = data;
+
+       if (var == &reset_sgx) {
+               int r = -EINVAL;
+
+               if (val == 1)
+                       r = pvr_debugfs_reset_sgx();
+               return r;
+       }
+
+       BUG();
+}
+
+DEFINE_SIMPLE_ATTRIBUTE(pvr_debugfs_reset_sgx_fops, NULL,
+                       pvr_debugfs_reset_sgx_wrapper, "%llu\n");
+
 
 #ifdef CONFIG_PVR_TRACE_CMD
 
@@ -108,6 +153,10 @@ int pvr_debugfs_init(void)
        if (!pvr_debugfs_dir)
                goto err;
 
+       if (!debugfs_create_file("reset_sgx", S_IWUSR, pvr_debugfs_dir,
+                                &reset_sgx, &pvr_debugfs_reset_sgx_fops))
+               goto err;
+
 #ifdef CONFIG_PVR_TRACE_CMD
        if (!debugfs_create_file("command_trace", S_IRUGO, pvr_debugfs_dir,
                                NULL, &pvr_dbg_trcmd_fops))