183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 252a822edSMichal Simek /* 34a693669SMichal Simek * (C) Copyright 2007-2018 Michal Simek 452a822edSMichal Simek * 552a822edSMichal Simek * Michal SIMEK <monstr@monstr.eu> 652a822edSMichal Simek */ 752a822edSMichal Simek 835912528SShreenidhi Shedi /* 935912528SShreenidhi Shedi * This is a board specific file. It's OK to include board specific 1035912528SShreenidhi Shedi * header files 1135912528SShreenidhi Shedi */ 1252a822edSMichal Simek 1352a822edSMichal Simek #include <common.h> 1452a822edSMichal Simek #include <config.h> 154a693669SMichal Simek #include <dm.h> 164a693669SMichal Simek #include <dm/lists.h> 17e945f6dcSMichal Simek #include <fdtdec.h> 182380b8f5SMichal Simek #include <asm/processor.h> 1952a822edSMichal Simek #include <asm/microblaze_intc.h> 2052a822edSMichal Simek #include <asm/asm.h> 214e779ad2SMichal Simek #include <asm/gpio.h> 226ec6f584SShreenidhi Shedi #include <dm/uclass.h> 236ec6f584SShreenidhi Shedi #include <wdt.h> 244e779ad2SMichal Simek 25e945f6dcSMichal Simek DECLARE_GLOBAL_DATA_PTR; 26e945f6dcSMichal Simek 276ec6f584SShreenidhi Shedi #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) 286ec6f584SShreenidhi Shedi static struct udevice *watchdog_dev; 296ec6f584SShreenidhi Shedi #endif /* !CONFIG_SPL_BUILD && CONFIG_WDT */ 306ec6f584SShreenidhi Shedi 31e945f6dcSMichal Simek ulong ram_base; 32e945f6dcSMichal Simek 3376b00acaSSimon Glass int dram_init_banksize(void) 34e945f6dcSMichal Simek { 35*656185a5SMichal Simek return fdtdec_setup_memory_banksize(); 36e945f6dcSMichal Simek } 37e945f6dcSMichal Simek 38e945f6dcSMichal Simek int dram_init(void) 39e945f6dcSMichal Simek { 40*656185a5SMichal Simek if (fdtdec_setup_mem_size_base() != 0) 41*656185a5SMichal Simek return -EINVAL; 42e945f6dcSMichal Simek 43e945f6dcSMichal Simek return 0; 44e945f6dcSMichal Simek }; 45e945f6dcSMichal Simek 466ec6f584SShreenidhi Shedi #ifdef CONFIG_WDT 476ec6f584SShreenidhi Shedi /* Called by macro WATCHDOG_RESET */ 486ec6f584SShreenidhi Shedi void watchdog_reset(void) 496ec6f584SShreenidhi Shedi { 506ec6f584SShreenidhi Shedi #if !defined(CONFIG_SPL_BUILD) 516ec6f584SShreenidhi Shedi ulong now; 526ec6f584SShreenidhi Shedi static ulong next_reset; 536ec6f584SShreenidhi Shedi 546ec6f584SShreenidhi Shedi if (!watchdog_dev) 556ec6f584SShreenidhi Shedi return; 566ec6f584SShreenidhi Shedi 576ec6f584SShreenidhi Shedi now = timer_get_us(); 586ec6f584SShreenidhi Shedi 596ec6f584SShreenidhi Shedi /* Do not reset the watchdog too often */ 606ec6f584SShreenidhi Shedi if (now > next_reset) { 616ec6f584SShreenidhi Shedi wdt_reset(watchdog_dev); 626ec6f584SShreenidhi Shedi next_reset = now + 1000; 636ec6f584SShreenidhi Shedi } 646ec6f584SShreenidhi Shedi #endif /* !CONFIG_SPL_BUILD */ 656ec6f584SShreenidhi Shedi } 666ec6f584SShreenidhi Shedi #endif /* CONFIG_WDT */ 676ec6f584SShreenidhi Shedi 6838c4761cSMichal Simek int board_late_init(void) 692380b8f5SMichal Simek { 706ec6f584SShreenidhi Shedi #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT) 716ec6f584SShreenidhi Shedi watchdog_dev = NULL; 726ec6f584SShreenidhi Shedi 736ec6f584SShreenidhi Shedi if (uclass_get_device_by_seq(UCLASS_WDT, 0, &watchdog_dev)) { 746ec6f584SShreenidhi Shedi debug("Watchdog: Not found by seq!\n"); 756ec6f584SShreenidhi Shedi if (uclass_get_device(UCLASS_WDT, 0, &watchdog_dev)) { 766ec6f584SShreenidhi Shedi puts("Watchdog: Not found!\n"); 776ec6f584SShreenidhi Shedi return 0; 786ec6f584SShreenidhi Shedi } 796ec6f584SShreenidhi Shedi } 806ec6f584SShreenidhi Shedi 816ec6f584SShreenidhi Shedi wdt_start(watchdog_dev, 0, 0); 826ec6f584SShreenidhi Shedi puts("Watchdog: Started\n"); 836ec6f584SShreenidhi Shedi #endif /* !CONFIG_SPL_BUILD && CONFIG_WDT */ 844a693669SMichal Simek #if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_SYSRESET_MICROBLAZE) 854a693669SMichal Simek int ret; 866ec6f584SShreenidhi Shedi 874a693669SMichal Simek ret = device_bind_driver(gd->dm_root, "mb_soft_reset", 884a693669SMichal Simek "reset_soft", NULL); 894a693669SMichal Simek if (ret) 904a693669SMichal Simek printf("Warning: No reset driver: ret=%d\n", ret); 914a693669SMichal Simek #endif 9238c4761cSMichal Simek return 0; 932380b8f5SMichal Simek } 94