1/* 2 * linux/arch/unicore32/include/mach/memory.h 3 * 4 * Code specific to PKUnity SoC and UniCore ISA 5 * 6 * Copyright (C) 2001-2010 GUAN Xue-tao 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12#ifndef __MACH_PUV3_MEMORY_H__ 13#define __MACH_PUV3_MEMORY_H__ 14 15#include <mach/hardware.h> 16 17/* Physical DRAM offset. */ 18#define PHYS_OFFSET UL(0x00000000) 19/* The base address of exception vectors. */ 20#define VECTORS_BASE UL(0xffff0000) 21/* The base address of kuser area. */ 22#define KUSER_BASE UL(0x80000000) 23 24#ifdef __ASSEMBLY__ 25/* The byte offset of the kernel image in RAM from the start of RAM. */ 26#define KERNEL_IMAGE_START 0x00408000 27#endif 28 29#if !defined(__ASSEMBLY__) && defined(CONFIG_PCI) 30 31void puv3_pci_adjust_zones(unsigned long *size, unsigned long *holes); 32 33#define arch_adjust_zones(size, holes) \ 34 puv3_pci_adjust_zones(size, holes) 35 36#endif 37 38/* 39 * PCI controller in PKUnity-3 masks highest 5-bit for upstream channel, 40 * so we must limit the DMA allocation within 128M physical memory for 41 * supporting PCI devices. 42 */ 43#define PCI_DMA_THRESHOLD (PHYS_OFFSET + SZ_128M - 1) 44 45#define is_pcibus_device(dev) (dev && \ 46 (strncmp(dev->bus->name, "pci", 3) == 0)) 47 48#define __virt_to_pcibus(x) (__virt_to_phys((x) + PKUNITY_PCIAHB_BASE)) 49#define __pcibus_to_virt(x) (__phys_to_virt(x) - PKUNITY_PCIAHB_BASE) 50 51/* kuser area */ 52#define KUSER_VECPAGE_BASE (KUSER_BASE + UL(0x3fff0000)) 53/* kuser_vecpage (0xbfff0000) is ro, and vectors page (0xffff0000) is rw */ 54#define kuser_vecpage_to_vectors(x) ((x) - (KUSER_VECPAGE_BASE) \ 55 + (VECTORS_BASE)) 56 57#endif 58