1ba5a7ca2SPali Rohár // SPDX-License-Identifier: GPL-2.0-or-later
2ba5a7ca2SPali Rohár /*
3ba5a7ca2SPali Rohár * Freescale P2020 board Setup
4ba5a7ca2SPali Rohár *
5ba5a7ca2SPali Rohár * Copyright 2007,2009,2012-2013 Freescale Semiconductor Inc.
6ba5a7ca2SPali Rohár * Copyright 2022-2023 Pali Rohár <pali@kernel.org>
7ba5a7ca2SPali Rohár */
8ba5a7ca2SPali Rohár
9ba5a7ca2SPali Rohár #include <linux/stddef.h>
10ba5a7ca2SPali Rohár #include <linux/kernel.h>
11ba5a7ca2SPali Rohár #include <linux/of.h>
12ba5a7ca2SPali Rohár
13ba5a7ca2SPali Rohár #include <asm/machdep.h>
14ba5a7ca2SPali Rohár #include <asm/udbg.h>
15ba5a7ca2SPali Rohár #include <asm/mpic.h>
16ba5a7ca2SPali Rohár #include <asm/swiotlb.h>
17ba5a7ca2SPali Rohár #include <asm/ppc-pci.h>
18ba5a7ca2SPali Rohár
19ba5a7ca2SPali Rohár #include <sysdev/fsl_pci.h>
20ba5a7ca2SPali Rohár
21ba5a7ca2SPali Rohár #include "smp.h"
22ba5a7ca2SPali Rohár #include "mpc85xx.h"
23ba5a7ca2SPali Rohár
p2020_pic_init(void)247d8ae6e0SPali Rohár static void __init p2020_pic_init(void)
257d8ae6e0SPali Rohár {
267d8ae6e0SPali Rohár struct mpic *mpic;
277d8ae6e0SPali Rohár int flags = MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU;
287d8ae6e0SPali Rohár
297d8ae6e0SPali Rohár mpic = mpic_alloc(NULL, 0, flags, 0, 256, " OpenPIC ");
307d8ae6e0SPali Rohár
317d8ae6e0SPali Rohár if (WARN_ON(!mpic))
327d8ae6e0SPali Rohár return;
337d8ae6e0SPali Rohár
347d8ae6e0SPali Rohár mpic_init(mpic);
357d8ae6e0SPali Rohár mpc85xx_8259_init();
367d8ae6e0SPali Rohár }
377d8ae6e0SPali Rohár
387d8ae6e0SPali Rohár /*
397d8ae6e0SPali Rohár * Setup the architecture
407d8ae6e0SPali Rohár */
p2020_setup_arch(void)417d8ae6e0SPali Rohár static void __init p2020_setup_arch(void)
427d8ae6e0SPali Rohár {
437d8ae6e0SPali Rohár swiotlb_detect_4g();
447d8ae6e0SPali Rohár fsl_pci_assign_primary();
457d8ae6e0SPali Rohár uli_init();
467d8ae6e0SPali Rohár mpc85xx_smp_init();
477d8ae6e0SPali Rohár mpc85xx_qe_par_io_init();
487d8ae6e0SPali Rohár }
497d8ae6e0SPali Rohár
50*1a170efeSPali Rohár /*
51*1a170efeSPali Rohár * Called very early, device-tree isn't unflattened
52*1a170efeSPali Rohár */
p2020_probe(void)53*1a170efeSPali Rohár static int __init p2020_probe(void)
54*1a170efeSPali Rohár {
55*1a170efeSPali Rohár struct device_node *p2020_cpu;
56ba5a7ca2SPali Rohár
57*1a170efeSPali Rohár /*
58*1a170efeSPali Rohár * There is no common compatible string for all P2020 boards.
59*1a170efeSPali Rohár * The only common thing is "PowerPC,P2020@0" cpu node.
60*1a170efeSPali Rohár * So check for P2020 board via this cpu node.
61*1a170efeSPali Rohár */
62*1a170efeSPali Rohár p2020_cpu = of_find_node_by_path("/cpus/PowerPC,P2020@0");
63*1a170efeSPali Rohár of_node_put(p2020_cpu);
64c30aa8fdSPali Rohár
65*1a170efeSPali Rohár return !!p2020_cpu;
66*1a170efeSPali Rohár }
67*1a170efeSPali Rohár
68*1a170efeSPali Rohár machine_arch_initcall(p2020, mpc85xx_common_publish_devices);
69*1a170efeSPali Rohár
define_machine(p2020)70*1a170efeSPali Rohár define_machine(p2020) {
71*1a170efeSPali Rohár .name = "Freescale P2020",
72*1a170efeSPali Rohár .probe = p2020_probe,
737d8ae6e0SPali Rohár .setup_arch = p2020_setup_arch,
747d8ae6e0SPali Rohár .init_IRQ = p2020_pic_init,
75ba5a7ca2SPali Rohár #ifdef CONFIG_PCI
76ba5a7ca2SPali Rohár .pcibios_fixup_bus = fsl_pcibios_fixup_bus,
77ba5a7ca2SPali Rohár .pcibios_fixup_phb = fsl_pcibios_fixup_phb,
78ba5a7ca2SPali Rohár #endif
79ba5a7ca2SPali Rohár .get_irq = mpic_get_irq,
80ba5a7ca2SPali Rohár .progress = udbg_progress,
81ba5a7ca2SPali Rohár };
82