OMAP4: Initialise the l3 device with the hwmod data.
authorsricharan <r.sricharan@ti.com>
Wed, 9 Mar 2011 10:30:29 +0000 (16:00 +0530)
committerSantosh Shilimkar <santosh.shilimkar@ti.com>
Wed, 9 Mar 2011 11:53:57 +0000 (17:23 +0530)
The l3 interconnect device is build with all the data required
to handle the error logging. The data is extracted from the
hwmod data base.

Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Signed-off-by: sricharan <r.sricharan@ti.com>
Acked-by: Benoit Cousson <b-cousson@ti.com>
arch/arm/mach-omap2/devices.c

index 6a320b61631e7b367d1a87cbe634fc86c4c5d660..0d2d6a9c303c5f03ef952f6721d2d88b34f77d8b 100644 (file)
@@ -37,6 +37,7 @@
 #include "control.h"
 
 #define L3_MODULES_MAX_LEN 12
+#define L3_MODULES 3
 
 static int __init omap3_l3_init(void)
 {
@@ -68,6 +69,37 @@ static int __init omap3_l3_init(void)
 }
 postcore_initcall(omap3_l3_init);
 
+static int __init omap4_l3_init(void)
+{
+       int l, i;
+       struct omap_hwmod *oh[3];
+       struct omap_device *od;
+       char oh_name[L3_MODULES_MAX_LEN];
+
+       /*
+        * To avoid code running on other OMAPs in
+        * multi-omap builds
+        */
+       if (!(cpu_is_omap44xx()))
+               return -ENODEV;
+
+       for (i = 0; i < L3_MODULES; i++) {
+               l = snprintf(oh_name, L3_MODULES_MAX_LEN, "l3_main_%d", i+1);
+
+               oh[i] = omap_hwmod_lookup(oh_name);
+               if (!(oh[i]))
+                       pr_err("could not look up %s\n", oh_name);
+       }
+
+       od = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL,
+                                                    0, NULL, 0, 0);
+
+       WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name);
+
+       return PTR_ERR(od);
+}
+postcore_initcall(omap4_l3_init);
+
 #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE)
 
 static struct resource cam_resources[] = {