-
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.
MIPS: ralink: adds support for RT2880 SoC family
Add support code for rt2880 SOC. The code detects the SoC and registers the clk / pinmux settings. Signed-off-by: John Crispin <blogic@openwrt.org> Signed-off-by: Gabor Juhos <juhosg@openwrt.org> Patchwork: http://patchwork.linux-mips.org/patch/5176/
- Loading branch information
John Crispin
authored and
Ralf Baechle
committed
May 7, 2013
1 parent
eb63875
commit 80fb55a
Showing
6 changed files
with
198 additions
and
1 deletion.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* 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. | ||
* | ||
* Parts of this file are based on Ralink's 2.6.21 BSP | ||
* | ||
* Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
* Copyright (C) 2013 John Crispin <blogic@openwrt.org> | ||
*/ | ||
|
||
#ifndef _RT288X_REGS_H_ | ||
#define _RT288X_REGS_H_ | ||
|
||
#define RT2880_SYSC_BASE 0x00300000 | ||
|
||
#define SYSC_REG_CHIP_NAME0 0x00 | ||
#define SYSC_REG_CHIP_NAME1 0x04 | ||
#define SYSC_REG_CHIP_ID 0x0c | ||
#define SYSC_REG_SYSTEM_CONFIG 0x10 | ||
#define SYSC_REG_CLKCFG 0x30 | ||
|
||
#define RT2880_CHIP_NAME0 0x38325452 | ||
#define RT2880_CHIP_NAME1 0x20203038 | ||
|
||
#define CHIP_ID_ID_MASK 0xff | ||
#define CHIP_ID_ID_SHIFT 8 | ||
#define CHIP_ID_REV_MASK 0xff | ||
|
||
#define SYSTEM_CONFIG_CPUCLK_SHIFT 20 | ||
#define SYSTEM_CONFIG_CPUCLK_MASK 0x3 | ||
#define SYSTEM_CONFIG_CPUCLK_250 0x0 | ||
#define SYSTEM_CONFIG_CPUCLK_266 0x1 | ||
#define SYSTEM_CONFIG_CPUCLK_280 0x2 | ||
#define SYSTEM_CONFIG_CPUCLK_300 0x3 | ||
|
||
#define RT2880_GPIO_MODE_I2C BIT(0) | ||
#define RT2880_GPIO_MODE_UART0 BIT(1) | ||
#define RT2880_GPIO_MODE_SPI BIT(2) | ||
#define RT2880_GPIO_MODE_UART1 BIT(3) | ||
#define RT2880_GPIO_MODE_JTAG BIT(4) | ||
#define RT2880_GPIO_MODE_MDIO BIT(5) | ||
#define RT2880_GPIO_MODE_SDRAM BIT(6) | ||
#define RT2880_GPIO_MODE_PCI BIT(7) | ||
|
||
#define CLKCFG_SRAM_CS_N_WDT BIT(9) | ||
|
||
#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
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,139 @@ | ||
/* | ||
* 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. | ||
* | ||
* Parts of this file are based on Ralink's 2.6.21 BSP | ||
* | ||
* Copyright (C) 2008-2011 Gabor Juhos <juhosg@openwrt.org> | ||
* Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org> | ||
* Copyright (C) 2013 John Crispin <blogic@openwrt.org> | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/init.h> | ||
#include <linux/module.h> | ||
|
||
#include <asm/mipsregs.h> | ||
#include <asm/mach-ralink/ralink_regs.h> | ||
#include <asm/mach-ralink/rt288x.h> | ||
|
||
#include "common.h" | ||
|
||
static struct ralink_pinmux_grp mode_mux[] = { | ||
{ | ||
.name = "i2c", | ||
.mask = RT2880_GPIO_MODE_I2C, | ||
.gpio_first = 1, | ||
.gpio_last = 2, | ||
}, { | ||
.name = "spi", | ||
.mask = RT2880_GPIO_MODE_SPI, | ||
.gpio_first = 3, | ||
.gpio_last = 6, | ||
}, { | ||
.name = "uartlite", | ||
.mask = RT2880_GPIO_MODE_UART0, | ||
.gpio_first = 7, | ||
.gpio_last = 14, | ||
}, { | ||
.name = "jtag", | ||
.mask = RT2880_GPIO_MODE_JTAG, | ||
.gpio_first = 17, | ||
.gpio_last = 21, | ||
}, { | ||
.name = "mdio", | ||
.mask = RT2880_GPIO_MODE_MDIO, | ||
.gpio_first = 22, | ||
.gpio_last = 23, | ||
}, { | ||
.name = "sdram", | ||
.mask = RT2880_GPIO_MODE_SDRAM, | ||
.gpio_first = 24, | ||
.gpio_last = 39, | ||
}, { | ||
.name = "pci", | ||
.mask = RT2880_GPIO_MODE_PCI, | ||
.gpio_first = 40, | ||
.gpio_last = 71, | ||
}, {0} | ||
}; | ||
|
||
static void rt288x_wdt_reset(void) | ||
{ | ||
u32 t; | ||
|
||
/* enable WDT reset output on pin SRAM_CS_N */ | ||
t = rt_sysc_r32(SYSC_REG_CLKCFG); | ||
t |= CLKCFG_SRAM_CS_N_WDT; | ||
rt_sysc_w32(t, SYSC_REG_CLKCFG); | ||
} | ||
|
||
struct ralink_pinmux rt_gpio_pinmux = { | ||
.mode = mode_mux, | ||
.wdt_reset = rt288x_wdt_reset, | ||
}; | ||
|
||
void __init ralink_clk_init(void) | ||
{ | ||
unsigned long cpu_rate; | ||
u32 t = rt_sysc_r32(SYSC_REG_SYSTEM_CONFIG); | ||
t = ((t >> SYSTEM_CONFIG_CPUCLK_SHIFT) & SYSTEM_CONFIG_CPUCLK_MASK); | ||
|
||
switch (t) { | ||
case SYSTEM_CONFIG_CPUCLK_250: | ||
cpu_rate = 250000000; | ||
break; | ||
case SYSTEM_CONFIG_CPUCLK_266: | ||
cpu_rate = 266666667; | ||
break; | ||
case SYSTEM_CONFIG_CPUCLK_280: | ||
cpu_rate = 280000000; | ||
break; | ||
case SYSTEM_CONFIG_CPUCLK_300: | ||
cpu_rate = 300000000; | ||
break; | ||
} | ||
|
||
ralink_clk_add("cpu", cpu_rate); | ||
ralink_clk_add("300100.timer", cpu_rate / 2); | ||
ralink_clk_add("300120.watchdog", cpu_rate / 2); | ||
ralink_clk_add("300500.uart", cpu_rate / 2); | ||
ralink_clk_add("300c00.uartlite", cpu_rate / 2); | ||
ralink_clk_add("400000.ethernet", cpu_rate / 2); | ||
} | ||
|
||
void __init ralink_of_remap(void) | ||
{ | ||
rt_sysc_membase = plat_of_remap_node("ralink,rt2880-sysc"); | ||
rt_memc_membase = plat_of_remap_node("ralink,rt2880-memc"); | ||
|
||
if (!rt_sysc_membase || !rt_memc_membase) | ||
panic("Failed to remap core resources"); | ||
} | ||
|
||
void prom_soc_init(struct ralink_soc_info *soc_info) | ||
{ | ||
void __iomem *sysc = (void __iomem *) KSEG1ADDR(RT2880_SYSC_BASE); | ||
const char *name; | ||
u32 n0; | ||
u32 n1; | ||
u32 id; | ||
|
||
n0 = __raw_readl(sysc + SYSC_REG_CHIP_NAME0); | ||
n1 = __raw_readl(sysc + SYSC_REG_CHIP_NAME1); | ||
id = __raw_readl(sysc + SYSC_REG_CHIP_ID); | ||
|
||
if (n0 == RT2880_CHIP_NAME0 && n1 == RT2880_CHIP_NAME1) { | ||
soc_info->compatible = "ralink,r2880-soc"; | ||
name = "RT2880"; | ||
} else { | ||
panic("rt288x: unknown SoC, n0:%08x n1:%08x", n0, n1); | ||
} | ||
|
||
snprintf(soc_info->sys_type, RAMIPS_SYS_TYPE_LEN, | ||
"Ralink %s id:%u rev:%u", | ||
name, | ||
(id >> CHIP_ID_ID_SHIFT) & CHIP_ID_ID_MASK, | ||
(id & CHIP_ID_REV_MASK)); | ||
} |