Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
9dd289a4
Commit
9dd289a4
authored
Oct 08, 2015
by
Arnd Bergmann
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'renesas/cleanup' into next/dt
Dependency for renesas/dt
parents
a362ec8f
04418c23
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
4 additions
and
2687 deletions
+4
-2687
Documentation/devicetree/bindings/arm/shmobile.txt
Documentation/devicetree/bindings/arm/shmobile.txt
+0
-6
MAINTAINERS
MAINTAINERS
+0
-2
arch/arm/Kconfig
arch/arm/Kconfig
+1
-25
arch/arm/Kconfig.debug
arch/arm/Kconfig.debug
+1
-2
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/Makefile
+0
-3
arch/arm/boot/dts/r8a7778-bockw-reference.dts
arch/arm/boot/dts/r8a7778-bockw-reference.dts
+0
-139
arch/arm/configs/bockw_defconfig
arch/arm/configs/bockw_defconfig
+0
-133
arch/arm/mach-shmobile/Kconfig
arch/arm/mach-shmobile/Kconfig
+0
-73
arch/arm/mach-shmobile/Makefile
arch/arm/mach-shmobile/Makefile
+1
-13
arch/arm/mach-shmobile/Makefile.boot
arch/arm/mach-shmobile/Makefile.boot
+0
-12
arch/arm/mach-shmobile/board-bockw-reference.c
arch/arm/mach-shmobile/board-bockw-reference.c
+0
-86
arch/arm/mach-shmobile/board-bockw.c
arch/arm/mach-shmobile/board-bockw.c
+0
-737
arch/arm/mach-shmobile/clock-r8a7778.c
arch/arm/mach-shmobile/clock-r8a7778.c
+0
-342
arch/arm/mach-shmobile/clock.c
arch/arm/mach-shmobile/clock.c
+0
-47
arch/arm/mach-shmobile/clock.h
arch/arm/mach-shmobile/clock.h
+0
-42
arch/arm/mach-shmobile/common.h
arch/arm/mach-shmobile/common.h
+0
-5
arch/arm/mach-shmobile/console.c
arch/arm/mach-shmobile/console.c
+0
-27
arch/arm/mach-shmobile/intc.h
arch/arm/mach-shmobile/intc.h
+0
-295
arch/arm/mach-shmobile/pm-rmobile.h
arch/arm/mach-shmobile/pm-rmobile.h
+0
-9
arch/arm/mach-shmobile/r8a7778.h
arch/arm/mach-shmobile/r8a7778.h
+0
-78
arch/arm/mach-shmobile/r8a7779.h
arch/arm/mach-shmobile/r8a7779.h
+0
-2
arch/arm/mach-shmobile/setup-r8a7778.c
arch/arm/mach-shmobile/setup-r8a7778.c
+1
-559
arch/arm/mach-shmobile/sh-gpio.h
arch/arm/mach-shmobile/sh-gpio.h
+0
-29
arch/arm/mach-shmobile/timer.c
arch/arm/mach-shmobile/timer.c
+0
-21
No files found.
Documentation/devicetree/bindings/arm/shmobile.txt
View file @
9dd289a4
...
...
@@ -39,8 +39,6 @@ Boards:
compatible = "renesas,armadillo800eva"
- BOCK-W
compatible = "renesas,bockw", "renesas,r8a7778"
- BOCK-W - Reference Device Tree Implementation
compatible = "renesas,bockw-reference", "renesas,r8a7778"
- Genmai (RTK772100BC00000BR)
compatible = "renesas,genmai", "renesas,r7s72100"
- Gose
...
...
@@ -57,7 +55,3 @@ Boards:
compatible = "renesas,lager", "renesas,r8a7790"
- Marzen
compatible = "renesas,marzen", "renesas,r8a7779"
Note: Reference Device Tree Implementations are temporary implementations
to ease the migration from platform devices to Device Tree, and are
intended to be removed in the future.
MAINTAINERS
View file @
9dd289a4
...
...
@@ -1496,8 +1496,6 @@ F: arch/arm/boot/dts/emev2*
F: arch/arm/boot/dts/r7s*
F: arch/arm/boot/dts/r8a*
F: arch/arm/boot/dts/sh*
F: arch/arm/configs/bockw_defconfig
F: arch/arm/configs/marzen_defconfig
F: arch/arm/configs/shmobile_defconfig
F: arch/arm/include/debug/renesas-scif.S
F: arch/arm/mach-shmobile/
...
...
arch/arm/Kconfig
View file @
9dd289a4
...
...
@@ -621,28 +621,6 @@ config ARCH_PXA
help
Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
config ARCH_SHMOBILE_LEGACY
bool "Renesas ARM SoCs (non-multiplatform)"
select ARCH_SHMOBILE
select ARM_PATCH_PHYS_VIRT if MMU
select CLKDEV_LOOKUP
select CPU_V7
select GENERIC_CLOCKEVENTS
select HAVE_ARM_SCU if SMP
select HAVE_ARM_TWD if SMP
select HAVE_SMP
select MIGHT_HAVE_CACHE_L2X0
select MULTI_IRQ_HANDLER
select NO_IOPORT_MAP
select PINCTRL
select PM_GENERIC_DOMAINS if PM
select SH_CLK_CPG
select SPARSE_IRQ
help
Support for Renesas ARM SoC platforms using a non-multiplatform
kernel. This includes the SH-Mobile, R-Mobile, EMMA-Mobile, R-Car
and RZ families.
config ARCH_RPC
bool "RiscPC"
select ARCH_ACORN
...
...
@@ -1534,7 +1512,6 @@ config HZ_FIXED
default 200 if ARCH_EBSA110 || ARCH_S3C24XX || \
ARCH_S5PV210 || ARCH_EXYNOS4
default 128 if SOC_AT91RM9200
default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE_LEGACY
default 0
choice
...
...
@@ -1752,8 +1729,7 @@ config ARM_MODULE_PLTS
source "mm/Kconfig"
config FORCE_MAX_ZONEORDER
int "Maximum zone order" if ARCH_SHMOBILE_LEGACY
range 11 64 if ARCH_SHMOBILE_LEGACY
int "Maximum zone order"
default "12" if SOC_AM33XX
default "9" if SA1111 || ARCH_EFM32
default "11"
...
...
arch/arm/Kconfig.debug
View file @
9dd289a4
...
...
@@ -1621,8 +1621,7 @@ config DEBUG_UNCOMPRESS
config UNCOMPRESS_INCLUDE
string
default "debug/uncompress.h" if ARCH_MULTIPLATFORM || ARCH_MSM || \
PLAT_SAMSUNG || ARM_SINGLE_ARMV7M || \
ARCH_SHMOBILE_LEGACY
PLAT_SAMSUNG || ARM_SINGLE_ARMV7M
default "mach/uncompress.h"
config EARLY_PRINTK
...
...
arch/arm/boot/dts/Makefile
View file @
9dd289a4
...
...
@@ -522,9 +522,6 @@ dtb-$(CONFIG_ARCH_S5PV210) += \
s5pv210-smdkc110.dtb
\
s5pv210-smdkv210.dtb
\
s5pv210-torbreck.dtb
dtb-$(CONFIG_ARCH_SHMOBILE_LEGACY)
+=
\
r8a7778-bockw.dtb
\
r8a7778-bockw-reference.dtb
dtb-$(CONFIG_ARCH_SHMOBILE_MULTI)
+=
\
emev2-kzm9d.dtb
\
r7s72100-genmai.dtb
\
...
...
arch/arm/boot/dts/r8a7778-bockw-reference.dts
deleted
100644 → 0
View file @
a362ec8f
/*
*
Reference
Device
Tree
Source
for
the
Bock
-
W
board
*
*
Copyright
(
C
)
2013
Renesas
Solutions
Corp
.
*
Copyright
(
C
)
2013
Kuninori
Morimoto
<
kuninori
.
morimoto
.
gx
@
renesas
.
com
>
*
*
based
on
r8a7779
*
*
Copyright
(
C
)
2013
Renesas
Solutions
Corp
.
*
Copyright
(
C
)
2013
Simon
Horman
*
*
This
file
is
licensed
under
the
terms
of
the
GNU
General
Public
License
*
version
2.
This
program
is
licensed
"as is"
without
any
warranty
of
any
*
kind
,
whether
express
or
implied
.
*/
/
dts
-
v1
/;
#
include
"r8a7778.dtsi"
#
include
<
dt
-
bindings
/
interrupt
-
controller
/
irq
.
h
>
#
include
<
dt
-
bindings
/
gpio
/
gpio
.
h
>
/
{
model
=
"bockw"
;
compatible
=
"renesas,bockw-reference"
,
"renesas,r8a7778"
;
aliases
{
serial0
=
&
scif0
;
};
chosen
{
bootargs
=
"ignore_loglevel root=/dev/nfs ip=dhcp rw"
;
stdout
-
path
=
&
scif0
;
};
memory
{
device_type
=
"memory"
;
reg
=
<
0x60000000
0x10000000
>;
};
fixedregulator3v3
:
fixedregulator
@
0
{
compatible
=
"regulator-fixed"
;
regulator
-
name
=
"fixed-3.3V"
;
regulator
-
min
-
microvolt
=
<
3300000
>;
regulator
-
max
-
microvolt
=
<
3300000
>;
regulator
-
boot
-
on
;
regulator
-
always
-
on
;
};
ethernet
@
18300000
{
compatible
=
"smsc,lan9220"
,
"smsc,lan9115"
;
reg
=
<
0x18300000
0x1000
>;
phy
-
mode
=
"mii"
;
interrupt
-
parent
=
<&
irqpin
>;
interrupts
=
<
0
IRQ_TYPE_EDGE_FALLING
>;
reg
-
io
-
width
=
<
4
>;
vddvario
-
supply
=
<&
fixedregulator3v3
>;
vdd33a
-
supply
=
<&
fixedregulator3v3
>;
};
};
&
mmcif
{
pinctrl
-
0
=
<&
mmc_pins
>;
pinctrl
-
names
=
"default"
;
vmmc
-
supply
=
<&
fixedregulator3v3
>;
bus
-
width
=
<
8
>;
broken
-
cd
;
status
=
"okay"
;
};
&
irqpin
{
status
=
"okay"
;
};
&
tmu0
{
status
=
"okay"
;
};
&
pfc
{
scif0_pins
:
serial0
{
renesas
,
groups
=
"scif0_data_a"
,
"scif0_ctrl"
;
renesas
,
function
=
"scif0"
;
};
mmc_pins
:
mmc
{
renesas
,
groups
=
"mmc_data8"
,
"mmc_ctrl"
;
renesas
,
function
=
"mmc"
;
};
sdhi0_pins
:
sd0
{
renesas
,
groups
=
"sdhi0_data4"
,
"sdhi0_ctrl"
,
"sdhi0_cd"
;
renesas
,
function
=
"sdhi0"
;
};
hspi0_pins
:
hspi0
{
renesas
,
groups
=
"hspi0_a"
;
renesas
,
function
=
"hspi0"
;
};
};
&
sdhi0
{
pinctrl
-
0
=
<&
sdhi0_pins
>;
pinctrl
-
names
=
"default"
;
vmmc
-
supply
=
<&
fixedregulator3v3
>;
bus
-
width
=
<
4
>;
status
=
"okay"
;
wp
-
gpios
=
<&
gpio3
18
GPIO_ACTIVE_HIGH
>;
};
&
hspi0
{
pinctrl
-
0
=
<&
hspi0_pins
>;
pinctrl
-
names
=
"default"
;
status
=
"okay"
;
flash
:
flash
@
0
{
#
address
-
cells
=
<
1
>;
#
size
-
cells
=
<
1
>;
compatible
=
"spansion,s25fl008k"
,
"jedec,spi-nor"
;
reg
=
<
0
>;
spi
-
max
-
frequency
=
<
104000000
>;
m25p
,
fast
-
read
;
partition
@
0
{
label
=
"data(spi)"
;
reg
=
<
0x00000000
0x00100000
>;
};
};
};
&
scif0
{
pinctrl
-
0
=
<&
scif0_pins
>;
pinctrl
-
names
=
"default"
;
status
=
"okay"
;
};
arch/arm/configs/bockw_defconfig
deleted
100644 → 0
View file @
a362ec8f
# CONFIG_ARM_PATCH_PHYS_VIRT is not set
CONFIG_KERNEL_LZMA=y
CONFIG_NO_HZ=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=16
CONFIG_SYSCTL_SYSCALL=y
CONFIG_EMBEDDED=y
CONFIG_SLAB=y
# CONFIG_IOSCHED_CFQ is not set
CONFIG_ARCH_SHMOBILE_LEGACY=y
CONFIG_ARCH_R8A7778=y
CONFIG_MACH_BOCKW=y
CONFIG_MEMORY_START=0x60000000
CONFIG_MEMORY_SIZE=0x10000000
CONFIG_SHMOBILE_TIMER_HZ=1024
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_EM_TIMER_STI is not set
CONFIG_ARM_ERRATA_430973=y
CONFIG_ARM_ERRATA_458693=y
CONFIG_ARM_ERRATA_460075=y
CONFIG_ARM_ERRATA_743622=y
CONFIG_ARM_ERRATA_754322=y
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
CONFIG_HIGHMEM=y
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_ARM_APPENDED_DTB=y
CONFIG_VFP=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_PM=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
# CONFIG_INET_LRO is not set
# CONFIG_INET_DIAG is not set
# CONFIG_IPV6 is not set
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_STANDALONE is not set
# CONFIG_PREVENT_FIRMWARE_BUILD is not set
# CONFIG_FW_LOADER is not set
CONFIG_MTD=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_CFI=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_M25P80=y
CONFIG_MTD_SPI_NOR=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_NETDEVICES=y
# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_CIRRUS is not set
# CONFIG_NET_VENDOR_FARADAY is not set
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_NET_VENDOR_MARVELL is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_NET_VENDOR_SEEQ is not set
CONFIG_SMSC911X=y
# CONFIG_NET_VENDOR_STMICRO is not set
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_INPUT is not set
# CONFIG_SERIO is not set
# CONFIG_VT is not set
# CONFIG_LEGACY_PTYS is not set
# CONFIG_DEVKMEM is not set
CONFIG_SERIAL_SH_SCI=y
CONFIG_SERIAL_SH_SCI_NR_UARTS=6
CONFIG_SERIAL_SH_SCI_CONSOLE=y
# CONFIG_HW_RANDOM is not set
# CONFIG_HWMON is not set
CONFIG_I2C=y
CONFIG_I2C_RCAR=y
CONFIG_GPIO_RCAR=y
CONFIG_REGULATOR=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_V4L_PLATFORM_DRIVERS=y
CONFIG_SOC_CAMERA=y
CONFIG_VIDEO_RCAR_VIN=y
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
CONFIG_VIDEO_ML86V7667=y
CONFIG_SPI=y
CONFIG_SPI_SH_HSPI=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_RCAR=y
CONFIG_USB=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PLATFORM=y
CONFIG_USB_EHCI_HCD_PLATFORM=y
CONFIG_USB_STORAGE=y
CONFIG_USB_RCAR_PHY=y
CONFIG_MMC=y
CONFIG_MMC_SDHI=y
CONFIG_MMC_SH_MMCIF=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_RX8581=y
CONFIG_DMADEVICES=y
CONFIG_RCAR_HPB_DMAE=y
CONFIG_UIO=y
CONFIG_UIO_PDRV_GENIRQ=y
# CONFIG_IOMMU_SUPPORT is not set
# CONFIG_DNOTIFY is not set
CONFIG_TMPFS=y
# CONFIG_MISC_FILESYSTEMS is not set
CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_SWAP=y
CONFIG_NFS_V4_1=y
CONFIG_ROOT_NFS=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_ENABLE_MUST_CHECK is not set
# CONFIG_SCHED_DEBUG is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
# CONFIG_FTRACE is not set
# CONFIG_ARM_UNWIND is not set
CONFIG_AVERAGE=y
arch/arm/mach-shmobile/Kconfig
View file @
9dd289a4
...
...
@@ -98,76 +98,3 @@ config ARCH_SH73A0
comment "Renesas ARM SoCs System Configuration"
endif
if ARCH_SHMOBILE_LEGACY
comment "Renesas ARM SoCs System Type"
config ARCH_R8A7778
bool "R-Car M1A (R8A77781)"
select ARCH_RCAR_GEN1
select ARCH_WANT_OPTIONAL_GPIOLIB
select ARM_GIC
config ARCH_R8A7779
bool "R-Car H1 (R8A77790)"
select ARCH_RCAR_GEN1
select ARCH_WANT_OPTIONAL_GPIOLIB
select ARM_GIC
comment "Renesas ARM SoCs Board Type"
config MACH_BOCKW
bool "BOCK-W platform"
depends on ARCH_R8A7778
select ARCH_REQUIRE_GPIOLIB
select REGULATOR_FIXED_VOLTAGE if REGULATOR
select SND_SOC_AK4554 if SND_SIMPLE_CARD
select SND_SOC_AK4642 if SND_SIMPLE_CARD && I2C
select USE_OF
config MACH_BOCKW_REFERENCE
bool "BOCK-W - Reference Device Tree Implementation"
depends on ARCH_R8A7778
select ARCH_REQUIRE_GPIOLIB
select REGULATOR_FIXED_VOLTAGE if REGULATOR
select USE_OF
---help---
Use reference implementation of BockW board support
which makes use of device tree at the expense
of not supporting a number of devices.
This is intended to aid developers
comment "Renesas ARM SoCs System Configuration"
config CPU_HAS_INTEVT
bool
default y
config SH_CLK_CPG
bool
source "drivers/sh/Kconfig"
endif
if ARCH_SHMOBILE
menu "Timer and clock configuration"
config SHMOBILE_TIMER_HZ
int "Kernel HZ (jiffies per second)"
range 32 1024
default "128"
help
Allows the configuration of the timer frequency. It is customary
to have the timer interrupt run at 1000 Hz or 100 Hz, but in the
case of low timer frequencies other values may be more suitable.
Renesas ARM SoC systems using a 32768 Hz RCLK for clock events may
want to select a HZ value such as 128 that can evenly divide RCLK.
A HZ value that does not divide evenly may cause timer drift.
endmenu
endif
arch/arm/mach-shmobile/Makefile
View file @
9dd289a4
...
...
@@ -3,7 +3,7 @@
#
# Common objects
obj-y
:=
timer.o
console.o
obj-y
:=
timer.o
# CPU objects
obj-$(CONFIG_ARCH_SH73A0)
+=
setup-sh73a0.o
...
...
@@ -18,12 +18,6 @@ obj-$(CONFIG_ARCH_R8A7794) += setup-r8a7794.o
obj-$(CONFIG_ARCH_EMEV2)
+=
setup-emev2.o
obj-$(CONFIG_ARCH_R7S72100)
+=
setup-r7s72100.o
# Clock objects
ifndef
CONFIG_COMMON_CLK
obj-y
+=
clock.o
obj-$(CONFIG_ARCH_R8A7778)
+=
clock-r8a7778.o
endif
# CPU reset vector handling objects
cpu-y
:=
platsmp.o headsmp.o
...
...
@@ -49,11 +43,5 @@ obj-$(CONFIG_PM_RCAR) += pm-rcar.o
obj-$(CONFIG_PM_RMOBILE)
+=
pm-rmobile.o
obj-$(CONFIG_ARCH_RCAR_GEN2)
+=
pm-rcar-gen2.o
# Board objects
ifndef
CONFIG_ARCH_SHMOBILE_MULTI
obj-$(CONFIG_MACH_BOCKW)
+=
board-bockw.o
obj-$(CONFIG_MACH_BOCKW_REFERENCE)
+=
board-bockw-reference.o
endif
# Framework support
obj-$(CONFIG_SMP)
+=
$
(
smp-y
)
arch/arm/mach-shmobile/Makefile.boot
deleted
100644 → 0
View file @
a362ec8f
# per-board load address for uImage
loadaddr-y
:=
loadaddr-$(CONFIG_MACH_BOCKW)
+=
0x60008000
loadaddr-$(CONFIG_MACH_BOCKW_REFERENCE)
+=
0x60008000
__ZRELADDR
:=
$(
sort
$
(
loadaddr-y
))
zreladdr-y
+=
$(__ZRELADDR)
# Unsupported legacy stuff
#
#params_phys-y (Instead: Pass atags pointer in r2)
#initrd_phys-y (Instead: Use compiled-in initramfs)
arch/arm/mach-shmobile/board-bockw-reference.c
deleted
100644 → 0
View file @
a362ec8f
/*
* Bock-W board support
*
* Copyright (C) 2013 Renesas Solutions Corp.
* Copyright (C) 2013 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/of_platform.h>
#include <asm/mach/arch.h>
#include "common.h"
#include "r8a7778.h"
/*
* see board-bock.c for checking detail of dip-switch
*/
#define FPGA 0x18200000
#define IRQ0MR 0x30
#define COMCTLR 0x101c
#define PFC 0xfffc0000
#define PUPR4 0x110
static
void
__init
bockw_init
(
void
)
{
void
__iomem
*
fpga
;
void
__iomem
*
pfc
;
#ifndef CONFIG_COMMON_CLK
r8a7778_clock_init
();
#endif
r8a7778_init_irq_extpin_dt
(
1
);
r8a7778_add_dt_devices
();
fpga
=
ioremap_nocache
(
FPGA
,
SZ_1M
);
if
(
fpga
)
{
/*
* CAUTION
*
* IRQ0/1 is cascaded interrupt from FPGA.
* it should be cared in the future
* Now, it is assuming IRQ0 was used only from SMSC.
*/
u16
val
=
ioread16
(
fpga
+
IRQ0MR
);
val
&=
~
(
1
<<
4
);
/* enable SMSC911x */
iowrite16
(
val
,
fpga
+
IRQ0MR
);
iounmap
(
fpga
);
}
pfc
=
ioremap_nocache
(
PFC
,
0x200
);
if
(
pfc
)
{
/*
* FIXME
*
* SDHI CD/WP pin needs pull-up
*/
iowrite32
(
ioread32
(
pfc
+
PUPR4
)
|
(
3
<<
26
),
pfc
+
PUPR4
);
iounmap
(
pfc
);
}
of_platform_populate
(
NULL
,
of_default_bus_match_table
,
NULL
,
NULL
);
}
static
const
char
*
const
bockw_boards_compat_dt
[]
__initconst
=
{
"renesas,bockw-reference"
,
NULL
,
};
DT_MACHINE_START
(
BOCKW_DT
,
"bockw"
)
.
init_early
=
shmobile_init_delay
,
.
init_irq
=
r8a7778_init_irq_dt
,
.
init_machine
=
bockw_init
,
.
init_late
=
shmobile_init_late
,
.
dt_compat
=
bockw_boards_compat_dt
,
MACHINE_END
arch/arm/mach-shmobile/board-bockw.c
deleted
100644 → 0
View file @
a362ec8f
/*
* Bock-W board support
*
* Copyright (C) 2013-2014 Renesas Solutions Corp.
* Copyright (C) 2013 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
* Copyright (C) 2013-2014 Cogent Embedded, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/mfd/tmio.h>
#include <linux/mmc/host.h>
#include <linux/mmc/sh_mobile_sdhi.h>
#include <linux/mmc/sh_mmcif.h>
#include <linux/mtd/partitions.h>
#include <linux/pinctrl/machine.h>
#include <linux/platform_data/camera-rcar.h>
#include <linux/platform_data/usb-rcar-phy.h>
#include <linux/platform_device.h>
#include <linux/regulator/fixed.h>
#include <linux/regulator/machine.h>
#include <linux/smsc911x.h>
#include <linux/spi/spi.h>
#include <linux/spi/flash.h>
#include <linux/usb/renesas_usbhs.h>
#include <media/soc_camera.h>
#include <asm/mach/arch.h>
#include <sound/rcar_snd.h>
#include <sound/simple_card.h>
#include "common.h"
#include "irqs.h"
#include "r8a7778.h"
#define FPGA 0x18200000
#define IRQ0MR 0x30
#define COMCTLR 0x101c
static
void
__iomem
*
fpga
;
/*
* CN9(Upper side) SCIF/RCAN selection
*
* 1,4 3,6
* SW40 SCIF RCAN
* SW41 SCIF RCAN
*/
/*
* MMC (CN26) pin
*
* SW6 (D2) 3 pin
* SW7 (D5) ON
* SW8 (D3) 3 pin
* SW10 (D4) 1 pin
* SW12 (CLK) 1 pin
* SW13 (D6) 3 pin
* SW14 (CMD) ON
* SW15 (D6) 1 pin
* SW16 (D0) ON
* SW17 (D1) ON
* SW18 (D7) 3 pin
* SW19 (MMC) 1 pin
*/
/*
* SSI settings
*
* SW45: 1-4 side (SSI5 out, ROUT/LOUT CN19 Mid)
* SW46: 1101 (SSI6 Recorde)
* SW47: 1110 (SSI5 Playback)
* SW48: 11 (Recorde power)
* SW49: 1 (SSI slave mode)
* SW50: 1111 (SSI7, SSI8)
* SW51: 1111 (SSI3, SSI4)
* SW54: 1pin (ak4554 FPGA control)
* SW55: 1 (CLKB is 24.5760MHz)
* SW60: 1pin (ak4554 FPGA control)
* SW61: 3pin (use X11 clock)
* SW78: 3-6 (ak4642 connects I2C0)
*
* You can use sound as
*
* hw0: CN19: SSI56-AK4643
* hw1: CN21: SSI3-AK4554(playback)
* hw2: CN21: SSI4-AK4554(capture)
* hw3: CN20: SSI7-AK4554(playback)
* hw4: CN20: SSI8-AK4554(capture)
*
* this command is required when playback on hw0.
*
* # amixer set "LINEOUT Mixer DACL" on
*/
/*
* USB
*
* USB1 (CN29) can be Host/Function
*
* Host Func
* SW98 1 2
* SW99 1 3
*/
/* Dummy supplies, where voltage doesn't matter */
static
struct
regulator_consumer_supply
dummy_supplies
[]
=
{
REGULATOR_SUPPLY
(
"vddvario"
,
"smsc911x"
),
REGULATOR_SUPPLY
(
"vdd33a"
,
"smsc911x"
),
};
static
struct
regulator_consumer_supply
fixed3v3_power_consumers
[]
=
{
REGULATOR_SUPPLY
(
"vmmc"
,
"sh_mmcif"
),
REGULATOR_SUPPLY
(
"vqmmc"
,
"sh_mmcif"
),
};
static
struct
smsc911x_platform_config
smsc911x_data
__initdata
=
{
.
irq_polarity
=
SMSC911X_IRQ_POLARITY_ACTIVE_LOW
,
.
irq_type
=
SMSC911X_IRQ_TYPE_PUSH_PULL
,
.
flags
=
SMSC911X_USE_32BIT
,
.
phy_interface
=
PHY_INTERFACE_MODE_MII
,
};
static
struct
resource
smsc911x_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0x18300000
,
0x1000
),
DEFINE_RES_IRQ
(
irq_pin
(
0
)),
/* IRQ 0 */
};
#if IS_ENABLED(CONFIG_USB_RENESAS_USBHS_UDC)
/*
* When USB1 is Func
*/
static
int
usbhsf_get_id
(
struct
platform_device
*
pdev
)
{
return
USBHS_GADGET
;
}
#define SUSPMODE 0x102
static
int
usbhsf_power_ctrl
(
struct
platform_device
*
pdev
,
void
__iomem
*
base
,
int
enable
)
{
enable
=
!!
enable
;
r8a7778_usb_phy_power
(
enable
);
iowrite16
(
enable
<<
14
,
base
+
SUSPMODE
);
return
0
;
}
static
struct
resource
usbhsf_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xffe60000
,
0x110
),
DEFINE_RES_IRQ
(
gic_iid
(
0x4f
)),
};
static
struct
renesas_usbhs_platform_info
usbhs_info
__initdata
=
{
.
platform_callback
=
{
.
get_id
=
usbhsf_get_id
,
.
power_ctrl
=
usbhsf_power_ctrl
,
},
.
driver_param
=
{
.
buswait_bwait
=
4
,
.
d0_tx_id
=
HPBDMA_SLAVE_USBFUNC_TX
,
.
d1_rx_id
=
HPBDMA_SLAVE_USBFUNC_RX
,
},
};
#define USB_PHY_SETTING {.port1_func = 1, .ovc_pin[1].active_high = 1,}
#define USB1_DEVICE "renesas_usbhs"
#define ADD_USB_FUNC_DEVICE_IF_POSSIBLE() \
platform_device_register_resndata( \
NULL, "renesas_usbhs", -1, \
usbhsf_resources, \
ARRAY_SIZE(usbhsf_resources), \
&usbhs_info, sizeof(struct renesas_usbhs_platform_info))
#else
/*
* When USB1 is Host
*/
#define USB_PHY_SETTING { }
#define USB1_DEVICE "ehci-platform"
#define ADD_USB_FUNC_DEVICE_IF_POSSIBLE()
#endif
/* USB */
static
struct
resource
usb_phy_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xffe70800
,
0x100
),
DEFINE_RES_MEM
(
0xffe76000
,
0x100
),
};
static
struct
rcar_phy_platform_data
usb_phy_platform_data
__initdata
=
USB_PHY_SETTING
;
/* SDHI */
static
struct
tmio_mmc_data
sdhi0_info
__initdata
=
{
.
chan_priv_tx
=
(
void
*
)
HPBDMA_SLAVE_SDHI0_TX
,
.
chan_priv_rx
=
(
void
*
)
HPBDMA_SLAVE_SDHI0_RX
,
.
capabilities
=
MMC_CAP_SD_HIGHSPEED
,
.
ocr_mask
=
MMC_VDD_165_195
|
MMC_VDD_32_33
|
MMC_VDD_33_34
,
.
flags
=
TMIO_MMC_HAS_IDLE_WAIT
,
};
static
struct
resource
sdhi0_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xFFE4C000
,
0x100
),
DEFINE_RES_IRQ
(
gic_iid
(
0x77
)),
};
/* Ether */
static
struct
resource
ether_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xfde00000
,
0x400
),
DEFINE_RES_IRQ
(
gic_iid
(
0x89
)),
};
static
struct
sh_eth_plat_data
ether_platform_data
__initdata
=
{
.
phy
=
0x01
,
.
edmac_endian
=
EDMAC_LITTLE_ENDIAN
,
.
phy_interface
=
PHY_INTERFACE_MODE_RMII
,
/*
* Although the LINK signal is available on the board, it's connected to
* the link/activity LED output of the PHY, thus the link disappears and
* reappears after each packet. We'd be better off ignoring such signal
* and getting the link state from the PHY indirectly.
*/
.
no_ether_link
=
1
,
};
static
struct
platform_device_info
ether_info
__initdata
=
{
.
name
=
"r8a777x-ether"
,
.
id
=
-
1
,
.
res
=
ether_resources
,
.
num_res
=
ARRAY_SIZE
(
ether_resources
),
.
data
=
&
ether_platform_data
,
.
size_data
=
sizeof
(
ether_platform_data
),
.
dma_mask
=
DMA_BIT_MASK
(
32
),
};
/* I2C */
static
struct
i2c_board_info
i2c0_devices
[]
=
{
{
I2C_BOARD_INFO
(
"rx8581"
,
0x51
),
},
{
I2C_BOARD_INFO
(
"ak4643"
,
0x12
),
}
};
/* HSPI*/
static
struct
mtd_partition
m25p80_spi_flash_partitions
[]
=
{
{
.
name
=
"data(spi)"
,
.
size
=
0x0100000
,
.
offset
=
0
,
},
};
static
struct
flash_platform_data
spi_flash_data
=
{
.
name
=
"m25p80"
,
.
type
=
"s25fl008k"
,
.
parts
=
m25p80_spi_flash_partitions
,
.
nr_parts
=
ARRAY_SIZE
(
m25p80_spi_flash_partitions
),
};
static
struct
spi_board_info
spi_board_info
[]
__initdata
=
{
{
.
modalias
=
"m25p80"
,
.
max_speed_hz
=
104000000
,
.
chip_select
=
0
,
.
bus_num
=
0
,
.
mode
=
SPI_MODE_0
,
.
platform_data
=
&
spi_flash_data
,
},
};
/* MMC */
static
struct
resource
mmc_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xffe4e000
,
0x100
),
DEFINE_RES_IRQ
(
gic_iid
(
0x5d
)),
};
static
struct
sh_mmcif_plat_data
sh_mmcif_plat
__initdata
=
{
.
sup_pclk
=
0
,
.
caps
=
MMC_CAP_4_BIT_DATA
|
MMC_CAP_8_BIT_DATA
|
MMC_CAP_NEEDS_POLL
,
};
/* In the default configuration both decoders reside on I2C bus 0 */
#define BOCKW_CAMERA(idx) \
static struct i2c_board_info camera##idx##_info = { \
I2C_BOARD_INFO("ml86v7667", 0x41 + 2 * (idx)), \
}; \
\
static struct soc_camera_link iclink##idx##_ml86v7667 __initdata = { \
.bus_id = idx, \
.i2c_adapter_id = 0, \
.board_info = &camera##idx##_info, \
}
BOCKW_CAMERA
(
0
);
BOCKW_CAMERA
(
1
);
/* VIN */
static
struct
rcar_vin_platform_data
vin_platform_data
__initdata
=
{
.
flags
=
RCAR_VIN_BT656
,
};
#define R8A7778_VIN(idx) \
static struct resource vin##idx##_resources[] __initdata = { \
DEFINE_RES_MEM(0xffc50000 + 0x1000 * (idx), 0x1000), \
DEFINE_RES_IRQ(gic_iid(0x5a)), \
}; \
\
static struct platform_device_info vin##idx##_info __initdata = { \
.name = "r8a7778-vin", \
.id = idx, \
.res = vin##idx##_resources, \
.num_res = ARRAY_SIZE(vin##idx##_resources), \
.dma_mask = DMA_BIT_MASK(32), \
.data = &vin_platform_data, \
.size_data = sizeof(vin_platform_data), \
}
R8A7778_VIN
(
0
);
R8A7778_VIN
(
1
);
/* Sound */
static
struct
resource
rsnd_resources
[]
__initdata
=
{
[
RSND_GEN1_SRU
]
=
DEFINE_RES_MEM
(
0xffd90000
,
0x1000
),
[
RSND_GEN1_SSI
]
=
DEFINE_RES_MEM
(
0xffd91000
,
0x1240
),
[
RSND_GEN1_ADG
]
=
DEFINE_RES_MEM
(
0xfffe0000
,
0x24
),
};
static
struct
rsnd_ssi_platform_info
rsnd_ssi
[]
=
{
RSND_SSI_UNUSED
,
/* SSI 0 */
RSND_SSI_UNUSED
,
/* SSI 1 */
RSND_SSI_UNUSED
,
/* SSI 2 */
RSND_SSI
(
HPBDMA_SLAVE_HPBIF3_TX
,
gic_iid
(
0x85
),
0
),
RSND_SSI
(
HPBDMA_SLAVE_HPBIF4_RX
,
gic_iid
(
0x85
),
RSND_SSI_CLK_PIN_SHARE
),
RSND_SSI
(
HPBDMA_SLAVE_HPBIF5_TX
,
gic_iid
(
0x86
),
0
),
RSND_SSI
(
HPBDMA_SLAVE_HPBIF6_RX
,
gic_iid
(
0x86
),
0
),
RSND_SSI
(
HPBDMA_SLAVE_HPBIF7_TX
,
gic_iid
(
0x86
),
0
),
RSND_SSI
(
HPBDMA_SLAVE_HPBIF8_RX
,
gic_iid
(
0x86
),
RSND_SSI_CLK_PIN_SHARE
),
};
static
struct
rsnd_src_platform_info
rsnd_src
[
9
]
=
{
RSND_SRC_UNUSED
,
/* SRU 0 */
RSND_SRC_UNUSED
,
/* SRU 1 */
RSND_SRC_UNUSED
,
/* SRU 2 */
RSND_SRC
(
0
,
0
),
RSND_SRC
(
0
,
0
),
RSND_SRC
(
0
,
0
),
RSND_SRC
(
0
,
0
),
RSND_SRC
(
0
,
0
),
RSND_SRC
(
0
,
0
),
};
static
struct
rsnd_dai_platform_info
rsnd_dai
[]
=
{
{
.
playback
=
{
.
ssi
=
&
rsnd_ssi
[
5
],
.
src
=
&
rsnd_src
[
5
]
},
.
capture
=
{
.
ssi
=
&
rsnd_ssi
[
6
],
.
src
=
&
rsnd_src
[
6
]
},
},
{
.
playback
=
{
.
ssi
=
&
rsnd_ssi
[
3
],
.
src
=
&
rsnd_src
[
3
]
},
},
{
.
capture
=
{
.
ssi
=
&
rsnd_ssi
[
4
],
.
src
=
&
rsnd_src
[
4
]
},
},
{
.
playback
=
{
.
ssi
=
&
rsnd_ssi
[
7
],
.
src
=
&
rsnd_src
[
7
]
},
},
{
.
capture
=
{
.
ssi
=
&
rsnd_ssi
[
8
],
.
src
=
&
rsnd_src
[
8
]
},
},
};
enum
{
AK4554_34
=
0
,
AK4643_56
,
AK4554_78
,
SOUND_MAX
,
};
static
int
rsnd_codec_power
(
int
id
,
int
enable
)
{
static
int
sound_user
[
SOUND_MAX
]
=
{
0
,
0
,
0
};
int
*
usr
=
NULL
;
u32
bit
;
switch
(
id
)
{
case
3
:
case
4
:
usr
=
sound_user
+
AK4554_34
;
bit
=
(
1
<<
10
);
break
;
case
5
:
case
6
:
usr
=
sound_user
+
AK4643_56
;
bit
=
(
1
<<
6
);
break
;
case
7
:
case
8
:
usr
=
sound_user
+
AK4554_78
;
bit
=
(
1
<<
7
);
break
;
}
if
(
!
usr
)
return
-
EIO
;
if
(
enable
)
{
if
(
*
usr
==
0
)
{
u32
val
=
ioread16
(
fpga
+
COMCTLR
);
val
&=
~
bit
;
iowrite16
(
val
,
fpga
+
COMCTLR
);
}
(
*
usr
)
++
;
}
else
{
if
(
*
usr
==
0
)
return
0
;
(
*
usr
)
--
;
if
(
*
usr
==
0
)
{
u32
val
=
ioread16
(
fpga
+
COMCTLR
);
val
|=
bit
;
iowrite16
(
val
,
fpga
+
COMCTLR
);
}
}
return
0
;
}
static
int
rsnd_start
(
int
id
)
{
return
rsnd_codec_power
(
id
,
1
);
}
static
int
rsnd_stop
(
int
id
)
{
return
rsnd_codec_power
(
id
,
0
);
}
static
struct
rcar_snd_info
rsnd_info
=
{
.
flags
=
RSND_GEN1
,
.
ssi_info
=
rsnd_ssi
,
.
ssi_info_nr
=
ARRAY_SIZE
(
rsnd_ssi
),
.
src_info
=
rsnd_src
,
.
src_info_nr
=
ARRAY_SIZE
(
rsnd_src
),
.
dai_info
=
rsnd_dai
,
.
dai_info_nr
=
ARRAY_SIZE
(
rsnd_dai
),
.
start
=
rsnd_start
,
.
stop
=
rsnd_stop
,
};
static
struct
asoc_simple_card_info
rsnd_card_info
[]
=
{
/* SSI5, SSI6 */
{
.
name
=
"AK4643"
,
.
card
=
"SSI56-AK4643"
,
.
codec
=
"ak4642-codec.0-0012"
,
.
platform
=
"rcar_sound"
,
.
daifmt
=
SND_SOC_DAIFMT_LEFT_J
|
SND_SOC_DAIFMT_CBM_CFM
,
.
cpu_dai
=
{
.
name
=
"rsnd-dai.0"
,
},
.
codec_dai
=
{
.
name
=
"ak4642-hifi"
,
.
sysclk
=
11289600
,
},
},
/* SSI3 */
{
.
name
=
"AK4554"
,
.
card
=
"SSI3-AK4554(playback)"
,
.
codec
=
"ak4554-adc-dac.0"
,
.
platform
=
"rcar_sound"
,
.
daifmt
=
SND_SOC_DAIFMT_CBS_CFS
|
SND_SOC_DAIFMT_RIGHT_J
,
.
cpu_dai
=
{
.
name
=
"rsnd-dai.1"
,
},
.
codec_dai
=
{
.
name
=
"ak4554-hifi"
,
},
},
/* SSI4 */
{
.
name
=
"AK4554"
,
.
card
=
"SSI4-AK4554(capture)"
,
.
codec
=
"ak4554-adc-dac.0"
,
.
platform
=
"rcar_sound"
,
.
daifmt
=
SND_SOC_DAIFMT_CBS_CFS
|
SND_SOC_DAIFMT_LEFT_J
,
.
cpu_dai
=
{
.
name
=
"rsnd-dai.2"
,
},
.
codec_dai
=
{
.
name
=
"ak4554-hifi"
,
},
},
/* SSI7 */
{
.
name
=
"AK4554"
,
.
card
=
"SSI7-AK4554(playback)"
,
.
codec
=
"ak4554-adc-dac.1"
,
.
platform
=
"rcar_sound"
,
.
daifmt
=
SND_SOC_DAIFMT_CBS_CFS
|
SND_SOC_DAIFMT_RIGHT_J
,
.
cpu_dai
=
{
.
name
=
"rsnd-dai.3"
,
},
.
codec_dai
=
{
.
name
=
"ak4554-hifi"
,
},
},
/* SSI8 */
{
.
name
=
"AK4554"
,
.
card
=
"SSI8-AK4554(capture)"
,
.
codec
=
"ak4554-adc-dac.1"
,
.
platform
=
"rcar_sound"
,
.
daifmt
=
SND_SOC_DAIFMT_CBS_CFS
|
SND_SOC_DAIFMT_LEFT_J
,
.
cpu_dai
=
{
.
name
=
"rsnd-dai.4"
,
},
.
codec_dai
=
{
.
name
=
"ak4554-hifi"
,
},
}
};
static
const
struct
pinctrl_map
bockw_pinctrl_map
[]
=
{
/* AUDIO */
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"audio_clk_a"
,
"audio_clk"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"audio_clk_b"
,
"audio_clk"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi34_ctrl"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi3_data"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi4_data"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi5_ctrl"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi5_data"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi6_ctrl"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi6_data"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi78_ctrl"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi7_data"
,
"ssi"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"rcar_sound"
,
"pfc-r8a7778"
,
"ssi8_data"
,
"ssi"
),
/* Ether */
PIN_MAP_MUX_GROUP_DEFAULT
(
"r8a777x-ether"
,
"pfc-r8a7778"
,
"ether_rmii"
,
"ether"
),
/* HSPI0 */
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh-hspi.0"
,
"pfc-r8a7778"
,
"hspi0_a"
,
"hspi0"
),
/* MMC */
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh_mmcif"
,
"pfc-r8a7778"
,
"mmc_data8"
,
"mmc"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh_mmcif"
,
"pfc-r8a7778"
,
"mmc_ctrl"
,
"mmc"
),
/* SCIF0 */
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh-sci.0"
,
"pfc-r8a7778"
,
"scif0_data_a"
,
"scif0"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh-sci.0"
,
"pfc-r8a7778"
,
"scif0_ctrl"
,
"scif0"
),
/* USB */
PIN_MAP_MUX_GROUP_DEFAULT
(
"ehci-platform"
,
"pfc-r8a7778"
,
"usb0"
,
"usb0"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
USB1_DEVICE
,
"pfc-r8a7778"
,
"usb1"
,
"usb1"
),
/* SDHI0 */
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh_mobile_sdhi.0"
,
"pfc-r8a7778"
,
"sdhi0_data4"
,
"sdhi0"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh_mobile_sdhi.0"
,
"pfc-r8a7778"
,
"sdhi0_ctrl"
,
"sdhi0"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh_mobile_sdhi.0"
,
"pfc-r8a7778"
,
"sdhi0_cd"
,
"sdhi0"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"sh_mobile_sdhi.0"
,
"pfc-r8a7778"
,
"sdhi0_wp"
,
"sdhi0"
),
/* VIN0 */
PIN_MAP_MUX_GROUP_DEFAULT
(
"r8a7778-vin.0"
,
"pfc-r8a7778"
,
"vin0_clk"
,
"vin0"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"r8a7778-vin.0"
,
"pfc-r8a7778"
,
"vin0_data8"
,
"vin0"
),
/* VIN1 */
PIN_MAP_MUX_GROUP_DEFAULT
(
"r8a7778-vin.1"
,
"pfc-r8a7778"
,
"vin1_clk"
,
"vin1"
),
PIN_MAP_MUX_GROUP_DEFAULT
(
"r8a7778-vin.1"
,
"pfc-r8a7778"
,
"vin1_data8"
,
"vin1"
),
};
#define PFC 0xfffc0000
#define PUPR4 0x110
static
void
__init
bockw_init
(
void
)
{
void
__iomem
*
base
;
struct
clk
*
clk
;
struct
platform_device
*
pdev
;
int
i
;
r8a7778_clock_init
();
r8a7778_init_irq_extpin
(
1
);
r8a7778_add_standard_devices
();
platform_device_register_full
(
&
ether_info
);
platform_device_register_full
(
&
vin0_info
);
/* VIN1 has a pin conflict with Ether */
if
(
!
IS_ENABLED
(
CONFIG_SH_ETH
))
platform_device_register_full
(
&
vin1_info
);
platform_device_register_data
(
NULL
,
"soc-camera-pdrv"
,
0
,
&
iclink0_ml86v7667
,
sizeof
(
iclink0_ml86v7667
));
platform_device_register_data
(
NULL
,
"soc-camera-pdrv"
,
1
,
&
iclink1_ml86v7667
,
sizeof
(
iclink1_ml86v7667
));
i2c_register_board_info
(
0
,
i2c0_devices
,
ARRAY_SIZE
(
i2c0_devices
));
spi_register_board_info
(
spi_board_info
,
ARRAY_SIZE
(
spi_board_info
));
pinctrl_register_mappings
(
bockw_pinctrl_map
,
ARRAY_SIZE
(
bockw_pinctrl_map
));
r8a7778_pinmux_init
();
platform_device_register_resndata
(
NULL
,
"sh_mmcif"
,
-
1
,
mmc_resources
,
ARRAY_SIZE
(
mmc_resources
),
&
sh_mmcif_plat
,
sizeof
(
struct
sh_mmcif_plat_data
));
platform_device_register_resndata
(
NULL
,
"rcar_usb_phy"
,
-
1
,
usb_phy_resources
,
ARRAY_SIZE
(
usb_phy_resources
),
&
usb_phy_platform_data
,
sizeof
(
struct
rcar_phy_platform_data
));
regulator_register_fixed
(
0
,
dummy_supplies
,
ARRAY_SIZE
(
dummy_supplies
));
regulator_register_always_on
(
1
,
"fixed-3.3V"
,
fixed3v3_power_consumers
,
ARRAY_SIZE
(
fixed3v3_power_consumers
),
3300000
);
/* for SMSC */
fpga
=
ioremap_nocache
(
FPGA
,
SZ_1M
);
if
(
fpga
)
{
/*
* CAUTION
*
* IRQ0/1 is cascaded interrupt from FPGA.
* it should be cared in the future
* Now, it is assuming IRQ0 was used only from SMSC.
*/
u16
val
=
ioread16
(
fpga
+
IRQ0MR
);
val
&=
~
(
1
<<
4
);
/* enable SMSC911x */
iowrite16
(
val
,
fpga
+
IRQ0MR
);
platform_device_register_resndata
(
NULL
,
"smsc911x"
,
-
1
,
smsc911x_resources
,
ARRAY_SIZE
(
smsc911x_resources
),
&
smsc911x_data
,
sizeof
(
smsc911x_data
));
}
/* for SDHI */
base
=
ioremap_nocache
(
PFC
,
0x200
);
if
(
base
)
{
/*
* FIXME
*
* SDHI CD/WP pin needs pull-up
*/
iowrite32
(
ioread32
(
base
+
PUPR4
)
|
(
3
<<
26
),
base
+
PUPR4
);
iounmap
(
base
);
platform_device_register_resndata
(
NULL
,
"sh_mobile_sdhi"
,
0
,
sdhi0_resources
,
ARRAY_SIZE
(
sdhi0_resources
),
&
sdhi0_info
,
sizeof
(
struct
tmio_mmc_data
));
}
/* for Audio */
rsnd_codec_power
(
5
,
1
);
/* enable ak4642 */
platform_device_register_simple
(
"ak4554-adc-dac"
,
0
,
NULL
,
0
);
platform_device_register_simple
(
"ak4554-adc-dac"
,
1
,
NULL
,
0
);
pdev
=
platform_device_register_resndata
(
NULL
,
"rcar_sound"
,
-
1
,
rsnd_resources
,
ARRAY_SIZE
(
rsnd_resources
),
&
rsnd_info
,
sizeof
(
rsnd_info
));
clk
=
clk_get
(
&
pdev
->
dev
,
"clk_b"
);
clk_set_rate
(
clk
,
24576000
);
clk_put
(
clk
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
rsnd_card_info
);
i
++
)
{
struct
platform_device_info
cardinfo
=
{
.
name
=
"asoc-simple-card"
,
.
id
=
i
,
.
data
=
&
rsnd_card_info
[
i
],
.
size_data
=
sizeof
(
struct
asoc_simple_card_info
),
.
dma_mask
=
DMA_BIT_MASK
(
32
),
};
platform_device_register_full
(
&
cardinfo
);
}
}
static
void
__init
bockw_init_late
(
void
)
{
r8a7778_init_late
();
ADD_USB_FUNC_DEVICE_IF_POSSIBLE
();
}
static
const
char
*
const
bockw_boards_compat_dt
[]
__initconst
=
{
"renesas,bockw"
,
NULL
,
};
DT_MACHINE_START
(
BOCKW_DT
,
"bockw"
)
.
init_early
=
shmobile_init_delay
,
.
init_irq
=
r8a7778_init_irq_dt
,
.
init_machine
=
bockw_init
,
.
dt_compat
=
bockw_boards_compat_dt
,
.
init_late
=
bockw_init_late
,
MACHINE_END
arch/arm/mach-shmobile/clock-r8a7778.c
deleted
100644 → 0
View file @
a362ec8f
/*
* r8a7778 clock framework support
*
* Copyright (C) 2013 Renesas Solutions Corp.
* Copyright (C) 2013 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
*
* based on r8a7779
*
* Copyright (C) 2011 Renesas Solutions Corp.
* Copyright (C) 2011 Magnus Damm
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
/*
* MD MD MD MD PLLA PLLB EXTAL clki clkz
* 19 18 12 11 (HMz) (MHz) (MHz)
*----------------------------------------------------------------------------
* 1 0 0 0 x21 x21 38.00 800 800
* 1 0 0 1 x24 x24 33.33 800 800
* 1 0 1 0 x28 x28 28.50 800 800
* 1 0 1 1 x32 x32 25.00 800 800
* 1 1 0 1 x24 x21 33.33 800 700
* 1 1 1 0 x28 x21 28.50 800 600
* 1 1 1 1 x32 x24 25.00 800 600
*/
#include <linux/io.h>
#include <linux/sh_clk.h>
#include <linux/clkdev.h>
#include "clock.h"
#include "common.h"
#define MSTPCR0 IOMEM(0xffc80030)
#define MSTPCR1 IOMEM(0xffc80034)
#define MSTPCR3 IOMEM(0xffc8003c)
#define MSTPSR1 IOMEM(0xffc80044)
#define MSTPSR4 IOMEM(0xffc80048)
#define MSTPSR6 IOMEM(0xffc8004c)
#define MSTPCR4 IOMEM(0xffc80050)
#define MSTPCR5 IOMEM(0xffc80054)
#define MSTPCR6 IOMEM(0xffc80058)
#define MODEMR 0xFFCC0020
#define MD(nr) BIT(nr)
/* ioremap() through clock mapping mandatory to avoid
* collision with ARM coherent DMA virtual memory range.
*/
static
struct
clk_mapping
cpg_mapping
=
{
.
phys
=
0xffc80000
,
.
len
=
0x80
,
};
static
struct
clk
extal_clk
=
{
/* .rate will be updated on r8a7778_clock_init() */
.
mapping
=
&
cpg_mapping
,
};
static
struct
clk
audio_clk_a
=
{
};
static
struct
clk
audio_clk_b
=
{
};
static
struct
clk
audio_clk_c
=
{
};
/*
* clock ratio of these clock will be updated
* on r8a7778_clock_init()
*/
SH_FIXED_RATIO_CLK_SET
(
plla_clk
,
extal_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
pllb_clk
,
extal_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
i_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
s_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
s1_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
s3_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
s4_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
b_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
out_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
p_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
g_clk
,
plla_clk
,
1
,
1
);
SH_FIXED_RATIO_CLK_SET
(
z_clk
,
pllb_clk
,
1
,
1
);
static
struct
clk
*
main_clks
[]
=
{
&
extal_clk
,
&
plla_clk
,
&
pllb_clk
,
&
i_clk
,
&
s_clk
,
&
s1_clk
,
&
s3_clk
,
&
s4_clk
,
&
b_clk
,
&
out_clk
,
&
p_clk
,
&
g_clk
,
&
z_clk
,
&
audio_clk_a
,
&
audio_clk_b
,
&
audio_clk_c
,
};
enum
{
MSTP531
,
MSTP530
,
MSTP529
,
MSTP528
,
MSTP527
,
MSTP526
,
MSTP525
,
MSTP524
,
MSTP523
,
MSTP331
,
MSTP323
,
MSTP322
,
MSTP321
,
MSTP311
,
MSTP310
,
MSTP309
,
MSTP308
,
MSTP307
,
MSTP114
,
MSTP110
,
MSTP109
,
MSTP100
,
MSTP030
,
MSTP029
,
MSTP028
,
MSTP027
,
MSTP026
,
MSTP025
,
MSTP024
,
MSTP023
,
MSTP022
,
MSTP021
,
MSTP016
,
MSTP015
,
MSTP012
,
MSTP011
,
MSTP010
,
MSTP009
,
MSTP008
,
MSTP007
,
MSTP_NR
};
static
struct
clk
mstp_clks
[
MSTP_NR
]
=
{
[
MSTP531
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
31
,
0
),
/* SCU0 */
[
MSTP530
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
30
,
0
),
/* SCU1 */
[
MSTP529
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
29
,
0
),
/* SCU2 */
[
MSTP528
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
28
,
0
),
/* SCU3 */
[
MSTP527
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
27
,
0
),
/* SCU4 */
[
MSTP526
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
26
,
0
),
/* SCU5 */
[
MSTP525
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
25
,
0
),
/* SCU6 */
[
MSTP524
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
24
,
0
),
/* SCU7 */
[
MSTP523
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR5
,
23
,
0
),
/* SCU8 */
[
MSTP331
]
=
SH_CLK_MSTP32
(
&
s4_clk
,
MSTPCR3
,
31
,
0
),
/* MMC */
[
MSTP323
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
23
,
0
),
/* SDHI0 */
[
MSTP322
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
22
,
0
),
/* SDHI1 */
[
MSTP321
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
21
,
0
),
/* SDHI2 */
[
MSTP311
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
11
,
0
),
/* SSI4 */
[
MSTP310
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
10
,
0
),
/* SSI5 */
[
MSTP309
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
9
,
0
),
/* SSI6 */
[
MSTP308
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
8
,
0
),
/* SSI7 */
[
MSTP307
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR3
,
7
,
0
),
/* SSI8 */
[
MSTP114
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR1
,
14
,
0
),
/* Ether */
[
MSTP110
]
=
SH_CLK_MSTP32
(
&
s_clk
,
MSTPCR1
,
10
,
0
),
/* VIN0 */
[
MSTP109
]
=
SH_CLK_MSTP32
(
&
s_clk
,
MSTPCR1
,
9
,
0
),
/* VIN1 */
[
MSTP100
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR1
,
0
,
0
),
/* USB0/1 */
[
MSTP030
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
30
,
0
),
/* I2C0 */
[
MSTP029
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
29
,
0
),
/* I2C1 */
[
MSTP028
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
28
,
0
),
/* I2C2 */
[
MSTP027
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
27
,
0
),
/* I2C3 */
[
MSTP026
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
26
,
0
),
/* SCIF0 */
[
MSTP025
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
25
,
0
),
/* SCIF1 */
[
MSTP024
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
24
,
0
),
/* SCIF2 */
[
MSTP023
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
23
,
0
),
/* SCIF3 */
[
MSTP022
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
22
,
0
),
/* SCIF4 */
[
MSTP021
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
21
,
0
),
/* SCIF5 */
[
MSTP016
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
16
,
0
),
/* TMU0 */
[
MSTP015
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
15
,
0
),
/* TMU1 */
[
MSTP012
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
12
,
0
),
/* SSI0 */
[
MSTP011
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
11
,
0
),
/* SSI1 */
[
MSTP010
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
10
,
0
),
/* SSI2 */
[
MSTP009
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
9
,
0
),
/* SSI3 */
[
MSTP008
]
=
SH_CLK_MSTP32
(
&
p_clk
,
MSTPCR0
,
8
,
0
),
/* SRU */
[
MSTP007
]
=
SH_CLK_MSTP32
(
&
s_clk
,
MSTPCR0
,
7
,
0
),
/* HSPI */
};
static
struct
clk_lookup
lookups
[]
=
{
/* main */
CLKDEV_CON_ID
(
"shyway_clk"
,
&
s_clk
),
CLKDEV_CON_ID
(
"peripheral_clk"
,
&
p_clk
),
/* MSTP32 clocks */
CLKDEV_DEV_ID
(
"sh_mmcif"
,
&
mstp_clks
[
MSTP331
]),
/* MMC */
CLKDEV_DEV_ID
(
"ffe4e000.mmc"
,
&
mstp_clks
[
MSTP331
]),
/* MMC */
CLKDEV_DEV_ID
(
"sh_mobile_sdhi.0"
,
&
mstp_clks
[
MSTP323
]),
/* SDHI0 */
CLKDEV_DEV_ID
(
"ffe4c000.sd"
,
&
mstp_clks
[
MSTP323
]),
/* SDHI0 */
CLKDEV_DEV_ID
(
"sh_mobile_sdhi.1"
,
&
mstp_clks
[
MSTP322
]),
/* SDHI1 */
CLKDEV_DEV_ID
(
"ffe4d000.sd"
,
&
mstp_clks
[
MSTP322
]),
/* SDHI1 */
CLKDEV_DEV_ID
(
"sh_mobile_sdhi.2"
,
&
mstp_clks
[
MSTP321
]),
/* SDHI2 */
CLKDEV_DEV_ID
(
"ffe4f000.sd"
,
&
mstp_clks
[
MSTP321
]),
/* SDHI2 */
CLKDEV_DEV_ID
(
"r8a777x-ether"
,
&
mstp_clks
[
MSTP114
]),
/* Ether */
CLKDEV_DEV_ID
(
"r8a7778-vin.0"
,
&
mstp_clks
[
MSTP110
]),
/* VIN0 */
CLKDEV_DEV_ID
(
"r8a7778-vin.1"
,
&
mstp_clks
[
MSTP109
]),
/* VIN1 */
CLKDEV_DEV_ID
(
"ehci-platform"
,
&
mstp_clks
[
MSTP100
]),
/* USB EHCI port0/1 */
CLKDEV_DEV_ID
(
"ohci-platform"
,
&
mstp_clks
[
MSTP100
]),
/* USB OHCI port0/1 */
CLKDEV_DEV_ID
(
"renesas_usbhs"
,
&
mstp_clks
[
MSTP100
]),
/* USB FUNC */
CLKDEV_DEV_ID
(
"i2c-rcar.0"
,
&
mstp_clks
[
MSTP030
]),
/* I2C0 */
CLKDEV_DEV_ID
(
"ffc70000.i2c"
,
&
mstp_clks
[
MSTP030
]),
/* I2C0 */
CLKDEV_DEV_ID
(
"i2c-rcar.1"
,
&
mstp_clks
[
MSTP029
]),
/* I2C1 */
CLKDEV_DEV_ID
(
"ffc71000.i2c"
,
&
mstp_clks
[
MSTP029
]),
/* I2C1 */
CLKDEV_DEV_ID
(
"i2c-rcar.2"
,
&
mstp_clks
[
MSTP028
]),
/* I2C2 */
CLKDEV_DEV_ID
(
"ffc72000.i2c"
,
&
mstp_clks
[
MSTP028
]),
/* I2C2 */
CLKDEV_DEV_ID
(
"i2c-rcar.3"
,
&
mstp_clks
[
MSTP027
]),
/* I2C3 */
CLKDEV_DEV_ID
(
"ffc73000.i2c"
,
&
mstp_clks
[
MSTP027
]),
/* I2C3 */
CLKDEV_DEV_ID
(
"sh-sci.0"
,
&
mstp_clks
[
MSTP026
]),
/* SCIF0 */
CLKDEV_DEV_ID
(
"ffe40000.serial"
,
&
mstp_clks
[
MSTP026
]),
/* SCIF0 */
CLKDEV_DEV_ID
(
"sh-sci.1"
,
&
mstp_clks
[
MSTP025
]),
/* SCIF1 */
CLKDEV_DEV_ID
(
"ffe41000.serial"
,
&
mstp_clks
[
MSTP025
]),
/* SCIF1 */
CLKDEV_DEV_ID
(
"sh-sci.2"
,
&
mstp_clks
[
MSTP024
]),
/* SCIF2 */
CLKDEV_DEV_ID
(
"ffe42000.serial"
,
&
mstp_clks
[
MSTP024
]),
/* SCIF2 */
CLKDEV_DEV_ID
(
"sh-sci.3"
,
&
mstp_clks
[
MSTP023
]),
/* SCIF3 */
CLKDEV_DEV_ID
(
"ffe43000.serial"
,
&
mstp_clks
[
MSTP023
]),
/* SCIF3 */
CLKDEV_DEV_ID
(
"sh-sci.4"
,
&
mstp_clks
[
MSTP022
]),
/* SCIF4 */
CLKDEV_DEV_ID
(
"ffe44000.serial"
,
&
mstp_clks
[
MSTP022
]),
/* SCIF4 */
CLKDEV_DEV_ID
(
"sh-sci.5"
,
&
mstp_clks
[
MSTP021
]),
/* SCIF6 */
CLKDEV_DEV_ID
(
"ffe45000.serial"
,
&
mstp_clks
[
MSTP021
]),
/* SCIF5 */
CLKDEV_DEV_ID
(
"sh-hspi.0"
,
&
mstp_clks
[
MSTP007
]),
/* HSPI0 */
CLKDEV_DEV_ID
(
"fffc7000.spi"
,
&
mstp_clks
[
MSTP007
]),
/* HSPI0 */
CLKDEV_DEV_ID
(
"sh-hspi.1"
,
&
mstp_clks
[
MSTP007
]),
/* HSPI1 */
CLKDEV_DEV_ID
(
"fffc8000.spi"
,
&
mstp_clks
[
MSTP007
]),
/* HSPI1 */
CLKDEV_DEV_ID
(
"sh-hspi.2"
,
&
mstp_clks
[
MSTP007
]),
/* HSPI2 */
CLKDEV_DEV_ID
(
"fffc6000.spi"
,
&
mstp_clks
[
MSTP007
]),
/* HSPI2 */
CLKDEV_DEV_ID
(
"rcar_sound"
,
&
mstp_clks
[
MSTP008
]),
/* SRU */
CLKDEV_ICK_ID
(
"clk_a"
,
"rcar_sound"
,
&
audio_clk_a
),
CLKDEV_ICK_ID
(
"clk_b"
,
"rcar_sound"
,
&
audio_clk_b
),
CLKDEV_ICK_ID
(
"clk_c"
,
"rcar_sound"
,
&
audio_clk_c
),
CLKDEV_ICK_ID
(
"clk_i"
,
"rcar_sound"
,
&
s1_clk
),
CLKDEV_ICK_ID
(
"ssi.0"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP012
]),
CLKDEV_ICK_ID
(
"ssi.1"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP011
]),
CLKDEV_ICK_ID
(
"ssi.2"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP010
]),
CLKDEV_ICK_ID
(
"ssi.3"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP009
]),
CLKDEV_ICK_ID
(
"ssi.4"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP311
]),
CLKDEV_ICK_ID
(
"ssi.5"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP310
]),
CLKDEV_ICK_ID
(
"ssi.6"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP309
]),
CLKDEV_ICK_ID
(
"ssi.7"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP308
]),
CLKDEV_ICK_ID
(
"ssi.8"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP307
]),
CLKDEV_ICK_ID
(
"src.0"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP531
]),
CLKDEV_ICK_ID
(
"src.1"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP530
]),
CLKDEV_ICK_ID
(
"src.2"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP529
]),
CLKDEV_ICK_ID
(
"src.3"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP528
]),
CLKDEV_ICK_ID
(
"src.4"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP527
]),
CLKDEV_ICK_ID
(
"src.5"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP526
]),
CLKDEV_ICK_ID
(
"src.6"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP525
]),
CLKDEV_ICK_ID
(
"src.7"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP524
]),
CLKDEV_ICK_ID
(
"src.8"
,
"rcar_sound"
,
&
mstp_clks
[
MSTP523
]),
CLKDEV_ICK_ID
(
"fck"
,
"sh-tmu.0"
,
&
mstp_clks
[
MSTP016
]),
CLKDEV_ICK_ID
(
"fck"
,
"ffd80000.timer"
,
&
mstp_clks
[
MSTP016
]),
CLKDEV_ICK_ID
(
"fck"
,
"sh-tmu.1"
,
&
mstp_clks
[
MSTP015
]),
CLKDEV_ICK_ID
(
"fck"
,
"ffd81000.timer"
,
&
mstp_clks
[
MSTP015
]),
};
void
__init
r8a7778_clock_init
(
void
)
{
void
__iomem
*
modemr
=
ioremap_nocache
(
MODEMR
,
PAGE_SIZE
);
u32
mode
;
int
k
,
ret
=
0
;
BUG_ON
(
!
modemr
);
mode
=
ioread32
(
modemr
);
iounmap
(
modemr
);
switch
(
mode
&
(
MD
(
19
)
|
MD
(
18
)
|
MD
(
12
)
|
MD
(
11
)))
{
case
MD
(
19
):
extal_clk
.
rate
=
38000000
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
21
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
21
,
1
);
break
;
case
MD
(
19
)
|
MD
(
11
):
extal_clk
.
rate
=
33333333
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
24
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
24
,
1
);
break
;
case
MD
(
19
)
|
MD
(
12
):
extal_clk
.
rate
=
28500000
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
28
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
28
,
1
);
break
;
case
MD
(
19
)
|
MD
(
12
)
|
MD
(
11
):
extal_clk
.
rate
=
25000000
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
32
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
32
,
1
);
break
;
case
MD
(
19
)
|
MD
(
18
)
|
MD
(
11
):
extal_clk
.
rate
=
33333333
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
24
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
21
,
1
);
break
;
case
MD
(
19
)
|
MD
(
18
)
|
MD
(
12
):
extal_clk
.
rate
=
28500000
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
28
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
21
,
1
);
break
;
case
MD
(
19
)
|
MD
(
18
)
|
MD
(
12
)
|
MD
(
11
):
extal_clk
.
rate
=
25000000
;
SH_CLK_SET_RATIO
(
&
plla_clk_ratio
,
32
,
1
);
SH_CLK_SET_RATIO
(
&
pllb_clk_ratio
,
24
,
1
);
break
;
default:
BUG
();
}
if
(
mode
&
MD
(
1
))
{
SH_CLK_SET_RATIO
(
&
i_clk_ratio
,
1
,
1
);
SH_CLK_SET_RATIO
(
&
s_clk_ratio
,
1
,
3
);
SH_CLK_SET_RATIO
(
&
s1_clk_ratio
,
1
,
6
);
SH_CLK_SET_RATIO
(
&
s3_clk_ratio
,
1
,
4
);
SH_CLK_SET_RATIO
(
&
s4_clk_ratio
,
1
,
8
);
SH_CLK_SET_RATIO
(
&
p_clk_ratio
,
1
,
12
);
SH_CLK_SET_RATIO
(
&
g_clk_ratio
,
1
,
12
);
if
(
mode
&
MD
(
2
))
{
SH_CLK_SET_RATIO
(
&
b_clk_ratio
,
1
,
18
);
SH_CLK_SET_RATIO
(
&
out_clk_ratio
,
1
,
18
);
}
else
{
SH_CLK_SET_RATIO
(
&
b_clk_ratio
,
1
,
12
);
SH_CLK_SET_RATIO
(
&
out_clk_ratio
,
1
,
12
);
}
}
else
{
SH_CLK_SET_RATIO
(
&
i_clk_ratio
,
1
,
1
);
SH_CLK_SET_RATIO
(
&
s_clk_ratio
,
1
,
4
);
SH_CLK_SET_RATIO
(
&
s1_clk_ratio
,
1
,
8
);
SH_CLK_SET_RATIO
(
&
s3_clk_ratio
,
1
,
4
);
SH_CLK_SET_RATIO
(
&
s4_clk_ratio
,
1
,
8
);
SH_CLK_SET_RATIO
(
&
p_clk_ratio
,
1
,
16
);
SH_CLK_SET_RATIO
(
&
g_clk_ratio
,
1
,
12
);
if
(
mode
&
MD
(
2
))
{
SH_CLK_SET_RATIO
(
&
b_clk_ratio
,
1
,
16
);
SH_CLK_SET_RATIO
(
&
out_clk_ratio
,
1
,
16
);
}
else
{
SH_CLK_SET_RATIO
(
&
b_clk_ratio
,
1
,
12
);
SH_CLK_SET_RATIO
(
&
out_clk_ratio
,
1
,
12
);
}
}
for
(
k
=
0
;
!
ret
&&
(
k
<
ARRAY_SIZE
(
main_clks
));
k
++
)
ret
=
clk_register
(
main_clks
[
k
]);
if
(
!
ret
)
ret
=
sh_clk_mstp_register
(
mstp_clks
,
MSTP_NR
);
clkdev_add_table
(
lookups
,
ARRAY_SIZE
(
lookups
));
if
(
!
ret
)
shmobile_clk_init
();
else
panic
(
"failed to setup r8a7778 clocks
\n
"
);
}
arch/arm/mach-shmobile/clock.c
deleted
100644 → 0
View file @
a362ec8f
/*
* SH-Mobile Clock Framework
*
* Copyright (C) 2010 Magnus Damm
*
* Used together with arch/arm/common/clkdev.c and drivers/sh/clk.c.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <linux/export.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/sh_clk.h>
#include "clock.h"
#include "common.h"
unsigned
long
shmobile_fixed_ratio_clk_recalc
(
struct
clk
*
clk
)
{
struct
clk_ratio
*
p
=
clk
->
priv
;
return
clk
->
parent
->
rate
/
p
->
div
*
p
->
mul
;
};
struct
sh_clk_ops
shmobile_fixed_ratio_clk_ops
=
{
.
recalc
=
shmobile_fixed_ratio_clk_recalc
,
};
int
__init
shmobile_clk_init
(
void
)
{
/* Kick the child clocks.. */
recalculate_root_clocks
();
/* Enable the necessary init clocks */
clk_enable_init_clocks
();
return
0
;
}
arch/arm/mach-shmobile/clock.h
deleted
100644 → 0
View file @
a362ec8f
#ifndef CLOCK_H
#define CLOCK_H
/* legacy clock implementation */
struct
clk
;
unsigned
long
shmobile_fixed_ratio_clk_recalc
(
struct
clk
*
clk
);
extern
struct
sh_clk_ops
shmobile_fixed_ratio_clk_ops
;
/* clock ratio */
struct
clk_ratio
{
int
mul
;
int
div
;
};
#define SH_CLK_RATIO(name, m, d) \
static struct clk_ratio name ##_ratio = { \
.mul = m, \
.div = d, \
}
#define SH_FIXED_RATIO_CLKg(name, p, r) \
struct clk name = { \
.parent = &p, \
.ops = &shmobile_fixed_ratio_clk_ops,\
.priv = &r ## _ratio, \
}
#define SH_FIXED_RATIO_CLK(name, p, r) \
static SH_FIXED_RATIO_CLKg(name, p, r)
#define SH_FIXED_RATIO_CLK_SET(name, p, m, d) \
SH_CLK_RATIO(name, m, d); \
SH_FIXED_RATIO_CLK(name, p, name)
#define SH_CLK_SET_RATIO(p, m, d) \
do { \
(p)->mul = m; \
(p)->div = d; \
} while (0)
#endif
arch/arm/mach-shmobile/common.h
View file @
9dd289a4
#ifndef __ARCH_MACH_COMMON_H
#define __ARCH_MACH_COMMON_H
extern
void
shmobile_earlytimer_init
(
void
);
extern
void
shmobile_init_delay
(
void
);
struct
twd_local_timer
;
extern
void
shmobile_setup_console
(
void
);
extern
void
shmobile_boot_vector
(
void
);
extern
unsigned
long
shmobile_boot_fn
;
extern
unsigned
long
shmobile_boot_arg
;
...
...
@@ -18,8 +15,6 @@ extern void shmobile_boot_scu(void);
extern
void
shmobile_smp_scu_prepare_cpus
(
unsigned
int
max_cpus
);
extern
void
shmobile_smp_scu_cpu_die
(
unsigned
int
cpu
);
extern
int
shmobile_smp_scu_cpu_kill
(
unsigned
int
cpu
);
struct
clk
;
extern
int
shmobile_clk_init
(
void
);
extern
struct
platform_suspend_ops
shmobile_suspend_ops
;
#ifdef CONFIG_SUSPEND
...
...
arch/arm/mach-shmobile/console.c
deleted
100644 → 0
View file @
a362ec8f
/*
* SH-Mobile Console
*
* Copyright (C) 2010 Magnus Damm
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <asm/mach/map.h>
#include "common.h"
void
__init
shmobile_setup_console
(
void
)
{
parse_early_param
();
/* Let earlyprintk output early console messages */
early_platform_driver_probe
(
"earlyprintk"
,
1
,
1
);
}
arch/arm/mach-shmobile/intc.h
deleted
100644 → 0
View file @
a362ec8f
#ifndef __ASM_MACH_INTC_H
#define __ASM_MACH_INTC_H
#include <linux/sh_intc.h>
#define INTC_IRQ_PINS_ENUM_16L(p) \
p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3, \
p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7, \
p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11, \
p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15
#define INTC_IRQ_PINS_ENUM_16H(p) \
p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19, \
p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23, \
p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27, \
p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31
#define INTC_IRQ_PINS_VECT_16L(p, vect) \
vect(p ## _IRQ0, 0x0200), vect(p ## _IRQ1, 0x0220), \
vect(p ## _IRQ2, 0x0240), vect(p ## _IRQ3, 0x0260), \
vect(p ## _IRQ4, 0x0280), vect(p ## _IRQ5, 0x02a0), \
vect(p ## _IRQ6, 0x02c0), vect(p ## _IRQ7, 0x02e0), \
vect(p ## _IRQ8, 0x0300), vect(p ## _IRQ9, 0x0320), \
vect(p ## _IRQ10, 0x0340), vect(p ## _IRQ11, 0x0360), \
vect(p ## _IRQ12, 0x0380), vect(p ## _IRQ13, 0x03a0), \
vect(p ## _IRQ14, 0x03c0), vect(p ## _IRQ15, 0x03e0)
#define INTC_IRQ_PINS_VECT_16H(p, vect) \
vect(p ## _IRQ16, 0x3200), vect(p ## _IRQ17, 0x3220), \
vect(p ## _IRQ18, 0x3240), vect(p ## _IRQ19, 0x3260), \
vect(p ## _IRQ20, 0x3280), vect(p ## _IRQ21, 0x32a0), \
vect(p ## _IRQ22, 0x32c0), vect(p ## _IRQ23, 0x32e0), \
vect(p ## _IRQ24, 0x3300), vect(p ## _IRQ25, 0x3320), \
vect(p ## _IRQ26, 0x3340), vect(p ## _IRQ27, 0x3360), \
vect(p ## _IRQ28, 0x3380), vect(p ## _IRQ29, 0x33a0), \
vect(p ## _IRQ30, 0x33c0), vect(p ## _IRQ31, 0x33e0)
#define INTC_IRQ_PINS_MASK_16L(p, base) \
{ base + 0x40, base + 0x60, 8,
/* INTMSK00A / INTMSKCLR00A */
\
{ p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3, \
p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } }, \
{ base + 0x44, base + 0x64, 8,
/* INTMSK10A / INTMSKCLR10A */
\
{ p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11, \
p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }
#define INTC_IRQ_PINS_MASK_16H(p, base) \
{ base + 0x48, base + 0x68, 8,
/* INTMSK20A / INTMSKCLR20A */
\
{ p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19, \
p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } }, \
{ base + 0x4c, base + 0x6c, 8,
/* INTMSK30A / INTMSKCLR30A */
\
{ p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27, \
p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }
#define INTC_IRQ_PINS_PRIO_16L(p, base) \
{ base + 0x10, 0, 32, 4,
/* INTPRI00A */
\
{ p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3, \
p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } }, \
{ base + 0x14, 0, 32, 4,
/* INTPRI10A */
\
{ p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11, \
p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }
#define INTC_IRQ_PINS_PRIO_16H(p, base) \
{ base + 0x18, 0, 32, 4,
/* INTPRI20A */
\
{ p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19, \
p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } }, \
{ base + 0x1c, 0, 32, 4,
/* INTPRI30A */
\
{ p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27, \
p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }
#define INTC_IRQ_PINS_SENSE_16L(p, base) \
{ base + 0x00, 32, 4,
/* ICR1A */
\
{ p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3, \
p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } }, \
{ base + 0x04, 32, 4,
/* ICR2A */
\
{ p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11, \
p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }
#define INTC_IRQ_PINS_SENSE_16H(p, base) \
{ base + 0x08, 32, 4,
/* ICR3A */
\
{ p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19, \
p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } }, \
{ base + 0x0c, 32, 4,
/* ICR4A */
\
{ p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27, \
p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }
#define INTC_IRQ_PINS_ACK_16L(p, base) \
{ base + 0x20, 0, 8,
/* INTREQ00A */
\
{ p ## _IRQ0, p ## _IRQ1, p ## _IRQ2, p ## _IRQ3, \
p ## _IRQ4, p ## _IRQ5, p ## _IRQ6, p ## _IRQ7 } }, \
{ base + 0x24, 0, 8,
/* INTREQ10A */
\
{ p ## _IRQ8, p ## _IRQ9, p ## _IRQ10, p ## _IRQ11, \
p ## _IRQ12, p ## _IRQ13, p ## _IRQ14, p ## _IRQ15 } }
#define INTC_IRQ_PINS_ACK_16H(p, base) \
{ base + 0x28, 0, 8,
/* INTREQ20A */
\
{ p ## _IRQ16, p ## _IRQ17, p ## _IRQ18, p ## _IRQ19, \
p ## _IRQ20, p ## _IRQ21, p ## _IRQ22, p ## _IRQ23 } }, \
{ base + 0x2c, 0, 8,
/* INTREQ30A */
\
{ p ## _IRQ24, p ## _IRQ25, p ## _IRQ26, p ## _IRQ27, \
p ## _IRQ28, p ## _IRQ29, p ## _IRQ30, p ## _IRQ31 } }
#define INTC_IRQ_PINS_16(p, base, vect, str) \
\
static struct resource p ## _resources[] __initdata = { \
[0] = { \
.start = base, \
.end = base + 0x64, \
.flags = IORESOURCE_MEM, \
}, \
}; \
\
enum { \
p ## _UNUSED = 0, \
INTC_IRQ_PINS_ENUM_16L(p), \
}; \
\
static struct intc_vect p ## _vectors[] __initdata = { \
INTC_IRQ_PINS_VECT_16L(p, vect), \
}; \
\
static struct intc_mask_reg p ## _mask_registers[] __initdata = { \
INTC_IRQ_PINS_MASK_16L(p, base), \
}; \
\
static struct intc_prio_reg p ## _prio_registers[] __initdata = { \
INTC_IRQ_PINS_PRIO_16L(p, base), \
}; \
\
static struct intc_sense_reg p ## _sense_registers[] __initdata = { \
INTC_IRQ_PINS_SENSE_16L(p, base), \
}; \
\
static struct intc_mask_reg p ## _ack_registers[] __initdata = { \
INTC_IRQ_PINS_ACK_16L(p, base), \
}; \
\
static struct intc_desc p ## _desc __initdata = { \
.name = str, \
.resource = p ## _resources, \
.num_resources = ARRAY_SIZE(p ## _resources), \
.hw = INTC_HW_DESC(p ## _vectors, NULL, \
p ## _mask_registers, p ## _prio_registers, \
p ## _sense_registers, p ## _ack_registers) \
}
#define INTC_IRQ_PINS_16H(p, base, vect, str) \
\
static struct resource p ## _resources[] __initdata = { \
[0] = { \
.start = base, \
.end = base + 0x64, \
.flags = IORESOURCE_MEM, \
}, \
}; \
\
enum { \
p ## _UNUSED = 0, \
INTC_IRQ_PINS_ENUM_16H(p), \
}; \
\
static struct intc_vect p ## _vectors[] __initdata = { \
INTC_IRQ_PINS_VECT_16H(p, vect), \
}; \
\
static struct intc_mask_reg p ## _mask_registers[] __initdata = { \
INTC_IRQ_PINS_MASK_16H(p, base), \
}; \
\
static struct intc_prio_reg p ## _prio_registers[] __initdata = { \
INTC_IRQ_PINS_PRIO_16H(p, base), \
}; \
\
static struct intc_sense_reg p ## _sense_registers[] __initdata = { \
INTC_IRQ_PINS_SENSE_16H(p, base), \
}; \
\
static struct intc_mask_reg p ## _ack_registers[] __initdata = { \
INTC_IRQ_PINS_ACK_16H(p, base), \
}; \
\
static struct intc_desc p ## _desc __initdata = { \
.name = str, \
.resource = p ## _resources, \
.num_resources = ARRAY_SIZE(p ## _resources), \
.hw = INTC_HW_DESC(p ## _vectors, NULL, \
p ## _mask_registers, p ## _prio_registers, \
p ## _sense_registers, p ## _ack_registers) \
}
#define INTC_IRQ_PINS_32(p, base, vect, str) \
\
static struct resource p ## _resources[] __initdata = { \
[0] = { \
.start = base, \
.end = base + 0x6c, \
.flags = IORESOURCE_MEM, \
}, \
}; \
\
enum { \
p ## _UNUSED = 0, \
INTC_IRQ_PINS_ENUM_16L(p), \
INTC_IRQ_PINS_ENUM_16H(p), \
}; \
\
static struct intc_vect p ## _vectors[] __initdata = { \
INTC_IRQ_PINS_VECT_16L(p, vect), \
INTC_IRQ_PINS_VECT_16H(p, vect), \
}; \
\
static struct intc_mask_reg p ## _mask_registers[] __initdata = { \
INTC_IRQ_PINS_MASK_16L(p, base), \
INTC_IRQ_PINS_MASK_16H(p, base), \
}; \
\
static struct intc_prio_reg p ## _prio_registers[] __initdata = { \
INTC_IRQ_PINS_PRIO_16L(p, base), \
INTC_IRQ_PINS_PRIO_16H(p, base), \
}; \
\
static struct intc_sense_reg p ## _sense_registers[] __initdata = { \
INTC_IRQ_PINS_SENSE_16L(p, base), \
INTC_IRQ_PINS_SENSE_16H(p, base), \
}; \
\
static struct intc_mask_reg p ## _ack_registers[] __initdata = { \
INTC_IRQ_PINS_ACK_16L(p, base), \
INTC_IRQ_PINS_ACK_16H(p, base), \
}; \
\
static struct intc_desc p ## _desc __initdata = { \
.name = str, \
.resource = p ## _resources, \
.num_resources = ARRAY_SIZE(p ## _resources), \
.hw = INTC_HW_DESC(p ## _vectors, NULL, \
p ## _mask_registers, p ## _prio_registers, \
p ## _sense_registers, p ## _ack_registers) \
}
#define INTC_PINT_E_EMPTY
#define INTC_PINT_E_NONE 0, 0, 0, 0, 0, 0, 0, 0,
#define INTC_PINT_E(p) \
PINT ## p ## 0, PINT ## p ## 1, PINT ## p ## 2, PINT ## p ## 3, \
PINT ## p ## 4, PINT ## p ## 5, PINT ## p ## 6, PINT ## p ## 7,
#define INTC_PINT_V_NONE
#define INTC_PINT_V(p, vect) \
vect(PINT ## p ## 0, 0), vect(PINT ## p ## 1, 1), \
vect(PINT ## p ## 2, 2), vect(PINT ## p ## 3, 3), \
vect(PINT ## p ## 4, 4), vect(PINT ## p ## 5, 5), \
vect(PINT ## p ## 6, 6), vect(PINT ## p ## 7, 7),
#define INTC_PINT(p, mask_reg, sense_base, str, \
enums_1, enums_2, enums_3, enums_4, \
vect_1, vect_2, vect_3, vect_4, \
mask_a, mask_b, mask_c, mask_d, \
sense_a, sense_b, sense_c, sense_d) \
\
enum { \
PINT ## p ## _UNUSED = 0, \
enums_1 enums_2 enums_3 enums_4 \
}; \
\
static struct intc_vect p ## _vectors[] __initdata = { \
vect_1 vect_2 vect_3 vect_4 \
}; \
\
static struct intc_mask_reg p ## _mask_registers[] __initdata = { \
{ mask_reg, 0, 32,
/* PINTER */
\
{ mask_a mask_b mask_c mask_d } } \
}; \
\
static struct intc_sense_reg p ## _sense_registers[] __initdata = { \
{ sense_base + 0x00, 16, 2,
/* PINTCR */
\
{ sense_a } }, \
{ sense_base + 0x04, 16, 2,
/* PINTCR */
\
{ sense_b } }, \
{ sense_base + 0x08, 16, 2,
/* PINTCR */
\
{ sense_c } }, \
{ sense_base + 0x0c, 16, 2,
/* PINTCR */
\
{ sense_d } }, \
}; \
\
static struct intc_desc p ## _desc __initdata = { \
.name = str, \
.hw = INTC_HW_DESC(p ## _vectors, NULL, \
p ## _mask_registers, NULL, \
p ## _sense_registers, NULL), \
}
/* INTCS */
#define INTCS_VECT_BASE 0x3400
#define INTCS_VECT(n, vect) INTC_VECT((n), INTCS_VECT_BASE + (vect))
#define intcs_evt2irq(evt) evt2irq(INTCS_VECT_BASE + (evt))
#endif
/* __ASM_MACH_INTC_H */
arch/arm/mach-shmobile/pm-rmobile.h
View file @
9dd289a4
...
...
@@ -12,10 +12,6 @@
#include <linux/pm_domain.h>
#define DEFAULT_DEV_LATENCY_NS 250000
struct
platform_device
;
struct
rmobile_pm_domain
{
struct
generic_pm_domain
genpd
;
struct
dev_power_governor
*
gov
;
...
...
@@ -26,9 +22,4 @@ struct rmobile_pm_domain {
bool
no_debug
;
};
struct
pm_domain_device
{
const
char
*
domain_name
;
struct
platform_device
*
pdev
;
};
#endif
/* PM_RMOBILE_H */
arch/arm/mach-shmobile/r8a7778.h
deleted
100644 → 0
View file @
a362ec8f
/*
* Copyright (C) 2013 Renesas Solutions Corp.
* Copyright (C) 2013 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
* Copyright (C) 2013 Cogent Embedded, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __ASM_R8A7778_H__
#define __ASM_R8A7778_H__
#include <linux/sh_eth.h>
/* HPB-DMA slave IDs */
enum
{
HPBDMA_SLAVE_DUMMY
,
HPBDMA_SLAVE_SDHI0_TX
,
HPBDMA_SLAVE_SDHI0_RX
,
HPBDMA_SLAVE_SSI0_TX
,
HPBDMA_SLAVE_SSI0_RX
,
HPBDMA_SLAVE_SSI1_TX
,
HPBDMA_SLAVE_SSI1_RX
,
HPBDMA_SLAVE_SSI2_TX
,
HPBDMA_SLAVE_SSI2_RX
,
HPBDMA_SLAVE_SSI3_TX
,
HPBDMA_SLAVE_SSI3_RX
,
HPBDMA_SLAVE_SSI4_TX
,
HPBDMA_SLAVE_SSI4_RX
,
HPBDMA_SLAVE_SSI5_TX
,
HPBDMA_SLAVE_SSI5_RX
,
HPBDMA_SLAVE_SSI6_TX
,
HPBDMA_SLAVE_SSI6_RX
,
HPBDMA_SLAVE_SSI7_TX
,
HPBDMA_SLAVE_SSI7_RX
,
HPBDMA_SLAVE_SSI8_TX
,
HPBDMA_SLAVE_SSI8_RX
,
HPBDMA_SLAVE_HPBIF0_TX
,
HPBDMA_SLAVE_HPBIF0_RX
,
HPBDMA_SLAVE_HPBIF1_TX
,
HPBDMA_SLAVE_HPBIF1_RX
,
HPBDMA_SLAVE_HPBIF2_TX
,
HPBDMA_SLAVE_HPBIF2_RX
,
HPBDMA_SLAVE_HPBIF3_TX
,
HPBDMA_SLAVE_HPBIF3_RX
,
HPBDMA_SLAVE_HPBIF4_TX
,
HPBDMA_SLAVE_HPBIF4_RX
,
HPBDMA_SLAVE_HPBIF5_TX
,
HPBDMA_SLAVE_HPBIF5_RX
,
HPBDMA_SLAVE_HPBIF6_TX
,
HPBDMA_SLAVE_HPBIF6_RX
,
HPBDMA_SLAVE_HPBIF7_TX
,
HPBDMA_SLAVE_HPBIF7_RX
,
HPBDMA_SLAVE_HPBIF8_TX
,
HPBDMA_SLAVE_HPBIF8_RX
,
HPBDMA_SLAVE_USBFUNC_TX
,
HPBDMA_SLAVE_USBFUNC_RX
,
};
extern
void
r8a7778_add_standard_devices
(
void
);
extern
void
r8a7778_add_standard_devices_dt
(
void
);
extern
void
r8a7778_add_dt_devices
(
void
);
extern
void
r8a7778_init_late
(
void
);
extern
void
r8a7778_init_irq_dt
(
void
);
extern
void
r8a7778_clock_init
(
void
);
extern
void
r8a7778_init_irq_extpin
(
int
irlm
);
extern
void
r8a7778_init_irq_extpin_dt
(
int
irlm
);
extern
void
r8a7778_pinmux_init
(
void
);
extern
int
r8a7778_usb_phy_power
(
bool
enable
);
#endif
/* __ASM_R8A7778_H__ */
arch/arm/mach-shmobile/r8a7779.h
View file @
9dd289a4
#ifndef __ASM_R8A7779_H__
#define __ASM_R8A7779_H__
#include <linux/sh_clk.h>
extern
void
r8a7779_pm_init
(
void
);
#ifdef CONFIG_PM
...
...
arch/arm/mach-shmobile/setup-r8a7778.c
View file @
9dd289a4
...
...
@@ -16,35 +16,16 @@
*/
#include <linux/clk/shmobile.h>
#include <linux/kernel.h>
#include <linux/io.h>
#include <linux/irqchip/arm-gic.h>
#include <linux/of.h>
#include <linux/of_platform.h>
#include <linux/platform_data/dma-rcar-hpbdma.h>
#include <linux/platform_data/gpio-rcar.h>
#include <linux/platform_data/irq-renesas-intc-irqpin.h>
#include <linux/platform_device.h>
#include <linux/irqchip.h>
#include <linux/serial_sci.h>
#include <linux/sh_timer.h>
#include <linux/pm_runtime.h>
#include <linux/usb/phy.h>
#include <linux/usb/hcd.h>
#include <linux/usb/ehci_pdriver.h>
#include <linux/usb/ohci_pdriver.h>
#include <linux/dma-mapping.h>
#include <asm/mach/arch.h>
#include <asm/hardware/cache-l2x0.h>
#include "common.h"
#include "irqs.h"
#include "r8a7778.h"
#define MODEMR 0xffcc0020
#ifdef CONFIG_COMMON_CLK
static
void
__init
r8a7778_timer_init
(
void
)
{
u32
mode
;
...
...
@@ -55,535 +36,7 @@ static void __init r8a7778_timer_init(void)
iounmap
(
modemr
);
r8a7778_clocks_init
(
mode
);
}
#endif
/* SCIF */
#define R8A7778_SCIF(index, baseaddr, irq) \
static struct plat_sci_port scif##index##_platform_data = { \
.flags = UPF_BOOT_AUTOCONF | UPF_IOREMAP, \
.scscr = SCSCR_RE | SCSCR_TE | SCSCR_CKE1, \
.type = PORT_SCIF, \
}; \
\
static struct resource scif##index##_resources[] = { \
DEFINE_RES_MEM(baseaddr, 0x100), \
DEFINE_RES_IRQ(irq), \
}
R8A7778_SCIF
(
0
,
0xffe40000
,
gic_iid
(
0x66
));
R8A7778_SCIF
(
1
,
0xffe41000
,
gic_iid
(
0x67
));
R8A7778_SCIF
(
2
,
0xffe42000
,
gic_iid
(
0x68
));
R8A7778_SCIF
(
3
,
0xffe43000
,
gic_iid
(
0x69
));
R8A7778_SCIF
(
4
,
0xffe44000
,
gic_iid
(
0x6a
));
R8A7778_SCIF
(
5
,
0xffe45000
,
gic_iid
(
0x6b
));
#define r8a7778_register_scif(index) \
platform_device_register_resndata(NULL, "sh-sci", index, \
scif##index##_resources, \
ARRAY_SIZE(scif##index##_resources), \
&scif##index##_platform_data, \
sizeof(scif##index##_platform_data))
/* TMU */
static
struct
sh_timer_config
sh_tmu0_platform_data
=
{
.
channels_mask
=
7
,
};
static
struct
resource
sh_tmu0_resources
[]
=
{
DEFINE_RES_MEM
(
0xffd80000
,
0x30
),
DEFINE_RES_IRQ
(
gic_iid
(
0x40
)),
DEFINE_RES_IRQ
(
gic_iid
(
0x41
)),
DEFINE_RES_IRQ
(
gic_iid
(
0x42
)),
};
#define r8a7778_register_tmu(idx) \
platform_device_register_resndata( \
NULL, "sh-tmu", idx, \
sh_tmu##idx##_resources, \
ARRAY_SIZE(sh_tmu##idx##_resources), \
&sh_tmu##idx##_platform_data, \
sizeof(sh_tmu##idx##_platform_data))
int
r8a7778_usb_phy_power
(
bool
enable
)
{
static
struct
usb_phy
*
phy
=
NULL
;
int
ret
=
0
;
if
(
!
phy
)
phy
=
usb_get_phy
(
USB_PHY_TYPE_USB2
);
if
(
IS_ERR
(
phy
))
{
pr_err
(
"kernel doesn't have usb phy driver
\n
"
);
return
PTR_ERR
(
phy
);
}
if
(
enable
)
ret
=
usb_phy_init
(
phy
);
else
usb_phy_shutdown
(
phy
);
return
ret
;
}
/* USB */
static
int
usb_power_on
(
struct
platform_device
*
pdev
)
{
int
ret
=
r8a7778_usb_phy_power
(
true
);
if
(
ret
)
return
ret
;
pm_runtime_enable
(
&
pdev
->
dev
);
pm_runtime_get_sync
(
&
pdev
->
dev
);
return
0
;
}
static
void
usb_power_off
(
struct
platform_device
*
pdev
)
{
if
(
r8a7778_usb_phy_power
(
false
))
return
;
pm_runtime_put_sync
(
&
pdev
->
dev
);
pm_runtime_disable
(
&
pdev
->
dev
);
}
static
int
ehci_init_internal_buffer
(
struct
usb_hcd
*
hcd
)
{
/*
* Below are recommended values from the datasheet;
* see [USB :: Setting of EHCI Internal Buffer].
*/
/* EHCI IP internal buffer setting */
iowrite32
(
0x00ff0040
,
hcd
->
regs
+
0x0094
);
/* EHCI IP internal buffer enable */
iowrite32
(
0x00000001
,
hcd
->
regs
+
0x009C
);
return
0
;
}
static
struct
usb_ehci_pdata
ehci_pdata
__initdata
=
{
.
power_on
=
usb_power_on
,
.
power_off
=
usb_power_off
,
.
power_suspend
=
usb_power_off
,
.
pre_setup
=
ehci_init_internal_buffer
,
};
static
struct
resource
ehci_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xffe70000
,
0x400
),
DEFINE_RES_IRQ
(
gic_iid
(
0x4c
)),
};
static
struct
usb_ohci_pdata
ohci_pdata
__initdata
=
{
.
power_on
=
usb_power_on
,
.
power_off
=
usb_power_off
,
.
power_suspend
=
usb_power_off
,
};
static
struct
resource
ohci_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xffe70400
,
0x400
),
DEFINE_RES_IRQ
(
gic_iid
(
0x4c
)),
};
#define USB_PLATFORM_INFO(hci) \
static struct platform_device_info hci##_info __initdata = { \
.name = #hci "-platform", \
.id = -1, \
.res = hci##_resources, \
.num_res = ARRAY_SIZE(hci##_resources), \
.data = &hci##_pdata, \
.size_data = sizeof(hci##_pdata), \
.dma_mask = DMA_BIT_MASK(32), \
}
USB_PLATFORM_INFO
(
ehci
);
USB_PLATFORM_INFO
(
ohci
);
/* PFC/GPIO */
static
struct
resource
pfc_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xfffc0000
,
0x118
),
};
#define R8A7778_GPIO(idx) \
static struct resource r8a7778_gpio##idx##_resources[] __initdata = { \
DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30), \
DEFINE_RES_IRQ(gic_iid(0x87)), \
}; \
\
static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data __initdata = { \
.gpio_base = 32 * (idx), \
.irq_base = GPIO_IRQ_BASE(idx), \
.number_of_pins = 32, \
.pctl_name = "pfc-r8a7778", \
}
R8A7778_GPIO
(
0
);
R8A7778_GPIO
(
1
);
R8A7778_GPIO
(
2
);
R8A7778_GPIO
(
3
);
R8A7778_GPIO
(
4
);
#define r8a7778_register_gpio(idx) \
platform_device_register_resndata( \
NULL, "gpio_rcar", idx, \
r8a7778_gpio##idx##_resources, \
ARRAY_SIZE(r8a7778_gpio##idx##_resources), \
&r8a7778_gpio##idx##_platform_data, \
sizeof(r8a7778_gpio##idx##_platform_data))
void
__init
r8a7778_pinmux_init
(
void
)
{
platform_device_register_simple
(
"pfc-r8a7778"
,
-
1
,
pfc_resources
,
ARRAY_SIZE
(
pfc_resources
));
r8a7778_register_gpio
(
0
);
r8a7778_register_gpio
(
1
);
r8a7778_register_gpio
(
2
);
r8a7778_register_gpio
(
3
);
r8a7778_register_gpio
(
4
);
};
/* I2C */
static
struct
resource
i2c_resources
[]
__initdata
=
{
/* I2C0 */
DEFINE_RES_MEM
(
0xffc70000
,
0x1000
),
DEFINE_RES_IRQ
(
gic_iid
(
0x63
)),
/* I2C1 */
DEFINE_RES_MEM
(
0xffc71000
,
0x1000
),
DEFINE_RES_IRQ
(
gic_iid
(
0x6e
)),
/* I2C2 */
DEFINE_RES_MEM
(
0xffc72000
,
0x1000
),
DEFINE_RES_IRQ
(
gic_iid
(
0x6c
)),
/* I2C3 */
DEFINE_RES_MEM
(
0xffc73000
,
0x1000
),
DEFINE_RES_IRQ
(
gic_iid
(
0x6d
)),
};
static
void
__init
r8a7778_register_i2c
(
int
id
)
{
BUG_ON
(
id
<
0
||
id
>
3
);
platform_device_register_simple
(
"i2c-rcar"
,
id
,
i2c_resources
+
(
2
*
id
),
2
);
}
/* HSPI */
static
struct
resource
hspi_resources
[]
__initdata
=
{
/* HSPI0 */
DEFINE_RES_MEM
(
0xfffc7000
,
0x18
),
DEFINE_RES_IRQ
(
gic_iid
(
0x5f
)),
/* HSPI1 */
DEFINE_RES_MEM
(
0xfffc8000
,
0x18
),
DEFINE_RES_IRQ
(
gic_iid
(
0x74
)),
/* HSPI2 */
DEFINE_RES_MEM
(
0xfffc6000
,
0x18
),
DEFINE_RES_IRQ
(
gic_iid
(
0x75
)),
};
static
void
__init
r8a7778_register_hspi
(
int
id
)
{
BUG_ON
(
id
<
0
||
id
>
2
);
platform_device_register_simple
(
"sh-hspi"
,
id
,
hspi_resources
+
(
2
*
id
),
2
);
}
void
__init
r8a7778_add_dt_devices
(
void
)
{
#ifdef CONFIG_CACHE_L2X0
void
__iomem
*
base
=
ioremap_nocache
(
0xf0100000
,
0x1000
);
if
(
base
)
{
/*
* Shared attribute override enable, 64K*16way
* don't call iounmap(base)
*/
l2x0_init
(
base
,
0x00400000
,
0xc20f0fff
);
}
#endif
}
/* HPB-DMA */
/* Asynchronous mode register (ASYNCMDR) bits */
#define HPB_DMAE_ASYNCMDR_ASMD22_MASK BIT(2)
/* SDHI0 */
#define HPB_DMAE_ASYNCMDR_ASMD22_SINGLE BIT(2)
/* SDHI0 */
#define HPB_DMAE_ASYNCMDR_ASMD22_MULTI 0
/* SDHI0 */
#define HPB_DMAE_ASYNCMDR_ASMD21_MASK BIT(1)
/* SDHI0 */
#define HPB_DMAE_ASYNCMDR_ASMD21_SINGLE BIT(1)
/* SDHI0 */
#define HPB_DMAE_ASYNCMDR_ASMD21_MULTI 0
/* SDHI0 */
#define HPBDMA_SSI(_id) \
{ \
.id = HPBDMA_SLAVE_SSI## _id ##_TX, \
.addr = 0xffd91008 + (_id * 0x40), \
.dcr = HPB_DMAE_DCR_CT | \
HPB_DMAE_DCR_DIP | \
HPB_DMAE_DCR_SPDS_32BIT | \
HPB_DMAE_DCR_DMDL | \
HPB_DMAE_DCR_DPDS_32BIT, \
.port = _id + (_id << 8), \
.dma_ch = (28 + _id), \
}, { \
.id = HPBDMA_SLAVE_SSI## _id ##_RX, \
.addr = 0xffd9100c + (_id * 0x40), \
.dcr = HPB_DMAE_DCR_CT | \
HPB_DMAE_DCR_DIP | \
HPB_DMAE_DCR_SMDL | \
HPB_DMAE_DCR_SPDS_32BIT | \
HPB_DMAE_DCR_DPDS_32BIT, \
.port = _id + (_id << 8), \
.dma_ch = (28 + _id), \
}
#define HPBDMA_HPBIF(_id) \
{ \
.id = HPBDMA_SLAVE_HPBIF## _id ##_TX, \
.addr = 0xffda0000 + (_id * 0x1000), \
.dcr = HPB_DMAE_DCR_CT | \
HPB_DMAE_DCR_DIP | \
HPB_DMAE_DCR_SPDS_32BIT | \
HPB_DMAE_DCR_DMDL | \
HPB_DMAE_DCR_DPDS_32BIT, \
.port = 0x1111, \
.dma_ch = (28 + _id), \
}, { \
.id = HPBDMA_SLAVE_HPBIF## _id ##_RX, \
.addr = 0xffda0000 + (_id * 0x1000), \
.dcr = HPB_DMAE_DCR_CT | \
HPB_DMAE_DCR_DIP | \
HPB_DMAE_DCR_SMDL | \
HPB_DMAE_DCR_SPDS_32BIT | \
HPB_DMAE_DCR_DPDS_32BIT, \
.port = 0x1111, \
.dma_ch = (28 + _id), \
}
static
const
struct
hpb_dmae_slave_config
hpb_dmae_slaves
[]
=
{
{
.
id
=
HPBDMA_SLAVE_SDHI0_TX
,
.
addr
=
0xffe4c000
+
0x30
,
.
dcr
=
HPB_DMAE_DCR_SPDS_16BIT
|
HPB_DMAE_DCR_DMDL
|
HPB_DMAE_DCR_DPDS_16BIT
,
.
rstr
=
HPB_DMAE_ASYNCRSTR_ASRST21
|
HPB_DMAE_ASYNCRSTR_ASRST22
|
HPB_DMAE_ASYNCRSTR_ASRST23
,
.
mdr
=
HPB_DMAE_ASYNCMDR_ASMD21_MULTI
,
.
mdm
=
HPB_DMAE_ASYNCMDR_ASMD21_MASK
,
.
port
=
0x0D0C
,
.
flags
=
HPB_DMAE_SET_ASYNC_RESET
|
HPB_DMAE_SET_ASYNC_MODE
,
.
dma_ch
=
21
,
},
{
.
id
=
HPBDMA_SLAVE_SDHI0_RX
,
.
addr
=
0xffe4c000
+
0x30
,
.
dcr
=
HPB_DMAE_DCR_SMDL
|
HPB_DMAE_DCR_SPDS_16BIT
|
HPB_DMAE_DCR_DPDS_16BIT
,
.
rstr
=
HPB_DMAE_ASYNCRSTR_ASRST21
|
HPB_DMAE_ASYNCRSTR_ASRST22
|
HPB_DMAE_ASYNCRSTR_ASRST23
,
.
mdr
=
HPB_DMAE_ASYNCMDR_ASMD22_MULTI
,
.
mdm
=
HPB_DMAE_ASYNCMDR_ASMD22_MASK
,
.
port
=
0x0D0C
,
.
flags
=
HPB_DMAE_SET_ASYNC_RESET
|
HPB_DMAE_SET_ASYNC_MODE
,
.
dma_ch
=
22
,
},
{
.
id
=
HPBDMA_SLAVE_USBFUNC_TX
,
/* for D0 */
.
addr
=
0xffe60018
,
.
dcr
=
HPB_DMAE_DCR_SPDS_32BIT
|
HPB_DMAE_DCR_DMDL
|
HPB_DMAE_DCR_DPDS_32BIT
,
.
port
=
0x0000
,
.
dma_ch
=
14
,
},
{
.
id
=
HPBDMA_SLAVE_USBFUNC_RX
,
/* for D1 */
.
addr
=
0xffe6001c
,
.
dcr
=
HPB_DMAE_DCR_SMDL
|
HPB_DMAE_DCR_SPDS_32BIT
|
HPB_DMAE_DCR_DPDS_32BIT
,
.
port
=
0x0101
,
.
dma_ch
=
15
,
},
HPBDMA_SSI
(
0
),
HPBDMA_SSI
(
1
),
HPBDMA_SSI
(
2
),
HPBDMA_SSI
(
3
),
HPBDMA_SSI
(
4
),
HPBDMA_SSI
(
5
),
HPBDMA_SSI
(
6
),
HPBDMA_SSI
(
7
),
HPBDMA_SSI
(
8
),
HPBDMA_HPBIF
(
0
),
HPBDMA_HPBIF
(
1
),
HPBDMA_HPBIF
(
2
),
HPBDMA_HPBIF
(
3
),
HPBDMA_HPBIF
(
4
),
HPBDMA_HPBIF
(
5
),
HPBDMA_HPBIF
(
6
),
HPBDMA_HPBIF
(
7
),
HPBDMA_HPBIF
(
8
),
};
static
const
struct
hpb_dmae_channel
hpb_dmae_channels
[]
=
{
HPB_DMAE_CHANNEL
(
0x7c
,
HPBDMA_SLAVE_USBFUNC_TX
),
/* ch. 14 */
HPB_DMAE_CHANNEL
(
0x7c
,
HPBDMA_SLAVE_USBFUNC_RX
),
/* ch. 15 */
HPB_DMAE_CHANNEL
(
0x7e
,
HPBDMA_SLAVE_SDHI0_TX
),
/* ch. 21 */
HPB_DMAE_CHANNEL
(
0x7e
,
HPBDMA_SLAVE_SDHI0_RX
),
/* ch. 22 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI0_TX
),
/* ch. 28 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI0_RX
),
/* ch. 28 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF0_TX
),
/* ch. 28 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF0_RX
),
/* ch. 28 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI1_TX
),
/* ch. 29 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI1_RX
),
/* ch. 29 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF1_TX
),
/* ch. 29 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF1_RX
),
/* ch. 29 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI2_TX
),
/* ch. 30 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI2_RX
),
/* ch. 30 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF2_TX
),
/* ch. 30 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF2_RX
),
/* ch. 30 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI3_TX
),
/* ch. 31 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI3_RX
),
/* ch. 31 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF3_TX
),
/* ch. 31 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF3_RX
),
/* ch. 31 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI4_TX
),
/* ch. 32 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI4_RX
),
/* ch. 32 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF4_TX
),
/* ch. 32 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF4_RX
),
/* ch. 32 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI5_TX
),
/* ch. 33 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI5_RX
),
/* ch. 33 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF5_TX
),
/* ch. 33 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF5_RX
),
/* ch. 33 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI6_TX
),
/* ch. 34 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI6_RX
),
/* ch. 34 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF6_TX
),
/* ch. 34 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF6_RX
),
/* ch. 34 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI7_TX
),
/* ch. 35 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI7_RX
),
/* ch. 35 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF7_TX
),
/* ch. 35 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF7_RX
),
/* ch. 35 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI8_TX
),
/* ch. 36 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_SSI8_RX
),
/* ch. 36 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF8_TX
),
/* ch. 36 */
HPB_DMAE_CHANNEL
(
0x7f
,
HPBDMA_SLAVE_HPBIF8_RX
),
/* ch. 36 */
};
static
struct
hpb_dmae_pdata
dma_platform_data
__initdata
=
{
.
slaves
=
hpb_dmae_slaves
,
.
num_slaves
=
ARRAY_SIZE
(
hpb_dmae_slaves
),
.
channels
=
hpb_dmae_channels
,
.
num_channels
=
ARRAY_SIZE
(
hpb_dmae_channels
),
.
ts_shift
=
{
[
XMIT_SZ_8BIT
]
=
0
,
[
XMIT_SZ_16BIT
]
=
1
,
[
XMIT_SZ_32BIT
]
=
2
,
},
.
num_hw_channels
=
39
,
};
static
struct
resource
hpb_dmae_resources
[]
__initdata
=
{
/* Channel registers */
DEFINE_RES_MEM
(
0xffc08000
,
0x1000
),
/* Common registers */
DEFINE_RES_MEM
(
0xffc09000
,
0x170
),
/* Asynchronous reset registers */
DEFINE_RES_MEM
(
0xffc00300
,
4
),
/* Asynchronous mode registers */
DEFINE_RES_MEM
(
0xffc00400
,
4
),
/* IRQ for DMA channels */
DEFINE_RES_NAMED
(
gic_iid
(
0x7b
),
5
,
NULL
,
IORESOURCE_IRQ
),
};
static
void
__init
r8a7778_register_hpb_dmae
(
void
)
{
platform_device_register_resndata
(
NULL
,
"hpb-dma-engine"
,
-
1
,
hpb_dmae_resources
,
ARRAY_SIZE
(
hpb_dmae_resources
),
&
dma_platform_data
,
sizeof
(
dma_platform_data
));
}
void
__init
r8a7778_add_standard_devices
(
void
)
{
r8a7778_add_dt_devices
();
r8a7778_register_tmu
(
0
);
r8a7778_register_scif
(
0
);
r8a7778_register_scif
(
1
);
r8a7778_register_scif
(
2
);
r8a7778_register_scif
(
3
);
r8a7778_register_scif
(
4
);
r8a7778_register_scif
(
5
);
r8a7778_register_i2c
(
0
);
r8a7778_register_i2c
(
1
);
r8a7778_register_i2c
(
2
);
r8a7778_register_i2c
(
3
);
r8a7778_register_hspi
(
0
);
r8a7778_register_hspi
(
1
);
r8a7778_register_hspi
(
2
);
r8a7778_register_hpb_dmae
();
}
void
__init
r8a7778_init_late
(
void
)
{
shmobile_init_late
();
platform_device_register_full
(
&
ehci_info
);
platform_device_register_full
(
&
ohci_info
);
}
static
struct
renesas_intc_irqpin_config
irqpin_platform_data
__initdata
=
{
.
irq_base
=
irq_pin
(
0
),
/* IRQ0 -> IRQ3 */
.
sense_bitfield_width
=
2
,
};
static
struct
resource
irqpin_resources
[]
__initdata
=
{
DEFINE_RES_MEM
(
0xfe78001c
,
4
),
/* ICR1 */
DEFINE_RES_MEM
(
0xfe780010
,
4
),
/* INTPRI */
DEFINE_RES_MEM
(
0xfe780024
,
4
),
/* INTREQ */
DEFINE_RES_MEM
(
0xfe780044
,
4
),
/* INTMSK0 */
DEFINE_RES_MEM
(
0xfe780064
,
4
),
/* INTMSKCLR0 */
DEFINE_RES_IRQ
(
gic_iid
(
0x3b
)),
/* IRQ0 */
DEFINE_RES_IRQ
(
gic_iid
(
0x3c
)),
/* IRQ1 */
DEFINE_RES_IRQ
(
gic_iid
(
0x3d
)),
/* IRQ2 */
DEFINE_RES_IRQ
(
gic_iid
(
0x3e
)),
/* IRQ3 */
};
void
__init
r8a7778_init_irq_extpin_dt
(
int
irlm
)
{
void
__iomem
*
icr0
=
ioremap_nocache
(
0xfe780000
,
PAGE_SIZE
);
unsigned
long
tmp
;
if
(
!
icr0
)
{
pr_warn
(
"r8a7778: unable to setup external irq pin mode
\n
"
);
return
;
}
tmp
=
ioread32
(
icr0
);
if
(
irlm
)
tmp
|=
1
<<
23
;
/* IRQ0 -> IRQ3 as individual pins */
else
tmp
&=
~
(
1
<<
23
);
/* IRL mode - not supported */
tmp
|=
(
1
<<
21
);
/* LVLMODE = 1 */
iowrite32
(
tmp
,
icr0
);
iounmap
(
icr0
);
}
void
__init
r8a7778_init_irq_extpin
(
int
irlm
)
{
r8a7778_init_irq_extpin_dt
(
irlm
);
if
(
irlm
)
platform_device_register_resndata
(
NULL
,
"renesas_intc_irqpin"
,
-
1
,
irqpin_resources
,
ARRAY_SIZE
(
irqpin_resources
),
&
irqpin_platform_data
,
sizeof
(
irqpin_platform_data
));
}
#ifdef CONFIG_USE_OF
#define INT2SMSKCR0 0x82288
/* 0xfe782288 */
#define INT2SMSKCR1 0x8228c
/* 0xfe78228c */
...
...
@@ -592,18 +45,11 @@ void __init r8a7778_init_irq_extpin(int irlm)
void
__init
r8a7778_init_irq_dt
(
void
)
{
void
__iomem
*
base
=
ioremap_nocache
(
0xfe700000
,
0x00100000
);
#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
void
__iomem
*
gic_dist_base
=
ioremap_nocache
(
0xfe438000
,
0x1000
);
void
__iomem
*
gic_cpu_base
=
ioremap_nocache
(
0xfe430000
,
0x1000
);
#endif
BUG_ON
(
!
base
);
#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
gic_init
(
0
,
29
,
gic_dist_base
,
gic_cpu_base
);
#else
irqchip_init
();
#endif
/* route all interrupts to ARM */
__raw_writel
(
0x73ffffff
,
base
+
INT2NTSR0
);
__raw_writel
(
0xffffffff
,
base
+
INT2NTSR1
);
...
...
@@ -624,10 +70,6 @@ DT_MACHINE_START(R8A7778_DT, "Generic R8A7778 (Flattened Device Tree)")
.
init_early
=
shmobile_init_delay
,
.
init_irq
=
r8a7778_init_irq_dt
,
.
init_late
=
shmobile_init_late
,
#ifdef CONFIG_COMMON_CLK
.
init_time
=
r8a7778_timer_init
,
#endif
.
dt_compat
=
r8a7778_compat_dt
,
MACHINE_END
#endif
/* CONFIG_USE_OF */
arch/arm/mach-shmobile/sh-gpio.h
deleted
100644 → 0
View file @
a362ec8f
/*
* Generic GPIO API and pinmux table support
*
* Copyright (c) 2008 Magnus Damm
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*/
#ifndef __ASM_ARCH_GPIO_H
#define __ASM_ARCH_GPIO_H
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/io.h>
/*
* FIXME !!
*
* current gpio frame work doesn't have
* the method to control only pull up/down/free.
* this function should be replaced by correct gpio function
*/
static
inline
void
__init
gpio_direction_none
(
void
__iomem
*
addr
)
{
__raw_writeb
(
0x00
,
addr
);
}
#endif
/* __ASM_ARCH_GPIO_H */
arch/arm/mach-shmobile/timer.c
View file @
9dd289a4
...
...
@@ -77,24 +77,3 @@ void __init shmobile_init_delay(void)
shmobile_setup_delay_hz
(
max_freq
,
2
,
4
);
}
}
static
void
__init
shmobile_late_time_init
(
void
)
{
/*
* Make sure all compiled-in early timers register themselves.
*
* Run probe() for two "earlytimer" devices, these will be the
* clockevents and clocksource devices respectively. In the event
* that only a clockevents device is available, we -ENODEV on the
* clocksource and the jiffies clocksource is used transparently
* instead. No error handling is necessary here.
*/
early_platform_driver_register_all
(
"earlytimer"
);
early_platform_driver_probe
(
"earlytimer"
,
2
,
0
);
}
void
__init
shmobile_earlytimer_init
(
void
)
{
late_time_init
=
shmobile_late_time_init
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment