/*
 * linux/arch/unicore32/include/mach/memory.h
 *
 * Code specific to PKUnity SoC and UniCore ISA
 *
 * Copyright (C) 2001-2010 GUAN Xue-tao
 *
 * 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 __MACH_PUV3_MEMORY_H__
#define __MACH_PUV3_MEMORY_H__

#include <mach/hardware.h>

/* Physical DRAM offset. */
#define PHYS_OFFSET	UL(0x00000000)
/* The base address of exception vectors. */
#define VECTORS_BASE	UL(0xffff0000)
/* The base address of kuser area. */
#define KUSER_BASE	UL(0x80000000)

#ifdef __ASSEMBLY__
/* The byte offset of the kernel image in RAM from the start of RAM. */
#define KERNEL_IMAGE_START	0x00408000
#endif

#if !defined(__ASSEMBLY__) && defined(CONFIG_PCI)

void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes);

#define arch_adjust_zones(size, holes) \
	puv3_pci_adjust_zones(size, holes)

#endif

/*
 * PCI controller in PKUnity-3 masks highest 5-bit for upstream channel,
 * so we must limit the DMA allocation within 128M physical memory for
 * supporting PCI devices.
 */
#define PCI_DMA_THRESHOLD	(PHYS_OFFSET + SZ_128M - 1)

#define is_pcibus_device(dev)	(dev &&			\
				(strncmp(dev->bus->name, "pci", 3) == 0))

#define __virt_to_pcibus(x)     (__virt_to_phys((x) + PKUNITY_PCIAHB_BASE))
#define __pcibus_to_virt(x)     (__phys_to_virt(x) - PKUNITY_PCIAHB_BASE)

/* kuser area */
#define KUSER_VECPAGE_BASE	(KUSER_BASE + UL(0x3fff0000))
/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */
#define kuser_vecpage_to_vectors(x)	((x) - (KUSER_VECPAGE_BASE)	\
					+ (VECTORS_BASE))

#endif
