mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
8ec6d93508
Add support for the Lantiq XWAY family of Mips24KEc SoCs. * Danube (PSB50702) * Twinpass (PSB4000) * AR9 (PSB50802) * Amazon SE (PSB5061) The Amazon SE is a lightweight SoC and has no PCI as well as a different clock. We split the code out into seperate files to handle this. The GPIO pins on the SoCs are multi function and there are several bits we can use to configure the pins. To be as compatible as possible to GPIOLIB we add a function int lq_gpio_request(unsigned int pin, unsigned int alt0, unsigned int alt1, unsigned int dir, const char *name); which lets you configure the 2 "alternate function" bits. This way drivers like PCI can make use of GPIOLIB without a cubersome wrapper. The PLL code inside arch/mips/lantiq/xway/clk-xway.c is voodoo to me. It was taken from a 2.4.20 source tree and was never really changed by me since then. Signed-off-by: John Crispin <blogic@openwrt.org> Signed-off-by: Ralph Hempel <ralph.hempel@lantiq.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/2249/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/*
|
|
* 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.
|
|
*
|
|
* EBU - the external bus unit attaches PCI, NOR and NAND
|
|
*
|
|
* Copyright (C) 2010 John Crispin <blogic@openwrt.org>
|
|
*/
|
|
|
|
#include <linux/kernel.h>
|
|
#include <linux/module.h>
|
|
#include <linux/version.h>
|
|
#include <linux/ioport.h>
|
|
|
|
#include <lantiq_soc.h>
|
|
|
|
/* all access to the ebu must be locked */
|
|
DEFINE_SPINLOCK(ebu_lock);
|
|
EXPORT_SYMBOL_GPL(ebu_lock);
|
|
|
|
static struct resource ltq_ebu_resource = {
|
|
.name = "ebu",
|
|
.start = LTQ_EBU_BASE_ADDR,
|
|
.end = LTQ_EBU_BASE_ADDR + LTQ_EBU_SIZE - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
};
|
|
|
|
/* remapped base addr of the clock unit and external bus unit */
|
|
void __iomem *ltq_ebu_membase;
|
|
|
|
static int __init lantiq_ebu_init(void)
|
|
{
|
|
/* insert and request the memory region */
|
|
if (insert_resource(&iomem_resource, <q_ebu_resource) < 0)
|
|
panic("Failed to insert ebu memory\n");
|
|
|
|
if (request_mem_region(ltq_ebu_resource.start,
|
|
resource_size(<q_ebu_resource), "ebu") < 0)
|
|
panic("Failed to request ebu memory\n");
|
|
|
|
/* remap ebu register range */
|
|
ltq_ebu_membase = ioremap_nocache(ltq_ebu_resource.start,
|
|
resource_size(<q_ebu_resource));
|
|
if (!ltq_ebu_membase)
|
|
panic("Failed to remap ebu memory\n");
|
|
|
|
/* make sure to unprotect the memory region where flash is located */
|
|
ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_BUSCON0) & ~EBU_WRDIS, LTQ_EBU_BUSCON0);
|
|
return 0;
|
|
}
|
|
|
|
postcore_initcall(lantiq_ebu_init);
|