xref: /rk3399_rockchip-uboot/board/freescale/mpc8313erdb/mpc8313erdb.c (revision b3458d2cd55d01732e30a76d898afd99e871cd67)
1e58fe957SKim Phillips /*
2e58fe957SKim Phillips  * Copyright (C) Freescale Semiconductor, Inc. 2006-2007
3e58fe957SKim Phillips  *
4e58fe957SKim Phillips  * Author: Scott Wood <scottwood@freescale.com>
5e58fe957SKim Phillips  *
6e58fe957SKim Phillips  * See file CREDITS for list of people who contributed to this
7e58fe957SKim Phillips  * project.
8e58fe957SKim Phillips  *
9e58fe957SKim Phillips  * This program is free software; you can redistribute it and/or
10e58fe957SKim Phillips  * modify it under the terms of the GNU General Public License as
11e58fe957SKim Phillips  * published by the Free Software Foundation; either version 2 of
12e58fe957SKim Phillips  * the License, or (at your option) any later version.
13e58fe957SKim Phillips  *
14e58fe957SKim Phillips  * This program is distributed in the hope that it will be useful,
15e58fe957SKim Phillips  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16e58fe957SKim Phillips  * MERCHANTABILITY or FITNESS for A PARTICULAR PURPOSE.  See the
17e58fe957SKim Phillips  * GNU General Public License for more details.
18e58fe957SKim Phillips  *
19e58fe957SKim Phillips  * You should have received a copy of the GNU General Public License
20e58fe957SKim Phillips  * along with this program; if not, write to the Free Software
21e58fe957SKim Phillips  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
22e58fe957SKim Phillips  * MA 02111-1307 USA
23e58fe957SKim Phillips  */
24e58fe957SKim Phillips 
25e58fe957SKim Phillips #include <common.h>
26*b3458d2cSKim Phillips #if defined(CONFIG_OF_LIBFDT)
27e58fe957SKim Phillips #include <libfdt.h>
28e58fe957SKim Phillips #endif
29e58fe957SKim Phillips #include <pci.h>
30e58fe957SKim Phillips #include <mpc83xx.h>
31e58fe957SKim Phillips 
32e58fe957SKim Phillips DECLARE_GLOBAL_DATA_PTR;
33e58fe957SKim Phillips 
34e58fe957SKim Phillips int board_early_init_f(void)
35e58fe957SKim Phillips {
36e58fe957SKim Phillips #ifndef CFG_8313ERDB_BROKEN_PMC
37e58fe957SKim Phillips 	volatile immap_t *im = (immap_t *)CFG_IMMR;
38e58fe957SKim Phillips 
39e58fe957SKim Phillips 	if (im->pmc.pmccr1 & PMCCR1_POWER_OFF)
40e58fe957SKim Phillips 		gd->flags |= GD_FLG_SILENT;
41e58fe957SKim Phillips #endif
42e58fe957SKim Phillips 
43e58fe957SKim Phillips 	return 0;
44e58fe957SKim Phillips }
45e58fe957SKim Phillips 
46e58fe957SKim Phillips int checkboard(void)
47e58fe957SKim Phillips {
48e58fe957SKim Phillips 	puts("Board: Freescale MPC8313ERDB\n");
49e58fe957SKim Phillips 	return 0;
50e58fe957SKim Phillips }
51e58fe957SKim Phillips 
52e58fe957SKim Phillips static struct pci_region pci_regions[] = {
53e58fe957SKim Phillips 	{
54e58fe957SKim Phillips 		bus_start: CFG_PCI1_MEM_BASE,
55e58fe957SKim Phillips 		phys_start: CFG_PCI1_MEM_PHYS,
56e58fe957SKim Phillips 		size: CFG_PCI1_MEM_SIZE,
57e58fe957SKim Phillips 		flags: PCI_REGION_MEM | PCI_REGION_PREFETCH
58e58fe957SKim Phillips 	},
59e58fe957SKim Phillips 	{
60e58fe957SKim Phillips 		bus_start: CFG_PCI1_MMIO_BASE,
61e58fe957SKim Phillips 		phys_start: CFG_PCI1_MMIO_PHYS,
62e58fe957SKim Phillips 		size: CFG_PCI1_MMIO_SIZE,
63e58fe957SKim Phillips 		flags: PCI_REGION_MEM
64e58fe957SKim Phillips 	},
65e58fe957SKim Phillips 	{
66e58fe957SKim Phillips 		bus_start: CFG_PCI1_IO_BASE,
67e58fe957SKim Phillips 		phys_start: CFG_PCI1_IO_PHYS,
68e58fe957SKim Phillips 		size: CFG_PCI1_IO_SIZE,
69e58fe957SKim Phillips 		flags: PCI_REGION_IO
70e58fe957SKim Phillips 	}
71e58fe957SKim Phillips };
72e58fe957SKim Phillips 
73e58fe957SKim Phillips void pci_init_board(void)
74e58fe957SKim Phillips {
75e58fe957SKim Phillips 	volatile immap_t *immr = (volatile immap_t *)CFG_IMMR;
76e58fe957SKim Phillips 	volatile clk83xx_t *clk = (volatile clk83xx_t *)&immr->clk;
77e58fe957SKim Phillips 	volatile law83xx_t *pci_law = immr->sysconf.pcilaw;
78e58fe957SKim Phillips 	struct pci_region *reg[] = { pci_regions };
79e58fe957SKim Phillips 	int warmboot;
80e58fe957SKim Phillips 
81e58fe957SKim Phillips 	/* Enable all 3 PCI_CLK_OUTPUTs. */
82e58fe957SKim Phillips 	clk->occr |= 0xe0000000;
83e58fe957SKim Phillips 
84e58fe957SKim Phillips 	/*
85e58fe957SKim Phillips 	 * Configure PCI Local Access Windows
86e58fe957SKim Phillips 	 */
87e58fe957SKim Phillips 	pci_law[0].bar = CFG_PCI1_MEM_PHYS & LAWBAR_BAR;
88e58fe957SKim Phillips 	pci_law[0].ar = LBLAWAR_EN | LBLAWAR_512MB;
89e58fe957SKim Phillips 
90e58fe957SKim Phillips 	pci_law[1].bar = CFG_PCI1_IO_PHYS & LAWBAR_BAR;
91e58fe957SKim Phillips 	pci_law[1].ar = LBLAWAR_EN | LBLAWAR_1MB;
92e58fe957SKim Phillips 
93e58fe957SKim Phillips 	warmboot = gd->bd->bi_bootflags & BOOTFLAG_WARM;
94e58fe957SKim Phillips #ifndef CFG_8313ERDB_BROKEN_PMC
95e58fe957SKim Phillips 	warmboot |= immr->pmc.pmccr1 & PMCCR1_POWER_OFF;
96e58fe957SKim Phillips #endif
97e58fe957SKim Phillips 
98e58fe957SKim Phillips 	mpc83xx_pci_init(1, reg, warmboot);
99e58fe957SKim Phillips }
100e58fe957SKim Phillips 
101e58fe957SKim Phillips #if defined(CONFIG_OF_BOARD_SETUP)
102e58fe957SKim Phillips void ft_board_setup(void *blob, bd_t *bd)
103e58fe957SKim Phillips {
104e58fe957SKim Phillips 	ft_cpu_setup(blob, bd);
105e58fe957SKim Phillips #ifdef CONFIG_PCI
106e58fe957SKim Phillips 	ft_pci_setup(blob, bd);
107e58fe957SKim Phillips #endif
108e58fe957SKim Phillips }
109e58fe957SKim Phillips #endif
110