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

mach-smdk2440.c (4183B)


      1// SPDX-License-Identifier: GPL-2.0
      2// linux/arch/arm/mach-s3c2440/mach-smdk2440.c
      3//
      4// Copyright (c) 2004-2005 Simtec Electronics
      5//	Ben Dooks <ben@simtec.co.uk>
      6//
      7// http://www.fluff.org/ben/smdk2440/
      8//
      9// Thanks to Dimity Andric and TomTom for the loan of an SMDK2440.
     10
     11#include <linux/kernel.h>
     12#include <linux/types.h>
     13#include <linux/interrupt.h>
     14#include <linux/list.h>
     15#include <linux/timer.h>
     16#include <linux/init.h>
     17#include <linux/serial_core.h>
     18#include <linux/serial_s3c.h>
     19#include <linux/platform_device.h>
     20#include <linux/io.h>
     21
     22#include <asm/mach/arch.h>
     23#include <asm/mach/map.h>
     24#include <asm/mach/irq.h>
     25
     26#include <asm/irq.h>
     27#include <asm/mach-types.h>
     28
     29#include "regs-gpio.h"
     30#include "gpio-samsung.h"
     31#include "gpio-cfg.h"
     32
     33#include <linux/platform_data/fb-s3c2410.h>
     34#include <linux/platform_data/i2c-s3c2410.h>
     35
     36#include "devs.h"
     37#include "cpu.h"
     38
     39#include "s3c24xx.h"
     40#include "common-smdk-s3c24xx.h"
     41
     42static struct map_desc smdk2440_iodesc[] __initdata = {
     43	/* ISA IO Space map (memory space selected by A24) */
     44
     45	{
     46		.virtual	= (u32)S3C24XX_VA_ISA_BYTE,
     47		.pfn		= __phys_to_pfn(S3C2410_CS2),
     48		.length		= 0x10000,
     49		.type		= MT_DEVICE,
     50	}, {
     51		.virtual	= (u32)S3C24XX_VA_ISA_BYTE + 0x10000,
     52		.pfn		= __phys_to_pfn(S3C2410_CS2 + (1<<24)),
     53		.length		= SZ_4M,
     54		.type		= MT_DEVICE,
     55	}
     56};
     57
     58#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
     59#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
     60#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
     61
     62static struct s3c2410_uartcfg smdk2440_uartcfgs[] __initdata = {
     63	[0] = {
     64		.hwport	     = 0,
     65		.flags	     = 0,
     66		.ucon	     = 0x3c5,
     67		.ulcon	     = 0x03,
     68		.ufcon	     = 0x51,
     69	},
     70	[1] = {
     71		.hwport	     = 1,
     72		.flags	     = 0,
     73		.ucon	     = 0x3c5,
     74		.ulcon	     = 0x03,
     75		.ufcon	     = 0x51,
     76	},
     77	/* IR port */
     78	[2] = {
     79		.hwport	     = 2,
     80		.flags	     = 0,
     81		.ucon	     = 0x3c5,
     82		.ulcon	     = 0x43,
     83		.ufcon	     = 0x51,
     84	}
     85};
     86
     87/* LCD driver info */
     88
     89static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {
     90
     91	.lcdcon5	= S3C2410_LCDCON5_FRM565 |
     92			  S3C2410_LCDCON5_INVVLINE |
     93			  S3C2410_LCDCON5_INVVFRAME |
     94			  S3C2410_LCDCON5_PWREN |
     95			  S3C2410_LCDCON5_HWSWP,
     96
     97	.type		= S3C2410_LCDCON1_TFT,
     98
     99	.width		= 240,
    100	.height		= 320,
    101
    102	.pixclock	= 166667, /* HCLK 60 MHz, divisor 10 */
    103	.xres		= 240,
    104	.yres		= 320,
    105	.bpp		= 16,
    106	.left_margin	= 20,
    107	.right_margin	= 8,
    108	.hsync_len	= 4,
    109	.upper_margin	= 8,
    110	.lower_margin	= 7,
    111	.vsync_len	= 4,
    112};
    113
    114static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {
    115	.displays	= &smdk2440_lcd_cfg,
    116	.num_displays	= 1,
    117	.default_display = 0,
    118
    119#if 0
    120	/* currently setup by downloader */
    121	.gpccon		= 0xaa940659,
    122	.gpccon_mask	= 0xffffffff,
    123	.gpcup		= 0x0000ffff,
    124	.gpcup_mask	= 0xffffffff,
    125	.gpdcon		= 0xaa84aaa0,
    126	.gpdcon_mask	= 0xffffffff,
    127	.gpdup		= 0x0000faff,
    128	.gpdup_mask	= 0xffffffff,
    129
    130	.gpccon_reg	= S3C2410_GPCCON,
    131	.gpcup_reg	= S3C2410_GPCUP,
    132	.gpdcon_reg	= S3C2410_GPDCON,
    133	.gpdup_reg	= S3C2410_GPDUP,
    134#endif
    135
    136	.lpcsel		= ((0xCE6) & ~7) | 1<<4,
    137};
    138
    139static struct platform_device *smdk2440_devices[] __initdata = {
    140	&s3c_device_ohci,
    141	&s3c_device_lcd,
    142	&s3c_device_wdt,
    143	&s3c_device_i2c0,
    144	&s3c_device_iis,
    145};
    146
    147static void __init smdk2440_map_io(void)
    148{
    149	s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
    150	s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
    151	s3c24xx_set_timer_source(S3C24XX_PWM3, S3C24XX_PWM4);
    152}
    153
    154static void __init smdk2440_init_time(void)
    155{
    156	s3c2440_init_clocks(16934400);
    157	s3c24xx_timer_init();
    158}
    159
    160static void __init smdk2440_machine_init(void)
    161{
    162	s3c24xx_fb_set_platdata(&smdk2440_fb_info);
    163	s3c_i2c0_set_platdata(NULL);
    164	/* Configure the I2S pins (GPE0...GPE4) in correct mode */
    165	s3c_gpio_cfgall_range(S3C2410_GPE(0), 5, S3C_GPIO_SFN(2),
    166			      S3C_GPIO_PULL_NONE);
    167	platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
    168	smdk_machine_init();
    169}
    170
    171MACHINE_START(S3C2440, "SMDK2440")
    172	/* Maintainer: Ben Dooks <ben-linux@fluff.org> */
    173	.atag_offset	= 0x100,
    174	.nr_irqs	= NR_IRQS_S3C2440,
    175
    176	.init_irq	= s3c2440_init_irq,
    177	.map_io		= smdk2440_map_io,
    178	.init_machine	= smdk2440_machine_init,
    179	.init_time	= smdk2440_init_time,
    180MACHINE_END