spl.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /*
  2. * Copyright (C) 2013 Atmel Corporation
  3. * Bo Shen <voice.shen@atmel.com>
  4. *
  5. * SPDX-License-Identifier: GPL-2.0+
  6. */
  7. #include <common.h>
  8. #include <asm/io.h>
  9. #include <asm/arch/at91_common.h>
  10. #include <asm/arch/at91_pmc.h>
  11. #include <asm/arch/at91_wdt.h>
  12. #include <asm/arch/clk.h>
  13. #include <spl.h>
  14. static void at91_disable_wdt(void)
  15. {
  16. struct at91_wdt *wdt = (struct at91_wdt *)ATMEL_BASE_WDT;
  17. writel(AT91_WDT_MR_WDDIS, &wdt->mr);
  18. }
  19. void at91_plla_init(u32 pllar)
  20. {
  21. struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
  22. writel(pllar, &pmc->pllar);
  23. while (!(readl(&pmc->sr) & (AT91_PMC_LOCKA | AT91_PMC_MCKRDY)))
  24. ;
  25. }
  26. void at91_mck_init(u32 mckr)
  27. {
  28. struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
  29. u32 tmp;
  30. tmp = readl(&pmc->mckr);
  31. tmp &= ~(AT91_PMC_MCKR_PRES_MASK |
  32. AT91_PMC_MCKR_MDIV_MASK |
  33. AT91_PMC_MCKR_PLLADIV_2);
  34. tmp |= mckr & (AT91_PMC_MCKR_PRES_MASK |
  35. AT91_PMC_MCKR_MDIV_MASK |
  36. AT91_PMC_MCKR_PLLADIV_2);
  37. writel(tmp, &pmc->mckr);
  38. while (!(readl(&pmc->sr) & AT91_PMC_MCKRDY))
  39. ;
  40. }
  41. u32 spl_boot_device(void)
  42. {
  43. #ifdef CONFIG_SYS_USE_MMC
  44. return BOOT_DEVICE_MMC1;
  45. #endif
  46. return BOOT_DEVICE_NONE;
  47. }
  48. u32 spl_boot_mode(void)
  49. {
  50. switch (spl_boot_device()) {
  51. #ifdef CONFIG_SYS_USE_MMC
  52. case BOOT_DEVICE_MMC1:
  53. return MMCSD_MODE_FAT;
  54. break;
  55. #endif
  56. case BOOT_DEVICE_NONE:
  57. default:
  58. hang();
  59. }
  60. }
  61. void s_init(void)
  62. {
  63. /* disable watchdog */
  64. at91_disable_wdt();
  65. /* PMC configuration */
  66. at91_pmc_init();
  67. at91_clock_init(CONFIG_SYS_AT91_MAIN_CLOCK);
  68. timer_init();
  69. board_early_init_f();
  70. preloader_console_init();
  71. mem_init();
  72. }