board-edosk7760.c (3942B)
1// SPDX-License-Identifier: GPL-2.0+ 2/* 3 * Renesas Europe EDOSK7760 Board Support 4 * 5 * Copyright (C) 2008 SPES Societa' Progettazione Elettronica e Software Ltd. 6 * Author: Luca Santini <luca.santini@spesonline.com> 7 */ 8#include <linux/init.h> 9#include <linux/types.h> 10#include <linux/platform_device.h> 11#include <linux/smc91x.h> 12#include <linux/interrupt.h> 13#include <linux/sh_intc.h> 14#include <linux/i2c.h> 15#include <linux/mtd/physmap.h> 16#include <asm/machvec.h> 17#include <asm/io.h> 18#include <asm/addrspace.h> 19#include <asm/delay.h> 20#include <asm/i2c-sh7760.h> 21#include <linux/sizes.h> 22 23/* Bus state controller registers for CS4 area */ 24#define BSC_CS4BCR 0xA4FD0010 25#define BSC_CS4WCR 0xA4FD0030 26 27#define SMC_IOBASE 0xA2000000 28#define SMC_IO_OFFSET 0x300 29#define SMC_IOADDR (SMC_IOBASE + SMC_IO_OFFSET) 30 31/* NOR flash */ 32static struct mtd_partition edosk7760_nor_flash_partitions[] = { 33 { 34 .name = "bootloader", 35 .offset = 0, 36 .size = SZ_256K, 37 .mask_flags = MTD_WRITEABLE, /* Read-only */ 38 }, { 39 .name = "kernel", 40 .offset = MTDPART_OFS_APPEND, 41 .size = SZ_2M, 42 }, { 43 .name = "fs", 44 .offset = MTDPART_OFS_APPEND, 45 .size = (26 << 20), 46 }, { 47 .name = "other", 48 .offset = MTDPART_OFS_APPEND, 49 .size = MTDPART_SIZ_FULL, 50 }, 51}; 52 53static struct physmap_flash_data edosk7760_nor_flash_data = { 54 .width = 4, 55 .parts = edosk7760_nor_flash_partitions, 56 .nr_parts = ARRAY_SIZE(edosk7760_nor_flash_partitions), 57}; 58 59static struct resource edosk7760_nor_flash_resources[] = { 60 [0] = { 61 .name = "NOR Flash", 62 .start = 0x00000000, 63 .end = 0x00000000 + SZ_32M - 1, 64 .flags = IORESOURCE_MEM, 65 } 66}; 67 68static struct platform_device edosk7760_nor_flash_device = { 69 .name = "physmap-flash", 70 .resource = edosk7760_nor_flash_resources, 71 .num_resources = ARRAY_SIZE(edosk7760_nor_flash_resources), 72 .dev = { 73 .platform_data = &edosk7760_nor_flash_data, 74 }, 75}; 76 77/* i2c initialization functions */ 78static struct sh7760_i2c_platdata i2c_pd = { 79 .speed_khz = 400, 80}; 81 82static struct resource sh7760_i2c1_res[] = { 83 { 84 .start = SH7760_I2C1_MMIO, 85 .end = SH7760_I2C1_MMIOEND, 86 .flags = IORESOURCE_MEM, 87 },{ 88 .start = evt2irq(0x9e0), 89 .end = evt2irq(0x9e0), 90 .flags = IORESOURCE_IRQ, 91 }, 92}; 93 94static struct platform_device sh7760_i2c1_dev = { 95 .dev = { 96 .platform_data = &i2c_pd, 97 }, 98 99 .name = SH7760_I2C_DEVNAME, 100 .id = 1, 101 .resource = sh7760_i2c1_res, 102 .num_resources = ARRAY_SIZE(sh7760_i2c1_res), 103}; 104 105static struct resource sh7760_i2c0_res[] = { 106 { 107 .start = SH7760_I2C0_MMIO, 108 .end = SH7760_I2C0_MMIOEND, 109 .flags = IORESOURCE_MEM, 110 }, { 111 .start = evt2irq(0x9c0), 112 .end = evt2irq(0x9c0), 113 .flags = IORESOURCE_IRQ, 114 }, 115}; 116 117static struct platform_device sh7760_i2c0_dev = { 118 .dev = { 119 .platform_data = &i2c_pd, 120 }, 121 .name = SH7760_I2C_DEVNAME, 122 .id = 0, 123 .resource = sh7760_i2c0_res, 124 .num_resources = ARRAY_SIZE(sh7760_i2c0_res), 125}; 126 127/* eth initialization functions */ 128static struct smc91x_platdata smc91x_info = { 129 .flags = SMC91X_USE_16BIT | SMC91X_IO_SHIFT_1 | IORESOURCE_IRQ_LOWLEVEL, 130}; 131 132static struct resource smc91x_res[] = { 133 [0] = { 134 .start = SMC_IOADDR, 135 .end = SMC_IOADDR + SZ_32 - 1, 136 .flags = IORESOURCE_MEM, 137 }, 138 [1] = { 139 .start = evt2irq(0x2a0), 140 .end = evt2irq(0x2a0), 141 .flags = IORESOURCE_IRQ , 142 } 143}; 144 145static struct platform_device smc91x_dev = { 146 .name = "smc91x", 147 .id = -1, 148 .num_resources = ARRAY_SIZE(smc91x_res), 149 .resource = smc91x_res, 150 151 .dev = { 152 .platform_data = &smc91x_info, 153 }, 154}; 155 156/* platform init code */ 157static struct platform_device *edosk7760_devices[] __initdata = { 158 &smc91x_dev, 159 &edosk7760_nor_flash_device, 160 &sh7760_i2c0_dev, 161 &sh7760_i2c1_dev, 162}; 163 164static int __init init_edosk7760_devices(void) 165{ 166 plat_irq_setup_pins(IRQ_MODE_IRQ); 167 168 return platform_add_devices(edosk7760_devices, 169 ARRAY_SIZE(edosk7760_devices)); 170} 171device_initcall(init_edosk7760_devices); 172 173/* 174 * The Machine Vector 175 */ 176struct sh_machine_vector mv_edosk7760 __initmv = { 177 .mv_name = "EDOSK7760", 178};