Commit f5800776 authored by Josh Cartwright's avatar Josh Cartwright Committed by Michal Simek

zynq: move static peripheral mappings

Shifting them up into the vmalloc region prevents the following warning,
when booting a zynq qemu target with more than 512mb of RAM:

  BUG: mapping for 0xe0000000 at 0xe0000000 out of vmalloc space

In addition, it allows for reuse of these mappings when the proper
drivers issue requests via ioremap().

There are currently unknown issues with the early uart mapping.  For
now, the uart will be mapped to a known working address.
Signed-off-by: default avatarJosh Cartwright <josh.cartwright@ni.com>
Cc: John Linn <john.linn@xilinx.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Tested-by: default avatarMichal Simek <michal.simek@xilinx.com>
parent f7977939
...@@ -73,12 +73,12 @@ static struct map_desc io_desc[] __initdata = { ...@@ -73,12 +73,12 @@ static struct map_desc io_desc[] __initdata = {
{ {
.virtual = TTC0_VIRT, .virtual = TTC0_VIRT,
.pfn = __phys_to_pfn(TTC0_PHYS), .pfn = __phys_to_pfn(TTC0_PHYS),
.length = SZ_4K, .length = TTC0_SIZE,
.type = MT_DEVICE, .type = MT_DEVICE,
}, { }, {
.virtual = SCU_PERIPH_VIRT, .virtual = SCU_PERIPH_VIRT,
.pfn = __phys_to_pfn(SCU_PERIPH_PHYS), .pfn = __phys_to_pfn(SCU_PERIPH_PHYS),
.length = SZ_8K, .length = SCU_PERIPH_SIZE,
.type = MT_DEVICE, .type = MT_DEVICE,
}, },
...@@ -86,7 +86,7 @@ static struct map_desc io_desc[] __initdata = { ...@@ -86,7 +86,7 @@ static struct map_desc io_desc[] __initdata = {
{ {
.virtual = UART0_VIRT, .virtual = UART0_VIRT,
.pfn = __phys_to_pfn(UART0_PHYS), .pfn = __phys_to_pfn(UART0_PHYS),
.length = SZ_4K, .length = UART0_SIZE,
.type = MT_DEVICE, .type = MT_DEVICE,
}, },
#endif #endif
......
...@@ -15,27 +15,32 @@ ...@@ -15,27 +15,32 @@
#ifndef __MACH_XILINX_SOC_H__ #ifndef __MACH_XILINX_SOC_H__
#define __MACH_XILINX_SOC_H__ #define __MACH_XILINX_SOC_H__
#include <asm/pgtable.h>
#define PERIPHERAL_CLOCK_RATE 2500000 #define PERIPHERAL_CLOCK_RATE 2500000
/* For now, all mappings are flat (physical = virtual) /* Static peripheral mappings are mapped at the top of the vmalloc region. The
* early uart mapping causes intermediate problems/failure at certain
* addresses, including the very top of the vmalloc region. Map it at an
* address that is known to work.
*/ */
#define UART0_PHYS 0xE0000000 #define UART0_PHYS 0xE0000000
#define UART0_VIRT UART0_PHYS #define UART0_SIZE SZ_4K
#define UART0_VIRT 0xF0001000
#define TTC0_PHYS 0xF8001000 #define TTC0_PHYS 0xF8001000
#define TTC0_VIRT TTC0_PHYS #define TTC0_SIZE SZ_4K
#define TTC0_VIRT (VMALLOC_END - TTC0_SIZE)
#define SCU_PERIPH_PHYS 0xF8F00000 #define SCU_PERIPH_PHYS 0xF8F00000
#define SCU_PERIPH_VIRT SCU_PERIPH_PHYS #define SCU_PERIPH_SIZE SZ_8K
#define SCU_PERIPH_VIRT (TTC0_VIRT - SCU_PERIPH_SIZE)
/* The following are intended for the devices that are mapped early */ /* The following are intended for the devices that are mapped early */
#define TTC0_BASE IOMEM(TTC0_VIRT) #define TTC0_BASE IOMEM(TTC0_VIRT)
#define SCU_PERIPH_BASE IOMEM(SCU_PERIPH_VIRT) #define SCU_PERIPH_BASE IOMEM(SCU_PERIPH_VIRT)
/*
* Mandatory for CONFIG_LL_DEBUG, UART is mapped virtual = physical
*/
#define LL_UART_PADDR UART0_PHYS #define LL_UART_PADDR UART0_PHYS
#define LL_UART_VADDR UART0_VIRT #define LL_UART_VADDR UART0_VIRT
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment