mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
soc: rockchip: decompress: add start_decom node for test
Take RK3588 as an example to show how to test decompress: echo mode > /sys/devices/platform/fea80000.decompress/start_decom “mode” means the compressed package format has following three types: 0 - LZ4 1 - GZIP 2 - ZLIB Change-Id: Ibd264dcce964c142abb603c1a5e8ca4c14e9fe1e Signed-off-by: Simon Xue <xxm@rock-chips.com>
This commit is contained in:
@@ -72,6 +72,12 @@ config ROCKCHIP_HW_DECOMPRESS
|
||||
This driver support Decompress IP built-in Rockchip SoC, support
|
||||
LZ4, GZIP, ZLIB.
|
||||
|
||||
config ROCKCHIP_HW_DECOMPRESS_TEST
|
||||
bool "Rockchip Hw-Decompress test"
|
||||
depends on ROCKCHIP_HW_DECOMPRESS
|
||||
help
|
||||
Say yes here to enable decompress test
|
||||
|
||||
config ROCKCHIP_HW_DECOMPRESS_USER
|
||||
tristate "Rockchip HardWare Decompress User Interface Support"
|
||||
default n
|
||||
|
||||
@@ -244,7 +244,9 @@ static irqreturn_t rk_decom_irq_handler(int irq, void *priv)
|
||||
g_decom_noblocking = false;
|
||||
wake_up(&g_decom_wait);
|
||||
} else {
|
||||
#ifndef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST
|
||||
writel(DECOM_ENABLE, rk_dec->regs + DECOM_ENR);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -254,6 +256,7 @@ static irqreturn_t rk_decom_irq_handler(int irq, void *priv)
|
||||
|
||||
static irqreturn_t rk_decom_irq_thread(int irq, void *priv)
|
||||
{
|
||||
#ifndef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST
|
||||
struct rk_decom *rk_dec = priv;
|
||||
|
||||
if (g_decom_complete) {
|
||||
@@ -273,9 +276,54 @@ static irqreturn_t rk_decom_irq_thread(int irq, void *priv)
|
||||
clk_bulk_disable_unprepare(rk_dec->num_clocks, rk_dec->clocks);
|
||||
}
|
||||
|
||||
#endif
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST
|
||||
static ssize_t start_decom_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t size)
|
||||
{
|
||||
u32 mode = 0;
|
||||
phys_addr_t src, dst;
|
||||
int ret;
|
||||
struct rk_decom *rk_dec = dev_get_drvdata(dev);
|
||||
|
||||
src = rk_dec->mem_start;
|
||||
dst = rk_dec->mem_start + rk_dec->mem_size / 2;
|
||||
|
||||
if (src == 0x0 || dst == 0x0)
|
||||
return -EINVAL;
|
||||
|
||||
ret = kstrtou32(buf, 10, &mode);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (mode != LZ4_MOD && mode != GZIP_MOD && mode != ZLIB_MOD)
|
||||
return -EINVAL;
|
||||
|
||||
dev_info(dev, "%s,%d, src = %pa, dst = %pa, mode = %d\n",
|
||||
__func__, __LINE__, &src, &dst, mode);
|
||||
|
||||
ret = rk_decom_start(mode, src, dst, 0x80000000);
|
||||
if (ret)
|
||||
pr_info("%s, user decompress error\n", __func__);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_WO(start_decom);
|
||||
static struct attribute *decom_attrs[] = {
|
||||
&dev_attr_start_decom.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
static const struct attribute_group decom_attr_group = {
|
||||
.attrs = decom_attrs,
|
||||
};
|
||||
#endif
|
||||
|
||||
static int __init rockchip_decom_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct rk_decom *rk_dec;
|
||||
@@ -346,6 +394,13 @@ static int __init rockchip_decom_probe(struct platform_device *pdev)
|
||||
goto disable_clk;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ROCKCHIP_HW_DECOMPRESS_TEST
|
||||
ret = sysfs_create_group(&pdev->dev.kobj, &decom_attr_group);
|
||||
if (ret) {
|
||||
dev_err(dev, "SysFS group creation failed\n");
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
g_decom = rk_dec;
|
||||
wake_up(&decom_init_done);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user