Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 569edd70 authored by Paul Walmsley's avatar Paul Walmsley
Browse files

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: default avatarPaul Walmsley <paul@pwsan.com>
Cc: Benoît Cousson <b-cousson@ti.com>
Cc: Kevin Hilman <khilman@ti.com>
parent 550c8092
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -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;