diff options
| author | Dhaval Patel <pdhaval@quicinc.com> | 2016-09-28 22:41:22 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-28 22:41:22 -0700 |
| commit | 861e42e106de8ef4bad4d219e553f6d24a2cdbd3 (patch) | |
| tree | 66a1ab9866b71cd480e029b704d2eef64c0781ab /drivers/gpu | |
| parent | be2bc57480df6c7c27187a01f37fc1ccb9015bba (diff) | |
| parent | 5bd1c3bc3785e81310032d6cb23272ec9ac952ee (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.c | 57 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_kms.h | 6 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_plane.c | 6 |
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); } |
