linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support
@ 2015-04-19 12:29 Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 1/5] MIPS: ath79: Enable ZBOOT support Alban Bedel
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Alban Bedel @ 2015-04-19 12:29 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, Alban Bedel, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel

First re-run of this serie of misc fix and preparation for OF support on ATH79.

 * Dropped the bad PCI patch
 * Moved the patch to use the common clk API out of the OF support serie
   into this one.

Alban Bedel (5):
  MIPS: ath79: Enable ZBOOT support
  MIPS: ath79: Add a missing new line in log message
  MIPS: ath79: Correctly name the defines for the PLL_FB register
  MIPS: ath79: Improve the DDR controller interface
  MIPS: ath79: Use the common clk API

 arch/mips/Kconfig                              |   2 +
 arch/mips/ath79/clock.c                        |  35 +-----
 arch/mips/ath79/common.c                       |  35 +++++-
 arch/mips/ath79/common.h                       |   1 +
 arch/mips/ath79/irq.c                          | 147 ++++++-------------------
 arch/mips/ath79/setup.c                        |   5 +-
 arch/mips/include/asm/mach-ath79/ar71xx_regs.h |  12 +-
 arch/mips/include/asm/mach-ath79/ath79.h       |   3 +-
 arch/mips/pci/pci-ar71xx.c                     |  10 +-
 9 files changed, 85 insertions(+), 165 deletions(-)

-- 
2.0.0


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/5] MIPS: ath79: Enable ZBOOT support
  2015-04-19 12:29 [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support Alban Bedel
@ 2015-04-19 12:30 ` Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 2/5] MIPS: ath79: Add a missing new line in log message Alban Bedel
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Alban Bedel @ 2015-04-19 12:30 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, Alban Bedel, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel

ZBOOT is working fine, so allow using it.

Signed-off-by: Alban Bedel <albeu@free.fr>
---
 arch/mips/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index f501665..9075147 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -131,6 +131,7 @@ config ATH79
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_BIG_ENDIAN
 	select SYS_SUPPORTS_MIPS16
+	select SYS_SUPPORTS_ZBOOT
 	help
 	  Support for the Atheros AR71XX/AR724X/AR913X SoCs.
 
-- 
2.0.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 2/5] MIPS: ath79: Add a missing new line in log message
  2015-04-19 12:29 [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 1/5] MIPS: ath79: Enable ZBOOT support Alban Bedel
@ 2015-04-19 12:30 ` Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 3/5] MIPS: ath79: Correctly name the defines for the PLL_FB register Alban Bedel
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Alban Bedel @ 2015-04-19 12:30 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, Alban Bedel, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel

The memory setup log is missing a new line.

Signed-off-by: Alban Bedel <albeu@free.fr>
---
 arch/mips/ath79/setup.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
index a73c93c..7fc8397 100644
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
@@ -225,7 +225,7 @@ void __init plat_time_init(void)
 	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",
+	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,
-- 
2.0.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 3/5] MIPS: ath79: Correctly name the defines for the PLL_FB register
  2015-04-19 12:29 [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 1/5] MIPS: ath79: Enable ZBOOT support Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 2/5] MIPS: ath79: Add a missing new line in log message Alban Bedel
@ 2015-04-19 12:30 ` Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 4/5] MIPS: ath79: Improve the DDR controller interface Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 5/5] MIPS: ath79: Use the common clk API Alban Bedel
  4 siblings, 0 replies; 9+ messages in thread
From: Alban Bedel @ 2015-04-19 12:30 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, Alban Bedel, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel

This register is named PLL_FB and is not a divider but a multiplier.
To make things less confusing rename the ARxxxx_PLL_DIV_SHIFT and
ARxxxx_PLL_DIV_MASK macros to ARxxxx_PLL_FB_SHIFT and
ARxxxx_PLL_FB_MASK.

Signed-off-by: Alban Bedel <albeu@free.fr>
---
 arch/mips/ath79/clock.c                        |  6 +++---
 arch/mips/include/asm/mach-ath79/ar71xx_regs.h | 12 ++++++------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/mips/ath79/clock.c b/arch/mips/ath79/clock.c
index 26479f4..226ddf0 100644
--- a/arch/mips/ath79/clock.c
+++ b/arch/mips/ath79/clock.c
@@ -62,7 +62,7 @@ static void __init ar71xx_clocks_init(void)
 
 	pll = ath79_pll_rr(AR71XX_PLL_REG_CPU_CONFIG);
 
-	div = ((pll >> AR71XX_PLL_DIV_SHIFT) & AR71XX_PLL_DIV_MASK) + 1;
+	div = ((pll >> AR71XX_PLL_FB_SHIFT) & AR71XX_PLL_FB_MASK) + 1;
 	freq = div * ref_rate;
 
 	div = ((pll >> AR71XX_CPU_DIV_SHIFT) & AR71XX_CPU_DIV_MASK) + 1;
@@ -96,7 +96,7 @@ static void __init ar724x_clocks_init(void)
 	ref_rate = AR724X_BASE_FREQ;
 	pll = ath79_pll_rr(AR724X_PLL_REG_CPU_CONFIG);
 
-	div = ((pll >> AR724X_PLL_DIV_SHIFT) & AR724X_PLL_DIV_MASK);
+	div = ((pll >> AR724X_PLL_FB_SHIFT) & AR724X_PLL_FB_MASK);
 	freq = div * ref_rate;
 
 	div = ((pll >> AR724X_PLL_REF_DIV_SHIFT) & AR724X_PLL_REF_DIV_MASK);
@@ -132,7 +132,7 @@ static void __init ar913x_clocks_init(void)
 	ref_rate = AR913X_BASE_FREQ;
 	pll = ath79_pll_rr(AR913X_PLL_REG_CPU_CONFIG);
 
-	div = ((pll >> AR913X_PLL_DIV_SHIFT) & AR913X_PLL_DIV_MASK);
+	div = ((pll >> AR913X_PLL_FB_SHIFT) & AR913X_PLL_FB_MASK);
 	freq = div * ref_rate;
 
 	cpu_rate = freq;
diff --git a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
index cd41e93..aa3800c 100644
--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
+++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
@@ -157,8 +157,8 @@
 #define AR71XX_PLL_REG_ETH0_INT_CLOCK	0x10
 #define AR71XX_PLL_REG_ETH1_INT_CLOCK	0x14
 
-#define AR71XX_PLL_DIV_SHIFT		3
-#define AR71XX_PLL_DIV_MASK		0x1f
+#define AR71XX_PLL_FB_SHIFT		3
+#define AR71XX_PLL_FB_MASK		0x1f
 #define AR71XX_CPU_DIV_SHIFT		16
 #define AR71XX_CPU_DIV_MASK		0x3
 #define AR71XX_DDR_DIV_SHIFT		18
@@ -169,8 +169,8 @@
 #define AR724X_PLL_REG_CPU_CONFIG	0x00
 #define AR724X_PLL_REG_PCIE_CONFIG	0x18
 
-#define AR724X_PLL_DIV_SHIFT		0
-#define AR724X_PLL_DIV_MASK		0x3ff
+#define AR724X_PLL_FB_SHIFT		0
+#define AR724X_PLL_FB_MASK		0x3ff
 #define AR724X_PLL_REF_DIV_SHIFT	10
 #define AR724X_PLL_REF_DIV_MASK		0xf
 #define AR724X_AHB_DIV_SHIFT		19
@@ -183,8 +183,8 @@
 #define AR913X_PLL_REG_ETH0_INT_CLOCK	0x14
 #define AR913X_PLL_REG_ETH1_INT_CLOCK	0x18
 
-#define AR913X_PLL_DIV_SHIFT		0
-#define AR913X_PLL_DIV_MASK		0x3ff
+#define AR913X_PLL_FB_SHIFT		0
+#define AR913X_PLL_FB_MASK		0x3ff
 #define AR913X_DDR_DIV_SHIFT		22
 #define AR913X_DDR_DIV_MASK		0x3
 #define AR913X_AHB_DIV_SHIFT		19
-- 
2.0.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 4/5] MIPS: ath79: Improve the DDR controller interface
  2015-04-19 12:29 [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support Alban Bedel
                   ` (2 preceding siblings ...)
  2015-04-19 12:30 ` [PATCH v2 3/5] MIPS: ath79: Correctly name the defines for the PLL_FB register Alban Bedel
@ 2015-04-19 12:30 ` Alban Bedel
  2015-04-19 12:30 ` [PATCH v2 5/5] MIPS: ath79: Use the common clk API Alban Bedel
  4 siblings, 0 replies; 9+ messages in thread
From: Alban Bedel @ 2015-04-19 12:30 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, Alban Bedel, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel

The DDR controller need to be used by the IRQ controller to flush
the write buffer of some devices before running the IRQ handler.
It is also used by the PCI controller to setup the PCI memory windows.

The current interface used to access the DDR controller doesn't
provides any useful abstraction and simply rely on a shared global
pointer.

Replace this by a simple API to setup the PCI memory windows and use
the write buffer flush independently of the SoC type. That remove the
need for the shared global pointer, simplify the IRQ handler code.

Signed-off-by: Alban Bedel <albeu@free.fr>
---
v2: * Updated ath79_ddr_set_pci_windows() after dropping the buggy PCI
      "fix" patch.
---
 arch/mips/ath79/common.c                 |  35 +++++++-
 arch/mips/ath79/common.h                 |   1 +
 arch/mips/ath79/irq.c                    | 147 +++++++------------------------
 arch/mips/ath79/setup.c                  |   3 +-
 arch/mips/include/asm/mach-ath79/ath79.h |   3 +-
 arch/mips/pci/pci-ar71xx.c               |  10 +--
 6 files changed, 71 insertions(+), 128 deletions(-)

diff --git a/arch/mips/ath79/common.c b/arch/mips/ath79/common.c
index eb3966c..3cedd1f 100644
--- a/arch/mips/ath79/common.c
+++ b/arch/mips/ath79/common.c
@@ -38,11 +38,27 @@ unsigned int ath79_soc_rev;
 void __iomem *ath79_pll_base;
 void __iomem *ath79_reset_base;
 EXPORT_SYMBOL_GPL(ath79_reset_base);
-void __iomem *ath79_ddr_base;
+static void __iomem *ath79_ddr_base;
+static void __iomem *ath79_ddr_wb_flush_base;
+static void __iomem *ath79_ddr_pci_win_base;
+
+void ath79_ddr_ctrl_init(void)
+{
+	ath79_ddr_base = ioremap_nocache(AR71XX_DDR_CTRL_BASE,
+					 AR71XX_DDR_CTRL_SIZE);
+	if (soc_is_ar71xx() || soc_is_ar934x()) {
+		ath79_ddr_wb_flush_base = ath79_ddr_base + 0x9c;
+		ath79_ddr_pci_win_base = ath79_ddr_base + 0x7c;
+	} else {
+		ath79_ddr_wb_flush_base = ath79_ddr_base + 0x7c;
+		ath79_ddr_pci_win_base = 0;
+	}
+}
+EXPORT_SYMBOL_GPL(ath79_ddr_ctrl_init);
 
 void ath79_ddr_wb_flush(u32 reg)
 {
-	void __iomem *flush_reg = ath79_ddr_base + reg;
+	void __iomem *flush_reg = ath79_ddr_wb_flush_base + reg;
 
 	/* Flush the DDR write buffer. */
 	__raw_writel(0x1, flush_reg);
@@ -56,6 +72,21 @@ void ath79_ddr_wb_flush(u32 reg)
 }
 EXPORT_SYMBOL_GPL(ath79_ddr_wb_flush);
 
+void ath79_ddr_set_pci_windows(void)
+{
+	BUG_ON(!ath79_ddr_pci_win_base);
+
+	__raw_writel(AR71XX_PCI_WIN0_OFFS, ath79_ddr_pci_win_base + 0);
+	__raw_writel(AR71XX_PCI_WIN1_OFFS, ath79_ddr_pci_win_base + 1);
+	__raw_writel(AR71XX_PCI_WIN2_OFFS, ath79_ddr_pci_win_base + 2);
+	__raw_writel(AR71XX_PCI_WIN3_OFFS, ath79_ddr_pci_win_base + 3);
+	__raw_writel(AR71XX_PCI_WIN4_OFFS, ath79_ddr_pci_win_base + 4);
+	__raw_writel(AR71XX_PCI_WIN5_OFFS, ath79_ddr_pci_win_base + 5);
+	__raw_writel(AR71XX_PCI_WIN6_OFFS, ath79_ddr_pci_win_base + 6);
+	__raw_writel(AR71XX_PCI_WIN7_OFFS, ath79_ddr_pci_win_base + 7);
+}
+EXPORT_SYMBOL_GPL(ath79_ddr_set_pci_windows);
+
 void ath79_device_reset_set(u32 mask)
 {
 	unsigned long flags;
diff --git a/arch/mips/ath79/common.h b/arch/mips/ath79/common.h
index c39de61..e5ea712 100644
--- a/arch/mips/ath79/common.h
+++ b/arch/mips/ath79/common.h
@@ -22,6 +22,7 @@
 void ath79_clocks_init(void);
 unsigned long ath79_get_sys_clk_rate(const char *id);
 
+void ath79_ddr_ctrl_init(void);
 void ath79_ddr_wb_flush(unsigned int reg);
 
 void ath79_gpio_function_enable(u32 mask);
diff --git a/arch/mips/ath79/irq.c b/arch/mips/ath79/irq.c
index 6adae36..2c3991a 100644
--- a/arch/mips/ath79/irq.c
+++ b/arch/mips/ath79/irq.c
@@ -24,9 +24,6 @@
 #include <asm/mach-ath79/ar71xx_regs.h>
 #include "common.h"
 
-static void (*ath79_ip2_handler)(void);
-static void (*ath79_ip3_handler)(void);
-
 static void ath79_misc_irq_handler(unsigned int irq, struct irq_desc *desc)
 {
 	void __iomem *base = ath79_reset_base;
@@ -129,10 +126,10 @@ static void ar934x_ip2_irq_dispatch(unsigned int irq, struct irq_desc *desc)
 	status = ath79_reset_rr(AR934X_RESET_REG_PCIE_WMAC_INT_STATUS);
 
 	if (status & AR934X_PCIE_WMAC_INT_PCIE_ALL) {
-		ath79_ddr_wb_flush(AR934X_DDR_REG_FLUSH_PCIE);
+		ath79_ddr_wb_flush(3);
 		generic_handle_irq(ATH79_IP2_IRQ(0));
 	} else if (status & AR934X_PCIE_WMAC_INT_WMAC_ALL) {
-		ath79_ddr_wb_flush(AR934X_DDR_REG_FLUSH_WMAC);
+		ath79_ddr_wb_flush(4);
 		generic_handle_irq(ATH79_IP2_IRQ(1));
 	} else {
 		spurious_interrupt();
@@ -235,128 +232,50 @@ static void qca955x_irq_init(void)
 	irq_set_chained_handler(ATH79_CPU_IRQ(3), qca955x_ip3_irq_dispatch);
 }
 
-asmlinkage void plat_irq_dispatch(void)
-{
-	unsigned long pending;
-
-	pending = read_c0_status() & read_c0_cause() & ST0_IM;
-
-	if (pending & STATUSF_IP7)
-		do_IRQ(ATH79_CPU_IRQ(7));
-
-	else if (pending & STATUSF_IP2)
-		ath79_ip2_handler();
-
-	else if (pending & STATUSF_IP4)
-		do_IRQ(ATH79_CPU_IRQ(4));
-
-	else if (pending & STATUSF_IP5)
-		do_IRQ(ATH79_CPU_IRQ(5));
-
-	else if (pending & STATUSF_IP3)
-		ath79_ip3_handler();
-
-	else if (pending & STATUSF_IP6)
-		do_IRQ(ATH79_CPU_IRQ(6));
-
-	else
-		spurious_interrupt();
-}
-
 /*
  * The IP2/IP3 lines are tied to a PCI/WMAC/USB device. Drivers for
  * these devices typically allocate coherent DMA memory, however the
  * DMA controller may still have some unsynchronized data in the FIFO.
  * Issue a flush in the handlers to ensure that the driver sees
  * the update.
+ *
+ * This array map the interrupt lines to the DDR write buffer channels.
  */
 
-static void ath79_default_ip2_handler(void)
-{
-	do_IRQ(ATH79_CPU_IRQ(2));
-}
-
-static void ath79_default_ip3_handler(void)
-{
-	do_IRQ(ATH79_CPU_IRQ(3));
-}
-
-static void ar71xx_ip2_handler(void)
-{
-	ath79_ddr_wb_flush(AR71XX_DDR_REG_FLUSH_PCI);
-	do_IRQ(ATH79_CPU_IRQ(2));
-}
-
-static void ar724x_ip2_handler(void)
-{
-	ath79_ddr_wb_flush(AR724X_DDR_REG_FLUSH_PCIE);
-	do_IRQ(ATH79_CPU_IRQ(2));
-}
-
-static void ar913x_ip2_handler(void)
-{
-	ath79_ddr_wb_flush(AR913X_DDR_REG_FLUSH_WMAC);
-	do_IRQ(ATH79_CPU_IRQ(2));
-}
-
-static void ar933x_ip2_handler(void)
-{
-	ath79_ddr_wb_flush(AR933X_DDR_REG_FLUSH_WMAC);
-	do_IRQ(ATH79_CPU_IRQ(2));
-}
-
-static void ar71xx_ip3_handler(void)
-{
-	ath79_ddr_wb_flush(AR71XX_DDR_REG_FLUSH_USB);
-	do_IRQ(ATH79_CPU_IRQ(3));
-}
-
-static void ar724x_ip3_handler(void)
-{
-	ath79_ddr_wb_flush(AR724X_DDR_REG_FLUSH_USB);
-	do_IRQ(ATH79_CPU_IRQ(3));
-}
-
-static void ar913x_ip3_handler(void)
-{
-	ath79_ddr_wb_flush(AR913X_DDR_REG_FLUSH_USB);
-	do_IRQ(ATH79_CPU_IRQ(3));
-}
-
-static void ar933x_ip3_handler(void)
-{
-	ath79_ddr_wb_flush(AR933X_DDR_REG_FLUSH_USB);
-	do_IRQ(ATH79_CPU_IRQ(3));
-}
-
-static void ar934x_ip3_handler(void)
-{
-	ath79_ddr_wb_flush(AR934X_DDR_REG_FLUSH_USB);
-	do_IRQ(ATH79_CPU_IRQ(3));
+static unsigned irq_wb_chan[8] = {
+	-1, -1, -1, -1, -1, -1, -1, -1,
+};
+
+asmlinkage void plat_irq_dispatch(void)
+{
+	unsigned long pending;
+	int irq;
+
+	pending = read_c0_status() & read_c0_cause() & ST0_IM;
+
+	if (!pending) {
+		spurious_interrupt();
+		return;
+	}
+
+	pending >>= CAUSEB_IP;
+	while (pending) {
+		irq = fls(pending) - 1;
+		if (irq < ARRAY_SIZE(irq_wb_chan) && irq_wb_chan[irq] != -1)
+			ath79_ddr_wb_flush(irq_wb_chan[irq]);
+		do_IRQ(MIPS_CPU_IRQ_BASE + irq);
+		pending &= ~BIT(irq);
+	}
 }
 
 void __init arch_init_irq(void)
 {
-	if (soc_is_ar71xx()) {
-		ath79_ip2_handler = ar71xx_ip2_handler;
-		ath79_ip3_handler = ar71xx_ip3_handler;
-	} else if (soc_is_ar724x()) {
-		ath79_ip2_handler = ar724x_ip2_handler;
-		ath79_ip3_handler = ar724x_ip3_handler;
-	} else if (soc_is_ar913x()) {
-		ath79_ip2_handler = ar913x_ip2_handler;
-		ath79_ip3_handler = ar913x_ip3_handler;
-	} else if (soc_is_ar933x()) {
-		ath79_ip2_handler = ar933x_ip2_handler;
-		ath79_ip3_handler = ar933x_ip3_handler;
+	if (soc_is_ar71xx() || soc_is_ar724x() ||
+	    soc_is_ar913x() || soc_is_ar933x()) {
+		irq_wb_chan[2] = 3;
+		irq_wb_chan[3] = 2;
 	} else if (soc_is_ar934x()) {
-		ath79_ip2_handler = ath79_default_ip2_handler;
-		ath79_ip3_handler = ar934x_ip3_handler;
-	} else if (soc_is_qca955x()) {
-		ath79_ip2_handler = ath79_default_ip2_handler;
-		ath79_ip3_handler = ath79_default_ip3_handler;
-	} else {
-		BUG();
+		irq_wb_chan[3] = 2;
 	}
 
 	mips_cpu_irq_init();
diff --git a/arch/mips/ath79/setup.c b/arch/mips/ath79/setup.c
index 7fc8397..74f1af7 100644
--- a/arch/mips/ath79/setup.c
+++ b/arch/mips/ath79/setup.c
@@ -200,8 +200,7 @@ void __init plat_mem_setup(void)
 					   AR71XX_RESET_SIZE);
 	ath79_pll_base = ioremap_nocache(AR71XX_PLL_BASE,
 					 AR71XX_PLL_SIZE);
-	ath79_ddr_base = ioremap_nocache(AR71XX_DDR_CTRL_BASE,
-					 AR71XX_DDR_CTRL_SIZE);
+	ath79_ddr_ctrl_init();
 
 	ath79_detect_sys_type();
 	detect_memory_region(0, ATH79_MEM_SIZE_MIN, ATH79_MEM_SIZE_MAX);
diff --git a/arch/mips/include/asm/mach-ath79/ath79.h b/arch/mips/include/asm/mach-ath79/ath79.h
index 1557934..4eee221 100644
--- a/arch/mips/include/asm/mach-ath79/ath79.h
+++ b/arch/mips/include/asm/mach-ath79/ath79.h
@@ -115,7 +115,8 @@ static inline int soc_is_qca955x(void)
 	return soc_is_qca9556() || soc_is_qca9558();
 }
 
-extern void __iomem *ath79_ddr_base;
+void ath79_ddr_set_pci_windows(void);
+
 extern void __iomem *ath79_pll_base;
 extern void __iomem *ath79_reset_base;
 
diff --git a/arch/mips/pci/pci-ar71xx.c b/arch/mips/pci/pci-ar71xx.c
index 9e62ad3..72764d8 100644
--- a/arch/mips/pci/pci-ar71xx.c
+++ b/arch/mips/pci/pci-ar71xx.c
@@ -326,15 +326,7 @@ static void ar71xx_pci_reset(void)
 	ath79_device_reset_clear(AR71XX_RESET_PCI_BUS | AR71XX_RESET_PCI_CORE);
 	mdelay(100);
 
-	__raw_writel(AR71XX_PCI_WIN0_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN0);
-	__raw_writel(AR71XX_PCI_WIN1_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN1);
-	__raw_writel(AR71XX_PCI_WIN2_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN2);
-	__raw_writel(AR71XX_PCI_WIN3_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN3);
-	__raw_writel(AR71XX_PCI_WIN4_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN4);
-	__raw_writel(AR71XX_PCI_WIN5_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN5);
-	__raw_writel(AR71XX_PCI_WIN6_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN6);
-	__raw_writel(AR71XX_PCI_WIN7_OFFS, ddr_base + AR71XX_DDR_REG_PCI_WIN7);
-
+	ath79_ddr_set_pci_windows();
 	mdelay(100);
 }
 
-- 
2.0.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2 5/5] MIPS: ath79: Use the common clk API
  2015-04-19 12:29 [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support Alban Bedel
                   ` (3 preceding siblings ...)
  2015-04-19 12:30 ` [PATCH v2 4/5] MIPS: ath79: Improve the DDR controller interface Alban Bedel
@ 2015-04-19 12:30 ` Alban Bedel
  2015-08-09 12:21   ` Hauke Mehrtens
  4 siblings, 1 reply; 9+ messages in thread
From: Alban Bedel @ 2015-04-19 12:30 UTC (permalink / raw)
  To: linux-mips
  Cc: Ralf Baechle, Alban Bedel, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel

Make the code simpler and open the way for device tree clocks.

Signed-off-by: Alban Bedel <albeu@free.fr>
---
 arch/mips/Kconfig       |  1 +
 arch/mips/ath79/clock.c | 29 ++---------------------------
 2 files changed, 3 insertions(+), 27 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 9075147..874bbaf 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -123,6 +123,7 @@ config ATH79
 	select CSRC_R4K
 	select DMA_NONCOHERENT
 	select HAVE_CLK
+	select COMMON_CLK
 	select CLKDEV_LOOKUP
 	select IRQ_CPU
 	select MIPS_MACHINE
diff --git a/arch/mips/ath79/clock.c b/arch/mips/ath79/clock.c
index 226ddf0..1fcb691 100644
--- a/arch/mips/ath79/clock.c
+++ b/arch/mips/ath79/clock.c
@@ -17,6 +17,7 @@
 #include <linux/err.h>
 #include <linux/clk.h>
 #include <linux/clkdev.h>
+#include <linux/clk-provider.h>
 
 #include <asm/div64.h>
 
@@ -28,21 +29,15 @@
 #define AR724X_BASE_FREQ	5000000
 #define AR913X_BASE_FREQ	5000000
 
-struct clk {
-	unsigned long rate;
-};
-
 static void __init ath79_add_sys_clkdev(const char *id, unsigned long rate)
 {
 	struct clk *clk;
 	int err;
 
-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = clk_register_fixed_rate(NULL, id, NULL, CLK_IS_ROOT, rate);
 	if (!clk)
 		panic("failed to allocate %s clock structure", id);
 
-	clk->rate = rate;
-
 	err = clk_register_clkdev(clk, id, NULL);
 	if (err)
 		panic("unable to register %s clock device", id);
@@ -468,23 +463,3 @@ ath79_get_sys_clk_rate(const char *id)
 
 	return rate;
 }
-
-/*
- * Linux clock API
- */
-int clk_enable(struct clk *clk)
-{
-	return 0;
-}
-EXPORT_SYMBOL(clk_enable);
-
-void clk_disable(struct clk *clk)
-{
-}
-EXPORT_SYMBOL(clk_disable);
-
-unsigned long clk_get_rate(struct clk *clk)
-{
-	return clk->rate;
-}
-EXPORT_SYMBOL(clk_get_rate);
-- 
2.0.0


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 5/5] MIPS: ath79: Use the common clk API
  2015-04-19 12:30 ` [PATCH v2 5/5] MIPS: ath79: Use the common clk API Alban Bedel
@ 2015-08-09 12:21   ` Hauke Mehrtens
  2015-08-19 21:03     ` Ralf Baechle
  0 siblings, 1 reply; 9+ messages in thread
From: Hauke Mehrtens @ 2015-08-09 12:21 UTC (permalink / raw)
  To: Alban Bedel, linux-mips, Ralf Baechle
  Cc: Andrew Bresticker, Qais Yousef, Wolfram Sang, Sergey Ryazanov,
	Gabor Juhos, linux-kernel

On 04/19/2015 02:30 PM, Alban Bedel wrote:
> Make the code simpler and open the way for device tree clocks.
> 
> Signed-off-by: Alban Bedel <albeu@free.fr>
> ---
>  arch/mips/Kconfig       |  1 +
>  arch/mips/ath79/clock.c | 29 ++---------------------------
>  2 files changed, 3 insertions(+), 27 deletions(-)
> 

I think this should be send at least to stable 4.1, because it fixes a
linking problem we are seeing in OpenWrt.

ath79 does not export clk_set_rate() and clk_round_rate(), but some
drivers are using it and they are not using the inline dummy method,
because CONFIG_HAVE_CLK is set for ath79.

ERROR: "clk_set_rate" [drivers/usb/phy/phy-generic.ko] undefined!
ERROR: "clk_round_rate" [drivers/media/v4l2-core/videodev.ko] undefined!
ERROR: "clk_set_rate" [drivers/media/v4l2-core/videodev.ko] undefined!

Hauke

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 5/5] MIPS: ath79: Use the common clk API
  2015-08-09 12:21   ` Hauke Mehrtens
@ 2015-08-19 21:03     ` Ralf Baechle
  2015-08-19 21:10       ` Ralf Baechle
  0 siblings, 1 reply; 9+ messages in thread
From: Ralf Baechle @ 2015-08-19 21:03 UTC (permalink / raw)
  To: Hauke Mehrtens
  Cc: Alban Bedel, linux-mips, Andrew Bresticker, Qais Yousef,
	Wolfram Sang, Sergey Ryazanov, Gabor Juhos, linux-kernel, stable

On Sun, Aug 09, 2015 at 02:21:11PM +0200, Hauke Mehrtens wrote:
> Date:   Sun, 09 Aug 2015 14:21:11 +0200
> From: Hauke Mehrtens <hauke@hauke-m.de>
> To: Alban Bedel <albeu@free.fr>, linux-mips@linux-mips.org, Ralf Baechle
>  <ralf@linux-mips.org>
> CC: Andrew Bresticker <abrestic@chromium.org>, Qais Yousef
>  <qais.yousef@imgtec.com>, Wolfram Sang <wsa@the-dreams.de>, Sergey
>  Ryazanov <ryazanov.s.a@gmail.com>, Gabor Juhos <juhosg@openwrt.org>,
>  linux-kernel@vger.kernel.org
> Subject: Re: [PATCH v2 5/5] MIPS: ath79: Use the common clk API
> Content-Type: text/plain; charset=windows-1252
> 
> On 04/19/2015 02:30 PM, Alban Bedel wrote:
> > Make the code simpler and open the way for device tree clocks.
> > 
> > Signed-off-by: Alban Bedel <albeu@free.fr>
> > ---
> >  arch/mips/Kconfig       |  1 +
> >  arch/mips/ath79/clock.c | 29 ++---------------------------
> >  2 files changed, 3 insertions(+), 27 deletions(-)
> > 
> 
> I think this should be send at least to stable 4.1, because it fixes a
> linking problem we are seeing in OpenWrt.
> 
> ath79 does not export clk_set_rate() and clk_round_rate(), but some
> drivers are using it and they are not using the inline dummy method,
> because CONFIG_HAVE_CLK is set for ath79.
> 
> ERROR: "clk_set_rate" [drivers/usb/phy/phy-generic.ko] undefined!
> ERROR: "clk_round_rate" [drivers/media/v4l2-core/videodev.ko] undefined!
> ERROR: "clk_set_rate" [drivers/media/v4l2-core/videodev.ko] undefined!

Ok.  Will post the the patch in a separate email.

  Ralf

^ permalink raw reply	[flat|nested] 9+ messages in thread

* MIPS: ath79: Use the common clk API
  2015-08-19 21:03     ` Ralf Baechle
@ 2015-08-19 21:10       ` Ralf Baechle
  0 siblings, 0 replies; 9+ messages in thread
From: Ralf Baechle @ 2015-08-19 21:10 UTC (permalink / raw)
  To: stable
  Cc: Alban Bedel, Hauke Mehrtens, linux-mips, Andrew Bresticker,
	Qais Yousef, Wolfram Sang, Sergey Ryazanov, Gabor Juhos,
	linux-kernel, stable

From: Alban Bedel <albeu@free.fr>

Make the code simpler and open the way for device tree clocks.

[ralf@linux-mips.org: Resolved conflict with 2a552da6 (MIPS/IRQCHIP: Move
irq_chip from arch/mips to drivers/irqchip.)]

In 4.1 this also fixes the following build error:

ERROR: "clk_set_rate" [drivers/usb/phy/phy-generic.ko] undefined!
ERROR: "clk_round_rate" [drivers/media/v4l2-core/videodev.ko] undefined!
ERROR: "clk_set_rate" [drivers/media/v4l2-core/videodev.ko] undefined!

Signed-off-by: Alban Bedel <albeu@free.fr>
Cc: linux-mips@linux-mips.org
Cc: Andrew Bresticker <abrestic@chromium.org>
Cc: Qais Yousef <qais.yousef@imgtec.com>
Cc: Wolfram Sang <wsa@the-dreams.de>
Cc: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Cc: Gabor Juhos <juhosg@openwrt.org>
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9774/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
---
Upstream commit 411520af8ec9456886359b42628e583ac58e7e44

 arch/mips/Kconfig       |  1 +
 arch/mips/ath79/clock.c | 29 ++---------------------------
 2 files changed, 3 insertions(+), 27 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 1c053e2..11cdbac 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -123,6 +123,7 @@ config ATH79
 	select CSRC_R4K
 	select DMA_NONCOHERENT
 	select HAVE_CLK
+	select COMMON_CLK
 	select CLKDEV_LOOKUP
 	select IRQ_CPU
 	select MIPS_MACHINE
diff --git a/arch/mips/ath79/clock.c b/arch/mips/ath79/clock.c
index 26479f4..d59009d 100644
--- a/arch/mips/ath79/clock.c
+++ b/arch/mips/ath79/clock.c
@@ -17,6 +17,7 @@
 #include <linux/err.h>
 #include <linux/clk.h>
 #include <linux/clkdev.h>
+#include <linux/clk-provider.h>
 
 #include <asm/div64.h>
 
@@ -28,21 +29,15 @@
 #define AR724X_BASE_FREQ	5000000
 #define AR913X_BASE_FREQ	5000000
 
-struct clk {
-	unsigned long rate;
-};
-
 static void __init ath79_add_sys_clkdev(const char *id, unsigned long rate)
 {
 	struct clk *clk;
 	int err;
 
-	clk = kzalloc(sizeof(*clk), GFP_KERNEL);
+	clk = clk_register_fixed_rate(NULL, id, NULL, CLK_IS_ROOT, rate);
 	if (!clk)
 		panic("failed to allocate %s clock structure", id);
 
-	clk->rate = rate;
-
 	err = clk_register_clkdev(clk, id, NULL);
 	if (err)
 		panic("unable to register %s clock device", id);
@@ -468,23 +463,3 @@ ath79_get_sys_clk_rate(const char *id)
 
 	return rate;
 }
-
-/*
- * Linux clock API
- */
-int clk_enable(struct clk *clk)
-{
-	return 0;
-}
-EXPORT_SYMBOL(clk_enable);
-
-void clk_disable(struct clk *clk)
-{
-}
-EXPORT_SYMBOL(clk_disable);
-
-unsigned long clk_get_rate(struct clk *clk)
-{
-	return clk->rate;
-}
-EXPORT_SYMBOL(clk_get_rate);

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-08-19 21:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-04-19 12:29 [PATCH v2 0/5] MIPS: ath79: Various small fix to prepare OF support Alban Bedel
2015-04-19 12:30 ` [PATCH v2 1/5] MIPS: ath79: Enable ZBOOT support Alban Bedel
2015-04-19 12:30 ` [PATCH v2 2/5] MIPS: ath79: Add a missing new line in log message Alban Bedel
2015-04-19 12:30 ` [PATCH v2 3/5] MIPS: ath79: Correctly name the defines for the PLL_FB register Alban Bedel
2015-04-19 12:30 ` [PATCH v2 4/5] MIPS: ath79: Improve the DDR controller interface Alban Bedel
2015-04-19 12:30 ` [PATCH v2 5/5] MIPS: ath79: Use the common clk API Alban Bedel
2015-08-09 12:21   ` Hauke Mehrtens
2015-08-19 21:03     ` Ralf Baechle
2015-08-19 21:10       ` Ralf Baechle

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).