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

rtc.c (1932B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  NEC VR4100 series RTC platform device.
      4 *
      5 *  Copyright (C) 2007	Yoichi Yuasa <yuasa@linux-mips.org>
      6 */
      7#include <linux/errno.h>
      8#include <linux/init.h>
      9#include <linux/smp.h>
     10#include <linux/ioport.h>
     11#include <linux/platform_device.h>
     12
     13#include <asm/cpu.h>
     14#include <asm/vr41xx/irq.h>
     15
     16static struct resource rtc_type1_resource[] __initdata = {
     17	{
     18		.start	= 0x0b0000c0,
     19		.end	= 0x0b0000df,
     20		.flags	= IORESOURCE_MEM,
     21	},
     22	{
     23		.start	= 0x0b0001c0,
     24		.end	= 0x0b0001df,
     25		.flags	= IORESOURCE_MEM,
     26	},
     27	{
     28		.start	= ELAPSEDTIME_IRQ,
     29		.end	= ELAPSEDTIME_IRQ,
     30		.flags	= IORESOURCE_IRQ,
     31	},
     32	{
     33		.start	= RTCLONG1_IRQ,
     34		.end	= RTCLONG1_IRQ,
     35		.flags	= IORESOURCE_IRQ,
     36	},
     37};
     38
     39static struct resource rtc_type2_resource[] __initdata = {
     40	{
     41		.start	= 0x0f000100,
     42		.end	= 0x0f00011f,
     43		.flags	= IORESOURCE_MEM,
     44	},
     45	{
     46		.start	= 0x0f000120,
     47		.end	= 0x0f00013f,
     48		.flags	= IORESOURCE_MEM,
     49	},
     50	{
     51		.start	= ELAPSEDTIME_IRQ,
     52		.end	= ELAPSEDTIME_IRQ,
     53		.flags	= IORESOURCE_IRQ,
     54	},
     55	{
     56		.start	= RTCLONG1_IRQ,
     57		.end	= RTCLONG1_IRQ,
     58		.flags	= IORESOURCE_IRQ,
     59	},
     60};
     61
     62static int __init vr41xx_rtc_add(void)
     63{
     64	struct platform_device *pdev;
     65	struct resource *res;
     66	unsigned int num;
     67	int retval;
     68
     69	pdev = platform_device_alloc("RTC", -1);
     70	if (!pdev)
     71		return -ENOMEM;
     72
     73	switch (current_cpu_type()) {
     74	case CPU_VR4111:
     75	case CPU_VR4121:
     76		res = rtc_type1_resource;
     77		num = ARRAY_SIZE(rtc_type1_resource);
     78		break;
     79	case CPU_VR4122:
     80	case CPU_VR4131:
     81	case CPU_VR4133:
     82		res = rtc_type2_resource;
     83		num = ARRAY_SIZE(rtc_type2_resource);
     84		break;
     85	default:
     86		retval = -ENODEV;
     87		goto err_free_device;
     88	}
     89
     90	retval = platform_device_add_resources(pdev, res, num);
     91	if (retval)
     92		goto err_free_device;
     93
     94	retval = platform_device_add(pdev);
     95	if (retval)
     96		goto err_free_device;
     97
     98	return 0;
     99
    100err_free_device:
    101	platform_device_put(pdev);
    102
    103	return retval;
    104}
    105device_initcall(vr41xx_rtc_add);