source: SVN/rincon/u-boot/board/pn62/cmd_pn62.c @ 55

Last change on this file since 55 was 55, checked in by Tim Harvey, 2 years ago

rincon: added latest u-boot source

restored form server backup

Signed-off-by: Tim Harvey <tharvey@…>

File size: 4.2 KB
Line 
1/*
2 * (C) Copyright 2002
3 * Wolfgang Grandegger, DENX Software Engineering, wg@denx.de.
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
24#include <common.h>
25#include <malloc.h>
26#include <net.h>
27#include <asm/io.h>
28#include <pci.h>
29#include <command.h>
30#include "pn62.h"
31
32#if defined(CONFIG_CMD_BSP)
33
34extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
35
36/*
37 * Command led: controls the various LEDs 0..11 on the PN62 card.
38 */
39int do_led (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
40{
41    unsigned int number, function;
42
43    if (argc != 3) {
44        printf ("Usage:\n%s\n", cmdtp->usage);
45        return 1;
46    }
47    number = simple_strtoul(argv[1], NULL, 10);
48    if (number > PN62_LED_MAX)
49        return 1;
50    function = simple_strtoul(argv[2], NULL, 16);
51    set_led (number, function);
52    return 0;
53}
54U_BOOT_CMD(
55        led    ,        3,      1,      do_led,
56        "led     - set LED 0..11 on the PN62 board\n",
57        "i fun\n"
58        "    - set 'i'th LED to function 'fun'\n"
59);
60
61/*
62 * Command loadpci: loads a image over PCI.
63 */
64#define CMD_MOVE_WINDOW 0x1
65#define CMD_BOOT_IMAGE  0x2
66
67int do_loadpci (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
68{
69    char *s;
70    ulong addr = 0, count = 0;
71    u32 off;
72    int cmd, rcode = 0;
73
74    /* pre-set load_addr */
75    if ((s = getenv("loadaddr")) != NULL) {
76        addr = simple_strtoul(s, NULL, 16);
77    }
78
79    switch (argc) {
80    case 1:
81        break;
82    case 2:
83        addr = simple_strtoul(argv[1], NULL, 16);
84        break;
85    default:
86       printf ("Usage:\n%s\n", cmdtp->usage);
87        return 1;
88    }
89
90    printf ("## Ready for image download ...\n");
91
92    show_startup_phase(12);
93
94    while (1) {
95        /* Alive indicator */
96        i2155x_write_scrapad(BOOT_PROTO, BOOT_PROTO_READY);
97
98        /* Toggle status LEDs */
99        cmd = (count / 200) % 4; /* downscale */
100        set_led(4, cmd == 0 ? LED_1 : LED_0);
101        set_led(5, cmd == 1 ? LED_1 : LED_0);
102        set_led(6, cmd == 2 ? LED_1 : LED_0);
103        set_led(7, cmd == 3 ? LED_1 : LED_0);
104        udelay(1000);
105        count++;
106
107        cmd = i2155x_read_scrapad(BOOT_CMD);
108
109        if (cmd == BOOT_CMD_MOVE) {
110            off = i2155x_read_scrapad(BOOT_DATA);
111            off += addr;
112            i2155x_set_bar_base(3, off);
113            printf ("## BAR3 Addr moved = 0x%08x\n", off);
114            i2155x_write_scrapad(BOOT_CMD, ~cmd);
115            show_startup_phase(13);
116        }
117        else if (cmd == BOOT_CMD_BOOT) {
118            set_led(4, LED_1);
119            set_led(5, LED_1);
120            set_led(6, LED_1);
121            set_led(7, LED_1);
122
123            i2155x_write_scrapad(BOOT_CMD, ~cmd);
124            show_startup_phase(14);
125            break;
126        }
127
128        /* Abort if ctrl-c was pressed */
129        if (ctrlc()) {
130            printf("\nAbort\n");
131            return 0;
132        }
133
134    }
135
136    /* Repoint to the default shared memory */
137    i2155x_set_bar_base(3, PN62_SMEM_DEFAULT);
138
139    load_addr = addr;
140    printf ("## Start Addr      = 0x%08lx\n", addr);
141
142    show_startup_phase(15);
143
144    /* Loading ok, check if we should attempt an auto-start */
145    if (((s = getenv("autostart")) != NULL) && (strcmp(s,"yes") == 0)) {
146        char *local_args[2];
147        local_args[0] = argv[0];
148        local_args[1] = NULL;
149
150        printf ("Automatic boot of image at addr 0x%08lX ...\n",
151                load_addr);
152        rcode = do_bootm (cmdtp, 0, 1, local_args);
153    }
154
155#ifdef CONFIG_AUTOSCRIPT
156    if (load_addr) {
157        char *s;
158
159        if (((s = getenv("autoscript")) != NULL) && (strcmp(s,"yes") == 0)) {
160                printf ("Running autoscript at addr 0x%08lX", load_addr);
161
162                s = getenv ("autoscript_uname");
163                if (s)
164                        printf (":%s ...\n", s);
165                else
166                        puts (" ...\n");
167
168                rcode = autoscript (load_addr, s);
169        }
170    }
171#endif
172    return rcode;
173}
174
175U_BOOT_CMD(
176        loadpci,        2,      1,      do_loadpci,
177        "loadpci - load binary file over PCI\n",
178        "[addr]\n"
179        "    - load binary file over PCI to address 'addr'\n"
180);
181
182#endif
Note: See TracBrowser for help on using the repository browser.