Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 094f1275 authored by Dan Williams's avatar Dan Williams Committed by Russell King
Browse files

[ARM] 4271/1: iop32x: fix ep80219 detection (support iq80219 platforms)



An iq80219 is a board with an iq31244 layout and an 80219 processor.  It
breaks the current assumption that all 80219 processors run on ep80219
platforms.  This patch adds the "force_ep80219" option to the kernel to
override boot loaders that have passed in the iq31244 id, and adds the
MACHINE_START definition for ep80219.

[ patch assumes that EP80219 has been added to mach-types ]

Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 5455a51e
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4,6 +4,9 @@ menu "IOP32x Implementation Options"

comment "IOP32x Platform Types"

config MACH_EP80219
	bool

config MACH_GLANTANK
	bool "Enable support for the IO-Data GLAN Tank"
	help
@@ -19,6 +22,7 @@ config ARCH_IQ80321

config ARCH_IQ31244
	bool "Enable support for EP80219/IQ31244"
	select MACH_EP80219
	help
	  Say Y here if you want to run your kernel on the Intel EP80219
	  evaluation kit for the Intel 80219 processor (a IOP321 variant)
+51 −8
Original line number Diff line number Diff line
@@ -39,22 +39,35 @@
#include <asm/arch/time.h>

/*
 * The EP80219 and IQ31244 use the same machine ID.  To find out
 * which of the two we're running on, we look at the processor ID.
 * Until March of 2007 iq31244 platforms and ep80219 platforms shared the
 * same machine id, and the processor type was used to select board type.
 * However this assumption breaks for an iq80219 board which is an iop219
 * processor on an iq31244 board.  The force_ep80219 flag has been added
 * for old boot loaders using the iq31244 machine id for an ep80219 platform.
 */
static int force_ep80219;

static int is_80219(void)
{
	extern int processor_id;
	return !!((processor_id & 0xffffffe0) == 0x69052e20);
}

static int is_ep80219(void)
{
	if (machine_is_ep80219() || force_ep80219)
		return 1;
	else
		return 0;
}


/*
 * EP80219/IQ31244 timer tick configuration.
 */
static void __init iq31244_timer_init(void)
{
	if (is_80219()) {
	if (is_ep80219()) {
		/* 33.333 MHz crystal.  */
		iop_init_time(200000000);
	} else {
@@ -165,12 +178,18 @@ static struct hw_pci iq31244_pci __initdata = {

static int __init iq31244_pci_init(void)
{
	if (machine_is_iq31244()) {
		if (is_80219()) {
	if (is_ep80219())
		pci_common_init(&ep80219_pci);
		} else {
			pci_common_init(&iq31244_pci);
	else if (machine_is_iq31244()) {
		if (is_80219()) {
			printk("note: iq31244 board type has been selected\n");
			printk("note: to select ep80219 operation:\n");
			printk("\t1/ specify \"force_ep80219\" on the kernel"
				" command line\n");
			printk("\t2/ update boot loader to pass"
				" the ep80219 id: %d\n", MACH_TYPE_EP80219);
		}
		pci_common_init(&iq31244_pci);
	}

	return 0;
@@ -277,10 +296,18 @@ static void __init iq31244_init_machine(void)
	platform_device_register(&iq31244_flash_device);
	platform_device_register(&iq31244_serial_device);

	if (is_80219())
	if (is_ep80219())
		pm_power_off = ep80219_power_off;
}

static int __init force_ep80219_setup(char *str)
{
	force_ep80219 = 1;
	return 1;
}

__setup("force_ep80219", force_ep80219_setup);

MACHINE_START(IQ31244, "Intel IQ31244")
	/* Maintainer: Intel Corp. */
	.phys_io	= IQ31244_UART,
@@ -291,3 +318,19 @@ MACHINE_START(IQ31244, "Intel IQ31244")
	.timer		= &iq31244_timer,
	.init_machine	= iq31244_init_machine,
MACHINE_END

/* There should have been an ep80219 machine identifier from the beginning.
 * Boot roms older than March 2007 do not know the ep80219 machine id.  Pass
 * "force_ep80219" on the kernel command line, otherwise iq31244 operation
 * will be selected.
 */
MACHINE_START(EP80219, "Intel EP80219")
	/* Maintainer: Intel Corp. */
	.phys_io	= IQ31244_UART,
	.io_pg_offst	= ((IQ31244_UART) >> 18) & 0xfffc,
	.boot_params	= 0xa0000100,
	.map_io		= iq31244_map_io,
	.init_irq	= iop32x_init_irq,
	.timer		= &iq31244_timer,
	.init_machine	= iq31244_init_machine,
MACHINE_END