Hi Julius,
On 4/25/2013 13:59, Julius Hemanth P wrote:
This code is small snippet from patch
ftp://ftp.linux4sam.org/pub/uboot/u-boot-v2010.06/u-boot-5series_1.0.patch
Bug:-
For board at91sam9x5ek, U-boot doesn't pass serial and revision tags
to Linux kernel, hence kernel fails to identify correct revision and assumes
as rev-A, resulting in failing to detect NAND device.
It won't have issue work with mainline Linux kernel for at91sam9x5.
Actually, this only occur when mainline u-boot work with the Linux
kernel we released based on 2.6.39 (This is almost two years old). So,
for customer we suggest them upgrade the Linux kernel.
For compatible issue, add this won't hurt. Temporary, we can accept it.
if the GPBR will use for other function in future, this will be removed.
This patch enables u-boot to pass serial and revision tags to Linux
kernel, which helps Linux to detect NAND device.
Signed-off-by: Julius Hemanth <juliushema...@gmail.com>
---
board/atmel/at91sam9x5ek/at91sam9x5ek.c | 28 ++++++++++++++++++++++++++++
include/configs/at91sam9x5ek.h | 7 +++++++
2 files changed, 35 insertions(+)
diff --git a/board/atmel/at91sam9x5ek/at91sam9x5ek.c
b/board/atmel/at91sam9x5ek/at91sam9x5ek.c
index 8773e6f..43a55e4 100644
--- a/board/atmel/at91sam9x5ek/at91sam9x5ek.c
+++ b/board/atmel/at91sam9x5ek/at91sam9x5ek.c
@@ -50,6 +50,30 @@ DECLARE_GLOBAL_DATA_PTR;
/*
* Miscelaneous platform dependent initialisations
*/
s/Miscelaneous/Miscellaneous
s/initialisations/initializations
+
+#ifdef CONFIG_LOAD_ONE_WIRE_INFO
+static u32 system_rev;
+static u32 system_serial_low;
+
+u32 get_board_rev(void)
+{
+ return system_rev;
+}
+
+void get_board_serial(struct tag_serialnr *serialnr)
+{
+ serialnr->high = 0; /* Not used */
+ serialnr->low = system_serial_low;
+}
+
+void load_1wire_info(void)
+{
+ /* serial is in GPBR #2 and revision is in GPBR #3 */
+ system_serial_low = readl(ATMEL_BASE_GPBR + 4 * 2);
+ system_rev = readl(ATMEL_BASE_GPBR + 4 * 3);
Please use c structure to access it.
+}
+#endif
+
#ifdef CONFIG_CMD_NAND
static void at91sam9x5ek_nand_hw_init(void)
{
@@ -282,6 +306,10 @@ int board_init(void)
/* adress of boot parameters */
gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
+#ifdef CONFIG_LOAD_ONE_WIRE_INFO
+ load_1wire_info();
+#endif
+
#ifdef CONFIG_CMD_NAND
at91sam9x5ek_nand_hw_init();
#endif
diff --git a/include/configs/at91sam9x5ek.h b/include/configs/at91sam9x5ek.h
index ee6e3fc..b6236b8 100644
--- a/include/configs/at91sam9x5ek.h
+++ b/include/configs/at91sam9x5ek.h
@@ -38,6 +38,13 @@
#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
+
+#define CONFIG_LOAD_ONE_WIRE_INFO 1
+#ifdef CONFIG_LOAD_ONE_WIRE_INFO
+#define CONFIG_REVISION_TAG 1
+#define CONFIG_SERIAL_TAG 1
+#endif
Address Tom Rini's comments.
+
#define CONFIG_SKIP_LOWLEVEL_INIT
#define CONFIG_BOARD_EARLY_INIT_F
#define CONFIG_DISPLAY_CPUINFO
--
1.7.9.5
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
Best Regards,
Bo Shen
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot