ARM: AM335X: Split hwmod data accessible only on GP devices master
authorBasheer, Mansoor Ahamed <mansoor.ahamed@ti.com>
Mon, 22 Oct 2012 04:51:11 +0000 (10:21 +0530)
committerHemant S Pedanekar <hemantp@ti.com>
Thu, 17 Jan 2013 09:22:01 +0000 (14:52 +0530)
On HS/EMU devices, some peripherals are marked secure and
cannot be accessed in the pulic world - unless firewall is
configured to allow such an access.

Create an array of HWMODs for the peripherals that are
accessible only on GP devices. If PPA is used to restrict
public access for any other peripheral, it must be added
to this list.

With default PPA, attempt to access Timer0 in public world
causes an exception leading to crash during kernel boot.
Therefore, its HWMOD data is moved to am33xx_hwmods_gp[].

Signed-off-by: Sanjeev Premi <premi@ti.com>
arch/arm/mach-omap2/omap_hwmod_33xx_data.c

index 2f9982cc32ca3aab51308cc5bca492e617198741..a78ddb4358be09f3e68fed9efd5ea2c5bc4d3d99 100644 (file)
@@ -3463,6 +3463,9 @@ static struct omap_hwmod am33xx_pruss_hwmod = {
        .rst_lines_cnt  = ARRAY_SIZE(am33xx_pruss_resets),
 };
 
+/**
+ * HWMOD data for devices accessible across GP and HS/EMU devices.
+ */
 static __initdata struct omap_hwmod *am33xx_hwmods[] = {
        /* l3 class */
        &am33xx_l3_instr_hwmod,
@@ -3553,7 +3556,6 @@ static __initdata struct omap_hwmod *am33xx_hwmods[] = {
        &am33xx_uart5_hwmod,
        &am33xx_uart6_hwmod,
        /* timer class */
-       &am33xx_timer0_hwmod,
        &am33xx_timer1_hwmod,
        &am33xx_timer2_hwmod,
        &am33xx_timer3_hwmod,
@@ -3586,7 +3588,22 @@ static __initdata struct omap_hwmod *am33xx_hwmods[] = {
        NULL,
 };
 
+
+/**
+ * HWMOD data for devices common accessible only on GP devices.
+ */
+static __initdata struct omap_hwmod *am33xx_hwmods_gp[] = {
+       /* timer class */
+       &am33xx_timer0_hwmod,
+       NULL,
+};
+
 int __init am33xx_hwmod_init(void)
 {
-       return omap_hwmod_register(am33xx_hwmods);
+       int ret = omap_hwmod_register(am33xx_hwmods);
+
+       if (!ret && (OMAP2_DEVICE_TYPE_GP == omap_type()))
+               ret = omap_hwmod_register(am33xx_hwmods_gp);
+
+       return ret;
 }