From patchwork Fri Jun 15 12:42:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Graf X-Patchwork-Id: 138689 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp805603lji; Fri, 15 Jun 2018 05:51:08 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJvFjMeCzLh18Ko8NgomyRN1900wdE5hofgkUnNWoJH0eZyrZUDZ0X1W0JL0lmW0SLnOtMs X-Received: by 2002:a50:9434:: with SMTP id p49-v6mr1823890eda.107.1529067068884; Fri, 15 Jun 2018 05:51:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529067068; cv=none; d=google.com; s=arc-20160816; b=jKKeGkD2MAGtBHWjkoZAGSCMyU76zCXfnotgNnMfiqX3LhX/G3sMNjUx17YMB4E68E cGzruZc5WADUzXyBr6fiwjhp8xfbTL6KBqpWFKMXY5GVgWxOvosKN5c2wUJE58FkyzrI BZ3LW9esij8GC0T2gNVnqmeY0MFoI46DL5WsB5tNEb6539pj20/WF1zEjAU9funpdxL1 oDQ5y/NUuw8kOFuiXn/1fYNVsbsO9vNyAblxRRpv1qCo4eB9YpXmSZl2l4JZEKdebUAP yBGAXiwKeK573m403vHad14aNVx3Ea9xNI1LhIU9C1b3OxHI0mzpt7MN7wlOY+3WSv3K 7QeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:arc-authentication-results; bh=+hG1/KeX/0IyAn4Lbrkg05a+eBiXi4jEXJ8EyL9+cSI=; b=aogQYUvQbm/ghPAImBg76IHtRuoeo3zlq5souEuB/Jm1cgRJfwIqPxBuZEE3SfdO3s 0aGyZoxI9KX3qWRIsk0+0BuPdy2iPd4pN9Edwr7BUFlUPVGKegtek9pJ8DGEsqIg4y8Q iBsRZgwtIkqQ1fqMbiv7qYK7sKqo5nawoove7kXeeehPxlQ39i8IAok4p7fHKQljMWgl paH9/EtQYbEwtd5j2TXL7O/0z2rzlYw59nkarOQ44dJeWH/FpyLblvxLft+Brv1lUobC shGniIcbAsdcP6v323eak8xx0hB897fiWZupHKE82gTaluVl08PBq11SIpGqG2wDomnm XJnw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id 6-v6si185005eda.96.2018.06.15.05.51.08; Fri, 15 Jun 2018 05:51:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id 78E2FC21EB4; Fri, 15 Jun 2018 12:46:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 63A7BC21EB4; Fri, 15 Jun 2018 12:42:42 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 6ED3CC21E8A; Fri, 15 Jun 2018 12:42:34 +0000 (UTC) Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by lists.denx.de (Postfix) with ESMTPS id D8E5CC21E96 for ; Fri, 15 Jun 2018 12:42:31 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext-too.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 3F5DCAF8E; Fri, 15 Jun 2018 12:42:31 +0000 (UTC) From: Alexander Graf To: u-boot@lists.denx.de Date: Fri, 15 Jun 2018 14:42:25 +0200 Message-Id: <20180615124229.35310-14-agraf@suse.de> X-Mailer: git-send-email 2.12.3 In-Reply-To: <20180615124229.35310-1-agraf@suse.de> References: <20180615124229.35310-1-agraf@suse.de> Cc: Andy Shevchenko , Heinrich Schuchardt Subject: [U-Boot] [PATCH v3 13/17] sandbox: Enable 1:1 map X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" So far we've always had a split address space situation with "U-Boot addresses" (a number space starting from 0) and "host virtual addresses" (128MB mapped randomly in address space). This meant that we had to make sure all code is properly aware that addresses and pointers are not the same thing, so they must not cast between the two. However, most real boards do actually have a 1:1 map. So it's much easier to just expose the same in sandbox. So this patch maps sandbox RAM from 0x8000000-0x10000000. This address range fits just fine on both 32bit and 64bit systems. Signed-off-by: Alexander Graf --- I don't know if this really is the best path forward, but at least it's one that gets rid of the one awkward target that does not have a 1:1 map ;) --- Makefile | 2 +- arch/sandbox/cpu/cpu.c | 35 ----------------------------------- arch/sandbox/cpu/state.c | 4 ++-- arch/sandbox/cpu/u-boot.lds | 9 +++++++++ arch/sandbox/include/asm/io.h | 17 +++++------------ common/board_f.c | 4 +++- configs/sandbox64_defconfig | 6 +++--- configs/sandbox_defconfig | 6 +++--- configs/sandbox_flattree_defconfig | 4 ++-- configs/sandbox_noblk_defconfig | 4 ++-- configs/sandbox_spl_defconfig | 4 ++-- include/configs/sandbox.h | 32 ++++++++++++++++---------------- 12 files changed, 48 insertions(+), 79 deletions(-) diff --git a/Makefile b/Makefile index 6a190e7a89..705c5b632f 100644 --- a/Makefile +++ b/Makefile @@ -867,7 +867,7 @@ endif # Normally we fill empty space with 0xff quiet_cmd_objcopy = OBJCOPY $@ -cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \ +cmd_objcopy = $(OBJCOPY) --gap-fill=0xff -R .ram $(OBJCOPYFLAGS) \ $(OBJCOPYFLAGS_$(@F)) $< $@ # Provide a version which does not do this, for use by EFI diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index 23d8b70648..b20894b806 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -5,7 +5,6 @@ #define DEBUG #include #include -#include #include #include #include @@ -58,16 +57,6 @@ int cleanup_before_linux_select(int flags) return 0; } -void *phys_to_virt(phys_addr_t paddr) -{ - return (void *)(gd->arch.ram_buf + paddr); -} - -phys_addr_t virt_to_phys(void *vaddr) -{ - return (phys_addr_t)((uint8_t *)vaddr - gd->arch.ram_buf); -} - void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags) { #if defined(CONFIG_PCI) && !defined(CONFIG_SPL_BUILD) @@ -103,11 +92,6 @@ void sandbox_set_enable_pci_map(int enable) enable_pci_map = enable; } -phys_addr_t map_to_sysmem(const void *ptr) -{ - return (u8 *)ptr - gd->arch.ram_buf; -} - void flush_dcache_range(unsigned long start, unsigned long stop) { } @@ -178,22 +162,3 @@ void longjmp(jmp_buf jmp, int ret) while (1) ; } - -#ifdef CONFIG_EFI_LOADER - -/* - * In sandbox, we don't have a 1:1 map, so we need to expose - * process addresses instead of U-Boot addresses - */ -void efi_add_known_memory(void) -{ - u64 ram_start = (uintptr_t)map_sysmem(0, gd->ram_size); - u64 ram_size = gd->ram_size; - u64 start = (ram_start + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; - u64 pages = (ram_size + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT; - - efi_add_memory_map(start, pages, EFI_CONVENTIONAL_MEMORY, - false); -} - -#endif diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c index cc50819ab9..75ad564274 100644 --- a/arch/sandbox/cpu/state.c +++ b/arch/sandbox/cpu/state.c @@ -12,6 +12,7 @@ /* Main state record for the sandbox */ static struct sandbox_state main_state; static struct sandbox_state *state; /* Pointer to current state record */ +static __attribute__ ((section (".ram"))) u8 sandbox_ram[CONFIG_SYS_SDRAM_SIZE]; static int state_ensure_space(int extra_size) { @@ -366,8 +367,7 @@ int state_init(void) state = &main_state; state->ram_size = CONFIG_SYS_SDRAM_SIZE; - state->ram_buf = os_malloc(state->ram_size); - assert(state->ram_buf); + state->ram_buf = sandbox_ram; state_reset_for_test(state); /* diff --git a/arch/sandbox/cpu/u-boot.lds b/arch/sandbox/cpu/u-boot.lds index 3a6cf55eb9..dd649df1f8 100644 --- a/arch/sandbox/cpu/u-boot.lds +++ b/arch/sandbox/cpu/u-boot.lds @@ -50,3 +50,12 @@ SECTIONS } INSERT BEFORE .data; + +SECTIONS +{ + .ram 0x8000000 : { + *(.ram) + } +} + +INSERT BEFORE .bss; diff --git a/arch/sandbox/include/asm/io.h b/arch/sandbox/include/asm/io.h index 81b7750628..fe792200a7 100644 --- a/arch/sandbox/include/asm/io.h +++ b/arch/sandbox/include/asm/io.h @@ -6,12 +6,6 @@ #ifndef __SANDBOX_ASM_IO_H #define __SANDBOX_ASM_IO_H -void *phys_to_virt(phys_addr_t paddr); -#define phys_to_virt phys_to_virt - -phys_addr_t virt_to_phys(void *vaddr); -#define virt_to_phys virt_to_phys - void *map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags); #define map_physmem map_physmem @@ -23,20 +17,19 @@ void unmap_physmem(const void *vaddr, unsigned long flags); #include -/* For sandbox, we want addresses to point into our RAM buffer */ static inline void *map_sysmem(phys_addr_t paddr, unsigned long len) { - return map_physmem(paddr, len, MAP_WRBACK); + return (void *)(unsigned long)paddr; } -/* Remove a previous mapping */ static inline void unmap_sysmem(const void *vaddr) { - unmap_physmem(vaddr, MAP_WRBACK); } -/* Map from a pointer to our RAM buffer */ -phys_addr_t map_to_sysmem(const void *ptr); +static inline phys_addr_t map_to_sysmem(const void *ptr) +{ + return (phys_addr_t)(unsigned long)ptr; +} /* Define nops for sandbox I/O access */ #define readb(addr) ((void)addr, 0) diff --git a/common/board_f.c b/common/board_f.c index e943347ce3..b06f9d30ad 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -219,7 +219,9 @@ static int setup_mon_len(void) { #if defined(__ARM__) || defined(__MICROBLAZE__) gd->mon_len = (ulong)&__bss_end - (ulong)_start; -#elif defined(CONFIG_SANDBOX) || defined(CONFIG_EFI_APP) +#elif defined(CONFIG_SANDBOX) + gd->mon_len = 0; +#elif defined(CONFIG_EFI_APP) gd->mon_len = (ulong)&_end - (ulong)_init; #elif defined(CONFIG_NIOS2) || defined(CONFIG_XTENSA) gd->mon_len = CONFIG_SYS_MONITOR_LEN; diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig index 20a2ab3ffb..5c47b651d4 100644 --- a/configs/sandbox64_defconfig +++ b/configs/sandbox64_defconfig @@ -1,4 +1,4 @@ -CONFIG_SYS_TEXT_BASE=0 +CONFIG_SYS_TEXT_BASE=0x8000000 CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_SANDBOX64=y CONFIG_DEFAULT_DEVICE_TREE="sandbox64" @@ -11,13 +11,13 @@ CONFIG_BOOTSTAGE=y CONFIG_BOOTSTAGE_REPORT=y CONFIG_BOOTSTAGE_FDT=y CONFIG_BOOTSTAGE_STASH=y -CONFIG_BOOTSTAGE_STASH_ADDR=0x0 +CONFIG_BOOTSTAGE_STASH_ADDR=0x8000000 CONFIG_BOOTSTAGE_STASH_SIZE=0x4096 CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 CONFIG_SILENT_CONSOLE=y CONFIG_PRE_CONSOLE_BUFFER=y -CONFIG_PRE_CON_BUF_ADDR=0x100000 +CONFIG_PRE_CON_BUF_ADDR=0x8100000 CONFIG_LOG_MAX_LEVEL=6 CONFIG_DISPLAY_BOARDINFO_LATE=y CONFIG_CMD_CPU=y diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 2fc84a16c9..84828c972c 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -1,4 +1,4 @@ -CONFIG_SYS_TEXT_BASE=0 +CONFIG_SYS_TEXT_BASE=0x8000000 CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_DEFAULT_DEVICE_TREE="sandbox" CONFIG_DISTRO_DEFAULTS=y @@ -10,13 +10,13 @@ CONFIG_BOOTSTAGE=y CONFIG_BOOTSTAGE_REPORT=y CONFIG_BOOTSTAGE_FDT=y CONFIG_BOOTSTAGE_STASH=y -CONFIG_BOOTSTAGE_STASH_ADDR=0x0 +CONFIG_BOOTSTAGE_STASH_ADDR=0x8000000 CONFIG_BOOTSTAGE_STASH_SIZE=0x4096 CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 CONFIG_SILENT_CONSOLE=y CONFIG_PRE_CONSOLE_BUFFER=y -CONFIG_PRE_CON_BUF_ADDR=0x100000 +CONFIG_PRE_CON_BUF_ADDR=0x8100000 CONFIG_LOG_MAX_LEVEL=6 CONFIG_LOG_ERROR_RETURN=y CONFIG_DISPLAY_BOARDINFO_LATE=y diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig index e922c4b38f..567ec15c22 100644 --- a/configs/sandbox_flattree_defconfig +++ b/configs/sandbox_flattree_defconfig @@ -1,4 +1,4 @@ -CONFIG_SYS_TEXT_BASE=0 +CONFIG_SYS_TEXT_BASE=0x8000000 CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_DEFAULT_DEVICE_TREE="sandbox" CONFIG_DISTRO_DEFAULTS=y @@ -10,7 +10,7 @@ CONFIG_BOOTSTAGE=y CONFIG_BOOTSTAGE_REPORT=y CONFIG_BOOTSTAGE_FDT=y CONFIG_BOOTSTAGE_STASH=y -CONFIG_BOOTSTAGE_STASH_ADDR=0x0 +CONFIG_BOOTSTAGE_STASH_ADDR=0x8000000 CONFIG_BOOTSTAGE_STASH_SIZE=0x4096 CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 diff --git a/configs/sandbox_noblk_defconfig b/configs/sandbox_noblk_defconfig index 8bdd4edcda..c46b0bc06c 100644 --- a/configs/sandbox_noblk_defconfig +++ b/configs/sandbox_noblk_defconfig @@ -1,4 +1,4 @@ -CONFIG_SYS_TEXT_BASE=0 +CONFIG_SYS_TEXT_BASE=0x8000000 CONFIG_SYS_MALLOC_F_LEN=0x2000 CONFIG_DEFAULT_DEVICE_TREE="sandbox" CONFIG_DISTRO_DEFAULTS=y @@ -10,7 +10,7 @@ CONFIG_BOOTSTAGE=y CONFIG_BOOTSTAGE_REPORT=y CONFIG_BOOTSTAGE_FDT=y CONFIG_BOOTSTAGE_STASH=y -CONFIG_BOOTSTAGE_STASH_ADDR=0x0 +CONFIG_BOOTSTAGE_STASH_ADDR=0x8000000 CONFIG_BOOTSTAGE_STASH_SIZE=0x4096 # CONFIG_USE_BOOTCOMMAND is not set CONFIG_CONSOLE_RECORD=y diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig index fb6bb4baa2..4327e3f8b6 100644 --- a/configs/sandbox_spl_defconfig +++ b/configs/sandbox_spl_defconfig @@ -1,4 +1,4 @@ -CONFIG_SYS_TEXT_BASE=0 +CONFIG_SYS_TEXT_BASE=0x8000000 CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_SYS_MALLOC_F_LEN=0x2000 @@ -17,7 +17,7 @@ CONFIG_BOOTSTAGE=y CONFIG_BOOTSTAGE_REPORT=y CONFIG_BOOTSTAGE_FDT=y CONFIG_BOOTSTAGE_STASH=y -CONFIG_BOOTSTAGE_STASH_ADDR=0x0 +CONFIG_BOOTSTAGE_STASH_ADDR=0x8000000 CONFIG_BOOTSTAGE_STASH_SIZE=0x4096 CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000 diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index 1a49d1dab5..d0e5a5d6bf 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -6,12 +6,18 @@ #ifndef __CONFIG_H #define __CONFIG_H +/* Size of our emulated memory */ +#define CONFIG_SYS_SDRAM_BASE 0x8000000 +#define CONFIG_SYS_SDRAM_SIZE (128 << 20) +#define CONFIG_SYS_MONITOR_BASE 0 +#define CONFIG_NR_DRAM_BANKS 1 + #ifdef FTRACE #define CONFIG_TRACE #define CONFIG_TRACE_BUFFER_SIZE (16 << 20) #define CONFIG_TRACE_EARLY_SIZE (8 << 20) #define CONFIG_TRACE_EARLY -#define CONFIG_TRACE_EARLY_ADDR 0x00100000 +#define CONFIG_TRACE_EARLY_ADDR (CONFIG_SYS_SDRAM_BASE + 0x100000) #endif @@ -30,7 +36,7 @@ /* * Size of malloc() pool, before and after relocation */ -#define CONFIG_MALLOC_F_ADDR 0x0010000 +#define CONFIG_MALLOC_F_ADDR (CONFIG_SYS_SDRAM_BASE + 0x10000) #define CONFIG_SYS_MALLOC_LEN (32 << 20) /* 32MB */ #define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */ @@ -44,19 +50,13 @@ #define CONFIG_I2C_EDID /* Memory things - we don't really want a memory test */ -#define CONFIG_SYS_LOAD_ADDR 0x00000000 -#define CONFIG_SYS_MEMTEST_START 0x00100000 +#define CONFIG_SYS_LOAD_ADDR CONFIG_SYS_SDRAM_BASE +#define CONFIG_SYS_MEMTEST_START (CONFIG_SYS_SDRAM_BASE + 0x100000) #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x1000) -#define CONFIG_SYS_FDT_LOAD_ADDR 0x100 +#define CONFIG_SYS_FDT_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x100) #define CONFIG_PHYSMEM -/* Size of our emulated memory */ -#define CONFIG_SYS_SDRAM_BASE 0 -#define CONFIG_SYS_SDRAM_SIZE (128 << 20) -#define CONFIG_SYS_MONITOR_BASE 0 -#define CONFIG_NR_DRAM_BANKS 1 - #define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600,\ 115200} @@ -104,11 +104,11 @@ #define MEM_LAYOUT_ENV_SETTINGS \ "bootm_size=0x10000000\0" \ - "kernel_addr_r=0x1000000\0" \ - "fdt_addr_r=0xc00000\0" \ - "ramdisk_addr_r=0x2000000\0" \ - "scriptaddr=0x1000\0" \ - "pxefile_addr_r=0x2000\0" + "kernel_addr_r=0x9000000\0" \ + "fdt_addr_r=0x8c00000\0" \ + "ramdisk_addr_r=0xa000000\0" \ + "scriptaddr=0x8001000\0" \ + "pxefile_addr_r=0x8002000\0" #define CONFIG_EXTRA_ENV_SETTINGS \ SANDBOX_SERIAL_SETTINGS \