# HG changeset patch # User Paul Boddie # Date 1433636313 -7200 # Node ID cf7f6d0ea74f0db7f643818fa40a6c802ad5d112 # Parent dc81b303fc7b179135578c5c34af86df0c4367d1 Tidied up and added a memory size measurement function from U-Boot. diff -r dc81b303fc7b -r cf7f6d0ea74f board-nanonote.c --- a/board-nanonote.c Sun Jun 07 02:14:23 2015 +0200 +++ b/board-nanonote.c Sun Jun 07 02:18:33 2015 +0200 @@ -4,7 +4,7 @@ * Copyright (C) 2015 Paul Boddie * Copyright (C) Xiangfu Liu * Copyright (C) 2006 Ingenic Semiconductor, - * Copyright (C) 2003 Wolfgang Denk, DENX Software Engineering, + * Copyright (C) 2000-2009 Wolfgang Denk, DENX Software Engineering, * * 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 @@ -281,25 +281,37 @@ void rtc_init(void) { - while ( !__rtc_write_ready()) ; + while ( !__rtc_write_ready()); __rtc_enable_alarm(); /* enable alarm */ - while ( !__rtc_write_ready()) - ; + while ( !__rtc_write_ready()); REG_RTC_RGR = 0x00007fff; /* type value */ - while ( !__rtc_write_ready()) - ; + while ( !__rtc_write_ready()); REG_RTC_HWFCR = 0x0000ffe0; /* Power on delay 2s */ - while ( !__rtc_write_ready()) - ; + while ( !__rtc_write_ready()); REG_RTC_HRCR = 0x00000fe0; /* reset delay 125ms */ } -/* - * Timer routines - */ +unsigned long get_memory_size(void) +{ + unsigned int dmcr; + unsigned int rows, cols, dw, banks; + unsigned long size; + + dmcr = REG_EMC_DMCR; + rows = 11 + ((dmcr & EMC_DMCR_RA_MASK) >> EMC_DMCR_RA_BIT); + cols = 8 + ((dmcr & EMC_DMCR_CA_MASK) >> EMC_DMCR_CA_BIT); + dw = (dmcr & EMC_DMCR_BW) ? 2 : 4; + banks = (dmcr & EMC_DMCR_BA) ? 4 : 2; + + size = (1 << (rows + cols)) * dw * banks; + + return size; +} + +/* Timer routines. */ #define TIMER_CHAN 0 #define TIMER_FDATA 0xffff /* Timer full data value */ diff -r dc81b303fc7b -r cf7f6d0ea74f board-nanonote.h --- a/board-nanonote.h Sun Jun 07 02:14:23 2015 +0200 +++ b/board-nanonote.h Sun Jun 07 02:18:33 2015 +0200 @@ -1,6 +1,8 @@ #ifndef __BOARD_NANONOTE_H__ #define __BOARD_NANONOTE_H__ +/* Initialisation functions. */ + void load_args(void); void gpio_init(void); void gpio_init2(void); @@ -9,7 +11,11 @@ void sdram_init(void); void rtc_init(void); int timer_init(void); + +/* Utility functions. */ + void udelay(unsigned long usec); void flush_cache_all(void); +unsigned long get_memory_size(void); #endif /* __BOARD_NANONOTE_H__ */