111c45ebdSJoe Hamman /* 2bd42bbb8SPaul Gortmaker * Copyright 2007,2009 Wind River Systems, Inc. <www.windriver.com> 3bd42bbb8SPaul Gortmaker * 411c45ebdSJoe Hamman * Copyright 2007 Embedded Specialties, Inc. 511c45ebdSJoe Hamman * 611c45ebdSJoe Hamman * Copyright 2004, 2007 Freescale Semiconductor. 711c45ebdSJoe Hamman * 811c45ebdSJoe Hamman * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com> 911c45ebdSJoe Hamman * 1011c45ebdSJoe Hamman * See file CREDITS for list of people who contributed to this 1111c45ebdSJoe Hamman * project. 1211c45ebdSJoe Hamman * 1311c45ebdSJoe Hamman * This program is free software; you can redistribute it and/or 1411c45ebdSJoe Hamman * modify it under the terms of the GNU General Public License as 1511c45ebdSJoe Hamman * published by the Free Software Foundation; either version 2 of 1611c45ebdSJoe Hamman * the License, or (at your option) any later version. 1711c45ebdSJoe Hamman * 1811c45ebdSJoe Hamman * This program is distributed in the hope that it will be useful, 1911c45ebdSJoe Hamman * but WITHOUT ANY WARRANTY; without even the implied warranty of 2011c45ebdSJoe Hamman * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2111c45ebdSJoe Hamman * GNU General Public License for more details. 2211c45ebdSJoe Hamman * 2311c45ebdSJoe Hamman * You should have received a copy of the GNU General Public License 2411c45ebdSJoe Hamman * along with this program; if not, write to the Free Software 2511c45ebdSJoe Hamman * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 2611c45ebdSJoe Hamman * MA 02111-1307 USA 2711c45ebdSJoe Hamman */ 2811c45ebdSJoe Hamman 2911c45ebdSJoe Hamman #include <common.h> 3011c45ebdSJoe Hamman #include <pci.h> 3111c45ebdSJoe Hamman #include <asm/processor.h> 3211c45ebdSJoe Hamman #include <asm/immap_85xx.h> 33c8514622SKumar Gala #include <asm/fsl_pci.h> 3433b9079bSKumar Gala #include <asm/fsl_ddr_sdram.h> 35*5d27e02cSKumar Gala #include <asm/fsl_serdes.h> 36a30a549aSJon Loeliger #include <spd_sdram.h> 3794ca0914SPaul Gortmaker #include <netdev.h> 3894ca0914SPaul Gortmaker #include <tsec.h> 3911c45ebdSJoe Hamman #include <miiphy.h> 4011c45ebdSJoe Hamman #include <libfdt.h> 4111c45ebdSJoe Hamman #include <fdt_support.h> 4211c45ebdSJoe Hamman 4311c45ebdSJoe Hamman DECLARE_GLOBAL_DATA_PTR; 4411c45ebdSJoe Hamman 4511c45ebdSJoe Hamman void local_bus_init(void); 4611c45ebdSJoe Hamman void sdram_init(void); 4711c45ebdSJoe Hamman long int fixed_sdram (void); 4811c45ebdSJoe Hamman 4911c45ebdSJoe Hamman int board_early_init_f (void) 5011c45ebdSJoe Hamman { 5111c45ebdSJoe Hamman return 0; 5211c45ebdSJoe Hamman } 5311c45ebdSJoe Hamman 5411c45ebdSJoe Hamman int checkboard (void) 5511c45ebdSJoe Hamman { 566d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_local_ecm_t *ecm = (void *)(CONFIG_SYS_MPC85xx_ECM_ADDR); 576d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile u_char *rev= (void *)CONFIG_SYS_BD_REV; 5811c45ebdSJoe Hamman 5911c45ebdSJoe Hamman printf ("Board: Wind River SBC8548 Rev. 0x%01x\n", 600c7e4d45SPaul Gortmaker in_8(rev) >> 4); 6111c45ebdSJoe Hamman 6211c45ebdSJoe Hamman /* 6311c45ebdSJoe Hamman * Initialize local bus. 6411c45ebdSJoe Hamman */ 6511c45ebdSJoe Hamman local_bus_init (); 6611c45ebdSJoe Hamman 670c7e4d45SPaul Gortmaker out_be32(&ecm->eedr, 0xffffffff); /* clear ecm errors */ 680c7e4d45SPaul Gortmaker out_be32(&ecm->eeer, 0xffffffff); /* enable ecm errors */ 6911c45ebdSJoe Hamman return 0; 7011c45ebdSJoe Hamman } 7111c45ebdSJoe Hamman 729973e3c6SBecky Bruce phys_size_t 7311c45ebdSJoe Hamman initdram(int board_type) 7411c45ebdSJoe Hamman { 7511c45ebdSJoe Hamman long dram_size = 0; 7611c45ebdSJoe Hamman 7711c45ebdSJoe Hamman puts("Initializing\n"); 7811c45ebdSJoe Hamman 7911c45ebdSJoe Hamman #if defined(CONFIG_DDR_DLL) 8011c45ebdSJoe Hamman { 8111c45ebdSJoe Hamman /* 8211c45ebdSJoe Hamman * Work around to stabilize DDR DLL MSYNC_IN. 8311c45ebdSJoe Hamman * Errata DDR9 seems to have been fixed. 8411c45ebdSJoe Hamman * This is now the workaround for Errata DDR11: 8511c45ebdSJoe Hamman * Override DLL = 1, Course Adj = 1, Tap Select = 0 8611c45ebdSJoe Hamman */ 8711c45ebdSJoe Hamman 886d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 8911c45ebdSJoe Hamman 900c7e4d45SPaul Gortmaker out_be32(&gur->ddrdllcr, 0x81000000); 9111c45ebdSJoe Hamman asm("sync;isync;msync"); 9211c45ebdSJoe Hamman udelay(200); 9311c45ebdSJoe Hamman } 9411c45ebdSJoe Hamman #endif 9511c45ebdSJoe Hamman 9611c45ebdSJoe Hamman #if defined(CONFIG_SPD_EEPROM) 9733b9079bSKumar Gala dram_size = fsl_ddr_sdram(); 9833b9079bSKumar Gala dram_size = setup_ddr_tlbs(dram_size / 0x100000); 9933b9079bSKumar Gala dram_size *= 0x100000; 10011c45ebdSJoe Hamman #else 10111c45ebdSJoe Hamman dram_size = fixed_sdram (); 10211c45ebdSJoe Hamman #endif 10311c45ebdSJoe Hamman 10411c45ebdSJoe Hamman /* 10511c45ebdSJoe Hamman * SDRAM Initialization 10611c45ebdSJoe Hamman */ 10711c45ebdSJoe Hamman sdram_init(); 10811c45ebdSJoe Hamman 10911c45ebdSJoe Hamman puts(" DDR: "); 11011c45ebdSJoe Hamman return dram_size; 11111c45ebdSJoe Hamman } 11211c45ebdSJoe Hamman 11311c45ebdSJoe Hamman /* 11411c45ebdSJoe Hamman * Initialize Local Bus 11511c45ebdSJoe Hamman */ 11611c45ebdSJoe Hamman void 11711c45ebdSJoe Hamman local_bus_init(void) 11811c45ebdSJoe Hamman { 1196d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 120f51cdaf1SBecky Bruce volatile fsl_lbc_t *lbc = LBC_BASE_ADDR; 12111c45ebdSJoe Hamman 12211c45ebdSJoe Hamman uint clkdiv; 12311c45ebdSJoe Hamman uint lbc_hz; 12411c45ebdSJoe Hamman sys_info_t sysinfo; 12511c45ebdSJoe Hamman 12611c45ebdSJoe Hamman get_sys_info(&sysinfo); 1270c7e4d45SPaul Gortmaker clkdiv = (in_be32(&lbc->lcrr) & LCRR_CLKDIV) * 2; 12811c45ebdSJoe Hamman lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv; 12911c45ebdSJoe Hamman 1300c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr1, 0x00078080); 13111c45ebdSJoe Hamman if (clkdiv == 16) { 1320c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr0, 0x7c0f1bf0); 13311c45ebdSJoe Hamman } else if (clkdiv == 8) { 1340c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr0, 0x6c0f1bf0); 13511c45ebdSJoe Hamman } else if (clkdiv == 4) { 1360c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr0, 0x5c0f1bf0); 13711c45ebdSJoe Hamman } 13811c45ebdSJoe Hamman 1390c7e4d45SPaul Gortmaker setbits_be32(&lbc->lcrr, 0x00030000); 14011c45ebdSJoe Hamman 14111c45ebdSJoe Hamman asm("sync;isync;msync"); 14211c45ebdSJoe Hamman 1430c7e4d45SPaul Gortmaker out_be32(&lbc->ltesr, 0xffffffff); /* Clear LBC error IRQs */ 1440c7e4d45SPaul Gortmaker out_be32(&lbc->lteir, 0xffffffff); /* Enable LBC error IRQs */ 14511c45ebdSJoe Hamman } 14611c45ebdSJoe Hamman 14711c45ebdSJoe Hamman /* 14811c45ebdSJoe Hamman * Initialize SDRAM memory on the Local Bus. 14911c45ebdSJoe Hamman */ 15011c45ebdSJoe Hamman void 15111c45ebdSJoe Hamman sdram_init(void) 15211c45ebdSJoe Hamman { 15311d5a629SPaul Gortmaker #if defined(CONFIG_SYS_LBC_SDRAM_SIZE) 15411c45ebdSJoe Hamman 15511c45ebdSJoe Hamman uint idx; 156f51cdaf1SBecky Bruce volatile fsl_lbc_t *lbc = LBC_BASE_ADDR; 1576d0f6bcfSJean-Christophe PLAGNIOL-VILLARD uint *sdram_addr = (uint *)CONFIG_SYS_LBC_SDRAM_BASE; 15811c45ebdSJoe Hamman uint lsdmr_common; 15911c45ebdSJoe Hamman 16011c45ebdSJoe Hamman puts(" SDRAM: "); 16111c45ebdSJoe Hamman 1626d0f6bcfSJean-Christophe PLAGNIOL-VILLARD print_size (CONFIG_SYS_LBC_SDRAM_SIZE * 1024 * 1024, "\n"); 16311c45ebdSJoe Hamman 16411c45ebdSJoe Hamman /* 16511c45ebdSJoe Hamman * Setup SDRAM Base and Option Registers 16611c45ebdSJoe Hamman */ 167f51cdaf1SBecky Bruce set_lbc_or(3, CONFIG_SYS_OR3_PRELIM); 168f51cdaf1SBecky Bruce set_lbc_br(3, CONFIG_SYS_BR3_PRELIM); 169f51cdaf1SBecky Bruce set_lbc_or(4, CONFIG_SYS_OR4_PRELIM); 170f51cdaf1SBecky Bruce set_lbc_br(4, CONFIG_SYS_BR4_PRELIM); 17111d5a629SPaul Gortmaker 1720c7e4d45SPaul Gortmaker out_be32(&lbc->lbcr, CONFIG_SYS_LBC_LBCR); 17311c45ebdSJoe Hamman asm("msync"); 17411c45ebdSJoe Hamman 1750c7e4d45SPaul Gortmaker out_be32(&lbc->lsrt, CONFIG_SYS_LBC_LSRT); 1760c7e4d45SPaul Gortmaker out_be32(&lbc->mrtpr, CONFIG_SYS_LBC_MRTPR); 17711c45ebdSJoe Hamman asm("msync"); 17811c45ebdSJoe Hamman 17911c45ebdSJoe Hamman /* 18011c45ebdSJoe Hamman * MPC8548 uses "new" 15-16 style addressing. 18111c45ebdSJoe Hamman */ 1826d0f6bcfSJean-Christophe PLAGNIOL-VILLARD lsdmr_common = CONFIG_SYS_LBC_LSDMR_COMMON; 183b0fe93edSKumar Gala lsdmr_common |= LSDMR_BSMA1516; 18411c45ebdSJoe Hamman 18511c45ebdSJoe Hamman /* 18611c45ebdSJoe Hamman * Issue PRECHARGE ALL command. 18711c45ebdSJoe Hamman */ 1880c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_PCHALL); 18911c45ebdSJoe Hamman asm("sync;msync"); 19011c45ebdSJoe Hamman *sdram_addr = 0xff; 19111c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 19211c45ebdSJoe Hamman udelay(100); 19311c45ebdSJoe Hamman 19411c45ebdSJoe Hamman /* 19511c45ebdSJoe Hamman * Issue 8 AUTO REFRESH commands. 19611c45ebdSJoe Hamman */ 19711c45ebdSJoe Hamman for (idx = 0; idx < 8; idx++) { 1980c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_ARFRSH); 19911c45ebdSJoe Hamman asm("sync;msync"); 20011c45ebdSJoe Hamman *sdram_addr = 0xff; 20111c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 20211c45ebdSJoe Hamman udelay(100); 20311c45ebdSJoe Hamman } 20411c45ebdSJoe Hamman 20511c45ebdSJoe Hamman /* 20611c45ebdSJoe Hamman * Issue 8 MODE-set command. 20711c45ebdSJoe Hamman */ 2080c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_MRW); 20911c45ebdSJoe Hamman asm("sync;msync"); 21011c45ebdSJoe Hamman *sdram_addr = 0xff; 21111c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 21211c45ebdSJoe Hamman udelay(100); 21311c45ebdSJoe Hamman 21411c45ebdSJoe Hamman /* 21511c45ebdSJoe Hamman * Issue NORMAL OP command. 21611c45ebdSJoe Hamman */ 2170c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_NORMAL); 21811c45ebdSJoe Hamman asm("sync;msync"); 21911c45ebdSJoe Hamman *sdram_addr = 0xff; 22011c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 22111c45ebdSJoe Hamman udelay(200); /* Overkill. Must wait > 200 bus cycles */ 22211c45ebdSJoe Hamman 22311c45ebdSJoe Hamman #endif /* enable SDRAM init */ 22411c45ebdSJoe Hamman } 22511c45ebdSJoe Hamman 2266d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SYS_DRAM_TEST) 22711c45ebdSJoe Hamman int 22811c45ebdSJoe Hamman testdram(void) 22911c45ebdSJoe Hamman { 2306d0f6bcfSJean-Christophe PLAGNIOL-VILLARD uint *pstart = (uint *) CONFIG_SYS_MEMTEST_START; 2316d0f6bcfSJean-Christophe PLAGNIOL-VILLARD uint *pend = (uint *) CONFIG_SYS_MEMTEST_END; 23211c45ebdSJoe Hamman uint *p; 23311c45ebdSJoe Hamman 23411c45ebdSJoe Hamman printf("Testing DRAM from 0x%08x to 0x%08x\n", 2356d0f6bcfSJean-Christophe PLAGNIOL-VILLARD CONFIG_SYS_MEMTEST_START, 2366d0f6bcfSJean-Christophe PLAGNIOL-VILLARD CONFIG_SYS_MEMTEST_END); 23711c45ebdSJoe Hamman 23811c45ebdSJoe Hamman printf("DRAM test phase 1:\n"); 23911c45ebdSJoe Hamman for (p = pstart; p < pend; p++) 24011c45ebdSJoe Hamman *p = 0xaaaaaaaa; 24111c45ebdSJoe Hamman 24211c45ebdSJoe Hamman for (p = pstart; p < pend; p++) { 24311c45ebdSJoe Hamman if (*p != 0xaaaaaaaa) { 24411c45ebdSJoe Hamman printf ("DRAM test fails at: %08x\n", (uint) p); 24511c45ebdSJoe Hamman return 1; 24611c45ebdSJoe Hamman } 24711c45ebdSJoe Hamman } 24811c45ebdSJoe Hamman 24911c45ebdSJoe Hamman printf("DRAM test phase 2:\n"); 25011c45ebdSJoe Hamman for (p = pstart; p < pend; p++) 25111c45ebdSJoe Hamman *p = 0x55555555; 25211c45ebdSJoe Hamman 25311c45ebdSJoe Hamman for (p = pstart; p < pend; p++) { 25411c45ebdSJoe Hamman if (*p != 0x55555555) { 25511c45ebdSJoe Hamman printf ("DRAM test fails at: %08x\n", (uint) p); 25611c45ebdSJoe Hamman return 1; 25711c45ebdSJoe Hamman } 25811c45ebdSJoe Hamman } 25911c45ebdSJoe Hamman 26011c45ebdSJoe Hamman printf("DRAM test passed.\n"); 26111c45ebdSJoe Hamman return 0; 26211c45ebdSJoe Hamman } 26311c45ebdSJoe Hamman #endif 26411c45ebdSJoe Hamman 26511c45ebdSJoe Hamman #if !defined(CONFIG_SPD_EEPROM) 2660c7e4d45SPaul Gortmaker #define CONFIG_SYS_DDR_CONTROL 0xc300c000 26711c45ebdSJoe Hamman /************************************************************************* 26811c45ebdSJoe Hamman * fixed_sdram init -- doesn't use serial presence detect. 26911c45ebdSJoe Hamman * assumes 256MB DDR2 SDRAM SODIMM, without ECC, running at DDR400 speed. 27011c45ebdSJoe Hamman ************************************************************************/ 27111c45ebdSJoe Hamman long int fixed_sdram (void) 27211c45ebdSJoe Hamman { 2736d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR); 27411c45ebdSJoe Hamman 2750c7e4d45SPaul Gortmaker out_be32(&ddr->cs0_bnds, 0x0000007f); 2760c7e4d45SPaul Gortmaker out_be32(&ddr->cs1_bnds, 0x008000ff); 2770c7e4d45SPaul Gortmaker out_be32(&ddr->cs2_bnds, 0x00000000); 2780c7e4d45SPaul Gortmaker out_be32(&ddr->cs3_bnds, 0x00000000); 2790c7e4d45SPaul Gortmaker out_be32(&ddr->cs0_config, 0x80010101); 2800c7e4d45SPaul Gortmaker out_be32(&ddr->cs1_config, 0x80010101); 2810c7e4d45SPaul Gortmaker out_be32(&ddr->cs2_config, 0x00000000); 2820c7e4d45SPaul Gortmaker out_be32(&ddr->cs3_config, 0x00000000); 2830c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_3, 0x00000000); 2840c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_0, 0x00220802); 2850c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_1, 0x38377322); 2860c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_2, 0x0fa044C7); 2870c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg, 0x4300C000); 2880c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg_2, 0x24401000); 2890c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_mode, 0x23C00542); 2900c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_mode_2, 0x00000000); 2910c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_interval, 0x05080100); 2920c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_md_cntl, 0x00000000); 2930c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_data_init, 0x00000000); 2940c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_clk_cntl, 0x03800000); 29511c45ebdSJoe Hamman asm("sync;isync;msync"); 29611c45ebdSJoe Hamman udelay(500); 29711c45ebdSJoe Hamman 29811c45ebdSJoe Hamman #if defined (CONFIG_DDR_ECC) 29911c45ebdSJoe Hamman /* Enable ECC checking */ 3000c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL | 0x20000000); 30111c45ebdSJoe Hamman #else 3020c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL); 30311c45ebdSJoe Hamman #endif 30411c45ebdSJoe Hamman 3056d0f6bcfSJean-Christophe PLAGNIOL-VILLARD return CONFIG_SYS_SDRAM_SIZE * 1024 * 1024; 30611c45ebdSJoe Hamman } 30711c45ebdSJoe Hamman #endif 30811c45ebdSJoe Hamman 3097b1f1399SPaul Gortmaker #ifdef CONFIG_PCI1 3107b1f1399SPaul Gortmaker static struct pci_controller pci1_hose; 3117b1f1399SPaul Gortmaker #endif /* CONFIG_PCI1 */ 31211c45ebdSJoe Hamman 31311c45ebdSJoe Hamman #ifdef CONFIG_PCIE1 31411c45ebdSJoe Hamman static struct pci_controller pcie1_hose; 31511c45ebdSJoe Hamman #endif /* CONFIG_PCIE1 */ 31611c45ebdSJoe Hamman 31711c45ebdSJoe Hamman 318fdc7eb90SPaul Gortmaker #ifdef CONFIG_PCI 31911c45ebdSJoe Hamman void 32011c45ebdSJoe Hamman pci_init_board(void) 32111c45ebdSJoe Hamman { 3226d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 323fdc7eb90SPaul Gortmaker struct fsl_pci_info pci_info[2]; 324fdc7eb90SPaul Gortmaker u32 devdisr, pordevsr, porpllsr, io_sel; 325fdc7eb90SPaul Gortmaker int first_free_busno = 0; 326fdc7eb90SPaul Gortmaker int num = 0; 327fdc7eb90SPaul Gortmaker 328fdc7eb90SPaul Gortmaker #ifdef CONFIG_PCIE1 329fdc7eb90SPaul Gortmaker int pcie_configured; 330fdc7eb90SPaul Gortmaker #endif 331fdc7eb90SPaul Gortmaker 332fdc7eb90SPaul Gortmaker devdisr = in_be32(&gur->devdisr); 333fdc7eb90SPaul Gortmaker pordevsr = in_be32(&gur->pordevsr); 334fdc7eb90SPaul Gortmaker porpllsr = in_be32(&gur->porpllsr); 335fdc7eb90SPaul Gortmaker io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19; 336fdc7eb90SPaul Gortmaker 337fdc7eb90SPaul Gortmaker debug(" pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel); 33811c45ebdSJoe Hamman 33911c45ebdSJoe Hamman #ifdef CONFIG_PCI1 340fdc7eb90SPaul Gortmaker if (!(devdisr & MPC85xx_DEVDISR_PCI1)) { 341fdc7eb90SPaul Gortmaker uint pci_32 = pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32; 342fdc7eb90SPaul Gortmaker uint pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB; 343fdc7eb90SPaul Gortmaker uint pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD; 3442c40acd3SPaul Gortmaker uint pci_speed = CONFIG_SYS_CLK_FREQ; /* get_clock_freq() */ 34511c45ebdSJoe Hamman 3468ca78f2cSPeter Tyser printf("PCI: Host, %d bit, %s MHz, %s, %s\n", 34711c45ebdSJoe Hamman (pci_32) ? 32 : 64, 3482c40acd3SPaul Gortmaker (pci_speed == 33000000) ? "33" : 3492c40acd3SPaul Gortmaker (pci_speed == 66000000) ? "66" : "unknown", 35011c45ebdSJoe Hamman pci_clk_sel ? "sync" : "async", 351fdc7eb90SPaul Gortmaker pci_arb ? "arbiter" : "external-arbiter"); 35211c45ebdSJoe Hamman 353fdc7eb90SPaul Gortmaker SET_STD_PCI_INFO(pci_info[num], 1); 354fdc7eb90SPaul Gortmaker first_free_busno = fsl_pci_init_port(&pci_info[num++], 35501471d53SKumar Gala &pci1_hose, first_free_busno); 35611c45ebdSJoe Hamman } else { 35711c45ebdSJoe Hamman printf("PCI: disabled\n"); 35811c45ebdSJoe Hamman } 359fdc7eb90SPaul Gortmaker 360fdc7eb90SPaul Gortmaker puts("\n"); 36111c45ebdSJoe Hamman #else 362fdc7eb90SPaul Gortmaker setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */ 36311c45ebdSJoe Hamman #endif 36411c45ebdSJoe Hamman 365fdc7eb90SPaul Gortmaker setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI2); /* disable PCI2 */ 36611c45ebdSJoe Hamman 36711c45ebdSJoe Hamman #ifdef CONFIG_PCIE1 368*5d27e02cSKumar Gala pcie_configured = is_serdes_configured(PCIE1); 36911c45ebdSJoe Hamman 370fdc7eb90SPaul Gortmaker if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){ 371fdc7eb90SPaul Gortmaker SET_STD_PCIE_INFO(pci_info[num], 1); 3728ca78f2cSPeter Tyser printf("PCIE: base address %lx\n", pci_info[num].regs); 373fdc7eb90SPaul Gortmaker first_free_busno = fsl_pci_init_port(&pci_info[num++], 37401471d53SKumar Gala &pcie1_hose, first_free_busno); 37511c45ebdSJoe Hamman } else { 37611c45ebdSJoe Hamman printf("PCIE: disabled\n"); 37711c45ebdSJoe Hamman } 37811c45ebdSJoe Hamman 379fdc7eb90SPaul Gortmaker puts("\n"); 380fdc7eb90SPaul Gortmaker #else 381fdc7eb90SPaul Gortmaker setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */ 382fdc7eb90SPaul Gortmaker #endif 38311c45ebdSJoe Hamman } 384fdc7eb90SPaul Gortmaker #endif 38511c45ebdSJoe Hamman 38694ca0914SPaul Gortmaker int board_eth_init(bd_t *bis) 38794ca0914SPaul Gortmaker { 38894ca0914SPaul Gortmaker tsec_standard_init(bis); 38994ca0914SPaul Gortmaker pci_eth_init(bis); 39094ca0914SPaul Gortmaker return 0; /* otherwise cpu_eth_init gets run */ 39194ca0914SPaul Gortmaker } 39294ca0914SPaul Gortmaker 39311c45ebdSJoe Hamman int last_stage_init(void) 39411c45ebdSJoe Hamman { 39511c45ebdSJoe Hamman return 0; 39611c45ebdSJoe Hamman } 39711c45ebdSJoe Hamman 39811c45ebdSJoe Hamman #if defined(CONFIG_OF_BOARD_SETUP) 3992dba0deaSKumar Gala void ft_board_setup(void *blob, bd_t *bd) 40011c45ebdSJoe Hamman { 40111c45ebdSJoe Hamman ft_cpu_setup(blob, bd); 4026525d51fSKumar Gala 4036525d51fSKumar Gala #ifdef CONFIG_FSL_PCI_INIT 4046525d51fSKumar Gala FT_FSL_PCI_SETUP; 40511c45ebdSJoe Hamman #endif 40611c45ebdSJoe Hamman } 40711c45ebdSJoe Hamman #endif 408