]>
Commit | Line | Data |
---|---|---|
3225f34e BS |
1 | /* |
2 | * Copyright (C) 2012-2013 Atmel Corporation | |
3 | * Bo Shen <voice.shen@atmel.com> | |
4 | * | |
1a459660 | 5 | * SPDX-License-Identifier: GPL-2.0+ |
3225f34e BS |
6 | */ |
7 | ||
8 | #include <common.h> | |
9 | #include <asm/arch/sama5d3.h> | |
10 | #include <asm/arch/at91_common.h> | |
11 | #include <asm/arch/at91_pmc.h> | |
12 | #include <asm/arch/clk.h> | |
13 | #include <asm/arch/gpio.h> | |
14 | #include <asm/io.h> | |
15 | ||
16 | unsigned int has_emac() | |
17 | { | |
18 | return cpu_is_sama5d31() || cpu_is_sama5d35(); | |
19 | } | |
20 | ||
21 | unsigned int has_gmac() | |
22 | { | |
23 | return !cpu_is_sama5d31(); | |
24 | } | |
25 | ||
26 | unsigned int has_lcdc() | |
27 | { | |
28 | return !cpu_is_sama5d35(); | |
29 | } | |
30 | ||
31 | char *get_cpu_name() | |
32 | { | |
33 | unsigned int extension_id = get_extension_chip_id(); | |
34 | ||
35 | if (cpu_is_sama5d3()) | |
36 | switch (extension_id) { | |
37 | case ARCH_EXID_SAMA5D31: | |
38 | return "SAMA5D31"; | |
39 | case ARCH_EXID_SAMA5D33: | |
40 | return "SAMA5D33"; | |
41 | case ARCH_EXID_SAMA5D34: | |
42 | return "SAMA5D34"; | |
43 | case ARCH_EXID_SAMA5D35: | |
44 | return "SAMA5D35"; | |
45 | default: | |
46 | return "Unknown CPU type"; | |
47 | } | |
48 | else | |
49 | return "Unknown CPU type"; | |
50 | } | |
51 | ||
52 | void at91_serial0_hw_init(void) | |
53 | { | |
54 | at91_set_a_periph(AT91_PIO_PORTD, 18, 1); /* TXD0 */ | |
55 | at91_set_a_periph(AT91_PIO_PORTD, 17, 0); /* RXD0 */ | |
56 | ||
57 | /* Enable clock */ | |
58 | at91_periph_clk_enable(ATMEL_ID_USART0); | |
59 | } | |
60 | ||
61 | void at91_serial1_hw_init(void) | |
62 | { | |
63 | at91_set_a_periph(AT91_PIO_PORTB, 29, 1); /* TXD1 */ | |
64 | at91_set_a_periph(AT91_PIO_PORTB, 28, 0); /* RXD1 */ | |
65 | ||
66 | /* Enable clock */ | |
67 | at91_periph_clk_enable(ATMEL_ID_USART1); | |
68 | } | |
69 | ||
70 | void at91_serial2_hw_init(void) | |
71 | { | |
72 | at91_set_b_periph(AT91_PIO_PORTE, 26, 1); /* TXD2 */ | |
73 | at91_set_b_periph(AT91_PIO_PORTE, 25, 0); /* RXD2 */ | |
74 | ||
75 | /* Enable clock */ | |
76 | at91_periph_clk_enable(ATMEL_ID_USART2); | |
77 | } | |
78 | ||
79 | void at91_seriald_hw_init(void) | |
80 | { | |
81 | at91_set_a_periph(AT91_PIO_PORTB, 31, 1); /* DTXD */ | |
82 | at91_set_a_periph(AT91_PIO_PORTB, 30, 0); /* DRXD */ | |
83 | ||
84 | /* Enable clock */ | |
85 | at91_periph_clk_enable(ATMEL_ID_SYS); | |
86 | } | |
87 | ||
88 | #if defined(CONFIG_ATMEL_SPI) | |
89 | void at91_spi0_hw_init(unsigned long cs_mask) | |
90 | { | |
91 | at91_set_a_periph(AT91_PIO_PORTD, 10, 0); /* SPI0_MISO */ | |
92 | at91_set_a_periph(AT91_PIO_PORTD, 11, 0); /* SPI0_MOSI */ | |
93 | at91_set_a_periph(AT91_PIO_PORTD, 12, 0); /* SPI0_SPCK */ | |
94 | ||
95 | if (cs_mask & (1 << 0)) | |
96 | at91_set_pio_output(AT91_PIO_PORTD, 13, 1); | |
97 | if (cs_mask & (1 << 1)) | |
98 | at91_set_pio_output(AT91_PIO_PORTD, 14, 1); | |
99 | if (cs_mask & (1 << 2)) | |
100 | at91_set_pio_output(AT91_PIO_PORTD, 15, 1); | |
101 | if (cs_mask & (1 << 3)) | |
102 | at91_set_pio_output(AT91_PIO_PORTD, 16, 1); | |
103 | ||
104 | /* Enable clock */ | |
105 | at91_periph_clk_enable(ATMEL_ID_SPI0); | |
106 | } | |
107 | #endif | |
108 | ||
109 | #ifdef CONFIG_GENERIC_ATMEL_MCI | |
110 | void at91_mci_hw_init(void) | |
111 | { | |
112 | at91_set_a_periph(AT91_PIO_PORTD, 0, 0); /* MCI0 CMD */ | |
113 | at91_set_a_periph(AT91_PIO_PORTD, 1, 0); /* MCI0 DA0 */ | |
114 | at91_set_a_periph(AT91_PIO_PORTD, 2, 0); /* MCI0 DA1 */ | |
115 | at91_set_a_periph(AT91_PIO_PORTD, 3, 0); /* MCI0 DA2 */ | |
116 | at91_set_a_periph(AT91_PIO_PORTD, 4, 0); /* MCI0 DA3 */ | |
117 | #ifdef CONFIG_ATMEL_MCI_8BIT | |
118 | at91_set_a_periph(AT91_PIO_PORTD, 5, 0); /* MCI0 DA4 */ | |
119 | at91_set_a_periph(AT91_PIO_PORTD, 6, 0); /* MCI0 DA5 */ | |
120 | at91_set_a_periph(AT91_PIO_PORTD, 7, 0); /* MCI0 DA6 */ | |
121 | at91_set_a_periph(AT91_PIO_PORTD, 8, 0); /* MCI0 DA7 */ | |
122 | #endif | |
123 | at91_set_a_periph(AT91_PIO_PORTD, 9, 0); /* MCI0 CLK */ | |
124 | ||
125 | /* Enable clock */ | |
126 | at91_periph_clk_enable(ATMEL_ID_MCI0); | |
127 | } | |
128 | #endif | |
129 | ||
130 | #ifdef CONFIG_MACB | |
131 | void at91_macb_hw_init(void) | |
132 | { | |
133 | at91_set_a_periph(AT91_PIO_PORTC, 7, 0); /* ETXCK_EREFCK */ | |
134 | at91_set_a_periph(AT91_PIO_PORTC, 5, 0); /* ERXDV */ | |
135 | at91_set_a_periph(AT91_PIO_PORTC, 2, 0); /* ERX0 */ | |
136 | at91_set_a_periph(AT91_PIO_PORTC, 3, 0); /* ERX1 */ | |
137 | at91_set_a_periph(AT91_PIO_PORTC, 6, 0); /* ERXER */ | |
138 | at91_set_a_periph(AT91_PIO_PORTC, 4, 0); /* ETXEN */ | |
139 | at91_set_a_periph(AT91_PIO_PORTC, 0, 0); /* ETX0 */ | |
140 | at91_set_a_periph(AT91_PIO_PORTC, 1, 0); /* ETX1 */ | |
141 | at91_set_a_periph(AT91_PIO_PORTC, 9, 0); /* EMDIO */ | |
142 | at91_set_a_periph(AT91_PIO_PORTC, 8, 0); /* EMDC */ | |
143 | ||
144 | /* Enable clock */ | |
145 | at91_periph_clk_enable(ATMEL_ID_EMAC); | |
146 | } | |
147 | #endif | |
148 | ||
149 | #ifdef CONFIG_LCD | |
150 | void at91_lcd_hw_init(void) | |
151 | { | |
152 | at91_set_a_periph(AT91_PIO_PORTA, 24, 0); /* LCDPWM */ | |
153 | at91_set_a_periph(AT91_PIO_PORTA, 25, 0); /* LCDDISP */ | |
154 | at91_set_a_periph(AT91_PIO_PORTA, 26, 0); /* LCDVSYNC */ | |
155 | at91_set_a_periph(AT91_PIO_PORTA, 27, 0); /* LCDHSYNC */ | |
156 | at91_set_a_periph(AT91_PIO_PORTA, 28, 0); /* LCDDOTCK */ | |
157 | at91_set_a_periph(AT91_PIO_PORTA, 29, 0); /* LCDDEN */ | |
158 | ||
159 | /* The lower 16-bit of LCD only available on Port A */ | |
160 | at91_set_a_periph(AT91_PIO_PORTA, 0, 0); /* LCDD0 */ | |
161 | at91_set_a_periph(AT91_PIO_PORTA, 1, 0); /* LCDD1 */ | |
162 | at91_set_a_periph(AT91_PIO_PORTA, 2, 0); /* LCDD2 */ | |
163 | at91_set_a_periph(AT91_PIO_PORTA, 3, 0); /* LCDD3 */ | |
164 | at91_set_a_periph(AT91_PIO_PORTA, 4, 0); /* LCDD4 */ | |
165 | at91_set_a_periph(AT91_PIO_PORTA, 5, 0); /* LCDD5 */ | |
166 | at91_set_a_periph(AT91_PIO_PORTA, 6, 0); /* LCDD6 */ | |
167 | at91_set_a_periph(AT91_PIO_PORTA, 7, 0); /* LCDD7 */ | |
168 | at91_set_a_periph(AT91_PIO_PORTA, 8, 0); /* LCDD8 */ | |
169 | at91_set_a_periph(AT91_PIO_PORTA, 9, 0); /* LCDD9 */ | |
170 | at91_set_a_periph(AT91_PIO_PORTA, 10, 0); /* LCDD10 */ | |
171 | at91_set_a_periph(AT91_PIO_PORTA, 11, 0); /* LCDD11 */ | |
172 | at91_set_a_periph(AT91_PIO_PORTA, 12, 0); /* LCDD12 */ | |
173 | at91_set_a_periph(AT91_PIO_PORTA, 13, 0); /* LCDD13 */ | |
174 | at91_set_a_periph(AT91_PIO_PORTA, 14, 0); /* LCDD14 */ | |
175 | at91_set_a_periph(AT91_PIO_PORTA, 15, 0); /* LCDD15 */ | |
176 | ||
177 | /* Enable clock */ | |
178 | at91_periph_clk_enable(ATMEL_ID_LCDC); | |
179 | } | |
180 | #endif |