km/ls102xa: add support for u-boot POST memory test
authorAleksandar Gerasimovski <aleksandar.gerasimovski@hitachi-powergrids.com>
Tue, 8 Jun 2021 14:17:34 +0000 (14:17 +0000)
committerPriyanka Jain <priyanka.jain@nxp.com>
Thu, 17 Jun 2021 06:16:11 +0000 (11:46 +0530)
From production view this is standard test executed during production on
all linux based foxmc cards.
On CENT2 HW defined memory region is zero means that some DDR accesses are
done by memory_post_dataline and memory_post_addrline but pattern tests
are skipped that's why mem_regions is fast there.

On ls102x for the complete DDR region of 1GiB memory_regions_post_test
takes approx. 4min and this is too much for production, so this patch
defines only 1MiB region as compromise.

Signed-off-by: Aleksandar Gerasimovski <aleksandar.gerasimovski@hitachi-powergrids.com>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
board/keymile/pg-wcom-ls102xa/pg-wcom-ls102xa.c
include/configs/km/pg-wcom-ls102xa.h

index 69b5d211ba2f316de79bc59562677f4791f4f555..97915f94c401187ea196f946581cf35a4a5283a5 100644 (file)
@@ -141,6 +141,40 @@ int ft_board_setup(void *blob, struct bd_info *bd)
        return 0;
 }
 
+#if defined(CONFIG_POST)
+int post_hotkeys_pressed(void)
+{
+       /* DIC26_SELFTEST: GPRTA0, GPA0 */
+       qrio_gpio_direction_input(QRIO_GPIO_A, 0);
+       return qrio_get_gpio(QRIO_GPIO_A, 0);
+}
+
+ulong post_word_load(void)
+{
+       /* POST word is located at the beginning of reserved physical RAM */
+       void *addr = (void *)(CONFIG_SYS_SDRAM_BASE +
+                               gd->ram_size - CONFIG_KM_RESERVED_PRAM + 8);
+       return in_le32(addr);
+}
+
+void post_word_store(ulong value)
+{
+       /* POST word is located at the beginning of reserved physical RAM */
+       void *addr = (void *)(CONFIG_SYS_SDRAM_BASE +
+                               gd->ram_size - CONFIG_KM_RESERVED_PRAM + 8);
+       out_le32(addr, value);
+}
+
+int arch_memory_test_prepare(u32 *vstart, u32 *size, phys_addr_t *phys_offset)
+{
+       /* Define only 1MiB range for mem_regions at the middle of the RAM */
+       /* For 1GiB range mem_regions takes approx. 4min */
+       *vstart = CONFIG_SYS_SDRAM_BASE + (gd->ram_size >> 1);
+       *size = 1 << 20;
+       return 0;
+}
+#endif
+
 u8 flash_read8(void *addr)
 {
        return __raw_readb(addr + 1);
index 3d7519c93544946a72dd6ba5db7b5a1d66bd01d9..35bfa450b1b6e2e6c7f315d0ba41c4e00b50c713 100644 (file)
 #define CONFIG_SYS_SPD_BUS_NUM         0
 #define SPD_EEPROM_ADDRESS             0x54
 
+/* POST memory regions test */
+#define CONFIG_POST                    (CONFIG_SYS_POST_MEM_REGIONS)
+#define CONFIG_POST_EXTERNAL_WORD_FUNCS
+
 /*
  * IFC Definitions
  */