[PATCH v3 7/9] ARM: DRA7: id: Add cpu detection support for DRA7xx based SoCs'
Rajendra Nayak
rnayak at ti.com
Tue Aug 6 04:11:44 EDT 2013
Hi Grygorii,
On Monday 05 August 2013 05:14 PM, Grygorii Strashko wrote:
> On 08/04/2013 07:27 PM, Rajendra Nayak wrote:
>> From: R Sricharan <r.sricharan at ti.com>
>>
>> The DRA7xx is a high-performance, infotainment application device,
>> based on enhanced OMAP architecture integrated on a 28-nm technology.
>>
>> Since DRA7 is a platform supported only using DT, the cpu detection
>> is based on the compatibles passed from DT blobs as suggested here
>> http://lists.infradead.org/pipermail/linux-arm-kernel/2013-July/187712.html
>>
>> Suggested-by: Felipe Balbi <balbi at ti.com>
>> Signed-off-by: R Sricharan <r.sricharan at ti.com>
>> Signed-off-by: Rajendra Nayak <rnayak at ti.com>
>> Acked-by: Santosh Shilimkar <santosh.shilimkar at ti.com>
>> ---
>> arch/arm/mach-omap1/include/mach/soc.h | 1 +
>> arch/arm/mach-omap2/id.c | 4 ++--
>> arch/arm/mach-omap2/soc.h | 17 +++++++++++++++++
>> 3 files changed, 20 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap1/include/mach/soc.h b/arch/arm/mach-omap1/include/mach/soc.h
>> index 6cf9c1c..612bd1c 100644
>> --- a/arch/arm/mach-omap1/include/mach/soc.h
>> +++ b/arch/arm/mach-omap1/include/mach/soc.h
>> @@ -195,6 +195,7 @@ IS_OMAP_TYPE(1710, 0x1710)
>> #define cpu_is_omap34xx() 0
>> #define cpu_is_omap44xx() 0
>> #define soc_is_omap54xx() 0
>> +#define soc_is_dra7xx() 0
>> #define soc_is_am33xx() 0
>> #define cpu_class_is_omap1() 1
>> #define cpu_class_is_omap2() 0
>> diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
>> index 2dc62a2..0289adc 100644
>> --- a/arch/arm/mach-omap2/id.c
>> +++ b/arch/arm/mach-omap2/id.c
>> @@ -61,7 +61,7 @@ int omap_type(void)
>> 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()) {
>> + } else if (soc_is_omap54xx() || soc_is_dra7xx()) {
>> val = omap_ctrl_readl(OMAP5XXX_CONTROL_STATUS);
>> val &= OMAP5_DEVICETYPE_MASK;
>> val >>= 6;
>> @@ -116,7 +116,7 @@ static u16 tap_prod_id;
>>
>> void omap_get_die_id(struct omap_die_id *odi)
>> {
>> - if (cpu_is_omap44xx() || soc_is_omap54xx()) {
>> + if (cpu_is_omap44xx() || soc_is_omap54xx() || soc_is_dra7xx()) {
>> odi->id_0 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_0);
>> odi->id_1 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_1);
>> odi->id_2 = read_tap_reg(OMAP_TAP_DIE_ID_44XX_2);
>> diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h
>> index 8c616e4..4588df1 100644
>> --- a/arch/arm/mach-omap2/soc.h
>> +++ b/arch/arm/mach-omap2/soc.h
>> @@ -8,6 +8,7 @@
>> * Written by Tony Lindgren <tony.lindgren at nokia.com>
>> *
>> * Added OMAP4/5 specific defines - Santosh Shilimkar<santosh.shilimkar at ti.com>
>> + * Added DRA7xxx specific defines - Sricharan R<r.sricharan at ti.com>
>> *
>> * This program is free software; you can redistribute it and/or modify
>> * it under the terms of the GNU General Public License as published by
>> @@ -35,6 +36,7 @@
>> #ifndef __ASSEMBLY__
>>
>> #include <linux/bitops.h>
>> +#include <linux/of.h>
>>
>> /*
>> * Test if multicore OMAP support is needed
>> @@ -105,6 +107,15 @@
>> # endif
>> #endif
>>
>> +#ifdef CONFIG_SOC_DRA7XX
>> +# ifdef OMAP_NAME
>> +# undef MULTI_OMAP2
>> +# define MULTI_OMAP2
>> +# else
>> +# define OMAP_NAME DRA7XX
>> +# endif
>> +#endif
>> +
>> /*
>> * Omap device type i.e. EMU/HS/TST/GP/BAD
>> */
>> @@ -233,6 +244,7 @@ IS_AM_SUBCLASS(437x, 0x437)
>> #define cpu_is_omap447x() 0
>> #define soc_is_omap54xx() 0
>> #define soc_is_omap543x() 0
>> +#define soc_is_dra7xx() 0
>>
>> #if defined(MULTI_OMAP2)
>> # if defined(CONFIG_ARCH_OMAP2)
>> @@ -379,6 +391,11 @@ IS_OMAP_TYPE(3430, 0x3430)
>> # define soc_is_omap543x() is_omap543x()
>> #endif
>>
>> +#if defined(CONFIG_SOC_DRA7XX)
>> +#undef soc_is_dra7xx
>> +#define soc_is_dra7xx() (of_machine_is_compatible("ti,dra7"))
>
> Wouldn't that be too expensive to call of_machine_is_compatible every
> time for DRA7 detection?
Ideally these soc checks should happen only once at init (see PATCH 8/9 in the
series for instance) so there should not be a 'every time' penalty.
regards,
Rajendra
>
> May be static variable can be used to store DRA7 presence status,
> smth. like this:
>
> static inline int is_dra7xx(void)
> {
> static int is_dra7 = -1;
>
> if (is_dra7 < 0)
> is_dra7 = of_machine_is_compatible("ti,dra7");
>
> return !!is_dra7;
> }
>
> (it's just an idea, not verified)
>
>> +#endif
>> +
>> /* Various silicon revisions for omap2 */
>> #define OMAP242X_CLASS 0x24200024
>> #define OMAP2420_REV_ES1_0 OMAP242X_CLASS
>>
>
>
> Regards,
> -grygorii
More information about the linux-arm-kernel
mailing list