-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ARM] 5590/1: Add basic support for ST Nomadik 8815 SoC and evaluatio…
…n board This patch adds the basic infrastructure for the Nomadik 8815 CPU and the "Nomadik Hardware Kit" NHK8815. This patch only includes the serial console and core stuff, no drivers. Signed-off-by: Alessandro Rubini <rubini@unipv.it> Acked-by: Andrea Gallo <andrea.gallo@stericsson.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Alessandro Rubini
authored and
Russell King
committed
Jul 2, 2009
1 parent
8c81b52
commit 28ad94e
Showing
23 changed files
with
883 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
if ARCH_NOMADIK | ||
|
||
menu "Nomadik boards" | ||
|
||
config MACH_NOMADIK_8815NHK | ||
bool "ST 8815 Nomadik Hardware Kit (evaluation board)" | ||
select NOMADIK_8815 | ||
|
||
endmenu | ||
|
||
config NOMADIK_8815 | ||
bool | ||
|
||
endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# | ||
# Makefile for the linux kernel. | ||
# | ||
# Note! Dependencies are done automagically by 'make dep', which also | ||
# removes any old dependencies. DON'T put your own dependencies here | ||
# unless it's something special (ie not a .c file). | ||
|
||
# Object file lists. | ||
|
||
obj-y += clock.o timer.o | ||
|
||
# Cpu revision | ||
obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o | ||
|
||
# Specific board support | ||
obj-$(CONFIG_MACH_NOMADIK_8815NHK) += board-nhk8815.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
zreladdr-y := 0x00008000 | ||
params_phys-y := 0x00000100 | ||
initrd_phys-y := 0x00800000 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* linux/arch/arm/mach-nomadik/board-8815nhk.c | ||
* | ||
* Copyright (C) STMicroelectronics | ||
* | ||
* 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. | ||
* | ||
* NHK15 board specifc driver definition | ||
*/ | ||
#include <linux/types.h> | ||
#include <linux/kernel.h> | ||
#include <linux/init.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/amba/bus.h> | ||
#include <asm/mach-types.h> | ||
#include <asm/mach/arch.h> | ||
#include <asm/mach/irq.h> | ||
#include <mach/setup.h> | ||
#include "clock.h" | ||
|
||
#define __MEM_4K_RESOURCE(x) \ | ||
.res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} | ||
|
||
static struct amba_device uart0_device = { | ||
.dev = { .init_name = "uart0" }, | ||
__MEM_4K_RESOURCE(NOMADIK_UART0_BASE), | ||
.irq = {IRQ_UART0, NO_IRQ}, | ||
}; | ||
|
||
static struct amba_device uart1_device = { | ||
.dev = { .init_name = "uart1" }, | ||
__MEM_4K_RESOURCE(NOMADIK_UART1_BASE), | ||
.irq = {IRQ_UART1, NO_IRQ}, | ||
}; | ||
|
||
static struct amba_device *amba_devs[] __initdata = { | ||
&uart0_device, | ||
&uart1_device, | ||
}; | ||
|
||
/* We have a fixed clock alone, by now */ | ||
static struct clk nhk8815_clk_48 = { | ||
.rate = 48*1000*1000, | ||
}; | ||
|
||
static struct platform_device *nhk8815_platform_devices[] __initdata = { | ||
/* currently empty, will add keypad, touchscreen etc */ | ||
}; | ||
|
||
static void __init nhk8815_platform_init(void) | ||
{ | ||
int i; | ||
|
||
cpu8815_platform_init(); | ||
platform_add_devices(nhk8815_platform_devices, | ||
ARRAY_SIZE(nhk8815_platform_devices)); | ||
|
||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { | ||
nmdk_clk_create(&nhk8815_clk_48, amba_devs[i]->dev.init_name); | ||
amba_device_register(amba_devs[i], &iomem_resource); | ||
} | ||
} | ||
|
||
MACHINE_START(NOMADIK, "NHK8815") | ||
/* Maintainer: ST MicroElectronics */ | ||
.phys_io = NOMADIK_UART0_BASE, | ||
.io_pg_offst = (IO_ADDRESS(NOMADIK_UART0_BASE) >> 18) & 0xfffc, | ||
.boot_params = 0x100, | ||
.map_io = cpu8815_map_io, | ||
.init_irq = cpu8815_init_irq, | ||
.timer = &nomadik_timer, | ||
.init_machine = nhk8815_platform_init, | ||
MACHINE_END |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
* linux/arch/arm/mach-nomadik/clock.c | ||
* | ||
* Copyright (C) 2009 Alessandro Rubini | ||
*/ | ||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/errno.h> | ||
#include <linux/clk.h> | ||
#include <asm/clkdev.h> | ||
#include "clock.h" | ||
|
||
/* | ||
* The nomadik board uses generic clocks, but the serial pl011 file | ||
* calls clk_enable(), clk_disable(), clk_get_rate(), so we provide them | ||
*/ | ||
unsigned long clk_get_rate(struct clk *clk) | ||
{ | ||
return clk->rate; | ||
} | ||
EXPORT_SYMBOL(clk_get_rate); | ||
|
||
/* enable and disable do nothing */ | ||
int clk_enable(struct clk *clk) | ||
{ | ||
return 0; | ||
} | ||
EXPORT_SYMBOL(clk_enable); | ||
|
||
void clk_disable(struct clk *clk) | ||
{ | ||
} | ||
EXPORT_SYMBOL(clk_disable); | ||
|
||
/* Create a clock structure with the given name */ | ||
int nmdk_clk_create(struct clk *clk, const char *dev_id) | ||
{ | ||
struct clk_lookup *clkdev; | ||
|
||
clkdev = clkdev_alloc(clk, NULL, dev_id); | ||
if (!clkdev) | ||
return -ENOMEM; | ||
clkdev_add(clkdev); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
|
||
/* | ||
* linux/arch/arm/mach-nomadik/clock.h | ||
* | ||
* Copyright (C) 2009 Alessandro Rubini | ||
* | ||
* 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. | ||
*/ | ||
struct clk { | ||
unsigned long rate; | ||
}; | ||
extern int nmdk_clk_create(struct clk *clk, const char *dev_id); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* Copyright STMicroelectronics, 2007. | ||
* | ||
* 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, or | ||
* (at your option) any later version. | ||
* | ||
* 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. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
*/ | ||
|
||
#include <linux/types.h> | ||
#include <linux/init.h> | ||
#include <linux/device.h> | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/irqs.h> | ||
#include <asm/mach/map.h> | ||
#include <asm/hardware/vic.h> | ||
|
||
/* All SoC devices live in the same area (see hardware.h) */ | ||
static struct map_desc nomadik_io_desc[] __initdata = { | ||
{ | ||
.virtual = NOMADIK_IO_VIRTUAL, | ||
.pfn = __phys_to_pfn(NOMADIK_IO_PHYSICAL), | ||
.length = NOMADIK_IO_SIZE, | ||
.type = MT_DEVICE, | ||
} | ||
/* static ram and secured ram may be added later */ | ||
}; | ||
|
||
void __init cpu8815_map_io(void) | ||
{ | ||
iotable_init(nomadik_io_desc, ARRAY_SIZE(nomadik_io_desc)); | ||
} | ||
|
||
void __init cpu8815_init_irq(void) | ||
{ | ||
/* This modified VIC cell has two register blocks, at 0 and 0x20 */ | ||
vic_init(io_p2v(NOMADIK_IC_BASE + 0x00), IRQ_VIC_START + 0, ~0, 0); | ||
vic_init(io_p2v(NOMADIK_IC_BASE + 0x20), IRQ_VIC_START + 32, ~0, 0); | ||
} | ||
|
||
/* | ||
* This function is called from the board init ("init_machine"). | ||
* Currently nothing is done as we can't register amba devs so early. | ||
*/ | ||
void __init cpu8815_platform_init(void) | ||
{ | ||
return; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#ifndef __ASM_MACH_CLKDEV_H | ||
#define __ASM_MACH_CLKDEV_H | ||
|
||
#define __clk_get(clk) ({ 1; }) | ||
#define __clk_put(clk) do { } while (0) | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
/* | ||
* Debugging macro include header | ||
* | ||
* Copyright (C) 1994-1999 Russell King | ||
* Moved from linux/arch/arm/kernel/debug.S by Ben Dooks | ||
* | ||
* 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. | ||
* | ||
*/ | ||
|
||
.macro addruart,rx | ||
mrc p15, 0, \rx, c1, c0 | ||
tst \rx, #1 @ MMU enabled? | ||
moveq \rx, #0x10000000 @ physical base address | ||
movne \rx, #0xf0000000 @ virtual base | ||
add \rx, \rx, #0x00100000 | ||
add \rx, \rx, #0x000fb000 | ||
.endm | ||
|
||
#include <asm/hardware/debug-pl01x.S> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* | ||
* Low-level IRQ helper macros for Nomadik platforms | ||
* | ||
* 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. | ||
*/ | ||
|
||
#include <mach/hardware.h> | ||
#include <mach/irqs.h> | ||
|
||
.macro disable_fiq | ||
.endm | ||
|
||
.macro get_irqnr_preamble, base, tmp | ||
ldr \base, =IO_ADDRESS(NOMADIK_IC_BASE) | ||
.endm | ||
|
||
.macro arch_ret_to_user, tmp1, tmp2 | ||
.endm | ||
|
||
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
|
||
/* This stanza gets the irq mask from one of two status registers */ | ||
mov \irqnr, #0 | ||
ldr \irqstat, [\base, #VIC_REG_IRQSR0] @ get masked status | ||
cmp \irqstat, #0 | ||
bne 1001f | ||
add \irqnr, \irqnr, #32 | ||
ldr \irqstat, [\base, #VIC_REG_IRQSR1] @ get masked status | ||
|
||
1001: tst \irqstat, #15 | ||
bne 1002f | ||
add \irqnr, \irqnr, #4 | ||
movs \irqstat, \irqstat, lsr #4 | ||
bne 1001b | ||
1002: tst \irqstat, #1 | ||
bne 1003f | ||
add \irqnr, \irqnr, #1 | ||
movs \irqstat, \irqstat, lsr #1 | ||
bne 1002b | ||
1003: /* EQ will be set if no irqs pending */ | ||
.endm |
Oops, something went wrong.