1 /* 2 * arch/powerpc/platforms/83xx/mpc837x_rdb.c 3 * 4 * Copyright (C) 2007 Freescale Semicondutor, Inc. All rights reserved. 5 * 6 * MPC837x RDB board specific routines 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the 10 * Free Software Foundation; either version 2 of the License, or (at your 11 * option) any later version. 12 */ 13 14 #include <linux/pci.h> 15 #include <linux/of_platform.h> 16 17 #include <asm/time.h> 18 #include <asm/ipic.h> 19 #include <asm/udbg.h> 20 21 #include "mpc83xx.h" 22 23 extern int mpc837x_usb_cfg(void); 24 25 /* ************************************************************************ 26 * 27 * Setup the architecture 28 * 29 */ 30 static void __init mpc837x_rdb_setup_arch(void) 31 { 32 #ifdef CONFIG_PCI 33 struct device_node *np; 34 #endif 35 36 if (ppc_md.progress) 37 ppc_md.progress("mpc837x_rdb_setup_arch()", 0); 38 39 #ifdef CONFIG_PCI 40 for_each_compatible_node(np, "pci", "fsl,mpc8349-pci") 41 mpc83xx_add_bridge(np); 42 #endif 43 mpc837x_usb_cfg(); 44 } 45 46 static struct of_device_id mpc837x_ids[] = { 47 { .type = "soc", }, 48 { .compatible = "soc", }, 49 {}, 50 }; 51 52 static int __init mpc837x_declare_of_platform_devices(void) 53 { 54 /* Publish of_device */ 55 of_platform_bus_probe(NULL, mpc837x_ids, NULL); 56 57 return 0; 58 } 59 machine_device_initcall(mpc837x_rdb, mpc837x_declare_of_platform_devices); 60 61 static void __init mpc837x_rdb_init_IRQ(void) 62 { 63 struct device_node *np; 64 65 np = of_find_compatible_node(NULL, NULL, "fsl,ipic"); 66 if (!np) 67 return; 68 69 ipic_init(np, 0); 70 71 /* Initialize the default interrupt mapping priorities, 72 * in case the boot rom changed something on us. 73 */ 74 ipic_set_default_priority(); 75 } 76 77 /* 78 * Called very early, MMU is off, device-tree isn't unflattened 79 */ 80 static int __init mpc837x_rdb_probe(void) 81 { 82 unsigned long root = of_get_flat_dt_root(); 83 84 return of_flat_dt_is_compatible(root, "fsl,mpc8377rdb") || 85 of_flat_dt_is_compatible(root, "fsl,mpc8378rdb") || 86 of_flat_dt_is_compatible(root, "fsl,mpc8379rdb"); 87 } 88 89 define_machine(mpc837x_rdb) { 90 .name = "MPC837x RDB", 91 .probe = mpc837x_rdb_probe, 92 .setup_arch = mpc837x_rdb_setup_arch, 93 .init_IRQ = mpc837x_rdb_init_IRQ, 94 .get_irq = ipic_get_irq, 95 .restart = mpc83xx_restart, 96 .time_init = mpc83xx_time_init, 97 .calibrate_decr = generic_calibrate_decr, 98 .progress = udbg_progress, 99 }; 100