]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/t3corp/t3corp.c
Merge git://git.denx.de/u-boot-arm
[karo-tx-uboot.git] / board / t3corp / t3corp.c
index 8ffa321690c0deaaa89972325b3f04fc470f3f8b..586c6f9a62b692d7733420731b7449062bf90171 100644 (file)
@@ -2,32 +2,20 @@
  * (C) Copyright 2010
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
- * 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
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
-#include <ppc440.h>
+#include <asm/ppc440.h>
 #include <libfdt.h>
 #include <fdt_support.h>
 #include <i2c.h>
+#include <mtd/cfi_flash.h>
 #include <asm/processor.h>
 #include <asm/io.h>
 #include <asm/mmu.h>
 #include <asm/4xx_pcie.h>
-#include <asm/gpio.h>
+#include <asm/ppc4xx-gpio.h>
 
 int board_early_init_f(void)
 {
@@ -45,7 +33,7 @@ int board_early_init_f(void)
        mtdcr(UIC1SR, 0xffffffff);      /* clear all */
        mtdcr(UIC1ER, 0x00000000);      /* disable all */
        mtdcr(UIC1CR, 0x00000000);      /* all non-critical */
-       mtdcr(UIC1PR, 0xffffffff);      /* per ref-board manual */
+       mtdcr(UIC1PR, 0x7fffffff);      /* per ref-board manual */
        mtdcr(UIC1TR, 0x00000000);      /* per ref-board manual */
        mtdcr(UIC1VR, 0x00000000);      /* int31 highest, base=0x000 */
        mtdcr(UIC1SR, 0xffffffff);      /* clear all */
@@ -88,13 +76,14 @@ int board_early_init_f(void)
 
 int checkboard(void)
 {
-       char *s = getenv("serial#");
+       char buf[64];
+       int i = getenv_f("serial#", buf, sizeof(buf));
 
        printf("Board: T3CORP");
 
-       if (s != NULL) {
+       if (i > 0) {
                puts(", serial# ");
-               puts(s);
+               puts(buf);
        }
        putc('\n');
 
@@ -191,3 +180,40 @@ struct sdram_timing *ddr_scan_option(struct sdram_timing *default_val)
 {
        return board_scan_options;
 }
+
+/*
+ * Accessor functions replacing the "weak" functions in
+ * drivers/mtd/cfi_flash.c
+ *
+ * The NOR flash devices "behind" the FPGA's (Xilinx DS617)
+ * can only be read correctly in 16bit mode. We need to emulate
+ * 8bit and 32bit reads here in the board specific code.
+ */
+u8 flash_read8(void *addr)
+{
+       u16 val = __raw_readw((void *)((u32)addr & ~1));
+
+       if ((u32)addr & 1)
+               return val;
+
+       return val >> 8;
+}
+
+u32 flash_read32(void *addr)
+{
+       return (__raw_readw(addr) << 16) | __raw_readw((void *)((u32)addr + 2));
+}
+
+void flash_cmd_reset(flash_info_t *info)
+{
+       /*
+        * FLASH at address CONFIG_SYS_FLASH_BASE is a Spansion chip and
+        * needs the Spansion type reset commands. The other flash chip
+        * is located behind a FPGA (Xilinx DS617) and needs the Intel type
+        * reset command.
+        */
+       if (info->start[0] == CONFIG_SYS_FLASH_BASE)
+               flash_write_cmd(info, 0, 0, AMD_CMD_RESET);
+       else
+               flash_write_cmd(info, 0, 0, FLASH_CMD_RESET);
+}