-
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] 4331/3: Support for Micrel/Kendin KS8695 processor
Add core support for the Kendin/Micrel KS8695 processor family. It is an ARM922-T based SoC with integrated USART, 4-port Ethernet Switch, WAN Ethernet port, and optional PCI Host bridge, etc. http://www.micrel.com/page.do?page=product-info/sys_on_chip.jsp This patch is based on earlier patches from Lennert Buytenhek, Ben Dooks and Greg Ungerer posted to the arm-linux-kernel mailing list in March 2006; and Micrel's 2.6.9 port. Signed-off-by: Andrew Victor <andrew@sanpeople.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
- Loading branch information
Andrew Victor
authored and
Russell King
committed
May 11, 2007
1 parent
c42dcb3
commit c53c9cf
Showing
35 changed files
with
1,768 additions
and
5 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,8 @@ | ||
if ARCH_KS8695 | ||
|
||
menu "Kendin/Micrel KS8695 Implementations" | ||
|
||
|
||
endmenu | ||
|
||
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,14 @@ | ||
# arch/arm/mach-ks8695/Makefile | ||
# | ||
# Makefile for KS8695 architecture support | ||
# | ||
|
||
obj-y := cpu.o irq.o time.o devices.o | ||
obj-m := | ||
obj-n := | ||
obj- := | ||
|
||
# PCI support is optional | ||
#obj-$(CONFIG_PCI) += pci.o | ||
|
||
# Board-specific support |
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,8 @@ | ||
# Note: the following conditions must always be true: | ||
# ZRELADDR == virt_to_phys(TEXTADDR) | ||
# PARAMS_PHYS must be within 4MB of ZRELADDR | ||
# INITRD_PHYS must be in RAM | ||
|
||
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,73 @@ | ||
/* | ||
* arch/arm/mach-ks8695/cpu.c | ||
* | ||
* Copyright (C) 2006 Ben Dooks <ben@simtec.co.uk> | ||
* Copyright (C) 2006 Simtec Electronics | ||
* | ||
* KS8695 CPU support | ||
* | ||
* 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/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
|
||
#include <asm/hardware.h> | ||
#include <asm/io.h> | ||
#include <asm/mach/arch.h> | ||
#include <asm/mach/map.h> | ||
|
||
#include <asm/arch/regs-sys.h> | ||
#include <asm/arch/regs-misc.h> | ||
|
||
|
||
static struct __initdata map_desc ks8695_io_desc[] = { | ||
{ | ||
.virtual = KS8695_IO_VA, | ||
.pfn = __phys_to_pfn(KS8695_IO_PA), | ||
.length = KS8695_IO_SIZE, | ||
.type = MT_DEVICE, | ||
} | ||
}; | ||
|
||
static void __init ks8695_processor_info(void) | ||
{ | ||
unsigned long id, rev; | ||
|
||
id = __raw_readl(KS8695_MISC_VA + KS8695_DID); | ||
rev = __raw_readl(KS8695_MISC_VA + KS8695_RID); | ||
|
||
printk("KS8695 ID=%04lx SubID=%02lx Revision=%02lx\n", (id & DID_ID), (rev & RID_SUBID), (rev & RID_REVISION)); | ||
} | ||
|
||
static unsigned int sysclk[8] = { 125000000, 100000000, 62500000, 50000000, 41700000, 33300000, 31300000, 25000000 }; | ||
static unsigned int cpuclk[8] = { 166000000, 166000000, 83000000, 83000000, 55300000, 55300000, 41500000, 41500000 }; | ||
|
||
static void __init ks8695_clock_info(void) | ||
{ | ||
unsigned int scdc = __raw_readl(KS8695_SYS_VA + KS8695_CLKCON) & CLKCON_SCDC; | ||
|
||
printk("Clocks: System %u MHz, CPU %u MHz\n", | ||
sysclk[scdc] / 1000000, cpuclk[scdc] / 1000000); | ||
} | ||
|
||
void __init ks8695_map_io(void) | ||
{ | ||
iotable_init(ks8695_io_desc, ARRAY_SIZE(ks8695_io_desc)); | ||
|
||
ks8695_processor_info(); | ||
ks8695_clock_info(); | ||
} |
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,191 @@ | ||
/* | ||
* arch/arm/mach-ks8695/devices.c | ||
* | ||
* Copyright (C) 2006 Andrew Victor | ||
* | ||
* 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. | ||
* | ||
* 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 <asm/mach/arch.h> | ||
#include <asm/mach/map.h> | ||
|
||
#include <linux/platform_device.h> | ||
|
||
#include <asm/arch/regs-wan.h> | ||
#include <asm/arch/regs-lan.h> | ||
#include <asm/arch/regs-hpna.h> | ||
|
||
|
||
/* -------------------------------------------------------------------- | ||
* Ethernet | ||
* -------------------------------------------------------------------- */ | ||
|
||
#if defined(CONFIG_ARM_KS8695_ETHER) || defined(CONFIG_ARM_KS8695_ETHER_MODULE) | ||
static u64 eth_dmamask = 0xffffffffUL; | ||
|
||
static struct resource ks8695_wan_resources[] = { | ||
[0] = { | ||
.start = KS8695_WAN_VA, | ||
.end = KS8695_WAN_VA + 0x00ff, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.name = "WAN RX", | ||
.start = KS8695_IRQ_WAN_RX_STATUS, | ||
.end = KS8695_IRQ_WAN_RX_STATUS, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
[2] = { | ||
.name = "WAN TX", | ||
.start = KS8695_IRQ_WAN_TX_STATUS, | ||
.end = KS8695_IRQ_WAN_TX_STATUS, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
[3] = { | ||
.name = "WAN Link", | ||
.start = KS8695_IRQ_WAN_LINK, | ||
.end = KS8695_IRQ_WAN_LINK, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static struct platform_device ks8695_wan_device = { | ||
.name = "ks8695_ether", | ||
.id = 0, | ||
.dev = { | ||
.dma_mask = ð_dmamask, | ||
.coherent_dma_mask = 0xffffffff, | ||
}, | ||
.resource = ks8695_wan_resources, | ||
.num_resources = ARRAY_SIZE(ks8695_wan_resources), | ||
}; | ||
|
||
|
||
static struct resource ks8695_lan_resources[] = { | ||
[0] = { | ||
.start = KS8695_LAN_VA, | ||
.end = KS8695_LAN_VA + 0x00ff, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.name = "LAN RX", | ||
.start = KS8695_IRQ_LAN_RX_STATUS, | ||
.end = KS8695_IRQ_LAN_RX_STATUS, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
[2] = { | ||
.name = "LAN TX", | ||
.start = KS8695_IRQ_LAN_TX_STATUS, | ||
.end = KS8695_IRQ_LAN_TX_STATUS, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static struct platform_device ks8695_lan_device = { | ||
.name = "ks8695_ether", | ||
.id = 1, | ||
.dev = { | ||
.dma_mask = ð_dmamask, | ||
.coherent_dma_mask = 0xffffffff, | ||
}, | ||
.resource = ks8695_lan_resources, | ||
.num_resources = ARRAY_SIZE(ks8695_lan_resources), | ||
}; | ||
|
||
|
||
static struct resource ks8695_hpna_resources[] = { | ||
[0] = { | ||
.start = KS8695_HPNA_VA, | ||
.end = KS8695_HPNA_VA + 0x00ff, | ||
.flags = IORESOURCE_MEM, | ||
}, | ||
[1] = { | ||
.name = "HPNA RX", | ||
.start = KS8695_IRQ_HPNA_RX_STATUS, | ||
.end = KS8695_IRQ_HPNA_RX_STATUS, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
[2] = { | ||
.name = "HPNA TX", | ||
.start = KS8695_IRQ_HPNA_TX_STATUS, | ||
.end = KS8695_IRQ_HPNA_TX_STATUS, | ||
.flags = IORESOURCE_IRQ, | ||
}, | ||
}; | ||
|
||
static struct platform_device ks8695_hpna_device = { | ||
.name = "ks8695_ether", | ||
.id = 2, | ||
.dev = { | ||
.dma_mask = ð_dmamask, | ||
.coherent_dma_mask = 0xffffffff, | ||
}, | ||
.resource = ks8695_hpna_resources, | ||
.num_resources = ARRAY_SIZE(ks8695_hpna_resources), | ||
}; | ||
|
||
void __init ks8695_add_device_wan(void) | ||
{ | ||
platform_device_register(&ks8695_wan_device); | ||
} | ||
|
||
void __init ks8695_add_device_lan(void) | ||
{ | ||
platform_device_register(&ks8695_lan_device); | ||
} | ||
|
||
void __init ks8696_add_device_hpna(void) | ||
{ | ||
platform_device_register(&ks8695_hpna_device); | ||
} | ||
#else | ||
void __init ks8695_add_device_wan(void) {} | ||
void __init ks8695_add_device_lan(void) {} | ||
void __init ks8696_add_device_hpna(void) {} | ||
#endif | ||
|
||
|
||
/* -------------------------------------------------------------------- | ||
* Watchdog | ||
* -------------------------------------------------------------------- */ | ||
|
||
#if defined(CONFIG_KS8695_WATCHDOG) || defined(CONFIG_KS8695_WATCHDOG_MODULE) | ||
static struct platform_device ks8695_wdt_device = { | ||
.name = "ks8695_wdt", | ||
.id = -1, | ||
.num_resources = 0, | ||
}; | ||
|
||
static void __init ks8695_add_device_watchdog(void) | ||
{ | ||
platform_device_register(&ks8695_wdt_device); | ||
} | ||
#else | ||
static void __init ks8695_add_device_watchdog(void) {} | ||
#endif | ||
|
||
|
||
/* -------------------------------------------------------------------- */ | ||
|
||
/* | ||
* These devices are always present and don't need any board-specific | ||
* setup. | ||
*/ | ||
static int __init ks8695_add_standard_devices(void) | ||
{ | ||
ks8695_add_device_watchdog(); | ||
return 0; | ||
} | ||
|
||
arch_initcall(ks8695_add_standard_devices); |
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,15 @@ | ||
/* | ||
* arch/arm/mach-ks8695/generic.h | ||
* | ||
* Copyright (C) 2006 Ben Dooks <ben@simtec.co.uk> | ||
* Copyright (C) 2006 Simtec Electronics | ||
* | ||
* 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. | ||
*/ | ||
|
||
extern __init void ks8695_map_io(void); | ||
extern __init void ks8695_init_irq(void); | ||
extern struct sys_timer ks8695_timer; |
Oops, something went wrong.