OSDN Git Service

ARM: OMAP2+: hwmod: consolidate finding the MPU port index and storing it
authorPaul Walmsley <paul@pwsan.com>
Thu, 19 Apr 2012 10:04:29 +0000 (04:04 -0600)
committerPaul Walmsley <paul@pwsan.com>
Thu, 19 Apr 2012 10:04:29 +0000 (04:04 -0600)
An IP block's MPU interface port only needs to be found once.  The result
can be cached to speed further lookups.  This patch consolidates these
two steps into a single function.

Signed-off-by: Paul Walmsley <paul@pwsan.com>
Cc: BenoƮt Cousson <b-cousson@ti.com>
arch/arm/mach-omap2/omap_hwmod.c

index f74f3af..8cf837d 100644 (file)
@@ -1008,37 +1008,34 @@ static int _get_addr_space_by_name(struct omap_hwmod *oh, const char *name,
 }
 
 /**
- * _find_mpu_port_index - find hwmod OCP slave port ID intended for MPU use
+ * _save_mpu_port_index - find and save the index to @oh's MPU port
  * @oh: struct omap_hwmod *
  *
- * Returns the array index of the OCP slave port that the MPU
- * addresses the device on, or -EINVAL upon error or not found.
+ * Determines the array index of the OCP slave port that the MPU uses
+ * to address the device, and saves it into the struct omap_hwmod.
+ * Intended to be called during hwmod registration only. No return
+ * value.
  */
-static int __init _find_mpu_port_index(struct omap_hwmod *oh)
+static void __init _save_mpu_port_index(struct omap_hwmod *oh)
 {
-       struct omap_hwmod_ocp_if *os;
+       struct omap_hwmod_ocp_if *os = NULL;
        int i = 0;
-       int found = 0;
 
        if (!oh)
-               return -EINVAL;
+               return;
+
+       oh->_int_flags |= _HWMOD_NO_MPU_PORT;
 
        while (i < oh->slaves_cnt) {
                os = _fetch_next_ocp_if(NULL, oh->slaves, &i);
                if (os->user & OCP_USER_MPU) {
-                       found = 1;
+                       oh->_mpu_port_index = i - 1;
+                       oh->_int_flags &= ~_HWMOD_NO_MPU_PORT;
                        break;
                }
        }
 
-       if (found)
-               pr_debug("omap_hwmod: %s: MPU OCP slave port ID  %d\n",
-                        oh->name, i - 1);
-       else
-               pr_debug("omap_hwmod: %s: no MPU OCP slave port found\n",
-                        oh->name);
-
-       return (found) ? (i - 1) : -EINVAL;
+       return;
 }
 
 /**
@@ -1076,7 +1073,7 @@ static struct omap_hwmod_addr_space * __init _find_mpu_rt_addr_space(struct omap
        int found = 0, i = 0;
 
        os = _find_mpu_rt_port(oh);
-       if (!os->addr)
+       if (!os || !os->addr)
                return NULL;
 
        do {
@@ -2213,8 +2210,6 @@ static int __init _setup(struct omap_hwmod *oh, void *data)
  */
 static int __init _register(struct omap_hwmod *oh)
 {
-       int ms_id;
-
        if (!oh || !oh->name || !oh->class || !oh->class->name ||
            (oh->_state != _HWMOD_STATE_UNKNOWN))
                return -EINVAL;
@@ -2224,11 +2219,7 @@ static int __init _register(struct omap_hwmod *oh)
        if (_lookup(oh->name))
                return -EEXIST;
 
-       ms_id = _find_mpu_port_index(oh);
-       if (!IS_ERR_VALUE(ms_id))
-               oh->_mpu_port_index = ms_id;
-       else
-               oh->_int_flags |= _HWMOD_NO_MPU_PORT;
+       _save_mpu_port_index(oh);
 
        list_add_tail(&oh->node, &omap_hwmod_list);