@@ -45,6 +45,7 @@ static char soc_rev[OMAP_SOC_MAX_NAME_LENGTH];
u32 omap_features;
static int soc_ids[MAX_ID];
+static int omap_type_val = OMAP2_DEVICETYPE_MASK;
unsigned int omap_rev(void)
{
@@ -54,8 +55,13 @@ EXPORT_SYMBOL(omap_rev);
void init_dra_soc_id(void)
{
- if (of_machine_is_compatible("ti,dra7"))
+ if (of_machine_is_compatible("ti,dra7")) {
+ omap_type_val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS);
+ omap_type_val &= OMAP5_DEVICETYPE_MASK;
+ omap_type_val >>= 6;
soc_ids[DRA7XX] = 1;
+ }
+
if (of_machine_is_compatible("ti,dra74"))
soc_ids[DRA74X] = 1;
if (of_machine_is_compatible("ti,dra72"))
@@ -69,36 +75,34 @@ int check_dra_soc(int id)
int omap_type(void)
{
- static u32 val = OMAP2_DEVICETYPE_MASK;
-
- if (val < OMAP2_DEVICETYPE_MASK)
- return val;
+ if (omap_type_val < OMAP2_DEVICETYPE_MASK)
+ return omap_type_val;
if (cpu_is_omap24xx()) {
- val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
+ omap_type_val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
} else if (cpu_is_ti81xx()) {
- val = omap_ctrl_readl(TI81XX_CONTROL_STATUS);
+ omap_type_val = omap_ctrl_readl(TI81XX_CONTROL_STATUS);
} else if (soc_is_am33xx() || soc_is_am43xx()) {
- val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
+ omap_type_val = omap_ctrl_readl(AM33XX_CONTROL_STATUS);
} else if (cpu_is_omap34xx()) {
- val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
+ omap_type_val = omap_ctrl_readl(OMAP343X_CONTROL_STATUS);
} else if (cpu_is_omap44xx()) {
- val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS);
- } else if (soc_is_omap54xx() || soc_is_dra7xx()) {
- val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS);
- val &= OMAP5_DEVICETYPE_MASK;
- val >>= 6;
+ omap_type_val = omap_ctrl_readl(OMAP4_CTRL_MODULE_CORE_STATUS);
+ } else if (soc_is_omap54xx()) {
+ omap_type_val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS);
+ omap_type_val &= OMAP5_DEVICETYPE_MASK;
+ omap_type_val >>= 6;
goto out;
} else {
pr_err("Cannot detect omap type!\n");
goto out;
}
- val &= OMAP2_DEVICETYPE_MASK;
- val >>= 8;
+ omap_type_val &= OMAP2_DEVICETYPE_MASK;
+ omap_type_val >>= 8;
out:
- return val;
+ return omap_type_val;
}
EXPORT_SYMBOL(omap_type);
omap_type can be determined at the init time based on the device tree compatible string. This will avoid checking again for soc string. Signed-off-by: Keerthy <j-keerthy@ti.com> --- arch/arm/mach-omap2/id.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-)