1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Freescale P2020 board Setup 4 * 5 * Copyright 2007,2009,2012-2013 Freescale Semiconductor Inc. 6 * Copyright 2022-2023 Pali Rohár <pali@kernel.org> 7 */ 8 9 #include <linux/stddef.h> 10 #include <linux/kernel.h> 11 #include <linux/of.h> 12 13 #include <asm/machdep.h> 14 #include <asm/udbg.h> 15 #include <asm/mpic.h> 16 #include <asm/swiotlb.h> 17 #include <asm/ppc-pci.h> 18 19 #include <sysdev/fsl_pci.h> 20 21 #include "smp.h" 22 #include "mpc85xx.h" 23 24 static void __init p2020_pic_init(void) 25 { 26 struct mpic *mpic; 27 int flags = MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU; 28 29 mpic = mpic_alloc(NULL, 0, flags, 0, 256, " OpenPIC "); 30 31 if (WARN_ON(!mpic)) 32 return; 33 34 mpic_init(mpic); 35 mpc85xx_8259_init(); 36 } 37 38 /* 39 * Setup the architecture 40 */ 41 static void __init p2020_setup_arch(void) 42 { 43 swiotlb_detect_4g(); 44 fsl_pci_assign_primary(); 45 uli_init(); 46 mpc85xx_smp_init(); 47 mpc85xx_qe_par_io_init(); 48 } 49 50 /* 51 * Called very early, device-tree isn't unflattened 52 */ 53 static int __init p2020_probe(void) 54 { 55 struct device_node *p2020_cpu; 56 57 /* 58 * There is no common compatible string for all P2020 boards. 59 * The only common thing is "PowerPC,P2020@0" cpu node. 60 * So check for P2020 board via this cpu node. 61 */ 62 p2020_cpu = of_find_node_by_path("/cpus/PowerPC,P2020@0"); 63 of_node_put(p2020_cpu); 64 65 return !!p2020_cpu; 66 } 67 68 machine_arch_initcall(p2020, mpc85xx_common_publish_devices); 69 70 define_machine(p2020) { 71 .name = "Freescale P2020", 72 .probe = p2020_probe, 73 .setup_arch = p2020_setup_arch, 74 .init_IRQ = p2020_pic_init, 75 #ifdef CONFIG_PCI 76 .pcibios_fixup_bus = fsl_pcibios_fixup_bus, 77 .pcibios_fixup_phb = fsl_pcibios_fixup_phb, 78 #endif 79 .get_irq = mpic_get_irq, 80 .progress = udbg_progress, 81 }; 82