1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2010 Freescale Semiconductor, Inc. 4 * Copyright (C) 2010 Ilya Yanok, Emcraft Systems, yanok@emcraft.com 5 */ 6 7 #include <common.h> 8 #include <i2c.h> 9 #include <linux/libfdt.h> 10 #include <fdt_support.h> 11 #include <pci.h> 12 #include <mpc83xx.h> 13 #include <netdev.h> 14 #include <asm/io.h> 15 #include <asm/fsl_serdes.h> 16 #include <asm/fsl_mpc83xx_serdes.h> 17 18 int checkboard(void) 19 { 20 printf("Board: MPC8308 P1M\n"); 21 22 return 0; 23 } 24 25 static struct pci_region pcie_regions_0[] = { 26 { 27 .bus_start = CONFIG_SYS_PCIE1_MEM_BASE, 28 .phys_start = CONFIG_SYS_PCIE1_MEM_PHYS, 29 .size = CONFIG_SYS_PCIE1_MEM_SIZE, 30 .flags = PCI_REGION_MEM, 31 }, 32 { 33 .bus_start = CONFIG_SYS_PCIE1_IO_BASE, 34 .phys_start = CONFIG_SYS_PCIE1_IO_PHYS, 35 .size = CONFIG_SYS_PCIE1_IO_SIZE, 36 .flags = PCI_REGION_IO, 37 }, 38 }; 39 40 void pci_init_board(void) 41 { 42 immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; 43 sysconf83xx_t *sysconf = &immr->sysconf; 44 law83xx_t *pcie_law = sysconf->pcielaw; 45 struct pci_region *pcie_reg[] = { pcie_regions_0 }; 46 47 fsl_setup_serdes(CONFIG_FSL_SERDES1, FSL_SERDES_PROTO_PEX, 48 FSL_SERDES_CLK_100, FSL_SERDES_VDD_1V); 49 50 /* Deassert the resets in the control register */ 51 out_be32(&sysconf->pecr1, 0xE0008000); 52 udelay(2000); 53 54 /* Configure PCI Express Local Access Windows */ 55 out_be32(&pcie_law[0].bar, CONFIG_SYS_PCIE1_BASE & LAWBAR_BAR); 56 out_be32(&pcie_law[0].ar, LBLAWAR_EN | LBLAWAR_512MB); 57 58 mpc83xx_pcie_init(1, pcie_reg); 59 } 60 61 #if defined(CONFIG_OF_BOARD_SETUP) 62 int ft_board_setup(void *blob, bd_t *bd) 63 { 64 ft_cpu_setup(blob, bd); 65 fsl_fdt_fixup_dr_usb(blob, bd); 66 67 return 0; 68 } 69 #endif 70 71 int board_eth_init(bd_t *bis) 72 { 73 int rv, num_if = 0; 74 75 /* Initialize TSECs first */ 76 rv = cpu_eth_init(bis); 77 if (rv >= 0) 78 num_if += rv; 79 else 80 printf("ERROR: failed to initialize TSECs.\n"); 81 82 rv = pci_eth_init(bis); 83 if (rv >= 0) 84 num_if += rv; 85 else 86 printf("ERROR: failed to initialize PCI Ethernet.\n"); 87 88 return num_if; 89 } 90