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

board-dt.c (1966B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  Author: Alexander Shiyan <shc_work@mail.ru>, 2016
      4 */
      5
      6#include <linux/io.h>
      7#include <linux/of_fdt.h>
      8#include <linux/platform_device.h>
      9#include <linux/random.h>
     10#include <linux/sizes.h>
     11
     12#include <linux/mfd/syscon/clps711x.h>
     13
     14#include <asm/system_info.h>
     15#include <asm/system_misc.h>
     16#include <asm/mach/arch.h>
     17#include <asm/mach/map.h>
     18
     19#define CLPS711X_VIRT_BASE	IOMEM(0xfeff4000)
     20#define CLPS711X_PHYS_BASE	(0x80000000)
     21# define SYSFLG1		(0x0140)
     22# define HALT			(0x0800)
     23# define UNIQID			(0x2440)
     24# define RANDID0		(0x2700)
     25# define RANDID1		(0x2704)
     26# define RANDID2		(0x2708)
     27# define RANDID3		(0x270c)
     28
     29static struct map_desc clps711x_io_desc __initdata = {
     30	.virtual	= (unsigned long)CLPS711X_VIRT_BASE,
     31	.pfn		= __phys_to_pfn(CLPS711X_PHYS_BASE),
     32	.length		= 48 * SZ_1K,
     33	.type		= MT_DEVICE,
     34};
     35
     36static void __init clps711x_map_io(void)
     37{
     38	iotable_init(&clps711x_io_desc, 1);
     39}
     40
     41static const struct resource clps711x_cpuidle_res =
     42	DEFINE_RES_MEM(CLPS711X_PHYS_BASE + HALT, SZ_128);
     43
     44static void __init clps711x_init(void)
     45{
     46	u32 id[5];
     47
     48	id[0] = readl(CLPS711X_VIRT_BASE + UNIQID);
     49	id[1] = readl(CLPS711X_VIRT_BASE + RANDID0);
     50	id[2] = readl(CLPS711X_VIRT_BASE + RANDID1);
     51	id[3] = readl(CLPS711X_VIRT_BASE + RANDID2);
     52	id[4] = readl(CLPS711X_VIRT_BASE + RANDID3);
     53	system_rev = SYSFLG1_VERID(readl(CLPS711X_VIRT_BASE + SYSFLG1));
     54
     55	add_device_randomness(id, sizeof(id));
     56
     57	system_serial_low = id[0];
     58
     59	platform_device_register_simple("clps711x-cpuidle", PLATFORM_DEVID_NONE,
     60					&clps711x_cpuidle_res, 1);
     61}
     62
     63static void clps711x_restart(enum reboot_mode mode, const char *cmd)
     64{
     65	soft_restart(0);
     66}
     67
     68static const char *const clps711x_compat[] __initconst = {
     69	"cirrus,ep7209",
     70	NULL
     71};
     72
     73DT_MACHINE_START(CLPS711X_DT, "Cirrus Logic CLPS711X (Device Tree Support)")
     74	.dt_compat	= clps711x_compat,
     75	.map_io		= clps711x_map_io,
     76	.init_late	= clps711x_init,
     77	.restart	= clps711x_restart,
     78MACHINE_END