ath79: replace patches
replace our downstream version of the patches with the ones that were sent upstream. Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
parent
af6e901ae8
commit
9300eda00f
35 changed files with 1332 additions and 1322 deletions
|
@ -1,14 +1,14 @@
|
|||
From cb376159800b9b44be76949c3aee89eb06d29faa Mon Sep 17 00:00:00 2001
|
||||
From f3eacff2310a60348a755c50a8da6fc251fc8587 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:55:13 +0100
|
||||
Subject: [PATCH 07/27] irqchip/irq-ath79-intc: add irq cascade driver for
|
||||
Subject: [PATCH 07/33] irqchip/irq-ath79-intc: add irq cascade driver for
|
||||
QCA9556 SoCs
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
drivers/irqchip/Makefile | 1 +
|
||||
drivers/irqchip/irq-ath79-intc.c | 104 +++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 105 insertions(+)
|
||||
drivers/irqchip/irq-ath79-intc.c | 142 +++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 143 insertions(+)
|
||||
create mode 100644 drivers/irqchip/irq-ath79-intc.c
|
||||
|
||||
--- a/drivers/irqchip/Makefile
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
From f711421eb5f6f790f1ebc09a13ae4aed8ba5f67b Mon Sep 17 00:00:00 2001
|
||||
From e029f998594f151008ecbfa024e2957edd2a5189 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:58:19 +0100
|
||||
Subject: [PATCH 08/27] irqchip/irq-ath79-cpu: drop !OF init helper
|
||||
Subject: [PATCH 08/33] irqchip/irq-ath79-cpu: drop !OF init helper
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
|
|
|
@ -1,12 +1,21 @@
|
|||
From 3ea2bff4ed3ce74dc4303aa20f5e906e78352f6b Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
From e93fe20529aeb8738b87533f66c46e2c21524530 Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <juhosg@openwrt.org>
|
||||
Date: Tue, 6 Mar 2018 10:06:10 +0100
|
||||
Subject: [PATCH 09/27] MIPS: ath79: add lots of missing registers
|
||||
Subject: [PATCH 09/33] MIPS: ath79: add lots of missing registers
|
||||
|
||||
This patch adds many new registers for various QCA MIPS SoCs. The patch is
|
||||
an aggragate of many contributions made to OpenWrt.
|
||||
|
||||
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
Signed-off-by: Henryk Heisig <hyniu@o2.pl>
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Julien Dusser <julien.dusser@free.fr>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/include/asm/mach-ath79/ar71xx_regs.h | 773 ++++++++++++++++++++++++-
|
||||
1 file changed, 771 insertions(+), 2 deletions(-)
|
||||
arch/mips/include/asm/mach-ath79/ar71xx_regs.h | 771 ++++++++++++++++++++++++-
|
||||
1 file changed, 770 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
|
@ -650,7 +659,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
|
||||
/*
|
||||
* SRIF block
|
||||
@@ -552,4 +1007,322 @@
|
||||
@@ -552,4 +1007,318 @@
|
||||
#define AR934X_SRIF_DPLL2_OUTDIV_SHIFT 13
|
||||
#define AR934X_SRIF_DPLL2_OUTDIV_MASK 0x7
|
||||
|
||||
|
@ -876,10 +885,6 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
+#define AR934X_ETH_CFG_RDV_DELAY BIT(16)
|
||||
+#define AR934X_ETH_CFG_RDV_DELAY_MASK 0x3
|
||||
+#define AR934X_ETH_CFG_RDV_DELAY_SHIFT 16
|
||||
+#define AR934X_ETH_CFG_TXD_DELAY_MASK 0x3
|
||||
+#define AR934X_ETH_CFG_TXD_DELAY_SHIFT 18
|
||||
+#define AR934X_ETH_CFG_TXE_DELAY_MASK 0x3
|
||||
+#define AR934X_ETH_CFG_TXE_DELAY_SHIFT 20
|
||||
+
|
||||
+/*
|
||||
+ * QCA953X GMAC Interface
|
||||
|
|
|
@ -0,0 +1,400 @@
|
|||
From 2741304648dbdab7697d7758166a582b5291c53d Mon Sep 17 00:00:00 2001
|
||||
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Date: Sat, 23 Jun 2018 15:08:56 +0200
|
||||
Subject: [PATCH 10/33] MIPS: ath79: add support for QCA953x QCA956x TP9343
|
||||
|
||||
This patch adds support for 2 new types of QCA silicon. TP9343 is
|
||||
essentially the same as the QCA956X but is licensed by TPLink.
|
||||
|
||||
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 193 +++++++++++++++++++++++++++++++
|
||||
arch/mips/ath79/common.c | 8 ++
|
||||
arch/mips/ath79/early_printk.c | 4 +
|
||||
arch/mips/ath79/setup.c | 34 +++++-
|
||||
arch/mips/include/asm/mach-ath79/ath79.h | 33 ++++++
|
||||
5 files changed, 269 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -355,6 +355,91 @@ static void __init ar934x_clocks_init(vo
|
||||
iounmap(dpll_base);
|
||||
}
|
||||
|
||||
+static void __init qca953x_clocks_init(void)
|
||||
+{
|
||||
+ unsigned long ref_rate;
|
||||
+ unsigned long cpu_rate;
|
||||
+ unsigned long ddr_rate;
|
||||
+ unsigned long ahb_rate;
|
||||
+ u32 pll, out_div, ref_div, nint, frac, clk_ctrl, postdiv;
|
||||
+ u32 cpu_pll, ddr_pll;
|
||||
+ u32 bootstrap;
|
||||
+
|
||||
+ bootstrap = ath79_reset_rr(QCA953X_RESET_REG_BOOTSTRAP);
|
||||
+ if (bootstrap & QCA953X_BOOTSTRAP_REF_CLK_40)
|
||||
+ ref_rate = 40 * 1000 * 1000;
|
||||
+ else
|
||||
+ ref_rate = 25 * 1000 * 1000;
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA953X_PLL_CPU_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA953X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA953X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_REFDIV_MASK;
|
||||
+ nint = (pll >> QCA953X_PLL_CPU_CONFIG_NINT_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_NINT_MASK;
|
||||
+ frac = (pll >> QCA953X_PLL_CPU_CONFIG_NFRAC_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_NFRAC_MASK;
|
||||
+
|
||||
+ cpu_pll = nint * ref_rate / ref_div;
|
||||
+ cpu_pll += frac * (ref_rate >> 6) / ref_div;
|
||||
+ cpu_pll /= (1 << out_div);
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA953X_PLL_DDR_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA953X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA953X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_REFDIV_MASK;
|
||||
+ nint = (pll >> QCA953X_PLL_DDR_CONFIG_NINT_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_NINT_MASK;
|
||||
+ frac = (pll >> QCA953X_PLL_DDR_CONFIG_NFRAC_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_NFRAC_MASK;
|
||||
+
|
||||
+ ddr_pll = nint * ref_rate / ref_div;
|
||||
+ ddr_pll += frac * (ref_rate >> 6) / (ref_div << 4);
|
||||
+ ddr_pll /= (1 << out_div);
|
||||
+
|
||||
+ clk_ctrl = ath79_pll_rr(QCA953X_PLL_CLK_CTRL_REG);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
+ QCA953X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA953X_PLL_CLK_CTRL_CPU_PLL_BYPASS)
|
||||
+ cpu_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA953X_PLL_CLK_CTRL_CPUCLK_FROM_CPUPLL)
|
||||
+ cpu_rate = cpu_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ cpu_rate = ddr_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT) &
|
||||
+ QCA953X_PLL_CLK_CTRL_DDR_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA953X_PLL_CLK_CTRL_DDR_PLL_BYPASS)
|
||||
+ ddr_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA953X_PLL_CLK_CTRL_DDRCLK_FROM_DDRPLL)
|
||||
+ ddr_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ddr_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT) &
|
||||
+ QCA953X_PLL_CLK_CTRL_AHB_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA953X_PLL_CLK_CTRL_AHB_PLL_BYPASS)
|
||||
+ ahb_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA953X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL)
|
||||
+ ahb_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ahb_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ ath79_add_sys_clkdev("ref", ref_rate);
|
||||
+ ath79_add_sys_clkdev("cpu", cpu_rate);
|
||||
+ ath79_add_sys_clkdev("ddr", ddr_rate);
|
||||
+ ath79_add_sys_clkdev("ahb", ahb_rate);
|
||||
+
|
||||
+ clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
+ clk_add_alias("uart", NULL, "ref", NULL);
|
||||
+}
|
||||
+
|
||||
static void __init qca955x_clocks_init(void)
|
||||
{
|
||||
unsigned long ref_rate;
|
||||
@@ -440,6 +525,110 @@ static void __init qca955x_clocks_init(v
|
||||
clk_add_alias("uart", NULL, "ref", NULL);
|
||||
}
|
||||
|
||||
+static void __init qca956x_clocks_init(void)
|
||||
+{
|
||||
+ unsigned long ref_rate;
|
||||
+ unsigned long cpu_rate;
|
||||
+ unsigned long ddr_rate;
|
||||
+ unsigned long ahb_rate;
|
||||
+ u32 pll, out_div, ref_div, nint, hfrac, lfrac, clk_ctrl, postdiv;
|
||||
+ u32 cpu_pll, ddr_pll;
|
||||
+ u32 bootstrap;
|
||||
+
|
||||
+ /*
|
||||
+ * QCA956x timer init workaround has to be applied right before setting
|
||||
+ * up the clock. Else, there will be no jiffies
|
||||
+ */
|
||||
+ u32 misc;
|
||||
+
|
||||
+ misc = ath79_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE);
|
||||
+ misc |= MISC_INT_MIPS_SI_TIMERINT_MASK;
|
||||
+ ath79_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, misc);
|
||||
+
|
||||
+ bootstrap = ath79_reset_rr(QCA956X_RESET_REG_BOOTSTRAP);
|
||||
+ if (bootstrap & QCA956X_BOOTSTRAP_REF_CLK_40)
|
||||
+ ref_rate = 40 * 1000 * 1000;
|
||||
+ else
|
||||
+ ref_rate = 25 * 1000 * 1000;
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_CPU_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA956X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA956X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG_REFDIV_MASK;
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_CPU_CONFIG1_REG);
|
||||
+ nint = (pll >> QCA956X_PLL_CPU_CONFIG1_NINT_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG1_NINT_MASK;
|
||||
+ hfrac = (pll >> QCA956X_PLL_CPU_CONFIG1_NFRAC_H_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG1_NFRAC_H_MASK;
|
||||
+ lfrac = (pll >> QCA956X_PLL_CPU_CONFIG1_NFRAC_L_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG1_NFRAC_L_MASK;
|
||||
+
|
||||
+ cpu_pll = nint * ref_rate / ref_div;
|
||||
+ cpu_pll += (lfrac * ref_rate) / ((ref_div * 25) << 13);
|
||||
+ cpu_pll += (hfrac >> 13) * ref_rate / ref_div;
|
||||
+ cpu_pll /= (1 << out_div);
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_DDR_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA956X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA956X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG_REFDIV_MASK;
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_DDR_CONFIG1_REG);
|
||||
+ nint = (pll >> QCA956X_PLL_DDR_CONFIG1_NINT_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG1_NINT_MASK;
|
||||
+ hfrac = (pll >> QCA956X_PLL_DDR_CONFIG1_NFRAC_H_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG1_NFRAC_H_MASK;
|
||||
+ lfrac = (pll >> QCA956X_PLL_DDR_CONFIG1_NFRAC_L_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG1_NFRAC_L_MASK;
|
||||
+
|
||||
+ ddr_pll = nint * ref_rate / ref_div;
|
||||
+ ddr_pll += (lfrac * ref_rate) / ((ref_div * 25) << 13);
|
||||
+ ddr_pll += (hfrac >> 13) * ref_rate / ref_div;
|
||||
+ ddr_pll /= (1 << out_div);
|
||||
+
|
||||
+ clk_ctrl = ath79_pll_rr(QCA956X_PLL_CLK_CTRL_REG);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
+ QCA956X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA956X_PLL_CLK_CTRL_CPU_PLL_BYPASS)
|
||||
+ cpu_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA956X_PLL_CLK_CTRL_CPU_DDRCLK_FROM_CPUPLL)
|
||||
+ cpu_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ cpu_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT) &
|
||||
+ QCA956X_PLL_CLK_CTRL_DDR_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA956X_PLL_CLK_CTRL_DDR_PLL_BYPASS)
|
||||
+ ddr_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA956X_PLL_CLK_CTRL_CPU_DDRCLK_FROM_DDRPLL)
|
||||
+ ddr_rate = cpu_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ddr_rate = ddr_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT) &
|
||||
+ QCA956X_PLL_CLK_CTRL_AHB_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA956X_PLL_CLK_CTRL_AHB_PLL_BYPASS)
|
||||
+ ahb_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA956X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL)
|
||||
+ ahb_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ahb_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ ath79_add_sys_clkdev("ref", ref_rate);
|
||||
+ ath79_add_sys_clkdev("cpu", cpu_rate);
|
||||
+ ath79_add_sys_clkdev("ddr", ddr_rate);
|
||||
+ ath79_add_sys_clkdev("ahb", ahb_rate);
|
||||
+
|
||||
+ clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
+ clk_add_alias("uart", NULL, "ref", NULL);
|
||||
+}
|
||||
+
|
||||
void __init ath79_clocks_init(void)
|
||||
{
|
||||
if (soc_is_ar71xx())
|
||||
@@ -450,8 +639,12 @@ void __init ath79_clocks_init(void)
|
||||
ar933x_clocks_init();
|
||||
else if (soc_is_ar934x())
|
||||
ar934x_clocks_init();
|
||||
+ else if (soc_is_qca953x())
|
||||
+ qca953x_clocks_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_clocks_init();
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ qca956x_clocks_init();
|
||||
else
|
||||
BUG();
|
||||
}
|
||||
--- a/arch/mips/ath79/common.c
|
||||
+++ b/arch/mips/ath79/common.c
|
||||
@@ -103,8 +103,12 @@ void ath79_device_reset_set(u32 mask)
|
||||
reg = AR933X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_ar934x())
|
||||
reg = AR934X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca953x())
|
||||
+ reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
BUG();
|
||||
|
||||
@@ -131,8 +135,12 @@ void ath79_device_reset_clear(u32 mask)
|
||||
reg = AR933X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_ar934x())
|
||||
reg = AR934X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca953x())
|
||||
+ reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
BUG();
|
||||
|
||||
--- a/arch/mips/ath79/early_printk.c
|
||||
+++ b/arch/mips/ath79/early_printk.c
|
||||
@@ -76,8 +76,12 @@ static void prom_putchar_init(void)
|
||||
case REV_ID_MAJOR_AR9341:
|
||||
case REV_ID_MAJOR_AR9342:
|
||||
case REV_ID_MAJOR_AR9344:
|
||||
+ case REV_ID_MAJOR_QCA9533:
|
||||
+ case REV_ID_MAJOR_QCA9533_V2:
|
||||
case REV_ID_MAJOR_QCA9556:
|
||||
case REV_ID_MAJOR_QCA9558:
|
||||
+ case REV_ID_MAJOR_TP9343:
|
||||
+ case REV_ID_MAJOR_QCA956X:
|
||||
_prom_putchar = prom_putchar_ar71xx;
|
||||
break;
|
||||
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -59,6 +59,7 @@ static void __init ath79_detect_sys_type
|
||||
u32 major;
|
||||
u32 minor;
|
||||
u32 rev = 0;
|
||||
+ u32 ver = 1;
|
||||
|
||||
id = ath79_reset_rr(AR71XX_RESET_REG_REV_ID);
|
||||
major = id & REV_ID_MAJOR_MASK;
|
||||
@@ -151,6 +152,17 @@ static void __init ath79_detect_sys_type
|
||||
rev = id & AR934X_REV_ID_REVISION_MASK;
|
||||
break;
|
||||
|
||||
+ case REV_ID_MAJOR_QCA9533_V2:
|
||||
+ ver = 2;
|
||||
+ ath79_soc_rev = 2;
|
||||
+ /* drop through */
|
||||
+
|
||||
+ case REV_ID_MAJOR_QCA9533:
|
||||
+ ath79_soc = ATH79_SOC_QCA9533;
|
||||
+ chip = "9533";
|
||||
+ rev = id & QCA953X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
case REV_ID_MAJOR_QCA9556:
|
||||
ath79_soc = ATH79_SOC_QCA9556;
|
||||
chip = "9556";
|
||||
@@ -163,14 +175,30 @@ static void __init ath79_detect_sys_type
|
||||
rev = id & QCA955X_REV_ID_REVISION_MASK;
|
||||
break;
|
||||
|
||||
+ case REV_ID_MAJOR_QCA956X:
|
||||
+ ath79_soc = ATH79_SOC_QCA956X;
|
||||
+ chip = "956X";
|
||||
+ rev = id & QCA956X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
+ case REV_ID_MAJOR_TP9343:
|
||||
+ ath79_soc = ATH79_SOC_TP9343;
|
||||
+ chip = "9343";
|
||||
+ rev = id & QCA956X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
panic("ath79: unknown SoC, id:0x%08x", id);
|
||||
}
|
||||
|
||||
- ath79_soc_rev = rev;
|
||||
+ if (ver == 1)
|
||||
+ ath79_soc_rev = rev;
|
||||
|
||||
- if (soc_is_qca955x())
|
||||
- sprintf(ath79_sys_type, "Qualcomm Atheros QCA%s rev %u",
|
||||
+ if (soc_is_qca953x() || soc_is_qca955x() || soc_is_qca956x())
|
||||
+ sprintf(ath79_sys_type, "Qualcomm Atheros QCA%s ver %u rev %u",
|
||||
+ chip, ver, rev);
|
||||
+ else if (soc_is_tp9343())
|
||||
+ sprintf(ath79_sys_type, "Qualcomm Atheros TP%s rev %u",
|
||||
chip, rev);
|
||||
else
|
||||
sprintf(ath79_sys_type, "Atheros AR%s rev %u", chip, rev);
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
@@ -32,8 +32,11 @@ enum ath79_soc_type {
|
||||
ATH79_SOC_AR9341,
|
||||
ATH79_SOC_AR9342,
|
||||
ATH79_SOC_AR9344,
|
||||
+ ATH79_SOC_QCA9533,
|
||||
ATH79_SOC_QCA9556,
|
||||
ATH79_SOC_QCA9558,
|
||||
+ ATH79_SOC_TP9343,
|
||||
+ ATH79_SOC_QCA956X,
|
||||
};
|
||||
|
||||
extern enum ath79_soc_type ath79_soc;
|
||||
@@ -100,6 +103,16 @@ static inline int soc_is_ar934x(void)
|
||||
return soc_is_ar9341() || soc_is_ar9342() || soc_is_ar9344();
|
||||
}
|
||||
|
||||
+static inline int soc_is_qca9533(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_QCA9533;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca953x(void)
|
||||
+{
|
||||
+ return soc_is_qca9533();
|
||||
+}
|
||||
+
|
||||
static inline int soc_is_qca9556(void)
|
||||
{
|
||||
return ath79_soc == ATH79_SOC_QCA9556;
|
||||
@@ -115,6 +128,26 @@ static inline int soc_is_qca955x(void)
|
||||
return soc_is_qca9556() || soc_is_qca9558();
|
||||
}
|
||||
|
||||
+static inline int soc_is_tp9343(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_TP9343;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca9561(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_QCA956X;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca9563(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_QCA956X;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca956x(void)
|
||||
+{
|
||||
+ return soc_is_qca9561() || soc_is_qca9563();
|
||||
+}
|
||||
+
|
||||
void ath79_ddr_wb_flush(unsigned int reg);
|
||||
void ath79_ddr_set_pci_windows(void);
|
||||
|
|
@ -1,7 +1,11 @@
|
|||
From f3d5027255ef0752ed12b65c3bf7eb363fc3c096 Mon Sep 17 00:00:00 2001
|
||||
From 0c8856211d26f84277f7fcb0b9595e5c646bc464 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 10:00:55 +0100
|
||||
Subject: [PATCH 10/27] MIPS: ath79: select the PINCTRL subsystem
|
||||
Subject: [PATCH 11/33] MIPS: ath79: select the PINCTRL subsystem
|
||||
|
||||
The pinmux on QCA SoCs is controlled by a single register. The
|
||||
"pinctrl-single" driver can be used but requires the target
|
||||
to select PINCTRL.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
|
@ -1,42 +0,0 @@
|
|||
From ac3a5ee699f3baa7654c93a3ffda46be82443344 Mon Sep 17 00:00:00 2001
|
||||
From: Markos Chandras <markos.chandras@imgtec.com>
|
||||
Date: Wed, 21 Aug 2013 11:47:22 +0100
|
||||
Subject: [PATCH 12/27] MIPS: ath79: Avoid using unitialized 'reg' variable
|
||||
|
||||
Fixes the following build error:
|
||||
arch/mips/include/asm/mach-ath79/ath79.h:139:20: error: 'reg' may be used
|
||||
uninitialized in this function [-Werror=maybe-uninitialized]
|
||||
arch/mips/ath79/common.c:62:6: note: 'reg' was declared here
|
||||
In file included from arch/mips/ath79/common.c:20:0:
|
||||
arch/mips/ath79/common.c: In function 'ath79_device_reset_clear':
|
||||
arch/mips/include/asm/mach-ath79/ath79.h:139:20:
|
||||
error: 'reg' may be used uninitialized in this function
|
||||
[-Werror=maybe-uninitialized]
|
||||
arch/mips/ath79/common.c:90:6: note: 'reg' was declared here
|
||||
|
||||
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
|
||||
Acked-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
---
|
||||
arch/mips/ath79/common.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/common.c
|
||||
+++ b/arch/mips/ath79/common.c
|
||||
@@ -106,7 +106,7 @@ void ath79_device_reset_set(u32 mask)
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
- BUG();
|
||||
+ panic("Reset register not defined for this SOC");
|
||||
|
||||
spin_lock_irqsave(&ath79_device_reset_lock, flags);
|
||||
t = ath79_reset_rr(reg);
|
||||
@@ -134,7 +134,7 @@ void ath79_device_reset_clear(u32 mask)
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
- BUG();
|
||||
+ panic("Reset register not defined for this SOC");
|
||||
|
||||
spin_lock_irqsave(&ath79_device_reset_lock, flags);
|
||||
t = ath79_reset_rr(reg);
|
|
@ -1,7 +1,10 @@
|
|||
From 11562939754b8f877562d9a137854022eb521716 Mon Sep 17 00:00:00 2001
|
||||
From 59c7470bc5c4b29ed77d46fc4982f1d85b5cbec1 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 5 Mar 2018 11:33:54 +0100
|
||||
Subject: [PATCH 13/27] MIPS: ath79: fix system restart
|
||||
Subject: [PATCH 13/33] MIPS: ath79: fix system restart
|
||||
|
||||
This patch disables irq on reboot to fix hang issues that were observed
|
||||
due to pending interrupts.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
|
@ -22,7 +25,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
if (cpu_wait)
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
@@ -134,6 +134,7 @@ static inline u32 ath79_pll_rr(unsigned
|
||||
@@ -167,6 +167,7 @@ static inline u32 ath79_pll_rr(unsigned
|
||||
static inline void ath79_reset_wr(unsigned reg, u32 val)
|
||||
{
|
||||
__raw_writel(val, ath79_reset_base + reg);
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
From 5a8496923bafc4350f51b26964fdc3252a09fd79 Mon Sep 17 00:00:00 2001
|
||||
From 30dc99e95ac4410072850ae466f696cb56097bb4 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Mon, 5 Mar 2018 11:35:29 +0100
|
||||
Subject: [PATCH 14/27] MIPS: ath79: finetune cpu-overrides
|
||||
Subject: [PATCH 14/33] MIPS: ath79: finetune cpu-overrides
|
||||
|
||||
This patch adds a few additional cpu feature overrides so that they do not
|
||||
need to be probed at runtime.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/include/asm/mach-ath79/cpu-feature-overrides.h | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
From b14f8260724abec6c82970085dece6a143d3a0db Mon Sep 17 00:00:00 2001
|
||||
From f55a400f4a691f3750eaf7bfcd6ecbf7ed1622f0 Mon Sep 17 00:00:00 2001
|
||||
From: Gabor Juhos <juhosg@openwrt.org>
|
||||
Date: Mon, 5 Mar 2018 11:38:21 +0100
|
||||
Subject: [PATCH 15/27] MIPS: ath79: enable uart during early_prink
|
||||
Subject: [PATCH 15/33] MIPS: ath79: enable uart during early_prink
|
||||
|
||||
This patch ensures, that the poinmux register is properly setup for the
|
||||
boot console uart when early_printk is enabled.
|
||||
|
||||
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/early_printk.c | 44 +++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 43 insertions(+), 1 deletion(-)
|
||||
|
@ -57,7 +61,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
|||
static void prom_putchar_init(void)
|
||||
{
|
||||
void __iomem *base;
|
||||
@@ -88,8 +128,10 @@ static void prom_putchar_init(void)
|
||||
@@ -92,8 +132,10 @@ static void prom_putchar_init(void)
|
||||
|
||||
default:
|
||||
_prom_putchar = prom_putchar_dummy;
|
||||
|
|
|
@ -1,331 +0,0 @@
|
|||
From cff23ba486e3c5d17c4d7e446f5eddead855c101 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 08:45:55 +0100
|
||||
Subject: [PATCH 16/27] MIPS: ath79: add support for QCA953x SoC
|
||||
|
||||
Note that the clock calculation looks very similar to the QCA955x, but the
|
||||
meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
|
||||
|
||||
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||
---
|
||||
arch/mips/ath79/Kconfig | 6 ++-
|
||||
arch/mips/ath79/clock.c | 87 ++++++++++++++++++++++++++++++++
|
||||
arch/mips/ath79/common.c | 4 ++
|
||||
arch/mips/ath79/dev-common.c | 4 ++
|
||||
arch/mips/ath79/early_printk.c | 2 +
|
||||
arch/mips/ath79/irq.c | 33 +++++++++++-
|
||||
arch/mips/ath79/setup.c | 21 ++++++--
|
||||
arch/mips/include/asm/mach-ath79/ath79.h | 11 ++++
|
||||
8 files changed, 162 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/Kconfig
|
||||
+++ b/arch/mips/ath79/Kconfig
|
||||
@@ -94,6 +94,10 @@ config SOC_AR934X
|
||||
select PCI_AR724X if PCI
|
||||
def_bool n
|
||||
|
||||
+config SOC_QCA953X
|
||||
+ select USB_ARCH_HAS_EHCI
|
||||
+ def_bool n
|
||||
+
|
||||
config SOC_QCA955X
|
||||
select HW_HAS_PCI
|
||||
select PCI_AR724X if PCI
|
||||
@@ -115,7 +119,7 @@ config ATH79_DEV_USB
|
||||
def_bool n
|
||||
|
||||
config ATH79_DEV_WMAC
|
||||
- depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA955X)
|
||||
+ depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA953X || SOC_QCA955X)
|
||||
def_bool n
|
||||
|
||||
endif
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -355,6 +355,91 @@ static void __init ar934x_clocks_init(vo
|
||||
iounmap(dpll_base);
|
||||
}
|
||||
|
||||
+static void __init qca953x_clocks_init(void)
|
||||
+{
|
||||
+ unsigned long ref_rate;
|
||||
+ unsigned long cpu_rate;
|
||||
+ unsigned long ddr_rate;
|
||||
+ unsigned long ahb_rate;
|
||||
+ u32 pll, out_div, ref_div, nint, frac, clk_ctrl, postdiv;
|
||||
+ u32 cpu_pll, ddr_pll;
|
||||
+ u32 bootstrap;
|
||||
+
|
||||
+ bootstrap = ath79_reset_rr(QCA953X_RESET_REG_BOOTSTRAP);
|
||||
+ if (bootstrap & QCA953X_BOOTSTRAP_REF_CLK_40)
|
||||
+ ref_rate = 40 * 1000 * 1000;
|
||||
+ else
|
||||
+ ref_rate = 25 * 1000 * 1000;
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA953X_PLL_CPU_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA953X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA953X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_REFDIV_MASK;
|
||||
+ nint = (pll >> QCA953X_PLL_CPU_CONFIG_NINT_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_NINT_MASK;
|
||||
+ frac = (pll >> QCA953X_PLL_CPU_CONFIG_NFRAC_SHIFT) &
|
||||
+ QCA953X_PLL_CPU_CONFIG_NFRAC_MASK;
|
||||
+
|
||||
+ cpu_pll = nint * ref_rate / ref_div;
|
||||
+ cpu_pll += frac * (ref_rate >> 6) / ref_div;
|
||||
+ cpu_pll /= (1 << out_div);
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA953X_PLL_DDR_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA953X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA953X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_REFDIV_MASK;
|
||||
+ nint = (pll >> QCA953X_PLL_DDR_CONFIG_NINT_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_NINT_MASK;
|
||||
+ frac = (pll >> QCA953X_PLL_DDR_CONFIG_NFRAC_SHIFT) &
|
||||
+ QCA953X_PLL_DDR_CONFIG_NFRAC_MASK;
|
||||
+
|
||||
+ ddr_pll = nint * ref_rate / ref_div;
|
||||
+ ddr_pll += frac * (ref_rate >> 6) / (ref_div << 4);
|
||||
+ ddr_pll /= (1 << out_div);
|
||||
+
|
||||
+ clk_ctrl = ath79_pll_rr(QCA953X_PLL_CLK_CTRL_REG);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
+ QCA953X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA953X_PLL_CLK_CTRL_CPU_PLL_BYPASS)
|
||||
+ cpu_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA953X_PLL_CLK_CTRL_CPUCLK_FROM_CPUPLL)
|
||||
+ cpu_rate = cpu_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ cpu_rate = ddr_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT) &
|
||||
+ QCA953X_PLL_CLK_CTRL_DDR_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA953X_PLL_CLK_CTRL_DDR_PLL_BYPASS)
|
||||
+ ddr_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA953X_PLL_CLK_CTRL_DDRCLK_FROM_DDRPLL)
|
||||
+ ddr_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ddr_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT) &
|
||||
+ QCA953X_PLL_CLK_CTRL_AHB_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA953X_PLL_CLK_CTRL_AHB_PLL_BYPASS)
|
||||
+ ahb_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA953X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL)
|
||||
+ ahb_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ahb_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ ath79_add_sys_clkdev("ref", ref_rate);
|
||||
+ ath79_add_sys_clkdev("cpu", cpu_rate);
|
||||
+ ath79_add_sys_clkdev("ddr", ddr_rate);
|
||||
+ ath79_add_sys_clkdev("ahb", ahb_rate);
|
||||
+
|
||||
+ clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
+ clk_add_alias("uart", NULL, "ref", NULL);
|
||||
+}
|
||||
+
|
||||
static void __init qca955x_clocks_init(void)
|
||||
{
|
||||
unsigned long ref_rate;
|
||||
@@ -450,6 +535,8 @@ void __init ath79_clocks_init(void)
|
||||
ar933x_clocks_init();
|
||||
else if (soc_is_ar934x())
|
||||
ar934x_clocks_init();
|
||||
+ else if (soc_is_qca953x())
|
||||
+ qca953x_clocks_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_clocks_init();
|
||||
else
|
||||
--- a/arch/mips/ath79/common.c
|
||||
+++ b/arch/mips/ath79/common.c
|
||||
@@ -103,6 +103,8 @@ void ath79_device_reset_set(u32 mask)
|
||||
reg = AR933X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_ar934x())
|
||||
reg = AR934X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca953x())
|
||||
+ reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
@@ -131,6 +133,8 @@ void ath79_device_reset_clear(u32 mask)
|
||||
reg = AR933X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_ar934x())
|
||||
reg = AR934X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca953x())
|
||||
+ reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
--- a/arch/mips/ath79/dev-common.c
|
||||
+++ b/arch/mips/ath79/dev-common.c
|
||||
@@ -85,6 +85,7 @@ void __init ath79_register_uart(void)
|
||||
soc_is_ar724x() ||
|
||||
soc_is_ar913x() ||
|
||||
soc_is_ar934x() ||
|
||||
+ soc_is_qca953x() ||
|
||||
soc_is_qca955x()) {
|
||||
ath79_uart_data[0].uartclk = uart_clk_rate;
|
||||
platform_device_register(&ath79_uart_device);
|
||||
@@ -148,6 +149,9 @@ void __init ath79_gpio_init(void)
|
||||
} else if (soc_is_ar934x()) {
|
||||
ath79_gpio_pdata.ngpios = AR934X_GPIO_COUNT;
|
||||
ath79_gpio_pdata.oe_inverted = 1;
|
||||
+ } else if (soc_is_qca953x()) {
|
||||
+ ath79_gpio_pdata.ngpios = QCA953X_GPIO_COUNT;
|
||||
+ ath79_gpio_pdata.oe_inverted = 1;
|
||||
} else if (soc_is_qca955x()) {
|
||||
ath79_gpio_pdata.ngpios = QCA955X_GPIO_COUNT;
|
||||
ath79_gpio_pdata.oe_inverted = 1;
|
||||
--- a/arch/mips/ath79/early_printk.c
|
||||
+++ b/arch/mips/ath79/early_printk.c
|
||||
@@ -116,6 +116,8 @@ static void prom_putchar_init(void)
|
||||
case REV_ID_MAJOR_AR9341:
|
||||
case REV_ID_MAJOR_AR9342:
|
||||
case REV_ID_MAJOR_AR9344:
|
||||
+ case REV_ID_MAJOR_QCA9533:
|
||||
+ case REV_ID_MAJOR_QCA9533_V2:
|
||||
case REV_ID_MAJOR_QCA9556:
|
||||
case REV_ID_MAJOR_QCA9558:
|
||||
_prom_putchar = prom_putchar_ar71xx;
|
||||
--- a/arch/mips/ath79/irq.c
|
||||
+++ b/arch/mips/ath79/irq.c
|
||||
@@ -56,6 +56,34 @@ static void ar934x_ip2_irq_init(void)
|
||||
irq_set_chained_handler(ATH79_CPU_IRQ(2), ar934x_ip2_irq_dispatch);
|
||||
}
|
||||
|
||||
+static void qca953x_ip2_irq_dispatch(struct irq_desc *desc)
|
||||
+{
|
||||
+ u32 status;
|
||||
+
|
||||
+ status = ath79_reset_rr(QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS);
|
||||
+
|
||||
+ if (status & QCA953X_PCIE_WMAC_INT_PCIE_ALL) {
|
||||
+ ath79_ddr_wb_flush(3);
|
||||
+ generic_handle_irq(ATH79_IP2_IRQ(0));
|
||||
+ } else if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) {
|
||||
+ ath79_ddr_wb_flush(4);
|
||||
+ generic_handle_irq(ATH79_IP2_IRQ(1));
|
||||
+ } else {
|
||||
+ spurious_interrupt();
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void qca953x_irq_init(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = ATH79_IP2_IRQ_BASE;
|
||||
+ i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
|
||||
+ irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
|
||||
+
|
||||
+ irq_set_chained_handler(ATH79_CPU_IRQ(2), qca953x_ip2_irq_dispatch);
|
||||
+}
|
||||
+
|
||||
static void qca955x_ip2_irq_dispatch(struct irq_desc *desc)
|
||||
{
|
||||
u32 status;
|
||||
@@ -143,7 +171,7 @@ void __init arch_init_irq(void)
|
||||
soc_is_ar913x() || soc_is_ar933x()) {
|
||||
irq_wb_chan2 = 3;
|
||||
irq_wb_chan3 = 2;
|
||||
- } else if (soc_is_ar934x()) {
|
||||
+ } else if (soc_is_ar934x() || soc_is_qca953x()) {
|
||||
irq_wb_chan3 = 2;
|
||||
}
|
||||
|
||||
@@ -154,6 +182,7 @@ void __init arch_init_irq(void)
|
||||
else if (soc_is_ar724x() ||
|
||||
soc_is_ar933x() ||
|
||||
soc_is_ar934x() ||
|
||||
+ soc_is_qca953x() ||
|
||||
soc_is_qca955x())
|
||||
misc_is_ar71xx = false;
|
||||
else
|
||||
@@ -164,6 +193,8 @@ void __init arch_init_irq(void)
|
||||
|
||||
if (soc_is_ar934x())
|
||||
ar934x_ip2_irq_init();
|
||||
+ else if (soc_is_qca953x())
|
||||
+ qca953x_irq_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_irq_init();
|
||||
}
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -60,6 +60,7 @@ static void __init ath79_detect_sys_type
|
||||
u32 major;
|
||||
u32 minor;
|
||||
u32 rev = 0;
|
||||
+ u32 ver = 1;
|
||||
|
||||
id = ath79_reset_rr(AR71XX_RESET_REG_REV_ID);
|
||||
major = id & REV_ID_MAJOR_MASK;
|
||||
@@ -152,6 +153,17 @@ static void __init ath79_detect_sys_type
|
||||
rev = id & AR934X_REV_ID_REVISION_MASK;
|
||||
break;
|
||||
|
||||
+ case REV_ID_MAJOR_QCA9533_V2:
|
||||
+ ver = 2;
|
||||
+ ath79_soc_rev = 2;
|
||||
+ /* drop through */
|
||||
+
|
||||
+ case REV_ID_MAJOR_QCA9533:
|
||||
+ ath79_soc = ATH79_SOC_QCA9533;
|
||||
+ chip = "9533";
|
||||
+ rev = id & QCA953X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
case REV_ID_MAJOR_QCA9556:
|
||||
ath79_soc = ATH79_SOC_QCA9556;
|
||||
chip = "9556";
|
||||
@@ -168,11 +180,12 @@ static void __init ath79_detect_sys_type
|
||||
panic("ath79: unknown SoC, id:0x%08x", id);
|
||||
}
|
||||
|
||||
- ath79_soc_rev = rev;
|
||||
+ if (ver == 1)
|
||||
+ ath79_soc_rev = rev;
|
||||
|
||||
- if (soc_is_qca955x())
|
||||
- sprintf(ath79_sys_type, "Qualcomm Atheros QCA%s rev %u",
|
||||
- chip, rev);
|
||||
+ if (soc_is_qca953x() || soc_is_qca955x())
|
||||
+ sprintf(ath79_sys_type, "Qualcomm Atheros QCA%s ver %u rev %u",
|
||||
+ chip, ver, rev);
|
||||
else
|
||||
sprintf(ath79_sys_type, "Atheros AR%s rev %u", chip, rev);
|
||||
pr_info("SoC: %s\n", ath79_sys_type);
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
@@ -32,6 +32,7 @@ enum ath79_soc_type {
|
||||
ATH79_SOC_AR9341,
|
||||
ATH79_SOC_AR9342,
|
||||
ATH79_SOC_AR9344,
|
||||
+ ATH79_SOC_QCA9533,
|
||||
ATH79_SOC_QCA9556,
|
||||
ATH79_SOC_QCA9558,
|
||||
};
|
||||
@@ -100,6 +101,16 @@ static inline int soc_is_ar934x(void)
|
||||
return soc_is_ar9341() || soc_is_ar9342() || soc_is_ar9344();
|
||||
}
|
||||
|
||||
+static inline int soc_is_qca9533(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_QCA9533;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca953x(void)
|
||||
+{
|
||||
+ return soc_is_qca9533();
|
||||
+}
|
||||
+
|
||||
static inline int soc_is_qca9556(void)
|
||||
{
|
||||
return ath79_soc == ATH79_SOC_QCA9556;
|
|
@ -1,7 +1,7 @@
|
|||
From 308c2ef9c4f1be2e1cee699042671eb973b51803 Mon Sep 17 00:00:00 2001
|
||||
From d3fa9694bc71338161ae2b9c7ee08b57b8140f93 Mon Sep 17 00:00:00 2001
|
||||
From: Mathias Kresin <dev@kresin.me>
|
||||
Date: Tue, 6 Mar 2018 08:37:43 +0100
|
||||
Subject: [PATCH 19/27] MIPS: ath79: get PCIe controller out of reset
|
||||
Subject: [PATCH 16/33] MIPS: ath79: get PCIe controller out of reset
|
||||
|
||||
The ar724x pci driver expects the PCIe controller to be brought out of
|
||||
reset by the bootloader.
|
||||
|
@ -21,6 +21,7 @@ took up to 20ms till the link was up. Giving the link up to 100ms
|
|||
should work for all cases.
|
||||
|
||||
Signed-off-by: Mathias Kresin <dev@kresin.me>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/pci/pci-ar724x.c | 42 ++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 42 insertions(+)
|
|
@ -1,410 +0,0 @@
|
|||
From 6aeb24b9508bbe91f89cd4eb21d0d7582d971146 Mon Sep 17 00:00:00 2001
|
||||
From: Weijie Gao <hackpascal@gmail.com>
|
||||
Date: Tue, 6 Mar 2018 08:48:31 +0100
|
||||
Subject: [PATCH 17/27] MIPS: ath79: add support for qca956x soc
|
||||
|
||||
This patch adds soc support for QCA9561 and TP9343.
|
||||
TP9343 is a reduced version of QCA9561, which can be found in TP-LINK routers in China.
|
||||
The qca956x_wmac has not yet been supported by ath9k.
|
||||
|
||||
tested on TL-WDR6500 and TL-WR882N v1 (Chinese version)
|
||||
|
||||
Signed-off-by: Weijie Gao <hackpascal@gmail.com>
|
||||
---
|
||||
arch/mips/ath79/Kconfig | 2 +-
|
||||
arch/mips/ath79/clock.c | 96 ++++++++++++++++++++++++++++++++
|
||||
arch/mips/ath79/common.c | 4 ++
|
||||
arch/mips/ath79/dev-common.c | 7 ++-
|
||||
arch/mips/ath79/early_printk.c | 2 +
|
||||
arch/mips/ath79/irq.c | 87 ++++++++++++++++++++++++++++-
|
||||
arch/mips/ath79/pci.c | 12 ++++
|
||||
arch/mips/ath79/setup.c | 17 +++++-
|
||||
arch/mips/include/asm/mach-ath79/ath79.h | 22 ++++++++
|
||||
9 files changed, 245 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/Kconfig
|
||||
+++ b/arch/mips/ath79/Kconfig
|
||||
@@ -119,7 +119,7 @@ config ATH79_DEV_USB
|
||||
def_bool n
|
||||
|
||||
config ATH79_DEV_WMAC
|
||||
- depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA953X || SOC_QCA955X)
|
||||
+ depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA953X || SOC_QCA955X || SOC_QCA956X)
|
||||
def_bool n
|
||||
|
||||
endif
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -525,6 +525,100 @@ static void __init qca955x_clocks_init(v
|
||||
clk_add_alias("uart", NULL, "ref", NULL);
|
||||
}
|
||||
|
||||
+static void __init qca956x_clocks_init(void)
|
||||
+{
|
||||
+ unsigned long ref_rate;
|
||||
+ unsigned long cpu_rate;
|
||||
+ unsigned long ddr_rate;
|
||||
+ unsigned long ahb_rate;
|
||||
+ u32 pll, out_div, ref_div, nint, hfrac, lfrac, clk_ctrl, postdiv;
|
||||
+ u32 cpu_pll, ddr_pll;
|
||||
+ u32 bootstrap;
|
||||
+
|
||||
+ bootstrap = ath79_reset_rr(QCA956X_RESET_REG_BOOTSTRAP);
|
||||
+ if (bootstrap & QCA956X_BOOTSTRAP_REF_CLK_40)
|
||||
+ ref_rate = 40 * 1000 * 1000;
|
||||
+ else
|
||||
+ ref_rate = 25 * 1000 * 1000;
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_CPU_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA956X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA956X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG_REFDIV_MASK;
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_CPU_CONFIG1_REG);
|
||||
+ nint = (pll >> QCA956X_PLL_CPU_CONFIG1_NINT_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG1_NINT_MASK;
|
||||
+ hfrac = (pll >> QCA956X_PLL_CPU_CONFIG1_NFRAC_H_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG1_NFRAC_H_MASK;
|
||||
+ lfrac = (pll >> QCA956X_PLL_CPU_CONFIG1_NFRAC_L_SHIFT) &
|
||||
+ QCA956X_PLL_CPU_CONFIG1_NFRAC_L_MASK;
|
||||
+
|
||||
+ cpu_pll = nint * ref_rate / ref_div;
|
||||
+ cpu_pll += (lfrac * ref_rate) / ((ref_div * 25) << 13);
|
||||
+ cpu_pll += (hfrac >> 13) * ref_rate / ref_div;
|
||||
+ cpu_pll /= (1 << out_div);
|
||||
+
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_DDR_CONFIG_REG);
|
||||
+ out_div = (pll >> QCA956X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
+ ref_div = (pll >> QCA956X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG_REFDIV_MASK;
|
||||
+ pll = ath79_pll_rr(QCA956X_PLL_DDR_CONFIG1_REG);
|
||||
+ nint = (pll >> QCA956X_PLL_DDR_CONFIG1_NINT_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG1_NINT_MASK;
|
||||
+ hfrac = (pll >> QCA956X_PLL_DDR_CONFIG1_NFRAC_H_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG1_NFRAC_H_MASK;
|
||||
+ lfrac = (pll >> QCA956X_PLL_DDR_CONFIG1_NFRAC_L_SHIFT) &
|
||||
+ QCA956X_PLL_DDR_CONFIG1_NFRAC_L_MASK;
|
||||
+
|
||||
+ ddr_pll = nint * ref_rate / ref_div;
|
||||
+ ddr_pll += (lfrac * ref_rate) / ((ref_div * 25) << 13);
|
||||
+ ddr_pll += (hfrac >> 13) * ref_rate / ref_div;
|
||||
+ ddr_pll /= (1 << out_div);
|
||||
+
|
||||
+ clk_ctrl = ath79_pll_rr(QCA956X_PLL_CLK_CTRL_REG);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
+ QCA956X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA956X_PLL_CLK_CTRL_CPU_PLL_BYPASS)
|
||||
+ cpu_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA956X_PLL_CLK_CTRL_CPU_DDRCLK_FROM_CPUPLL)
|
||||
+ cpu_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ cpu_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_DDR_POST_DIV_SHIFT) &
|
||||
+ QCA956X_PLL_CLK_CTRL_DDR_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA956X_PLL_CLK_CTRL_DDR_PLL_BYPASS)
|
||||
+ ddr_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA956X_PLL_CLK_CTRL_CPU_DDRCLK_FROM_DDRPLL)
|
||||
+ ddr_rate = cpu_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ddr_rate = ddr_pll / (postdiv + 1);
|
||||
+
|
||||
+ postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_AHB_POST_DIV_SHIFT) &
|
||||
+ QCA956X_PLL_CLK_CTRL_AHB_POST_DIV_MASK;
|
||||
+
|
||||
+ if (clk_ctrl & QCA956X_PLL_CLK_CTRL_AHB_PLL_BYPASS)
|
||||
+ ahb_rate = ref_rate;
|
||||
+ else if (clk_ctrl & QCA956X_PLL_CLK_CTRL_AHBCLK_FROM_DDRPLL)
|
||||
+ ahb_rate = ddr_pll / (postdiv + 1);
|
||||
+ else
|
||||
+ ahb_rate = cpu_pll / (postdiv + 1);
|
||||
+
|
||||
+ ath79_add_sys_clkdev("ref", ref_rate);
|
||||
+ ath79_add_sys_clkdev("cpu", cpu_rate);
|
||||
+ ath79_add_sys_clkdev("ddr", ddr_rate);
|
||||
+ ath79_add_sys_clkdev("ahb", ahb_rate);
|
||||
+
|
||||
+ clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
+ clk_add_alias("uart", NULL, "ref", NULL);
|
||||
+}
|
||||
+
|
||||
void __init ath79_clocks_init(void)
|
||||
{
|
||||
if (soc_is_ar71xx())
|
||||
@@ -539,6 +633,8 @@ void __init ath79_clocks_init(void)
|
||||
qca953x_clocks_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_clocks_init();
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ qca956x_clocks_init();
|
||||
else
|
||||
BUG();
|
||||
}
|
||||
--- a/arch/mips/ath79/common.c
|
||||
+++ b/arch/mips/ath79/common.c
|
||||
@@ -107,6 +107,8 @@ void ath79_device_reset_set(u32 mask)
|
||||
reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
panic("Reset register not defined for this SOC");
|
||||
|
||||
@@ -137,6 +139,8 @@ void ath79_device_reset_clear(u32 mask)
|
||||
reg = QCA953X_RESET_REG_RESET_MODULE;
|
||||
else if (soc_is_qca955x())
|
||||
reg = QCA955X_RESET_REG_RESET_MODULE;
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ reg = QCA956X_RESET_REG_RESET_MODULE;
|
||||
else
|
||||
panic("Reset register not defined for this SOC");
|
||||
|
||||
--- a/arch/mips/ath79/dev-common.c
|
||||
+++ b/arch/mips/ath79/dev-common.c
|
||||
@@ -86,7 +86,9 @@ void __init ath79_register_uart(void)
|
||||
soc_is_ar913x() ||
|
||||
soc_is_ar934x() ||
|
||||
soc_is_qca953x() ||
|
||||
- soc_is_qca955x()) {
|
||||
+ soc_is_qca955x() ||
|
||||
+ soc_is_qca956x() ||
|
||||
+ soc_is_tp9343()) {
|
||||
ath79_uart_data[0].uartclk = uart_clk_rate;
|
||||
platform_device_register(&ath79_uart_device);
|
||||
} else if (soc_is_ar933x()) {
|
||||
@@ -155,6 +157,9 @@ void __init ath79_gpio_init(void)
|
||||
} else if (soc_is_qca955x()) {
|
||||
ath79_gpio_pdata.ngpios = QCA955X_GPIO_COUNT;
|
||||
ath79_gpio_pdata.oe_inverted = 1;
|
||||
+ } else if (soc_is_qca956x() || soc_is_tp9343()) {
|
||||
+ ath79_gpio_pdata.ngpios = QCA956X_GPIO_COUNT;
|
||||
+ ath79_gpio_pdata.oe_inverted = 1;
|
||||
} else {
|
||||
BUG();
|
||||
}
|
||||
--- a/arch/mips/ath79/early_printk.c
|
||||
+++ b/arch/mips/ath79/early_printk.c
|
||||
@@ -120,6 +120,8 @@ static void prom_putchar_init(void)
|
||||
case REV_ID_MAJOR_QCA9533_V2:
|
||||
case REV_ID_MAJOR_QCA9556:
|
||||
case REV_ID_MAJOR_QCA9558:
|
||||
+ case REV_ID_MAJOR_TP9343:
|
||||
+ case REV_ID_MAJOR_QCA956X:
|
||||
_prom_putchar = prom_putchar_ar71xx;
|
||||
break;
|
||||
|
||||
--- a/arch/mips/ath79/irq.c
|
||||
+++ b/arch/mips/ath79/irq.c
|
||||
@@ -156,6 +156,87 @@ static void qca955x_irq_init(void)
|
||||
irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
|
||||
}
|
||||
|
||||
+static void qca956x_ip2_irq_dispatch(struct irq_desc *desc)
|
||||
+{
|
||||
+ u32 status;
|
||||
+
|
||||
+ status = ath79_reset_rr(QCA956X_RESET_REG_EXT_INT_STATUS);
|
||||
+ status &= QCA956X_EXT_INT_PCIE_RC1_ALL | QCA956X_EXT_INT_WMAC_ALL;
|
||||
+
|
||||
+ if (status == 0) {
|
||||
+ spurious_interrupt();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (status & QCA956X_EXT_INT_PCIE_RC1_ALL) {
|
||||
+ /* TODO: flush DDR? */
|
||||
+ generic_handle_irq(ATH79_IP2_IRQ(0));
|
||||
+ }
|
||||
+
|
||||
+ if (status & QCA956X_EXT_INT_WMAC_ALL) {
|
||||
+ /* TODO: flsuh DDR? */
|
||||
+ generic_handle_irq(ATH79_IP2_IRQ(1));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void qca956x_ip3_irq_dispatch(struct irq_desc *desc)
|
||||
+{
|
||||
+ u32 status;
|
||||
+
|
||||
+ status = ath79_reset_rr(QCA956X_RESET_REG_EXT_INT_STATUS);
|
||||
+ status &= QCA956X_EXT_INT_PCIE_RC2_ALL |
|
||||
+ QCA956X_EXT_INT_USB1 | QCA956X_EXT_INT_USB2;
|
||||
+
|
||||
+ if (status == 0) {
|
||||
+ spurious_interrupt();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (status & QCA956X_EXT_INT_USB1) {
|
||||
+ /* TODO: flush DDR? */
|
||||
+ generic_handle_irq(ATH79_IP3_IRQ(0));
|
||||
+ }
|
||||
+
|
||||
+ if (status & QCA956X_EXT_INT_USB2) {
|
||||
+ /* TODO: flush DDR? */
|
||||
+ generic_handle_irq(ATH79_IP3_IRQ(1));
|
||||
+ }
|
||||
+
|
||||
+ if (status & QCA956X_EXT_INT_PCIE_RC2_ALL) {
|
||||
+ /* TODO: flush DDR? */
|
||||
+ generic_handle_irq(ATH79_IP3_IRQ(2));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void qca956x_enable_timer_cb(void) {
|
||||
+ u32 misc;
|
||||
+
|
||||
+ misc = ath79_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE);
|
||||
+ misc |= MISC_INT_MIPS_SI_TIMERINT_MASK;
|
||||
+ ath79_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, misc);
|
||||
+}
|
||||
+
|
||||
+static void qca956x_irq_init(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = ATH79_IP2_IRQ_BASE;
|
||||
+ i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
|
||||
+ irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
|
||||
+
|
||||
+ irq_set_chained_handler(ATH79_CPU_IRQ(2), qca956x_ip2_irq_dispatch);
|
||||
+
|
||||
+ for (i = ATH79_IP3_IRQ_BASE;
|
||||
+ i < ATH79_IP3_IRQ_BASE + ATH79_IP3_IRQ_COUNT; i++)
|
||||
+ irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
|
||||
+
|
||||
+ irq_set_chained_handler(ATH79_CPU_IRQ(3), qca956x_ip3_irq_dispatch);
|
||||
+
|
||||
+ /* QCA956x timer init workaround has to be applied right before setting
|
||||
+ * up the clock. Else, there will be no jiffies */
|
||||
+ late_time_init = &qca956x_enable_timer_cb;
|
||||
+}
|
||||
+
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
unsigned irq_wb_chan2 = -1;
|
||||
@@ -183,7 +264,9 @@ void __init arch_init_irq(void)
|
||||
soc_is_ar933x() ||
|
||||
soc_is_ar934x() ||
|
||||
soc_is_qca953x() ||
|
||||
- soc_is_qca955x())
|
||||
+ soc_is_qca955x() ||
|
||||
+ soc_is_qca956x() ||
|
||||
+ soc_is_tp9343())
|
||||
misc_is_ar71xx = false;
|
||||
else
|
||||
BUG();
|
||||
@@ -197,4 +280,6 @@ void __init arch_init_irq(void)
|
||||
qca953x_irq_init();
|
||||
else if (soc_is_qca955x())
|
||||
qca955x_irq_init();
|
||||
+ else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
+ qca956x_irq_init();
|
||||
}
|
||||
--- a/arch/mips/ath79/pci.c
|
||||
+++ b/arch/mips/ath79/pci.c
|
||||
@@ -82,6 +82,9 @@ int pcibios_map_irq(const struct pci_dev
|
||||
} else if (soc_is_qca955x()) {
|
||||
ath79_pci_irq_map = qca955x_pci_irq_map;
|
||||
ath79_pci_nr_irqs = ARRAY_SIZE(qca955x_pci_irq_map);
|
||||
+ } else if (soc_is_qca956x()) {
|
||||
+ ath79_pci_irq_map = qca956x_pci_irq_map;
|
||||
+ ath79_pci_nr_irqs = ARRAY_SIZE(qca956x_pci_irq_map);
|
||||
} else {
|
||||
pr_crit("pci %s: invalid irq map\n",
|
||||
pci_name((struct pci_dev *) dev));
|
||||
@@ -261,6 +264,15 @@ int __init ath79_register_pci(void)
|
||||
QCA955X_PCI_MEM_SIZE,
|
||||
1,
|
||||
ATH79_IP3_IRQ(2));
|
||||
+ } else if (soc_is_qca956x()) {
|
||||
+ pdev = ath79_register_pci_ar724x(0,
|
||||
+ QCA956X_PCI_CFG_BASE1,
|
||||
+ QCA956X_PCI_CTRL_BASE1,
|
||||
+ QCA956X_PCI_CRP_BASE1,
|
||||
+ QCA956X_PCI_MEM_BASE1,
|
||||
+ QCA956X_PCI_MEM_SIZE,
|
||||
+ 1,
|
||||
+ ATH79_IP3_IRQ(2));
|
||||
} else {
|
||||
/* No PCI support */
|
||||
return -ENODEV;
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -176,6 +176,18 @@ static void __init ath79_detect_sys_type
|
||||
rev = id & QCA955X_REV_ID_REVISION_MASK;
|
||||
break;
|
||||
|
||||
+ case REV_ID_MAJOR_QCA956X:
|
||||
+ ath79_soc = ATH79_SOC_QCA956X;
|
||||
+ chip = "956X";
|
||||
+ rev = id & QCA956X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
+ case REV_ID_MAJOR_TP9343:
|
||||
+ ath79_soc = ATH79_SOC_TP9343;
|
||||
+ chip = "9343";
|
||||
+ rev = id & QCA956X_REV_ID_REVISION_MASK;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
panic("ath79: unknown SoC, id:0x%08x", id);
|
||||
}
|
||||
@@ -183,9 +195,12 @@ static void __init ath79_detect_sys_type
|
||||
if (ver == 1)
|
||||
ath79_soc_rev = rev;
|
||||
|
||||
- if (soc_is_qca953x() || soc_is_qca955x())
|
||||
+ if (soc_is_qca953x() || soc_is_qca955x() || soc_is_qca956x())
|
||||
sprintf(ath79_sys_type, "Qualcomm Atheros QCA%s ver %u rev %u",
|
||||
chip, ver, rev);
|
||||
+ else if (soc_is_tp9343())
|
||||
+ sprintf(ath79_sys_type, "Qualcomm Atheros TP%s rev %u",
|
||||
+ chip, rev);
|
||||
else
|
||||
sprintf(ath79_sys_type, "Atheros AR%s rev %u", chip, rev);
|
||||
pr_info("SoC: %s\n", ath79_sys_type);
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
@@ -35,6 +35,8 @@ enum ath79_soc_type {
|
||||
ATH79_SOC_QCA9533,
|
||||
ATH79_SOC_QCA9556,
|
||||
ATH79_SOC_QCA9558,
|
||||
+ ATH79_SOC_TP9343,
|
||||
+ ATH79_SOC_QCA956X,
|
||||
};
|
||||
|
||||
extern enum ath79_soc_type ath79_soc;
|
||||
@@ -126,6 +128,26 @@ static inline int soc_is_qca955x(void)
|
||||
return soc_is_qca9556() || soc_is_qca9558();
|
||||
}
|
||||
|
||||
+static inline int soc_is_tp9343(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_TP9343;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca9561(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_QCA956X;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca9563(void)
|
||||
+{
|
||||
+ return ath79_soc == ATH79_SOC_QCA956X;
|
||||
+}
|
||||
+
|
||||
+static inline int soc_is_qca956x(void)
|
||||
+{
|
||||
+ return soc_is_qca9561() || soc_is_qca9563();
|
||||
+}
|
||||
+
|
||||
void ath79_ddr_wb_flush(unsigned int reg);
|
||||
void ath79_ddr_set_pci_windows(void);
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
From 4a4f869ec58ed8910b9b2e68d0eee50957e9bb20 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Mon, 25 Jun 2018 15:52:10 +0200
|
||||
Subject: [PATCH 17/33] dt-bindings: PCI: qcom,ar7100: adds binding doc
|
||||
|
||||
With the driver being converted from platform_data to pure OF, we need to
|
||||
also add some docs.
|
||||
|
||||
Cc: Rob Herring <robh+dt@kernel.org>
|
||||
Cc: devicetree@vger.kernel.org
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
.../devicetree/bindings/pci/qcom,ar7100-pci.txt | 38 ++++++++++++++++++++++
|
||||
1 file changed, 38 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/pci/qcom,ar7100-pci.txt
|
||||
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/pci/qcom,ar7100-pci.txt
|
||||
@@ -0,0 +1,38 @@
|
||||
+* Qualcomm Atheros AR7100 PCI express root complex
|
||||
+
|
||||
+Required properties:
|
||||
+- compatible: should contain "qcom,ar7100-pci" to identify the core.
|
||||
+- reg: Should contain the register ranges as listed in the reg-names property.
|
||||
+- reg-names: Definition: Must include the following entries
|
||||
+ - "cfg_base" IO Memory
|
||||
+- #address-cells: set to <3>
|
||||
+- #size-cells: set to <2>
|
||||
+- ranges: ranges for the PCI memory and I/O regions
|
||||
+- interrupt-map-mask and interrupt-map: standard PCI
|
||||
+ properties to define the mapping of the PCIe interface to interrupt
|
||||
+ numbers.
|
||||
+- #interrupt-cells: set to <1>
|
||||
+- interrupt-controller: define to enable the builtin IRQ cascade.
|
||||
+
|
||||
+Optional properties:
|
||||
+- interrupt-parent: phandle to the MIPS IRQ controller
|
||||
+
|
||||
+* Example for ar7100
|
||||
+ pcie-controller@180c0000 {
|
||||
+ compatible = "qca,ar7100-pci";
|
||||
+ #address-cells = <3>;
|
||||
+ #size-cells = <2>;
|
||||
+ bus-range = <0x0 0x0>;
|
||||
+ reg = <0x17010000 0x100>;
|
||||
+ reg-names = "cfg_base";
|
||||
+ ranges = <0x2000000 0 0x10000000 0x10000000 0 0x07000000
|
||||
+ 0x1000000 0 0x00000000 0x00000000 0 0x00000001>;
|
||||
+ interrupt-parent = <&cpuintc>;
|
||||
+ interrupts = <2>;
|
||||
+
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+
|
||||
+ interrupt-map-mask = <0 0 0 1>;
|
||||
+ interrupt-map = <0 0 0 0 &pcie0 0>;
|
||||
+ };
|
|
@ -1,13 +1,17 @@
|
|||
From cc5a306038b7956b5736a70696dddaaf3792df76 Mon Sep 17 00:00:00 2001
|
||||
From 1855ab6b1d27f5b38a648baf57ff6a534afec26d Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:22:49 +0100
|
||||
Subject: [PATCH 20/27] MIPS: ath79: turn pci-ar71xx driver into a pure OF
|
||||
driver
|
||||
Date: Sat, 23 Jun 2018 15:07:23 +0200
|
||||
Subject: [PATCH 18/33] MIPS: pci-ar71xx: convert to OF
|
||||
|
||||
With the ath79 target getting converted to pure OF, we can drop all the
|
||||
platform data code and add the missing OF bits to the driver. We also add
|
||||
a irq domain for the PCI/e controllers cascade, thus making it usable from
|
||||
dts files.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/pci/pci-ar71xx.c | 81 +++++++++++++++++++++++-----------------------
|
||||
1 file changed, 40 insertions(+), 41 deletions(-)
|
||||
arch/mips/pci/pci-ar71xx.c | 82 +++++++++++++++++++++++-----------------------
|
||||
1 file changed, 41 insertions(+), 41 deletions(-)
|
||||
|
||||
--- a/arch/mips/pci/pci-ar71xx.c
|
||||
+++ b/arch/mips/pci/pci-ar71xx.c
|
||||
|
@ -94,11 +98,12 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
|
||||
t = __raw_readl(base + AR71XX_RESET_REG_PCI_INT_ENABLE);
|
||||
__raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_PCI_INT_ENABLE);
|
||||
@@ -294,24 +299,30 @@ static struct irq_chip ar71xx_pci_irq_ch
|
||||
@@ -294,24 +299,31 @@ static struct irq_chip ar71xx_pci_irq_ch
|
||||
.irq_mask_ack = ar71xx_pci_irq_mask,
|
||||
};
|
||||
|
||||
+static int ar71xx_pci_irq_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
|
||||
+static int ar71xx_pci_irq_map(struct irq_domain *d,
|
||||
+ unsigned int irq, irq_hw_number_t hw)
|
||||
+{
|
||||
+ struct ar71xx_pci_controller *apc = d->host_data;
|
||||
+
|
||||
|
@ -136,7 +141,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
irq_set_chained_handler_and_data(apc->irq, ar71xx_pci_irq_handler,
|
||||
apc);
|
||||
}
|
||||
@@ -328,6 +339,11 @@ static void ar71xx_pci_reset(void)
|
||||
@@ -328,6 +340,11 @@ static void ar71xx_pci_reset(void)
|
||||
mdelay(100);
|
||||
}
|
||||
|
||||
|
@ -148,7 +153,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
static int ar71xx_pci_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct ar71xx_pci_controller *apc;
|
||||
@@ -348,26 +364,6 @@ static int ar71xx_pci_probe(struct platf
|
||||
@@ -348,26 +365,6 @@ static int ar71xx_pci_probe(struct platf
|
||||
if (apc->irq < 0)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -175,23 +180,19 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
ar71xx_pci_reset();
|
||||
|
||||
/* setup COMMAND register */
|
||||
@@ -378,11 +374,13 @@ static int ar71xx_pci_probe(struct platf
|
||||
/* clear bus errors */
|
||||
ar71xx_pci_check_error(apc, 1);
|
||||
@@ -380,9 +377,11 @@ static int ar71xx_pci_probe(struct platf
|
||||
|
||||
ar71xx_pci_irq_init(apc);
|
||||
|
||||
- ar71xx_pci_irq_init(apc);
|
||||
-
|
||||
+ apc->np = pdev->dev.of_node;
|
||||
apc->pci_ctrl.pci_ops = &ar71xx_pci_ops;
|
||||
apc->pci_ctrl.mem_resource = &apc->mem_res;
|
||||
apc->pci_ctrl.io_resource = &apc->io_res;
|
||||
+ pci_load_of_ranges(&apc->pci_ctrl, pdev->dev.of_node);
|
||||
+
|
||||
+ ar71xx_pci_irq_init(apc);
|
||||
|
||||
register_pci_controller(&apc->pci_ctrl);
|
||||
|
||||
@@ -393,6 +391,7 @@ static struct platform_driver ar71xx_pci
|
||||
@@ -393,6 +392,7 @@ static struct platform_driver ar71xx_pci
|
||||
.probe = ar71xx_pci_probe,
|
||||
.driver = {
|
||||
.name = "ar71xx-pci",
|
|
@ -0,0 +1,61 @@
|
|||
From ea27764bc3ef2a05decf3ae05edffc289cd0d93c Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Mon, 25 Jun 2018 15:52:02 +0200
|
||||
Subject: [PATCH 19/33] dt-bindings: PCI: qcom,ar7240: adds binding doc
|
||||
|
||||
With the driver being converted from platform_data to pure OF, we need to
|
||||
also add some docs.
|
||||
|
||||
Cc: Rob Herring <robh+dt@kernel.org>
|
||||
Cc: devicetree@vger.kernel.org
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
.../devicetree/bindings/pci/qcom,ar7240-pci.txt | 42 ++++++++++++++++++++++
|
||||
1 file changed, 42 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/pci/qcom,ar7240-pci.txt
|
||||
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/pci/qcom,ar7240-pci.txt
|
||||
@@ -0,0 +1,42 @@
|
||||
+* Qualcomm Atheros AR724X PCI express root complex
|
||||
+
|
||||
+Required properties:
|
||||
+- compatible: should contain "qcom,ar7240-pci" to identify the core.
|
||||
+- reg: Should contain the register ranges as listed in the reg-names property.
|
||||
+- reg-names: Definition: Must include the following entries
|
||||
+ - "crp_base" Configuration registers
|
||||
+ - "ctrl_base" Control registers
|
||||
+ - "cfg_base" IO Memory
|
||||
+- #address-cells: set to <3>
|
||||
+- #size-cells: set to <2>
|
||||
+- ranges: ranges for the PCI memory and I/O regions
|
||||
+- interrupt-map-mask and interrupt-map: standard PCI
|
||||
+ properties to define the mapping of the PCIe interface to interrupt
|
||||
+ numbers.
|
||||
+- #interrupt-cells: set to <1>
|
||||
+- interrupt-parent: phandle to the MIPS IRQ controller
|
||||
+
|
||||
+Optional properties:
|
||||
+- interrupt-controller: define to enable the builtin IRQ cascade.
|
||||
+
|
||||
+* Example for qca9557
|
||||
+ pcie-controller@180c0000 {
|
||||
+ compatible = "qcom,ar7240-pci";
|
||||
+ #address-cells = <3>;
|
||||
+ #size-cells = <2>;
|
||||
+ bus-range = <0x0 0x0>;
|
||||
+ reg = <0x180c0000 0x1000>,
|
||||
+ <0x180f0000 0x100>,
|
||||
+ <0x14000000 0x1000>;
|
||||
+ reg-names = "crp_base", "ctrl_base", "cfg_base";
|
||||
+ ranges = <0x2000000 0 0x10000000 0x10000000 0 0x04000000
|
||||
+ 0x1000000 0 0x00000000 0x00000000 0 0x00000001>;
|
||||
+ interrupt-parent = <&intc2>;
|
||||
+ interrupts = <1>;
|
||||
+
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+
|
||||
+ interrupt-map-mask = <0 0 0 1>;
|
||||
+ interrupt-map = <0 0 0 0 &pcie0 0>;
|
||||
+ };
|
|
@ -1,13 +1,17 @@
|
|||
From 0e7f36bfd68401e8c42933e7f770f270497bb9a8 Mon Sep 17 00:00:00 2001
|
||||
From a522ee0199d5d3ea114ca2e211f6ac398d3e8e0b Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:23:25 +0100
|
||||
Subject: [PATCH 21/27] MIPS: ath79: turn pci-ar724x driver into a pure OF
|
||||
driver
|
||||
Date: Sat, 23 Jun 2018 15:07:37 +0200
|
||||
Subject: [PATCH 20/33] MIPS: pci-ar724x: convert to OF
|
||||
|
||||
With the ath79 target getting converted to pure OF, we can drop all the
|
||||
platform data code and add the missing OF bits to the driver. We also add
|
||||
a irq domain for the PCI/e controllers cascade, thus making it usable from
|
||||
dts files.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/pci/pci-ar724x.c | 86 +++++++++++++++++++++-------------------------
|
||||
1 file changed, 40 insertions(+), 46 deletions(-)
|
||||
arch/mips/pci/pci-ar724x.c | 88 ++++++++++++++++++++++------------------------
|
||||
1 file changed, 42 insertions(+), 46 deletions(-)
|
||||
|
||||
--- a/arch/mips/pci/pci-ar724x.c
|
||||
+++ b/arch/mips/pci/pci-ar724x.c
|
||||
|
@ -105,11 +109,12 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
case 0:
|
||||
t = __raw_readl(base + AR724X_PCI_REG_INT_MASK);
|
||||
__raw_writel(t & ~AR724X_PCI_INT_DEV0,
|
||||
@@ -305,26 +305,32 @@ static struct irq_chip ar724x_pci_irq_ch
|
||||
@@ -305,26 +305,34 @@ static struct irq_chip ar724x_pci_irq_ch
|
||||
.irq_mask_ack = ar724x_pci_irq_mask,
|
||||
};
|
||||
|
||||
+static int ar724x_pci_irq_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
|
||||
+static int ar724x_pci_irq_map(struct irq_domain *d,
|
||||
+ unsigned int irq, irq_hw_number_t hw)
|
||||
+{
|
||||
+ struct ar724x_pci_controller *apc = d->host_data;
|
||||
+
|
||||
|
@ -144,11 +149,12 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- irq_set_chip_data(i, apc);
|
||||
- }
|
||||
-
|
||||
+ apc->domain = irq_domain_add_linear(apc->np, 2, &ar724x_pci_domain_ops, apc);
|
||||
+ apc->domain = irq_domain_add_linear(apc->np, 2,
|
||||
+ &ar724x_pci_domain_ops, apc);
|
||||
irq_set_chained_handler_and_data(apc->irq, ar724x_pci_irq_handler,
|
||||
apc);
|
||||
}
|
||||
@@ -394,29 +400,11 @@ static int ar724x_pci_probe(struct platf
|
||||
@@ -394,29 +402,11 @@ static int ar724x_pci_probe(struct platf
|
||||
if (apc->irq < 0)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -180,7 +186,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
|
||||
/*
|
||||
* Do the full PCIE Root Complex Initialization Sequence if the PCIe
|
||||
@@ -438,10 +426,16 @@ static int ar724x_pci_probe(struct platf
|
||||
@@ -438,10 +428,16 @@ static int ar724x_pci_probe(struct platf
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,17 +1,22 @@
|
|||
From 288a8eb0d41f09fda242e05f8a7bd1f5b3489477 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 6 Mar 2018 13:19:26 +0100
|
||||
Subject: [PATCH] MIPS: ath79: add helpers for setting clocks and expose
|
||||
Subject: [PATCH 21/33] MIPS: ath79: add helpers for setting clocks and expose
|
||||
the ref clock
|
||||
|
||||
Preparation for transitioning legacy the legacy clock setup code over
|
||||
Preparation for transitioning the legacy clock setup code over
|
||||
to OF.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 128 ++++++++++++++++++----------------
|
||||
include/dt-bindings/clock/ath79-clk.h | 3 +-
|
||||
2 files changed, 68 insertions(+), 63 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -36,20 +36,46 @@ static struct clk_onecell_data clk_data
|
||||
@@ -37,20 +37,46 @@ static struct clk_onecell_data clk_data
|
||||
.clk_num = ARRAY_SIZE(clks),
|
||||
};
|
||||
|
||||
|
@ -67,7 +72,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
return clk;
|
||||
}
|
||||
|
||||
@@ -79,27 +105,15 @@ static void __init ar71xx_clocks_init(vo
|
||||
@@ -80,27 +106,15 @@ static void __init ar71xx_clocks_init(vo
|
||||
div = (((pll >> AR71XX_AHB_DIV_SHIFT) & AR71XX_AHB_DIV_MASK) + 1) * 2;
|
||||
ahb_rate = cpu_rate / div;
|
||||
|
||||
|
@ -99,7 +104,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
static void __init ar724x_clk_init(struct clk *ref_clk, void __iomem *pll_base)
|
||||
{
|
||||
u32 pll;
|
||||
@@ -113,24 +127,19 @@ static void __init ar724x_clk_init(struc
|
||||
@@ -114,24 +128,19 @@ static void __init ar724x_clk_init(struc
|
||||
ddr_div = ((pll >> AR724X_DDR_DIV_SHIFT) & AR724X_DDR_DIV_MASK) + 1;
|
||||
ahb_div = (((pll >> AR724X_AHB_DIV_SHIFT) & AR724X_AHB_DIV_MASK) + 1) * 2;
|
||||
|
||||
|
@ -128,7 +133,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
clk_add_alias("wdt", NULL, "ahb", NULL);
|
||||
clk_add_alias("uart", NULL, "ahb", NULL);
|
||||
}
|
||||
@@ -185,12 +194,12 @@ static void __init ar9330_clk_init(struc
|
||||
@@ -186,12 +195,12 @@ static void __init ar9330_clk_init(struc
|
||||
AR933X_PLL_CLOCK_CTRL_AHB_DIV_MASK) + 1;
|
||||
}
|
||||
|
||||
|
@ -147,7 +152,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static void __init ar933x_clocks_init(void)
|
||||
@@ -205,15 +214,10 @@ static void __init ar933x_clocks_init(vo
|
||||
@@ -206,15 +215,10 @@ static void __init ar933x_clocks_init(vo
|
||||
else
|
||||
ref_rate = (25 * 1000 * 1000);
|
||||
|
||||
|
@ -164,7 +169,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
clk_add_alias("wdt", NULL, "ahb", NULL);
|
||||
clk_add_alias("uart", NULL, "ref", NULL);
|
||||
}
|
||||
@@ -343,10 +347,10 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -344,10 +348,10 @@ static void __init ar934x_clocks_init(vo
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -179,7 +184,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
clk_add_alias("uart", NULL, "ref", NULL);
|
||||
@@ -430,10 +434,10 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -431,10 +435,10 @@ static void __init qca953x_clocks_init(v
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -194,7 +199,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
clk_add_alias("uart", NULL, "ref", NULL);
|
||||
@@ -515,10 +519,10 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -516,10 +520,10 @@ static void __init qca955x_clocks_init(v
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -209,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
clk_add_alias("wdt", NULL, "ref", NULL);
|
||||
clk_add_alias("uart", NULL, "ref", NULL);
|
||||
@@ -609,10 +613,10 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -620,10 +624,10 @@ static void __init qca956x_clocks_init(v
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
|
@ -1,16 +1,20 @@
|
|||
From 339c191a95e978353c9ba3aafab0261e14de109b Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 6 Mar 2018 13:22:43 +0100
|
||||
Subject: [PATCH] MIPS: ath79: move legacy "wdt" and "uart" clock aliases
|
||||
Subject: [PATCH 22/33] MIPS: ath79: move legacy "wdt" and "uart" clock aliases
|
||||
out of soc init
|
||||
|
||||
Preparation for reusing functions for DT
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 38 +++++++++++++++++---------------------
|
||||
1 file changed, 17 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -109,9 +109,6 @@ static void __init ar71xx_clocks_init(vo
|
||||
@@ -110,9 +110,6 @@ static void __init ar71xx_clocks_init(vo
|
||||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
|
@ -20,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static void __init ar724x_clk_init(struct clk *ref_clk, void __iomem *pll_base)
|
||||
@@ -139,9 +136,6 @@ static void __init ar724x_clocks_init(vo
|
||||
@@ -140,9 +137,6 @@ static void __init ar724x_clocks_init(vo
|
||||
ref_clk = ath79_set_clk(ATH79_CLK_REF, AR724X_BASE_FREQ);
|
||||
|
||||
ar724x_clk_init(ref_clk, ath79_pll_base);
|
||||
|
@ -30,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static void __init ar9330_clk_init(struct clk *ref_clk, void __iomem *pll_base)
|
||||
@@ -217,9 +211,6 @@ static void __init ar933x_clocks_init(vo
|
||||
@@ -218,9 +212,6 @@ static void __init ar933x_clocks_init(vo
|
||||
ref_clk = ath79_set_clk(ATH79_CLK_REF, ref_rate);
|
||||
|
||||
ar9330_clk_init(ref_clk, ath79_pll_base);
|
||||
|
@ -40,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static u32 __init ar934x_get_pll_freq(u32 ref, u32 ref_div, u32 nint, u32 nfrac,
|
||||
@@ -352,9 +343,6 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -353,9 +344,6 @@ static void __init ar934x_clocks_init(vo
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
|
||||
|
@ -50,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
iounmap(dpll_base);
|
||||
}
|
||||
|
||||
@@ -438,9 +426,6 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -439,9 +427,6 @@ static void __init qca953x_clocks_init(v
|
||||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
|
@ -60,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static void __init qca955x_clocks_init(void)
|
||||
@@ -523,9 +508,6 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -524,9 +509,6 @@ static void __init qca955x_clocks_init(v
|
||||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
|
@ -70,7 +74,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static void __init qca956x_clocks_init(void)
|
||||
@@ -617,13 +599,13 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -628,13 +610,13 @@ static void __init qca956x_clocks_init(v
|
||||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
|
@ -87,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (soc_is_ar71xx())
|
||||
ar71xx_clocks_init();
|
||||
else if (soc_is_ar724x() || soc_is_ar913x())
|
||||
@@ -640,6 +622,20 @@ void __init ath79_clocks_init(void)
|
||||
@@ -651,6 +633,20 @@ void __init ath79_clocks_init(void)
|
||||
qca956x_clocks_init();
|
||||
else
|
||||
BUG();
|
|
@ -1,15 +1,19 @@
|
|||
From 6350b2c36c522fecbc91a80b63f49319dafd2a72 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 6 Mar 2018 13:23:20 +0100
|
||||
Subject: [PATCH] MIPS: ath79: pass PLL base to clock init functions
|
||||
Subject: [PATCH 23/33] MIPS: ath79: pass PLL base to clock init functions
|
||||
|
||||
Preparation for passing the mapped base via DT
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 60 ++++++++++++++++++++++++-------------------------
|
||||
1 file changed, 30 insertions(+), 30 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -79,7 +79,7 @@ static struct clk * __init ath79_set_ff_
|
||||
@@ -80,7 +80,7 @@ static struct clk * __init ath79_set_ff_
|
||||
return clk;
|
||||
}
|
||||
|
||||
|
@ -18,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
unsigned long ref_rate;
|
||||
unsigned long cpu_rate;
|
||||
@@ -91,7 +91,7 @@ static void __init ar71xx_clocks_init(vo
|
||||
@@ -92,7 +92,7 @@ static void __init ar71xx_clocks_init(vo
|
||||
|
||||
ref_rate = AR71XX_BASE_FREQ;
|
||||
|
||||
|
@ -27,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
div = ((pll >> AR71XX_PLL_FB_SHIFT) & AR71XX_PLL_FB_MASK) + 1;
|
||||
freq = div * ref_rate;
|
||||
@@ -129,13 +129,13 @@ static void __init ar724x_clk_init(struc
|
||||
@@ -130,13 +130,13 @@ static void __init ar724x_clk_init(struc
|
||||
ath79_set_ff_clk(ATH79_CLK_AHB, "ref", mult, div * ahb_div);
|
||||
}
|
||||
|
||||
|
@ -43,7 +47,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
}
|
||||
|
||||
static void __init ar9330_clk_init(struct clk *ref_clk, void __iomem *pll_base)
|
||||
@@ -196,7 +196,7 @@ static void __init ar9330_clk_init(struc
|
||||
@@ -197,7 +197,7 @@ static void __init ar9330_clk_init(struc
|
||||
ref_div * out_div * ahb_div);
|
||||
}
|
||||
|
||||
|
@ -52,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
struct clk *ref_clk;
|
||||
unsigned long ref_rate;
|
||||
@@ -233,7 +233,7 @@ static u32 __init ar934x_get_pll_freq(u3
|
||||
@@ -234,7 +234,7 @@ static u32 __init ar934x_get_pll_freq(u3
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -61,7 +65,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
unsigned long ref_rate;
|
||||
unsigned long cpu_rate;
|
||||
@@ -264,7 +264,7 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -265,7 +265,7 @@ static void __init ar934x_clocks_init(vo
|
||||
AR934X_SRIF_DPLL1_REFDIV_MASK;
|
||||
frac = 1 << 18;
|
||||
} else {
|
||||
|
@ -70,7 +74,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
out_div = (pll >> AR934X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
AR934X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
ref_div = (pll >> AR934X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
@@ -291,7 +291,7 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -292,7 +292,7 @@ static void __init ar934x_clocks_init(vo
|
||||
AR934X_SRIF_DPLL1_REFDIV_MASK;
|
||||
frac = 1 << 18;
|
||||
} else {
|
||||
|
@ -79,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
out_div = (pll >> AR934X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
AR934X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
ref_div = (pll >> AR934X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
@@ -306,7 +306,7 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -307,7 +307,7 @@ static void __init ar934x_clocks_init(vo
|
||||
ddr_pll = ar934x_get_pll_freq(ref_rate, ref_div, nint,
|
||||
nfrac, frac, out_div);
|
||||
|
||||
|
@ -88,7 +92,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
postdiv = (clk_ctrl >> AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
AR934X_PLL_CPU_DDR_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
@@ -346,7 +346,7 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -347,7 +347,7 @@ static void __init ar934x_clocks_init(vo
|
||||
iounmap(dpll_base);
|
||||
}
|
||||
|
||||
|
@ -97,7 +101,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
unsigned long ref_rate;
|
||||
unsigned long cpu_rate;
|
||||
@@ -362,7 +362,7 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -363,7 +363,7 @@ static void __init qca953x_clocks_init(v
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -106,7 +110,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
out_div = (pll >> QCA953X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA953X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
ref_div = (pll >> QCA953X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
@@ -376,7 +376,7 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -377,7 +377,7 @@ static void __init qca953x_clocks_init(v
|
||||
cpu_pll += frac * (ref_rate >> 6) / ref_div;
|
||||
cpu_pll /= (1 << out_div);
|
||||
|
||||
|
@ -115,7 +119,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
out_div = (pll >> QCA953X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA953X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
ref_div = (pll >> QCA953X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
@@ -390,7 +390,7 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -391,7 +391,7 @@ static void __init qca953x_clocks_init(v
|
||||
ddr_pll += frac * (ref_rate >> 6) / (ref_div << 4);
|
||||
ddr_pll /= (1 << out_div);
|
||||
|
||||
|
@ -124,7 +128,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
postdiv = (clk_ctrl >> QCA953X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
QCA953X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
@@ -428,7 +428,7 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -429,7 +429,7 @@ static void __init qca953x_clocks_init(v
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
}
|
||||
|
||||
|
@ -133,7 +137,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
unsigned long ref_rate;
|
||||
unsigned long cpu_rate;
|
||||
@@ -444,7 +444,7 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -445,7 +445,7 @@ static void __init qca955x_clocks_init(v
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -142,7 +146,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
out_div = (pll >> QCA955X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA955X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
ref_div = (pll >> QCA955X_PLL_CPU_CONFIG_REFDIV_SHIFT) &
|
||||
@@ -458,7 +458,7 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -459,7 +459,7 @@ static void __init qca955x_clocks_init(v
|
||||
cpu_pll += frac * ref_rate / (ref_div * (1 << 6));
|
||||
cpu_pll /= (1 << out_div);
|
||||
|
||||
|
@ -151,7 +155,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
out_div = (pll >> QCA955X_PLL_DDR_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA955X_PLL_DDR_CONFIG_OUTDIV_MASK;
|
||||
ref_div = (pll >> QCA955X_PLL_DDR_CONFIG_REFDIV_SHIFT) &
|
||||
@@ -472,7 +472,7 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -473,7 +473,7 @@ static void __init qca955x_clocks_init(v
|
||||
ddr_pll += frac * ref_rate / (ref_div * (1 << 10));
|
||||
ddr_pll /= (1 << out_div);
|
||||
|
||||
|
@ -160,7 +164,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
postdiv = (clk_ctrl >> QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
QCA955X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
@@ -510,7 +510,7 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -511,7 +511,7 @@ static void __init qca955x_clocks_init(v
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
}
|
||||
|
||||
|
@ -169,7 +173,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
unsigned long ref_rate;
|
||||
unsigned long cpu_rate;
|
||||
@@ -526,13 +526,13 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -537,13 +537,13 @@ static void __init qca956x_clocks_init(v
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -185,7 +189,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
nint = (pll >> QCA956X_PLL_CPU_CONFIG1_NINT_SHIFT) &
|
||||
QCA956X_PLL_CPU_CONFIG1_NINT_MASK;
|
||||
hfrac = (pll >> QCA956X_PLL_CPU_CONFIG1_NFRAC_H_SHIFT) &
|
||||
@@ -545,12 +545,12 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -556,12 +556,12 @@ static void __init qca956x_clocks_init(v
|
||||
cpu_pll += (hfrac >> 13) * ref_rate / ref_div;
|
||||
cpu_pll /= (1 << out_div);
|
||||
|
||||
|
@ -200,7 +204,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
nint = (pll >> QCA956X_PLL_DDR_CONFIG1_NINT_SHIFT) &
|
||||
QCA956X_PLL_DDR_CONFIG1_NINT_MASK;
|
||||
hfrac = (pll >> QCA956X_PLL_DDR_CONFIG1_NFRAC_H_SHIFT) &
|
||||
@@ -563,7 +563,7 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -574,7 +574,7 @@ static void __init qca956x_clocks_init(v
|
||||
ddr_pll += (hfrac >> 13) * ref_rate / ref_div;
|
||||
ddr_pll /= (1 << out_div);
|
||||
|
||||
|
@ -209,7 +213,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
postdiv = (clk_ctrl >> QCA956X_PLL_CLK_CTRL_CPU_POST_DIV_SHIFT) &
|
||||
QCA956X_PLL_CLK_CTRL_CPU_POST_DIV_MASK;
|
||||
@@ -607,19 +607,19 @@ void __init ath79_clocks_init(void)
|
||||
@@ -618,19 +618,19 @@ void __init ath79_clocks_init(void)
|
||||
const char *uart;
|
||||
|
||||
if (soc_is_ar71xx())
|
|
@ -1,17 +1,21 @@
|
|||
From 5fadb2544ed0bb72ddddd846aa303bb9ed2d211c Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 6 Mar 2018 13:24:07 +0100
|
||||
Subject: [PATCH] MIPS: ath79: make specifying the reference clock in DT
|
||||
Subject: [PATCH 24/33] MIPS: ath79: make specifying the reference clock in DT
|
||||
optional
|
||||
|
||||
It can be autodetected for many SoCs using the strapping options.
|
||||
If the clock is specified in DT, the autodetected value is ignored
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 84 +++++++++++++++++++++++--------------------------
|
||||
1 file changed, 40 insertions(+), 44 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -79,6 +79,18 @@ static struct clk * __init ath79_set_ff_
|
||||
@@ -80,6 +80,18 @@ static struct clk * __init ath79_set_ff_
|
||||
return clk;
|
||||
}
|
||||
|
||||
|
@ -30,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
static void __init ar71xx_clocks_init(void __iomem *pll_base)
|
||||
{
|
||||
unsigned long ref_rate;
|
||||
@@ -89,7 +101,7 @@ static void __init ar71xx_clocks_init(vo
|
||||
@@ -90,7 +102,7 @@ static void __init ar71xx_clocks_init(vo
|
||||
u32 freq;
|
||||
u32 div;
|
||||
|
||||
|
@ -39,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
pll = __raw_readl(pll_base + AR71XX_PLL_REG_CPU_CONFIG);
|
||||
|
||||
@@ -105,16 +117,17 @@ static void __init ar71xx_clocks_init(vo
|
||||
@@ -106,16 +118,17 @@ static void __init ar71xx_clocks_init(vo
|
||||
div = (((pll >> AR71XX_AHB_DIV_SHIFT) & AR71XX_AHB_DIV_MASK) + 1) * 2;
|
||||
ahb_rate = cpu_rate / div;
|
||||
|
||||
|
@ -60,7 +64,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
pll = __raw_readl(pll_base + AR724X_PLL_REG_CPU_CONFIG);
|
||||
|
||||
@@ -129,17 +142,9 @@ static void __init ar724x_clk_init(struc
|
||||
@@ -130,17 +143,9 @@ static void __init ar724x_clk_init(struc
|
||||
ath79_set_ff_clk(ATH79_CLK_AHB, "ref", mult, div * ahb_div);
|
||||
}
|
||||
|
||||
|
@ -80,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
u32 clock_ctrl;
|
||||
u32 ref_div;
|
||||
u32 ninit_mul;
|
||||
@@ -148,6 +153,15 @@ static void __init ar9330_clk_init(struc
|
||||
@@ -149,6 +154,15 @@ static void __init ar9330_clk_init(struc
|
||||
u32 cpu_div;
|
||||
u32 ddr_div;
|
||||
u32 ahb_div;
|
||||
|
@ -96,7 +100,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
clock_ctrl = __raw_readl(pll_base + AR933X_PLL_CLOCK_CTRL_REG);
|
||||
if (clock_ctrl & AR933X_PLL_CLOCK_CTRL_BYPASS) {
|
||||
@@ -196,23 +210,6 @@ static void __init ar9330_clk_init(struc
|
||||
@@ -197,23 +211,6 @@ static void __init ar9330_clk_init(struc
|
||||
ref_div * out_div * ahb_div);
|
||||
}
|
||||
|
||||
|
@ -120,7 +124,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
static u32 __init ar934x_get_pll_freq(u32 ref, u32 ref_div, u32 nint, u32 nfrac,
|
||||
u32 frac, u32 out_div)
|
||||
{
|
||||
@@ -252,6 +249,8 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -253,6 +250,8 @@ static void __init ar934x_clocks_init(vo
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -129,7 +133,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
pll = __raw_readl(dpll_base + AR934X_SRIF_CPU_DPLL2_REG);
|
||||
if (pll & AR934X_SRIF_DPLL2_LOCAL_PLL) {
|
||||
out_div = (pll >> AR934X_SRIF_DPLL2_OUTDIV_SHIFT) &
|
||||
@@ -338,7 +337,6 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -339,7 +338,6 @@ static void __init ar934x_clocks_init(vo
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -137,7 +141,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
@@ -362,6 +360,8 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -363,6 +361,8 @@ static void __init qca953x_clocks_init(v
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -146,7 +150,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
pll = __raw_readl(pll_base + QCA953X_PLL_CPU_CONFIG_REG);
|
||||
out_div = (pll >> QCA953X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA953X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
@@ -422,7 +422,6 @@ static void __init qca953x_clocks_init(v
|
||||
@@ -423,7 +423,6 @@ static void __init qca953x_clocks_init(v
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -154,7 +158,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
@@ -444,6 +443,8 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -445,6 +444,8 @@ static void __init qca955x_clocks_init(v
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -163,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
pll = __raw_readl(pll_base + QCA955X_PLL_CPU_CONFIG_REG);
|
||||
out_div = (pll >> QCA955X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA955X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
@@ -504,7 +505,6 @@ static void __init qca955x_clocks_init(v
|
||||
@@ -505,7 +506,6 @@ static void __init qca955x_clocks_init(v
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -171,7 +175,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
@@ -526,6 +526,8 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -537,6 +537,8 @@ static void __init qca956x_clocks_init(v
|
||||
else
|
||||
ref_rate = 25 * 1000 * 1000;
|
||||
|
||||
|
@ -180,7 +184,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
pll = __raw_readl(pll_base + QCA956X_PLL_CPU_CONFIG_REG);
|
||||
out_div = (pll >> QCA956X_PLL_CPU_CONFIG_OUTDIV_SHIFT) &
|
||||
QCA956X_PLL_CPU_CONFIG_OUTDIV_MASK;
|
||||
@@ -595,7 +597,6 @@ static void __init qca956x_clocks_init(v
|
||||
@@ -606,7 +608,6 @@ static void __init qca956x_clocks_init(v
|
||||
else
|
||||
ahb_rate = cpu_pll / (postdiv + 1);
|
||||
|
||||
|
@ -188,7 +192,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ath79_set_clk(ATH79_CLK_CPU, cpu_rate);
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
@@ -671,10 +672,8 @@ static void __init ath79_clocks_init_dt_
|
||||
@@ -682,10 +683,8 @@ static void __init ath79_clocks_init_dt_
|
||||
void __iomem *pll_base;
|
||||
|
||||
ref_clk = of_clk_get(np, 0);
|
||||
|
@ -201,7 +205,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
pll_base = of_iomap(np, 0);
|
||||
if (!pll_base) {
|
||||
@@ -683,9 +682,9 @@ static void __init ath79_clocks_init_dt_
|
||||
@@ -694,9 +693,9 @@ static void __init ath79_clocks_init_dt_
|
||||
}
|
||||
|
||||
if (of_device_is_compatible(np, "qca,ar9130-pll"))
|
||||
|
@ -213,7 +217,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
else {
|
||||
pr_err("%pOF: could not find any appropriate clk_init()\n", np);
|
||||
goto err_iounmap;
|
||||
@@ -703,9 +702,6 @@ err_iounmap:
|
||||
@@ -714,9 +713,6 @@ err_iounmap:
|
||||
|
||||
err_clk:
|
||||
clk_put(ref_clk);
|
|
@ -1,16 +1,20 @@
|
|||
From 6325626de001df98aebe51f3008b1aca05798d19 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 6 Mar 2018 13:26:27 +0100
|
||||
Subject: [PATCH] MIPS: ath79: support setting up clock via DT on all SoC
|
||||
Subject: [PATCH 25/33] MIPS: ath79: support setting up clock via DT on all SoC
|
||||
types
|
||||
|
||||
Use the same functions as the legacy code
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 39 ++++++++++++++++++++++-----------------
|
||||
1 file changed, 22 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -658,16 +658,6 @@ ath79_get_sys_clk_rate(const char *id)
|
||||
@@ -669,16 +669,6 @@ ath79_get_sys_clk_rate(const char *id)
|
||||
#ifdef CONFIG_OF
|
||||
static void __init ath79_clocks_init_dt(struct device_node *np)
|
||||
{
|
||||
|
@ -27,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
struct clk *ref_clk;
|
||||
void __iomem *pll_base;
|
||||
|
||||
@@ -681,14 +671,21 @@ static void __init ath79_clocks_init_dt_
|
||||
@@ -692,14 +682,21 @@ static void __init ath79_clocks_init_dt_
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
|
@ -54,7 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
if (of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data)) {
|
||||
pr_err("%pOF: could not register clk provider\n", np);
|
||||
@@ -703,6 +700,14 @@ err_iounmap:
|
||||
@@ -714,6 +711,14 @@ err_iounmap:
|
||||
err_clk:
|
||||
clk_put(ref_clk);
|
||||
}
|
|
@ -1,17 +1,22 @@
|
|||
From 78538d673801902108797f2c813e70cfbce280c9 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 6 Mar 2018 13:27:28 +0100
|
||||
Subject: [PATCH] MIPS: ath79: export switch MDIO reference clock
|
||||
Subject: [PATCH 26/33] MIPS: ath79: export switch MDIO reference clock
|
||||
|
||||
On AR934x, the MDIO reference clock can be configured to a fixed 100 MHz
|
||||
clock. If that feature is not used, it defaults to the main reference clock,
|
||||
like on all other SoC.
|
||||
clock. If that feature is not used, it defaults to the main reference
|
||||
clock, like on all other SoC.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 8 ++++++++
|
||||
include/dt-bindings/clock/ath79-clk.h | 3 ++-
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -41,6 +41,7 @@ static const char * const clk_names[ATH7
|
||||
@@ -42,6 +42,7 @@ static const char * const clk_names[ATH7
|
||||
[ATH79_CLK_DDR] = "ddr",
|
||||
[ATH79_CLK_AHB] = "ahb",
|
||||
[ATH79_CLK_REF] = "ref",
|
||||
|
@ -19,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
};
|
||||
|
||||
static const char * __init ath79_clk_name(int type)
|
||||
@@ -341,6 +342,10 @@ static void __init ar934x_clocks_init(vo
|
||||
@@ -342,6 +343,10 @@ static void __init ar934x_clocks_init(vo
|
||||
ath79_set_clk(ATH79_CLK_DDR, ddr_rate);
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
|
||||
|
@ -30,7 +35,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
iounmap(dpll_base);
|
||||
}
|
||||
|
||||
@@ -687,6 +692,9 @@ static void __init ath79_clocks_init_dt(
|
||||
@@ -698,6 +703,9 @@ static void __init ath79_clocks_init_dt(
|
||||
else if (of_device_is_compatible(np, "qca,qca9560-pll"))
|
||||
qca956x_clocks_init(pll_base);
|
||||
|
|
@ -1,16 +1,18 @@
|
|||
From 08b9cad7da5d981d595fe6d76e9675f85e23e688 Mon Sep 17 00:00:00 2001
|
||||
From 3765b1f79593a0a9098ed15e48074c95403a53ee Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:57:15 +0100
|
||||
Subject: [PATCH 25/27] MIPS: ath79: drop irq.c
|
||||
Date: Sat, 23 Jun 2018 15:05:08 +0200
|
||||
Subject: [PATCH 27/33] MIPS: ath79: drop legacy IRQ code
|
||||
|
||||
all IRQ init code will flow via OF based irq chips.
|
||||
With the target now being fully OF based, we can drop the legacy IRQ code.
|
||||
All IRQs are now handled via the new irqchip drivers.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/Makefile | 2 +-
|
||||
arch/mips/ath79/irq.c | 285 -----------------------------------------------
|
||||
arch/mips/ath79/setup.c | 6 +
|
||||
3 files changed, 7 insertions(+), 286 deletions(-)
|
||||
arch/mips/ath79/Makefile | 2 +-
|
||||
arch/mips/ath79/irq.c | 169 -------------------------------
|
||||
arch/mips/ath79/setup.c | 6 ++
|
||||
arch/mips/include/asm/mach-ath79/ath79.h | 4 -
|
||||
4 files changed, 7 insertions(+), 174 deletions(-)
|
||||
delete mode 100644 arch/mips/ath79/irq.c
|
||||
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
|
@ -23,10 +25,10 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
+obj-y := prom.o setup.o common.o clock.o
|
||||
|
||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
|
||||
obj-$(CONFIG_PCI) += pci.o
|
||||
--- a/arch/mips/ath79/irq.c
|
||||
+++ /dev/null
|
||||
@@ -1,285 +0,0 @@
|
||||
@@ -1,169 +0,0 @@
|
||||
-/*
|
||||
- * Atheros AR71xx/AR724x/AR913x specific interrupt handling
|
||||
- *
|
||||
|
@ -85,34 +87,6 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- irq_set_chained_handler(ATH79_CPU_IRQ(2), ar934x_ip2_irq_dispatch);
|
||||
-}
|
||||
-
|
||||
-static void qca953x_ip2_irq_dispatch(struct irq_desc *desc)
|
||||
-{
|
||||
- u32 status;
|
||||
-
|
||||
- status = ath79_reset_rr(QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS);
|
||||
-
|
||||
- if (status & QCA953X_PCIE_WMAC_INT_PCIE_ALL) {
|
||||
- ath79_ddr_wb_flush(3);
|
||||
- generic_handle_irq(ATH79_IP2_IRQ(0));
|
||||
- } else if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) {
|
||||
- ath79_ddr_wb_flush(4);
|
||||
- generic_handle_irq(ATH79_IP2_IRQ(1));
|
||||
- } else {
|
||||
- spurious_interrupt();
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static void qca953x_irq_init(void)
|
||||
-{
|
||||
- int i;
|
||||
-
|
||||
- for (i = ATH79_IP2_IRQ_BASE;
|
||||
- i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
|
||||
- irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
|
||||
-
|
||||
- irq_set_chained_handler(ATH79_CPU_IRQ(2), qca953x_ip2_irq_dispatch);
|
||||
-}
|
||||
-
|
||||
-static void qca955x_ip2_irq_dispatch(struct irq_desc *desc)
|
||||
-{
|
||||
- u32 status;
|
||||
|
@ -185,87 +159,6 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
|
||||
-}
|
||||
-
|
||||
-static void qca956x_ip2_irq_dispatch(struct irq_desc *desc)
|
||||
-{
|
||||
- u32 status;
|
||||
-
|
||||
- status = ath79_reset_rr(QCA956X_RESET_REG_EXT_INT_STATUS);
|
||||
- status &= QCA956X_EXT_INT_PCIE_RC1_ALL | QCA956X_EXT_INT_WMAC_ALL;
|
||||
-
|
||||
- if (status == 0) {
|
||||
- spurious_interrupt();
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (status & QCA956X_EXT_INT_PCIE_RC1_ALL) {
|
||||
- /* TODO: flush DDR? */
|
||||
- generic_handle_irq(ATH79_IP2_IRQ(0));
|
||||
- }
|
||||
-
|
||||
- if (status & QCA956X_EXT_INT_WMAC_ALL) {
|
||||
- /* TODO: flsuh DDR? */
|
||||
- generic_handle_irq(ATH79_IP2_IRQ(1));
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static void qca956x_ip3_irq_dispatch(struct irq_desc *desc)
|
||||
-{
|
||||
- u32 status;
|
||||
-
|
||||
- status = ath79_reset_rr(QCA956X_RESET_REG_EXT_INT_STATUS);
|
||||
- status &= QCA956X_EXT_INT_PCIE_RC2_ALL |
|
||||
- QCA956X_EXT_INT_USB1 | QCA956X_EXT_INT_USB2;
|
||||
-
|
||||
- if (status == 0) {
|
||||
- spurious_interrupt();
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (status & QCA956X_EXT_INT_USB1) {
|
||||
- /* TODO: flush DDR? */
|
||||
- generic_handle_irq(ATH79_IP3_IRQ(0));
|
||||
- }
|
||||
-
|
||||
- if (status & QCA956X_EXT_INT_USB2) {
|
||||
- /* TODO: flush DDR? */
|
||||
- generic_handle_irq(ATH79_IP3_IRQ(1));
|
||||
- }
|
||||
-
|
||||
- if (status & QCA956X_EXT_INT_PCIE_RC2_ALL) {
|
||||
- /* TODO: flush DDR? */
|
||||
- generic_handle_irq(ATH79_IP3_IRQ(2));
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-static void qca956x_enable_timer_cb(void) {
|
||||
- u32 misc;
|
||||
-
|
||||
- misc = ath79_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE);
|
||||
- misc |= MISC_INT_MIPS_SI_TIMERINT_MASK;
|
||||
- ath79_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, misc);
|
||||
-}
|
||||
-
|
||||
-static void qca956x_irq_init(void)
|
||||
-{
|
||||
- int i;
|
||||
-
|
||||
- for (i = ATH79_IP2_IRQ_BASE;
|
||||
- i < ATH79_IP2_IRQ_BASE + ATH79_IP2_IRQ_COUNT; i++)
|
||||
- irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
|
||||
-
|
||||
- irq_set_chained_handler(ATH79_CPU_IRQ(2), qca956x_ip2_irq_dispatch);
|
||||
-
|
||||
- for (i = ATH79_IP3_IRQ_BASE;
|
||||
- i < ATH79_IP3_IRQ_BASE + ATH79_IP3_IRQ_COUNT; i++)
|
||||
- irq_set_chip_and_handler(i, &dummy_irq_chip, handle_level_irq);
|
||||
-
|
||||
- irq_set_chained_handler(ATH79_CPU_IRQ(3), qca956x_ip3_irq_dispatch);
|
||||
-
|
||||
- /* QCA956x timer init workaround has to be applied right before setting
|
||||
- * up the clock. Else, there will be no jiffies */
|
||||
- late_time_init = &qca956x_enable_timer_cb;
|
||||
-}
|
||||
-
|
||||
-void __init arch_init_irq(void)
|
||||
-{
|
||||
- unsigned irq_wb_chan2 = -1;
|
||||
|
@ -281,7 +174,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- soc_is_ar913x() || soc_is_ar933x()) {
|
||||
- irq_wb_chan2 = 3;
|
||||
- irq_wb_chan3 = 2;
|
||||
- } else if (soc_is_ar934x() || soc_is_qca953x()) {
|
||||
- } else if (soc_is_ar934x()) {
|
||||
- irq_wb_chan3 = 2;
|
||||
- }
|
||||
-
|
||||
|
@ -292,10 +185,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- else if (soc_is_ar724x() ||
|
||||
- soc_is_ar933x() ||
|
||||
- soc_is_ar934x() ||
|
||||
- soc_is_qca953x() ||
|
||||
- soc_is_qca955x() ||
|
||||
- soc_is_qca956x() ||
|
||||
- soc_is_tp9343())
|
||||
- soc_is_qca955x())
|
||||
- misc_is_ar71xx = false;
|
||||
- else
|
||||
- BUG();
|
||||
|
@ -305,12 +195,8 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
-
|
||||
- if (soc_is_ar934x())
|
||||
- ar934x_ip2_irq_init();
|
||||
- else if (soc_is_qca953x())
|
||||
- qca953x_irq_init();
|
||||
- else if (soc_is_qca955x())
|
||||
- qca955x_irq_init();
|
||||
- else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
- qca956x_irq_init();
|
||||
-}
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
|
@ -322,7 +208,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/idle.h>
|
||||
@@ -310,6 +311,11 @@ void __init plat_time_init(void)
|
||||
@@ -311,6 +312,11 @@ void __init plat_time_init(void)
|
||||
mips_hpt_frequency = cpu_clk_rate / 2;
|
||||
}
|
||||
|
||||
|
@ -334,3 +220,14 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
static int __init ath79_setup(void)
|
||||
{
|
||||
if (mips_machtype == ATH79_MACH_GENERIC_OF)
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
|
||||
@@ -178,8 +178,4 @@ static inline u32 ath79_reset_rr(unsigne
|
||||
void ath79_device_reset_set(u32 mask);
|
||||
void ath79_device_reset_clear(u32 mask);
|
||||
|
||||
-void ath79_cpu_irq_init(unsigned irq_wb_chan2, unsigned irq_wb_chan3);
|
||||
-void ath79_misc_irq_init(void __iomem *regs, int irq,
|
||||
- int irq_base, bool is_ar71xx);
|
||||
-
|
||||
#endif /* __ASM_MACH_ATH79_H */
|
|
@ -1,172 +0,0 @@
|
|||
From e03edbc8e68063b3fca7457fa048d8abe0045f1f Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 10:15:54 +0100
|
||||
Subject: [PATCH 27/27] MIPS: ath79: drop mips_machine support
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/Kconfig | 1 -
|
||||
arch/mips/ath79/machtypes.h | 28 -----------------
|
||||
arch/mips/ath79/setup.c | 74 ++++++---------------------------------------
|
||||
3 files changed, 10 insertions(+), 93 deletions(-)
|
||||
delete mode 100644 arch/mips/ath79/machtypes.h
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -196,7 +196,6 @@ config ATH79
|
||||
select COMMON_CLK
|
||||
select CLKDEV_LOOKUP
|
||||
select IRQ_MIPS_CPU
|
||||
- select MIPS_MACHINE
|
||||
select SYS_HAS_CPU_MIPS32_R2
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ /dev/null
|
||||
@@ -1,28 +0,0 @@
|
||||
-/*
|
||||
- * Atheros AR71XX/AR724X/AR913X machine type definitions
|
||||
- *
|
||||
- * Copyright (C) 2008-2010 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.
|
||||
- */
|
||||
-
|
||||
-#ifndef _ATH79_MACHTYPE_H
|
||||
-#define _ATH79_MACHTYPE_H
|
||||
-
|
||||
-#include <asm/mips_machine.h>
|
||||
-
|
||||
-enum ath79_mach_type {
|
||||
- ATH79_MACH_GENERIC_OF = -1, /* Device tree board */
|
||||
- ATH79_MACH_GENERIC = 0,
|
||||
- ATH79_MACH_AP121, /* Atheros AP121 reference board */
|
||||
- ATH79_MACH_AP136_010, /* Atheros AP136-010 reference board */
|
||||
- ATH79_MACH_AP81, /* Atheros AP81 reference board */
|
||||
- ATH79_MACH_DB120, /* Atheros DB120 reference board */
|
||||
- ATH79_MACH_PB44, /* Atheros PB44 reference board */
|
||||
- ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
|
||||
-};
|
||||
-
|
||||
-#endif /* _ATH79_MACHTYPE_H */
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -32,7 +32,6 @@
|
||||
#include <asm/mach-ath79/ath79.h>
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
#include "common.h"
|
||||
-#include "machtypes.h"
|
||||
|
||||
#define ATH79_SYS_TYPE_LEN 64
|
||||
|
||||
@@ -235,25 +234,21 @@ void __init plat_mem_setup(void)
|
||||
else if (fw_passed_dtb)
|
||||
__dt_setup_arch((void *)KSEG0ADDR(fw_passed_dtb));
|
||||
|
||||
- if (mips_machtype != ATH79_MACH_GENERIC_OF) {
|
||||
- ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE,
|
||||
- AR71XX_RESET_SIZE);
|
||||
- ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE,
|
||||
- AR71XX_PLL_SIZE);
|
||||
- ath79_detect_sys_type();
|
||||
- ath79_ddr_ctrl_init();
|
||||
+ ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE,
|
||||
+ AR71XX_RESET_SIZE);
|
||||
+ ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE,
|
||||
+ AR71XX_PLL_SIZE);
|
||||
+ ath79_detect_sys_type();
|
||||
+ ath79_ddr_ctrl_init();
|
||||
|
||||
- detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX);
|
||||
-
|
||||
- /* OF machines should use the reset driver */
|
||||
- _machine_restart = ath79_restart;
|
||||
- }
|
||||
+ detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX);
|
||||
|
||||
+ _machine_restart = ath79_restart;
|
||||
_machine_halt = ath79_halt;
|
||||
pm_power_off = ath79_halt;
|
||||
}
|
||||
|
||||
-static void __init ath79_of_plat_time_init(void)
|
||||
+void __init plat_time_init(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
struct clk *clk;
|
||||
@@ -283,62 +278,12 @@ static void __init ath79_of_plat_time_in
|
||||
clk_put(clk);
|
||||
}
|
||||
|
||||
-void __init plat_time_init(void)
|
||||
-{
|
||||
- unsigned long cpu_clk_rate;
|
||||
- unsigned long ahb_clk_rate;
|
||||
- unsigned long ddr_clk_rate;
|
||||
- unsigned long ref_clk_rate;
|
||||
-
|
||||
- if (IS_ENABLED(CONFIG_OF) && mips_machtype == ATH79_MACH_GENERIC_OF) {
|
||||
- ath79_of_plat_time_init();
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- ath79_clocks_init();
|
||||
-
|
||||
- cpu_clk_rate = ath79_get_sys_clk_rate("cpu");
|
||||
- ahb_clk_rate = ath79_get_sys_clk_rate("ahb");
|
||||
- ddr_clk_rate = ath79_get_sys_clk_rate("ddr");
|
||||
- ref_clk_rate = ath79_get_sys_clk_rate("ref");
|
||||
-
|
||||
- pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, Ref:%lu.%03luMHz\n",
|
||||
- cpu_clk_rate / 1000000, (cpu_clk_rate / 1000) % 1000,
|
||||
- ddr_clk_rate / 1000000, (ddr_clk_rate / 1000) % 1000,
|
||||
- ahb_clk_rate / 1000000, (ahb_clk_rate / 1000) % 1000,
|
||||
- ref_clk_rate / 1000000, (ref_clk_rate / 1000) % 1000);
|
||||
-
|
||||
- mips_hpt_frequency = cpu_clk_rate / 2;
|
||||
-}
|
||||
-
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
irqchip_init();
|
||||
}
|
||||
|
||||
-static int __init ath79_setup(void)
|
||||
-{
|
||||
- if (mips_machtype == ATH79_MACH_GENERIC_OF)
|
||||
- return 0;
|
||||
-
|
||||
- mips_machine_setup();
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-arch_initcall(ath79_setup);
|
||||
-
|
||||
void __init device_tree_init(void)
|
||||
{
|
||||
unflatten_and_copy_device_tree();
|
||||
}
|
||||
-
|
||||
-MIPS_MACHINE(ATH79_MACH_GENERIC,
|
||||
- "Generic",
|
||||
- "Generic AR71XX/AR724X/AR913X based board",
|
||||
- NULL);
|
||||
-
|
||||
-MIPS_MACHINE(ATH79_MACH_GENERIC_OF,
|
||||
- "DTB",
|
||||
- "Generic AR71XX/AR724X/AR913X based board (DT)",
|
||||
- NULL);
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <asm/mach-ath79/ath79.h>
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
#include "common.h"
|
||||
-#include "machtypes.h"
|
||||
|
||||
#define AR71XX_BASE_FREQ 40000000
|
||||
#define AR724X_BASE_FREQ 40000000
|
|
@ -1,26 +1,44 @@
|
|||
From 6e38a86d50dba5cc1da9bfd07969d76dd3ac2dda Mon Sep 17 00:00:00 2001
|
||||
From badf28957b6dc400dff27bd23ba2ae75d9514be5 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:28:13 +0100
|
||||
Subject: [PATCH 23/27] MIPS: ath79: drop mach files
|
||||
Date: Sat, 23 Jun 2018 15:04:09 +0200
|
||||
Subject: [PATCH 28/33] MIPS: ath79: drop machfiles
|
||||
|
||||
With the target now being fully OF based, we can drop the legacy mach
|
||||
files. Boards can now boot fully of devicetree files.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/Kconfig | 1 -
|
||||
arch/mips/ath79/Kconfig | 73 -------------------
|
||||
arch/mips/ath79/Makefile | 10 ---
|
||||
arch/mips/ath79/clock.c | 1 -
|
||||
arch/mips/ath79/mach-ap121.c | 92 ------------------------
|
||||
arch/mips/ath79/mach-ap136.c | 156 -----------------------------------------
|
||||
arch/mips/ath79/mach-ap81.c | 100 --------------------------
|
||||
arch/mips/ath79/mach-db120.c | 136 -----------------------------------
|
||||
arch/mips/ath79/mach-pb44.c | 128 ---------------------------------
|
||||
arch/mips/ath79/mach-ubnt-xm.c | 126 ---------------------------------
|
||||
8 files changed, 821 deletions(-)
|
||||
arch/mips/ath79/machtypes.h | 28 --------
|
||||
arch/mips/ath79/setup.c | 77 +++-----------------
|
||||
12 files changed, 9 insertions(+), 919 deletions(-)
|
||||
delete mode 100644 arch/mips/ath79/mach-ap121.c
|
||||
delete mode 100644 arch/mips/ath79/mach-ap136.c
|
||||
delete mode 100644 arch/mips/ath79/mach-ap81.c
|
||||
delete mode 100644 arch/mips/ath79/mach-db120.c
|
||||
delete mode 100644 arch/mips/ath79/mach-pb44.c
|
||||
delete mode 100644 arch/mips/ath79/mach-ubnt-xm.c
|
||||
delete mode 100644 arch/mips/ath79/machtypes.h
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -196,7 +196,6 @@ config ATH79
|
||||
select COMMON_CLK
|
||||
select CLKDEV_LOOKUP
|
||||
select IRQ_MIPS_CPU
|
||||
- select MIPS_MACHINE
|
||||
select SYS_HAS_CPU_MIPS32_R2
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
--- a/arch/mips/ath79/Kconfig
|
||||
+++ b/arch/mips/ath79/Kconfig
|
||||
@@ -1,79 +1,6 @@
|
||||
|
@ -105,7 +123,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
def_bool n
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
+++ b/arch/mips/ath79/Makefile
|
||||
@@ -21,13 +21,3 @@ obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev
|
||||
@@ -22,13 +22,3 @@ obj-$(CONFIG_ATH79_DEV_LEDS_GPIO) += dev
|
||||
obj-$(CONFIG_ATH79_DEV_SPI) += dev-spi.o
|
||||
obj-$(CONFIG_ATH79_DEV_USB) += dev-usb.o
|
||||
obj-$(CONFIG_ATH79_DEV_WMAC) += dev-wmac.o
|
||||
|
@ -119,6 +137,16 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
-obj-$(CONFIG_ATH79_MACH_DB120) += mach-db120.o
|
||||
-obj-$(CONFIG_ATH79_MACH_PB44) += mach-pb44.o
|
||||
-obj-$(CONFIG_ATH79_MACH_UBNT_XM) += mach-ubnt-xm.o
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <asm/mach-ath79/ath79.h>
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
#include "common.h"
|
||||
-#include "machtypes.h"
|
||||
|
||||
#define AR71XX_BASE_FREQ 40000000
|
||||
#define AR724X_BASE_FREQ 40000000
|
||||
--- a/arch/mips/ath79/mach-ap121.c
|
||||
+++ /dev/null
|
||||
@@ -1,92 +0,0 @@
|
||||
|
@ -740,3 +768,275 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
-
|
||||
-MIPS_MACHINE(ATH79_MACH_PB44, "PB44", "Atheros PB44 reference board",
|
||||
- pb44_init);
|
||||
--- a/arch/mips/ath79/mach-ubnt-xm.c
|
||||
+++ /dev/null
|
||||
@@ -1,126 +0,0 @@
|
||||
-/*
|
||||
- * Ubiquiti Networks XM (rev 1.0) board support
|
||||
- *
|
||||
- * Copyright (C) 2011 René Bolldorf <xsecute@googlemail.com>
|
||||
- *
|
||||
- * Derived from: mach-pb44.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.
|
||||
- */
|
||||
-
|
||||
-#include <linux/init.h>
|
||||
-#include <linux/pci.h>
|
||||
-#include <linux/ath9k_platform.h>
|
||||
-
|
||||
-#include <asm/mach-ath79/irq.h>
|
||||
-
|
||||
-#include "machtypes.h"
|
||||
-#include "dev-gpio-buttons.h"
|
||||
-#include "dev-leds-gpio.h"
|
||||
-#include "dev-spi.h"
|
||||
-#include "pci.h"
|
||||
-
|
||||
-#define UBNT_XM_GPIO_LED_L1 0
|
||||
-#define UBNT_XM_GPIO_LED_L2 1
|
||||
-#define UBNT_XM_GPIO_LED_L3 11
|
||||
-#define UBNT_XM_GPIO_LED_L4 7
|
||||
-
|
||||
-#define UBNT_XM_GPIO_BTN_RESET 12
|
||||
-
|
||||
-#define UBNT_XM_KEYS_POLL_INTERVAL 20
|
||||
-#define UBNT_XM_KEYS_DEBOUNCE_INTERVAL (3 * UBNT_XM_KEYS_POLL_INTERVAL)
|
||||
-
|
||||
-#define UBNT_XM_EEPROM_ADDR (u8 *) KSEG1ADDR(0x1fff1000)
|
||||
-
|
||||
-static struct gpio_led ubnt_xm_leds_gpio[] __initdata = {
|
||||
- {
|
||||
- .name = "ubnt-xm:red:link1",
|
||||
- .gpio = UBNT_XM_GPIO_LED_L1,
|
||||
- .active_low = 0,
|
||||
- }, {
|
||||
- .name = "ubnt-xm:orange:link2",
|
||||
- .gpio = UBNT_XM_GPIO_LED_L2,
|
||||
- .active_low = 0,
|
||||
- }, {
|
||||
- .name = "ubnt-xm:green:link3",
|
||||
- .gpio = UBNT_XM_GPIO_LED_L3,
|
||||
- .active_low = 0,
|
||||
- }, {
|
||||
- .name = "ubnt-xm:green:link4",
|
||||
- .gpio = UBNT_XM_GPIO_LED_L4,
|
||||
- .active_low = 0,
|
||||
- },
|
||||
-};
|
||||
-
|
||||
-static struct gpio_keys_button ubnt_xm_gpio_keys[] __initdata = {
|
||||
- {
|
||||
- .desc = "reset",
|
||||
- .type = EV_KEY,
|
||||
- .code = KEY_RESTART,
|
||||
- .debounce_interval = UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
|
||||
- .gpio = UBNT_XM_GPIO_BTN_RESET,
|
||||
- .active_low = 1,
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-static struct spi_board_info ubnt_xm_spi_info[] = {
|
||||
- {
|
||||
- .bus_num = 0,
|
||||
- .chip_select = 0,
|
||||
- .max_speed_hz = 25000000,
|
||||
- .modalias = "mx25l6405d",
|
||||
- }
|
||||
-};
|
||||
-
|
||||
-static struct ath79_spi_platform_data ubnt_xm_spi_data = {
|
||||
- .bus_num = 0,
|
||||
- .num_chipselect = 1,
|
||||
-};
|
||||
-
|
||||
-#ifdef CONFIG_PCI
|
||||
-static struct ath9k_platform_data ubnt_xm_eeprom_data;
|
||||
-
|
||||
-static int ubnt_xm_pci_plat_dev_init(struct pci_dev *dev)
|
||||
-{
|
||||
- switch (PCI_SLOT(dev->devfn)) {
|
||||
- case 0:
|
||||
- dev->dev.platform_data = &ubnt_xm_eeprom_data;
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static void __init ubnt_xm_pci_init(void)
|
||||
-{
|
||||
- memcpy(ubnt_xm_eeprom_data.eeprom_data, UBNT_XM_EEPROM_ADDR,
|
||||
- sizeof(ubnt_xm_eeprom_data.eeprom_data));
|
||||
-
|
||||
- ath79_pci_set_plat_dev_init(ubnt_xm_pci_plat_dev_init);
|
||||
- ath79_register_pci();
|
||||
-}
|
||||
-#else
|
||||
-static inline void ubnt_xm_pci_init(void) {}
|
||||
-#endif /* CONFIG_PCI */
|
||||
-
|
||||
-static void __init ubnt_xm_init(void)
|
||||
-{
|
||||
- ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
|
||||
- ubnt_xm_leds_gpio);
|
||||
-
|
||||
- ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
|
||||
- ARRAY_SIZE(ubnt_xm_gpio_keys),
|
||||
- ubnt_xm_gpio_keys);
|
||||
-
|
||||
- ath79_register_spi(&ubnt_xm_spi_data, ubnt_xm_spi_info,
|
||||
- ARRAY_SIZE(ubnt_xm_spi_info));
|
||||
-
|
||||
- ubnt_xm_pci_init();
|
||||
-}
|
||||
-
|
||||
-MIPS_MACHINE(ATH79_MACH_UBNT_XM,
|
||||
- "UBNT-XM",
|
||||
- "Ubiquiti Networks XM (rev 1.0) board",
|
||||
- ubnt_xm_init);
|
||||
--- a/arch/mips/ath79/machtypes.h
|
||||
+++ /dev/null
|
||||
@@ -1,28 +0,0 @@
|
||||
-/*
|
||||
- * Atheros AR71XX/AR724X/AR913X machine type definitions
|
||||
- *
|
||||
- * Copyright (C) 2008-2010 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.
|
||||
- */
|
||||
-
|
||||
-#ifndef _ATH79_MACHTYPE_H
|
||||
-#define _ATH79_MACHTYPE_H
|
||||
-
|
||||
-#include <asm/mips_machine.h>
|
||||
-
|
||||
-enum ath79_mach_type {
|
||||
- ATH79_MACH_GENERIC_OF = -1, /* Device tree board */
|
||||
- ATH79_MACH_GENERIC = 0,
|
||||
- ATH79_MACH_AP121, /* Atheros AP121 reference board */
|
||||
- ATH79_MACH_AP136_010, /* Atheros AP136-010 reference board */
|
||||
- ATH79_MACH_AP81, /* Atheros AP81 reference board */
|
||||
- ATH79_MACH_DB120, /* Atheros DB120 reference board */
|
||||
- ATH79_MACH_PB44, /* Atheros PB44 reference board */
|
||||
- ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */
|
||||
-};
|
||||
-
|
||||
-#endif /* _ATH79_MACHTYPE_H */
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -33,7 +33,6 @@
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
#include "common.h"
|
||||
#include "dev-common.h"
|
||||
-#include "machtypes.h"
|
||||
|
||||
#define ATH79_SYS_TYPE_LEN 64
|
||||
|
||||
@@ -236,25 +235,21 @@ void __init plat_mem_setup(void)
|
||||
else if (fw_passed_dtb)
|
||||
__dt_setup_arch((void *)KSEG0ADDR(fw_passed_dtb));
|
||||
|
||||
- if (mips_machtype != ATH79_MACH_GENERIC_OF) {
|
||||
- ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE,
|
||||
- AR71XX_RESET_SIZE);
|
||||
- ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE,
|
||||
- AR71XX_PLL_SIZE);
|
||||
- ath79_detect_sys_type();
|
||||
- ath79_ddr_ctrl_init();
|
||||
+ ath79_reset_base = ioremap_nocache(AR71XX_RESET_BASE,
|
||||
+ AR71XX_RESET_SIZE);
|
||||
+ ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE,
|
||||
+ AR71XX_PLL_SIZE);
|
||||
+ ath79_detect_sys_type();
|
||||
+ ath79_ddr_ctrl_init();
|
||||
|
||||
- detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX);
|
||||
-
|
||||
- /* OF machines should use the reset driver */
|
||||
- _machine_restart = ath79_restart;
|
||||
- }
|
||||
+ detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX);
|
||||
|
||||
+ _machine_restart = ath79_restart;
|
||||
_machine_halt = ath79_halt;
|
||||
pm_power_off = ath79_halt;
|
||||
}
|
||||
|
||||
-static void __init ath79_of_plat_time_init(void)
|
||||
+void __init plat_time_init(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
struct clk *clk;
|
||||
@@ -284,66 +279,12 @@ static void __init ath79_of_plat_time_in
|
||||
clk_put(clk);
|
||||
}
|
||||
|
||||
-void __init plat_time_init(void)
|
||||
-{
|
||||
- unsigned long cpu_clk_rate;
|
||||
- unsigned long ahb_clk_rate;
|
||||
- unsigned long ddr_clk_rate;
|
||||
- unsigned long ref_clk_rate;
|
||||
-
|
||||
- if (IS_ENABLED(CONFIG_OF) && mips_machtype == ATH79_MACH_GENERIC_OF) {
|
||||
- ath79_of_plat_time_init();
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- ath79_clocks_init();
|
||||
-
|
||||
- cpu_clk_rate = ath79_get_sys_clk_rate("cpu");
|
||||
- ahb_clk_rate = ath79_get_sys_clk_rate("ahb");
|
||||
- ddr_clk_rate = ath79_get_sys_clk_rate("ddr");
|
||||
- ref_clk_rate = ath79_get_sys_clk_rate("ref");
|
||||
-
|
||||
- pr_info("Clocks: CPU:%lu.%03luMHz, DDR:%lu.%03luMHz, AHB:%lu.%03luMHz, Ref:%lu.%03luMHz\n",
|
||||
- cpu_clk_rate / 1000000, (cpu_clk_rate / 1000) % 1000,
|
||||
- ddr_clk_rate / 1000000, (ddr_clk_rate / 1000) % 1000,
|
||||
- ahb_clk_rate / 1000000, (ahb_clk_rate / 1000) % 1000,
|
||||
- ref_clk_rate / 1000000, (ref_clk_rate / 1000) % 1000);
|
||||
-
|
||||
- mips_hpt_frequency = cpu_clk_rate / 2;
|
||||
-}
|
||||
-
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
irqchip_init();
|
||||
}
|
||||
|
||||
-static int __init ath79_setup(void)
|
||||
-{
|
||||
- if (mips_machtype == ATH79_MACH_GENERIC_OF)
|
||||
- return 0;
|
||||
-
|
||||
- ath79_gpio_init();
|
||||
- ath79_register_uart();
|
||||
- ath79_register_wdt();
|
||||
-
|
||||
- mips_machine_setup();
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-arch_initcall(ath79_setup);
|
||||
-
|
||||
void __init device_tree_init(void)
|
||||
{
|
||||
unflatten_and_copy_device_tree();
|
||||
}
|
||||
-
|
||||
-MIPS_MACHINE(ATH79_MACH_GENERIC,
|
||||
- "Generic",
|
||||
- "Generic AR71XX/AR724X/AR913X based board",
|
||||
- NULL);
|
||||
-
|
||||
-MIPS_MACHINE(ATH79_MACH_GENERIC_OF,
|
||||
- "DTB",
|
||||
- "Generic AR71XX/AR724X/AR913X based board (DT)",
|
||||
- NULL);
|
|
@ -1,25 +1,28 @@
|
|||
From f4128f3224df2309262ef8d1275d928717ebefd0 Mon Sep 17 00:00:00 2001
|
||||
From d0f1420702ed47a82572aaf39e7407055518d14e Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:21:46 +0100
|
||||
Subject: [PATCH 22/27] MIPS: ath79: drop pci.c
|
||||
Date: Sat, 23 Jun 2018 15:05:19 +0200
|
||||
Subject: [PATCH 29/33] MIPS: ath79: drop legacy pci code
|
||||
|
||||
This patch drops pci.c fromt he ath79 folder and moves the the pcibios
|
||||
callbacks to a new fixup file.
|
||||
With the target now being fully OF based, we can drop the legacy pci
|
||||
platform code. The only bits that we need to keep is the fixup code
|
||||
which we move to its own code file.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/Makefile | 1 -
|
||||
arch/mips/ath79/pci.c | 285 --------------------------------------------
|
||||
arch/mips/ath79/pci.c | 273 --------------------------------------------
|
||||
arch/mips/ath79/pci.h | 35 ------
|
||||
arch/mips/pci/Makefile | 1 +
|
||||
arch/mips/pci/fixup-ath79.c | 21 ++++
|
||||
4 files changed, 22 insertions(+), 286 deletions(-)
|
||||
5 files changed, 22 insertions(+), 309 deletions(-)
|
||||
delete mode 100644 arch/mips/ath79/pci.c
|
||||
delete mode 100644 arch/mips/ath79/pci.h
|
||||
create mode 100644 arch/mips/pci/fixup-ath79.c
|
||||
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
+++ b/arch/mips/ath79/Makefile
|
||||
@@ -11,7 +11,6 @@
|
||||
obj-y := prom.o setup.o irq.o common.o clock.o
|
||||
obj-y := prom.o setup.o common.o clock.o
|
||||
|
||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
-obj-$(CONFIG_PCI) += pci.o
|
||||
|
@ -28,7 +31,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
# Devices
|
||||
--- a/arch/mips/ath79/pci.c
|
||||
+++ /dev/null
|
||||
@@ -1,285 +0,0 @@
|
||||
@@ -1,273 +0,0 @@
|
||||
-/*
|
||||
- * Atheros AR71XX/AR724X specific PCI setup code
|
||||
- *
|
||||
|
@ -113,9 +116,6 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- } else if (soc_is_qca955x()) {
|
||||
- ath79_pci_irq_map = qca955x_pci_irq_map;
|
||||
- ath79_pci_nr_irqs = ARRAY_SIZE(qca955x_pci_irq_map);
|
||||
- } else if (soc_is_qca956x()) {
|
||||
- ath79_pci_irq_map = qca956x_pci_irq_map;
|
||||
- ath79_pci_nr_irqs = ARRAY_SIZE(qca956x_pci_irq_map);
|
||||
- } else {
|
||||
- pr_crit("pci %s: invalid irq map\n",
|
||||
- pci_name((struct pci_dev *) dev));
|
||||
|
@ -295,15 +295,6 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- QCA955X_PCI_MEM_SIZE,
|
||||
- 1,
|
||||
- ATH79_IP3_IRQ(2));
|
||||
- } else if (soc_is_qca956x()) {
|
||||
- pdev = ath79_register_pci_ar724x(0,
|
||||
- QCA956X_PCI_CFG_BASE1,
|
||||
- QCA956X_PCI_CTRL_BASE1,
|
||||
- QCA956X_PCI_CRP_BASE1,
|
||||
- QCA956X_PCI_MEM_BASE1,
|
||||
- QCA956X_PCI_MEM_SIZE,
|
||||
- 1,
|
||||
- ATH79_IP3_IRQ(2));
|
||||
- } else {
|
||||
- /* No PCI support */
|
||||
- return -ENODEV;
|
||||
|
@ -314,6 +305,44 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
-
|
||||
- return pdev ? 0 : -ENODEV;
|
||||
-}
|
||||
--- a/arch/mips/ath79/pci.h
|
||||
+++ /dev/null
|
||||
@@ -1,35 +0,0 @@
|
||||
-/*
|
||||
- * Atheros AR71XX/AR724X PCI support
|
||||
- *
|
||||
- * Copyright (C) 2011 René Bolldorf <xsecute@googlemail.com>
|
||||
- * 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.
|
||||
- */
|
||||
-
|
||||
-#ifndef _ATH79_PCI_H
|
||||
-#define _ATH79_PCI_H
|
||||
-
|
||||
-struct ath79_pci_irq {
|
||||
- int bus;
|
||||
- u8 slot;
|
||||
- u8 pin;
|
||||
- int irq;
|
||||
-};
|
||||
-
|
||||
-#ifdef CONFIG_PCI
|
||||
-void ath79_pci_set_irq_map(unsigned nr_irqs, const struct ath79_pci_irq *map);
|
||||
-void ath79_pci_set_plat_dev_init(int (*func)(struct pci_dev *dev));
|
||||
-int ath79_register_pci(void);
|
||||
-#else
|
||||
-static inline void
|
||||
-ath79_pci_set_irq_map(unsigned nr_irqs, const struct ath79_pci_irq *map) {}
|
||||
-static inline void
|
||||
-ath79_pci_set_plat_dev_init(int (*func)(struct pci_dev *)) {}
|
||||
-static inline int ath79_register_pci(void) { return 0; }
|
||||
-#endif
|
||||
-
|
||||
-#endif /* _ATH79_PCI_H */
|
||||
--- a/arch/mips/pci/Makefile
|
||||
+++ b/arch/mips/pci/Makefile
|
||||
@@ -29,6 +29,7 @@ obj-$(CONFIG_MIPS_PCI_VIRTIO) += pci-vir
|
|
@ -1,11 +1,17 @@
|
|||
From c038250c16cdefd6d74ad61309ba84973eceb630 Mon Sep 17 00:00:00 2001
|
||||
From dce930fba8ad3a90ccd164f199e57c2d61937ccd Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:29:46 +0100
|
||||
Subject: [PATCH 24/27] MIPS: ath79: drop pdata helpers
|
||||
Date: Sat, 23 Jun 2018 15:12:38 +0200
|
||||
Subject: [PATCH 30/33] MIPS: ath79: drop platform device registration code
|
||||
|
||||
With the target now being fully OF based, we can drop the legacy platform
|
||||
device registration code. All devices and their drivers are now probed
|
||||
via OF.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/dev-common.c | 168 -------------------------
|
||||
arch/mips/ath79/Makefile | 10 --
|
||||
arch/mips/ath79/common.h | 2 -
|
||||
arch/mips/ath79/dev-common.c | 159 ------------------------
|
||||
arch/mips/ath79/dev-common.h | 18 ---
|
||||
arch/mips/ath79/dev-gpio-buttons.c | 56 ---------
|
||||
arch/mips/ath79/dev-gpio-buttons.h | 23 ----
|
||||
|
@ -17,8 +23,8 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
arch/mips/ath79/dev-usb.h | 17 ---
|
||||
arch/mips/ath79/dev-wmac.c | 155 ------------------------
|
||||
arch/mips/ath79/dev-wmac.h | 17 ---
|
||||
arch/mips/ath79/setup.c | 5 -
|
||||
13 files changed, 836 deletions(-)
|
||||
arch/mips/ath79/setup.c | 1 -
|
||||
15 files changed, 835 deletions(-)
|
||||
delete mode 100644 arch/mips/ath79/dev-common.c
|
||||
delete mode 100644 arch/mips/ath79/dev-common.h
|
||||
delete mode 100644 arch/mips/ath79/dev-gpio-buttons.c
|
||||
|
@ -32,9 +38,34 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
delete mode 100644 arch/mips/ath79/dev-wmac.c
|
||||
delete mode 100644 arch/mips/ath79/dev-wmac.h
|
||||
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
+++ b/arch/mips/ath79/Makefile
|
||||
@@ -11,13 +11,3 @@
|
||||
obj-y := prom.o setup.o common.o clock.o
|
||||
|
||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
-
|
||||
-#
|
||||
-# Devices
|
||||
-#
|
||||
-obj-y += dev-common.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
|
||||
-obj-$(CONFIG_ATH79_DEV_USB) += dev-usb.o
|
||||
-obj-$(CONFIG_ATH79_DEV_WMAC) += dev-wmac.o
|
||||
--- a/arch/mips/ath79/common.h
|
||||
+++ b/arch/mips/ath79/common.h
|
||||
@@ -24,6 +24,4 @@ unsigned long ath79_get_sys_clk_rate(con
|
||||
|
||||
void ath79_ddr_ctrl_init(void);
|
||||
|
||||
-void ath79_gpio_init(void);
|
||||
-
|
||||
#endif /* __ATH79_COMMON_H */
|
||||
--- a/arch/mips/ath79/dev-common.c
|
||||
+++ /dev/null
|
||||
@@ -1,168 +0,0 @@
|
||||
@@ -1,159 +0,0 @@
|
||||
-/*
|
||||
- * Atheros AR71XX/AR724X/AR913X common devices
|
||||
- *
|
||||
|
@ -122,10 +153,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- soc_is_ar724x() ||
|
||||
- soc_is_ar913x() ||
|
||||
- soc_is_ar934x() ||
|
||||
- soc_is_qca953x() ||
|
||||
- soc_is_qca955x() ||
|
||||
- soc_is_qca956x() ||
|
||||
- soc_is_tp9343()) {
|
||||
- soc_is_qca955x()) {
|
||||
- ath79_uart_data[0].uartclk = uart_clk_rate;
|
||||
- platform_device_register(&ath79_uart_device);
|
||||
- } else if (soc_is_ar933x()) {
|
||||
|
@ -188,15 +216,9 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- } else if (soc_is_ar934x()) {
|
||||
- ath79_gpio_pdata.ngpios = AR934X_GPIO_COUNT;
|
||||
- ath79_gpio_pdata.oe_inverted = 1;
|
||||
- } else if (soc_is_qca953x()) {
|
||||
- ath79_gpio_pdata.ngpios = QCA953X_GPIO_COUNT;
|
||||
- ath79_gpio_pdata.oe_inverted = 1;
|
||||
- } else if (soc_is_qca955x()) {
|
||||
- ath79_gpio_pdata.ngpios = QCA955X_GPIO_COUNT;
|
||||
- ath79_gpio_pdata.oe_inverted = 1;
|
||||
- } else if (soc_is_qca956x() || soc_is_tp9343()) {
|
||||
- ath79_gpio_pdata.ngpios = QCA956X_GPIO_COUNT;
|
||||
- ath79_gpio_pdata.oe_inverted = 1;
|
||||
- } else {
|
||||
- BUG();
|
||||
- }
|
||||
|
@ -901,22 +923,11 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
-#endif /* _ATH79_DEV_WMAC_H */
|
||||
--- a/arch/mips/ath79/setup.c
|
||||
+++ b/arch/mips/ath79/setup.c
|
||||
@@ -31,7 +31,6 @@
|
||||
@@ -32,7 +32,6 @@
|
||||
#include <asm/mach-ath79/ath79.h>
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
#include "common.h"
|
||||
-#include "dev-common.h"
|
||||
#include "machtypes.h"
|
||||
|
||||
#define ATH79_SYS_TYPE_LEN 64
|
||||
@@ -316,10 +315,6 @@ static int __init ath79_setup(void)
|
||||
if (mips_machtype == ATH79_MACH_GENERIC_OF)
|
||||
return 0;
|
||||
|
||||
- ath79_gpio_init();
|
||||
- ath79_register_uart();
|
||||
- ath79_register_wdt();
|
||||
-
|
||||
mips_machine_setup();
|
||||
|
||||
return 0;
|
|
@ -0,0 +1,95 @@
|
|||
From 00e4313da4609074fff134e61dd9ffe3fd37474d Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Sun, 24 Jun 2018 09:39:41 +0200
|
||||
Subject: [PATCH 31/33] MIPS: ath79: drop !OF clock code
|
||||
|
||||
With the target now being fully OF based, we can drop the legacy clock
|
||||
registration code. All clocks are now probed via devicetree.
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/ath79/clock.c | 56 ------------------------------------------------
|
||||
arch/mips/ath79/common.h | 3 ---
|
||||
2 files changed, 59 deletions(-)
|
||||
|
||||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -617,60 +617,6 @@ static void __init qca956x_clocks_init(v
|
||||
ath79_set_clk(ATH79_CLK_AHB, ahb_rate);
|
||||
}
|
||||
|
||||
-void __init ath79_clocks_init(void)
|
||||
-{
|
||||
- const char *wdt;
|
||||
- const char *uart;
|
||||
-
|
||||
- if (soc_is_ar71xx())
|
||||
- ar71xx_clocks_init(ath79_pll_base);
|
||||
- else if (soc_is_ar724x() || soc_is_ar913x())
|
||||
- ar724x_clocks_init(ath79_pll_base);
|
||||
- else if (soc_is_ar933x())
|
||||
- ar933x_clocks_init(ath79_pll_base);
|
||||
- else if (soc_is_ar934x())
|
||||
- ar934x_clocks_init(ath79_pll_base);
|
||||
- else if (soc_is_qca953x())
|
||||
- qca953x_clocks_init(ath79_pll_base);
|
||||
- else if (soc_is_qca955x())
|
||||
- qca955x_clocks_init(ath79_pll_base);
|
||||
- else if (soc_is_qca956x() || soc_is_tp9343())
|
||||
- qca956x_clocks_init(ath79_pll_base);
|
||||
- else
|
||||
- BUG();
|
||||
-
|
||||
- if (soc_is_ar71xx() || soc_is_ar724x() || soc_is_ar913x()) {
|
||||
- wdt = "ahb";
|
||||
- uart = "ahb";
|
||||
- } else if (soc_is_ar933x()) {
|
||||
- wdt = "ahb";
|
||||
- uart = "ref";
|
||||
- } else {
|
||||
- wdt = "ref";
|
||||
- uart = "ref";
|
||||
- }
|
||||
-
|
||||
- clk_add_alias("wdt", NULL, wdt, NULL);
|
||||
- clk_add_alias("uart", NULL, uart, NULL);
|
||||
-}
|
||||
-
|
||||
-unsigned long __init
|
||||
-ath79_get_sys_clk_rate(const char *id)
|
||||
-{
|
||||
- struct clk *clk;
|
||||
- unsigned long rate;
|
||||
-
|
||||
- clk = clk_get(NULL, id);
|
||||
- if (IS_ERR(clk))
|
||||
- panic("unable to get %s clock, err=%d", id, (int) PTR_ERR(clk));
|
||||
-
|
||||
- rate = clk_get_rate(clk);
|
||||
- clk_put(clk);
|
||||
-
|
||||
- return rate;
|
||||
-}
|
||||
-
|
||||
-#ifdef CONFIG_OF
|
||||
static void __init ath79_clocks_init_dt(struct device_node *np)
|
||||
{
|
||||
struct clk *ref_clk;
|
||||
@@ -727,5 +673,3 @@ CLK_OF_DECLARE(ar9340_clk, "qca,ar9340-p
|
||||
CLK_OF_DECLARE(ar9530_clk, "qca,qca9530-pll", ath79_clocks_init_dt);
|
||||
CLK_OF_DECLARE(ar9550_clk, "qca,qca9550-pll", ath79_clocks_init_dt);
|
||||
CLK_OF_DECLARE(ar9560_clk, "qca,qca9560-pll", ath79_clocks_init_dt);
|
||||
-
|
||||
-#endif
|
||||
--- a/arch/mips/ath79/common.h
|
||||
+++ b/arch/mips/ath79/common.h
|
||||
@@ -19,9 +19,6 @@
|
||||
#define ATH79_MEM_SIZE_MIN (2 * 1024 * 1024)
|
||||
#define ATH79_MEM_SIZE_MAX (256 * 1024 * 1024)
|
||||
|
||||
-void ath79_clocks_init(void);
|
||||
-unsigned long ath79_get_sys_clk_rate(const char *id);
|
||||
-
|
||||
void ath79_ddr_ctrl_init(void);
|
||||
|
||||
#endif /* __ATH79_COMMON_H */
|
|
@ -1,19 +1,21 @@
|
|||
From deda44895d289a72a235359fc21f8a62ea44dc1c Mon Sep 17 00:00:00 2001
|
||||
From 3fc8585cf76022dba7496627074d42af88c30718 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Tue, 6 Mar 2018 09:33:26 +0100
|
||||
Subject: [PATCH 26/27] MIPS: ath79: sanitize Kconfig symbols
|
||||
Date: Sat, 23 Jun 2018 15:16:55 +0200
|
||||
Subject: [PATCH 32/33] MIPS: ath79: sanitize symbols
|
||||
|
||||
We no longer need to select which SoCs are supported as the whole arch
|
||||
code is always built. So lets drop all the SoC symbols
|
||||
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/Kconfig | 2 ++
|
||||
arch/mips/ath79/Kconfig | 48 +++++-------------------------------------------
|
||||
arch/mips/ath79/Makefile | 10 ----------
|
||||
arch/mips/pci/Makefile | 2 +-
|
||||
4 files changed, 8 insertions(+), 54 deletions(-)
|
||||
arch/mips/Kconfig | 2 ++
|
||||
arch/mips/ath79/Kconfig | 44 +++++---------------------------------------
|
||||
arch/mips/pci/Makefile | 2 +-
|
||||
3 files changed, 8 insertions(+), 40 deletions(-)
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -203,6 +203,8 @@ config ATH79
|
||||
@@ -202,6 +202,8 @@ config ATH79
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_SUPPORTS_MIPS16
|
||||
select SYS_SUPPORTS_ZBOOT_UART_PROM
|
||||
|
@ -24,7 +26,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
Support for the Atheros AR71XX/AR724X/AR913X SoCs.
|
||||
--- a/arch/mips/ath79/Kconfig
|
||||
+++ b/arch/mips/ath79/Kconfig
|
||||
@@ -1,52 +1,14 @@
|
||||
@@ -1,48 +1,14 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
if ATH79
|
||||
|
||||
|
@ -48,10 +50,6 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- select PCI_AR724X if PCI
|
||||
- def_bool n
|
||||
-
|
||||
-config SOC_QCA953X
|
||||
- select USB_ARCH_HAS_EHCI
|
||||
- def_bool n
|
||||
-
|
||||
-config SOC_QCA955X
|
||||
- select HW_HAS_PCI
|
||||
- select PCI_AR724X if PCI
|
||||
|
@ -76,28 +74,12 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
|||
- def_bool n
|
||||
-
|
||||
-config ATH79_DEV_WMAC
|
||||
- depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA953X || SOC_QCA955X || SOC_QCA956X)
|
||||
- depends on (SOC_AR913X || SOC_AR933X || SOC_AR934X || SOC_QCA955X)
|
||||
+ bool "PCI support for AR724x type SoCs"
|
||||
+ depends on PCI
|
||||
def_bool n
|
||||
|
||||
endif
|
||||
--- a/arch/mips/ath79/Makefile
|
||||
+++ b/arch/mips/ath79/Makefile
|
||||
@@ -11,13 +11,3 @@
|
||||
obj-y := prom.o setup.o common.o clock.o
|
||||
|
||||
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
|
||||
-
|
||||
-#
|
||||
-# Devices
|
||||
-#
|
||||
-obj-y += dev-common.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
|
||||
-obj-$(CONFIG_ATH79_DEV_USB) += dev-usb.o
|
||||
-obj-$(CONFIG_ATH79_DEV_WMAC) += dev-wmac.o
|
||||
--- a/arch/mips/pci/Makefile
|
||||
+++ b/arch/mips/pci/Makefile
|
||||
@@ -23,7 +23,7 @@ obj-$(CONFIG_BCM63XX) += pci-bcm63xx.o
|
|
@ -0,0 +1,73 @@
|
|||
From c4e197bbcecc7233aa9e553e7047fa50e4e1fe77 Mon Sep 17 00:00:00 2001
|
||||
From: John Crispin <john@phrozen.org>
|
||||
Date: Mon, 25 Jun 2018 15:52:34 +0200
|
||||
Subject: [PATCH 33/33] spi: ath79: drop pdata support
|
||||
|
||||
The target is being converted to pure OF. We can therefore drop all of the
|
||||
platform data code from the driver.
|
||||
|
||||
Cc: linux-spi@vger.kernel.org
|
||||
Acked-by: Mark Brown <broonie@kernel.org>
|
||||
Signed-off-by: John Crispin <john@phrozen.org>
|
||||
---
|
||||
arch/mips/include/asm/mach-ath79/ath79_spi_platform.h | 19 -------------------
|
||||
drivers/spi/spi-ath79.c | 8 --------
|
||||
2 files changed, 27 deletions(-)
|
||||
delete mode 100644 arch/mips/include/asm/mach-ath79/ath79_spi_platform.h
|
||||
|
||||
--- a/arch/mips/include/asm/mach-ath79/ath79_spi_platform.h
|
||||
+++ /dev/null
|
||||
@@ -1,19 +0,0 @@
|
||||
-/*
|
||||
- * Platform data definition for Atheros AR71XX/AR724X/AR913X SPI controller
|
||||
- *
|
||||
- * Copyright (C) 2008-2010 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.
|
||||
- */
|
||||
-
|
||||
-#ifndef _ATH79_SPI_PLATFORM_H
|
||||
-#define _ATH79_SPI_PLATFORM_H
|
||||
-
|
||||
-struct ath79_spi_platform_data {
|
||||
- unsigned bus_num;
|
||||
- unsigned num_chipselect;
|
||||
-};
|
||||
-
|
||||
-#endif /* _ATH79_SPI_PLATFORM_H */
|
||||
--- a/drivers/spi/spi-ath79.c
|
||||
+++ b/drivers/spi/spi-ath79.c
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <asm/mach-ath79/ar71xx_regs.h>
|
||||
-#include <asm/mach-ath79/ath79_spi_platform.h>
|
||||
|
||||
#define DRV_NAME "ath79-spi"
|
||||
|
||||
@@ -208,7 +207,6 @@ static int ath79_spi_probe(struct platfo
|
||||
{
|
||||
struct spi_master *master;
|
||||
struct ath79_spi *sp;
|
||||
- struct ath79_spi_platform_data *pdata;
|
||||
struct resource *r;
|
||||
unsigned long rate;
|
||||
int ret;
|
||||
@@ -223,15 +221,9 @@ static int ath79_spi_probe(struct platfo
|
||||
master->dev.of_node = pdev->dev.of_node;
|
||||
platform_set_drvdata(pdev, sp);
|
||||
|
||||
- pdata = dev_get_platdata(&pdev->dev);
|
||||
-
|
||||
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
|
||||
master->setup = ath79_spi_setup;
|
||||
master->cleanup = ath79_spi_cleanup;
|
||||
- if (pdata) {
|
||||
- master->bus_num = pdata->bus_num;
|
||||
- master->num_chipselect = pdata->num_chipselect;
|
||||
- }
|
||||
|
||||
sp->bitbang.master = master;
|
||||
sp->bitbang.chipselect = ath79_spi_chipselect;
|
|
@ -1,17 +0,0 @@
|
|||
--- a/arch/mips/ath79/clock.c
|
||||
+++ b/arch/mips/ath79/clock.c
|
||||
@@ -525,6 +525,14 @@ static void __init qca956x_clocks_init(v
|
||||
u32 cpu_pll, ddr_pll;
|
||||
u32 bootstrap;
|
||||
|
||||
+ /* QCA956x timer init workaround has to be applied right before setting
|
||||
+ * up the clock. Else, there will be no jiffies */
|
||||
+ u32 misc;
|
||||
+
|
||||
+ misc = ath79_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE);
|
||||
+ misc |= MISC_INT_MIPS_SI_TIMERINT_MASK;
|
||||
+ ath79_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, misc);
|
||||
+
|
||||
bootstrap = ath79_reset_rr(QCA956X_RESET_REG_BOOTSTRAP);
|
||||
if (bootstrap & QCA956X_BOOTSTRAP_REF_CLK_40)
|
||||
ref_rate = 40 * 1000 * 1000;
|
23
target/linux/ath79/patches-4.14/0037-missing-registers.patch
Normal file
23
target/linux/ath79/patches-4.14/0037-missing-registers.patch
Normal file
|
@ -0,0 +1,23 @@
|
|||
commit f3ffac90bc7266b7d917616f3233f58e8c08a196
|
||||
Author: Christian Lamparter <chunkeey@gmail.com>
|
||||
Date: Fri Aug 10 23:24:47 2018 +0200
|
||||
|
||||
ath79: gmac: add parsers for rxd(v)- and tx(d|en)-delay for AR9344
|
||||
|
||||
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
||||
|
||||
Index: linux-4.14.65/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
===================================================================
|
||||
--- linux-4.14.65.orig/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
+++ linux-4.14.65/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
|
||||
@@ -1229,6 +1229,10 @@
|
||||
#define AR934X_ETH_CFG_RDV_DELAY BIT(16)
|
||||
#define AR934X_ETH_CFG_RDV_DELAY_MASK 0x3
|
||||
#define AR934X_ETH_CFG_RDV_DELAY_SHIFT 16
|
||||
+#define AR934X_ETH_CFG_TXD_DELAY_MASK 0x3
|
||||
+#define AR934X_ETH_CFG_TXD_DELAY_SHIFT 18
|
||||
+#define AR934X_ETH_CFG_TXE_DELAY_MASK 0x3
|
||||
+#define AR934X_ETH_CFG_TXE_DELAY_SHIFT 20
|
||||
|
||||
/*
|
||||
* QCA953X GMAC Interface
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/spi/spi-ath79.c
|
||||
+++ b/drivers/spi/spi-ath79.c
|
||||
@@ -102,9 +102,6 @@ static void ath79_spi_enable(struct ath7
|
||||
@@ -101,9 +101,6 @@ static void ath79_spi_enable(struct ath7
|
||||
/* save CTRL register */
|
||||
sp->reg_ctrl = ath79_spi_rr(sp, AR71XX_SPI_REG_CTRL);
|
||||
sp->ioc_base = ath79_spi_rr(sp, AR71XX_SPI_REG_IOC);
|
||||
|
@ -10,7 +10,7 @@
|
|||
}
|
||||
|
||||
static void ath79_spi_disable(struct ath79_spi *sp)
|
||||
@@ -204,6 +201,38 @@ static u32 ath79_spi_txrx_mode0(struct s
|
||||
@@ -203,6 +200,38 @@ static u32 ath79_spi_txrx_mode0(struct s
|
||||
return ath79_spi_rr(sp, AR71XX_SPI_REG_RDS);
|
||||
}
|
||||
|
||||
|
@ -49,12 +49,12 @@
|
|||
static int ath79_spi_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct spi_master *master;
|
||||
@@ -232,6 +261,8 @@ static int ath79_spi_probe(struct platfo
|
||||
master->bus_num = pdata->bus_num;
|
||||
master->num_chipselect = pdata->num_chipselect;
|
||||
@@ -237,6 +266,8 @@ static int ath79_spi_probe(struct platfo
|
||||
ret = PTR_ERR(sp->base);
|
||||
goto err_put_master;
|
||||
}
|
||||
+ master->spi_flash_read = ath79_spi_read_flash_data;
|
||||
+ master->flash_read_supported = ath79_spi_flash_read_supported;
|
||||
|
||||
sp->bitbang.master = master;
|
||||
sp->bitbang.chipselect = ath79_spi_chipselect;
|
||||
sp->clk = devm_clk_get(&pdev->dev, "ahb");
|
||||
if (IS_ERR(sp->clk)) {
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
static inline u32 ar71xx_pci_get_ble(int where, int size, int local)
|
||||
{
|
||||
u32 t;
|
||||
@@ -384,6 +423,9 @@ static int ar71xx_pci_probe(struct platf
|
||||
@@ -385,6 +424,9 @@ static int ar71xx_pci_probe(struct platf
|
||||
|
||||
register_pci_controller(&apc->pci_ctrl);
|
||||
|
||||
|
|
Loading…
Reference in a new issue