summaryrefslogtreecommitdiff
path: root/board/prodrive/p3mx/p3mx.c
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2007-01-18 11:54:52 +0100
committerStefan Roese <sr@denx.de>2007-01-18 11:54:52 +0100
commit0057d758e3e874cbe7f24745d0cce8c1cb6c207e (patch)
tree1c1b9ce7876b761f0d7e006b0f57aeb2571a50fe /board/prodrive/p3mx/p3mx.c
parent34167a36c29ee946b727465db5c014746a08e978 (diff)
downloadu-boot-imx-0057d758e3e874cbe7f24745d0cce8c1cb6c207e.zip
u-boot-imx-0057d758e3e874cbe7f24745d0cce8c1cb6c207e.tar.gz
u-boot-imx-0057d758e3e874cbe7f24745d0cce8c1cb6c207e.tar.bz2
[PATCH] Update Prodrive P3Mx support
Signed-off-by: Stefan Roese <sr@denx.de>
Diffstat (limited to 'board/prodrive/p3mx/p3mx.c')
-rw-r--r--board/prodrive/p3mx/p3mx.c63
1 files changed, 59 insertions, 4 deletions
diff --git a/board/prodrive/p3mx/p3mx.c b/board/prodrive/p3mx/p3mx.c
index 6cebd1a..d54ddaf 100644
--- a/board/prodrive/p3mx/p3mx.c
+++ b/board/prodrive/p3mx/p3mx.c
@@ -45,6 +45,7 @@
#include "mpsc.h"
#include "64460.h"
#include "mv_regs.h"
+#include "p3mx.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -79,6 +80,7 @@ extern flash_info_t flash_info[];
void board_prebootm_init (void);
unsigned int INTERNAL_REG_BASE_ADDR = CFG_GT_REGS;
int display_mem_map (void);
+void set_led(int);
/* ------------------------------------------------------------------------- */
@@ -246,7 +248,6 @@ int board_early_init_f (void)
* that if it's not at the power-on location, it's where we put
* it last time. (huber)
*/
-
my_remap_gt_regs (CFG_DFL_GT_REGS, CFG_GT_REGS);
#ifdef CONFIG_PCI
@@ -287,6 +288,8 @@ int board_early_init_f (void)
GT_REG_WRITE (GPP_LEVEL_CONTROL, CFG_GPP_LEVEL_CONTROL);
+ set_led(LED_RED);
+
return 0;
}
@@ -332,6 +335,7 @@ void after_reloc (ulong dest_addr, gd_t * gd)
/* display_mem_map(); */
/* now, jump to the main U-Boot board init code */
+ set_led(LED_GREEN);
board_init_r (gd, dest_addr);
/* NOTREACHED */
}
@@ -356,15 +360,66 @@ int checkboard (void)
return (0);
}
-/* utility functions */
-void debug_led (int led, int mode)
+void set_led(int col)
{
+ int tmp;
+ int on_pin;
+ int off_pin;
+
+ /* Program Mpp[22] as Gpp[22]
+ * Program Mpp[23] as Gpp[23]
+ */
+ tmp = GTREGREAD(MPP_CONTROL2);
+ tmp &= 0x00ffffff;
+ GT_REG_WRITE(MPP_CONTROL2,tmp);
+
+ /* Program Gpp[22] and Gpp[23] as output
+ */
+ tmp = GTREGREAD(GPP_IO_CONTROL);
+ tmp |= 0x00C00000;
+ GT_REG_WRITE(GPP_IO_CONTROL, tmp);
+
+ /* Program Gpp[22] and Gpp[23] as active high
+ */
+ tmp = GTREGREAD(GPP_LEVEL_CONTROL);
+ tmp &= 0xff3fffff;
+ GT_REG_WRITE(GPP_LEVEL_CONTROL, tmp);
+
+ switch(col) {
+ default:
+ case LED_OFF :
+ on_pin = 0;
+ off_pin = ((1 << 23) | (1 << 22));
+ break;
+ case LED_RED :
+ on_pin = (1 << 23);
+ off_pin = (1 << 22);
+ break;
+ case LED_GREEN :
+ on_pin = (1 << 22);
+ off_pin = (1 << 23);
+ break;
+ case LED_ORANGE :
+ on_pin = ((1 << 23) | (1 << 22));
+ off_pin = 0;
+ break;
+ }
+
+ /* Set output Gpp[22] and Gpp[23]
+ */
+ tmp = GTREGREAD(GPP_VALUE);
+ tmp |= on_pin;
+ tmp &= ~off_pin;
+ GT_REG_WRITE(GPP_VALUE, tmp);
}
int display_mem_map (void)
{
- int i, j;
+ int i;
unsigned int base, size, width;
+#ifdef CONFIG_PCI
+ int j;
+#endif
/* SDRAM */
printf ("SD (DDR) RAM\n");