Consolidate bootcount code into drivers/bootcount
Subsystems (4)
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
This patch moves all bootcount implementations into a common
directory: drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.
---
v2:
- Added CONFIG_BOOTCOUNT_LE to bootcount_davinci.c and enabled it in calimain.h to select little-endian accessors.
Makefile | 3 +
arch/arm/cpu/arm926ejs/at91/cpu.c | 26 -------
arch/arm/cpu/armv7/highbank/Makefile | 2 +-
arch/arm/cpu/armv7/highbank/bootcount.c | 36 ----------
arch/arm/cpu/ixp/cpu.c | 22 ------
arch/powerpc/lib/Makefile | 1 -
board/enbw/enbw_cmc/enbw_cmc.c | 29 --------
board/keymile/km_arm/km_arm.c | 51 --------------
board/omicron/calimain/calimain.c | 29 --------
drivers/bootcount/Makefile | 47 +++++++++++++
.../powerpc/lib => drivers/bootcount}/bootcount.c | 10 ++-
drivers/bootcount/bootcount_at91.c | 43 ++++++++++++
.../bootcount/bootcount_blackfin.c | 0
drivers/bootcount/bootcount_davinci.c | 72 ++++++++++++++++++++
drivers/bootcount/bootcount_ram.c | 72 ++++++++++++++++++++
include/configs/calimain.h | 1 +
include/configs/km/km_arm.h | 2 +
17 files changed, 248 insertions(+), 198 deletions(-)
delete mode 100644 arch/arm/cpu/armv7/highbank/bootcount.c
create mode 100644 drivers/bootcount/Makefile
rename {arch/powerpc/lib => drivers/bootcount}/bootcount.c (92%)
create mode 100644 drivers/bootcount/bootcount_at91.c
rename arch/blackfin/cpu/bootcount.c => drivers/bootcount/bootcount_blackfin.c (100%)
create mode 100644 drivers/bootcount/bootcount_davinci.c
create mode 100644 drivers/bootcount/bootcount_ram.cMakefile +3 -0
@@ -249,6 +249,9 @@ LIBS += net/libnet.o LIBS += disk/libdisk.o LIBS += drivers/bios_emulator/libatibiosemu.o LIBS += drivers/block/libblock.o +ifeq ($(CONFIG_BOOTCOUNT_LIMIT),y) +LIBS += drivers/bootcount/libbootcount.o +endif LIBS += drivers/dma/libdma.o LIBS += drivers/fpga/libfpga.o LIBS += drivers/gpio/libgpio.o
arch/arm/cpu/arm926ejs/at91/cpu.c +0 -26
@@ -71,29 +71,3 @@ int print_cpuinfo(void) return 0; }#endif - -#ifdef CONFIG_BOOTCOUNT_LIMIT -/* -* We combine the BOOTCOUNT_MAGIC and bootcount in one 32-bit register. -* This is done so we need to use only one of the four GPBR registers. -*/ -void bootcount_store (ulong a) -{ -at91_gpbr_t *gpbr = (at91_gpbr_t *)ATMEL_BASE_GPBR ; - -writel ((BOOTCOUNT_MAGIC &0xffff0000 ) | (a &0x0000ffff ), - &gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT ]); -} - -ulong bootcount_load (void ) -{ -at91_gpbr_t *gpbr = (at91_gpbr_t *)ATMEL_BASE_GPBR ; - -ulong val =readl (&gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT ]); -if ((val &0xffff0000 ) != (BOOTCOUNT_MAGIC &0xffff0000 )) -return 0 ; -else -return val &0x0000ffff ; -} - -#endif /* CONFIG_BOOTCOUNT_LIMIT */
arch/arm/cpu/armv7/highbank/Makefile +1 -1
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(SOC).o -COBJS := timer.o bootcount.o +COBJS := timer.o SOBJS := SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
arch/arm/cpu/armv7/highbank/bootcount.c deleted +0 -36
@@ -1,36 +0,0 @@ -/* -* Copyright 2011 Calxeda, Inc. -* -* 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 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. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include <common.h> -#include <asm/io.h> - -#ifdef CONFIG_BOOTCOUNT_LIMIT -void bootcount_store (ulong a) -{ -writel ((BOOTCOUNT_MAGIC &0xffff0000 ) | a,CONFIG_SYS_BOOTCOUNT_ADDR ); -} - -ulong bootcount_load (void ) -{ -u32 tmp =readl (CONFIG_SYS_BOOTCOUNT_ADDR ); - -if ((tmp &0xffff0000 ) != (BOOTCOUNT_MAGIC &0xffff0000 )) -return 0 ; -else -return tmp &0x0000ffff ; -} -#endif
arch/arm/cpu/ixp/cpu.c +0 -22
@@ -107,28 +107,6 @@ void pci_init(void)} */ -#ifdef CONFIG_BOOTCOUNT_LIMIT - -void bootcount_store (ulong a) -{ -volatile ulong *save_addr = (volatile ulong *)(CONFIG_SYS_BOOTCOUNT_ADDR ); - - save_addr[0 ] = a; - save_addr[1 ] =BOOTCOUNT_MAGIC ; -} - -ulong bootcount_load (void ) -{ -volatile ulong *save_addr = (volatile ulong *)(CONFIG_SYS_BOOTCOUNT_ADDR ); - -if (save_addr[1 ] !=BOOTCOUNT_MAGIC ) -return 0 ; -else -return save_addr[0 ]; -} - -#endif /* CONFIG_BOOTCOUNT_LIMIT */ -int cpu_eth_init (bd_t *bis) {#ifdef CONFIG_IXP4XX_NPE
arch/powerpc/lib/Makefile +0 -1
@@ -46,7 +46,6 @@ SOBJS-y += reloc.o COBJS-$(CONFIG_BAT_RW) += bat_rw.o COBJS-y += board.o COBJS-y += bootm.o -COBJS-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount.o COBJS-y += cache.o COBJS-y += extable.o COBJS-y += interrupts.o
board/enbw/enbw_cmc/enbw_cmc.c +0 -29
@@ -517,35 +517,6 @@ void arch_memory_failure_handle(void) }#endif -#if defined(CONFIG_BOOTCOUNT_LIMIT ) -void bootcount_store (ulong a) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -/* -* write RTC kick register to enable write -* for RTC Scratch registers. Scratch0 and 1 are -* used for bootcount values. -*/ -writel (RTC_KICK0R_WE , ®->kick0r); -writel (RTC_KICK1R_WE , ®->kick1r); -out_be32 (®->scratch0, a); -out_be32 (®->scratch1,BOOTCOUNT_MAGIC ); -} - -ulong bootcount_load (void ) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -if (in_be32 (®->scratch1) !=BOOTCOUNT_MAGIC ) -return 0 ; -else -return in_be32 (®->scratch0); -} -#endif -void board_gpio_init (void ) {struct davinci_gpio *gpio = davinci_gpio_bank01;
board/keymile/km_arm/km_arm.c +0 -51
57 lines not on this page · raw message
board/omicron/calimain/calimain.c +0 -29
@@ -157,32 +157,3 @@ void hw_watchdog_reset(void) davinci_hw_watchdog_reset(); }#endif - -#if defined(CONFIG_BOOTCOUNT_LIMIT ) -void bootcount_store (ulong a) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -/* -* write RTC kick register to enable write -* for RTC Scratch registers. Scratch0 and 1 are -* used for bootcount values. -*/ -writel (RTC_KICK0R_WE , ®->kick0r); -writel (RTC_KICK1R_WE , ®->kick1r); -writel (a, ®->scratch0); -writel (BOOTCOUNT_MAGIC , ®->scratch1); -} - -ulong bootcount_load (void ) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -if (readl (®->scratch1) !=BOOTCOUNT_MAGIC ) -return 0 ; -else -return readl (®->scratch0); -} -#endif
drivers/bootcount/Makefile new file +47 -0
47 lines not on this page · raw message
drivers/bootcount/bootcount.c renamed from arch/powerpc/lib/bootcount.c +7 -3
@@ -1,5 +1,5 @@/* -* (C) Copyright 2010 +* (C) Copyright 2010-2012 * Stefan Roese, DENX Software Engineering, sr at denx.de. * * See file CREDITS for list of people who contributed to this
@@ -22,6 +22,7 @@*/ #include <common.h> +#include <linux/compiler.h> #include <asm/io.h> /*
@@ -65,7 +66,9 @@#endif /* !defined(CONFIG_SYS_BOOTCOUNT_ADDR) */ -void bootcount_store (ulong a) +/* Now implement the generic default functions */ +#if defined(CONFIG_SYS_BOOTCOUNT_ADDR ) +__weak void bootcount_store (ulong a) {void *reg = (void *)CONFIG_SYS_BOOTCOUNT_ADDR ;
@@ -77,7 +80,7 @@ void bootcount_store(ulong a)#endif } -ulong bootcount_load (void ) +__weak ulong bootcount_load (void ) {void *reg = (void *)CONFIG_SYS_BOOTCOUNT_ADDR ;
@@ -95,3 +98,4 @@ ulong bootcount_load(void)return in_be32 (reg); #endif } +#endif
drivers/bootcount/bootcount_at91.c new file +43 -0
43 lines not on this page · raw message
drivers/bootcount/bootcount_blackfin.c renamed from arch/blackfin/cpu/bootcount.c +0 -0
drivers/bootcount/bootcount_davinci.c new file +72 -0
72 lines not on this page · raw message
drivers/bootcount/bootcount_ram.c new file +72 -0
72 lines not on this page · raw message
include/configs/calimain.h +1 -0
@@ -354,6 +354,7 @@#define CONFIG_SYS_INIT_SP_ADDR (0x8001ff00)#define CONFIG_BOOTCOUNT_LIMIT +#define CONFIG_BOOTCOUNT_LE /* Use little-endian accessors */ #define CONFIG_SYS_BOOTCOUNT_ADDR DAVINCI_RTC_BASE#ifndef __ASSEMBLY__
include/configs/km/km_arm.h +2 -0
@@ -274,6 +274,8 @@ int get_scl(void);#define CONFIG_KM_RESERVED_PRAM 0x801000/* address for the bootcount (taken from end of RAM) */ #define BOOTCOUNT_ADDR (CONFIG_KM_RESERVED_PRAM) +/* Use generic bootcount RAM driver */ +#define CONFIG_BOOTCOUNT_RAM /* enable POST tests */ #define CONFIG_POST (CONFIG_SYS_POST_MEM_REGIONS)
Signature · 1 line
1.7.10.4
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
Hi Stefan,
Quoted 3 lines · Stefan Roese
This patch moves all bootcount implementations into a common
directory:drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.
I have tested it on km_kirkwood (km_arm) with the bootcount_ram driver and it works as expected on this platform.
Quoted 40 lines
Signed-off-by Stefan Roese <[email protected]>Cc Heiko Schocher <[email protected]>Cc Valentin Longchamp <[email protected]>Cc Christian Riesch <[email protected]>Cc Manfred Rudigier <[email protected]>Cc Mike Frysinger <[email protected]>Cc Rob Herring <[email protected]>Cc Reinhard Meyer <[email protected]>---
v2:
- AddedCONFIG_BOOTCOUNT_LEtobootcount_davinci.cand enabled it incalimain.hto select little-endian accessors.Makefile | 3 + arch/arm/cpu/arm926ejs/at91/cpu.c | 26 ------- arch/arm/cpu/armv7/highbank/Makefile | 2 +- arch/arm/cpu/armv7/highbank/bootcount.c | 36 ---------- arch/arm/cpu/ixp/cpu.c | 22 ------ arch/powerpc/lib/Makefile | 1 - board/enbw/enbw_cmc/enbw_cmc.c | 29 -------- board/keymile/km_arm/km_arm.c | 51 -------------- board/omicron/calimain/calimain.c | 29 -------- drivers/bootcount/Makefile | 47 +++++++++++++ .../powerpc/lib => drivers/bootcount}/bootcount.c | 10 ++- drivers/bootcount/bootcount_at91.c | 43 ++++++++++++ .../bootcount/bootcount_blackfin.c | 0 drivers/bootcount/bootcount_davinci.c | 72 ++++++++++++++++++++ drivers/bootcount/bootcount_ram.c | 72 ++++++++++++++++++++ include/configs/calimain.h | 1 + include/configs/km/km_arm.h | 2 + 17 files changed, 248 insertions(+), 198 deletions(-) delete mode 100644 arch/arm/cpu/armv7/highbank/bootcount.c create mode 100644 drivers/bootcount/Makefile rename {arch/powerpc/lib => drivers/bootcount}/bootcount.c (92%) create mode 100644 drivers/bootcount/bootcount_at91.c rename arch/blackfin/cpu/bootcount.c => drivers/bootcount/bootcount_blackfin.c (100%) create mode 100644 drivers/bootcount/bootcount_davinci.c create mode 100644 drivers/bootcount/bootcount_ram.c
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
In reply to Stefan RoeseQuoted 12 lines · Stefan Roese
This patch moves all bootcount implementations into a common
directory:drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.Signed-off-by Stefan Roese <[email protected]>Cc Heiko Schocher <[email protected]>Cc Valentin Longchamp <[email protected]>Cc Christian Riesch <[email protected]>Cc Manfred Rudigier <[email protected]>Cc Mike Frysinger <[email protected]>Cc Rob Herring <[email protected]>Cc Reinhard Meyer <[email protected]>
Quoted 4 lines
---
v2:
- AddedCONFIG_BOOTCOUNT_LEtobootcount_davinci.cand enabled it incalimain.hto select little-endian accessors.
highbank is also LE. Why don't you use __BYTE_ORDER rather than a new define?
Rob
Quoted 648 lines
Makefile | 3 + arch/arm/cpu/arm926ejs/at91/cpu.c | 26 ------- arch/arm/cpu/armv7/highbank/Makefile | 2 +- arch/arm/cpu/armv7/highbank/bootcount.c | 36 ---------- arch/arm/cpu/ixp/cpu.c | 22 ------ arch/powerpc/lib/Makefile | 1 - board/enbw/enbw_cmc/enbw_cmc.c | 29 -------- board/keymile/km_arm/km_arm.c | 51 -------------- board/omicron/calimain/calimain.c | 29 -------- drivers/bootcount/Makefile | 47 +++++++++++++ .../powerpc/lib => drivers/bootcount}/bootcount.c | 10 ++- drivers/bootcount/bootcount_at91.c | 43 ++++++++++++ .../bootcount/bootcount_blackfin.c | 0 drivers/bootcount/bootcount_davinci.c | 72 ++++++++++++++++++++ drivers/bootcount/bootcount_ram.c | 72 ++++++++++++++++++++ include/configs/calimain.h | 1 + include/configs/km/km_arm.h | 2 + 17 files changed, 248 insertions(+), 198 deletions(-) delete mode 100644 arch/arm/cpu/armv7/highbank/bootcount.c create mode 100644 drivers/bootcount/Makefile rename {arch/powerpc/lib => drivers/bootcount}/bootcount.c (92%) create mode 100644 drivers/bootcount/bootcount_at91.c rename arch/blackfin/cpu/bootcount.c => drivers/bootcount/bootcount_blackfin.c (100%) create mode 100644 drivers/bootcount/bootcount_davinci.c create mode 100644 drivers/bootcount/bootcount_ram.cMakefile +3
-0@@ -249,6 +249,9 @@ LIBS += net/libnet.o LIBS += disk/libdisk.o LIBS += drivers/bios_emulator/libatibiosemu.o LIBS += drivers/block/libblock.o +ifeq ($(CONFIG_BOOTCOUNT_LIMIT),y) +LIBS += drivers/bootcount/libbootcount.o +endif LIBS += drivers/dma/libdma.o LIBS += drivers/fpga/libfpga.o LIBS += drivers/gpio/libgpio.oarch/arm/cpu/arm926ejs/at91/cpu.c +0
-26@@ -71,29 +71,3 @@ int print_cpuinfo(void) return 0; }#endif - -#ifdef CONFIG_BOOTCOUNT_LIMIT -/* -* We combine the BOOTCOUNT_MAGIC and bootcount in one 32-bit register. -* This is done so we need to use only one of the four GPBR registers. -*/ -void bootcount_store (ulong a) -{ -at91_gpbr_t *gpbr = (at91_gpbr_t *)ATMEL_BASE_GPBR ; - -writel ((BOOTCOUNT_MAGIC &0xffff0000 ) | (a &0x0000ffff ), - &gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT ]); -} - -ulong bootcount_load (void ) -{ -at91_gpbr_t *gpbr = (at91_gpbr_t *)ATMEL_BASE_GPBR ; - -ulong val =readl (&gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT ]); -if ((val &0xffff0000 ) != (BOOTCOUNT_MAGIC &0xffff0000 )) -return 0 ; -else -return val &0x0000ffff ; -} - -#endif /* CONFIG_BOOTCOUNT_LIMIT */ arch/arm/cpu/armv7/highbank/Makefile +1
-1@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk LIB = $(obj)lib$(SOC).o -COBJS := timer.o bootcount.o +COBJS := timer.o SOBJS := SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)arch/arm/cpu/armv7/highbank/bootcount.c deleted +0
-36@@ -1,36 +0,0 @@ -/* -* Copyright 2011 Calxeda, Inc. -* -* 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 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. -* -* You should have received a copy of the GNU General Public License along with -* this program. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include <common.h> -#include <asm/io.h> - -#ifdef CONFIG_BOOTCOUNT_LIMIT -void bootcount_store (ulong a) -{ -writel ((BOOTCOUNT_MAGIC &0xffff0000 ) | a,CONFIG_SYS_BOOTCOUNT_ADDR ); -} - -ulong bootcount_load (void ) -{ -u32 tmp =readl (CONFIG_SYS_BOOTCOUNT_ADDR ); - -if ((tmp &0xffff0000 ) != (BOOTCOUNT_MAGIC &0xffff0000 )) -return 0 ; -else -return tmp &0x0000ffff ; -} -#endif arch/arm/cpu/ixp/cpu.c +0
-22@@ -107,28 +107,6 @@ void pci_init(void)} */ -#ifdef CONFIG_BOOTCOUNT_LIMIT - -void bootcount_store (ulong a) -{ -volatile ulong *save_addr = (volatile ulong *)(CONFIG_SYS_BOOTCOUNT_ADDR ); - - save_addr[0 ] = a; - save_addr[1 ] =BOOTCOUNT_MAGIC ; -} - -ulong bootcount_load (void ) -{ -volatile ulong *save_addr = (volatile ulong *)(CONFIG_SYS_BOOTCOUNT_ADDR ); - -if (save_addr[1 ] !=BOOTCOUNT_MAGIC ) -return 0 ; -else -return save_addr[0 ]; -} - -#endif /* CONFIG_BOOTCOUNT_LIMIT */ -int cpu_eth_init (bd_t *bis) {#ifdef CONFIG_IXP4XX_NPE arch/powerpc/lib/Makefile +0
-1@@ -46,7 +46,6 @@ SOBJS-y += reloc.o COBJS-$(CONFIG_BAT_RW) += bat_rw.o COBJS-y += board.o COBJS-y += bootm.o -COBJS-$(CONFIG_BOOTCOUNT_LIMIT) += bootcount.o COBJS-y += cache.o COBJS-y += extable.o COBJS-y += interrupts.oboard/enbw/enbw_cmc/enbw_cmc.c +0
-29@@ -517,35 +517,6 @@ void arch_memory_failure_handle(void) }#endif -#if defined(CONFIG_BOOTCOUNT_LIMIT ) -void bootcount_store (ulong a) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -/* -* write RTC kick register to enable write -* for RTC Scratch registers. Scratch0 and 1 are -* used for bootcount values. -*/ -writel (RTC_KICK0R_WE , ®->kick0r); -writel (RTC_KICK1R_WE , ®->kick1r); -out_be32 (®->scratch0, a); -out_be32 (®->scratch1,BOOTCOUNT_MAGIC ); -} - -ulong bootcount_load (void ) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -if (in_be32 (®->scratch1) !=BOOTCOUNT_MAGIC ) -return 0 ; -else -return in_be32 (®->scratch0); -} -#endif -void board_gpio_init (void ) {struct davinci_gpio *gpio = davinci_gpio_bank01;board/keymile/km_arm/km_arm.c +0
-51@@ -404,57 +404,6 @@ int hush_init_var(void) }#endif -#if defined(CONFIG_BOOTCOUNT_LIMIT ) -const ulong patterns[] = {0x00000000 , -0xFFFFFFFF , -0xFF00FF00 , -0x0F0F0F0F , -0xF0F0F0F0 }; -const ulong NBR_OF_PATTERNS =sizeof (patterns)/sizeof (*patterns); -const ulong OFFS_PATTERN =3 ; -const ulong REPEAT_PATTERN =1000 ; - -void bootcount_store (ulong a) -{ -ulong *save_addr; -ulong size =0 ; -int i; - -for (i =0 ; i <CONFIG_NR_DRAM_BANKS ; i++) - size += gd->bd->bi_dram[i].size; - save_addr = (ulong *)(size -BOOTCOUNT_ADDR ); -writel (a, save_addr); -writel (BOOTCOUNT_MAGIC , &save_addr[1 ]); - -for (i =0 ; i <REPEAT_PATTERN ; i++) -writel (patterns[i %NBR_OF_PATTERNS ], - &save_addr[i+OFFS_PATTERN ]); - -} - -ulong bootcount_load (void ) -{ -ulong *save_addr; -ulong size =0 ; -ulong counter =0 ; -int i, tmp; - -for (i =0 ; i <CONFIG_NR_DRAM_BANKS ; i++) - size += gd->bd->bi_dram[i].size; - save_addr = (ulong *)(size -BOOTCOUNT_ADDR ); - - counter =readl (&save_addr[0 ]); - -/* Is the counter reliable, check in the big pattern for bit errors */ -for (i =0 ; (i <REPEAT_PATTERN ) && (counter !=0 ); i++) { - tmp =readl (&save_addr[i+OFFS_PATTERN ]); -if (tmp != patterns[i %NBR_OF_PATTERNS ]) - counter =0 ; - } -return counter; -} -#endif -#if defined(CONFIG_SOFT_I2C )void set_sda (int state) {board/omicron/calimain/calimain.c +0
-29@@ -157,32 +157,3 @@ void hw_watchdog_reset(void) davinci_hw_watchdog_reset(); }#endif - -#if defined(CONFIG_BOOTCOUNT_LIMIT ) -void bootcount_store (ulong a) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -/* -* write RTC kick register to enable write -* for RTC Scratch registers. Scratch0 and 1 are -* used for bootcount values. -*/ -writel (RTC_KICK0R_WE , ®->kick0r); -writel (RTC_KICK1R_WE , ®->kick1r); -writel (a, ®->scratch0); -writel (BOOTCOUNT_MAGIC , ®->scratch1); -} - -ulong bootcount_load (void ) -{ -struct davinci_rtc *reg = - (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; - -if (readl (®->scratch1) !=BOOTCOUNT_MAGIC ) -return 0 ; -else -return readl (®->scratch0); -} -#endif drivers/bootcount/Makefile new file +47
-0@@ -0,0 +1,47 @@ +# +# See file CREDITS for list of people who contributed to this +# project. +# +# 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. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB := $(obj)libbootcount.o + +COBJS-y += bootcount.o +COBJS-$(CONFIG_AT91SAM9XE) += bootcount_at91.o +COBJS-$(CONFIG_BFIN_CPU) += bootcount_blackfin.o +COBJS-$(CONFIG_SOC_DA8XX) += bootcount_davinci.o +COBJS-$(CONFIG_BOOTCOUNT_RAM) += bootcount_ram.o + +COBJS := $(COBJS-y) +SRCS := $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) + +all: $(LIB) + +$(LIB): $(obj).depend $(OBJS) + $(call cmd_link_o_target, $(OBJS)) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +########################################################################drivers/bootcount/bootcount.c renamed from arch/powerpc/lib/bootcount.c +7
-3@@ -1,5 +1,5 @@/* -* (C) Copyright 2010 +* (C) Copyright 2010-2012 * Stefan Roese, DENX Software Engineering, sr at denx.de. * * See file CREDITS for list of people who contributed to this @@ -22,6 +22,7 @@*/ #include <common.h> +#include <linux/compiler.h> #include <asm/io.h> /* @@ -65,7 +66,9 @@#endif /* !defined(CONFIG_SYS_BOOTCOUNT_ADDR) */ -void bootcount_store (ulong a) +/* Now implement the generic default functions */ +#if defined(CONFIG_SYS_BOOTCOUNT_ADDR ) +__weak void bootcount_store (ulong a) {void *reg = (void *)CONFIG_SYS_BOOTCOUNT_ADDR ;@@ -77,7 +80,7 @@ void bootcount_store(ulong a)#endif } -ulong bootcount_load (void ) +__weak ulong bootcount_load (void ) {void *reg = (void *)CONFIG_SYS_BOOTCOUNT_ADDR ;@@ -95,3 +98,4 @@ ulong bootcount_load(void)return in_be32 (reg); #endif } +#endif drivers/bootcount/bootcount_at91.c new file +43
-0@@ -0,0 +1,43 @@ +/* +* See file CREDITS for list of people who contributed to this +* project. +* +* 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 <common.h> +#include <asm/io.h> +#include <asm/arch/hardware.h> +#include <asm/arch/at91_gpbr.h> + +/* +* We combine the BOOTCOUNT_MAGIC and bootcount in one 32-bit register. +* This is done so we need to use only one of the four GPBR registers. +*/ +void bootcount_store (ulong a) +{ +at91_gpbr_t *gpbr = (at91_gpbr_t *)ATMEL_BASE_GPBR ; + +writel ((BOOTCOUNT_MAGIC &0xffff0000 ) | (a &0x0000ffff ), + &gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT ]); +} + +ulong bootcount_load (void ) +{ +at91_gpbr_t *gpbr = (at91_gpbr_t *)ATMEL_BASE_GPBR ; + +ulong val =readl (&gpbr->reg[AT91_GPBR_INDEX_BOOTCOUNT ]); +if ((val &0xffff0000 ) != (BOOTCOUNT_MAGIC &0xffff0000 )) +return 0 ; +else +return val &0x0000ffff ; +}drivers/bootcount/bootcount_blackfin.c renamed from arch/blackfin/cpu/bootcount.c +0
-0drivers/bootcount/bootcount_davinci.c new file +72
-0@@ -0,0 +1,72 @@ +/* +* (C) Copyright 2011 +* Heiko Schocher, DENX Software Engineering, hs at denx.de. +* +* See file CREDITS for list of people who contributed to this +* project. +* +* 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 <common.h> +#include <asm/io.h> +#include <asm/arch/da850_lowlevel.h> +#include <asm/arch/davinci_misc.h> + +#ifdef CONFIG_BOOTCOUNT_LE +static inline void bc_out32 (volatile u32 *addr,u32 data) +{ +out_le32 (addr, data); +} + +static inline u32 bc_in32 (volatile u32 *addr) +{ +return in_le32 (addr); +} +#else +static inline void bc_out32 (volatile u32 *addr,u32 data) +{ +out_be32 (addr, data); +} + +static inline u32 bc_in32 (volatile u32 *addr) +{ +return in_be32 (addr); +} +#endif + +void bootcount_store (ulong a) +{ +struct davinci_rtc *reg = + (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; + +/* +* write RTC kick register to enable write +* for RTC Scratch registers. Scratch0 and 1 are +* used for bootcount values. +*/ +writel (RTC_KICK0R_WE , ®->kick0r); +writel (RTC_KICK1R_WE , ®->kick1r); +bc_out32 (®->scratch0, a); +bc_out32 (®->scratch1,BOOTCOUNT_MAGIC ); +} + +ulong bootcount_load (void ) +{ +struct davinci_rtc *reg = + (struct davinci_rtc *)CONFIG_SYS_BOOTCOUNT_ADDR ; + +if (bc_in32 (®->scratch1) !=BOOTCOUNT_MAGIC ) +return 0 ; +else +return bc_in32 (®->scratch0); +}drivers/bootcount/bootcount_ram.c new file +72
-0@@ -0,0 +1,72 @@ +/* +* (C) Copyright 2010 +* Heiko Schocher, DENX Software Engineering, hs at denx.de. +* +* See file CREDITS for list of people who contributed to this +* project. +* +* 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 <common.h> +#include <asm/io.h> + +DECLARE_GLOBAL_DATA_PTR ; + +const ulong patterns[] = {0x00000000 , +0xFFFFFFFF , +0xFF00FF00 , +0x0F0F0F0F , +0xF0F0F0F0 }; +const ulong NBR_OF_PATTERNS =sizeof (patterns) /sizeof (*patterns); +const ulong OFFS_PATTERN =3 ; +const ulong REPEAT_PATTERN =1000 ; + +void bootcount_store (ulong a) +{ +ulong *save_addr; +ulong size =0 ; +int i; + +for (i =0 ; i <CONFIG_NR_DRAM_BANKS ; i++) + size += gd->bd->bi_dram[i].size; + save_addr = (ulong *)(size -BOOTCOUNT_ADDR ); +writel (a, save_addr); +writel (BOOTCOUNT_MAGIC , &save_addr[1 ]); + +for (i =0 ; i <REPEAT_PATTERN ; i++) +writel (patterns[i %NBR_OF_PATTERNS ], + &save_addr[i +OFFS_PATTERN ]); + +} + +ulong bootcount_load (void ) +{ +ulong *save_addr; +ulong size =0 ; +ulong counter =0 ; +int i, tmp; + +for (i =0 ; i <CONFIG_NR_DRAM_BANKS ; i++) + size += gd->bd->bi_dram[i].size; + save_addr = (ulong *)(size -BOOTCOUNT_ADDR ); + + counter =readl (&save_addr[0 ]); + +/* Is the counter reliable, check in the big pattern for bit errors */ +for (i =0 ; (i <REPEAT_PATTERN ) && (counter !=0 ); i++) { + tmp =readl (&save_addr[i +OFFS_PATTERN ]); +if (tmp != patterns[i %NBR_OF_PATTERNS ]) + counter =0 ; + } +return counter; +}include/configs/calimain.h +1
-0@@ -354,6 +354,7 @@#define CONFIG_SYS_INIT_SP_ADDR (0x8001ff00)#define CONFIG_BOOTCOUNT_LIMIT +#define CONFIG_BOOTCOUNT_LE /* Use little-endian accessors */ #define CONFIG_SYS_BOOTCOUNT_ADDR DAVINCI_RTC_BASE#ifndef __ASSEMBLY__include/configs/km/km_arm.h +2
-0@@ -274,6 +274,8 @@ int get_scl(void);#define CONFIG_KM_RESERVED_PRAM 0x801000/* address for the bootcount (taken from end of RAM) */ #define BOOTCOUNT_ADDR (CONFIG_KM_RESERVED_PRAM) +/* Use generic bootcount RAM driver */ +#define CONFIG_BOOTCOUNT_RAM /* enable POST tests */ #define CONFIG_POST (CONFIG_SYS_POST_MEM_REGIONS)
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
Quoted 17 lines · On Monday 04 June 2012 15:03:27 Rob Herring wrote:
Quoted 16 lines · Stefan Roese
This patch moves all bootcount implementations into a common
directory:drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.Signed-off-by Stefan Roese <[email protected]>Cc Heiko Schocher <[email protected]>Cc Valentin Longchamp <[email protected]>Cc Christian Riesch <[email protected]>Cc Manfred Rudigier <[email protected]>Cc Mike Frysinger <[email protected]>Cc Rob Herring <[email protected]>Cc Reinhard Meyer <[email protected]>---
v2:
- AddedCONFIG_BOOTCOUNT_LEtobootcount_davinci.cand enabled it
Quoted 3 lines
Quoted 1 line
in
calimain.hto select little-endian accessors.highbank is also LE.
Yes, sure. I could move those inline functions to a header, so that they can be used by the other "drivers" as well. Okay?
Quoted 2 lines
Why don't you use
__BYTE_ORDERrather than a new
define?
Unfortunately not. There are LE platforms that use BE accessors for the bootcounter already (Davinci enbw_cmc). Mostly historical reasons I assume, since the original bootcount implementation was powerpc specific with those be32() functions.
Thanks,
Stefan
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
Hi,
Quoted 6 lines · Stefan Roese
Quoted 5 lines · On Monday 04 June 2012 15:03:27 Rob Herring wrote:
Quoted 4 lines · Stefan Roese
This patch moves all bootcount implementations into a common
directory:drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.
Quoted 11 lines
Quoted 11 lines
Quoted 11 lines
Signed-off-by Stefan Roese <[email protected]>Cc Heiko Schocher <[email protected]>Cc Valentin Longchamp <[email protected]>Cc Christian Riesch <[email protected]>Cc Manfred Rudigier <[email protected]>Cc Mike Frysinger <[email protected]>Cc Rob Herring <[email protected]>Cc Reinhard Meyer <[email protected]>---
v2:
- AddedCONFIG_BOOTCOUNT_LEtobootcount_davinci.cand enabled it
Thanks a lot! I will test it on the calimain board.
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
? in
calimain.hto select little-endian accessors.highbank is also LE.
Yes, sure. I could move those inline functions to a header, so that they can be used by the other "drivers" as well. Okay?
I don't think this is necessary. As long as a board uses its native endianess to store the boot counter, nothing special is needed. Regards,
Christian
Quoted 14 lines
Quoted 2 lines
Why don't you use
__BYTE_ORDERrather than a new
define?Unfortunately not. There are LE platforms that use BE accessors for the bootcounter already (Davinci
enbw_cmc). Mostly historical reasons I assume, since the original bootcount implementation was powerpc specific with thosebe32()functions.Thanks,
Stefan
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
In reply to Stefan RoeseDear Stefan Roese,
Quoted 8 lines · In message <[email protected]> you wrote:
Quoted 3 lines
Why don't you use
__BYTE_ORDERrather than a new
define?Unfortunately not. There are LE platforms that use BE accessors for the bootcounter already (Davinci
enbw_cmc). Mostly historical reasons I assume, since the original bootcount implementation was powerpc specific with thosebe32()functions.
We should check this, and eventually fix enbw_cmc.
Heiko, what do you think?
Best regards,
Wolfgang Denk
Signature · 8 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de COMPONENT EQUIVALENCY NOTICE: The Subatomic Particles (Electrons, Protons, etc.) Comprising This Product Are Exactly the Same in Every Measurable Respect as Those Used in the Products of Other Manufactu- rers, and No Claim to the Contrary May Legitimately Be Expressed or Implied.
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
In reply to Rob HerringRob,
Quoted 17 lines · On Monday 04 June 2012 15:03:27 Rob Herring wrote:
Quoted 16 lines · Stefan Roese
This patch moves all bootcount implementations into a common
directory:drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.Signed-off-by Stefan Roese <[email protected]>Cc Heiko Schocher <[email protected]>Cc Valentin Longchamp <[email protected]>Cc Christian Riesch <[email protected]>Cc Manfred Rudigier <[email protected]>Cc Mike Frysinger <[email protected]>Cc Rob Herring <[email protected]>Cc Reinhard Meyer <[email protected]>---
v2:
- AddedCONFIG_BOOTCOUNT_LEtobootcount_davinci.cand enabled it
Quoted 4 lines
Quoted 1 line
in
calimain.hto select little-endian accessors.highbank is also LE. Why don't you use
__BYTE_ORDERrather than a new define?
I just noticed, that highbank only uses one lword as bootcounter storage. So CONFIG_SYS_BOOTCOUNT_SINGLEWORD needs to be set for the "generic" bootcount driver to work here.
I'll fix this in v3 after a short delay for further review comments.
Thanks,
Stefan
PATCH v2 1/1 Consolidate bootcount code into drivers/bootcount
In reply to Stefan RoeseHi Stefan,
Quoted 3 lines · Stefan Roese
This patch moves all bootcount implementations into a common
directory:drivers/bootcount. The generic bootcount driver is now usable not only by powerpc platforms, but others as well.
For the calimain board
Thanks, Christian
Quoted 39 lines
Signed-off-by Stefan Roese <[email protected]>Cc Heiko Schocher <[email protected]>Cc Valentin Longchamp <[email protected]>Cc Christian Riesch <[email protected]>Cc Manfred Rudigier <[email protected]>Cc Mike Frysinger <[email protected]>Cc Rob Herring <[email protected]>Cc Reinhard Meyer <[email protected]>---
v2:
- AddedCONFIG_BOOTCOUNT_LEtobootcount_davinci.cand enabled it ?incalimain.hto select little-endian accessors.?Makefile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?3 + ?arch/arm/cpu/arm926ejs/at91/cpu.c ? ? ? ? ? ? ? ? ?| ? 26 ------- ?arch/arm/cpu/armv7/highbank/Makefile ? ? ? ? ? ? ? | ? ?2 +- ?arch/arm/cpu/armv7/highbank/bootcount.c ? ? ? ? ? ?| ? 36 ---------- ?arch/arm/cpu/ixp/cpu.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 22 ------ ?arch/powerpc/lib/Makefile ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?1 - ?board/enbw/enbw_cmc/enbw_cmc.c ? ? ? ? ? ? ? ? ? ? | ? 29 -------- ?board/keymile/km_arm/km_arm.c ? ? ? ? ? ? ? ? ? ? ?| ? 51 -------------- ?board/omicron/calimain/calimain.c ? ? ? ? ? ? ? ? ?| ? 29 -------- ?drivers/bootcount/Makefile ? ? ? ? ? ? ? ? ? ? ? ? | ? 47 +++++++++++++ ?.../powerpc/lib => drivers/bootcount}/bootcount.c ?| ? 10 ++- ?drivers/bootcount/bootcount_at91.c ? ? ? ? ? ? ? ? | ? 43 ++++++++++++ ?.../bootcount/bootcount_blackfin.c ? ? ? ? ? ? ? ? | ? ?0 ?drivers/bootcount/bootcount_davinci.c ? ? ? ? ? ? ?| ? 72 ++++++++++++++++++++ ?drivers/bootcount/bootcount_ram.c ? ? ? ? ? ? ? ? ?| ? 72 ++++++++++++++++++++ ?include/configs/calimain.h ? ? ? ? ? ? ? ? ? ? ? ? | ? ?1 + ?include/configs/km/km_arm.h ? ? ? ? ? ? ? ? ? ? ? ?| ? ?2 +?17 files changed, 248 insertions(+), 198 deletions(-)
?delete mode 100644arch/arm/cpu/armv7/highbank/bootcount.c
?create mode 100644drivers/bootcount/Makefile
?rename {arch/powerpc/lib=>drivers/bootcount}/bootcount.c(92%) ?create mode 100644drivers/bootcount/bootcount_at91.c
?renamearch/blackfin/cpu/bootcount.c=>drivers/bootcount/bootcount_blackfin.c(100%) ?create mode 100644drivers/bootcount/bootcount_davinci.c
?create mode 100644drivers/bootcount/bootcount_ram.c