xref: /linux/arch/m68k/coldfire/firebee.c (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2f86b9e03SGreg Ungerer /***************************************************************************/
3f86b9e03SGreg Ungerer 
4f86b9e03SGreg Ungerer /*
5f86b9e03SGreg Ungerer  *	firebee.c -- extra startup code support for the FireBee boards
6f86b9e03SGreg Ungerer  *
7f86b9e03SGreg Ungerer  *	Copyright (C) 2011, Greg Ungerer (gerg@snapgear.com)
8f86b9e03SGreg Ungerer  */
9f86b9e03SGreg Ungerer 
10f86b9e03SGreg Ungerer /***************************************************************************/
11f86b9e03SGreg Ungerer 
12f86b9e03SGreg Ungerer #include <linux/kernel.h>
13f86b9e03SGreg Ungerer #include <linux/init.h>
14f86b9e03SGreg Ungerer #include <linux/io.h>
15f86b9e03SGreg Ungerer #include <linux/platform_device.h>
16f86b9e03SGreg Ungerer #include <linux/mtd/mtd.h>
17f86b9e03SGreg Ungerer #include <linux/mtd/partitions.h>
18f86b9e03SGreg Ungerer #include <linux/mtd/physmap.h>
19f86b9e03SGreg Ungerer #include <asm/coldfire.h>
20f86b9e03SGreg Ungerer #include <asm/mcfsim.h>
21f86b9e03SGreg Ungerer 
22f86b9e03SGreg Ungerer /***************************************************************************/
23f86b9e03SGreg Ungerer 
24f86b9e03SGreg Ungerer /*
25f86b9e03SGreg Ungerer  *	8MB of NOR flash fitted to the FireBee board.
26f86b9e03SGreg Ungerer  */
27f86b9e03SGreg Ungerer #define	FLASH_PHYS_ADDR		0xe0000000	/* Physical address of flash */
28f86b9e03SGreg Ungerer #define	FLASH_PHYS_SIZE		0x00800000	/* Size of flash */
29f86b9e03SGreg Ungerer 
30f86b9e03SGreg Ungerer #define	PART_BOOT_START		0x00000000	/* Start at bottom of flash */
31f86b9e03SGreg Ungerer #define	PART_BOOT_SIZE		0x00040000	/* 256k in size */
32f86b9e03SGreg Ungerer #define	PART_IMAGE_START	0x00040000	/* Start after boot loader */
33f86b9e03SGreg Ungerer #define	PART_IMAGE_SIZE		0x006c0000	/* Most of flash */
34f86b9e03SGreg Ungerer #define	PART_FPGA_START		0x00700000	/* Start at offset 7MB */
35f86b9e03SGreg Ungerer #define	PART_FPGA_SIZE		0x00100000	/* 1MB in size */
36f86b9e03SGreg Ungerer 
37f86b9e03SGreg Ungerer static struct mtd_partition firebee_flash_parts[] = {
38f86b9e03SGreg Ungerer 	{
39f86b9e03SGreg Ungerer 		.name	= "dBUG",
40f86b9e03SGreg Ungerer 		.offset	= PART_BOOT_START,
41f86b9e03SGreg Ungerer 		.size	= PART_BOOT_SIZE,
42f86b9e03SGreg Ungerer 	},
43f86b9e03SGreg Ungerer 	{
44f86b9e03SGreg Ungerer 		.name	= "FPGA",
45f86b9e03SGreg Ungerer 		.offset	= PART_FPGA_START,
46f86b9e03SGreg Ungerer 		.size	= PART_FPGA_SIZE,
47f86b9e03SGreg Ungerer 	},
48f86b9e03SGreg Ungerer 	{
49f86b9e03SGreg Ungerer 		.name	= "image",
50f86b9e03SGreg Ungerer 		.offset	= PART_IMAGE_START,
51f86b9e03SGreg Ungerer 		.size	= PART_IMAGE_SIZE,
52f86b9e03SGreg Ungerer 	},
53f86b9e03SGreg Ungerer };
54f86b9e03SGreg Ungerer 
55f86b9e03SGreg Ungerer static struct physmap_flash_data firebee_flash_data = {
56f86b9e03SGreg Ungerer 	.width		= 2,
57f86b9e03SGreg Ungerer 	.nr_parts	= ARRAY_SIZE(firebee_flash_parts),
58f86b9e03SGreg Ungerer 	.parts		= firebee_flash_parts,
59f86b9e03SGreg Ungerer };
60f86b9e03SGreg Ungerer 
61f86b9e03SGreg Ungerer static struct resource firebee_flash_resource = {
62f86b9e03SGreg Ungerer 	.start		= FLASH_PHYS_ADDR,
63f86b9e03SGreg Ungerer 	.end		= FLASH_PHYS_ADDR + FLASH_PHYS_SIZE,
64f86b9e03SGreg Ungerer 	.flags		= IORESOURCE_MEM,
65f86b9e03SGreg Ungerer };
66f86b9e03SGreg Ungerer 
67f86b9e03SGreg Ungerer static struct platform_device firebee_flash = {
68f86b9e03SGreg Ungerer 	.name		= "physmap-flash",
69f86b9e03SGreg Ungerer 	.id		= 0,
70f86b9e03SGreg Ungerer 	.dev		= {
71f86b9e03SGreg Ungerer 		.platform_data = &firebee_flash_data,
72f86b9e03SGreg Ungerer 	},
73f86b9e03SGreg Ungerer 	.num_resources	= 1,
74f86b9e03SGreg Ungerer 	.resource	= &firebee_flash_resource,
75f86b9e03SGreg Ungerer };
76f86b9e03SGreg Ungerer 
77f86b9e03SGreg Ungerer /***************************************************************************/
78f86b9e03SGreg Ungerer 
init_firebee(void)79f86b9e03SGreg Ungerer static int __init init_firebee(void)
80f86b9e03SGreg Ungerer {
81f86b9e03SGreg Ungerer 	platform_device_register(&firebee_flash);
82f86b9e03SGreg Ungerer 	return 0;
83f86b9e03SGreg Ungerer }
84f86b9e03SGreg Ungerer 
85f86b9e03SGreg Ungerer arch_initcall(init_firebee);
86f86b9e03SGreg Ungerer 
87f86b9e03SGreg Ungerer /***************************************************************************/
88