Skip to content

Commit

Permalink
ARM: OMAP2+: hwmod: add _find_mpu_rt_port()
Browse files Browse the repository at this point in the history
Most IP blocks on the OMAP SoC have an interconnect link that is
intended to be used by the MPU to communicate with the IP block.
Several parts of the hwmod code need to be able to identify this link.
Currently, this is open-coded.  However, future patches will change
the way that interconnect links are represented and will make
identifying the link more complex.  So to avoid code duplication, this
patch centralizes the MPU port link identification code into a new
function, _find_mpu_rt_port().

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: Benoît Cousson <b-cousson@ti.com>
  • Loading branch information
Paul Walmsley committed Apr 19, 2012
1 parent 515237d commit 2d6141b
Showing 1 changed file with 29 additions and 10 deletions.
39 changes: 29 additions & 10 deletions arch/arm/mach-omap2/omap_hwmod.c
Original file line number Diff line number Diff line change
Expand Up @@ -1024,6 +1024,27 @@ static int __init _find_mpu_port_index(struct omap_hwmod *oh)
return (found) ? i : -EINVAL;
}

/**
* _find_mpu_rt_port - return omap_hwmod_ocp_if accessible by the MPU
* @oh: struct omap_hwmod *
*
* Given a pointer to a struct omap_hwmod record @oh, return a pointer
* to the struct omap_hwmod_ocp_if record that is used by the MPU to
* communicate with the IP block. This interface need not be directly
* connected to the MPU (and almost certainly is not), but is directly
* connected to the IP block represented by @oh. Returns a pointer
* to the struct omap_hwmod_ocp_if * upon success, or returns NULL upon
* error or if there does not appear to be a path from the MPU to this
* IP block.
*/
static struct omap_hwmod_ocp_if *_find_mpu_rt_port(struct omap_hwmod *oh)
{
if (!oh || oh->_int_flags & _HWMOD_NO_MPU_PORT || oh->slaves_cnt == 0)
return NULL;

return oh->slaves[oh->_mpu_port_index];
};

/**
* _find_mpu_rt_addr_space - return MPU register target address space for @oh
* @oh: struct omap_hwmod *
Expand All @@ -1037,10 +1058,7 @@ static struct omap_hwmod_addr_space * __init _find_mpu_rt_addr_space(struct omap
struct omap_hwmod_addr_space *mem;
int found = 0, i = 0;

if (!oh || oh->_int_flags & _HWMOD_NO_MPU_PORT || oh->slaves_cnt == 0)
return NULL;

os = oh->slaves[oh->_mpu_port_index];
os = _find_mpu_rt_port(oh);
if (!os->addr)
return NULL;

Expand Down Expand Up @@ -1298,12 +1316,11 @@ static int _wait_target_ready(struct omap_hwmod *oh)
if (!oh)
return -EINVAL;

if (oh->_int_flags & _HWMOD_NO_MPU_PORT)
if (oh->flags & HWMOD_NO_IDLEST)
return 0;

os = oh->slaves[oh->_mpu_port_index];

if (oh->flags & HWMOD_NO_IDLEST)
os = _find_mpu_rt_port(oh);
if (!os)
return 0;

/* XXX check module SIDLEMODE */
Expand Down Expand Up @@ -2747,16 +2764,18 @@ int omap_hwmod_get_resource_byname(struct omap_hwmod *oh, unsigned int type,
struct powerdomain *omap_hwmod_get_pwrdm(struct omap_hwmod *oh)
{
struct clk *c;
struct omap_hwmod_ocp_if *oi;

if (!oh)
return NULL;

if (oh->_clk) {
c = oh->_clk;
} else {
if (oh->_int_flags & _HWMOD_NO_MPU_PORT)
oi = _find_mpu_rt_port(oh);
if (!oi)
return NULL;
c = oh->slaves[oh->_mpu_port_index]->_clk;
c = oi->_clk;
}

if (!c->clkdm)
Expand Down

0 comments on commit 2d6141b

Please sign in to comment.