aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-powerpc/cpm2.h
diff options
context:
space:
mode:
authorScott Wood <scottwood@freescale.com>2007-09-28 15:06:16 -0400
committerKumar Gala <galak@kernel.crashing.org>2007-10-04 16:47:05 -0400
commit15f8c604a79c4840ed76eecf3af5d88b7c1dee9e (patch)
treed86815bc2daf835fee081ee7dac92cef8784f6a3 /include/asm-powerpc/cpm2.h
parent3c5df5c26ed17828760945d59653a2e22e3fb63f (diff)
[POWERPC] cpm: Describe multi-user ram in its own device node.
The way the current CPM binding describes available multi-user (a.k.a. dual-ported) RAM doesn't work well when there are multiple free regions, and it doesn't work at all if the region doesn't begin at the start of the muram area (as the hardware needs to be programmed with offsets into this area). The latter situation can happen with SMC UARTs on CPM2, as its parameter RAM is relocatable, u-boot puts it at zero, and the kernel doesn't support moving it. It is now described with a muram node, similar to QE. The current CPM binding is sufficiently recent (i.e. never appeared in an official release) that compatibility with existing device trees is not an issue. The code supporting the new binding is shared between cpm1 and cpm2, rather than remain separated. QE should be able to use this code as well, once minor fixes are made to its device trees. Signed-off-by: Scott Wood <scottwood@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'include/asm-powerpc/cpm2.h')
-rw-r--r--include/asm-powerpc/cpm2.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/include/asm-powerpc/cpm2.h b/include/asm-powerpc/cpm2.h
index d7b57ac55892..e698b1d09dcf 100644
--- a/include/asm-powerpc/cpm2.h
+++ b/include/asm-powerpc/cpm2.h
@@ -11,6 +11,7 @@
11#define __CPM2__ 11#define __CPM2__
12 12
13#include <asm/immap_cpm2.h> 13#include <asm/immap_cpm2.h>
14#include <asm/cpm.h>
14 15
15/* CPM Command register. 16/* CPM Command register.
16*/ 17*/
@@ -82,6 +83,7 @@
82#define mk_cr_cmd(PG, SBC, MCN, OP) \ 83#define mk_cr_cmd(PG, SBC, MCN, OP) \
83 ((PG << 26) | (SBC << 21) | (MCN << 6) | OP) 84 ((PG << 26) | (SBC << 21) | (MCN << 6) | OP)
84 85
86#ifndef CONFIG_PPC_CPM_NEW_BINDING
85/* Dual Port RAM addresses. The first 16K is available for almost 87/* Dual Port RAM addresses. The first 16K is available for almost
86 * any CPM use, so we put the BDs there. The first 128 bytes are 88 * any CPM use, so we put the BDs there. The first 128 bytes are
87 * used for SMC1 and SMC2 parameter RAM, so we start allocating 89 * used for SMC1 and SMC2 parameter RAM, so we start allocating
@@ -97,6 +99,7 @@
97#define CPM_DATAONLY_SIZE ((uint)(16 * 1024) - CPM_DATAONLY_BASE) 99#define CPM_DATAONLY_SIZE ((uint)(16 * 1024) - CPM_DATAONLY_BASE)
98#define CPM_FCC_SPECIAL_BASE ((uint)0x0000b000) 100#define CPM_FCC_SPECIAL_BASE ((uint)0x0000b000)
99#endif 101#endif
102#endif
100 103
101/* The number of pages of host memory we allocate for CPM. This is 104/* The number of pages of host memory we allocate for CPM. This is
102 * done early in kernel initialization to get physically contiguous 105 * done early in kernel initialization to get physically contiguous
@@ -109,11 +112,18 @@
109 */ 112 */
110extern cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor */ 113extern cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor */
111 114
115#ifdef CONFIG_PPC_CPM_NEW_BINDING
116#define cpm_dpalloc cpm_muram_alloc
117#define cpm_dpfree cpm_muram_free
118#define cpm_dpram_addr cpm_muram_addr
119#else
112extern unsigned long cpm_dpalloc(uint size, uint align); 120extern unsigned long cpm_dpalloc(uint size, uint align);
113extern int cpm_dpfree(unsigned long offset); 121extern int cpm_dpfree(unsigned long offset);
114extern unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align); 122extern unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align);
115extern void cpm_dpdump(void); 123extern void cpm_dpdump(void);
116extern void *cpm_dpram_addr(unsigned long offset); 124extern void *cpm_dpram_addr(unsigned long offset);
125#endif
126
117extern void cpm_setbrg(uint brg, uint rate); 127extern void cpm_setbrg(uint brg, uint rate);
118extern void cpm2_fastbrg(uint brg, uint rate, int div16); 128extern void cpm2_fastbrg(uint brg, uint rate, int div16);
119extern void cpm2_reset(void); 129extern void cpm2_reset(void);