xref: /OK3568_Linux_fs/u-boot/board/atmel/sama5d4_xplained/sama5d4_xplained.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2014 Atmel
3*4882a593Smuzhiyun  *		      Bo Shen <voice.shen@atmel.com>
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * SPDX-License-Identifier:	GPL-2.0+
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <common.h>
9*4882a593Smuzhiyun #include <asm/io.h>
10*4882a593Smuzhiyun #include <asm/arch/at91_common.h>
11*4882a593Smuzhiyun #include <asm/arch/at91_rstc.h>
12*4882a593Smuzhiyun #include <asm/arch/atmel_mpddrc.h>
13*4882a593Smuzhiyun #include <asm/arch/gpio.h>
14*4882a593Smuzhiyun #include <asm/arch/clk.h>
15*4882a593Smuzhiyun #include <asm/arch/sama5d3_smc.h>
16*4882a593Smuzhiyun #include <asm/arch/sama5d4.h>
17*4882a593Smuzhiyun #include <atmel_hlcdc.h>
18*4882a593Smuzhiyun #include <debug_uart.h>
19*4882a593Smuzhiyun #include <lcd.h>
20*4882a593Smuzhiyun #include <nand.h>
21*4882a593Smuzhiyun #include <version.h>
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun DECLARE_GLOBAL_DATA_PTR;
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #ifdef CONFIG_NAND_ATMEL
sama5d4_xplained_nand_hw_init(void)26*4882a593Smuzhiyun static void sama5d4_xplained_nand_hw_init(void)
27*4882a593Smuzhiyun {
28*4882a593Smuzhiyun 	struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC;
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 	at91_periph_clk_enable(ATMEL_ID_SMC);
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	/* Configure SMC CS3 for NAND */
33*4882a593Smuzhiyun 	writel(AT91_SMC_SETUP_NWE(1) | AT91_SMC_SETUP_NCS_WR(1) |
34*4882a593Smuzhiyun 	       AT91_SMC_SETUP_NRD(1) | AT91_SMC_SETUP_NCS_RD(1),
35*4882a593Smuzhiyun 	       &smc->cs[3].setup);
36*4882a593Smuzhiyun 	writel(AT91_SMC_PULSE_NWE(2) | AT91_SMC_PULSE_NCS_WR(3) |
37*4882a593Smuzhiyun 	       AT91_SMC_PULSE_NRD(2) | AT91_SMC_PULSE_NCS_RD(3),
38*4882a593Smuzhiyun 	       &smc->cs[3].pulse);
39*4882a593Smuzhiyun 	writel(AT91_SMC_CYCLE_NWE(5) | AT91_SMC_CYCLE_NRD(5),
40*4882a593Smuzhiyun 	       &smc->cs[3].cycle);
41*4882a593Smuzhiyun 	writel(AT91_SMC_TIMINGS_TCLR(2) | AT91_SMC_TIMINGS_TADL(7) |
42*4882a593Smuzhiyun 	       AT91_SMC_TIMINGS_TAR(2)  | AT91_SMC_TIMINGS_TRR(3)   |
43*4882a593Smuzhiyun 	       AT91_SMC_TIMINGS_TWB(7)  | AT91_SMC_TIMINGS_RBNSEL(3)|
44*4882a593Smuzhiyun 	       AT91_SMC_TIMINGS_NFSEL(1), &smc->cs[3].timings);
45*4882a593Smuzhiyun 	writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
46*4882a593Smuzhiyun 	       AT91_SMC_MODE_EXNW_DISABLE |
47*4882a593Smuzhiyun 	       AT91_SMC_MODE_DBW_8 |
48*4882a593Smuzhiyun 	       AT91_SMC_MODE_TDF_CYCLE(3),
49*4882a593Smuzhiyun 	       &smc->cs[3].mode);
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 5, 0);	/* D0 */
52*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 6, 0);	/* D1 */
53*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 7, 0);	/* D2 */
54*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 8, 0);	/* D3 */
55*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 9, 0);	/* D4 */
56*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 10, 0);	/* D5 */
57*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 11, 0);	/* D6 */
58*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 12, 0);	/* D7 */
59*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 13, 0);	/* RE */
60*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 14, 0);	/* WE */
61*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 15, 1);	/* NCS */
62*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 16, 1);	/* RDY */
63*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 17, 1);	/* ALE */
64*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTC, 18, 1);	/* CLE */
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun #endif
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #ifdef CONFIG_CMD_USB
sama5d4_xplained_usb_hw_init(void)69*4882a593Smuzhiyun static void sama5d4_xplained_usb_hw_init(void)
70*4882a593Smuzhiyun {
71*4882a593Smuzhiyun 	at91_set_pio_output(AT91_PIO_PORTE, 11, 1);
72*4882a593Smuzhiyun 	at91_set_pio_output(AT91_PIO_PORTE, 14, 1);
73*4882a593Smuzhiyun }
74*4882a593Smuzhiyun #endif
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #ifdef CONFIG_LCD
77*4882a593Smuzhiyun vidinfo_t panel_info = {
78*4882a593Smuzhiyun 	.vl_col = 480,
79*4882a593Smuzhiyun 	.vl_row = 272,
80*4882a593Smuzhiyun 	.vl_clk = 9000000,
81*4882a593Smuzhiyun 	.vl_bpix = LCD_BPP,
82*4882a593Smuzhiyun 	.vl_tft = 1,
83*4882a593Smuzhiyun 	.vl_hsync_len = 41,
84*4882a593Smuzhiyun 	.vl_left_margin = 2,
85*4882a593Smuzhiyun 	.vl_right_margin = 2,
86*4882a593Smuzhiyun 	.vl_vsync_len = 11,
87*4882a593Smuzhiyun 	.vl_upper_margin = 2,
88*4882a593Smuzhiyun 	.vl_lower_margin = 2,
89*4882a593Smuzhiyun 	.mmio = ATMEL_BASE_LCDC,
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun /* No power up/down pin for the LCD pannel */
lcd_enable(void)93*4882a593Smuzhiyun void lcd_enable(void)	{ /* Empty! */ }
lcd_disable(void)94*4882a593Smuzhiyun void lcd_disable(void)	{ /* Empty! */ }
95*4882a593Smuzhiyun 
has_lcdc(void)96*4882a593Smuzhiyun unsigned int has_lcdc(void)
97*4882a593Smuzhiyun {
98*4882a593Smuzhiyun 	return 1;
99*4882a593Smuzhiyun }
100*4882a593Smuzhiyun 
sama5d4_xplained_lcd_hw_init(void)101*4882a593Smuzhiyun static void sama5d4_xplained_lcd_hw_init(void)
102*4882a593Smuzhiyun {
103*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 24, 0);	/* LCDPWM */
104*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 25, 0);	/* LCDDISP */
105*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 26, 0);	/* LCDVSYNC */
106*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 27, 0);	/* LCDHSYNC */
107*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 28, 0);	/* LCDDOTCK */
108*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 29, 0);	/* LCDDEN */
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  0, 0);	/* LCDD0 */
111*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  1, 0);	/* LCDD1 */
112*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  2, 0);	/* LCDD2 */
113*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  3, 0);	/* LCDD3 */
114*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  4, 0);	/* LCDD4 */
115*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  5, 0);	/* LCDD5 */
116*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  6, 0);	/* LCDD6 */
117*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  7, 0);	/* LCDD7 */
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  8, 0);	/* LCDD9 */
120*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA,  9, 0);	/* LCDD8 */
121*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 10, 0);	/* LCDD10 */
122*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 11, 0);	/* LCDD11 */
123*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 12, 0);	/* LCDD12 */
124*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 13, 0);	/* LCDD13 */
125*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 14, 0);	/* LCDD14 */
126*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 15, 0);	/* LCDD15 */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 16, 0);	/* LCDD16 */
129*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 17, 0);	/* LCDD17 */
130*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 18, 0);	/* LCDD18 */
131*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 19, 0);	/* LCDD19 */
132*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 20, 0);	/* LCDD20 */
133*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 21, 0);	/* LCDD21 */
134*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 22, 0);	/* LCDD22 */
135*4882a593Smuzhiyun 	at91_pio3_set_a_periph(AT91_PIO_PORTA, 23, 0);	/* LCDD23 */
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun 	/* Enable clock */
138*4882a593Smuzhiyun 	at91_periph_clk_enable(ATMEL_ID_LCDC);
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #ifdef CONFIG_LCD_INFO
lcd_show_board_info(void)142*4882a593Smuzhiyun void lcd_show_board_info(void)
143*4882a593Smuzhiyun {
144*4882a593Smuzhiyun 	ulong dram_size, nand_size;
145*4882a593Smuzhiyun 	int i;
146*4882a593Smuzhiyun 	char temp[32];
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun 	lcd_printf("%s\n", U_BOOT_VERSION);
149*4882a593Smuzhiyun 	lcd_printf("2014 ATMEL Corp\n");
150*4882a593Smuzhiyun 	lcd_printf("%s CPU at %s MHz\n", get_cpu_name(),
151*4882a593Smuzhiyun 		   strmhz(temp, get_cpu_clk_rate()));
152*4882a593Smuzhiyun 
153*4882a593Smuzhiyun 	dram_size = 0;
154*4882a593Smuzhiyun 	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++)
155*4882a593Smuzhiyun 		dram_size += gd->bd->bi_dram[i].size;
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun 	nand_size = 0;
158*4882a593Smuzhiyun #ifdef CONFIG_NAND_ATMEL
159*4882a593Smuzhiyun 	for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
160*4882a593Smuzhiyun 		nand_size += get_nand_dev_by_index(i)->size;
161*4882a593Smuzhiyun #endif
162*4882a593Smuzhiyun 	lcd_printf("%ld MB SDRAM, %ld MB NAND\n",
163*4882a593Smuzhiyun 		   dram_size >> 20, nand_size >> 20);
164*4882a593Smuzhiyun }
165*4882a593Smuzhiyun #endif /* CONFIG_LCD_INFO */
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun #endif /* CONFIG_LCD */
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun #ifdef CONFIG_DEBUG_UART_BOARD_INIT
sama5d4_xplained_serial3_hw_init(void)170*4882a593Smuzhiyun static void sama5d4_xplained_serial3_hw_init(void)
171*4882a593Smuzhiyun {
172*4882a593Smuzhiyun 	at91_pio3_set_b_periph(AT91_PIO_PORTE, 17, 1);	/* TXD3 */
173*4882a593Smuzhiyun 	at91_pio3_set_b_periph(AT91_PIO_PORTE, 16, 0);	/* RXD3 */
174*4882a593Smuzhiyun 
175*4882a593Smuzhiyun 	/* Enable clock */
176*4882a593Smuzhiyun 	at91_periph_clk_enable(ATMEL_ID_USART3);
177*4882a593Smuzhiyun }
178*4882a593Smuzhiyun 
board_debug_uart_init(void)179*4882a593Smuzhiyun void board_debug_uart_init(void)
180*4882a593Smuzhiyun {
181*4882a593Smuzhiyun 	sama5d4_xplained_serial3_hw_init();
182*4882a593Smuzhiyun }
183*4882a593Smuzhiyun #endif
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun #ifdef CONFIG_BOARD_EARLY_INIT_F
board_early_init_f(void)186*4882a593Smuzhiyun int board_early_init_f(void)
187*4882a593Smuzhiyun {
188*4882a593Smuzhiyun #ifdef CONFIG_DEBUG_UART
189*4882a593Smuzhiyun 	debug_uart_init();
190*4882a593Smuzhiyun #endif
191*4882a593Smuzhiyun 	return 0;
192*4882a593Smuzhiyun }
193*4882a593Smuzhiyun #endif
194*4882a593Smuzhiyun 
board_init(void)195*4882a593Smuzhiyun int board_init(void)
196*4882a593Smuzhiyun {
197*4882a593Smuzhiyun 	/* adress of boot parameters */
198*4882a593Smuzhiyun 	gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun #ifdef CONFIG_NAND_ATMEL
201*4882a593Smuzhiyun 	sama5d4_xplained_nand_hw_init();
202*4882a593Smuzhiyun #endif
203*4882a593Smuzhiyun #ifdef CONFIG_LCD
204*4882a593Smuzhiyun 	sama5d4_xplained_lcd_hw_init();
205*4882a593Smuzhiyun #endif
206*4882a593Smuzhiyun #ifdef CONFIG_CMD_USB
207*4882a593Smuzhiyun 	sama5d4_xplained_usb_hw_init();
208*4882a593Smuzhiyun #endif
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun 	return 0;
211*4882a593Smuzhiyun }
212*4882a593Smuzhiyun 
dram_init(void)213*4882a593Smuzhiyun int dram_init(void)
214*4882a593Smuzhiyun {
215*4882a593Smuzhiyun 	gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
216*4882a593Smuzhiyun 				    CONFIG_SYS_SDRAM_SIZE);
217*4882a593Smuzhiyun 	return 0;
218*4882a593Smuzhiyun }
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /* SPL */
221*4882a593Smuzhiyun #ifdef CONFIG_SPL_BUILD
spl_board_init(void)222*4882a593Smuzhiyun void spl_board_init(void)
223*4882a593Smuzhiyun {
224*4882a593Smuzhiyun #if CONFIG_SYS_USE_NANDFLASH
225*4882a593Smuzhiyun 	sama5d4_xplained_nand_hw_init();
226*4882a593Smuzhiyun #endif
227*4882a593Smuzhiyun }
228*4882a593Smuzhiyun 
ddr2_conf(struct atmel_mpddrc_config * ddr2)229*4882a593Smuzhiyun static void ddr2_conf(struct atmel_mpddrc_config *ddr2)
230*4882a593Smuzhiyun {
231*4882a593Smuzhiyun 	ddr2->md = (ATMEL_MPDDRC_MD_DBW_32_BITS | ATMEL_MPDDRC_MD_DDR2_SDRAM);
232*4882a593Smuzhiyun 
233*4882a593Smuzhiyun 	ddr2->cr = (ATMEL_MPDDRC_CR_NC_COL_10 |
234*4882a593Smuzhiyun 		    ATMEL_MPDDRC_CR_NR_ROW_14 |
235*4882a593Smuzhiyun 		    ATMEL_MPDDRC_CR_CAS_DDR_CAS3 |
236*4882a593Smuzhiyun 		    ATMEL_MPDDRC_CR_NB_8BANKS |
237*4882a593Smuzhiyun 		    ATMEL_MPDDRC_CR_NDQS_DISABLED |
238*4882a593Smuzhiyun 		    ATMEL_MPDDRC_CR_DECOD_INTERLEAVED |
239*4882a593Smuzhiyun 		    ATMEL_MPDDRC_CR_UNAL_SUPPORTED);
240*4882a593Smuzhiyun 
241*4882a593Smuzhiyun 	ddr2->rtr = 0x2b0;
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun 	ddr2->tpr0 = (8 << ATMEL_MPDDRC_TPR0_TRAS_OFFSET |
244*4882a593Smuzhiyun 		      3 << ATMEL_MPDDRC_TPR0_TRCD_OFFSET |
245*4882a593Smuzhiyun 		      3 << ATMEL_MPDDRC_TPR0_TWR_OFFSET |
246*4882a593Smuzhiyun 		      10 << ATMEL_MPDDRC_TPR0_TRC_OFFSET |
247*4882a593Smuzhiyun 		      3 << ATMEL_MPDDRC_TPR0_TRP_OFFSET |
248*4882a593Smuzhiyun 		      2 << ATMEL_MPDDRC_TPR0_TRRD_OFFSET |
249*4882a593Smuzhiyun 		      2 << ATMEL_MPDDRC_TPR0_TWTR_OFFSET |
250*4882a593Smuzhiyun 		      2 << ATMEL_MPDDRC_TPR0_TMRD_OFFSET);
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun 	ddr2->tpr1 = (2 << ATMEL_MPDDRC_TPR1_TXP_OFFSET |
253*4882a593Smuzhiyun 		      200 << ATMEL_MPDDRC_TPR1_TXSRD_OFFSET |
254*4882a593Smuzhiyun 		      25 << ATMEL_MPDDRC_TPR1_TXSNR_OFFSET |
255*4882a593Smuzhiyun 		      23 << ATMEL_MPDDRC_TPR1_TRFC_OFFSET);
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun 	ddr2->tpr2 = (7 << ATMEL_MPDDRC_TPR2_TFAW_OFFSET |
258*4882a593Smuzhiyun 		      2 << ATMEL_MPDDRC_TPR2_TRTP_OFFSET |
259*4882a593Smuzhiyun 		      3 << ATMEL_MPDDRC_TPR2_TRPA_OFFSET |
260*4882a593Smuzhiyun 		      2 << ATMEL_MPDDRC_TPR2_TXARDS_OFFSET |
261*4882a593Smuzhiyun 		      8 << ATMEL_MPDDRC_TPR2_TXARD_OFFSET);
262*4882a593Smuzhiyun }
263*4882a593Smuzhiyun 
mem_init(void)264*4882a593Smuzhiyun void mem_init(void)
265*4882a593Smuzhiyun {
266*4882a593Smuzhiyun 	struct atmel_mpddrc_config ddr2;
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun 	ddr2_conf(&ddr2);
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun 	/* Enable MPDDR clock */
271*4882a593Smuzhiyun 	at91_periph_clk_enable(ATMEL_ID_MPDDRC);
272*4882a593Smuzhiyun 	at91_system_clk_enable(AT91_PMC_DDR);
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun 	/* DDRAM2 Controller initialize */
275*4882a593Smuzhiyun 	ddr2_init(ATMEL_BASE_MPDDRC, ATMEL_BASE_DDRCS, &ddr2);
276*4882a593Smuzhiyun }
277*4882a593Smuzhiyun 
at91_pmc_init(void)278*4882a593Smuzhiyun void at91_pmc_init(void)
279*4882a593Smuzhiyun {
280*4882a593Smuzhiyun 	u32 tmp;
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun 	tmp = AT91_PMC_PLLAR_29 |
283*4882a593Smuzhiyun 	      AT91_PMC_PLLXR_PLLCOUNT(0x3f) |
284*4882a593Smuzhiyun 	      AT91_PMC_PLLXR_MUL(87) |
285*4882a593Smuzhiyun 	      AT91_PMC_PLLXR_DIV(1);
286*4882a593Smuzhiyun 	at91_plla_init(tmp);
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 	at91_pllicpr_init(AT91_PMC_IPLL_PLLA(0x0));
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	tmp = AT91_PMC_MCKR_H32MXDIV |
291*4882a593Smuzhiyun 	      AT91_PMC_MCKR_PLLADIV_2 |
292*4882a593Smuzhiyun 	      AT91_PMC_MCKR_MDIV_3 |
293*4882a593Smuzhiyun 	      AT91_PMC_MCKR_CSS_PLLA;
294*4882a593Smuzhiyun 	at91_mck_init(tmp);
295*4882a593Smuzhiyun }
296*4882a593Smuzhiyun #endif
297