18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2006-2010, 2012-2013 Freescale Semiconductor, Inc. 48c2ecf20Sopenharmony_ci * All rights reserved. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * Author: Andy Fleming <afleming@freescale.com> 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * Based on 83xx/mpc8360e_pb.c by: 98c2ecf20Sopenharmony_ci * Li Yang <LeoLi@freescale.com> 108c2ecf20Sopenharmony_ci * Yin Olivia <Hong-hua.Yin@freescale.com> 118c2ecf20Sopenharmony_ci * 128c2ecf20Sopenharmony_ci * Description: 138c2ecf20Sopenharmony_ci * MPC85xx MDS board specific routines. 148c2ecf20Sopenharmony_ci */ 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include <linux/stddef.h> 178c2ecf20Sopenharmony_ci#include <linux/kernel.h> 188c2ecf20Sopenharmony_ci#include <linux/init.h> 198c2ecf20Sopenharmony_ci#include <linux/errno.h> 208c2ecf20Sopenharmony_ci#include <linux/reboot.h> 218c2ecf20Sopenharmony_ci#include <linux/pci.h> 228c2ecf20Sopenharmony_ci#include <linux/kdev_t.h> 238c2ecf20Sopenharmony_ci#include <linux/major.h> 248c2ecf20Sopenharmony_ci#include <linux/console.h> 258c2ecf20Sopenharmony_ci#include <linux/delay.h> 268c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 278c2ecf20Sopenharmony_ci#include <linux/initrd.h> 288c2ecf20Sopenharmony_ci#include <linux/fsl_devices.h> 298c2ecf20Sopenharmony_ci#include <linux/of_platform.h> 308c2ecf20Sopenharmony_ci#include <linux/of_device.h> 318c2ecf20Sopenharmony_ci#include <linux/phy.h> 328c2ecf20Sopenharmony_ci#include <linux/memblock.h> 338c2ecf20Sopenharmony_ci#include <linux/fsl/guts.h> 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci#include <linux/atomic.h> 368c2ecf20Sopenharmony_ci#include <asm/time.h> 378c2ecf20Sopenharmony_ci#include <asm/io.h> 388c2ecf20Sopenharmony_ci#include <asm/machdep.h> 398c2ecf20Sopenharmony_ci#include <asm/pci-bridge.h> 408c2ecf20Sopenharmony_ci#include <asm/irq.h> 418c2ecf20Sopenharmony_ci#include <mm/mmu_decl.h> 428c2ecf20Sopenharmony_ci#include <asm/prom.h> 438c2ecf20Sopenharmony_ci#include <asm/udbg.h> 448c2ecf20Sopenharmony_ci#include <sysdev/fsl_soc.h> 458c2ecf20Sopenharmony_ci#include <sysdev/fsl_pci.h> 468c2ecf20Sopenharmony_ci#include <soc/fsl/qe/qe.h> 478c2ecf20Sopenharmony_ci#include <asm/mpic.h> 488c2ecf20Sopenharmony_ci#include <asm/swiotlb.h> 498c2ecf20Sopenharmony_ci#include "smp.h" 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#include "mpc85xx.h" 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci#undef DEBUG 548c2ecf20Sopenharmony_ci#ifdef DEBUG 558c2ecf20Sopenharmony_ci#define DBG(fmt...) udbg_printf(fmt) 568c2ecf20Sopenharmony_ci#else 578c2ecf20Sopenharmony_ci#define DBG(fmt...) 588c2ecf20Sopenharmony_ci#endif 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci#if IS_BUILTIN(CONFIG_PHYLIB) 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci#define MV88E1111_SCR 0x10 638c2ecf20Sopenharmony_ci#define MV88E1111_SCR_125CLK 0x0010 648c2ecf20Sopenharmony_cistatic int mpc8568_fixup_125_clock(struct phy_device *phydev) 658c2ecf20Sopenharmony_ci{ 668c2ecf20Sopenharmony_ci int scr; 678c2ecf20Sopenharmony_ci int err; 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci /* Workaround for the 125 CLK Toggle */ 708c2ecf20Sopenharmony_ci scr = phy_read(phydev, MV88E1111_SCR); 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci if (scr < 0) 738c2ecf20Sopenharmony_ci return scr; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci err = phy_write(phydev, MV88E1111_SCR, scr & ~(MV88E1111_SCR_125CLK)); 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci if (err) 788c2ecf20Sopenharmony_ci return err; 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci err = phy_write(phydev, MII_BMCR, BMCR_RESET); 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci if (err) 838c2ecf20Sopenharmony_ci return err; 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ci scr = phy_read(phydev, MV88E1111_SCR); 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci if (scr < 0) 888c2ecf20Sopenharmony_ci return scr; 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci err = phy_write(phydev, MV88E1111_SCR, scr | 0x0008); 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci return err; 938c2ecf20Sopenharmony_ci} 948c2ecf20Sopenharmony_ci 958c2ecf20Sopenharmony_cistatic int mpc8568_mds_phy_fixups(struct phy_device *phydev) 968c2ecf20Sopenharmony_ci{ 978c2ecf20Sopenharmony_ci int temp; 988c2ecf20Sopenharmony_ci int err; 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ci /* Errata */ 1018c2ecf20Sopenharmony_ci err = phy_write(phydev,29, 0x0006); 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci if (err) 1048c2ecf20Sopenharmony_ci return err; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci temp = phy_read(phydev, 30); 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci if (temp < 0) 1098c2ecf20Sopenharmony_ci return temp; 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ci temp = (temp & (~0x8000)) | 0x4000; 1128c2ecf20Sopenharmony_ci err = phy_write(phydev,30, temp); 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_ci if (err) 1158c2ecf20Sopenharmony_ci return err; 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci err = phy_write(phydev,29, 0x000a); 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci if (err) 1208c2ecf20Sopenharmony_ci return err; 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_ci temp = phy_read(phydev, 30); 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_ci if (temp < 0) 1258c2ecf20Sopenharmony_ci return temp; 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci temp = phy_read(phydev, 30); 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci if (temp < 0) 1308c2ecf20Sopenharmony_ci return temp; 1318c2ecf20Sopenharmony_ci 1328c2ecf20Sopenharmony_ci temp &= ~0x0020; 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci err = phy_write(phydev,30,temp); 1358c2ecf20Sopenharmony_ci 1368c2ecf20Sopenharmony_ci if (err) 1378c2ecf20Sopenharmony_ci return err; 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_ci /* Disable automatic MDI/MDIX selection */ 1408c2ecf20Sopenharmony_ci temp = phy_read(phydev, 16); 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_ci if (temp < 0) 1438c2ecf20Sopenharmony_ci return temp; 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_ci temp &= ~0x0060; 1468c2ecf20Sopenharmony_ci err = phy_write(phydev,16,temp); 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_ci return err; 1498c2ecf20Sopenharmony_ci} 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci#endif 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci/* ************************************************************************ 1548c2ecf20Sopenharmony_ci * 1558c2ecf20Sopenharmony_ci * Setup the architecture 1568c2ecf20Sopenharmony_ci * 1578c2ecf20Sopenharmony_ci */ 1588c2ecf20Sopenharmony_ci#ifdef CONFIG_QUICC_ENGINE 1598c2ecf20Sopenharmony_cistatic void __init mpc85xx_mds_reset_ucc_phys(void) 1608c2ecf20Sopenharmony_ci{ 1618c2ecf20Sopenharmony_ci struct device_node *np; 1628c2ecf20Sopenharmony_ci static u8 __iomem *bcsr_regs; 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_ci /* Map BCSR area */ 1658c2ecf20Sopenharmony_ci np = of_find_node_by_name(NULL, "bcsr"); 1668c2ecf20Sopenharmony_ci if (!np) 1678c2ecf20Sopenharmony_ci return; 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci bcsr_regs = of_iomap(np, 0); 1708c2ecf20Sopenharmony_ci of_node_put(np); 1718c2ecf20Sopenharmony_ci if (!bcsr_regs) 1728c2ecf20Sopenharmony_ci return; 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci if (machine_is(mpc8568_mds)) { 1758c2ecf20Sopenharmony_ci#define BCSR_UCC1_GETH_EN (0x1 << 7) 1768c2ecf20Sopenharmony_ci#define BCSR_UCC2_GETH_EN (0x1 << 7) 1778c2ecf20Sopenharmony_ci#define BCSR_UCC1_MODE_MSK (0x3 << 4) 1788c2ecf20Sopenharmony_ci#define BCSR_UCC2_MODE_MSK (0x3 << 0) 1798c2ecf20Sopenharmony_ci 1808c2ecf20Sopenharmony_ci /* Turn off UCC1 & UCC2 */ 1818c2ecf20Sopenharmony_ci clrbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); 1828c2ecf20Sopenharmony_ci clrbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci /* Mode is RGMII, all bits clear */ 1858c2ecf20Sopenharmony_ci clrbits8(&bcsr_regs[11], BCSR_UCC1_MODE_MSK | 1868c2ecf20Sopenharmony_ci BCSR_UCC2_MODE_MSK); 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci /* Turn UCC1 & UCC2 on */ 1898c2ecf20Sopenharmony_ci setbits8(&bcsr_regs[8], BCSR_UCC1_GETH_EN); 1908c2ecf20Sopenharmony_ci setbits8(&bcsr_regs[9], BCSR_UCC2_GETH_EN); 1918c2ecf20Sopenharmony_ci } else if (machine_is(mpc8569_mds)) { 1928c2ecf20Sopenharmony_ci#define BCSR7_UCC12_GETHnRST (0x1 << 2) 1938c2ecf20Sopenharmony_ci#define BCSR8_UEM_MARVELL_RST (0x1 << 1) 1948c2ecf20Sopenharmony_ci#define BCSR_UCC_RGMII (0x1 << 6) 1958c2ecf20Sopenharmony_ci#define BCSR_UCC_RTBI (0x1 << 5) 1968c2ecf20Sopenharmony_ci /* 1978c2ecf20Sopenharmony_ci * U-Boot mangles interrupt polarity for Marvell PHYs, 1988c2ecf20Sopenharmony_ci * so reset built-in and UEM Marvell PHYs, this puts 1998c2ecf20Sopenharmony_ci * the PHYs into their normal state. 2008c2ecf20Sopenharmony_ci */ 2018c2ecf20Sopenharmony_ci clrbits8(&bcsr_regs[7], BCSR7_UCC12_GETHnRST); 2028c2ecf20Sopenharmony_ci setbits8(&bcsr_regs[8], BCSR8_UEM_MARVELL_RST); 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci setbits8(&bcsr_regs[7], BCSR7_UCC12_GETHnRST); 2058c2ecf20Sopenharmony_ci clrbits8(&bcsr_regs[8], BCSR8_UEM_MARVELL_RST); 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ci for_each_compatible_node(np, "network", "ucc_geth") { 2088c2ecf20Sopenharmony_ci const unsigned int *prop; 2098c2ecf20Sopenharmony_ci int ucc_num; 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ci prop = of_get_property(np, "cell-index", NULL); 2128c2ecf20Sopenharmony_ci if (prop == NULL) 2138c2ecf20Sopenharmony_ci continue; 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ci ucc_num = *prop - 1; 2168c2ecf20Sopenharmony_ci 2178c2ecf20Sopenharmony_ci prop = of_get_property(np, "phy-connection-type", NULL); 2188c2ecf20Sopenharmony_ci if (prop == NULL) 2198c2ecf20Sopenharmony_ci continue; 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_ci if (strcmp("rtbi", (const char *)prop) == 0) 2228c2ecf20Sopenharmony_ci clrsetbits_8(&bcsr_regs[7 + ucc_num], 2238c2ecf20Sopenharmony_ci BCSR_UCC_RGMII, BCSR_UCC_RTBI); 2248c2ecf20Sopenharmony_ci } 2258c2ecf20Sopenharmony_ci } else if (machine_is(p1021_mds)) { 2268c2ecf20Sopenharmony_ci#define BCSR11_ENET_MICRST (0x1 << 5) 2278c2ecf20Sopenharmony_ci /* Reset Micrel PHY */ 2288c2ecf20Sopenharmony_ci clrbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); 2298c2ecf20Sopenharmony_ci setbits8(&bcsr_regs[11], BCSR11_ENET_MICRST); 2308c2ecf20Sopenharmony_ci } 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_ci iounmap(bcsr_regs); 2338c2ecf20Sopenharmony_ci} 2348c2ecf20Sopenharmony_ci 2358c2ecf20Sopenharmony_cistatic void __init mpc85xx_mds_qe_init(void) 2368c2ecf20Sopenharmony_ci{ 2378c2ecf20Sopenharmony_ci struct device_node *np; 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_ci mpc85xx_qe_par_io_init(); 2408c2ecf20Sopenharmony_ci mpc85xx_mds_reset_ucc_phys(); 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_ci if (machine_is(p1021_mds)) { 2438c2ecf20Sopenharmony_ci 2448c2ecf20Sopenharmony_ci struct ccsr_guts __iomem *guts; 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci np = of_find_node_by_name(NULL, "global-utilities"); 2478c2ecf20Sopenharmony_ci if (np) { 2488c2ecf20Sopenharmony_ci guts = of_iomap(np, 0); 2498c2ecf20Sopenharmony_ci if (!guts) 2508c2ecf20Sopenharmony_ci pr_err("mpc85xx-rdb: could not map global utilities register\n"); 2518c2ecf20Sopenharmony_ci else{ 2528c2ecf20Sopenharmony_ci /* P1021 has pins muxed for QE and other functions. To 2538c2ecf20Sopenharmony_ci * enable QE UEC mode, we need to set bit QE0 for UCC1 2548c2ecf20Sopenharmony_ci * in Eth mode, QE0 and QE3 for UCC5 in Eth mode, QE9 2558c2ecf20Sopenharmony_ci * and QE12 for QE MII management signals in PMUXCR 2568c2ecf20Sopenharmony_ci * register. 2578c2ecf20Sopenharmony_ci */ 2588c2ecf20Sopenharmony_ci setbits32(&guts->pmuxcr, MPC85xx_PMUXCR_QE(0) | 2598c2ecf20Sopenharmony_ci MPC85xx_PMUXCR_QE(3) | 2608c2ecf20Sopenharmony_ci MPC85xx_PMUXCR_QE(9) | 2618c2ecf20Sopenharmony_ci MPC85xx_PMUXCR_QE(12)); 2628c2ecf20Sopenharmony_ci iounmap(guts); 2638c2ecf20Sopenharmony_ci } 2648c2ecf20Sopenharmony_ci of_node_put(np); 2658c2ecf20Sopenharmony_ci } 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci } 2688c2ecf20Sopenharmony_ci} 2698c2ecf20Sopenharmony_ci 2708c2ecf20Sopenharmony_ci#else 2718c2ecf20Sopenharmony_cistatic void __init mpc85xx_mds_qe_init(void) { } 2728c2ecf20Sopenharmony_ci#endif /* CONFIG_QUICC_ENGINE */ 2738c2ecf20Sopenharmony_ci 2748c2ecf20Sopenharmony_cistatic void __init mpc85xx_mds_setup_arch(void) 2758c2ecf20Sopenharmony_ci{ 2768c2ecf20Sopenharmony_ci if (ppc_md.progress) 2778c2ecf20Sopenharmony_ci ppc_md.progress("mpc85xx_mds_setup_arch()", 0); 2788c2ecf20Sopenharmony_ci 2798c2ecf20Sopenharmony_ci mpc85xx_smp_init(); 2808c2ecf20Sopenharmony_ci 2818c2ecf20Sopenharmony_ci mpc85xx_mds_qe_init(); 2828c2ecf20Sopenharmony_ci 2838c2ecf20Sopenharmony_ci fsl_pci_assign_primary(); 2848c2ecf20Sopenharmony_ci 2858c2ecf20Sopenharmony_ci swiotlb_detect_4g(); 2868c2ecf20Sopenharmony_ci} 2878c2ecf20Sopenharmony_ci 2888c2ecf20Sopenharmony_ci#if IS_BUILTIN(CONFIG_PHYLIB) 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_cistatic int __init board_fixups(void) 2918c2ecf20Sopenharmony_ci{ 2928c2ecf20Sopenharmony_ci char phy_id[20]; 2938c2ecf20Sopenharmony_ci char *compstrs[2] = {"fsl,gianfar-mdio", "fsl,ucc-mdio"}; 2948c2ecf20Sopenharmony_ci struct device_node *mdio; 2958c2ecf20Sopenharmony_ci struct resource res; 2968c2ecf20Sopenharmony_ci int i; 2978c2ecf20Sopenharmony_ci 2988c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(compstrs); i++) { 2998c2ecf20Sopenharmony_ci mdio = of_find_compatible_node(NULL, NULL, compstrs[i]); 3008c2ecf20Sopenharmony_ci 3018c2ecf20Sopenharmony_ci of_address_to_resource(mdio, 0, &res); 3028c2ecf20Sopenharmony_ci snprintf(phy_id, sizeof(phy_id), "%llx:%02x", 3038c2ecf20Sopenharmony_ci (unsigned long long)res.start, 1); 3048c2ecf20Sopenharmony_ci 3058c2ecf20Sopenharmony_ci phy_register_fixup_for_id(phy_id, mpc8568_fixup_125_clock); 3068c2ecf20Sopenharmony_ci phy_register_fixup_for_id(phy_id, mpc8568_mds_phy_fixups); 3078c2ecf20Sopenharmony_ci 3088c2ecf20Sopenharmony_ci /* Register a workaround for errata */ 3098c2ecf20Sopenharmony_ci snprintf(phy_id, sizeof(phy_id), "%llx:%02x", 3108c2ecf20Sopenharmony_ci (unsigned long long)res.start, 7); 3118c2ecf20Sopenharmony_ci phy_register_fixup_for_id(phy_id, mpc8568_mds_phy_fixups); 3128c2ecf20Sopenharmony_ci 3138c2ecf20Sopenharmony_ci of_node_put(mdio); 3148c2ecf20Sopenharmony_ci } 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_ci return 0; 3178c2ecf20Sopenharmony_ci} 3188c2ecf20Sopenharmony_ci 3198c2ecf20Sopenharmony_cimachine_arch_initcall(mpc8568_mds, board_fixups); 3208c2ecf20Sopenharmony_cimachine_arch_initcall(mpc8569_mds, board_fixups); 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_ci#endif 3238c2ecf20Sopenharmony_ci 3248c2ecf20Sopenharmony_cistatic int __init mpc85xx_publish_devices(void) 3258c2ecf20Sopenharmony_ci{ 3268c2ecf20Sopenharmony_ci return mpc85xx_common_publish_devices(); 3278c2ecf20Sopenharmony_ci} 3288c2ecf20Sopenharmony_ci 3298c2ecf20Sopenharmony_cimachine_arch_initcall(mpc8568_mds, mpc85xx_publish_devices); 3308c2ecf20Sopenharmony_cimachine_arch_initcall(mpc8569_mds, mpc85xx_publish_devices); 3318c2ecf20Sopenharmony_cimachine_arch_initcall(p1021_mds, mpc85xx_common_publish_devices); 3328c2ecf20Sopenharmony_ci 3338c2ecf20Sopenharmony_cistatic void __init mpc85xx_mds_pic_init(void) 3348c2ecf20Sopenharmony_ci{ 3358c2ecf20Sopenharmony_ci struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN | 3368c2ecf20Sopenharmony_ci MPIC_SINGLE_DEST_CPU, 3378c2ecf20Sopenharmony_ci 0, 256, " OpenPIC "); 3388c2ecf20Sopenharmony_ci BUG_ON(mpic == NULL); 3398c2ecf20Sopenharmony_ci 3408c2ecf20Sopenharmony_ci mpic_init(mpic); 3418c2ecf20Sopenharmony_ci} 3428c2ecf20Sopenharmony_ci 3438c2ecf20Sopenharmony_cistatic int __init mpc85xx_mds_probe(void) 3448c2ecf20Sopenharmony_ci{ 3458c2ecf20Sopenharmony_ci return of_machine_is_compatible("MPC85xxMDS"); 3468c2ecf20Sopenharmony_ci} 3478c2ecf20Sopenharmony_ci 3488c2ecf20Sopenharmony_cidefine_machine(mpc8568_mds) { 3498c2ecf20Sopenharmony_ci .name = "MPC8568 MDS", 3508c2ecf20Sopenharmony_ci .probe = mpc85xx_mds_probe, 3518c2ecf20Sopenharmony_ci .setup_arch = mpc85xx_mds_setup_arch, 3528c2ecf20Sopenharmony_ci .init_IRQ = mpc85xx_mds_pic_init, 3538c2ecf20Sopenharmony_ci .get_irq = mpic_get_irq, 3548c2ecf20Sopenharmony_ci .calibrate_decr = generic_calibrate_decr, 3558c2ecf20Sopenharmony_ci .progress = udbg_progress, 3568c2ecf20Sopenharmony_ci#ifdef CONFIG_PCI 3578c2ecf20Sopenharmony_ci .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 3588c2ecf20Sopenharmony_ci .pcibios_fixup_phb = fsl_pcibios_fixup_phb, 3598c2ecf20Sopenharmony_ci#endif 3608c2ecf20Sopenharmony_ci}; 3618c2ecf20Sopenharmony_ci 3628c2ecf20Sopenharmony_cistatic int __init mpc8569_mds_probe(void) 3638c2ecf20Sopenharmony_ci{ 3648c2ecf20Sopenharmony_ci return of_machine_is_compatible("fsl,MPC8569EMDS"); 3658c2ecf20Sopenharmony_ci} 3668c2ecf20Sopenharmony_ci 3678c2ecf20Sopenharmony_cidefine_machine(mpc8569_mds) { 3688c2ecf20Sopenharmony_ci .name = "MPC8569 MDS", 3698c2ecf20Sopenharmony_ci .probe = mpc8569_mds_probe, 3708c2ecf20Sopenharmony_ci .setup_arch = mpc85xx_mds_setup_arch, 3718c2ecf20Sopenharmony_ci .init_IRQ = mpc85xx_mds_pic_init, 3728c2ecf20Sopenharmony_ci .get_irq = mpic_get_irq, 3738c2ecf20Sopenharmony_ci .calibrate_decr = generic_calibrate_decr, 3748c2ecf20Sopenharmony_ci .progress = udbg_progress, 3758c2ecf20Sopenharmony_ci#ifdef CONFIG_PCI 3768c2ecf20Sopenharmony_ci .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 3778c2ecf20Sopenharmony_ci .pcibios_fixup_phb = fsl_pcibios_fixup_phb, 3788c2ecf20Sopenharmony_ci#endif 3798c2ecf20Sopenharmony_ci}; 3808c2ecf20Sopenharmony_ci 3818c2ecf20Sopenharmony_cistatic int __init p1021_mds_probe(void) 3828c2ecf20Sopenharmony_ci{ 3838c2ecf20Sopenharmony_ci return of_machine_is_compatible("fsl,P1021MDS"); 3848c2ecf20Sopenharmony_ci 3858c2ecf20Sopenharmony_ci} 3868c2ecf20Sopenharmony_ci 3878c2ecf20Sopenharmony_cidefine_machine(p1021_mds) { 3888c2ecf20Sopenharmony_ci .name = "P1021 MDS", 3898c2ecf20Sopenharmony_ci .probe = p1021_mds_probe, 3908c2ecf20Sopenharmony_ci .setup_arch = mpc85xx_mds_setup_arch, 3918c2ecf20Sopenharmony_ci .init_IRQ = mpc85xx_mds_pic_init, 3928c2ecf20Sopenharmony_ci .get_irq = mpic_get_irq, 3938c2ecf20Sopenharmony_ci .calibrate_decr = generic_calibrate_decr, 3948c2ecf20Sopenharmony_ci .progress = udbg_progress, 3958c2ecf20Sopenharmony_ci#ifdef CONFIG_PCI 3968c2ecf20Sopenharmony_ci .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 3978c2ecf20Sopenharmony_ci .pcibios_fixup_phb = fsl_pcibios_fixup_phb, 3988c2ecf20Sopenharmony_ci#endif 3998c2ecf20Sopenharmony_ci}; 400