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

simone.c (3310B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * arch/arm/mach-ep93xx/simone.c
      4 * Simplemachines Sim.One support.
      5 *
      6 * Copyright (C) 2010 Ryan Mallon
      7 *
      8 * Based on the 2.6.24.7 support:
      9 *   Copyright (C) 2009 Simplemachines
     10 *   MMC support by Peter Ivanov <ivanovp@gmail.com>, 2007
     11 */
     12
     13#include <linux/kernel.h>
     14#include <linux/init.h>
     15#include <linux/platform_device.h>
     16#include <linux/i2c.h>
     17#include <linux/mmc/host.h>
     18#include <linux/spi/spi.h>
     19#include <linux/spi/mmc_spi.h>
     20#include <linux/platform_data/video-ep93xx.h>
     21#include <linux/platform_data/spi-ep93xx.h>
     22#include <linux/gpio.h>
     23#include <linux/gpio/machine.h>
     24
     25#include "hardware.h"
     26#include "gpio-ep93xx.h"
     27
     28#include <asm/mach-types.h>
     29#include <asm/mach/arch.h>
     30
     31#include "soc.h"
     32
     33static struct ep93xx_eth_data __initdata simone_eth_data = {
     34	.phy_id		= 1,
     35};
     36
     37static struct ep93xxfb_mach_info __initdata simone_fb_info = {
     38	.flags		= EP93XXFB_USE_SDCSN0 | EP93XXFB_PCLK_FALLING,
     39};
     40
     41static struct mmc_spi_platform_data simone_mmc_spi_data = {
     42	.detect_delay	= 500,
     43	.ocr_mask	= MMC_VDD_32_33 | MMC_VDD_33_34,
     44};
     45
     46static struct gpiod_lookup_table simone_mmc_spi_gpio_table = {
     47	.dev_id = "mmc_spi.0", /* "mmc_spi" @ CS0 */
     48	.table = {
     49		/* Card detect */
     50		GPIO_LOOKUP_IDX("A", 0, NULL, 0, GPIO_ACTIVE_LOW),
     51		{ },
     52	},
     53};
     54
     55static struct spi_board_info simone_spi_devices[] __initdata = {
     56	{
     57		.modalias		= "mmc_spi",
     58		.platform_data		= &simone_mmc_spi_data,
     59		/*
     60		 * We use 10 MHz even though the maximum is 3.7 MHz. The driver
     61		 * will limit it automatically to max. frequency.
     62		 */
     63		.max_speed_hz		= 10 * 1000 * 1000,
     64		.bus_num		= 0,
     65		.chip_select		= 0,
     66		.mode			= SPI_MODE_3,
     67	},
     68};
     69
     70/*
     71 * Up to v1.3, the Sim.One used SFRMOUT as SD card chip select, but this goes
     72 * low between multi-message command blocks. From v1.4, it uses a GPIO instead.
     73 * v1.3 parts will still work, since the signal on SFRMOUT is automatic.
     74 */
     75static struct gpiod_lookup_table simone_spi_cs_gpio_table = {
     76	.dev_id = "spi0",
     77	.table = {
     78		GPIO_LOOKUP("A", 1, "cs", GPIO_ACTIVE_LOW),
     79		{ },
     80	},
     81};
     82
     83static struct ep93xx_spi_info simone_spi_info __initdata = {
     84	.use_dma = 1,
     85};
     86
     87static struct i2c_board_info __initdata simone_i2c_board_info[] = {
     88	{
     89		I2C_BOARD_INFO("ds1337", 0x68),
     90	},
     91};
     92
     93static struct platform_device simone_audio_device = {
     94	.name		= "simone-audio",
     95	.id		= -1,
     96};
     97
     98static void __init simone_register_audio(void)
     99{
    100	ep93xx_register_ac97();
    101	platform_device_register(&simone_audio_device);
    102}
    103
    104static void __init simone_init_machine(void)
    105{
    106	ep93xx_init_devices();
    107	ep93xx_register_flash(2, EP93XX_CS6_PHYS_BASE, SZ_8M);
    108	ep93xx_register_eth(&simone_eth_data, 1);
    109	ep93xx_register_fb(&simone_fb_info);
    110	ep93xx_register_i2c(simone_i2c_board_info,
    111			    ARRAY_SIZE(simone_i2c_board_info));
    112	gpiod_add_lookup_table(&simone_mmc_spi_gpio_table);
    113	gpiod_add_lookup_table(&simone_spi_cs_gpio_table);
    114	ep93xx_register_spi(&simone_spi_info, simone_spi_devices,
    115			    ARRAY_SIZE(simone_spi_devices));
    116	simone_register_audio();
    117}
    118
    119MACHINE_START(SIM_ONE, "Simplemachines Sim.One Board")
    120	/* Maintainer: Ryan Mallon */
    121	.atag_offset	= 0x100,
    122	.nr_irqs	= NR_EP93XX_IRQS,
    123	.map_io		= ep93xx_map_io,
    124	.init_irq	= ep93xx_init_irq,
    125	.init_time	= ep93xx_timer_init,
    126	.init_machine	= simone_init_machine,
    127	.restart	= ep93xx_restart,
    128MACHINE_END