mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-08 12:58:12 -04:00
Merge "soc: qcom: ddr_stats: update driver to get reg in probe"
This commit is contained in:
commit
ed787f8498
1 changed files with 26 additions and 24 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
|
@ -37,8 +37,7 @@
|
|||
#endif
|
||||
|
||||
struct ddr_stats_platform_data {
|
||||
phys_addr_t phys_addr_base;
|
||||
u32 phys_size;
|
||||
void __iomem *reg;
|
||||
};
|
||||
|
||||
struct stats_entry {
|
||||
|
|
@ -59,6 +58,8 @@ struct ddr_stats_kobj_attr {
|
|||
struct ddr_stats_platform_data *pd;
|
||||
};
|
||||
|
||||
static struct ddr_stats_platform_data *ddr_pdata;
|
||||
|
||||
static inline u64 get_time_in_msec(u64 counter)
|
||||
{
|
||||
do_div(counter, MSM_ARCH_TIMER_FREQ);
|
||||
|
|
@ -147,22 +148,10 @@ static ssize_t ddr_stats_show(struct kobject *kobj,
|
|||
struct ddr_stats_platform_data *pdata = NULL;
|
||||
void __iomem *reg;
|
||||
ssize_t length;
|
||||
u32 key, entry_count;
|
||||
u32 entry_count;
|
||||
|
||||
pdata = GET_PDATA_OF_ATTR(attr);
|
||||
|
||||
reg = ioremap_nocache(pdata->phys_addr_base, pdata->phys_size);
|
||||
if (!reg) {
|
||||
pr_err("ERROR could not ioremap start=%pa, len=%u\n",
|
||||
&pdata->phys_addr_base, pdata->phys_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
key = readl_relaxed(reg + offsetof(struct ddr_stats_data, key));
|
||||
if (key != MAGIC_KEY1) {
|
||||
pr_err("Invalid key\n");
|
||||
return 0;
|
||||
}
|
||||
reg = pdata->reg;
|
||||
|
||||
entry_count = readl_relaxed(reg + offsetof(struct ddr_stats_data,
|
||||
entry_count));
|
||||
|
|
@ -172,7 +161,6 @@ static ssize_t ddr_stats_show(struct kobject *kobj,
|
|||
}
|
||||
|
||||
length = ddr_stats_copy_stats(buf, PAGE_SIZE, reg, entry_count);
|
||||
iounmap(reg);
|
||||
|
||||
return length;
|
||||
}
|
||||
|
|
@ -212,13 +200,14 @@ static int ddr_stats_create_sysfs(struct platform_device *pdev,
|
|||
|
||||
static int ddr_stats_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct ddr_stats_platform_data *pdata;
|
||||
struct resource *res = NULL, *offset = NULL;
|
||||
u32 offset_addr = 0;
|
||||
void __iomem *phys_ptr = NULL;
|
||||
phys_addr_t phys_addr_base;
|
||||
u32 phys_size, key;
|
||||
|
||||
pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
|
||||
if (!pdata)
|
||||
ddr_pdata = devm_kzalloc(&pdev->dev, sizeof(*ddr_pdata), GFP_KERNEL);
|
||||
if (!ddr_pdata)
|
||||
return -ENOMEM;
|
||||
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
|
||||
|
|
@ -242,10 +231,23 @@ static int ddr_stats_probe(struct platform_device *pdev)
|
|||
if (!offset_addr)
|
||||
return -ENODEV;
|
||||
|
||||
pdata->phys_addr_base = res->start + offset_addr;
|
||||
pdata->phys_size = resource_size(res);
|
||||
phys_addr_base = res->start + offset_addr;
|
||||
phys_size = resource_size(res);
|
||||
|
||||
return ddr_stats_create_sysfs(pdev, pdata);
|
||||
ddr_pdata->reg = devm_ioremap(&pdev->dev, phys_addr_base, phys_size);
|
||||
if (!ddr_pdata->reg) {
|
||||
pr_err("ERROR could not ioremap start=%pa, len=%u\n",
|
||||
phys_addr_base, phys_size);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
key = readl_relaxed(ddr_pdata->reg + offsetof(struct ddr_stats_data, key));
|
||||
if (key != MAGIC_KEY1) {
|
||||
pr_err("Invalid key\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return ddr_stats_create_sysfs(pdev, ddr_pdata);
|
||||
}
|
||||
|
||||
static int ddr_stats_remove(struct platform_device *pdev)
|
||||
|
|
|
|||
Loading…
Reference in a new issue