Loading msm/sde_dbg.c +55 −17 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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, Loading Loading
msm/sde_dbg.c +55 −17 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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, Loading