2023-04-08 16:01:16 +02:00
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Freescale P2020 board Setup
*
* Copyright 2007 , 2009 , 2012 - 2013 Freescale Semiconductor Inc .
* Copyright 2022 - 2023 Pali Rohár < pali @ kernel . org >
*/
# include <linux/stddef.h>
# include <linux/kernel.h>
# include <linux/of.h>
# include <asm/machdep.h>
# include <asm/udbg.h>
# include <asm/mpic.h>
# include <asm/swiotlb.h>
# include <asm/ppc-pci.h>
# include <sysdev/fsl_pci.h>
# include "smp.h"
# include "mpc85xx.h"
2023-04-08 16:01:19 +02:00
static void __init p2020_pic_init ( void )
{
struct mpic * mpic ;
int flags = MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU ;
mpic = mpic_alloc ( NULL , 0 , flags , 0 , 256 , " OpenPIC " ) ;
if ( WARN_ON ( ! mpic ) )
return ;
mpic_init ( mpic ) ;
mpc85xx_8259_init ( ) ;
}
/*
* Setup the architecture
*/
static void __init p2020_setup_arch ( void )
{
swiotlb_detect_4g ( ) ;
fsl_pci_assign_primary ( ) ;
uli_init ( ) ;
mpc85xx_smp_init ( ) ;
mpc85xx_qe_par_io_init ( ) ;
}
2023-04-08 16:01:20 +02:00
/*
* Called very early , device - tree isn ' t unflattened
*/
static int __init p2020_probe ( void )
{
struct device_node * p2020_cpu ;
2023-04-08 16:01:16 +02:00
2023-04-08 16:01:20 +02:00
/*
* There is no common compatible string for all P2020 boards .
* The only common thing is " PowerPC,P2020@0 " cpu node .
* So check for P2020 board via this cpu node .
*/
p2020_cpu = of_find_node_by_path ( " /cpus/PowerPC,P2020@0 " ) ;
of_node_put ( p2020_cpu ) ;
2023-04-08 16:01:17 +02:00
2023-04-08 16:01:20 +02:00
return ! ! p2020_cpu ;
}
2023-04-08 16:01:17 +02:00
2023-04-08 16:01:20 +02:00
machine_arch_initcall ( p2020 , mpc85xx_common_publish_devices ) ;
2023-04-08 16:01:17 +02:00
2023-04-08 16:01:20 +02:00
define_machine ( p2020 ) {
. name = " Freescale P2020 " ,
. probe = p2020_probe ,
2023-04-08 16:01:19 +02:00
. setup_arch = p2020_setup_arch ,
. init_IRQ = p2020_pic_init ,
2023-04-08 16:01:17 +02:00
# ifdef CONFIG_PCI
. pcibios_fixup_bus = fsl_pcibios_fixup_bus ,
. pcibios_fixup_phb = fsl_pcibios_fixup_phb ,
# endif
. get_irq = mpic_get_irq ,
. progress = udbg_progress ,
} ;