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