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

setup.c (5793B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * arch/sh/boards/mach-x3proto/setup.c
      4 *
      5 * Renesas SH-X3 Prototype Board Support.
      6 *
      7 * Copyright (C) 2007 - 2010  Paul Mundt
      8 */
      9#include <linux/init.h>
     10#include <linux/platform_device.h>
     11#include <linux/kernel.h>
     12#include <linux/io.h>
     13#include <linux/smc91x.h>
     14#include <linux/irq.h>
     15#include <linux/interrupt.h>
     16#include <linux/input.h>
     17#include <linux/usb/r8a66597.h>
     18#include <linux/usb/m66592.h>
     19#include <linux/gpio.h>
     20#include <linux/gpio_keys.h>
     21#include <mach/ilsel.h>
     22#include <mach/hardware.h>
     23#include <asm/smp-ops.h>
     24
     25static struct resource heartbeat_resources[] = {
     26	[0] = {
     27		.start	= 0xb8140020,
     28		.end	= 0xb8140020,
     29		.flags	= IORESOURCE_MEM,
     30	},
     31};
     32
     33static struct platform_device heartbeat_device = {
     34	.name		= "heartbeat",
     35	.id		= -1,
     36	.num_resources	= ARRAY_SIZE(heartbeat_resources),
     37	.resource	= heartbeat_resources,
     38};
     39
     40static struct smc91x_platdata smc91x_info = {
     41	.flags	= SMC91X_USE_16BIT | SMC91X_NOWAIT,
     42};
     43
     44static struct resource smc91x_resources[] = {
     45	[0] = {
     46		.start		= 0x18000300,
     47		.end		= 0x18000300 + 0x10 - 1,
     48		.flags		= IORESOURCE_MEM,
     49	},
     50	[1] = {
     51		/* Filled in by ilsel */
     52		.flags		= IORESOURCE_IRQ,
     53	},
     54};
     55
     56static struct platform_device smc91x_device = {
     57	.name		= "smc91x",
     58	.id		= -1,
     59	.resource	= smc91x_resources,
     60	.num_resources	= ARRAY_SIZE(smc91x_resources),
     61	.dev	= {
     62		.platform_data = &smc91x_info,
     63	},
     64};
     65
     66static struct r8a66597_platdata r8a66597_data = {
     67	.xtal = R8A66597_PLATDATA_XTAL_12MHZ,
     68	.vif = 1,
     69};
     70
     71static struct resource r8a66597_usb_host_resources[] = {
     72	[0] = {
     73		.start	= 0x18040000,
     74		.end	= 0x18080000 - 1,
     75		.flags	= IORESOURCE_MEM,
     76	},
     77	[1] = {
     78		/* Filled in by ilsel */
     79		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_LOW,
     80	},
     81};
     82
     83static struct platform_device r8a66597_usb_host_device = {
     84	.name		= "r8a66597_hcd",
     85	.id		= -1,
     86	.dev = {
     87		.dma_mask		= NULL,		/* don't use dma */
     88		.coherent_dma_mask	= 0xffffffff,
     89		.platform_data		= &r8a66597_data,
     90	},
     91	.num_resources	= ARRAY_SIZE(r8a66597_usb_host_resources),
     92	.resource	= r8a66597_usb_host_resources,
     93};
     94
     95static struct m66592_platdata usbf_platdata = {
     96	.xtal = M66592_PLATDATA_XTAL_24MHZ,
     97	.vif = 1,
     98};
     99
    100static struct resource m66592_usb_peripheral_resources[] = {
    101	[0] = {
    102		.name	= "m66592_udc",
    103		.start	= 0x18080000,
    104		.end	= 0x180c0000 - 1,
    105		.flags	= IORESOURCE_MEM,
    106	},
    107	[1] = {
    108		.name	= "m66592_udc",
    109		/* Filled in by ilsel */
    110		.flags	= IORESOURCE_IRQ,
    111	},
    112};
    113
    114static struct platform_device m66592_usb_peripheral_device = {
    115	.name		= "m66592_udc",
    116	.id		= -1,
    117	.dev = {
    118		.dma_mask		= NULL,		/* don't use dma */
    119		.coherent_dma_mask	= 0xffffffff,
    120		.platform_data		= &usbf_platdata,
    121	},
    122	.num_resources	= ARRAY_SIZE(m66592_usb_peripheral_resources),
    123	.resource	= m66592_usb_peripheral_resources,
    124};
    125
    126static struct gpio_keys_button baseboard_buttons[NR_BASEBOARD_GPIOS] = {
    127	{
    128		.desc		= "key44",
    129		.code		= KEY_POWER,
    130		.active_low	= 1,
    131		.wakeup		= 1,
    132	}, {
    133		.desc		= "key43",
    134		.code		= KEY_SUSPEND,
    135		.active_low	= 1,
    136		.wakeup		= 1,
    137	}, {
    138		.desc		= "key42",
    139		.code		= KEY_KATAKANAHIRAGANA,
    140		.active_low	= 1,
    141	}, {
    142		.desc		= "key41",
    143		.code		= KEY_SWITCHVIDEOMODE,
    144		.active_low	= 1,
    145	}, {
    146		.desc		= "key34",
    147		.code		= KEY_F12,
    148		.active_low	= 1,
    149	}, {
    150		.desc		= "key33",
    151		.code		= KEY_F11,
    152		.active_low	= 1,
    153	}, {
    154		.desc		= "key32",
    155		.code		= KEY_F10,
    156		.active_low	= 1,
    157	}, {
    158		.desc		= "key31",
    159		.code		= KEY_F9,
    160		.active_low	= 1,
    161	}, {
    162		.desc		= "key24",
    163		.code		= KEY_F8,
    164		.active_low	= 1,
    165	}, {
    166		.desc		= "key23",
    167		.code		= KEY_F7,
    168		.active_low	= 1,
    169	}, {
    170		.desc		= "key22",
    171		.code		= KEY_F6,
    172		.active_low	= 1,
    173	}, {
    174		.desc		= "key21",
    175		.code		= KEY_F5,
    176		.active_low	= 1,
    177	}, {
    178		.desc		= "key14",
    179		.code		= KEY_F4,
    180		.active_low	= 1,
    181	}, {
    182		.desc		= "key13",
    183		.code		= KEY_F3,
    184		.active_low	= 1,
    185	}, {
    186		.desc		= "key12",
    187		.code		= KEY_F2,
    188		.active_low	= 1,
    189	}, {
    190		.desc		= "key11",
    191		.code		= KEY_F1,
    192		.active_low	= 1,
    193	},
    194};
    195
    196static struct gpio_keys_platform_data baseboard_buttons_data = {
    197	.buttons	= baseboard_buttons,
    198	.nbuttons	= ARRAY_SIZE(baseboard_buttons),
    199};
    200
    201static struct platform_device baseboard_buttons_device = {
    202	.name		= "gpio-keys",
    203	.id		= -1,
    204	.dev		= {
    205		.platform_data	= &baseboard_buttons_data,
    206	},
    207};
    208
    209static struct platform_device *x3proto_devices[] __initdata = {
    210	&heartbeat_device,
    211	&smc91x_device,
    212	&r8a66597_usb_host_device,
    213	&m66592_usb_peripheral_device,
    214	&baseboard_buttons_device,
    215};
    216
    217static void __init x3proto_init_irq(void)
    218{
    219	plat_irq_setup_pins(IRQ_MODE_IRL3210);
    220
    221	/* Set ICR0.LVLMODE */
    222	__raw_writel(__raw_readl(0xfe410000) | (1 << 21), 0xfe410000);
    223}
    224
    225static int __init x3proto_devices_setup(void)
    226{
    227	int ret, i;
    228
    229	/*
    230	 * IRLs are only needed for ILSEL mappings, so flip over the INTC
    231	 * pins at a later point to enable the GPIOs to settle.
    232	 */
    233	x3proto_init_irq();
    234
    235	/*
    236	 * Now that ILSELs are available, set up the baseboard GPIOs.
    237	 */
    238	ret = x3proto_gpio_setup();
    239	if (unlikely(ret))
    240		return ret;
    241
    242	/*
    243	 * Propagate dynamic GPIOs for the baseboard button device.
    244	 */
    245	for (i = 0; i < ARRAY_SIZE(baseboard_buttons); i++)
    246		baseboard_buttons[i].gpio = x3proto_gpio_chip.base + i;
    247
    248	r8a66597_usb_host_resources[1].start =
    249		r8a66597_usb_host_resources[1].end = ilsel_enable(ILSEL_USBH_I);
    250
    251	m66592_usb_peripheral_resources[1].start =
    252		m66592_usb_peripheral_resources[1].end = ilsel_enable(ILSEL_USBP_I);
    253
    254	smc91x_resources[1].start =
    255		smc91x_resources[1].end = ilsel_enable(ILSEL_LAN);
    256
    257	return platform_add_devices(x3proto_devices,
    258				    ARRAY_SIZE(x3proto_devices));
    259}
    260device_initcall(x3proto_devices_setup);
    261
    262static void __init x3proto_setup(char **cmdline_p)
    263{
    264	register_smp_ops(&shx3_smp_ops);
    265}
    266
    267static struct sh_machine_vector mv_x3proto __initmv = {
    268	.mv_name		= "x3proto",
    269	.mv_setup		= x3proto_setup,
    270};