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

giu.c (2137B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  NEC VR4100 series GIU 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/giu.h>
     15#include <asm/vr41xx/irq.h>
     16
     17static struct resource giu_50pins_pullupdown_resource[] __initdata = {
     18	{
     19		.start	= 0x0b000100,
     20		.end	= 0x0b00011f,
     21		.flags	= IORESOURCE_MEM,
     22	},
     23	{
     24		.start	= 0x0b0002e0,
     25		.end	= 0x0b0002e3,
     26		.flags	= IORESOURCE_MEM,
     27	},
     28	{
     29		.start	= GIUINT_IRQ,
     30		.end	= GIUINT_IRQ,
     31		.flags	= IORESOURCE_IRQ,
     32	},
     33};
     34
     35static struct resource giu_36pins_resource[] __initdata = {
     36	{
     37		.start	= 0x0f000140,
     38		.end	= 0x0f00015f,
     39		.flags	= IORESOURCE_MEM,
     40	},
     41	{
     42		.start	= GIUINT_IRQ,
     43		.end	= GIUINT_IRQ,
     44		.flags	= IORESOURCE_IRQ,
     45	},
     46};
     47
     48static struct resource giu_48pins_resource[] __initdata = {
     49	{
     50		.start	= 0x0f000140,
     51		.end	= 0x0f000167,
     52		.flags	= IORESOURCE_MEM,
     53	},
     54	{
     55		.start	= GIUINT_IRQ,
     56		.end	= GIUINT_IRQ,
     57		.flags	= IORESOURCE_IRQ,
     58	},
     59};
     60
     61static int __init vr41xx_giu_add(void)
     62{
     63	struct platform_device *pdev;
     64	struct resource *res;
     65	unsigned int num;
     66	int retval;
     67
     68	pdev = platform_device_alloc("GIU", -1);
     69	if (!pdev)
     70		return -ENOMEM;
     71
     72	switch (current_cpu_type()) {
     73	case CPU_VR4111:
     74	case CPU_VR4121:
     75		pdev->id = GPIO_50PINS_PULLUPDOWN;
     76		res = giu_50pins_pullupdown_resource;
     77		num = ARRAY_SIZE(giu_50pins_pullupdown_resource);
     78		break;
     79	case CPU_VR4122:
     80	case CPU_VR4131:
     81		pdev->id = GPIO_36PINS;
     82		res = giu_36pins_resource;
     83		num = ARRAY_SIZE(giu_36pins_resource);
     84		break;
     85	case CPU_VR4133:
     86		pdev->id = GPIO_48PINS_EDGE_SELECT;
     87		res = giu_48pins_resource;
     88		num = ARRAY_SIZE(giu_48pins_resource);
     89		break;
     90	default:
     91		retval = -ENODEV;
     92		goto err_free_device;
     93	}
     94
     95	retval = platform_device_add_resources(pdev, res, num);
     96	if (retval)
     97		goto err_free_device;
     98
     99	retval = platform_device_add(pdev);
    100	if (retval)
    101		goto err_free_device;
    102
    103	return 0;
    104
    105err_free_device:
    106	platform_device_put(pdev);
    107
    108	return retval;
    109}
    110device_initcall(vr41xx_giu_add);