162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/***************************************************************************/
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/*
562306a36Sopenharmony_ci *	firebee.c -- extra startup code support for the FireBee boards
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci *	Copyright (C) 2011, Greg Ungerer (gerg@snapgear.com)
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/***************************************************************************/
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/kernel.h>
1362306a36Sopenharmony_ci#include <linux/init.h>
1462306a36Sopenharmony_ci#include <linux/io.h>
1562306a36Sopenharmony_ci#include <linux/platform_device.h>
1662306a36Sopenharmony_ci#include <linux/mtd/mtd.h>
1762306a36Sopenharmony_ci#include <linux/mtd/partitions.h>
1862306a36Sopenharmony_ci#include <linux/mtd/physmap.h>
1962306a36Sopenharmony_ci#include <asm/coldfire.h>
2062306a36Sopenharmony_ci#include <asm/mcfsim.h>
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/***************************************************************************/
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/*
2562306a36Sopenharmony_ci *	8MB of NOR flash fitted to the FireBee board.
2662306a36Sopenharmony_ci */
2762306a36Sopenharmony_ci#define	FLASH_PHYS_ADDR		0xe0000000	/* Physical address of flash */
2862306a36Sopenharmony_ci#define	FLASH_PHYS_SIZE		0x00800000	/* Size of flash */
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#define	PART_BOOT_START		0x00000000	/* Start at bottom of flash */
3162306a36Sopenharmony_ci#define	PART_BOOT_SIZE		0x00040000	/* 256k in size */
3262306a36Sopenharmony_ci#define	PART_IMAGE_START	0x00040000	/* Start after boot loader */
3362306a36Sopenharmony_ci#define	PART_IMAGE_SIZE		0x006c0000	/* Most of flash */
3462306a36Sopenharmony_ci#define	PART_FPGA_START		0x00700000	/* Start at offset 7MB */
3562306a36Sopenharmony_ci#define	PART_FPGA_SIZE		0x00100000	/* 1MB in size */
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistatic struct mtd_partition firebee_flash_parts[] = {
3862306a36Sopenharmony_ci	{
3962306a36Sopenharmony_ci		.name	= "dBUG",
4062306a36Sopenharmony_ci		.offset	= PART_BOOT_START,
4162306a36Sopenharmony_ci		.size	= PART_BOOT_SIZE,
4262306a36Sopenharmony_ci	},
4362306a36Sopenharmony_ci	{
4462306a36Sopenharmony_ci		.name	= "FPGA",
4562306a36Sopenharmony_ci		.offset	= PART_FPGA_START,
4662306a36Sopenharmony_ci		.size	= PART_FPGA_SIZE,
4762306a36Sopenharmony_ci	},
4862306a36Sopenharmony_ci	{
4962306a36Sopenharmony_ci		.name	= "image",
5062306a36Sopenharmony_ci		.offset	= PART_IMAGE_START,
5162306a36Sopenharmony_ci		.size	= PART_IMAGE_SIZE,
5262306a36Sopenharmony_ci	},
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistatic struct physmap_flash_data firebee_flash_data = {
5662306a36Sopenharmony_ci	.width		= 2,
5762306a36Sopenharmony_ci	.nr_parts	= ARRAY_SIZE(firebee_flash_parts),
5862306a36Sopenharmony_ci	.parts		= firebee_flash_parts,
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic struct resource firebee_flash_resource = {
6262306a36Sopenharmony_ci	.start		= FLASH_PHYS_ADDR,
6362306a36Sopenharmony_ci	.end		= FLASH_PHYS_ADDR + FLASH_PHYS_SIZE,
6462306a36Sopenharmony_ci	.flags		= IORESOURCE_MEM,
6562306a36Sopenharmony_ci};
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_cistatic struct platform_device firebee_flash = {
6862306a36Sopenharmony_ci	.name		= "physmap-flash",
6962306a36Sopenharmony_ci	.id		= 0,
7062306a36Sopenharmony_ci	.dev		= {
7162306a36Sopenharmony_ci		.platform_data = &firebee_flash_data,
7262306a36Sopenharmony_ci	},
7362306a36Sopenharmony_ci	.num_resources	= 1,
7462306a36Sopenharmony_ci	.resource	= &firebee_flash_resource,
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci/***************************************************************************/
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_cistatic int __init init_firebee(void)
8062306a36Sopenharmony_ci{
8162306a36Sopenharmony_ci	platform_device_register(&firebee_flash);
8262306a36Sopenharmony_ci	return 0;
8362306a36Sopenharmony_ci}
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciarch_initcall(init_firebee);
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci/***************************************************************************/
88