From: Raghu Gandham <raghu@mips.com>
To: linux-mips@linux-mips.org
Cc: chris@mips.com
Subject: [PATCH 12/15] Added coherentio command line option for DMA_NONCOHERENT kernel
Date: Wed, 01 Jul 2009 19:42:45 -0700 [thread overview]
Message-ID: <20090702024244.23268.41013.stgit@linux-raghu> (raw)
In-Reply-To: <20090702023938.23268.65453.stgit@linux-raghu>
From: Chris Dearman <chris@mips.com>
Signed-off-by: Chris Dearman (chris@mips.com)
---
arch/mips/mti-malta/malta-setup.c | 100 +++++++++++++++++++++++++++++++++++++
1 files changed, 100 insertions(+), 0 deletions(-)
diff --git a/arch/mips/mti-malta/malta-setup.c b/arch/mips/mti-malta/malta-setup.c
index 69f5f9c..3f52c31 100644
--- a/arch/mips/mti-malta/malta-setup.c
+++ b/arch/mips/mti-malta/malta-setup.c
@@ -32,6 +32,7 @@
#include <asm/mips-boards/maltaint.h>
#include <asm/dma.h>
#include <asm/traps.h>
+#include <asm/gcmpregs.h>
#ifdef CONFIG_VT
#include <linux/console.h>
#endif
@@ -105,6 +106,103 @@ static void __init fd_activate(void)
}
#endif
+int coherentio = -1;
+static int __init setcoherentio(char *str)
+{
+ if (coherentio < 0)
+ pr_info("Command line checking done before"
+ " plat_setup_iocoherency!!\n");
+ if (coherentio == 0)
+ pr_info("Command line enabling coherentio"
+ " (this will break...)!!\n");
+
+ coherentio = 1;
+ pr_info("Hardware DMA cache coherency (command line)\n");
+ return 1;
+}
+__setup("coherentio", setcoherentio);
+
+static int __init setnocoherentio(char *str)
+{
+ if (coherentio < 0)
+ pr_info("Command line checking done before"
+ " plat_setup_iocoherency!!\n");
+ if (coherentio == 1)
+ pr_info("Command line disabling coherentio\n");
+
+ coherentio = 0;
+ pr_info("Software DMA cache coherency (command line)\n");
+ return 1;
+}
+__setup("nocoherentio", setnocoherentio);
+
+static int __init
+plat_enable_iocoherency(void)
+{
+ int supported = 0;
+ if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO) {
+ if (BONITO_PCICACHECTRL & BONITO_PCICACHECTRL_CPUCOH_PRES) {
+ BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_CPUCOH_EN;
+ pr_info("Enabled Bonito CPU coherency\n");
+ supported = 1;
+ }
+ if (strstr(prom_getcmdline(), "iobcuncached")) {
+ BONITO_PCICACHECTRL &= ~BONITO_PCICACHECTRL_IOBCCOH_EN;
+ BONITO_PCIMEMBASECFG = BONITO_PCIMEMBASECFG &
+ ~(BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
+ BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
+ pr_info("Disabled Bonito IOBC coherency\n");
+ } else {
+ BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_IOBCCOH_EN;
+ BONITO_PCIMEMBASECFG |=
+ (BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
+ BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
+ pr_info("Enabled Bonito IOBC coherency\n");
+ }
+ } else if (gcmp_niocu() != 0) {
+ /* Nothing special needs to be done to enable coherency */
+ pr_info("CMP IOCU detected\n");
+ if ((*(unsigned int *)0xbf403000 & 0x81) != 0x81) {
+ pr_crit("IOCU OPERATION DISABLED BY SWITCH"
+ " - DEFAULTING TO SW IO COHERENCY\n");
+ return 0;
+ }
+ supported = 1;
+ }
+ return supported;
+}
+
+static void __init
+plat_setup_iocoherency(void)
+{
+#ifdef CONFIG_DMA_NONCOHERENT
+ /*
+ * Kernel has been configured with software coherency
+ * but we might choose to turn it off
+ */
+ if (plat_enable_iocoherency()) {
+ if (coherentio == 0)
+ pr_info("Hardware DMA cache coherency supported"
+ " but disabled from command line\n");
+ else {
+ coherentio = 1;
+ printk(KERN_INFO "Hardware DMA cache coherency\n");
+ }
+ } else {
+ if (coherentio == 1)
+ pr_info("Hardware DMA cache coherency not supported"
+ " but enabled from command line\n");
+ else {
+ coherentio = 0;
+ pr_info("Software DMA cache coherency\n");
+ }
+ }
+#else
+ if (!plat_enable_iocoherency())
+ panic("Hardware DMA cache coherency not supported");
+#endif
+}
+
#ifdef CONFIG_BLK_DEV_IDE
static void __init pci_clock_check(void)
{
@@ -207,6 +305,8 @@ void __init plat_mem_setup(void)
if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO)
bonito_quirks_setup();
+ plat_setup_iocoherency();
+
#ifdef CONFIG_BLK_DEV_IDE
pci_clock_check();
#endif
next prev parent reply other threads:[~2009-07-02 2:51 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-02 2:39 [PATCH 00/15] Port changes from linux-mti Raghu Gandham
2009-07-02 2:39 ` [PATCH 01/15] Due to some broken bitfiles, we can't trust IntCtl Raghu Gandham
2009-07-02 2:40 ` [PATCH 02/15] Fix absd emulation Raghu Gandham
2009-07-02 2:40 ` [PATCH 03/15] [MTI] Clean up SPRAM support a little Raghu Gandham
2009-07-02 2:40 ` [PATCH 04/15] Fix accesses to device registers on MIPS boards Raghu Gandham
2009-07-02 2:40 ` [PATCH 05/15] [MTI] MIPS secondary cache supports 64 byte line size Raghu Gandham
2009-07-02 2:41 ` [PATCH 06/15] [MTI] Enable PIIX4 PCI2.1 compliancy on Malta Raghu Gandham
2009-07-02 2:41 ` [PATCH 07/15] APRP Patch04: Propagate final value of max_low_pfn to max_pfn Raghu Gandham
2009-07-02 2:41 ` [PATCH 08/15] Fix compiler warning in vpe.c Raghu Gandham
2009-07-02 2:41 ` [PATCH 09/15] Add debug prints during CPU intialization Raghu Gandham
2009-07-02 2:42 ` [PATCH 10/15] Port of GIC related changes from MTI branch Raghu Gandham
2009-07-02 2:42 ` [PATCH 11/15] Add missing memory barriers for correct operation of amon_cpu_start Raghu Gandham
2009-07-02 2:42 ` Raghu Gandham [this message]
2009-07-02 2:43 ` [PATCH 13/15] Avoid accessing GCMP registers when they are not present Raghu Gandham
2009-07-02 2:43 ` [PATCH 14/15] Avoid queing multiple reschedule IPI's in SMTC Raghu Gandham
2009-07-02 2:43 ` [PATCH 15/15] Do not rely on the initial state of TC/VPE bindings when doing cross VPE writes Raghu Gandham
2009-07-02 4:02 ` Kevin D. Kissell
2009-07-02 21:46 ` Gandham, Raghu
2009-07-02 21:46 ` Gandham, Raghu
2009-07-02 22:08 ` Kevin D. Kissell
2009-10-12 16:17 ` Ralf Baechle
2009-10-12 20:20 ` [PATCH 15/15] Do not rely on the initial state of TC/VPEbindings " Gandham, Raghu
2009-10-12 20:20 ` Gandham, Raghu
2009-10-12 20:25 ` Ralf Baechle
2009-07-10 8:47 ` [PATCH 00/15] Port changes from linux-mti Gandham, Raghu
2009-07-10 8:47 ` Gandham, Raghu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090702024244.23268.41013.stgit@linux-raghu \
--to=raghu@mips.com \
--cc=chris@mips.com \
--cc=linux-mips@linux-mips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.