]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - board/pcs440ep/pcs440ep.c
karo: use lldiv() for 64bit division
[karo-tx-uboot.git] / board / pcs440ep / pcs440ep.c
index bed385c44b8088b67b8f63423979d5718868fd30..267c0014359eb8d9cfde7e43fd4ade139da2025b 100644 (file)
@@ -2,36 +2,21 @@
  * (C) Copyright 2006
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
- * 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
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
-#include <ppc4xx.h>
+#include <asm/ppc4xx.h>
 #include <malloc.h>
 #include <command.h>
 #include <crc.h>
 #include <asm/processor.h>
 #include <spd_sdram.h>
 #include <status_led.h>
-#include <sha1.h>
+#include <u-boot/sha1.h>
 #include <asm/io.h>
 #include <net.h>
+#include <ata.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -97,39 +82,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
@@ -148,7 +133,7 @@ int board_early_init_f(void)
        mtdcr(EBC0_CFGDATA, reg | 0x04000000);  /* Set ATC */
 
        /*--------------------------------------------------------------------
-        * GPIO's are alreay setup in arch/ppc/cpu/ppc4xx/cpu_init.c
+        * GPIO's are alreay setup in arch/powerpc/cpu/ppc4xx/cpu_init.c
         * via define from board config file.
         *-------------------------------------------------------------------*/
 
@@ -509,12 +494,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');
 
@@ -567,7 +553,7 @@ void hw_watchdog_reset(void)
  * "led" Commando for the U-Boot shell
  *
  ************************************************************************/
-int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        int     rcode = 0, i;
        ulong   pattern = 0;
@@ -611,14 +597,13 @@ U_BOOT_CMD(
  * "sha1" Commando for the U-Boot shell
  *
  ************************************************************************/
-int do_sha1 (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+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 +657,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 +698,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