Add hibernation image area 97/9697/2
authorYuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
Sat, 10 Jun 2017 10:34:35 +0000 (19:34 +0900)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tue, 20 Jun 2017 09:47:23 +0000 (09:47 +0000)
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 <yuichi.kusakabe@jp.fujitsu.com>
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/9697
Tested-by: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
ci-image-build: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
ci-image-boot-test: Jenkins Job builder account <agl-jobbuilder@automotivelinux.org>
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0001-Add-hibernation-image-area.patch [new file with mode: 0644]
meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0002-Enable-swsusp-DMA-support.patch [new file with mode: 0644]
meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot/hibernation/0003-Add-hibernation-image-area.patch [new file with mode: 0644]
meta-agl-bsp/meta-renesas/recipes-bsp/u-boot/u-boot_2013.01.01.bbappend

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 (file)
index 0000000..95fc3b2
--- /dev/null
@@ -0,0 +1,101 @@
+From 0b5f63c7224cb5c9a00397f0e0ef4a16aa58e516 Mon Sep 17 00:00:00 2001
+From: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+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 <yuichi.kusakabe@jp.fujitsu.com>
+---
+ 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 (file)
index 0000000..2a525d3
--- /dev/null
@@ -0,0 +1,95 @@
+From 33dfe19185b35fc61613070032836beee0f48c45 Mon Sep 17 00:00:00 2001
+From: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+Date: Fri, 9 Jun 2017 20:45:39 +0900
+Subject: [PATCH 2/3] Enable swsusp DMA support
+
+Signed-off-by: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+---
+ 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 (file)
index 0000000..e668235
--- /dev/null
@@ -0,0 +1,91 @@
+From eae2ee2090f8c9c140a1b766bd7312be5f0f308d Mon Sep 17 00:00:00 2001
+From: Yuichi Kusakabe <yuichi.kusakabe@jp.fujitsu.com>
+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 <yuichi.kusakabe@jp.fujitsu.com>
+---
+ 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
+
index 9a489e3..9535e17 100644 (file)
@@ -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 \
                                       "