2 * Copyright (C) Freescale Semiconductor, Inc. 2006-2007
4 * Author: Scott Wood <scottwood@freescale.com>
6 * SPDX-License-Identifier: GPL-2.0+
10 #if defined(CONFIG_OF_LIBFDT)
18 #if defined(CONFIG_MPC83XX_GPIO) && !defined(CONFIG_SPL_BUILD)
22 DECLARE_GLOBAL_DATA_PTR
;
24 int board_early_init_f(void)
26 #ifndef CONFIG_SYS_8313ERDB_BROKEN_PMC
27 volatile immap_t
*im
= (immap_t
*)CONFIG_SYS_IMMR
;
29 if (im
->pmc
.pmccr1
& PMCCR1_POWER_OFF
)
30 gd
->flags
|= GD_FLG_SILENT
;
32 #if defined(CONFIG_MPC83XX_GPIO) && !defined(CONFIG_SPL_BUILD)
33 mpc83xx_gpio_init_f();
39 int board_early_init_r(void)
41 #if defined(CONFIG_MPC83XX_GPIO) && !defined(CONFIG_SPL_BUILD)
42 mpc83xx_gpio_init_r();
50 puts("Board: Freescale MPC8313ERDB\n");
54 #ifndef CONFIG_SPL_BUILD
55 static struct pci_region pci_regions
[] = {
57 .bus_start
= CONFIG_SYS_PCI1_MEM_BASE
,
58 .phys_start
= CONFIG_SYS_PCI1_MEM_PHYS
,
59 .size
= CONFIG_SYS_PCI1_MEM_SIZE
,
60 .flags
= PCI_REGION_MEM
| PCI_REGION_PREFETCH
63 .bus_start
= CONFIG_SYS_PCI1_MMIO_BASE
,
64 .phys_start
= CONFIG_SYS_PCI1_MMIO_PHYS
,
65 .size
= CONFIG_SYS_PCI1_MMIO_SIZE
,
66 .flags
= PCI_REGION_MEM
69 .bus_start
= CONFIG_SYS_PCI1_IO_BASE
,
70 .phys_start
= CONFIG_SYS_PCI1_IO_PHYS
,
71 .size
= CONFIG_SYS_PCI1_IO_SIZE
,
72 .flags
= PCI_REGION_IO
76 void pci_init_board(void)
78 volatile immap_t
*immr
= (volatile immap_t
*)CONFIG_SYS_IMMR
;
79 volatile clk83xx_t
*clk
= (volatile clk83xx_t
*)&immr
->clk
;
80 volatile law83xx_t
*pci_law
= immr
->sysconf
.pcilaw
;
81 struct pci_region
*reg
[] = { pci_regions
};
83 /* Enable all 3 PCI_CLK_OUTPUTs. */
84 clk
->occr
|= 0xe0000000;
87 * Configure PCI Local Access Windows
89 pci_law
[0].bar
= CONFIG_SYS_PCI1_MEM_PHYS
& LAWBAR_BAR
;
90 pci_law
[0].ar
= LBLAWAR_EN
| LBLAWAR_512MB
;
92 pci_law
[1].bar
= CONFIG_SYS_PCI1_IO_PHYS
& LAWBAR_BAR
;
93 pci_law
[1].ar
= LBLAWAR_EN
| LBLAWAR_1MB
;
95 mpc83xx_pci_init(1, reg
);
99 * Miscellaneous late-boot configurations
101 * If a VSC7385 microcode image is present, then upload it.
103 int misc_init_r(void)
107 #ifdef CONFIG_VSC7385_IMAGE
108 if (vsc7385_upload_firmware((void *) CONFIG_VSC7385_IMAGE
,
109 CONFIG_VSC7385_IMAGE_SIZE
)) {
110 puts("Failure uploading VSC7385 microcode.\n");
118 #if defined(CONFIG_OF_BOARD_SETUP)
119 void ft_board_setup(void *blob
, bd_t
*bd
)
121 ft_cpu_setup(blob
, bd
);
123 ft_pci_setup(blob
, bd
);
127 #else /* CONFIG_SPL_BUILD */
128 void board_init_f(ulong bootflag
)
130 board_early_init_f();
131 NS16550_init((NS16550_t
)(CONFIG_SYS_IMMR
+ 0x4500),
132 CONFIG_SYS_NS16550_CLK
/ 16 / CONFIG_BAUDRATE
);
133 puts("NAND boot... ");
136 relocate_code(CONFIG_SYS_NAND_U_BOOT_RELOC_SP
, (gd_t
*)gd
,
137 CONFIG_SYS_NAND_U_BOOT_RELOC
);
140 void board_init_r(gd_t
*gd
, ulong dest_addr
)
147 if (gd
->flags
& GD_FLG_SILENT
)
151 NS16550_putc((NS16550_t
)(CONFIG_SYS_IMMR
+ 0x4500), '\r');
153 NS16550_putc((NS16550_t
)(CONFIG_SYS_IMMR
+ 0x4500), c
);