|
@@ -20,6 +20,9 @@
|
|
|
#include <linux/sched.h>
|
|
|
#include <linux/bitops.h>
|
|
|
#include <linux/fb.h>
|
|
|
+#include <linux/ioport.h>
|
|
|
+#include <linux/mtd/mtd.h>
|
|
|
+#include <linux/mtd/partitions.h>
|
|
|
|
|
|
#include <asm/types.h>
|
|
|
#include <asm/setup.h>
|
|
@@ -27,10 +30,12 @@
|
|
|
#include <asm/mach-types.h>
|
|
|
#include <asm/hardware.h>
|
|
|
#include <asm/irq.h>
|
|
|
+#include <asm/sizes.h>
|
|
|
|
|
|
#include <asm/mach/arch.h>
|
|
|
#include <asm/mach/map.h>
|
|
|
#include <asm/mach/irq.h>
|
|
|
+#include <asm/mach/flash.h>
|
|
|
|
|
|
#include <asm/arch/pxa-regs.h>
|
|
|
#include <asm/arch/mainstone.h>
|
|
@@ -190,6 +195,69 @@ static struct platform_device mst_audio_device = {
|
|
|
.dev = { .platform_data = &mst_audio_ops },
|
|
|
};
|
|
|
|
|
|
+static struct resource flash_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = PXA_CS0_PHYS,
|
|
|
+ .end = PXA_CS0_PHYS + SZ_64M - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = PXA_CS1_PHYS,
|
|
|
+ .end = PXA_CS1_PHYS + SZ_64M - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct mtd_partition mainstoneflash0_partitions[] = {
|
|
|
+ {
|
|
|
+ .name = "Bootloader",
|
|
|
+ .size = 0x00040000,
|
|
|
+ .offset = 0,
|
|
|
+ .mask_flags = MTD_WRITEABLE /* force read-only */
|
|
|
+ },{
|
|
|
+ .name = "Kernel",
|
|
|
+ .size = 0x00400000,
|
|
|
+ .offset = 0x00040000,
|
|
|
+ },{
|
|
|
+ .name = "Filesystem",
|
|
|
+ .size = MTDPART_SIZ_FULL,
|
|
|
+ .offset = 0x00440000
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static struct flash_platform_data mst_flash_data[2] = {
|
|
|
+ {
|
|
|
+ .map_name = "cfi_probe",
|
|
|
+ .parts = mainstoneflash0_partitions,
|
|
|
+ .nr_parts = ARRAY_SIZE(mainstoneflash0_partitions),
|
|
|
+ }, {
|
|
|
+ .map_name = "cfi_probe",
|
|
|
+ .parts = NULL,
|
|
|
+ .nr_parts = 0,
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device mst_flash_device[2] = {
|
|
|
+ {
|
|
|
+ .name = "pxa2xx-flash",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &mst_flash_data[0],
|
|
|
+ },
|
|
|
+ .resource = &flash_resources[0],
|
|
|
+ .num_resources = 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "pxa2xx-flash",
|
|
|
+ .id = 1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &mst_flash_data[1],
|
|
|
+ },
|
|
|
+ .resource = &flash_resources[1],
|
|
|
+ .num_resources = 1,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
static void mainstone_backlight_power(int on)
|
|
|
{
|
|
|
if (on) {
|
|
@@ -318,16 +386,34 @@ static struct pxaficp_platform_data mainstone_ficp_platform_data = {
|
|
|
.transceiver_mode = mainstone_irda_transceiver_mode,
|
|
|
};
|
|
|
|
|
|
+static struct platform_device *platform_devices[] __initdata = {
|
|
|
+ &smc91x_device,
|
|
|
+ &mst_audio_device,
|
|
|
+ &mst_flash_device[0],
|
|
|
+ &mst_flash_device[1],
|
|
|
+};
|
|
|
+
|
|
|
static void __init mainstone_init(void)
|
|
|
{
|
|
|
+ int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */
|
|
|
+
|
|
|
+ mst_flash_data[0].width = (BOOT_DEF & 1) ? 2 : 4;
|
|
|
+ mst_flash_data[1].width = 4;
|
|
|
+
|
|
|
+ /* Compensate for SW7 which swaps the flash banks */
|
|
|
+ mst_flash_data[SW7].name = "processor-flash";
|
|
|
+ mst_flash_data[SW7 ^ 1].name = "mainboard-flash";
|
|
|
+
|
|
|
+ printk(KERN_NOTICE "Mainstone configured to boot from %s\n",
|
|
|
+ mst_flash_data[0].name);
|
|
|
+
|
|
|
/*
|
|
|
* On Mainstone, we route AC97_SYSCLK via GPIO45 to
|
|
|
* the audio daughter card
|
|
|
*/
|
|
|
pxa_gpio_mode(GPIO45_SYSCLK_AC97_MD);
|
|
|
|
|
|
- platform_device_register(&smc91x_device);
|
|
|
- platform_device_register(&mst_audio_device);
|
|
|
+ platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
|
|
|
|
|
|
/* reading Mainstone's "Virtual Configuration Register"
|
|
|
might be handy to select LCD type here */
|