OMAP2+: hwmod: find MPU initiator hwmod during in _register()
Move the code that looks for the MPU initiator hwmod to run during the individual hwmod _register() function. (Previously, it ran after all hwmods were registered in the omap_hwmod_late_init() function.) This is done so code can late-initialize a few individual hwmods -- for example, for the system timer -- before the entire set of hwmods is initialized later in boot via omap_hwmod_late_init(). Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Benoît Cousson <b-cousson@ti.com> Cc: Kevin Hilman <khilman@ti.com>
This commit is contained in:
parent
550c8092c5
commit
569edd705c
|
@ -1452,7 +1452,7 @@ static int _setup(struct omap_hwmod *oh, void *data)
|
|||
*/
|
||||
static int __init _register(struct omap_hwmod *oh)
|
||||
{
|
||||
int ret, ms_id;
|
||||
int ms_id;
|
||||
|
||||
if (!oh || !oh->name || !oh->class || !oh->class->name ||
|
||||
(oh->_state != _HWMOD_STATE_UNKNOWN))
|
||||
|
@ -1475,9 +1475,14 @@ static int __init _register(struct omap_hwmod *oh)
|
|||
|
||||
oh->_state = _HWMOD_STATE_REGISTERED;
|
||||
|
||||
ret = 0;
|
||||
/*
|
||||
* XXX Rather than doing a strcmp(), this should test a flag
|
||||
* set in the hwmod data, inserted by the autogenerator code.
|
||||
*/
|
||||
if (!strcmp(oh->name, MPU_INITIATOR_NAME))
|
||||
mpu_oh = oh;
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1632,22 +1637,24 @@ static int __init _populate_mpu_rt_base(struct omap_hwmod *oh, void *data)
|
|||
*
|
||||
* Must be called after omap2_clk_init(). Resolves the struct clk names
|
||||
* to struct clk pointers for each registered omap_hwmod. Also calls
|
||||
* _setup() on each hwmod. Returns 0.
|
||||
* _setup() on each hwmod. Returns 0 upon success or -EINVAL upon error.
|
||||
*/
|
||||
static int __init omap_hwmod_setup_all(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
if (!mpu_oh) {
|
||||
pr_err("omap_hwmod: %s: MPU initiator hwmod %s not yet registered\n",
|
||||
__func__, MPU_INITIATOR_NAME);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
r = omap_hwmod_for_each(_populate_mpu_rt_base, NULL);
|
||||
|
||||
/* XXX check return value */
|
||||
r = omap_hwmod_for_each(_init_clocks, NULL);
|
||||
WARN(r, "omap_hwmod: %s: _init_clocks failed\n", __func__);
|
||||
|
||||
mpu_oh = omap_hwmod_lookup(MPU_INITIATOR_NAME);
|
||||
WARN(!mpu_oh, "omap_hwmod: could not find MPU initiator hwmod %s\n",
|
||||
MPU_INITIATOR_NAME);
|
||||
|
||||
omap_hwmod_for_each(_setup, NULL);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue