xref: /openbmc/linux/arch/powerpc/platforms/85xx/p2020.c (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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