From 568e790d63676b87c9e3be499e09dc3a390cbbfe Mon Sep 17 00:00:00 2001 From: Joakim Axelsson Date: Fri, 3 Dec 2010 13:18:04 +0800 Subject: db8500: Move cpu identifying function to SoC code Moved u8500_is_earlydrop() and cpu_is_u8500*() to include/asm-arm/arch-db8500/cpu.h. They are kept in cpu.h as the functions are very small and should be inlined with each use of them. The final binary actually also became around 100 bytes smaller. ST-Ericsson ID: None Signed-off-by: Joakim Axelsson Change-Id: Ied553b7c8a004a37c70c3e328a069ae8b2a92b23 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/9893 Reviewed-by: QATOOLS Reviewed-by: Michael BRANDT Tested-by: Michael BRANDT --- board/st/u8500/mcde_hw.c | 1 + board/st/u8500/mmc_host.c | 1 + board/st/u8500/mmc_utils.c | 1 + board/st/u8500/u8500.c | 51 +----------------------- cpu/arm_cortexa9/db8500/cpu.c | 3 +- cpu/arm_cortexa9/db8500/prcmu.c | 1 + cpu/arm_cortexa9/db8500/timer.c | 1 + include/asm-arm/arch-db8500/common.h | 5 --- include/asm-arm/arch-db8500/cpu.h | 76 ++++++++++++++++++++++++++++++++++++ 9 files changed, 83 insertions(+), 57 deletions(-) create mode 100644 include/asm-arm/arch-db8500/cpu.h diff --git a/board/st/u8500/mcde_hw.c b/board/st/u8500/mcde_hw.c index 24b850cd3..e281d874c 100644 --- a/board/st/u8500/mcde_hw.c +++ b/board/st/u8500/mcde_hw.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include diff --git a/board/st/u8500/mmc_host.c b/board/st/u8500/mmc_host.c index a9023eb10..8a2e0b3dd 100644 --- a/board/st/u8500/mmc_host.c +++ b/board/st/u8500/mmc_host.c @@ -15,6 +15,7 @@ #define DBG_LVL_VERBOSE (2) #include +#include #include #include #include "mmc_host.h" diff --git a/board/st/u8500/mmc_utils.c b/board/st/u8500/mmc_utils.c index 976310571..6c5a8150d 100644 --- a/board/st/u8500/mmc_utils.c +++ b/board/st/u8500/mmc_utils.c @@ -22,6 +22,7 @@ #include #include +#include #include #include #include diff --git a/board/st/u8500/u8500.c b/board/st/u8500/u8500.c index a76825d0e..1eb083585 100644 --- a/board/st/u8500/u8500.c +++ b/board/st/u8500/u8500.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -118,56 +119,6 @@ void show_boot_progress(int progress) } #endif -#define CPUID_DB8500ED 0x410fc090 -#define CPUID_DB8500V1 0x411fc091 -#define CPUID_DB8500V2 0x412fc091 - -#define ASICID_DB8500V11 0x008500A1 - -static unsigned int read_cpuid(void) -{ - unsigned int val; - - /* Main ID register (MIDR) */ - asm("mrc p15, 0, %0, c0, c0, 0" - : "=r" (val) - : - : "cc"); - - return val; -} - -static unsigned int read_asicid(void) -{ - unsigned int *address; - - if (u8500_is_earlydrop() || cpu_is_u8500v1()) - address = (void *) U8500_ASIC_ID_LOC_ED_V1; - else - address = (void *) U8500_ASIC_ID_LOC_V2; - - return readl(address); -} - -int u8500_is_earlydrop(void) -{ - return read_cpuid() == CPUID_DB8500ED; -} - -int cpu_is_u8500v1(void) -{ - return read_cpuid() == CPUID_DB8500V1; -} - -int cpu_is_u8500v11(void) -{ - return read_asicid() == ASICID_DB8500V11; -} - -int cpu_is_u8500v2(void) -{ - return read_cpuid() == CPUID_DB8500V2; -} /* * Miscellaneous platform dependent initialisations diff --git a/cpu/arm_cortexa9/db8500/cpu.c b/cpu/arm_cortexa9/db8500/cpu.c index 25b4a0462..1edf98aa0 100644 --- a/cpu/arm_cortexa9/db8500/cpu.c +++ b/cpu/arm_cortexa9/db8500/cpu.c @@ -12,8 +12,7 @@ #include #include #include -#include -#include +#include #include #ifdef CONFIG_ARCH_CPU_INIT diff --git a/cpu/arm_cortexa9/db8500/prcmu.c b/cpu/arm_cortexa9/db8500/prcmu.c index e411d1a1c..1cd4a7f8e 100644 --- a/cpu/arm_cortexa9/db8500/prcmu.c +++ b/cpu/arm_cortexa9/db8500/prcmu.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include diff --git a/cpu/arm_cortexa9/db8500/timer.c b/cpu/arm_cortexa9/db8500/timer.c index 42d70c73e..86065e5a8 100644 --- a/cpu/arm_cortexa9/db8500/timer.c +++ b/cpu/arm_cortexa9/db8500/timer.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include diff --git a/include/asm-arm/arch-db8500/common.h b/include/asm-arm/arch-db8500/common.h index 38079b79c..81f100a50 100644 --- a/include/asm-arm/arch-db8500/common.h +++ b/include/asm-arm/arch-db8500/common.h @@ -129,10 +129,5 @@ typedef u32 t_logical_address; /*function prototypes*/ void gpio_init(void); -int u8500_is_earlydrop(void); -int cpu_is_u8500v11(void); -int cpu_is_u8500v1(void); -int cpu_is_u8500v2(void); - int board_early_access(block_dev_desc_t *block_dev); #endif /* _DB8500_COMMON_H_ */ diff --git a/include/asm-arm/arch-db8500/cpu.h b/include/asm-arm/arch-db8500/cpu.h new file mode 100644 index 000000000..a9d62f4b0 --- /dev/null +++ b/include/asm-arm/arch-db8500/cpu.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) ST-Ericsson SA 2010 + * + * Author: Joakim Axelsson + * for ST-Ericsson + * + * Origin: Code split from board/st/u8500/u8500.c + * + * License terms: GNU General Public License (GPL), version 2. + */ + +#ifndef __DB8500_CPU_H__ +#define __DB8500_CPU_H__ + +#include +#include + +#define CPUID_DB8500ED 0x410fc090 +#define CPUID_DB8500V1 0x411fc091 +#define CPUID_DB8500V2 0x412fc091 + +#define ASICID_DB8500V11 0x008500A1 + +/* + * Keep these CPU identity functions inline here because they are short + * and used by many. Will make for fast optimized compiled code. + */ + +static inline unsigned int read_cpuid(void) +{ + unsigned int val; + + /* Main ID register (MIDR) */ + asm("mrc p15, 0, %0, c0, c0, 0" + : "=r" (val) + : + : "cc"); + + return val; +} + +static inline int u8500_is_earlydrop(void) +{ + return read_cpuid() == CPUID_DB8500ED; +} + +static inline int cpu_is_u8500v1(void) +{ + return read_cpuid() == CPUID_DB8500V1; +} + +static inline int cpu_is_u8500v2(void) +{ + return read_cpuid() == CPUID_DB8500V2; +} + +static inline unsigned int read_asicid(void) +{ + unsigned int *address; + + if (u8500_is_earlydrop() || cpu_is_u8500v1()) + address = (void *) U8500_ASIC_ID_LOC_ED_V1; + else + address = (void *) U8500_ASIC_ID_LOC_V2; + + return readl(address); +} + +static inline int cpu_is_u8500v11(void) +{ + return read_asicid() == ASICID_DB8500V11; +} + + +#endif /* __DB8500_CPU_H__ */ + -- cgit v1.2.3