summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@quicinc.com>2016-09-28 22:41:22 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-09-28 22:41:22 -0700
commit861e42e106de8ef4bad4d219e553f6d24a2cdbd3 (patch)
tree66a1ab9866b71cd480e029b704d2eef64c0781ab /drivers/gpu
parentbe2bc57480df6c7c27187a01f37fc1ccb9015bba (diff)
parent5bd1c3bc3785e81310032d6cb23272ec9ac952ee (diff)
Merge "drm/msm/sde: enable sde clocks during debugfs register read" into dev/msm-4.4-drm_kms
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_kms.c57
-rw-r--r--drivers/gpu/drm/msm/sde/sde_kms.h6
-rw-r--r--drivers/gpu/drm/msm/sde/sde_plane.c6
3 files changed, 54 insertions, 15 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_kms.c b/drivers/gpu/drm/msm/sde/sde_kms.c
index 2604000bb25c..a706ef971ee9 100644
--- a/drivers/gpu/drm/msm/sde/sde_kms.c
+++ b/drivers/gpu/drm/msm/sde/sde_kms.c
@@ -53,15 +53,54 @@ static const char * const iommu_ports[] = {
static int sde_debugfs_show_regset32(struct seq_file *s, void *data)
{
- struct sde_debugfs_regset32 *regset = s->private;
+ struct sde_debugfs_regset32 *regset;
+ struct sde_kms *sde_kms;
+ struct drm_device *dev;
+ struct msm_drm_private *priv;
void __iomem *base;
- int i;
+ uint32_t i, addr;
+
+ if (!s || !s->private)
+ return 0;
- base = regset->base + regset->offset;
+ regset = s->private;
+
+ sde_kms = regset->sde_kms;
+ if (!sde_kms || !sde_kms->mmio)
+ return 0;
+
+ dev = sde_kms->dev;
+ if (!dev)
+ return 0;
+
+ priv = dev->dev_private;
+ if (!priv)
+ return 0;
- for (i = 0; i < regset->blk_len; i += 4)
- seq_printf(s, "[%x] 0x%08x\n",
- regset->offset + i, readl_relaxed(base + i));
+ base = sde_kms->mmio + regset->offset;
+
+ /* insert padding spaces, if needed */
+ if (regset->offset & 0xF) {
+ seq_printf(s, "[%x]", regset->offset & ~0xF);
+ for (i = 0; i < (regset->offset & 0xF); i += 4)
+ seq_puts(s, " ");
+ }
+
+ if (sde_power_resource_enable(&priv->phandle,
+ sde_kms->core_client, true)) {
+ seq_puts(s, "failed to enable sde clocks\n");
+ return 0;
+ }
+
+ /* main register output */
+ for (i = 0; i < regset->blk_len; i += 4) {
+ addr = regset->offset + i;
+ if ((addr & 0xF) == 0x0)
+ seq_printf(s, i ? "\n[%x]" : "[%x]", addr);
+ seq_printf(s, " %08x", readl_relaxed(base + i));
+ }
+ seq_puts(s, "\n");
+ sde_power_resource_enable(&priv->phandle, sde_kms->core_client, false);
return 0;
}
@@ -79,19 +118,19 @@ static const struct file_operations sde_fops_regset32 = {
};
void sde_debugfs_setup_regset32(struct sde_debugfs_regset32 *regset,
- uint32_t offset, uint32_t length, void __iomem *base)
+ uint32_t offset, uint32_t length, struct sde_kms *sde_kms)
{
if (regset) {
regset->offset = offset;
regset->blk_len = length;
- regset->base = base;
+ regset->sde_kms = sde_kms;
}
}
void *sde_debugfs_create_regset32(const char *name, umode_t mode,
void *parent, struct sde_debugfs_regset32 *regset)
{
- if (!name || !regset || !regset->base || !regset->blk_len)
+ if (!name || !regset || !regset->sde_kms || !regset->blk_len)
return NULL;
/* make sure offset is a multiple of 4 */
diff --git a/drivers/gpu/drm/msm/sde/sde_kms.h b/drivers/gpu/drm/msm/sde/sde_kms.h
index 0928b95f52dd..8fb3dfe67c4d 100644
--- a/drivers/gpu/drm/msm/sde/sde_kms.h
+++ b/drivers/gpu/drm/msm/sde/sde_kms.h
@@ -216,7 +216,7 @@ struct sde_plane_state {
struct sde_debugfs_regset32 {
uint32_t offset;
uint32_t blk_len;
- void __iomem *base;
+ struct sde_kms *sde_kms;
};
/**
@@ -226,10 +226,10 @@ struct sde_debugfs_regset32 {
* @regset: opaque register definition structure
* @offset: sub-block offset
* @length: sub-block length, in bytes
- * @base: base IOMEM address
+ * @sde_kms: pointer to sde kms structure
*/
void sde_debugfs_setup_regset32(struct sde_debugfs_regset32 *regset,
- uint32_t offset, uint32_t length, void __iomem *base);
+ uint32_t offset, uint32_t length, struct sde_kms *sde_kms);
/**
* sde_debugfs_create_regset32 - Create register read back file for debugfs
diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c
index 1d5cf5667006..606b0576fc9f 100644
--- a/drivers/gpu/drm/msm/sde/sde_plane.c
+++ b/drivers/gpu/drm/msm/sde/sde_plane.c
@@ -1890,14 +1890,14 @@ static void _sde_plane_init_debugfs(struct sde_plane *psde, struct sde_kms *kms)
sde_debugfs_setup_regset32(&psde->debugfs_src,
sblk->src_blk.base + cfg->base,
sblk->src_blk.len,
- kms->mmio);
+ kms);
sde_debugfs_create_regset32("src_blk", S_IRUGO,
psde->debugfs_root, &psde->debugfs_src);
sde_debugfs_setup_regset32(&psde->debugfs_scaler,
sblk->scaler_blk.base + cfg->base,
sblk->scaler_blk.len,
- kms->mmio);
+ kms);
sde_debugfs_create_regset32("scaler_blk", S_IRUGO,
psde->debugfs_root,
&psde->debugfs_scaler);
@@ -1905,7 +1905,7 @@ static void _sde_plane_init_debugfs(struct sde_plane *psde, struct sde_kms *kms)
sde_debugfs_setup_regset32(&psde->debugfs_csc,
sblk->csc_blk.base + cfg->base,
sblk->csc_blk.len,
- kms->mmio);
+ kms);
sde_debugfs_create_regset32("csc_blk", S_IRUGO,
psde->debugfs_root, &psde->debugfs_csc);
}