]> git.ipfire.org Git - people/ms/u-boot.git/blame - board/esd/pmc405/pmc405.c
Add GPL-2.0+ SPDX-License-Identifier to source files
[people/ms/u-boot.git] / board / esd / pmc405 / pmc405.c
CommitLineData
071d897c
SR
1/*
2 * (C) Copyright 2001-2003
2076d0a1
SR
3 * Stefan Roese, DENX Software Engineering, sr@denx.de.
4 *
2f6eb917 5 * (C) Copyright 2005-2009
2076d0a1 6 * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com
071d897c 7 *
1a459660 8 * SPDX-License-Identifier: GPL-2.0+
071d897c
SR
9 */
10
11#include <common.h>
12#include <asm/processor.h>
2f6eb917 13#include <asm/io.h>
071d897c 14#include <command.h>
071d897c
SR
15#include <malloc.h>
16
d87080b7 17DECLARE_GLOBAL_DATA_PTR;
071d897c 18
4510a7b7
SR
19extern void lxt971_no_sleep(void);
20
c837dcb1 21int board_early_init_f (void)
071d897c
SR
22{
23 /*
24 * IRQ 0-15 405GP internally generated; active high; level sensitive
25 * IRQ 16 405GP internally generated; active low; level sensitive
26 * IRQ 17-24 RESERVED
27 * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive
28 * IRQ 26 (EXT IRQ 1) SER0 ; active low; level sensitive
29 * IRQ 27 (EXT IRQ 2) SER1; active low; level sensitive
30 * IRQ 28 (EXT IRQ 3) FPGA 0; active low; level sensitive
31 * IRQ 29 (EXT IRQ 4) FPGA 1; active low; level sensitive
32 * IRQ 30 (EXT IRQ 5) PCI INTA; active low; level sensitive
33 * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive
34 */
952e7760
SR
35 mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */
36 mtdcr(UIC0ER, 0x00000000); /* disable all ints */
37 mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/
38 mtdcr(UIC0PR, 0xFFFFFF81); /* set int polarities */
39 mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */
40 mtdcr(UIC0VCR, 0x00000001); /* set vect base=0, INT0 highest priority */
41 mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */
071d897c
SR
42
43 /*
c553b5f4
MF
44 * EBC Configuration Register:
45 * set ready timeout to 512 ebc-clks -> ca. 15 us
071d897c 46 */
d1c3b275 47 mtebc (EBC0_CFG, 0xa8400000);
071d897c 48
4510a7b7 49 /*
2076d0a1 50 * Setup GPIO pins
4510a7b7 51 */
d1c3b275 52 mtdcr(CPC0_CR0, mfdcr(CPC0_CR0) | ((CONFIG_SYS_FPGA_INIT |
f50fe4bd
SR
53 CONFIG_SYS_FPGA_DONE |
54 CONFIG_SYS_XEREADY |
55 CONFIG_SYS_NONMONARCH |
6d0f6bcf 56 CONFIG_SYS_REV1_2) << 5));
2076d0a1 57
f50fe4bd 58 if (!(in_be32((void *)GPIO0_IR) & CONFIG_SYS_REV1_2)) {
2076d0a1 59 /* rev 1.2 boards */
d1c3b275 60 mtdcr(CPC0_CR0, mfdcr(CPC0_CR0) | ((CONFIG_SYS_INTA_FAKE |
6d0f6bcf 61 CONFIG_SYS_SELF_RST) << 5));
2076d0a1
SR
62 }
63
f50fe4bd 64 out_be32((void *)GPIO0_OR, CONFIG_SYS_VPEN);
c553b5f4 65 /* setup for output */
f50fe4bd
SR
66 out_be32((void *)GPIO0_TCR, CONFIG_SYS_FPGA_PRG | CONFIG_SYS_FPGA_CLK |
67 CONFIG_SYS_FPGA_DATA | CONFIG_SYS_XEREADY | CONFIG_SYS_VPEN);
2076d0a1 68
c553b5f4
MF
69 /*
70 * - check if rev1_2 is low, then:
71 * - set/reset CONFIG_SYS_INTA_FAKE/CONFIG_SYS_SELF_RST
72 * in TCR to assert INTA# or SELFRST#
4510a7b7 73 */
071d897c
SR
74 return 0;
75}
76
071d897c
SR
77int misc_init_r (void)
78{
4510a7b7
SR
79 /* adjust flash start and offset */
80 gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
81 gd->bd->bi_flashoffset = 0;
82
c553b5f4 83 /* deassert EREADY# */
f50fe4bd
SR
84 out_be32((void *)GPIO0_OR,
85 in_be32((void *)GPIO0_OR) | CONFIG_SYS_XEREADY);
071d897c
SR
86 return (0);
87}
88
2076d0a1
SR
89ushort pmc405_pci_subsys_deviceid(void)
90{
91 ulong val;
f50fe4bd
SR
92
93 val = in_be32((void *)GPIO0_IR);
6d0f6bcf 94 if (!(val & CONFIG_SYS_REV1_2)) { /* low=rev1.2 */
c553b5f4
MF
95 /* check monarch# signal */
96 if (val & CONFIG_SYS_NONMONARCH)
6d0f6bcf 97 return CONFIG_SYS_PCI_SUBSYS_DEVICEID_NONMONARCH;
6d0f6bcf 98 return CONFIG_SYS_PCI_SUBSYS_DEVICEID_MONARCH;
2076d0a1 99 }
6d0f6bcf 100 return CONFIG_SYS_PCI_SUBSYS_DEVICEID_NONMONARCH;
2076d0a1 101}
071d897c
SR
102
103/*
c553b5f4 104 * Check Board Identity
071d897c 105 */
071d897c
SR
106int checkboard (void)
107{
2076d0a1 108 ulong val;
77ddac94 109 char str[64];
cdb74977 110 int i = getenv_f("serial#", str, sizeof(str));
071d897c
SR
111
112 puts ("Board: ");
113
c553b5f4 114 if (i == -1)
ef9e8685 115 puts ("### No HW ID - assuming PMC405");
c553b5f4 116 else
071d897c 117 puts(str);
071d897c 118
f50fe4bd 119 val = in_be32((void *)GPIO0_IR);
6d0f6bcf 120 if (!(val & CONFIG_SYS_REV1_2)) { /* low=rev1.2 */
2076d0a1 121 puts(" rev1.2 (");
c553b5f4 122 if (val & CONFIG_SYS_NONMONARCH) /* monarch# signal */
2076d0a1 123 puts("non-");
2076d0a1 124 puts("monarch)");
c553b5f4 125 } else
2076d0a1 126 puts(" <=rev1.1");
071d897c 127
2076d0a1 128 putc ('\n');
4510a7b7 129
071d897c
SR
130 return 0;
131}
132
2076d0a1 133void reset_phy(void)
071d897c 134{
2076d0a1 135#ifdef CONFIG_LXT971_NO_SLEEP
071d897c 136
2076d0a1
SR
137 /*
138 * Disable sleep mode in LXT971
139 */
140 lxt971_no_sleep();
141#endif
071d897c 142}