[PATCH v3 7/9] ARM: DRA7: id: Add cpu detection support for DRA7xx based SoCs'
Grygorii Strashko
grygorii.strashko at ti.com
Tue Aug 6 07:59:41 EDT 2013
On 08/06/2013 11:11 AM, Rajendra Nayak wrote:
> 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.
Ok, Agreed then.
>
> 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