Add support for Altera NIOS DK1C20 board
authorWolfgang Denk <wd@pollux.denx.de>
Fri, 5 Aug 2005 23:56:59 +0000 (01:56 +0200)
committerWolfgang Denk <wd@pollux.denx.de>
Fri, 5 Aug 2005 23:56:59 +0000 (01:56 +0200)
Patch by Shlomo Kut, 13 Dec 2004

CHANGELOG
board/altera/dk1c20/dk1c20.c
fs/fat/fat.c
include/asm-nios/io.h
include/configs/DK1C20.h

index e90062973878213538f61668e7b34c6a28723fe9..ea497f815336da824bd1b600ccc4bcd8742ff4cf 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,9 @@
 Changes for U-Boot 1.1.3:
 ======================================================================
 
+* Add support for Altera NIOS DK1C20 board
+  Patch by Shlomo Kut, 13 Dec 2004
+
 * Add support for ep8248 board
   Patch by Yuli Barcohen, 12 Dec 2004
 
index fd857068259142aa130665b8dd24886434a488b9..98ee7a71c962af93b8504b830e3b5ffa3c0eb16c 100644 (file)
@@ -2,6 +2,9 @@
  * (C) Copyright 2003, Psyent Corporation <www.psyent.com>
  * Scott McNutt <smcnutt@psyent.com>
  *
+ * CompactFlash/IDE:
+ * (C) Copyright 2004, Shlomo Kut <skut@vyyo.com>
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
@@ -22,6 +25,7 @@
  */
 
 #include <common.h>
+#include <nios-io.h>
 #if    defined(CONFIG_SEVENSEG)
 #include "../common/sevenseg.h"
 #endif
@@ -50,3 +54,28 @@ long int initdram (int board_type)
 {
        return (0);
 }
+
+#if (CONFIG_COMMANDS & CFG_CMD_IDE)
+int ide_preinit (void)
+{
+       nios_pio_t *present = (nios_pio_t *) CFG_CF_PRESENT;
+       nios_pio_t *power = (nios_pio_t *) CFG_CF_POWER;
+       nios_pio_t *atasel = (nios_pio_t *) CFG_CF_ATASEL;
+
+       /* setup data direction registers */
+       present->direction = NIOS_PIO_IN;
+       power->direction = NIOS_PIO_OUT;
+       atasel->direction = NIOS_PIO_OUT;
+
+       /* Check for presence of card */
+       if (present->data)
+               return 1;
+       printf ("Ok\n");
+
+       /* Finish setup */
+       power->data = 1;        /* Turn on power FET */
+       atasel->data = 0;       /* Put in ATA mode */
+
+       return 0;
+}
+#endif /* CONFIG_COMMANDS & CFG_CMD_IDE */
index 7f991b25de8d54266e59717ce7ba384c53728065..1a40a700c47abbc6335eda263690c0c9bc9ecf82 100644 (file)
@@ -722,6 +722,9 @@ long
 do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
             int dols)
 {
+#if CONFIG_NIOS /* NIOS CPU cannot access big automatic arrays */
+    static
+#endif
     char fnamecopy[2048];
     boot_sector bs;
     volume_info volinfo;
index 3cdb7039ff82ea0c41d1c399601650ca7f5b5a7e..07499d966d5a6645daa61964e97b3941c197b787 100644 (file)
@@ -1 +1,100 @@
-/*FIXME: Implement this! */
+/*
+ * (C) Copyright 2003, Psyent Corporation <www.psyent.com>
+ * Scott McNutt <smcnutt@psyent.com>
+ *
+ * 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
+ */
+#ifndef __ASM_NIOS_IO_H_
+#define __ASM_NIOS_IO_H_
+
+#define readb(addr)\
+       ({unsigned char val;\
+        asm volatile(  "       pfxio   0               \n"\
+                       "       ld      %0, [%1]        \n"\
+                       "       ext8d   %0, %1          \n"\
+                       :"=r"(val) : "r" (addr)); val;})
+
+#define readw(addr)\
+       ({unsigned short val;\
+        asm volatile(  "       pfxio   0               \n"\
+                       "       ld      %0, [%1]        \n"\
+                       "       ext16d  %0, %1          \n"\
+                       :"=r"(val) : "r" (addr)); val;})
+
+#define readl(addr)\
+       ({unsigned long val;\
+        asm volatile(  "       pfxio   0               \n"\
+                       "       ld      %0, [%1]        \n"\
+                       :"=r"(val) : "r" (addr)); val;})
+
+#define writeb(addr,val)\
+       asm volatile (  "       fill8   %%r0, %1        \n"\
+                       "       st8d    [%0], %%r0      \n"\
+                       : : "r" (addr), "r" (val) : "r0")
+
+#define writew(addr,val)\
+       asm volatile (  "       fill16  %%r0, %1        \n"\
+                       "       st16d   [%0], %%r0      \n"\
+                       : : "r" (addr), "r" (val) : "r0")
+
+#define writel(addr,val)\
+       asm volatile (  "       st      [%0], %1        \n"\
+                       : : "r" (addr), "r" (val))
+
+#define inb(addr)      readb(addr)
+#define inw(addr)      readw(addr)
+#define inl(addr)      readl(addr)
+#define outb(val,addr) writeb(addr,val)
+#define outw(val,addr) writew(addr,val)
+#define outl(val,addr) writel(addr,val)
+
+static inline void insb (unsigned long port, void *dst, unsigned long count)
+{
+       unsigned char *p = dst;
+       while (count--) *p++ = inb (port);
+}
+static inline void insw (unsigned long port, void *dst, unsigned long count)
+{
+       unsigned short *p = dst;
+       while (count--) *p++ = inw (port);
+}
+static inline void insl (unsigned long port, void *dst, unsigned long count)
+{
+       unsigned long *p = dst;
+       while (count--) *p++ = inl (port);
+}
+
+static inline void outsb (unsigned long port, const void *src, unsigned long count)
+{
+       const unsigned char *p = src;
+       while (count--) outb (*p++, port);
+}
+
+static inline void outsw (unsigned long port, const void *src, unsigned long count)
+{
+       const unsigned short *p = src;
+       while (count--) outw (*p++, port);
+}
+static inline void outsl (unsigned long port, const void *src, unsigned long count)
+{
+       const unsigned long *p = src;
+       while (count--) outl (*p++, port);
+}
+
+#endif /* __ASM_NIOS_IO_H_ */
index b758e94e793178847011cf1c99fec0443fc6f0a1..14a09b6dd22bbcec43aef5f5f46f11bfeb383a4d 100644 (file)
@@ -3,6 +3,9 @@
  * Scott McNutt <smcnutt@psyent.com>
  * Stephan Linz <linz@li-pro.net>
  *
+ * CompactFlash/IDE:
+ * (C) Copyright 2004, Shlomo Kut <skut@vyyo.com>
+ *
  * See file CREDITS for list of people who contributed to this
  * project.
  *
                                 CFG_CMD_DTT    | \
                                 CFG_CMD_EEPROM | \
                                 CFG_CMD_ELF    | \
-                                CFG_CMD_FAT    | \
                                 CFG_CMD_FDC    | \
                                 CFG_CMD_FDOS   | \
                                 CFG_CMD_HWFLOW | \
-                                CFG_CMD_IDE    | \
                                 CFG_CMD_I2C    | \
                                 CFG_CMD_JFFS2  | \
                                 CFG_CMD_KGDB   | \
 
 #include <cmd_confdefs.h>
 
+/*------------------------------------------------------------------------
+ * COMPACT FLASH
+ *----------------------------------------------------------------------*/
+#if (CONFIG_COMMANDS & CFG_CMD_IDE)
+#define CONFIG_IDE_PREINIT                     /* Implement id_preinit */
+#define CFG_IDE_MAXBUS         1               /* 1 IDE bus            */
+#define CFG_IDE_MAXDEVICE      1               /* 1 drive per IDE bus  */
+
+#define CFG_ATA_BASE_ADDR      0x00920a00      /* IDE/ATA base addr    */
+#define CFG_ATA_IDE0_OFFSET    0x0000          /* IDE0 offset          */
+#define CFG_ATA_DATA_OFFSET    0x0040          /* Data IO offset       */
+#define CFG_ATA_REG_OFFSET     0x0040          /* Register offset      */
+#define CFG_ATA_ALT_OFFSET     0x0100          /* Alternate reg offset */
+#define CFG_ATA_STRIDE          4              /* Width betwix addrs   */
+#define CONFIG_DOS_PARTITION
+
+/* Board-specific cf regs */
+#define CFG_CF_PRESENT         0x009209b0      /* CF Present PIO base  */
+#define CFG_CF_POWER           0x009209c0      /* CF Power FET PIO base*/
+#define CFG_CF_ATASEL          0x009209d0      /* CF ATASEL PIO base   */
+
+#endif /* CONFIG_COMMANDS & CFG_CMD_IDE */
+
 /*------------------------------------------------------------------------
  * KGDB
  *----------------------------------------------------------------------*/