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
p2020_pic_init(void)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 */
p2020_setup_arch(void)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 */
p2020_probe(void)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
define_machine(p2020)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