From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from metis.ext.pengutronix.de ([2001:6f8:1178:4:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1UGC7D-0003gI-5A for barebox@lists.infradead.org; Thu, 14 Mar 2013 17:39:07 +0000 From: Marc Kleine-Budde Date: Thu, 14 Mar 2013 18:38:45 +0100 Message-Id: <1363282729-18545-7-git-send-email-mkl@pengutronix.de> In-Reply-To: <1363282729-18545-1-git-send-email-mkl@pengutronix.de> References: <1363282729-18545-1-git-send-email-mkl@pengutronix.de> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH 06/10] bootsource: create arch independent bootsource framework To: barebox@lists.infradead.org This patch seperates the imx independent from the arch independent code. The following functions and enums are renamed: - imx_bootsource() -> bootsource_get() - imx_set_bootsource() -> bootsource_set() - enum imx_bootsource -> enum bootsource Signed-off-by: Marc Kleine-Budde --- arch/arm/boards/efika-mx-smartbook/board.c | 3 +- arch/arm/boards/karo-tx53/board.c | 3 +- arch/arm/boards/pcm038/pcm038.c | 3 +- arch/arm/mach-imx/boot.c | 57 +++++++----------------------- arch/arm/mach-imx/include/mach/generic.h | 15 -------- common/Makefile | 1 + common/bootsource.c | 53 +++++++++++++++++++++++++++ include/bootsource.h | 19 ++++++++++ 8 files changed, 92 insertions(+), 62 deletions(-) create mode 100644 common/bootsource.c create mode 100644 include/bootsource.h diff --git a/arch/arm/boards/efika-mx-smartbook/board.c b/arch/arm/boards/efika-mx-smartbook/board.c index 03399a3..e9b6062 100644 --- a/arch/arm/boards/efika-mx-smartbook/board.c +++ b/arch/arm/boards/efika-mx-smartbook/board.c @@ -14,6 +14,7 @@ */ #include +#include #include #include #include @@ -479,7 +480,7 @@ device_initcall(efikamx_devices_init); static int efikamx_part_init(void) { - if (imx_bootsource() == BOOTSOURCE_MMC) { + if (bootsource_get() == BOOTSOURCE_MMC) { devfs_add_partition("mmc_left", 0x00000, 0x80000, DEVFS_PARTITION_FIXED, "self0"); devfs_add_partition("mmc_left", 0x80000, 0x80000, diff --git a/arch/arm/boards/karo-tx53/board.c b/arch/arm/boards/karo-tx53/board.c index 3112552..7e1ef37 100644 --- a/arch/arm/boards/karo-tx53/board.c +++ b/arch/arm/boards/karo-tx53/board.c @@ -13,6 +13,7 @@ * */ #include +#include #include #include #include @@ -234,7 +235,7 @@ static int tx53_part_init(void) { const char *envdev; - switch (imx_bootsource()) { + switch (bootsource_get()) { case BOOTSOURCE_MMC: devfs_add_partition("disk0", 0x00000, SZ_512K, DEVFS_PARTITION_FIXED, "self0"); devfs_add_partition("disk0", SZ_512K, SZ_1M, DEVFS_PARTITION_FIXED, "env0"); diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c index af31414..1bd5ffe 100644 --- a/arch/arm/boards/pcm038/pcm038.c +++ b/arch/arm/boards/pcm038/pcm038.c @@ -16,6 +16,7 @@ #define pr_fmt(fmt) "pcm038: " fmt #include +#include #include #include #include @@ -295,7 +296,7 @@ static int pcm038_devices_init(void) */ imx27_add_fec(&fec_info); - switch (imx_bootsource()) { + switch (bootsource_get()) { case BOOTSOURCE_NAND: devfs_add_partition("nand0", 0x00000, 0x80000, DEVFS_PARTITION_FIXED, "self_raw"); diff --git a/arch/arm/mach-imx/boot.c b/arch/arm/mach-imx/boot.c index 95a7673..05730e4 100644 --- a/arch/arm/mach-imx/boot.c +++ b/arch/arm/mach-imx/boot.c @@ -12,6 +12,7 @@ */ #include +#include #include #include #include @@ -21,40 +22,8 @@ #include #include -static const char *bootsource_str[] = { - [BOOTSOURCE_UNKNOWN] = "unknown", - [BOOTSOURCE_NAND] = "nand", - [BOOTSOURCE_NOR] = "nor", - [BOOTSOURCE_MMC] = "mmc", - [BOOTSOURCE_I2C] = "i2c", - [BOOTSOURCE_SPI] = "spi", - [BOOTSOURCE_SERIAL] = "serial", - [BOOTSOURCE_ONENAND] = "onenand", - [BOOTSOURCE_HD] = "harddisk", -}; - -static enum imx_bootsource bootsource; - -void imx_set_bootsource(enum imx_bootsource src) -{ - if (src >= ARRAY_SIZE(bootsource_str)) - src = BOOTSOURCE_UNKNOWN; - - bootsource = src; - - setenv("barebox_loc", bootsource_str[src]); - export("barebox_loc"); -} - -enum imx_bootsource imx_bootsource(void) -{ - return bootsource; -} - -BAREBOX_MAGICVAR(barebox_loc, "The source barebox has been booted from"); - /* [CTRL][TYPE] */ -static const enum imx_bootsource locations[4][4] = { +static const enum bootsource locations[4][4] = { { /* CTRL = WEIM */ BOOTSOURCE_NOR, BOOTSOURCE_UNKNOWN, @@ -98,11 +67,11 @@ static const enum imx_bootsource locations[4][4] = { */ static void imx25_35_boot_save_loc(unsigned int ctrl, unsigned int type) { - enum imx_bootsource src; + enum bootsource src; src = locations[ctrl][type]; - imx_set_bootsource(src); + bootsource_set(src); } void imx25_boot_save_loc(void __iomem *ccm_base) @@ -136,7 +105,7 @@ void imx35_boot_save_loc(void __iomem *ccm_base) void imx27_boot_save_loc(void __iomem *sysctrl_base) { - enum imx_bootsource src; + enum bootsource src; uint32_t val; val = readl(sysctrl_base + IMX27_SYSCTRL_GPCR); @@ -158,7 +127,7 @@ void imx27_boot_save_loc(void __iomem *sysctrl_base) break; } - imx_set_bootsource(src); + bootsource_set(src); } #define IMX51_SRC_SBMR 0x4 @@ -168,7 +137,7 @@ void imx27_boot_save_loc(void __iomem *sysctrl_base) void imx51_boot_save_loc(void __iomem *src_base) { - enum imx_bootsource src = BOOTSOURCE_UNKNOWN; + enum bootsource src = BOOTSOURCE_UNKNOWN; uint32_t reg; unsigned int ctrl, type; @@ -193,13 +162,13 @@ void imx51_boot_save_loc(void __iomem *src_base) } - imx_set_bootsource(src); + bootsource_set(src); } #define IMX53_SRC_SBMR 0x4 void imx53_boot_save_loc(void __iomem *src_base) { - enum imx_bootsource src = BOOTSOURCE_UNKNOWN; + enum bootsource src = BOOTSOURCE_UNKNOWN; uint32_t cfg1 = readl(src_base + IMX53_SRC_SBMR) & 0xff; switch (cfg1 >> 4) { @@ -225,7 +194,7 @@ void imx53_boot_save_loc(void __iomem *src_base) if (cfg1 & (1 << 7)) src = BOOTSOURCE_NAND; - imx_set_bootsource(src); + bootsource_set(src); } #define IMX6_SRC_SBMR1 0x04 @@ -233,7 +202,7 @@ void imx53_boot_save_loc(void __iomem *src_base) void imx6_boot_save_loc(void __iomem *src_base) { - enum imx_bootsource src = BOOTSOURCE_UNKNOWN; + enum bootsource src = BOOTSOURCE_UNKNOWN; uint32_t sbmr2 = readl(src_base + IMX6_SRC_SBMR2) >> 24; uint32_t cfg1 = readl(src_base + IMX6_SRC_SBMR1) & 0xff; uint32_t boot_cfg_4_2_0; @@ -252,7 +221,7 @@ void imx6_boot_save_loc(void __iomem *src_base) break; }; - imx_set_bootsource(src); + bootsource_set(src); return; @@ -283,7 +252,7 @@ internal_boot: if (cfg1 & (1 << 7)) src = BOOTSOURCE_NAND; - imx_set_bootsource(src); + bootsource_set(src); return; } diff --git a/arch/arm/mach-imx/include/mach/generic.h b/arch/arm/mach-imx/include/mach/generic.h index f6e9ecf..6bce787 100644 --- a/arch/arm/mach-imx/include/mach/generic.h +++ b/arch/arm/mach-imx/include/mach/generic.h @@ -1,21 +1,6 @@ u64 imx_uid(void); -enum imx_bootsource { - BOOTSOURCE_UNKNOWN, - BOOTSOURCE_NAND, - BOOTSOURCE_NOR, - BOOTSOURCE_MMC, - BOOTSOURCE_I2C, - BOOTSOURCE_SPI, - BOOTSOURCE_SERIAL, - BOOTSOURCE_ONENAND, - BOOTSOURCE_HD, -}; - -enum imx_bootsource imx_bootsource(void); -void imx_set_bootsource(enum imx_bootsource src); - void imx25_boot_save_loc(void __iomem *ccm_base); void imx35_boot_save_loc(void __iomem *ccm_base); void imx27_boot_save_loc(void __iomem *sysctrl_base); diff --git a/common/Makefile b/common/Makefile index 7206eed..b9ae2e3 100644 --- a/common/Makefile +++ b/common/Makefile @@ -40,6 +40,7 @@ obj-$(CONFIG_PASSWORD) += password.o obj-$(CONFIG_MODULES) += module.o obj-$(CONFIG_FLEXIBLE_BOOTARGS) += bootargs.o obj-$(CONFIG_BAREBOX_UPDATE) += bbu.o +obj-y += bootsource.o extra-$(CONFIG_MODULES) += module.lds extra-y += barebox_default_env barebox_default_env.h diff --git a/common/bootsource.c b/common/bootsource.c new file mode 100644 index 0000000..2aa0ffa --- /dev/null +++ b/common/bootsource.c @@ -0,0 +1,53 @@ +/* + * + * Copyright (C) 2011 Marc Reilly + * Copyright (C) 2013 Marc Kleine-Budde + * + * 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 the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#include +#include +#include +#include + +static const char *bootsource_str[] = { + [BOOTSOURCE_UNKNOWN] = "unknown", + [BOOTSOURCE_NAND] = "nand", + [BOOTSOURCE_NOR] = "nor", + [BOOTSOURCE_MMC] = "mmc", + [BOOTSOURCE_I2C] = "i2c", + [BOOTSOURCE_SPI] = "spi", + [BOOTSOURCE_SERIAL] = "serial", + [BOOTSOURCE_ONENAND] = "onenand", + [BOOTSOURCE_HD] = "harddisk", +}; + +static enum bootsource bootsource = BOOTSOURCE_UNKNOWN; + +void bootsource_set(enum bootsource src) +{ + if (src >= ARRAY_SIZE(bootsource_str)) + src = BOOTSOURCE_UNKNOWN; + + bootsource = src; + + setenv("barebox_loc", bootsource_str[src]); + export("barebox_loc"); +} + +enum bootsource bootsource_get(void) +{ + return bootsource; +} + +BAREBOX_MAGICVAR(barebox_loc, "The source barebox has been booted from"); diff --git a/include/bootsource.h b/include/bootsource.h new file mode 100644 index 0000000..ecd5938 --- /dev/null +++ b/include/bootsource.h @@ -0,0 +1,19 @@ +#ifndef __BOOTSOURCE_H__ +#define __BOOTSOURCE_H__ + +enum bootsource { + BOOTSOURCE_UNKNOWN, + BOOTSOURCE_NAND, + BOOTSOURCE_NOR, + BOOTSOURCE_MMC, + BOOTSOURCE_I2C, + BOOTSOURCE_SPI, + BOOTSOURCE_SERIAL, + BOOTSOURCE_ONENAND, + BOOTSOURCE_HD, +}; + +enum bootsource bootsource_get(void); +void bootsource_set(enum bootsource src); + +#endif /* __BOOTSOURCE_H__ */ -- 1.8.2.rc2 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox