-
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.
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/upstream-…
…linus * 'upstream' of git://git.linux-mips.org/pub/scm/upstream-linus: (26 commits) MIPS: Malta: enable Cirrus FB console MIPS: add CONFIG_VIRTUALIZATION for virtio support MIPS: Implement __read_mostly MIPS: ath79: add common WMAC device for AR913X based boards MIPS: ath79: Add initial support for the Atheros AP81 reference board MIPS: ath79: add common SPI controller device SPI: Add SPI controller driver for the Atheros AR71XX/AR724X/AR913X SoCs MIPS: ath79: add common GPIO buttons device MIPS: ath79: add common watchdog device MIPS: ath79: add common GPIO LEDs device MIPS: ath79: add initial support for the Atheros PB44 reference board MIPS: ath79: utilize the MIPS multi-machine support MIPS: ath79: add GPIOLIB support MIPS: Add initial support for the Atheros AR71XX/AR724X/AR931X SoCs MIPS: jump label: Add MIPS support. MIPS: Use WARN() in uasm for better diagnostics. MIPS: Optimize TLB handlers for Octeon CPUs MIPS: Add LDX and LWX instructions to uasm. MIPS: Use BBIT instructions in TLB handlers MIPS: Declare uasm bbit0 and bbit1 functions. ...
- Loading branch information
Showing
58 changed files
with
3,408 additions
and
129 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,50 @@ | ||
if ATH79 | ||
|
||
menu "Atheros AR71XX/AR724X/AR913X machine selection" | ||
|
||
config ATH79_MACH_AP81 | ||
bool "Atheros AP81 reference board" | ||
select SOC_AR913X | ||
select ATH79_DEV_AR913X_WMAC | ||
select ATH79_DEV_GPIO_BUTTONS | ||
select ATH79_DEV_LEDS_GPIO | ||
select ATH79_DEV_SPI | ||
help | ||
Say 'Y' here if you want your kernel to support the | ||
Atheros AP81 reference board. | ||
|
||
config ATH79_MACH_PB44 | ||
bool "Atheros PB44 reference board" | ||
select SOC_AR71XX | ||
select ATH79_DEV_GPIO_BUTTONS | ||
select ATH79_DEV_LEDS_GPIO | ||
select ATH79_DEV_SPI | ||
help | ||
Say 'Y' here if you want your kernel to support the | ||
Atheros PB44 reference board. | ||
|
||
endmenu | ||
|
||
config SOC_AR71XX | ||
def_bool n | ||
|
||
config SOC_AR724X | ||
def_bool n | ||
|
||
config SOC_AR913X | ||
def_bool n | ||
|
||
config ATH79_DEV_AR913X_WMAC | ||
depends on SOC_AR913X | ||
def_bool n | ||
|
||
config ATH79_DEV_GPIO_BUTTONS | ||
def_bool n | ||
|
||
config ATH79_DEV_LEDS_GPIO | ||
def_bool n | ||
|
||
config ATH79_DEV_SPI | ||
def_bool n | ||
|
||
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,28 @@ | ||
# | ||
# Makefile for the Atheros AR71XX/AR724X/AR913X specific parts of the kernel | ||
# | ||
# Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
# Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
# | ||
# 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. | ||
|
||
obj-y := prom.o setup.o irq.o common.o clock.o gpio.o | ||
|
||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o | ||
|
||
# | ||
# Devices | ||
# | ||
obj-y += dev-common.o | ||
obj-$(CONFIG_ATH79_DEV_AR913X_WMAC) += dev-ar913x-wmac.o | ||
obj-$(CONFIG_ATH79_DEV_GPIO_BUTTONS) += dev-gpio-buttons.o | ||
obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev-leds-gpio.o | ||
obj-$(CONFIG_ATH79_DEV_SPI) += dev-spi.o | ||
|
||
# | ||
# Machines | ||
# | ||
obj-$(CONFIG_ATH79_MACH_AP81) += mach-ap81.o | ||
obj-$(CONFIG_ATH79_MACH_PB44) += mach-pb44.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,7 @@ | ||
# | ||
# Atheros AR71xx/AR724x/AR913x | ||
# | ||
|
||
platform-$(CONFIG_ATH79) += ath79/ | ||
cflags-$(CONFIG_ATH79) += -I$(srctree)/arch/mips/include/asm/mach-ath79 | ||
load-$(CONFIG_ATH79) = 0xffffffff80060000 |
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,183 @@ | ||
/* | ||
* Atheros AR71XX/AR724X/AR913X common routines | ||
* | ||
* Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | ||
* | ||
* 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. | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/module.h> | ||
#include <linux/init.h> | ||
#include <linux/err.h> | ||
#include <linux/clk.h> | ||
|
||
#include <asm/mach-ath79/ath79.h> | ||
#include <asm/mach-ath79/ar71xx_regs.h> | ||
#include "common.h" | ||
|
||
#define AR71XX_BASE_FREQ 40000000 | ||
#define AR724X_BASE_FREQ 5000000 | ||
#define AR913X_BASE_FREQ 5000000 | ||
|
||
struct clk { | ||
unsigned long rate; | ||
}; | ||
|
||
static struct clk ath79_ref_clk; | ||
static struct clk ath79_cpu_clk; | ||
static struct clk ath79_ddr_clk; | ||
static struct clk ath79_ahb_clk; | ||
static struct clk ath79_wdt_clk; | ||
static struct clk ath79_uart_clk; | ||
|
||
static void __init ar71xx_clocks_init(void) | ||
{ | ||
u32 pll; | ||
u32 freq; | ||
u32 div; | ||
|
||
ath79_ref_clk.rate = AR71XX_BASE_FREQ; | ||
|
||
pll = ath79_pll_rr(AR71XX_PLL_REG_CPU_CONFIG); | ||
|
||
div = ((pll >> AR71XX_PLL_DIV_SHIFT) & AR71XX_PLL_DIV_MASK) + 1; | ||
freq = div * ath79_ref_clk.rate; | ||
|
||
div = ((pll >> AR71XX_CPU_DIV_SHIFT) & AR71XX_CPU_DIV_MASK) + 1; | ||
ath79_cpu_clk.rate = freq / div; | ||
|
||
div = ((pll >> AR71XX_DDR_DIV_SHIFT) & AR71XX_DDR_DIV_MASK) + 1; | ||
ath79_ddr_clk.rate = freq / div; | ||
|
||
div = (((pll >> AR71XX_AHB_DIV_SHIFT) & AR71XX_AHB_DIV_MASK) + 1) * 2; | ||
ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | ||
|
||
ath79_wdt_clk.rate = ath79_ahb_clk.rate; | ||
ath79_uart_clk.rate = ath79_ahb_clk.rate; | ||
} | ||
|
||
static void __init ar724x_clocks_init(void) | ||
{ | ||
u32 pll; | ||
u32 freq; | ||
u32 div; | ||
|
||
ath79_ref_clk.rate = AR724X_BASE_FREQ; | ||
pll = ath79_pll_rr(AR724X_PLL_REG_CPU_CONFIG); | ||
|
||
div = ((pll >> AR724X_PLL_DIV_SHIFT) & AR724X_PLL_DIV_MASK); | ||
freq = div * ath79_ref_clk.rate; | ||
|
||
div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK); | ||
freq *= div; | ||
|
||
ath79_cpu_clk.rate = freq; | ||
|
||
div = ((pll >> AR724X_DDR_DIV_SHIFT) & AR724X_DDR_DIV_MASK) + 1; | ||
ath79_ddr_clk.rate = freq / div; | ||
|
||
div = (((pll >> AR724X_AHB_DIV_SHIFT) & AR724X_AHB_DIV_MASK) + 1) * 2; | ||
ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | ||
|
||
ath79_wdt_clk.rate = ath79_ahb_clk.rate; | ||
ath79_uart_clk.rate = ath79_ahb_clk.rate; | ||
} | ||
|
||
static void __init ar913x_clocks_init(void) | ||
{ | ||
u32 pll; | ||
u32 freq; | ||
u32 div; | ||
|
||
ath79_ref_clk.rate = AR913X_BASE_FREQ; | ||
pll = ath79_pll_rr(AR913X_PLL_REG_CPU_CONFIG); | ||
|
||
div = ((pll >> AR913X_PLL_DIV_SHIFT) & AR913X_PLL_DIV_MASK); | ||
freq = div * ath79_ref_clk.rate; | ||
|
||
ath79_cpu_clk.rate = freq; | ||
|
||
div = ((pll >> AR913X_DDR_DIV_SHIFT) & AR913X_DDR_DIV_MASK) + 1; | ||
ath79_ddr_clk.rate = freq / div; | ||
|
||
div = (((pll >> AR913X_AHB_DIV_SHIFT) & AR913X_AHB_DIV_MASK) + 1) * 2; | ||
ath79_ahb_clk.rate = ath79_cpu_clk.rate / div; | ||
|
||
ath79_wdt_clk.rate = ath79_ahb_clk.rate; | ||
ath79_uart_clk.rate = ath79_ahb_clk.rate; | ||
} | ||
|
||
void __init ath79_clocks_init(void) | ||
{ | ||
if (soc_is_ar71xx()) | ||
ar71xx_clocks_init(); | ||
else if (soc_is_ar724x()) | ||
ar724x_clocks_init(); | ||
else if (soc_is_ar913x()) | ||
ar913x_clocks_init(); | ||
else | ||
BUG(); | ||
|
||
pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, " | ||
"Ref:%lu.%03luMHz", | ||
ath79_cpu_clk.rate / 1000000, | ||
(ath79_cpu_clk.rate / 1000) % 1000, | ||
ath79_ddr_clk.rate / 1000000, | ||
(ath79_ddr_clk.rate / 1000) % 1000, | ||
ath79_ahb_clk.rate / 1000000, | ||
(ath79_ahb_clk.rate / 1000) % 1000, | ||
ath79_ref_clk.rate / 1000000, | ||
(ath79_ref_clk.rate / 1000) % 1000); | ||
} | ||
|
||
/* | ||
* Linux clock API | ||
*/ | ||
struct clk *clk_get(struct device *dev, const char *id) | ||
{ | ||
if (!strcmp(id, "ref")) | ||
return &ath79_ref_clk; | ||
|
||
if (!strcmp(id, "cpu")) | ||
return &ath79_cpu_clk; | ||
|
||
if (!strcmp(id, "ddr")) | ||
return &ath79_ddr_clk; | ||
|
||
if (!strcmp(id, "ahb")) | ||
return &ath79_ahb_clk; | ||
|
||
if (!strcmp(id, "wdt")) | ||
return &ath79_wdt_clk; | ||
|
||
if (!strcmp(id, "uart")) | ||
return &ath79_uart_clk; | ||
|
||
return ERR_PTR(-ENOENT); | ||
} | ||
EXPORT_SYMBOL(clk_get); | ||
|
||
int clk_enable(struct clk *clk) | ||
{ | ||
return 0; | ||
} | ||
EXPORT_SYMBOL(clk_enable); | ||
|
||
void clk_disable(struct clk *clk) | ||
{ | ||
} | ||
EXPORT_SYMBOL(clk_disable); | ||
|
||
unsigned long clk_get_rate(struct clk *clk) | ||
{ | ||
return clk->rate; | ||
} | ||
EXPORT_SYMBOL(clk_get_rate); | ||
|
||
void clk_put(struct clk *clk) | ||
{ | ||
} | ||
EXPORT_SYMBOL(clk_put); |
Oops, something went wrong.