mirror of
https://github.com/armbian/linux.git
synced 2026-01-06 10:13:00 -08:00
Merge tag 'ux500-multiplatform-asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson into next/multiplatform
From Linus Walleij <linus.walleij@linaro.org>: Ux500 multiplatform support. This tag builds upon the MFD-specific base tag "ux500-multiplatform-mfd". This removes all <mach/*> dependencies and makes the ux500 fully multi-platform. * tag 'ux500-multiplatform-asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson: ARM: ux500: build hotplug.o for ARMv7-a ARM: ux500: move to multiplatform ARM: ux500: make remaining headers local ARM: ux500: make irqs.h local to platform ARM: ux500: get rid of <mach/[hardware|db8500-regs].h> staging: ste_rmi4: kill platform_data hack ARM: ux500: move mach/msp.h to <linux/platform_data/*> clk: ux500: pass clock base adresses in init call ARM: ux500: make debug macro stand-alone ARM: ux500: move debugmacro to debug includes ARM: ux500: split out prcmu initialization mfd: db8500-prcmu: drop unused includes ARM: ux500: move PM-related PRCMU functions to machine mfd: db8500-prcmu: get base address from resource mfd: prcmu: pass a base and size with the early initcall Conflicts: arch/arm/Kconfig Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -853,22 +853,6 @@ config ARCH_U300
|
||||
help
|
||||
Support for ST-Ericsson U300 series mobile platforms.
|
||||
|
||||
config ARCH_U8500
|
||||
bool "ST-Ericsson U8500 Series"
|
||||
depends on MMU
|
||||
select ARCH_HAS_CPUFREQ
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select ARM_AMBA
|
||||
select CLKDEV_LOOKUP
|
||||
select CPU_V7
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_SMP
|
||||
select MIGHT_HAVE_CACHE_L2X0
|
||||
select SPARSE_IRQ
|
||||
help
|
||||
Support for ST-Ericsson's Ux500 architecture
|
||||
|
||||
|
||||
config ARCH_DAVINCI
|
||||
bool "TI DaVinci"
|
||||
select ARCH_HAS_HOLES_MEMORYMODEL
|
||||
|
||||
@@ -432,6 +432,13 @@ choice
|
||||
Say Y here if you want the debug print routines to direct
|
||||
their output to the uart1 port on SiRFmarco devices.
|
||||
|
||||
config DEBUG_UX500_UART
|
||||
depends on ARCH_U8500
|
||||
bool "Use Ux500 UART for low-level debug"
|
||||
help
|
||||
Say Y here if you want kernel low-level debugging support
|
||||
on Ux500 based platforms.
|
||||
|
||||
config DEBUG_VEXPRESS_UART0_DETECT
|
||||
bool "Autodetect UART0 on Versatile Express Cortex-A core tiles"
|
||||
depends on ARCH_VEXPRESS && CPU_CP15_MMU
|
||||
@@ -620,6 +627,7 @@ config DEBUG_LL_INCLUDE
|
||||
DEBUG_VEXPRESS_UART0_CA9 || DEBUG_VEXPRESS_UART0_RS1
|
||||
default "debug/vt8500.S" if DEBUG_VT8500_UART0
|
||||
default "debug/tegra.S" if DEBUG_TEGRA_UART
|
||||
default "debug/ux500.S" if DEBUG_UX500_UART
|
||||
default "debug/zynq.S" if DEBUG_ZYNQ_UART0 || DEBUG_ZYNQ_UART1
|
||||
default "mach/debug-macro.S"
|
||||
|
||||
|
||||
48
arch/arm/include/debug/ux500.S
Normal file
48
arch/arm/include/debug/ux500.S
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Debugging macro include header
|
||||
*
|
||||
* Copyright (C) 2009 ST-Ericsson
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#if CONFIG_UX500_DEBUG_UART > 2
|
||||
#error Invalid Ux500 debug UART
|
||||
#endif
|
||||
|
||||
/*
|
||||
* DEBUG_LL only works if only one SOC is built in. We don't use #else below
|
||||
* in order to get "__UX500_UART redefined" warnings if more than one SOC is
|
||||
* built, so that there's some hint during the build that something is wrong.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_UX500_SOC_DB8500
|
||||
#define U8500_UART0_PHYS_BASE (0x80120000)
|
||||
#define U8500_UART1_PHYS_BASE (0x80121000)
|
||||
#define U8500_UART2_PHYS_BASE (0x80007000)
|
||||
#define U8500_UART0_VIRT_BASE (0xa8120000)
|
||||
#define U8500_UART1_VIRT_BASE (0xa8121000)
|
||||
#define U8500_UART2_VIRT_BASE (0xa8007000)
|
||||
#define __UX500_PHYS_UART(n) U8500_UART##n##_PHYS_BASE
|
||||
#define __UX500_VIRT_UART(n) U8500_UART##n##_VIRT_BASE
|
||||
#endif
|
||||
|
||||
#if !defined(__UX500_PHYS_UART) || !defined(__UX500_VIRT_UART)
|
||||
#error Unknown SOC
|
||||
#endif
|
||||
|
||||
#define UX500_PHYS_UART(n) __UX500_PHYS_UART(n)
|
||||
#define UX500_VIRT_UART(n) __UX500_VIRT_UART(n)
|
||||
#define UART_PHYS_BASE UX500_PHYS_UART(CONFIG_UX500_DEBUG_UART)
|
||||
#define UART_VIRT_BASE UX500_VIRT_UART(CONFIG_UX500_DEBUG_UART)
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
ldr \rp, =UART_PHYS_BASE @ no, physical address
|
||||
ldr \rv, =UART_VIRT_BASE @ yes, virtual address
|
||||
.endm
|
||||
|
||||
#include <asm/hardware/debug-pl01x.S>
|
||||
@@ -1,3 +1,17 @@
|
||||
config ARCH_U8500
|
||||
bool "ST-Ericsson U8500 Series" if ARCH_MULTI_V7
|
||||
depends on MMU
|
||||
select ARCH_HAS_CPUFREQ
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select ARM_AMBA
|
||||
select CLKDEV_LOOKUP
|
||||
select CPU_V7
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_SMP
|
||||
select MIGHT_HAVE_CACHE_L2X0
|
||||
help
|
||||
Support for ST-Ericsson's Ux500 architecture
|
||||
|
||||
if ARCH_U8500
|
||||
|
||||
config UX500_SOC_COMMON
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
|
||||
obj-y := cpu.o devices.o devices-common.o \
|
||||
id.o usb.o timer.o
|
||||
id.o usb.o timer.o pm.o
|
||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||
obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o
|
||||
obj-$(CONFIG_UX500_SOC_DB8500) += cpu-db8500.o devices-db8500.o
|
||||
@@ -15,3 +15,5 @@ obj-$(CONFIG_MACH_MOP500) += board-mop500.o board-mop500-sdi.o \
|
||||
board-mop500-audio.o
|
||||
obj-$(CONFIG_SMP) += platsmp.o headsmp.o
|
||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||
|
||||
CFLAGS_hotplug.o += -march=armv7-a
|
||||
|
||||
@@ -10,10 +10,9 @@
|
||||
#include <linux/platform_data/pinctrl-nomadik.h>
|
||||
#include <linux/platform_data/dma-ste-dma40.h>
|
||||
|
||||
#include <mach/devices.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/msp.h>
|
||||
#include "devices.h"
|
||||
#include "irqs.h"
|
||||
#include <linux/platform_data/asoc-ux500-msp.h>
|
||||
|
||||
#include "ste-dma40-db8500.h"
|
||||
#include "board-mop500.h"
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#include "pins-db8500.h"
|
||||
#include "board-mop500.h"
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
#include <linux/platform_data/dma-ste-dma40.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/devices.h>
|
||||
#include <mach/hardware.h>
|
||||
#include "devices.h"
|
||||
|
||||
#include "db8500-regs.h"
|
||||
#include "devices-db8500.h"
|
||||
#include "board-mop500.h"
|
||||
#include "ste-dma40-db8500.h"
|
||||
|
||||
@@ -12,12 +12,15 @@
|
||||
#include <linux/mfd/tc3589x.h>
|
||||
#include <linux/input/matrix_keypad.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include "irqs.h"
|
||||
|
||||
#include "board-mop500.h"
|
||||
|
||||
/* Dummy data that can be overridden by staging driver */
|
||||
struct i2c_board_info __initdata __weak mop500_i2c3_devices_u8500[] = {
|
||||
static struct i2c_board_info __initdata mop500_i2c3_devices_u8500[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("synaptics_rmi4_i2c", 0x4B),
|
||||
.irq = NOMADIK_GPIO_TO_IRQ(84),
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/i2c.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include "board-mop500.h"
|
||||
#include "id.h"
|
||||
|
||||
|
||||
@@ -41,13 +41,13 @@
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/setup.h>
|
||||
#include <mach/devices.h>
|
||||
#include <mach/irqs.h>
|
||||
#include "setup.h"
|
||||
#include "devices.h"
|
||||
#include "irqs.h"
|
||||
#include <linux/platform_data/crypto-ux500.h>
|
||||
|
||||
#include "ste-dma40-db8500.h"
|
||||
#include "db8500-regs.h"
|
||||
#include "devices-db8500.h"
|
||||
#include "board-mop500.h"
|
||||
#include "board-mop500-regulators.h"
|
||||
@@ -206,63 +206,6 @@ struct ab8500_platform_data ab8500_platdata = {
|
||||
.codec = &ab8500_codec_pdata,
|
||||
};
|
||||
|
||||
/*
|
||||
* Thermal Sensor
|
||||
*/
|
||||
|
||||
static struct resource db8500_thsens_resources[] = {
|
||||
{
|
||||
.name = "IRQ_HOTMON_LOW",
|
||||
.start = IRQ_PRCMU_HOTMON_LOW,
|
||||
.end = IRQ_PRCMU_HOTMON_LOW,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{
|
||||
.name = "IRQ_HOTMON_HIGH",
|
||||
.start = IRQ_PRCMU_HOTMON_HIGH,
|
||||
.end = IRQ_PRCMU_HOTMON_HIGH,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct db8500_thsens_platform_data db8500_thsens_data = {
|
||||
.trip_points[0] = {
|
||||
.temp = 70000,
|
||||
.type = THERMAL_TRIP_ACTIVE,
|
||||
.cdev_name = {
|
||||
[0] = "thermal-cpufreq-0",
|
||||
},
|
||||
},
|
||||
.trip_points[1] = {
|
||||
.temp = 75000,
|
||||
.type = THERMAL_TRIP_ACTIVE,
|
||||
.cdev_name = {
|
||||
[0] = "thermal-cpufreq-0",
|
||||
},
|
||||
},
|
||||
.trip_points[2] = {
|
||||
.temp = 80000,
|
||||
.type = THERMAL_TRIP_ACTIVE,
|
||||
.cdev_name = {
|
||||
[0] = "thermal-cpufreq-0",
|
||||
},
|
||||
},
|
||||
.trip_points[3] = {
|
||||
.temp = 85000,
|
||||
.type = THERMAL_TRIP_CRITICAL,
|
||||
},
|
||||
.num_trips = 4,
|
||||
};
|
||||
|
||||
static struct platform_device u8500_thsens_device = {
|
||||
.name = "db8500-thermal",
|
||||
.resource = db8500_thsens_resources,
|
||||
.num_resources = ARRAY_SIZE(db8500_thsens_resources),
|
||||
.dev = {
|
||||
.platform_data = &db8500_thsens_data,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device u8500_cpufreq_cooling_device = {
|
||||
.name = "db8500-cpufreq-cooling",
|
||||
};
|
||||
@@ -622,7 +565,6 @@ static struct platform_device *snowball_platform_devs[] __initdata = {
|
||||
&snowball_key_dev,
|
||||
&snowball_sbnet_dev,
|
||||
&snowball_gpio_en_3v3_regulator_dev,
|
||||
&u8500_thsens_device,
|
||||
&u8500_cpufreq_cooling_device,
|
||||
};
|
||||
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
#define __BOARD_MOP500_H
|
||||
|
||||
/* For NOMADIK_NR_GPIO */
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/msp.h>
|
||||
#include "irqs.h"
|
||||
#include <linux/platform_data/asoc-ux500-msp.h>
|
||||
#include <linux/amba/mmci.h>
|
||||
|
||||
/* Snowball specific GPIO assignments, this board has no GPIO expander */
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/hardware/cache-l2x0.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#include "db8500-regs.h"
|
||||
#include "id.h"
|
||||
|
||||
static void __iomem *l2x0_base;
|
||||
|
||||
@@ -28,15 +28,13 @@
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/setup.h>
|
||||
#include <mach/devices.h>
|
||||
#include <mach/db8500-regs.h>
|
||||
#include <mach/irqs.h>
|
||||
#include "setup.h"
|
||||
#include "devices.h"
|
||||
#include "irqs.h"
|
||||
|
||||
#include "devices-db8500.h"
|
||||
#include "ste-dma40-db8500.h"
|
||||
|
||||
#include "db8500-regs.h"
|
||||
#include "board-mop500.h"
|
||||
#include "id.h"
|
||||
|
||||
@@ -94,8 +92,6 @@ void __init u8500_map_io(void)
|
||||
iotable_init(u9540_io_desc, ARRAY_SIZE(u9540_io_desc));
|
||||
else
|
||||
iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc));
|
||||
|
||||
_PRCMU_BASE = __io_address(U8500_PRCMU_BASE);
|
||||
}
|
||||
|
||||
static struct resource db8500_pmu_resources[] = {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/mfd/db8500-prcmu.h>
|
||||
#include <linux/mfd/dbx500-prcmu.h>
|
||||
#include <linux/clksrc-dbx500-prcmu.h>
|
||||
#include <linux/sys_soc.h>
|
||||
#include <linux/err.h>
|
||||
@@ -20,18 +20,17 @@
|
||||
#include <linux/irqchip.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
#include <linux/platform_data/clk-ux500.h>
|
||||
#include <linux/platform_data/arm-ux500-pm.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/setup.h>
|
||||
#include <mach/devices.h>
|
||||
#include "setup.h"
|
||||
#include "devices.h"
|
||||
|
||||
#include "board-mop500.h"
|
||||
#include "db8500-regs.h"
|
||||
#include "id.h"
|
||||
|
||||
void __iomem *_PRCMU_BASE;
|
||||
|
||||
/*
|
||||
* FIXME: Should we set up the GPIO domain here?
|
||||
*
|
||||
@@ -68,13 +67,23 @@ void __init ux500_init_irq(void)
|
||||
* Init clocks here so that they are available for system timer
|
||||
* initialization.
|
||||
*/
|
||||
if (cpu_is_u8500_family() || cpu_is_u9540())
|
||||
db8500_prcmu_early_init();
|
||||
|
||||
if (cpu_is_u8500_family() || cpu_is_u9540())
|
||||
u8500_clk_init();
|
||||
else if (cpu_is_u8540())
|
||||
if (cpu_is_u8500_family()) {
|
||||
prcmu_early_init(U8500_PRCMU_BASE, SZ_8K - 1);
|
||||
ux500_pm_init(U8500_PRCMU_BASE, SZ_8K - 1);
|
||||
u8500_clk_init(U8500_CLKRST1_BASE, U8500_CLKRST2_BASE,
|
||||
U8500_CLKRST3_BASE, U8500_CLKRST5_BASE,
|
||||
U8500_CLKRST6_BASE);
|
||||
} else if (cpu_is_u9540()) {
|
||||
prcmu_early_init(U8500_PRCMU_BASE, SZ_8K - 1);
|
||||
ux500_pm_init(U8500_PRCMU_BASE, SZ_8K - 1);
|
||||
u8500_clk_init(U8500_CLKRST1_BASE, U8500_CLKRST2_BASE,
|
||||
U8500_CLKRST3_BASE, U8500_CLKRST5_BASE,
|
||||
U8500_CLKRST6_BASE);
|
||||
} else if (cpu_is_u8540()) {
|
||||
prcmu_early_init(U8500_PRCMU_BASE, SZ_8K + SZ_4K - 1);
|
||||
ux500_pm_init(U8500_PRCMU_BASE, SZ_8K + SZ_4K - 1);
|
||||
u8540_clk_init();
|
||||
}
|
||||
}
|
||||
|
||||
void __init ux500_init_late(void)
|
||||
|
||||
@@ -16,10 +16,13 @@
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/mfd/dbx500-prcmu.h>
|
||||
#include <linux/platform_data/arm-ux500-pm.h>
|
||||
|
||||
#include <asm/cpuidle.h>
|
||||
#include <asm/proc-fns.h>
|
||||
|
||||
#include "db8500-regs.h"
|
||||
|
||||
static atomic_t master = ATOMIC_INIT(0);
|
||||
static DEFINE_SPINLOCK(master_lock);
|
||||
static DEFINE_PER_CPU(struct cpuidle_device, ux500_cpuidle_device);
|
||||
@@ -130,7 +133,7 @@ int __init ux500_idle_init(void)
|
||||
int ret, cpu;
|
||||
struct cpuidle_device *device;
|
||||
|
||||
/* Configure wake up reasons */
|
||||
/* Configure wake up reasons */
|
||||
prcmu_enable_wakeups(PRCMU_WAKEUP(ARM) | PRCMU_WAKEUP(RTC) |
|
||||
PRCMU_WAKEUP(ABB));
|
||||
|
||||
|
||||
@@ -170,4 +170,32 @@
|
||||
/* SoC identification number information */
|
||||
#define U8500_BB_UID_BASE (U8500_BACKUPRAM1_BASE + 0xFC0)
|
||||
|
||||
/* Offsets to specific addresses in some IP blocks for DMA */
|
||||
#define MSP_TX_RX_REG_OFFSET 0
|
||||
#define CRYP1_RX_REG_OFFSET 0x10
|
||||
#define CRYP1_TX_REG_OFFSET 0x8
|
||||
#define HASH1_TX_REG_OFFSET 0x4
|
||||
|
||||
/*
|
||||
* Macros to get at IO space when running virtually
|
||||
* We dont map all the peripherals, let ioremap do
|
||||
* this for us. We map only very basic peripherals here.
|
||||
*/
|
||||
#define U8500_IO_VIRTUAL 0xf0000000
|
||||
#define U8500_IO_PHYSICAL 0xa0000000
|
||||
/* This is where we map in the ROM to check ASIC IDs */
|
||||
#define UX500_VIRT_ROM 0xf0000000
|
||||
|
||||
/* This macro is used in assembly, so no cast */
|
||||
#define IO_ADDRESS(x) \
|
||||
(((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + U8500_IO_VIRTUAL)
|
||||
|
||||
/* typesafe io address */
|
||||
#define __io_address(n) IOMEM(IO_ADDRESS(n))
|
||||
|
||||
/* Used by some plat-nomadik code */
|
||||
#define io_p2v(n) __io_address(n)
|
||||
|
||||
#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
|
||||
|
||||
#endif
|
||||
@@ -13,8 +13,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/platform_data/pinctrl-nomadik.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/irqs.h>
|
||||
#include "irqs.h"
|
||||
|
||||
#include "devices-common.h"
|
||||
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
#include <linux/platform_data/dma-ste-dma40.h>
|
||||
#include <linux/mfd/dbx500-prcmu.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/setup.h>
|
||||
#include <mach/irqs.h>
|
||||
#include "setup.h"
|
||||
#include "irqs.h"
|
||||
|
||||
#include "db8500-regs.h"
|
||||
#include "devices-db8500.h"
|
||||
#include "ste-dma40-db8500.h"
|
||||
|
||||
@@ -199,6 +199,8 @@ struct platform_device u8500_ske_keypad_device = {
|
||||
|
||||
struct prcmu_pdata db8500_prcmu_pdata = {
|
||||
.ab_platdata = &ab8500_platdata,
|
||||
.ab_irq = IRQ_DB8500_AB8500,
|
||||
.irq_base = IRQ_PRCMU_BASE,
|
||||
.version_offset = DB8500_PRCMU_FW_VERSION_OFFSET,
|
||||
.legacy_offset = DB8500_PRCMU_LEGACY_OFFSET,
|
||||
};
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
#define __DEVICES_DB8500_H
|
||||
|
||||
#include <linux/platform_data/usb-musb-ux500.h>
|
||||
#include <mach/irqs.h>
|
||||
#include "irqs.h"
|
||||
#include "db8500-regs.h"
|
||||
#include "devices-common.h"
|
||||
|
||||
struct ske_keypad_platform_data;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user