p1023_rds.c 3.4 KB
Newer Older
1
/*
2
 * Copyright 2010-2011, 2013 Freescale Semiconductor, Inc.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
 *
 * Author: Roy Zang <tie-fei.zang@freescale.com>
 *
 * Description:
 * P1023 RDS Board Setup
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/errno.h>
#include <linux/pci.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/fsl_devices.h>
#include <linux/of_platform.h>
#include <linux/of_device.h>

#include <asm/time.h>
#include <asm/machdep.h>
#include <asm/pci-bridge.h>
#include <mm/mmu_decl.h>
#include <asm/prom.h>
#include <asm/udbg.h>
#include <asm/mpic.h>
32
#include "smp.h"
33 34 35 36

#include <sysdev/fsl_soc.h>
#include <sysdev/fsl_pci.h>

37 38
#include "mpc85xx.h"

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
/* ************************************************************************
 *
 * Setup the architecture
 *
 */
static void __init mpc85xx_rds_setup_arch(void)
{
	struct device_node *np;

	if (ppc_md.progress)
		ppc_md.progress("p1023_rds_setup_arch()", 0);

	/* Map BCSR area */
	np = of_find_node_by_name(NULL, "bcsr");
	if (np != NULL) {
		static u8 __iomem *bcsr_regs;

		bcsr_regs = of_iomap(np, 0);
		of_node_put(np);

		if (!bcsr_regs) {
			printk(KERN_ERR
			       "BCSR: Failed to map bcsr register space\n");
			return;
		} else {
#define BCSR15_I2C_BUS0_SEG_CLR		0x07
#define BCSR15_I2C_BUS0_SEG2		0x02
/*
 * Note: Accessing exclusively i2c devices.
 *
 * The i2c controller selects initially ID EEPROM in the u-boot;
 * but if menu configuration selects RTC support in the kernel,
 * the i2c controller switches to select RTC chip in the kernel.
 */
#ifdef CONFIG_RTC_CLASS
			/* Enable RTC chip on the segment #2 of i2c */
			clrbits8(&bcsr_regs[15], BCSR15_I2C_BUS0_SEG_CLR);
			setbits8(&bcsr_regs[15], BCSR15_I2C_BUS0_SEG2);
#endif

			iounmap(bcsr_regs);
		}
	}

	mpc85xx_smp_init();
84 85

	fsl_pci_assign_primary();
86 87
}

88
machine_arch_initcall(p1023_rds, mpc85xx_common_publish_devices);
89
machine_arch_initcall(p1023_rdb, mpc85xx_common_publish_devices);
90 91 92

static void __init mpc85xx_rds_pic_init(void)
{
93
	struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN |
94
		MPIC_SINGLE_DEST_CPU,
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
		0, 256, " OpenPIC  ");

	BUG_ON(mpic == NULL);

	mpic_init(mpic);
}

static int __init p1023_rds_probe(void)
{
	unsigned long root = of_get_flat_dt_root();

	return of_flat_dt_is_compatible(root, "fsl,P1023RDS");

}

110 111 112 113 114 115 116 117
static int __init p1023_rdb_probe(void)
{
	unsigned long root = of_get_flat_dt_root();

	return of_flat_dt_is_compatible(root, "fsl,P1023RDB");

}

118 119 120 121 122 123 124 125 126 127 128
define_machine(p1023_rds) {
	.name			= "P1023 RDS",
	.probe			= p1023_rds_probe,
	.setup_arch		= mpc85xx_rds_setup_arch,
	.init_IRQ		= mpc85xx_rds_pic_init,
	.get_irq		= mpic_get_irq,
	.restart		= fsl_rstcr_restart,
	.calibrate_decr		= generic_calibrate_decr,
	.progress		= udbg_progress,
#ifdef CONFIG_PCI
	.pcibios_fixup_bus	= fsl_pcibios_fixup_bus,
129
	.pcibios_fixup_phb      = fsl_pcibios_fixup_phb,
130 131 132
#endif
};

133 134 135 136 137 138 139 140 141 142 143
define_machine(p1023_rdb) {
	.name			= "P1023 RDB",
	.probe			= p1023_rdb_probe,
	.setup_arch		= mpc85xx_rds_setup_arch,
	.init_IRQ		= mpc85xx_rds_pic_init,
	.get_irq		= mpic_get_irq,
	.restart		= fsl_rstcr_restart,
	.calibrate_decr		= generic_calibrate_decr,
	.progress		= udbg_progress,
#ifdef CONFIG_PCI
	.pcibios_fixup_bus	= fsl_pcibios_fixup_bus,
144
	.pcibios_fixup_phb      = fsl_pcibios_fixup_phb,
145 146
#endif
};