162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * ppa8548 setup and early boot code. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2009 Prodrive B.V.. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * By Stef van Os (see MAINTAINERS for contact information) 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Based on the SBC8548 support - Copyright 2007 Wind River Systems Inc. 1062306a36Sopenharmony_ci * Based on the MPC8548CDS support - Copyright 2005 Freescale Inc. 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <linux/stddef.h> 1462306a36Sopenharmony_ci#include <linux/kernel.h> 1562306a36Sopenharmony_ci#include <linux/init.h> 1662306a36Sopenharmony_ci#include <linux/reboot.h> 1762306a36Sopenharmony_ci#include <linux/seq_file.h> 1862306a36Sopenharmony_ci#include <linux/of_fdt.h> 1962306a36Sopenharmony_ci#include <linux/of_platform.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#include <asm/machdep.h> 2262306a36Sopenharmony_ci#include <asm/udbg.h> 2362306a36Sopenharmony_ci#include <asm/mpic.h> 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#include <sysdev/fsl_soc.h> 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistatic void __init ppa8548_pic_init(void) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN, 3062306a36Sopenharmony_ci 0, 256, " OpenPIC "); 3162306a36Sopenharmony_ci BUG_ON(mpic == NULL); 3262306a36Sopenharmony_ci mpic_init(mpic); 3362306a36Sopenharmony_ci} 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* 3662306a36Sopenharmony_ci * Setup the architecture 3762306a36Sopenharmony_ci */ 3862306a36Sopenharmony_cistatic void __init ppa8548_setup_arch(void) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci if (ppc_md.progress) 4162306a36Sopenharmony_ci ppc_md.progress("ppa8548_setup_arch()", 0); 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cistatic void ppa8548_show_cpuinfo(struct seq_file *m) 4562306a36Sopenharmony_ci{ 4662306a36Sopenharmony_ci uint32_t svid, phid1; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci svid = mfspr(SPRN_SVR); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci seq_printf(m, "Vendor\t\t: Prodrive B.V.\n"); 5162306a36Sopenharmony_ci seq_printf(m, "SVR\t\t: 0x%x\n", svid); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci /* Display cpu Pll setting */ 5462306a36Sopenharmony_ci phid1 = mfspr(SPRN_HID1); 5562306a36Sopenharmony_ci seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f)); 5662306a36Sopenharmony_ci} 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistatic const struct of_device_id of_bus_ids[] __initconst = { 5962306a36Sopenharmony_ci { .name = "soc", }, 6062306a36Sopenharmony_ci { .type = "soc", }, 6162306a36Sopenharmony_ci { .compatible = "simple-bus", }, 6262306a36Sopenharmony_ci { .compatible = "gianfar", }, 6362306a36Sopenharmony_ci { .compatible = "fsl,srio", }, 6462306a36Sopenharmony_ci {}, 6562306a36Sopenharmony_ci}; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cistatic int __init declare_of_platform_devices(void) 6862306a36Sopenharmony_ci{ 6962306a36Sopenharmony_ci of_platform_bus_probe(NULL, of_bus_ids, NULL); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci return 0; 7262306a36Sopenharmony_ci} 7362306a36Sopenharmony_cimachine_device_initcall(ppa8548, declare_of_platform_devices); 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cidefine_machine(ppa8548) { 7662306a36Sopenharmony_ci .name = "ppa8548", 7762306a36Sopenharmony_ci .compatible = "ppa8548", 7862306a36Sopenharmony_ci .setup_arch = ppa8548_setup_arch, 7962306a36Sopenharmony_ci .init_IRQ = ppa8548_pic_init, 8062306a36Sopenharmony_ci .show_cpuinfo = ppa8548_show_cpuinfo, 8162306a36Sopenharmony_ci .get_irq = mpic_get_irq, 8262306a36Sopenharmony_ci .progress = udbg_progress, 8362306a36Sopenharmony_ci}; 84