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> 355d27e02cSKumar 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 4711c45ebdSJoe Hamman int board_early_init_f (void) 4811c45ebdSJoe Hamman { 4911c45ebdSJoe Hamman return 0; 5011c45ebdSJoe Hamman } 5111c45ebdSJoe Hamman 5211c45ebdSJoe Hamman int checkboard (void) 5311c45ebdSJoe Hamman { 546d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_local_ecm_t *ecm = (void *)(CONFIG_SYS_MPC85xx_ECM_ADDR); 556d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile u_char *rev= (void *)CONFIG_SYS_BD_REV; 5611c45ebdSJoe Hamman 5711c45ebdSJoe Hamman printf ("Board: Wind River SBC8548 Rev. 0x%01x\n", 580c7e4d45SPaul Gortmaker in_8(rev) >> 4); 5911c45ebdSJoe Hamman 6011c45ebdSJoe Hamman /* 6111c45ebdSJoe Hamman * Initialize local bus. 6211c45ebdSJoe Hamman */ 6311c45ebdSJoe Hamman local_bus_init (); 6411c45ebdSJoe Hamman 650c7e4d45SPaul Gortmaker out_be32(&ecm->eedr, 0xffffffff); /* clear ecm errors */ 660c7e4d45SPaul Gortmaker out_be32(&ecm->eeer, 0xffffffff); /* enable ecm errors */ 6711c45ebdSJoe Hamman return 0; 6811c45ebdSJoe Hamman } 6911c45ebdSJoe Hamman 7011c45ebdSJoe Hamman /* 7111c45ebdSJoe Hamman * Initialize Local Bus 7211c45ebdSJoe Hamman */ 7311c45ebdSJoe Hamman void 7411c45ebdSJoe Hamman local_bus_init(void) 7511c45ebdSJoe Hamman { 766d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 77f51cdaf1SBecky Bruce volatile fsl_lbc_t *lbc = LBC_BASE_ADDR; 7811c45ebdSJoe Hamman 7911c45ebdSJoe Hamman uint clkdiv; 8011c45ebdSJoe Hamman uint lbc_hz; 8111c45ebdSJoe Hamman sys_info_t sysinfo; 8211c45ebdSJoe Hamman 8311c45ebdSJoe Hamman get_sys_info(&sysinfo); 840c7e4d45SPaul Gortmaker clkdiv = (in_be32(&lbc->lcrr) & LCRR_CLKDIV) * 2; 8511c45ebdSJoe Hamman lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv; 8611c45ebdSJoe Hamman 870c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr1, 0x00078080); 8811c45ebdSJoe Hamman if (clkdiv == 16) { 890c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr0, 0x7c0f1bf0); 9011c45ebdSJoe Hamman } else if (clkdiv == 8) { 910c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr0, 0x6c0f1bf0); 9211c45ebdSJoe Hamman } else if (clkdiv == 4) { 930c7e4d45SPaul Gortmaker out_be32(&gur->lbiuiplldcr0, 0x5c0f1bf0); 9411c45ebdSJoe Hamman } 9511c45ebdSJoe Hamman 960c7e4d45SPaul Gortmaker setbits_be32(&lbc->lcrr, 0x00030000); 9711c45ebdSJoe Hamman 9811c45ebdSJoe Hamman asm("sync;isync;msync"); 9911c45ebdSJoe Hamman 1000c7e4d45SPaul Gortmaker out_be32(&lbc->ltesr, 0xffffffff); /* Clear LBC error IRQs */ 1010c7e4d45SPaul Gortmaker out_be32(&lbc->lteir, 0xffffffff); /* Enable LBC error IRQs */ 10211c45ebdSJoe Hamman } 10311c45ebdSJoe Hamman 10411c45ebdSJoe Hamman /* 10511c45ebdSJoe Hamman * Initialize SDRAM memory on the Local Bus. 10611c45ebdSJoe Hamman */ 10711c45ebdSJoe Hamman void 10811c45ebdSJoe Hamman sdram_init(void) 10911c45ebdSJoe Hamman { 11011d5a629SPaul Gortmaker #if defined(CONFIG_SYS_LBC_SDRAM_SIZE) 11111c45ebdSJoe Hamman 11211c45ebdSJoe Hamman uint idx; 113f51cdaf1SBecky Bruce volatile fsl_lbc_t *lbc = LBC_BASE_ADDR; 1146d0f6bcfSJean-Christophe PLAGNIOL-VILLARD uint *sdram_addr = (uint *)CONFIG_SYS_LBC_SDRAM_BASE; 11511c45ebdSJoe Hamman uint lsdmr_common; 11611c45ebdSJoe Hamman 11711c45ebdSJoe Hamman puts(" SDRAM: "); 11811c45ebdSJoe Hamman 1196d0f6bcfSJean-Christophe PLAGNIOL-VILLARD print_size (CONFIG_SYS_LBC_SDRAM_SIZE * 1024 * 1024, "\n"); 12011c45ebdSJoe Hamman 12111c45ebdSJoe Hamman /* 12211c45ebdSJoe Hamman * Setup SDRAM Base and Option Registers 12311c45ebdSJoe Hamman */ 124f51cdaf1SBecky Bruce set_lbc_or(3, CONFIG_SYS_OR3_PRELIM); 125f51cdaf1SBecky Bruce set_lbc_br(3, CONFIG_SYS_BR3_PRELIM); 126f51cdaf1SBecky Bruce set_lbc_or(4, CONFIG_SYS_OR4_PRELIM); 127f51cdaf1SBecky Bruce set_lbc_br(4, CONFIG_SYS_BR4_PRELIM); 12811d5a629SPaul Gortmaker 1290c7e4d45SPaul Gortmaker out_be32(&lbc->lbcr, CONFIG_SYS_LBC_LBCR); 13011c45ebdSJoe Hamman asm("msync"); 13111c45ebdSJoe Hamman 1320c7e4d45SPaul Gortmaker out_be32(&lbc->lsrt, CONFIG_SYS_LBC_LSRT); 1330c7e4d45SPaul Gortmaker out_be32(&lbc->mrtpr, CONFIG_SYS_LBC_MRTPR); 13411c45ebdSJoe Hamman asm("msync"); 13511c45ebdSJoe Hamman 13611c45ebdSJoe Hamman /* 13711c45ebdSJoe Hamman * MPC8548 uses "new" 15-16 style addressing. 13811c45ebdSJoe Hamman */ 1396d0f6bcfSJean-Christophe PLAGNIOL-VILLARD lsdmr_common = CONFIG_SYS_LBC_LSDMR_COMMON; 140b0fe93edSKumar Gala lsdmr_common |= LSDMR_BSMA1516; 14111c45ebdSJoe Hamman 14211c45ebdSJoe Hamman /* 14311c45ebdSJoe Hamman * Issue PRECHARGE ALL command. 14411c45ebdSJoe Hamman */ 1450c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_PCHALL); 14611c45ebdSJoe Hamman asm("sync;msync"); 14711c45ebdSJoe Hamman *sdram_addr = 0xff; 14811c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 14911c45ebdSJoe Hamman udelay(100); 15011c45ebdSJoe Hamman 15111c45ebdSJoe Hamman /* 15211c45ebdSJoe Hamman * Issue 8 AUTO REFRESH commands. 15311c45ebdSJoe Hamman */ 15411c45ebdSJoe Hamman for (idx = 0; idx < 8; idx++) { 1550c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_ARFRSH); 15611c45ebdSJoe Hamman asm("sync;msync"); 15711c45ebdSJoe Hamman *sdram_addr = 0xff; 15811c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 15911c45ebdSJoe Hamman udelay(100); 16011c45ebdSJoe Hamman } 16111c45ebdSJoe Hamman 16211c45ebdSJoe Hamman /* 16311c45ebdSJoe Hamman * Issue 8 MODE-set command. 16411c45ebdSJoe Hamman */ 1650c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_MRW); 16611c45ebdSJoe Hamman asm("sync;msync"); 16711c45ebdSJoe Hamman *sdram_addr = 0xff; 16811c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 16911c45ebdSJoe Hamman udelay(100); 17011c45ebdSJoe Hamman 17111c45ebdSJoe Hamman /* 17211c45ebdSJoe Hamman * Issue NORMAL OP command. 17311c45ebdSJoe Hamman */ 1740c7e4d45SPaul Gortmaker out_be32(&lbc->lsdmr, lsdmr_common | LSDMR_OP_NORMAL); 17511c45ebdSJoe Hamman asm("sync;msync"); 17611c45ebdSJoe Hamman *sdram_addr = 0xff; 17711c45ebdSJoe Hamman ppcDcbf((unsigned long) sdram_addr); 17811c45ebdSJoe Hamman udelay(200); /* Overkill. Must wait > 200 bus cycles */ 17911c45ebdSJoe Hamman 18011c45ebdSJoe Hamman #endif /* enable SDRAM init */ 18111c45ebdSJoe Hamman } 18211c45ebdSJoe Hamman 1836d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #if defined(CONFIG_SYS_DRAM_TEST) 18411c45ebdSJoe Hamman int 18511c45ebdSJoe Hamman testdram(void) 18611c45ebdSJoe Hamman { 1876d0f6bcfSJean-Christophe PLAGNIOL-VILLARD uint *pstart = (uint *) CONFIG_SYS_MEMTEST_START; 1886d0f6bcfSJean-Christophe PLAGNIOL-VILLARD uint *pend = (uint *) CONFIG_SYS_MEMTEST_END; 18911c45ebdSJoe Hamman uint *p; 19011c45ebdSJoe Hamman 19111c45ebdSJoe Hamman printf("Testing DRAM from 0x%08x to 0x%08x\n", 1926d0f6bcfSJean-Christophe PLAGNIOL-VILLARD CONFIG_SYS_MEMTEST_START, 1936d0f6bcfSJean-Christophe PLAGNIOL-VILLARD CONFIG_SYS_MEMTEST_END); 19411c45ebdSJoe Hamman 19511c45ebdSJoe Hamman printf("DRAM test phase 1:\n"); 19611c45ebdSJoe Hamman for (p = pstart; p < pend; p++) 19711c45ebdSJoe Hamman *p = 0xaaaaaaaa; 19811c45ebdSJoe Hamman 19911c45ebdSJoe Hamman for (p = pstart; p < pend; p++) { 20011c45ebdSJoe Hamman if (*p != 0xaaaaaaaa) { 20111c45ebdSJoe Hamman printf ("DRAM test fails at: %08x\n", (uint) p); 20211c45ebdSJoe Hamman return 1; 20311c45ebdSJoe Hamman } 20411c45ebdSJoe Hamman } 20511c45ebdSJoe Hamman 20611c45ebdSJoe Hamman printf("DRAM test phase 2:\n"); 20711c45ebdSJoe Hamman for (p = pstart; p < pend; p++) 20811c45ebdSJoe Hamman *p = 0x55555555; 20911c45ebdSJoe Hamman 21011c45ebdSJoe Hamman for (p = pstart; p < pend; p++) { 21111c45ebdSJoe Hamman if (*p != 0x55555555) { 21211c45ebdSJoe Hamman printf ("DRAM test fails at: %08x\n", (uint) p); 21311c45ebdSJoe Hamman return 1; 21411c45ebdSJoe Hamman } 21511c45ebdSJoe Hamman } 21611c45ebdSJoe Hamman 21711c45ebdSJoe Hamman printf("DRAM test passed.\n"); 21811c45ebdSJoe Hamman return 0; 21911c45ebdSJoe Hamman } 22011c45ebdSJoe Hamman #endif 22111c45ebdSJoe Hamman 22211c45ebdSJoe Hamman #if !defined(CONFIG_SPD_EEPROM) 2230c7e4d45SPaul Gortmaker #define CONFIG_SYS_DDR_CONTROL 0xc300c000 22411c45ebdSJoe Hamman /************************************************************************* 22511c45ebdSJoe Hamman * fixed_sdram init -- doesn't use serial presence detect. 22611c45ebdSJoe Hamman * assumes 256MB DDR2 SDRAM SODIMM, without ECC, running at DDR400 speed. 22711c45ebdSJoe Hamman ************************************************************************/ 228*38dba0c2SBecky Bruce phys_size_t fixed_sdram(void) 22911c45ebdSJoe Hamman { 2306d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_ddr_t *ddr = (void *)(CONFIG_SYS_MPC85xx_DDR_ADDR); 23111c45ebdSJoe Hamman 2320c7e4d45SPaul Gortmaker out_be32(&ddr->cs0_bnds, 0x0000007f); 2330c7e4d45SPaul Gortmaker out_be32(&ddr->cs1_bnds, 0x008000ff); 2340c7e4d45SPaul Gortmaker out_be32(&ddr->cs2_bnds, 0x00000000); 2350c7e4d45SPaul Gortmaker out_be32(&ddr->cs3_bnds, 0x00000000); 2360c7e4d45SPaul Gortmaker out_be32(&ddr->cs0_config, 0x80010101); 2370c7e4d45SPaul Gortmaker out_be32(&ddr->cs1_config, 0x80010101); 2380c7e4d45SPaul Gortmaker out_be32(&ddr->cs2_config, 0x00000000); 2390c7e4d45SPaul Gortmaker out_be32(&ddr->cs3_config, 0x00000000); 2400c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_3, 0x00000000); 2410c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_0, 0x00220802); 2420c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_1, 0x38377322); 2430c7e4d45SPaul Gortmaker out_be32(&ddr->timing_cfg_2, 0x0fa044C7); 2440c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg, 0x4300C000); 2450c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg_2, 0x24401000); 2460c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_mode, 0x23C00542); 2470c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_mode_2, 0x00000000); 2480c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_interval, 0x05080100); 2490c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_md_cntl, 0x00000000); 2500c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_data_init, 0x00000000); 2510c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_clk_cntl, 0x03800000); 25211c45ebdSJoe Hamman asm("sync;isync;msync"); 25311c45ebdSJoe Hamman udelay(500); 25411c45ebdSJoe Hamman 25511c45ebdSJoe Hamman #if defined (CONFIG_DDR_ECC) 25611c45ebdSJoe Hamman /* Enable ECC checking */ 2570c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL | 0x20000000); 25811c45ebdSJoe Hamman #else 2590c7e4d45SPaul Gortmaker out_be32(&ddr->sdram_cfg, CONFIG_SYS_DDR_CONTROL); 26011c45ebdSJoe Hamman #endif 26111c45ebdSJoe Hamman 2626d0f6bcfSJean-Christophe PLAGNIOL-VILLARD return CONFIG_SYS_SDRAM_SIZE * 1024 * 1024; 26311c45ebdSJoe Hamman } 26411c45ebdSJoe Hamman #endif 26511c45ebdSJoe Hamman 2667b1f1399SPaul Gortmaker #ifdef CONFIG_PCI1 2677b1f1399SPaul Gortmaker static struct pci_controller pci1_hose; 2687b1f1399SPaul Gortmaker #endif /* CONFIG_PCI1 */ 26911c45ebdSJoe Hamman 27011c45ebdSJoe Hamman #ifdef CONFIG_PCIE1 27111c45ebdSJoe Hamman static struct pci_controller pcie1_hose; 27211c45ebdSJoe Hamman #endif /* CONFIG_PCIE1 */ 27311c45ebdSJoe Hamman 27411c45ebdSJoe Hamman 275fdc7eb90SPaul Gortmaker #ifdef CONFIG_PCI 27611c45ebdSJoe Hamman void 27711c45ebdSJoe Hamman pci_init_board(void) 27811c45ebdSJoe Hamman { 2796d0f6bcfSJean-Christophe PLAGNIOL-VILLARD volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); 280fdc7eb90SPaul Gortmaker struct fsl_pci_info pci_info[2]; 281fdc7eb90SPaul Gortmaker u32 devdisr, pordevsr, porpllsr, io_sel; 282fdc7eb90SPaul Gortmaker int first_free_busno = 0; 283fdc7eb90SPaul Gortmaker int num = 0; 284fdc7eb90SPaul Gortmaker 285fdc7eb90SPaul Gortmaker #ifdef CONFIG_PCIE1 286fdc7eb90SPaul Gortmaker int pcie_configured; 287fdc7eb90SPaul Gortmaker #endif 288fdc7eb90SPaul Gortmaker 289fdc7eb90SPaul Gortmaker devdisr = in_be32(&gur->devdisr); 290fdc7eb90SPaul Gortmaker pordevsr = in_be32(&gur->pordevsr); 291fdc7eb90SPaul Gortmaker porpllsr = in_be32(&gur->porpllsr); 292fdc7eb90SPaul Gortmaker io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19; 293fdc7eb90SPaul Gortmaker 294fdc7eb90SPaul Gortmaker debug(" pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel); 29511c45ebdSJoe Hamman 29611c45ebdSJoe Hamman #ifdef CONFIG_PCI1 297fdc7eb90SPaul Gortmaker if (!(devdisr & MPC85xx_DEVDISR_PCI1)) { 298fdc7eb90SPaul Gortmaker uint pci_32 = pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32; 299fdc7eb90SPaul Gortmaker uint pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB; 300fdc7eb90SPaul Gortmaker uint pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD; 3012c40acd3SPaul Gortmaker uint pci_speed = CONFIG_SYS_CLK_FREQ; /* get_clock_freq() */ 30211c45ebdSJoe Hamman 3038ca78f2cSPeter Tyser printf("PCI: Host, %d bit, %s MHz, %s, %s\n", 30411c45ebdSJoe Hamman (pci_32) ? 32 : 64, 3052c40acd3SPaul Gortmaker (pci_speed == 33000000) ? "33" : 3062c40acd3SPaul Gortmaker (pci_speed == 66000000) ? "66" : "unknown", 30711c45ebdSJoe Hamman pci_clk_sel ? "sync" : "async", 308fdc7eb90SPaul Gortmaker pci_arb ? "arbiter" : "external-arbiter"); 30911c45ebdSJoe Hamman 310fdc7eb90SPaul Gortmaker SET_STD_PCI_INFO(pci_info[num], 1); 311fdc7eb90SPaul Gortmaker first_free_busno = fsl_pci_init_port(&pci_info[num++], 31201471d53SKumar Gala &pci1_hose, first_free_busno); 31311c45ebdSJoe Hamman } else { 31411c45ebdSJoe Hamman printf("PCI: disabled\n"); 31511c45ebdSJoe Hamman } 316fdc7eb90SPaul Gortmaker 317fdc7eb90SPaul Gortmaker puts("\n"); 31811c45ebdSJoe Hamman #else 319fdc7eb90SPaul Gortmaker setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */ 32011c45ebdSJoe Hamman #endif 32111c45ebdSJoe Hamman 322fdc7eb90SPaul Gortmaker setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI2); /* disable PCI2 */ 32311c45ebdSJoe Hamman 32411c45ebdSJoe Hamman #ifdef CONFIG_PCIE1 3255d27e02cSKumar Gala pcie_configured = is_serdes_configured(PCIE1); 32611c45ebdSJoe Hamman 327fdc7eb90SPaul Gortmaker if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){ 328fdc7eb90SPaul Gortmaker SET_STD_PCIE_INFO(pci_info[num], 1); 3298ca78f2cSPeter Tyser printf("PCIE: base address %lx\n", pci_info[num].regs); 330fdc7eb90SPaul Gortmaker first_free_busno = fsl_pci_init_port(&pci_info[num++], 33101471d53SKumar Gala &pcie1_hose, first_free_busno); 33211c45ebdSJoe Hamman } else { 33311c45ebdSJoe Hamman printf("PCIE: disabled\n"); 33411c45ebdSJoe Hamman } 33511c45ebdSJoe Hamman 336fdc7eb90SPaul Gortmaker puts("\n"); 337fdc7eb90SPaul Gortmaker #else 338fdc7eb90SPaul Gortmaker setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */ 339fdc7eb90SPaul Gortmaker #endif 34011c45ebdSJoe Hamman } 341fdc7eb90SPaul Gortmaker #endif 34211c45ebdSJoe Hamman 34394ca0914SPaul Gortmaker int board_eth_init(bd_t *bis) 34494ca0914SPaul Gortmaker { 34594ca0914SPaul Gortmaker tsec_standard_init(bis); 34694ca0914SPaul Gortmaker pci_eth_init(bis); 34794ca0914SPaul Gortmaker return 0; /* otherwise cpu_eth_init gets run */ 34894ca0914SPaul Gortmaker } 34994ca0914SPaul Gortmaker 35011c45ebdSJoe Hamman int last_stage_init(void) 35111c45ebdSJoe Hamman { 35211c45ebdSJoe Hamman return 0; 35311c45ebdSJoe Hamman } 35411c45ebdSJoe Hamman 35511c45ebdSJoe Hamman #if defined(CONFIG_OF_BOARD_SETUP) 3562dba0deaSKumar Gala void ft_board_setup(void *blob, bd_t *bd) 35711c45ebdSJoe Hamman { 35811c45ebdSJoe Hamman ft_cpu_setup(blob, bd); 3596525d51fSKumar Gala 3606525d51fSKumar Gala #ifdef CONFIG_FSL_PCI_INIT 3616525d51fSKumar Gala FT_FSL_PCI_SETUP; 36211c45ebdSJoe Hamman #endif 36311c45ebdSJoe Hamman } 36411c45ebdSJoe Hamman #endif 365