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