diff options
author | Du Huanpeng <u74147@gmail.com> | 2014-03-28 01:26:37 +0400 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-03-28 10:28:15 +0100 |
commit | c1ef9f84a3b5d8f07ec3d998dd7278cccdb64542 (patch) | |
tree | ef7ff1c51d9a78d3c2f532adff098d045629ef3c /arch/mips/mach-ath79 | |
parent | f0ca02de16269961e9bbb70c816a812e42c3bde4 (diff) | |
download | barebox-c1ef9f84a3b5d8f07ec3d998dd7278cccdb64542.tar.gz barebox-c1ef9f84a3b5d8f07ec3d998dd7278cccdb64542.tar.xz |
MIPS: add Atheros ar933x family support
Use the mach-ath79 name for compatibility with linux kernel.
Signed-off-by: Du Huanpeng <u74147@gmail.com>
Signed-off-by: Antony Pavlov <antonynpavlov@gmail.com>
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/mips/mach-ath79')
-rw-r--r-- | arch/mips/mach-ath79/Kconfig | 7 | ||||
-rw-r--r-- | arch/mips/mach-ath79/Makefile | 1 | ||||
-rw-r--r-- | arch/mips/mach-ath79/include/mach/ar71xx_regs.h | 64 | ||||
-rw-r--r-- | arch/mips/mach-ath79/include/mach/ath79.h | 33 | ||||
-rw-r--r-- | arch/mips/mach-ath79/reset.c | 32 |
5 files changed, 137 insertions, 0 deletions
diff --git a/arch/mips/mach-ath79/Kconfig b/arch/mips/mach-ath79/Kconfig new file mode 100644 index 0000000000..5f73e0a5ab --- /dev/null +++ b/arch/mips/mach-ath79/Kconfig @@ -0,0 +1,7 @@ +if MACH_MIPS_ATH79 + +config ARCH_TEXT_BASE + hex + default 0xa0800000 + +endif diff --git a/arch/mips/mach-ath79/Makefile b/arch/mips/mach-ath79/Makefile new file mode 100644 index 0000000000..f3cc6684b8 --- /dev/null +++ b/arch/mips/mach-ath79/Makefile @@ -0,0 +1 @@ +obj-y += reset.o diff --git a/arch/mips/mach-ath79/include/mach/ar71xx_regs.h b/arch/mips/mach-ath79/include/mach/ar71xx_regs.h new file mode 100644 index 0000000000..0c6ddd6388 --- /dev/null +++ b/arch/mips/mach-ath79/include/mach/ar71xx_regs.h @@ -0,0 +1,64 @@ +/* + * Atheros AR71XX/AR724X/AR913X SoC register definitions + * + * Copyright (C) 2010-2011 Jaiganesh Narayanan <jnarayanan@atheros.com> + * Copyright (C) 2008-2010 Gabor Juhos <juhosg@openwrt.org> + * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> + * + * Parts of this file are based on Atheros' 2.6.15/2.6.31 BSP + * + * 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. + */ + +#ifndef __ASM_MACH_AR71XX_REGS_H +#define __ASM_MACH_AR71XX_REGS_H + +#include <linux/bitops.h> + +#define AR71XX_APB_BASE 0x18000000 + +#define AR71XX_PLL_BASE (AR71XX_APB_BASE + 0x00050000) +#define AR71XX_PLL_SIZE 0x100 +#define AR71XX_RESET_BASE (AR71XX_APB_BASE + 0x00060000) +#define AR71XX_RESET_SIZE 0x100 + +#define AR933X_UART_BASE (AR71XX_APB_BASE + 0x00020000) +#define AR933X_UART_SIZE 0x14 + +/* + * PLL block + */ +#define AR933X_PLL_CPU_CONFIG_REG 0x00 +#define AR933X_PLL_CPU_CONFIG2_REG 0x04 +#define AR933X_PLL_CLOCK_CTRL_REG 0x08 +#define AR933X_PLL_DITHER_FRAC_REG 0x10 +#define AR933X_PLL_DITHER_REG 0x14 + +#define AR933X_PLL_CPU_CONFIG_NINT_SHIFT 10 +#define AR933X_PLL_CPU_CONFIG_NINT_MASK 0x3f +#define AR933X_PLL_CPU_CONFIG_REFDIV_SHIFT 16 +#define AR933X_PLL_CPU_CONFIG_REFDIV_MASK 0x1f +#define AR933X_PLL_CPU_CONFIG_OUTDIV_SHIFT 23 +#define AR933X_PLL_CPU_CONFIG_OUTDIV_MASK 0x7 + +#define AR933X_PLL_CLOCK_CTRL_BYPASS BIT(2) +#define AR933X_PLL_CLOCK_CTRL_CPU_DIV_SHIFT 5 +#define AR933X_PLL_CLOCK_CTRL_CPU_DIV_MASK 0x3 +#define AR933X_PLL_CLOCK_CTRL_DDR_DIV_SHIFT 10 +#define AR933X_PLL_CLOCK_CTRL_DDR_DIV_MASK 0x3 +#define AR933X_PLL_CLOCK_CTRL_AHB_DIV_SHIFT 15 +#define AR933X_PLL_CLOCK_CTRL_AHB_DIV_MASK 0x7 + +/* + * RESET block + */ +#define AR933X_RESET_REG_RESET_MODULE 0x1c +#define AR933X_RESET_REG_BOOTSTRAP 0xac + +#define AR71XX_RESET_FULL_CHIP BIT(24) + +#define AR933X_BOOTSTRAP_REF_CLK_40 BIT(0) + +#endif /* __ASM_MACH_AR71XX_REGS_H */ diff --git a/arch/mips/mach-ath79/include/mach/ath79.h b/arch/mips/mach-ath79/include/mach/ath79.h new file mode 100644 index 0000000000..ff53406fb0 --- /dev/null +++ b/arch/mips/mach-ath79/include/mach/ath79.h @@ -0,0 +1,33 @@ +/* + * Atheros AR71XX/AR724X/AR913X common definitions + * + * Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> + * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> + * + * Parts of this file are based on Atheros' 2.6.15 BSP + * + * 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. + */ + +#ifndef __ASM_MACH_ATH79_H +#define __ASM_MACH_ATH79_H + +#include <common.h> +#include <io.h> +#include <asm/memory.h> + +#include <mach/ar71xx_regs.h> + +static inline void ath79_reset_wr(unsigned reg, u32 val) +{ + __raw_writel(val, (char *)KSEG1ADDR(AR71XX_RESET_BASE + reg)); +} + +static inline u32 ath79_reset_rr(unsigned reg) +{ + return __raw_readl((char *)KSEG1ADDR(AR71XX_RESET_BASE + reg)); +} + +#endif /* __ASM_MACH_ATH79_H */ diff --git a/arch/mips/mach-ath79/reset.c b/arch/mips/mach-ath79/reset.c new file mode 100644 index 0000000000..a0e9b349ca --- /dev/null +++ b/arch/mips/mach-ath79/reset.c @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2013 Du Huanpeng <u74147@gmail.com> + * + * This file is part of barebox. + * See file CREDITS for list of people who contributed to this project. + * + * 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. + * + * 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 <common.h> +#include <mach/ath79.h> + +void __noreturn reset_cpu(ulong addr) +{ + ath79_reset_wr(AR933X_RESET_REG_RESET_MODULE, AR71XX_RESET_FULL_CHIP); + /* + * Used to command a full chip reset. This is the software equivalent of + * pulling the reset pin. The system will reboot with PLL disabled. + * Always zero when read. + */ + unreachable(); + /*NOTREACHED*/ +} +EXPORT_SYMBOL(reset_cpu); |