/*
 * board-sg.c -- support for the SnapGear KS8695 based boards
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/map.h>
#include <linux/mtd/physmap.h>
#include <linux/mtd/partitions.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include "devices.h"
#include "generic.h"

/*
 * The SG310 machine type is fitted with a conventional 8MB Strataflash
 * device. Define its partitioning.
 */
#define	FL_BASE		0x02000000
#define	FL_SIZE		SZ_8M

static struct mtd_partition sg_mtd_partitions[] = {
	[0] = {
		.name	= "SnapGear Boot Loader",
		.size	= SZ_128K,
	},
	[1] = {
		.name	= "SnapGear non-volatile configuration",
		.size	= SZ_512K,
		.offset	= SZ_256K,
	},
	[2] = {
		.name	= "SnapGear image",
		.offset	= SZ_512K + SZ_256K,
	},
	[3] = {
		.name	= "SnapGear StrataFlash",
	},
	[4] = {
		.name	= "SnapGear Boot Tags",
		.size	= SZ_128K,
		.offset	= SZ_128K,
	},
};

static struct physmap_flash_data sg_mtd_pdata = {
	.width		= 1,
	.nr_parts	= ARRAY_SIZE(sg_mtd_partitions),
	.parts		= sg_mtd_partitions,
};


static struct resource sg_mtd_resource[] = {
	[0] = {
		.start = FL_BASE,
		.end   = FL_BASE + FL_SIZE - 1,
		.flags = IORESOURCE_MEM,
	},
};

static struct platform_device sg_mtd_device = {
	.name		= "physmap-flash",
	.id		= 0,
	.num_resources	= ARRAY_SIZE(sg_mtd_resource),
	.resource	= sg_mtd_resource,
	.dev		= {
		.platform_data = &sg_mtd_pdata,
	},
};

static void __init sg_init(void)
{
	ks8695_add_device_lan();
	ks8695_add_device_wan();

	if (machine_is_sg310())
		platform_device_register(&sg_mtd_device);
}

#ifdef CONFIG_MACH_LITE300
MACHINE_START(LITE300, "SecureComputing/SG300")
	/* SnapGear */
	.atag_offset	= 0x100,
	.map_io		= ks8695_map_io,
	.init_irq	= ks8695_init_irq,
	.init_machine	= sg_init,
	.init_time	= ks8695_timer_init,
	.restart	= ks8695_restart,
MACHINE_END
#endif

#ifdef CONFIG_MACH_SG310
MACHINE_START(SG310, "McAfee/SG310")
	/* SnapGear */
	.atag_offset	= 0x100,
	.map_io		= ks8695_map_io,
	.init_irq	= ks8695_init_irq,
	.init_machine	= sg_init,
	.init_time	= ks8695_timer_init,
	.restart	= ks8695_restart,
MACHINE_END
#endif

#ifdef CONFIG_MACH_SE4200
MACHINE_START(SE4200, "SecureComputing/SE4200")
	/* SnapGear */
	.atag_offset	= 0x100,
	.map_io		= ks8695_map_io,
	.init_irq	= ks8695_init_irq,
	.init_machine	= sg_init,
	.init_time	= ks8695_timer_init,
	.restart	= ks8695_restart,
MACHINE_END
#endif
