cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

common-smdk-s3c24xx.c (4826B)


      1// SPDX-License-Identifier: GPL-2.0
      2//
      3// Copyright (c) 2006 Simtec Electronics
      4//	Ben Dooks <ben@simtec.co.uk>
      5//
      6// Common code for SMDK2410 and SMDK2440 boards
      7//
      8// http://www.fluff.org/ben/smdk2440/
      9
     10#include <linux/kernel.h>
     11#include <linux/types.h>
     12#include <linux/interrupt.h>
     13#include <linux/list.h>
     14#include <linux/timer.h>
     15#include <linux/init.h>
     16#include <linux/gpio.h>
     17#include <linux/gpio/machine.h>
     18#include <linux/device.h>
     19#include <linux/platform_device.h>
     20
     21#include <linux/mtd/mtd.h>
     22#include <linux/mtd/rawnand.h>
     23#include <linux/mtd/nand-ecc-sw-hamming.h>
     24#include <linux/mtd/partitions.h>
     25#include <linux/io.h>
     26
     27#include <asm/mach/arch.h>
     28#include <asm/mach/map.h>
     29#include <asm/mach/irq.h>
     30
     31#include <asm/mach-types.h>
     32#include <asm/irq.h>
     33
     34#include "regs-gpio.h"
     35#include "gpio-samsung.h"
     36#include <linux/platform_data/leds-s3c24xx.h>
     37#include <linux/platform_data/mtd-nand-s3c2410.h>
     38
     39#include "gpio-cfg.h"
     40#include "devs.h"
     41#include "pm.h"
     42
     43#include "common-smdk-s3c24xx.h"
     44
     45/* LED devices */
     46
     47static struct gpiod_lookup_table smdk_led4_gpio_table = {
     48	.dev_id = "s3c24xx_led.0",
     49	.table = {
     50		GPIO_LOOKUP("GPF", 4, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
     51		{ },
     52	},
     53};
     54
     55static struct gpiod_lookup_table smdk_led5_gpio_table = {
     56	.dev_id = "s3c24xx_led.1",
     57	.table = {
     58		GPIO_LOOKUP("GPF", 5, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
     59		{ },
     60	},
     61};
     62
     63static struct gpiod_lookup_table smdk_led6_gpio_table = {
     64	.dev_id = "s3c24xx_led.2",
     65	.table = {
     66		GPIO_LOOKUP("GPF", 6, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
     67		{ },
     68	},
     69};
     70
     71static struct gpiod_lookup_table smdk_led7_gpio_table = {
     72	.dev_id = "s3c24xx_led.3",
     73	.table = {
     74		GPIO_LOOKUP("GPF", 7, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
     75		{ },
     76	},
     77};
     78
     79static struct s3c24xx_led_platdata smdk_pdata_led4 = {
     80	.name		= "led4",
     81	.def_trigger	= "timer",
     82};
     83
     84static struct s3c24xx_led_platdata smdk_pdata_led5 = {
     85	.name		= "led5",
     86	.def_trigger	= "nand-disk",
     87};
     88
     89static struct s3c24xx_led_platdata smdk_pdata_led6 = {
     90	.name		= "led6",
     91};
     92
     93static struct s3c24xx_led_platdata smdk_pdata_led7 = {
     94	.name		= "led7",
     95};
     96
     97static struct platform_device smdk_led4 = {
     98	.name		= "s3c24xx_led",
     99	.id		= 0,
    100	.dev		= {
    101		.platform_data = &smdk_pdata_led4,
    102	},
    103};
    104
    105static struct platform_device smdk_led5 = {
    106	.name		= "s3c24xx_led",
    107	.id		= 1,
    108	.dev		= {
    109		.platform_data = &smdk_pdata_led5,
    110	},
    111};
    112
    113static struct platform_device smdk_led6 = {
    114	.name		= "s3c24xx_led",
    115	.id		= 2,
    116	.dev		= {
    117		.platform_data = &smdk_pdata_led6,
    118	},
    119};
    120
    121static struct platform_device smdk_led7 = {
    122	.name		= "s3c24xx_led",
    123	.id		= 3,
    124	.dev		= {
    125		.platform_data = &smdk_pdata_led7,
    126	},
    127};
    128
    129/* NAND parititon from 2.4.18-swl5 */
    130
    131static struct mtd_partition smdk_default_nand_part[] = {
    132	[0] = {
    133		.name	= "Boot Agent",
    134		.size	= SZ_16K,
    135		.offset	= 0,
    136	},
    137	[1] = {
    138		.name	= "S3C2410 flash partition 1",
    139		.offset = 0,
    140		.size	= SZ_2M,
    141	},
    142	[2] = {
    143		.name	= "S3C2410 flash partition 2",
    144		.offset = SZ_4M,
    145		.size	= SZ_4M,
    146	},
    147	[3] = {
    148		.name	= "S3C2410 flash partition 3",
    149		.offset	= SZ_8M,
    150		.size	= SZ_2M,
    151	},
    152	[4] = {
    153		.name	= "S3C2410 flash partition 4",
    154		.offset = SZ_1M * 10,
    155		.size	= SZ_4M,
    156	},
    157	[5] = {
    158		.name	= "S3C2410 flash partition 5",
    159		.offset	= SZ_1M * 14,
    160		.size	= SZ_1M * 10,
    161	},
    162	[6] = {
    163		.name	= "S3C2410 flash partition 6",
    164		.offset	= SZ_1M * 24,
    165		.size	= SZ_1M * 24,
    166	},
    167	[7] = {
    168		.name	= "S3C2410 flash partition 7",
    169		.offset = SZ_1M * 48,
    170		.size	= MTDPART_SIZ_FULL,
    171	}
    172};
    173
    174static struct s3c2410_nand_set smdk_nand_sets[] = {
    175	[0] = {
    176		.name		= "NAND",
    177		.nr_chips	= 1,
    178		.nr_partitions	= ARRAY_SIZE(smdk_default_nand_part),
    179		.partitions	= smdk_default_nand_part,
    180	},
    181};
    182
    183/* choose a set of timings which should suit most 512Mbit
    184 * chips and beyond.
    185*/
    186
    187static struct s3c2410_platform_nand smdk_nand_info = {
    188	.tacls		= 20,
    189	.twrph0		= 60,
    190	.twrph1		= 20,
    191	.nr_sets	= ARRAY_SIZE(smdk_nand_sets),
    192	.sets		= smdk_nand_sets,
    193	.engine_type	= NAND_ECC_ENGINE_TYPE_SOFT,
    194};
    195
    196/* devices we initialise */
    197
    198static struct platform_device __initdata *smdk_devs[] = {
    199	&s3c_device_nand,
    200	&smdk_led4,
    201	&smdk_led5,
    202	&smdk_led6,
    203	&smdk_led7,
    204};
    205
    206void __init smdk_machine_init(void)
    207{
    208	if (machine_is_smdk2443())
    209		smdk_nand_info.twrph0 = 50;
    210
    211	s3c_nand_set_platdata(&smdk_nand_info);
    212
    213	/* Disable pull-up on the LED lines */
    214	s3c_gpio_setpull(S3C2410_GPF(4), S3C_GPIO_PULL_NONE);
    215	s3c_gpio_setpull(S3C2410_GPF(5), S3C_GPIO_PULL_NONE);
    216	s3c_gpio_setpull(S3C2410_GPF(6), S3C_GPIO_PULL_NONE);
    217	s3c_gpio_setpull(S3C2410_GPF(7), S3C_GPIO_PULL_NONE);
    218
    219	/* Add lookups for the lines */
    220	gpiod_add_lookup_table(&smdk_led4_gpio_table);
    221	gpiod_add_lookup_table(&smdk_led5_gpio_table);
    222	gpiod_add_lookup_table(&smdk_led6_gpio_table);
    223	gpiod_add_lookup_table(&smdk_led7_gpio_table);
    224
    225	platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));
    226
    227	s3c_pm_init();
    228}