|
@@ -39,6 +39,21 @@
|
|
|
#include <asm/tlbflush.h>
|
|
#include <asm/tlbflush.h>
|
|
|
#include <asm/rheap.h>
|
|
#include <asm/rheap.h>
|
|
|
|
|
|
|
|
|
|
+#define immr_map(member) \
|
|
|
|
|
+({ \
|
|
|
|
|
+ u32 offset = offsetof(immap_t, member); \
|
|
|
|
|
+ void *addr = ioremap (IMAP_ADDR + offset, \
|
|
|
|
|
+ sizeof( ((immap_t*)0)->member)); \
|
|
|
|
|
+ addr; \
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+#define immr_map_size(member, size) \
|
|
|
|
|
+({ \
|
|
|
|
|
+ u32 offset = offsetof(immap_t, member); \
|
|
|
|
|
+ void *addr = ioremap (IMAP_ADDR + offset, size); \
|
|
|
|
|
+ addr; \
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
static void m8xx_cpm_dpinit(void);
|
|
static void m8xx_cpm_dpinit(void);
|
|
|
static uint host_buffer; /* One page of host buffer */
|
|
static uint host_buffer; /* One page of host buffer */
|
|
|
static uint host_end; /* end + 1 */
|
|
static uint host_end; /* end + 1 */
|
|
@@ -364,11 +379,16 @@ static rh_block_t cpm_boot_dpmem_rh_block[16];
|
|
|
static rh_info_t cpm_dpmem_info;
|
|
static rh_info_t cpm_dpmem_info;
|
|
|
|
|
|
|
|
#define CPM_DPMEM_ALIGNMENT 8
|
|
#define CPM_DPMEM_ALIGNMENT 8
|
|
|
|
|
+static u8* dpram_vbase;
|
|
|
|
|
+static uint dpram_pbase;
|
|
|
|
|
|
|
|
void m8xx_cpm_dpinit(void)
|
|
void m8xx_cpm_dpinit(void)
|
|
|
{
|
|
{
|
|
|
spin_lock_init(&cpm_dpmem_lock);
|
|
spin_lock_init(&cpm_dpmem_lock);
|
|
|
|
|
|
|
|
|
|
+ dpram_vbase = immr_map_size(im_cpm.cp_dpmem, CPM_DATAONLY_BASE + CPM_DATAONLY_SIZE);
|
|
|
|
|
+ dpram_pbase = (uint)&((immap_t *)IMAP_ADDR)->im_cpm.cp_dpmem;
|
|
|
|
|
+
|
|
|
/* Initialize the info header */
|
|
/* Initialize the info header */
|
|
|
rh_init(&cpm_dpmem_info, CPM_DPMEM_ALIGNMENT,
|
|
rh_init(&cpm_dpmem_info, CPM_DPMEM_ALIGNMENT,
|
|
|
sizeof(cpm_boot_dpmem_rh_block) /
|
|
sizeof(cpm_boot_dpmem_rh_block) /
|
|
@@ -442,3 +462,9 @@ void *cpm_dpram_addr(uint offset)
|
|
|
return ((immap_t *)IMAP_ADDR)->im_cpm.cp_dpmem + offset;
|
|
return ((immap_t *)IMAP_ADDR)->im_cpm.cp_dpmem + offset;
|
|
|
}
|
|
}
|
|
|
EXPORT_SYMBOL(cpm_dpram_addr);
|
|
EXPORT_SYMBOL(cpm_dpram_addr);
|
|
|
|
|
+
|
|
|
|
|
+uint cpm_dpram_phys(u8* addr)
|
|
|
|
|
+{
|
|
|
|
|
+ return (dpram_pbase + (uint)(addr - dpram_vbase));
|
|
|
|
|
+}
|
|
|
|
|
+EXPORT_SYMBOL(cpm_dpram_phys);
|