Files
android_kernel_samsung_sm86…/msm/sde/sde_hw_qdss.c
Steve Cohen d9794d82cd disp: msm: sde: remove sde_hw_blk
The sde_hw_blk was meant to be a generic base object for all
SDE HW blocks, however, it enforces using a common set of ops
which is not practical when blocks have different capabilities.
Since this object was never used as intended and is not doing
anything functional today, remove the dead weight.

Change-Id: If76006c1ae5c62e8d7d77b100837dbaf6c661bd3
Signed-off-by: Steve Cohen <quic_cohens@quicinc.com>
2021-10-26 11:34:59 -07:00

87 lines
1.7 KiB
C

// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2019, 2021, The Linux Foundation. All rights reserved.
*/
#define pr_fmt(fmt) "[drm:%s:%d] " fmt, __func__, __LINE__
#include <linux/mutex.h>
#include <linux/platform_device.h>
#include "sde_kms.h"
#include "sde_dbg.h"
#include "sde_hw_qdss.h"
#define QDSS_CONFIG 0x0
static struct sde_qdss_cfg *_qdss_offset(enum sde_qdss qdss,
struct sde_mdss_cfg *m,
void __iomem *addr,
struct sde_hw_blk_reg_map *b)
{
int i;
for (i = 0; i < m->qdss_count; i++) {
if (qdss == m->qdss[i].id) {
b->base_off = addr;
b->blk_off = m->qdss[i].base;
b->length = m->qdss[i].len;
b->hw_rev = m->hw_rev;
b->log_mask = SDE_DBG_MASK_QDSS;
return &m->qdss[i];
}
}
return ERR_PTR(-EINVAL);
}
static void sde_hw_qdss_enable_qdss_events(struct sde_hw_qdss *hw_qdss,
bool enable)
{
struct sde_hw_blk_reg_map *c = &hw_qdss->hw;
u32 val;
val = enable ? 0x100 : 0;
if (c)
SDE_REG_WRITE(c, QDSS_CONFIG, val);
}
static void _setup_qdss_ops(struct sde_hw_qdss_ops *ops)
{
ops->enable_qdss_events = sde_hw_qdss_enable_qdss_events;
}
struct sde_hw_blk_reg_map *sde_hw_qdss_init(enum sde_qdss idx,
void __iomem *addr,
struct sde_mdss_cfg *m)
{
struct sde_hw_qdss *c;
struct sde_qdss_cfg *cfg;
c = kzalloc(sizeof(*c), GFP_KERNEL);
if (!c)
return ERR_PTR(-ENOMEM);
cfg = _qdss_offset(idx, m, addr, &c->hw);
if (IS_ERR_OR_NULL(cfg)) {
kfree(c);
return ERR_PTR(-EINVAL);
}
c->idx = idx;
c->caps = cfg;
_setup_qdss_ops(&c->ops);
sde_dbg_reg_register_dump_range(SDE_DBG_NAME, cfg->name, c->hw.blk_off,
c->hw.blk_off + c->hw.length, c->hw.xin_id);
return &c->hw;
}
void sde_hw_qdss_destroy(struct sde_hw_blk_reg_map *hw)
{
if (hw)
kfree(to_sde_hw_qdss(hw));
}