]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
zynq: move static peripheral mappings
authorJosh Cartwright <josh.cartwright@ni.com>
Mon, 22 Oct 2012 02:15:37 +0000 (21:15 -0500)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 29 Oct 2012 07:54:56 +0000 (08:54 +0100)
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: Josh Cartwright <josh.cartwright@ni.com>
Cc: John Linn <john.linn@xilinx.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Michal Simek <michal.simek@xilinx.com>
arch/arm/mach-zynq/common.c
arch/arm/mach-zynq/include/mach/zynq_soc.h

index ba48f067d8f24b4ac88b5d9819da6a7b0c4f110e..ba8d14f78d4d2d7f5bf260991ff32b50f23d96d3 100644 (file)
@@ -73,12 +73,12 @@ static struct map_desc io_desc[] __initdata = {
        {
                .virtual        = TTC0_VIRT,
                .pfn            = __phys_to_pfn(TTC0_PHYS),
-               .length         = SZ_4K,
+               .length         = TTC0_SIZE,
                .type           = MT_DEVICE,
        }, {
                .virtual        = SCU_PERIPH_VIRT,
                .pfn            = __phys_to_pfn(SCU_PERIPH_PHYS),
-               .length         = SZ_8K,
+               .length         = SCU_PERIPH_SIZE,
                .type           = MT_DEVICE,
        },
 
@@ -86,7 +86,7 @@ static struct map_desc io_desc[] __initdata = {
        {
                .virtual        = UART0_VIRT,
                .pfn            = __phys_to_pfn(UART0_PHYS),
-               .length         = SZ_4K,
+               .length         = UART0_SIZE,
                .type           = MT_DEVICE,
        },
 #endif
index 218283a94247efba281b4b22b074de4896ab578e..1b8bf0ecbcb0c6f2dec279c52d0e88f5fb49d177 100644 (file)
 #ifndef __MACH_XILINX_SOC_H__
 #define __MACH_XILINX_SOC_H__
 
+#include <asm/pgtable.h>
+
 #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_VIRT                     UART0_PHYS
+#define UART0_PHYS             0xE0000000
+#define UART0_SIZE             SZ_4K
+#define UART0_VIRT             0xF0001000
 
-#define TTC0_PHYS                      0xF8001000
-#define TTC0_VIRT                      TTC0_PHYS
+#define TTC0_PHYS              0xF8001000
+#define TTC0_SIZE              SZ_4K
+#define TTC0_VIRT              (VMALLOC_END - TTC0_SIZE)
 
-#define SCU_PERIPH_PHYS                        0xF8F00000
-#define SCU_PERIPH_VIRT                        SCU_PERIPH_PHYS
+#define SCU_PERIPH_PHYS                0xF8F00000
+#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 */
 
 #define TTC0_BASE                      IOMEM(TTC0_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_VADDR  UART0_VIRT