Add Xilinx Spartan3 family FPGA support
[platform/kernel/u-boot.git] / common / cmd_dcr.c
1 /*
2  * (C) Copyright 2001
3  * Erik Theisen,  Wave 7 Optics, etheisen@mindspring.com.
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 /*
25  * AMCC 4XX DCR Functions
26  */
27
28 #include <common.h>
29 #include <config.h>
30 #include <command.h>
31
32 #if defined(CONFIG_4xx) && (CONFIG_COMMANDS & CFG_CMD_SETGETDCR)
33
34 /* =======================================================================
35  * Interpreter command to retrieve an AMCC PPC 4xx Device Control Register
36  * =======================================================================
37  */
38 int do_getdcr ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[] )
39 {
40         unsigned short dcrn;    /* Device Control Register Num */
41         unsigned long value;    /* DCR's value */
42
43         unsigned long get_dcr (unsigned short);
44
45         /* Validate arguments */
46         if (argc < 2) {
47                 printf ("Usage:\n%s\n", cmdtp->usage);
48                 return 1;
49         }
50
51         /* Get a DCR */
52         dcrn = (unsigned short) simple_strtoul (argv[1], NULL, 16);
53         value = get_dcr (dcrn);
54
55         printf ("%04x: %08lx\n", dcrn, value);
56
57         return 0;
58 }
59
60
61 /* ======================================================================
62  * Interpreter command to set an AMCC PPC 4xx Device Control Register
63  * ======================================================================
64 */
65 int do_setdcr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
66 {
67         unsigned long get_dcr (unsigned short);
68         unsigned long set_dcr (unsigned short, unsigned long);
69         unsigned short dcrn;    /* Device Control Register Num */
70         unsigned long value;
71
72         /* DCR's value */
73         int nbytes;
74         extern char console_buffer[];
75
76         /* Validate arguments */
77         if (argc < 2) {
78                 printf ("Usage:\n%s\n", cmdtp->usage);
79                 return 1;
80         }
81
82         /* Set a DCR */
83         dcrn = (unsigned short) simple_strtoul (argv[1], NULL, 16);
84         do {
85                 value = get_dcr (dcrn);
86                 printf ("%04x: %08lx", dcrn, value);
87                 nbytes = readline (" ? ");
88                 if (nbytes == 0) {
89                         /*
90                          * <CR> pressed as only input, don't modify current
91                          * location and exit command.
92                          */
93                         nbytes = 1;
94                         return 0;
95                 } else {
96                         unsigned long i;
97                         char *endp;
98
99                         i = simple_strtoul (console_buffer, &endp, 16);
100                         nbytes = endp - console_buffer;
101                         if (nbytes)
102                                 set_dcr (dcrn, i);
103                 }
104         } while (nbytes);
105
106         return 0;
107 }
108
109 /***************************************************/
110
111 U_BOOT_CMD(
112         getdcr, 2,      1,      do_getdcr,
113         "getdcr  - Get an AMCC PPC 4xx DCR's value\n",
114         "dcrn - return a DCR's value.\n"
115 );
116 U_BOOT_CMD(
117         setdcr, 2,      1,      do_setdcr,
118         "setdcr  - Set an AMCC PPC 4xx DCR's value\n",
119         "dcrn - set a DCR's value.\n"
120 );
121
122 #endif /* CONFIG_4xx & CFG_CMD_SETGETDCR */