From 077caaf7ec0cb71b457ec8925819b8bec130178c Mon Sep 17 00:00:00 2001 From: Yuichi Kusakabe Date: Sat, 10 Jun 2017 19:34:35 +0900 Subject: Add hibernation image area This patch set add DDR hibernation image area. 0x40000000 <-> 0x77FFFFFF : kernel 0x78000000 <-> 0x7FFFFFFF : hibernation image area and Enable swsusp DMA support(sdhi DMA support). Change-Id: Ia3011d4979f38f0d1cbc5f9f1964e8fa07a7fc20 Signed-off-by: Yuichi Kusakabe Reviewed-on: https://gerrit.automotivelinux.org/gerrit/9697 Tested-by: Jenkins Job builder account ci-image-build: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account Reviewed-by: Jan-Simon Moeller --- .../0001-Add-hibernation-image-area.patch | 101 +++++++++++++++++++++ .../0002-Enable-swsusp-DMA-support.patch | 95 +++++++++++++++++++ .../0003-Add-hibernation-image-area.patch | 91 +++++++++++++++++++ .../recipes-bsp/u-boot/u-boot_2013.01.01.bbappend | 3 + 4 files changed, 290 insertions(+) create mode 100644 meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0001-Add-hibernation-image-area.patch create mode 100644 meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0002-Enable-swsusp-DMA-support.patch create mode 100644 meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0003-Add-hibernation-image-area.patch diff --git a/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0001-Add-hibernation-image-area.patch b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0001-Add-hibernation-image-area.patch new file mode 100644 index 000000000..95fc3b247 --- /dev/null +++ b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0001-Add-hibernation-image-area.patch @@ -0,0 +1,101 @@ +From 0b5f63c7224cb5c9a00397f0e0ef4a16aa58e516 Mon Sep 17 00:00:00 2001 +From: Yuichi Kusakabe +Date: Fri, 9 Jun 2017 20:43:06 +0900 +Subject: [PATCH 1/3] Add hibernation image area + +0x40000000 <-> 0x77FFFFFF : kernel +0x78000000 <-> 0x7FFFFFFF : hibernation image area +and Enable sdhi DMA support + +Signed-off-by: Yuichi Kusakabe +--- + arch/arm/include/asm/arch-rmobile/r8a7791.h | 3 +++ + arch/arm/include/asm/armv7.h | 3 +++ + include/configs/porter.h | 24 ++++++++++++------------ + 3 files changed, 18 insertions(+), 12 deletions(-) + +diff --git a/arch/arm/include/asm/arch-rmobile/r8a7791.h b/arch/arm/include/asm/arch-rmobile/r8a7791.h +index c964f13..9e08da4 100644 +--- a/arch/arm/include/asm/arch-rmobile/r8a7791.h ++++ b/arch/arm/include/asm/arch-rmobile/r8a7791.h +@@ -147,6 +147,8 @@ + + #define DBSC3_0_DBADJ2 0xE67900C8 + #define DBSC3_1_DBADJ2 0xE67A00C8 ++#define DBSC3_0_DBCALTR 0xE67900F8 ++#define DBSC3_1_DBCALTR 0xE67A00F8 + + #define CCI_400_MAXOT_1 0xF0091110 + #define CCI_400_MAXOT_2 0xF0092110 +@@ -154,6 +156,7 @@ + #define CCI_400_QOSCNTL_2 0xF009210C + + #define MXI_BASE 0xFE960000 ++#define MXI_VIN_QOS 0xFE96020C + #define MXI_QOS_BASE 0xFE960300 + + #define SYS_AXI_SYX64TO128_BASE 0xFF800300 +diff --git a/arch/arm/include/asm/armv7.h b/arch/arm/include/asm/armv7.h +index aad5bf7..0d4d612 100644 +--- a/arch/arm/include/asm/armv7.h ++++ b/arch/arm/include/asm/armv7.h +@@ -31,6 +31,9 @@ + #define MIDR_CORTEX_A9_R1P3 0x411FC093 + #define MIDR_CORTEX_A9_R2P10 0x412FC09A + ++/* valid bits in CBAR register / PERIPHBASE value */ ++#define CBAR_MASK 0xFFFF8000 ++ + /* Cortex-A15 revisions */ + #define MIDR_CORTEX_A15_R0P0 0x410FC0F0 + +diff --git a/include/configs/porter.h b/include/configs/porter.h +index 5567c7c..f652bab 100644 +--- a/include/configs/porter.h ++++ b/include/configs/porter.h +@@ -91,14 +91,14 @@ + + /* MEMORY */ + #define PORTER_SDRAM_BASE 0x40000000 +-#define PORTER_SDRAM_SIZE 0x48000000 ++#define PORTER_SDRAM_SIZE 0x80000000 + #define PORTER_UBOOT_SDRAM_SIZE 0x40000000 + + #define CONFIG_SYS_LONGHELP + #define CONFIG_SYS_PROMPT "=> " +-#define CONFIG_SYS_CBSIZE 512 +-#define CONFIG_SYS_PBSIZE 512 +-#define CONFIG_SYS_MAXARGS 32 ++#define CONFIG_SYS_CBSIZE 256 ++#define CONFIG_SYS_PBSIZE 256 ++#define CONFIG_SYS_MAXARGS 16 + #define CONFIG_SYS_BARGSIZE 512 + #define CONFIG_SYS_BAUDRATE_TABLE { 38400, 115200 } + +@@ -205,15 +205,15 @@ + #define CONFIG_USB_HOST_ETHER /* Enable USB Ethernet adapters */ + #define CONFIG_USB_ETHER_ASIX /* Asix, or whatever driver(s) you want */ + +-#define CONFIG_ARMV7_LPAE /* 64-bit MMU descriptors */ +-#define CONFIG_SYS_ARM_CACHE_WRITEALLOC /* Make memory operations faster */ +- +-#define CONFIG_SYS_ARCH_TIMER /* Init arch timer */ +-#define CONFIG_VE_ENABLED /* Virtualization Extensions are enabled*/ +-#define CONFIG_SYS_HZ_CLOCK CONFIG_SYS_CLK_FREQ ++#define CONFIG_ARMV7_LPAE /* 64-bit MMU descriptors */ ++#define CONFIG_SYS_ARM_CACHE_WRITEALLOC /* Make memory operations faster */ ++#define CONFIG_SYS_ARCH_TIMER /* Init arch timer */ ++#define CONFIG_SYS_HZ_CLOCK CONFIG_SYS_CLK_FREQ + ++#if 1 + #define CONFIG_SH_DMA +-#define CONFIG_SH_SYS_DMAL_BASE 0xE6700000 +-#define CONFIG_SH_SYS_DMAL_NCH 15 ++#define CONFIG_SH_SYS_DMAL_BASE 0xE6700000 ++#define CONFIG_SH_SYS_DMAL_NCH 15 ++#endif + + #endif /* __PORTER_H */ +-- +1.8.3.1 + diff --git a/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0002-Enable-swsusp-DMA-support.patch b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0002-Enable-swsusp-DMA-support.patch new file mode 100644 index 000000000..2a525d39a --- /dev/null +++ b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0002-Enable-swsusp-DMA-support.patch @@ -0,0 +1,95 @@ +From 33dfe19185b35fc61613070032836beee0f48c45 Mon Sep 17 00:00:00 2001 +From: Yuichi Kusakabe +Date: Fri, 9 Jun 2017 20:45:39 +0900 +Subject: [PATCH 2/3] Enable swsusp DMA support + +Signed-off-by: Yuichi Kusakabe +--- + common/cmd_swsusp.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 58 insertions(+) + +diff --git a/common/cmd_swsusp.c b/common/cmd_swsusp.c +index ba05aa4..b1d6c22 100644 +--- a/common/cmd_swsusp.c ++++ b/common/cmd_swsusp.c +@@ -226,6 +226,53 @@ static inline void *malloc_aligned(u32 size, u32 align) + return (void *)(((u32)malloc(size + align) + align - 1) & ~(align - 1)); + } + ++static int block_read(u32 page, void *addr, u32 count) ++{ ++ __u32 cnt; ++ int blk_per_page; ++ ++ blk_per_page = PAGE_SIZE / swap_dev->blksz; ++ cnt = swap_dev->block_read(swap_dev->dev, ++ swap_info.start + (page * blk_per_page), ++ count * blk_per_page, addr); ++ ++ return cnt != count * blk_per_page; ++} ++ ++static int get_block(unsigned char *buffer, u32 size) ++{ ++ int need_num_pages = size / PAGE_SIZE; ++ int read_pages = 0; ++ int count; ++ u64 start; ++ ++ do { ++ u64 prev; ++ count = 0; ++ ++ if (!get_meta()) ++ goto exit; ++ ++ prev = start = meta_map->entries[meta_idx]; ++ do { ++ count++; ++ meta_idx++; ++ if (meta_map->entries[meta_idx] - prev > 1) ++ break; ++ prev = meta_map->entries[meta_idx]; ++ } while (read_pages + count < need_num_pages && ++ meta_idx < ARRAY_SIZE(meta_map->entries)); ++ ++ if (block_read(start, buffer, count)) ++ return -1; ++ read_pages += count; ++ buffer += count * PAGE_SIZE; ++ } while (read_pages < need_num_pages); ++ ++exit: ++ return read_pages * PAGE_SIZE; ++} ++ + #endif + + static int page_read(u32 page, void *addr) +@@ -465,12 +512,23 @@ static int image_page_get_next(void *buffer) + cmp_len = *(size_t *) cmp_buf; + cmp_avail = PAGE_SIZE; + ++#ifdef CONFIG_SH_DMA ++ while (cmp_avail < cmp_len + LZO_HEADER) { ++ /* try to DMA-read whole block */ ++ ret = get_block(cmp_buf + cmp_avail, ++ cmp_len + LZO_HEADER); ++ if (unlikely(ret <= 0)) ++ return ret; ++ cmp_avail += ret; ++ } ++#else + while (cmp_avail < cmp_len + LZO_HEADER) { + ret = raw_page_get_next(cmp_buf + cmp_avail); + if (unlikely(ret <= 0)) + return ret; + cmp_avail += PAGE_SIZE; + } ++#endif + unc_len = LZO_UNC_SIZE; + ret = lzo1x_decompress_safe(cmp_buf + LZO_HEADER, + cmp_len, unc_buf, &unc_len); +-- +1.8.3.1 + diff --git a/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0003-Add-hibernation-image-area.patch b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0003-Add-hibernation-image-area.patch new file mode 100644 index 000000000..e6682354e --- /dev/null +++ b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0003-Add-hibernation-image-area.patch @@ -0,0 +1,91 @@ +From eae2ee2090f8c9c140a1b766bd7312be5f0f308d Mon Sep 17 00:00:00 2001 +From: Yuichi Kusakabe +Date: Fri, 9 Jun 2017 20:46:54 +0900 +Subject: [PATCH 3/3] Add hibernation image area + +0x40000000 <-> 0x77FFFFFF : kernel +0x78000000 <-> 0x7FFFFFFF : hibernation image area + +Signed-off-by: Yuichi Kusakabe +--- + common/cmd_swsuspmem.c | 20 +++++++++++++------- + 1 file changed, 13 insertions(+), 7 deletions(-) + +diff --git a/common/cmd_swsuspmem.c b/common/cmd_swsuspmem.c +index 6980aaf..dbc000c 100644 +--- a/common/cmd_swsuspmem.c ++++ b/common/cmd_swsuspmem.c +@@ -116,8 +116,9 @@ struct swsusp_finish_context { + #define USED_ADDRESS_TOP (CONFIG_SYS_SDRAM_BASE) + #define USED_ADDRESS_END (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_LOAD_OFFSET) + #else +-#define USED_ADDRESS_TOP (0x40000000) +-#define USED_ADDRESS_END (0x48000000) ++#define CONFIG_SYS_LOAD_OFFSET 0x0 ++#define USED_ADDRESS_TOP (CONFIG_SYS_SDRAM_BASE) ++#define USED_ADDRESS_END (CONFIG_SYS_SDRAM_BASE + CONFIG_SYS_LOAD_OFFSET) + #endif + #define PG_UB2ZERO(pg) ((pg) - CONFIG_SYS_SDRAM_BASE / PAGE_SIZE) + static u32 const exclude_min_page = +@@ -157,7 +158,7 @@ static struct swsuspmem_hook *_hook; + } while (0) + + #ifdef PAGEMAP_DEBUG +-static int debugout; ++static int debugout = 1; + static int _last_read_pages; + #define PAGEMAP_INFO(_msg, ...) \ + do { \ +@@ -231,7 +232,7 @@ static inline u32 addr2pg(void *addr) + { + return ((u32)(addr)) / PAGE_SIZE; + } +-static void *offt_addr = (void *)0x44000000; ++static void *offt_addr = (void *)0x78000000; + static int page_read_mem(u64 page, void *addr) + { + memcpy(addr, (u8 *)offt_addr + page * PAGE_SIZE, PAGE_SIZE); +@@ -577,7 +578,7 @@ int do_checksnapimage(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) + + if (memcmp(HIBERNATE_SIG, swsusp_header->sig, 10) + || (swsusp_header->img_size == 0) +- || (swsusp_header->img_size > 0x03fff000)) { ++ || (swsusp_header->img_size > 0x05fff000)) { + printf("No hibernation image present\n"); + CALL_HOOK(err_hook, SWSUSPMEM_BROKENIMAGE); + return 0; +@@ -674,7 +675,9 @@ int do_swsuspmem(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) + /* Allow for 16 pages of stack */ + max_page = gd->start_addr_sp / PAGE_SIZE - 32; + high_page = (((gd->relocaddr + _bss_end_ofs) +- + (PAGE_SIZE - 1)) / PAGE_SIZE) + 1; ++ + (PAGE_SIZE - 1)) / PAGE_SIZE) + 1 + 0xf; ++ if (high_page > 0x7ffff) ++ high_page = 0x7ffff; + #define pfn_is_occupied(pfn) (page > max_page && page <= high_page) + #ifdef PAGEMAP_DEBUG + PAGEMAP_INFO(" *gd->start_addr_sp:%p\n", +@@ -711,7 +714,7 @@ int do_swsuspmem(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) + + if (memcmp(HIBERNATE_SIG, swsusp_header->sig, 10) + || (swsusp_header->img_size == 0) +- || (swsusp_header->img_size > 0x03fff000)) { ++ || (swsusp_header->img_size > 0x05fff000)) { + printf("No hibernation image present\n"); + CALL_HOOK(err_hook, SWSUSPMEM_BROKENIMAGE); + return 0; +@@ -830,8 +833,11 @@ int do_swsuspmem(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) + continue; + } else if (unlikely(pfn_is_low(page) && + pfn_is_occupied(page))) { ++ /* Virtual 32-bit original address */ + remap_orig[remap_idx] = pg2addr(page); ++ /* allocating new free page */ + page = free_page_get_next(); ++ /* Virtual 32-bit remap address */ + remap_temp[remap_idx] = pg2addr(page); + remap_idx++; + #ifdef PAGEMAP_DEBUG +-- +1.8.3.1 + diff --git a/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot_2013.01.01.bbappend b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot_2013.01.01.bbappend index 9a489e398..9535e174d 100644 --- a/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot_2013.01.01.bbappend +++ b/meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot_2013.01.01.bbappend @@ -6,5 +6,8 @@ SRC_URI_append_agl-porter-hibernate = " file://hibernation/0001-Add-rcar-sdhi-DM file://hibernation/0002-Add-Hibernation-swsusp-command-support.patch \ file://hibernation/0003-Add-Hibernation-swsuspmem-command-support.patch \ file://hibernation/0004-Add-porter-board-Hibernation-code.patch \ + file://hibernation/0001-Add-hibernation-image-area.patch \ + file://hibernation/0002-Enable-swsusp-DMA-support.patch \ + file://hibernation/0003-Add-hibernation-image-area.patch \ " -- cgit 1.2.3-korg