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