Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a384fb7f authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: sde: Fix open method in sde_reg_fops and sde_off_fops"

parents 5a495e61 a4570ec1
Loading
Loading
Loading
Loading
+55 −17
Original line number Diff line number Diff line
@@ -3608,6 +3608,36 @@ static int sde_dbg_debugfs_open(struct inode *inode, struct file *file)
	return 0;
}

/*
 * sde_dbg_reg_base_open - debugfs open handler for reg base
 * @inode: debugfs inode
 * @file: file handle
 */
static int sde_dbg_reg_base_open(struct inode *inode, struct file *file)
{
	char base_name[64] = {0};
	struct sde_dbg_reg_base *reg_base = NULL;

	if (!inode || !file)
		return -EINVAL;

	snprintf(base_name, sizeof(base_name), "%s",
		file->f_path.dentry->d_iname);

	base_name[strlen(file->f_path.dentry->d_iname) - 4] = '\0';
	reg_base = _sde_dump_get_blk_addr(base_name);
	if (!reg_base) {
		pr_err("error: unable to locate base %s\n",
				base_name);
		return -EINVAL;
	}

	/* non-seekable */
	file->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);
	file->private_data = reg_base;
	return 0;
}

/**
 * sde_evtlog_dump_read - debugfs read handler for evtlog dump
 * @file: file handler
@@ -4098,15 +4128,14 @@ static int sde_dbg_reg_base_release(struct inode *inode, struct file *file)
 * @cnt: memory size in bytes
 * Return: true if valid; false otherwise
 */
static bool sde_dbg_reg_base_is_valid_range(u32 off, u32 cnt)
static bool sde_dbg_reg_base_is_valid_range(
	struct sde_dbg_reg_base *base,
	u32 off, u32 cnt)
{
	static struct sde_dbg_base *dbg_base = &sde_dbg_base;
	struct sde_dbg_reg_range *node;
	struct sde_dbg_reg_base *base;

	pr_debug("check offset=0x%x cnt=0x%x\n", off, cnt);

	list_for_each_entry(base, &dbg_base->reg_base_list, reg_base_head) {
	list_for_each_entry(node, &base->sub_range_list, head) {
		pr_debug("%s: start=0x%x end=0x%x\n", node->range_name,
			node->offset.start, node->offset.end);
@@ -4118,7 +4147,6 @@ static bool sde_dbg_reg_base_is_valid_range(u32 off, u32 cnt)
			return true;
		}
	}
	}

	pr_err("invalid range requested\n");
	return false;
@@ -4138,6 +4166,7 @@ static ssize_t sde_dbg_reg_base_offset_write(struct file *file,
	u32 off = 0;
	u32 cnt = DEFAULT_BASE_REG_CNT;
	char buf[24];
	int rc;

	if (!file)
		return -EINVAL;
@@ -4169,8 +4198,11 @@ static ssize_t sde_dbg_reg_base_offset_write(struct file *file,
	if (cnt == 0)
		return -EINVAL;

	if (!sde_dbg_reg_base_is_valid_range(off, cnt))
	if (!list_empty(&dbg->sub_range_list)) {
		rc = sde_dbg_reg_base_is_valid_range(dbg, off, cnt);
		if (!rc)
			return -EINVAL;
	}

	mutex_lock(&sde_dbg_base.mutex);
	dbg->off = off;
@@ -4277,6 +4309,12 @@ static ssize_t sde_dbg_reg_base_reg_write(struct file *file,
		return -EFAULT;
	}

	if (!list_empty(&dbg->sub_range_list)) {
		rc = sde_dbg_reg_base_is_valid_range(dbg, off, cnt);
		if (!rc)
			return -EINVAL;
	}

	rc = pm_runtime_get_sync(sde_dbg_base.dev);
	if (rc < 0) {
		mutex_unlock(&sde_dbg_base.mutex);
@@ -4391,14 +4429,14 @@ static ssize_t sde_dbg_reg_base_reg_read(struct file *file,
}

static const struct file_operations sde_off_fops = {
	.open = sde_dbg_debugfs_open,
	.open = sde_dbg_reg_base_open,
	.release = sde_dbg_reg_base_release,
	.read = sde_dbg_reg_base_offset_read,
	.write = sde_dbg_reg_base_offset_write,
};

static const struct file_operations sde_reg_fops = {
	.open = sde_dbg_debugfs_open,
	.open = sde_dbg_reg_base_open,
	.release = sde_dbg_reg_base_release,
	.read = sde_dbg_reg_base_reg_read,
	.write = sde_dbg_reg_base_reg_write,