s5p_wdt.c 877 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright (C) 2012 Samsung Electronics
  4. * Minkyu Kang <mk7.kang@samsung.com>
  5. */
  6. #include <common.h>
  7. #include <asm/io.h>
  8. #include <asm/arch/watchdog.h>
  9. #define PRESCALER_VAL 255
  10. void wdt_stop(void)
  11. {
  12. struct s5p_watchdog *wdt =
  13. (struct s5p_watchdog *)samsung_get_base_watchdog();
  14. unsigned int wtcon;
  15. wtcon = readl(&wdt->wtcon);
  16. wtcon &= ~(WTCON_EN | WTCON_INT | WTCON_RESET);
  17. writel(wtcon, &wdt->wtcon);
  18. }
  19. void wdt_start(unsigned int timeout)
  20. {
  21. struct s5p_watchdog *wdt =
  22. (struct s5p_watchdog *)samsung_get_base_watchdog();
  23. unsigned int wtcon;
  24. wdt_stop();
  25. wtcon = readl(&wdt->wtcon);
  26. wtcon |= (WTCON_EN | WTCON_CLK(WTCON_CLK_128));
  27. wtcon &= ~WTCON_INT;
  28. wtcon |= WTCON_RESET;
  29. wtcon |= WTCON_PRESCALER(PRESCALER_VAL);
  30. writel(timeout, &wdt->wtdat);
  31. writel(timeout, &wdt->wtcnt);
  32. writel(wtcon, &wdt->wtcon);
  33. }