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 { .compatible = "simple-bus", }, 50 {}, 51 }; 52 53 static int __init mpc837x_declare_of_platform_devices(void) 54 { 55 /* Publish of_device */ 56 of_platform_bus_probe(NULL, mpc837x_ids, NULL); 57 58 return 0; 59 } 60 machine_device_initcall(mpc837x_rdb, mpc837x_declare_of_platform_devices); 61 62 static void __init mpc837x_rdb_init_IRQ(void) 63 { 64 struct device_node *np; 65 66 np = of_find_compatible_node(NULL, NULL, "fsl,ipic"); 67 if (!np) 68 return; 69 70 ipic_init(np, 0); 71 72 /* Initialize the default interrupt mapping priorities, 73 * in case the boot rom changed something on us. 74 */ 75 ipic_set_default_priority(); 76 } 77 78 /* 79 * Called very early, MMU is off, device-tree isn't unflattened 80 */ 81 static int __init mpc837x_rdb_probe(void) 82 { 83 unsigned long root = of_get_flat_dt_root(); 84 85 return of_flat_dt_is_compatible(root, "fsl,mpc8377rdb") || 86 of_flat_dt_is_compatible(root, "fsl,mpc8378rdb") || 87 of_flat_dt_is_compatible(root, "fsl,mpc8379rdb"); 88 } 89 90 define_machine(mpc837x_rdb) { 91 .name = "MPC837x RDB", 92 .probe = mpc837x_rdb_probe, 93 .setup_arch = mpc837x_rdb_setup_arch, 94 .init_IRQ = mpc837x_rdb_init_IRQ, 95 .get_irq = ipic_get_irq, 96 .restart = mpc83xx_restart, 97 .time_init = mpc83xx_time_init, 98 .calibrate_decr = generic_calibrate_decr, 99 .progress = udbg_progress, 100 }; 101