linux/arch/sh/kernel/cpu/sh5/setup-sh5.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * SH5-101/SH5-103 CPU Setup
   4 *
   5 *  Copyright (C) 2009  Paul Mundt
   6 */
   7#include <linux/platform_device.h>
   8#include <linux/init.h>
   9#include <linux/serial.h>
  10#include <linux/serial_sci.h>
  11#include <linux/io.h>
  12#include <linux/mm.h>
  13#include <linux/sh_timer.h>
  14#include <asm/addrspace.h>
  15
  16static struct plat_sci_port scif0_platform_data = {
  17        .flags          = UPF_IOREMAP,
  18        .scscr          = SCSCR_REIE,
  19        .type           = PORT_SCIF,
  20};
  21
  22static struct resource scif0_resources[] = {
  23        DEFINE_RES_MEM(PHYS_PERIPHERAL_BLOCK + 0x01030000, 0x100),
  24        DEFINE_RES_IRQ(39),
  25        DEFINE_RES_IRQ(40),
  26        DEFINE_RES_IRQ(42),
  27};
  28
  29static struct platform_device scif0_device = {
  30        .name           = "sh-sci",
  31        .id             = 0,
  32        .resource       = scif0_resources,
  33        .num_resources  = ARRAY_SIZE(scif0_resources),
  34        .dev            = {
  35                .platform_data  = &scif0_platform_data,
  36        },
  37};
  38
  39static struct resource rtc_resources[] = {
  40        [0] = {
  41                .start  = PHYS_PERIPHERAL_BLOCK + 0x01040000,
  42                .end    = PHYS_PERIPHERAL_BLOCK + 0x01040000 + 0x58 - 1,
  43                .flags  = IORESOURCE_IO,
  44        },
  45        [1] = {
  46                /* Period IRQ */
  47                .start  = IRQ_PRI,
  48                .flags  = IORESOURCE_IRQ,
  49        },
  50        [2] = {
  51                /* Carry IRQ */
  52                .start  = IRQ_CUI,
  53                .flags  = IORESOURCE_IRQ,
  54        },
  55        [3] = {
  56                /* Alarm IRQ */
  57                .start  = IRQ_ATI,
  58                .flags  = IORESOURCE_IRQ,
  59        },
  60};
  61
  62static struct platform_device rtc_device = {
  63        .name           = "sh-rtc",
  64        .id             = -1,
  65        .num_resources  = ARRAY_SIZE(rtc_resources),
  66        .resource       = rtc_resources,
  67};
  68
  69#define TMU_BLOCK_OFF   0x01020000
  70#define TMU_BASE        PHYS_PERIPHERAL_BLOCK + TMU_BLOCK_OFF
  71
  72static struct sh_timer_config tmu0_platform_data = {
  73        .channels_mask = 7,
  74};
  75
  76static struct resource tmu0_resources[] = {
  77        DEFINE_RES_MEM(TMU_BASE, 0x30),
  78        DEFINE_RES_IRQ(IRQ_TUNI0),
  79        DEFINE_RES_IRQ(IRQ_TUNI1),
  80        DEFINE_RES_IRQ(IRQ_TUNI2),
  81};
  82
  83static struct platform_device tmu0_device = {
  84        .name           = "sh-tmu",
  85        .id             = 0,
  86        .dev = {
  87                .platform_data  = &tmu0_platform_data,
  88        },
  89        .resource       = tmu0_resources,
  90        .num_resources  = ARRAY_SIZE(tmu0_resources),
  91};
  92
  93static struct platform_device *sh5_early_devices[] __initdata = {
  94        &scif0_device,
  95        &tmu0_device,
  96};
  97
  98static struct platform_device *sh5_devices[] __initdata = {
  99        &rtc_device,
 100};
 101
 102static int __init sh5_devices_setup(void)
 103{
 104        int ret;
 105
 106        ret = platform_add_devices(sh5_early_devices,
 107                                   ARRAY_SIZE(sh5_early_devices));
 108        if (unlikely(ret != 0))
 109                return ret;
 110
 111        return platform_add_devices(sh5_devices,
 112                                    ARRAY_SIZE(sh5_devices));
 113}
 114arch_initcall(sh5_devices_setup);
 115
 116void __init plat_early_device_setup(void)
 117{
 118        early_platform_add_devices(sh5_early_devices,
 119                                   ARRAY_SIZE(sh5_early_devices));
 120}
 121