Commit 472c54f0 authored by Tony Lindgren's avatar Tony Lindgren

Merge commit '4f3530f4' into omap-for-v4.20/ti-sysc

parents 23731eac 4f3530f4
...@@ -2160,6 +2160,37 @@ static int of_dev_hwmod_lookup(struct device_node *np, ...@@ -2160,6 +2160,37 @@ static int of_dev_hwmod_lookup(struct device_node *np,
return -ENODEV; return -ENODEV;
} }
/**
* omap_hwmod_fix_mpu_rt_idx - fix up mpu_rt_idx register offsets
*
* @oh: struct omap_hwmod *
* @np: struct device_node *
*
* Fix up module register offsets for modules with mpu_rt_idx.
* Only needed for cpsw with interconnect target module defined
* in device tree while still using legacy hwmod platform data
* for rev, sysc and syss registers.
*
* Can be removed when all cpsw hwmod platform data has been
* dropped.
*/
static void omap_hwmod_fix_mpu_rt_idx(struct omap_hwmod *oh,
struct device_node *np,
struct resource *res)
{
struct device_node *child = NULL;
int error;
child = of_get_next_child(np, child);
if (!child)
return;
error = of_address_to_resource(child, oh->mpu_rt_idx, res);
if (error)
pr_err("%s: error mapping mpu_rt_idx: %i\n",
__func__, error);
}
/** /**
* omap_hwmod_parse_module_range - map module IO range from device tree * omap_hwmod_parse_module_range - map module IO range from device tree
* @oh: struct omap_hwmod * * @oh: struct omap_hwmod *
...@@ -2220,7 +2251,13 @@ int omap_hwmod_parse_module_range(struct omap_hwmod *oh, ...@@ -2220,7 +2251,13 @@ int omap_hwmod_parse_module_range(struct omap_hwmod *oh,
size = be32_to_cpup(ranges); size = be32_to_cpup(ranges);
pr_debug("omap_hwmod: %s %s at 0x%llx size 0x%llx\n", pr_debug("omap_hwmod: %s %s at 0x%llx size 0x%llx\n",
oh->name, np->name, base, size); oh ? oh->name : "", np->name, base, size);
if (oh && oh->mpu_rt_idx) {
omap_hwmod_fix_mpu_rt_idx(oh, np, res);
return 0;
}
res->start = base; res->start = base;
res->end = base + size - 1; res->end = base + size - 1;
......
...@@ -499,32 +499,29 @@ static int sysc_check_registers(struct sysc *ddata) ...@@ -499,32 +499,29 @@ static int sysc_check_registers(struct sysc *ddata)
/** /**
* syc_ioremap - ioremap register space for the interconnect target module * syc_ioremap - ioremap register space for the interconnect target module
* @ddata: deviec driver data * @ddata: device driver data
* *
* Note that the interconnect target module registers can be anywhere * Note that the interconnect target module registers can be anywhere
* within the first child device address space. For example, SGX has * within the interconnect target module range. For example, SGX has
* them at offset 0x1fc00 in the 32MB module address space. We just * them at offset 0x1fc00 in the 32MB module address space. And cpsw
* what we need around the interconnect target module registers. * has them at offset 0x1200 in the CPSW_WR child. Usually the
* the interconnect target module registers are at the beginning of
* the module range though.
*/ */
static int sysc_ioremap(struct sysc *ddata) static int sysc_ioremap(struct sysc *ddata)
{ {
u32 size = 0; int size;
if (ddata->offsets[SYSC_SYSSTATUS] >= 0) size = max3(ddata->offsets[SYSC_REVISION],
size = ddata->offsets[SYSC_SYSSTATUS]; ddata->offsets[SYSC_SYSCONFIG],
else if (ddata->offsets[SYSC_SYSCONFIG] >= 0) ddata->offsets[SYSC_SYSSTATUS]);
size = ddata->offsets[SYSC_SYSCONFIG];
else if (ddata->offsets[SYSC_REVISION] >= 0)
size = ddata->offsets[SYSC_REVISION];
else
return -EINVAL;
size &= 0xfff00; if (size < 0 || (size + sizeof(u32)) > ddata->module_size)
size += SZ_256; return -EINVAL;
ddata->module_va = devm_ioremap(ddata->dev, ddata->module_va = devm_ioremap(ddata->dev,
ddata->module_pa, ddata->module_pa,
size); size + sizeof(u32));
if (!ddata->module_va) if (!ddata->module_va)
return -EIO; return -EIO;
...@@ -1251,10 +1248,10 @@ static int sysc_child_suspend_noirq(struct device *dev) ...@@ -1251,10 +1248,10 @@ static int sysc_child_suspend_noirq(struct device *dev)
if (!pm_runtime_status_suspended(dev)) { if (!pm_runtime_status_suspended(dev)) {
error = pm_generic_runtime_suspend(dev); error = pm_generic_runtime_suspend(dev);
if (error) { if (error) {
dev_err(dev, "%s error at %i: %i\n", dev_warn(dev, "%s busy at %i: %i\n",
__func__, __LINE__, error); __func__, __LINE__, error);
return error; return 0;
} }
error = sysc_runtime_suspend(ddata->dev); error = sysc_runtime_suspend(ddata->dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment