]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - board/pcs440ep/pcs440ep.c
Merge branch 'next'
[karo-tx-uboot.git] / board / pcs440ep / pcs440ep.c
index d7adff2f8e66140fa1bef21f44fff99577d47804..f8345ddb46ad87b37bfac7e4d83758832c59bab6 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 #include <common.h>
-#include <ppc4xx.h>
+#include <asm/ppc4xx.h>
 #include <malloc.h>
 #include <command.h>
 #include <crc.h>
@@ -32,6 +32,7 @@
 #include <sha1.h>
 #include <asm/io.h>
 #include <net.h>
+#include <ata.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -97,39 +98,39 @@ static void status_led_blink (void)
 void show_boot_progress (int val)
 {
        /* find all valid Codes for val in README */
-       if (val == -30) return;
+       if (val == -BOOTSTAGE_ID_NEED_RESET)
+               return;
        if (val < 0) {
                /* smthing goes wrong */
                status_led_blink ();
                return;
        }
        switch (val) {
-               case 1:
-                       /* validating Image */
-                       status_led_set (0, STATUS_LED_OFF);
-                       status_led_set (1, STATUS_LED_ON);
-                       status_led_set (2, STATUS_LED_ON);
-                       break;
-               case 15:
-                       /* booting */
-                       status_led_set (0, STATUS_LED_ON);
-                       status_led_set (1, STATUS_LED_ON);
-                       status_led_set (2, STATUS_LED_ON);
-                       break;
+       case BOOTSTAGE_ID_CHECK_MAGIC:
+               /* validating Image */
+               status_led_set(0, STATUS_LED_OFF);
+               status_led_set(1, STATUS_LED_ON);
+               status_led_set(2, STATUS_LED_ON);
+               break;
+       case BOOTSTAGE_ID_RUN_OS:
+               status_led_set(0, STATUS_LED_ON);
+               status_led_set(1, STATUS_LED_ON);
+               status_led_set(2, STATUS_LED_ON);
+               break;
 #if 0
-               case 64:
-                       /* starting Ethernet configuration */
-                       status_led_set (0, STATUS_LED_OFF);
-                       status_led_set (1, STATUS_LED_OFF);
-                       status_led_set (2, STATUS_LED_ON);
-                       break;
+       case BOOTSTAGE_ID_NET_ETH_START:
+               /* starting Ethernet configuration */
+               status_led_set(0, STATUS_LED_OFF);
+               status_led_set(1, STATUS_LED_OFF);
+               status_led_set(2, STATUS_LED_ON);
+               break;
 #endif
-               case 80:
-                       /* loading Image */
-                       status_led_set (0, STATUS_LED_ON);
-                       status_led_set (1, STATUS_LED_OFF);
-                       status_led_set (2, STATUS_LED_ON);
-                       break;
+       case BOOTSTAGE_ID_NET_START:
+               /* loading Image */
+               status_led_set(0, STATUS_LED_ON);
+               status_led_set(1, STATUS_LED_OFF);
+               status_led_set(2, STATUS_LED_ON);
+               break;
        }
 }
 #endif
@@ -509,12 +510,13 @@ int misc_init_r (void)
 
 int checkboard(void)
 {
-       char *s = getenv("serial#");
+       char buf[64];
+       int i = getenv_f("serial#", buf, sizeof(buf));
 
        printf("Board: PCS440EP");
-       if (s != NULL) {
+       if (i > 0) {
                puts(", serial# ");
-               puts(s);
+               puts(buf);
        }
        putc('\n');
 
@@ -616,9 +618,8 @@ int do_sha1 (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        int     rcode = -1;
 
        if (argc < 2) {
-  usage:
-               cmd_usage(cmdtp);
-               return 1;
+usage:
+               return cmd_usage(cmdtp);
        }
 
        if (argc >= 3) {
@@ -672,7 +673,6 @@ U_BOOT_CMD(
  * ( bus per_addr 20 -30 is connectsd on CF bus A10-A0)
  * These values are shifted
  */
-extern ulong *ide_bus_offset;
 void inline ide_outb(int dev, int port, unsigned char val)
 {
        debug ("ide_outb (dev= %d, port= 0x%x, val= 0x%02x) : @ 0x%08lx\n",
@@ -714,3 +714,58 @@ void ide_set_reset (int idereset)
        udelay (10000);
 }
 #endif /* defined (CONFIG_CMD_IDE) && defined (CONFIG_IDE_RESET) */
+
+
+/* this is motly the same as it should, causing a little code duplication */
+#if defined(CONFIG_CMD_IDE)
+#define EIEIO          __asm__ volatile ("eieio")
+
+void ide_input_swap_data(int dev, ulong *sect_buf, int words)
+{
+       volatile ushort *pbuf =
+               (ushort *) (ATA_CURR_BASE(dev) + ATA_DATA_REG);
+       ushort *dbuf = (ushort *) sect_buf;
+
+       debug("in input swap data base for read is %lx\n",
+               (unsigned long) pbuf);
+
+       while (words--) {
+               *dbuf++ = *pbuf;
+               *dbuf++ = *pbuf;
+       }
+}
+
+void ide_output_data(int dev, const ulong *sect_buf, int words)
+{
+       ushort *dbuf;
+       volatile ushort *pbuf;
+
+       pbuf = (ushort *) (ATA_CURR_BASE(dev) + ATA_DATA_REG);
+       dbuf = (ushort *) sect_buf;
+       while (words--) {
+               EIEIO;
+               *pbuf = ld_le16(dbuf++);
+               EIEIO;
+               *pbuf = ld_le16(dbuf++);
+       }
+}
+
+void ide_input_data(int dev, ulong *sect_buf, int words)
+{
+       ushort *dbuf;
+       volatile ushort *pbuf;
+
+       pbuf = (ushort *) (ATA_CURR_BASE(dev) + ATA_DATA_REG);
+       dbuf = (ushort *) sect_buf;
+
+       debug("in input data base for read is %lx\n", (unsigned long) pbuf);
+
+       while (words--) {
+               EIEIO;
+               *dbuf++ = ld_le16(pbuf);
+               EIEIO;
+               *dbuf++ = ld_le16(pbuf);
+       }
+}
+
+#endif