boot-mode-ld20.c 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright (C) 2016 Masahiro Yamada <yamada.masahiro@socionext.com>
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <spl.h>
  8. #include <linux/io.h>
  9. #include "../sg-regs.h"
  10. #include "../soc-info.h"
  11. #include "boot-device.h"
  12. static struct boot_device_info boot_device_table[] = {
  13. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 128KB, Addr 4)"},
  14. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 4)"},
  15. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 128KB, Addr 5)"},
  16. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 128KB, Addr 5)"},
  17. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 256KB, Addr 5)"},
  18. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 256KB, Addr 5)"},
  19. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, EraseSize 512KB, Addr 5)"},
  20. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, EraseSize 512KB, Addr 5)"},
  21. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 128KB, Addr 4)"},
  22. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 4)"},
  23. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 128KB, Addr 5)"},
  24. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 128KB, Addr 5)"},
  25. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 256KB, Addr 5)"},
  26. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 256KB, Addr 5)"},
  27. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, EraseSize 512KB, Addr 5)"},
  28. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, EraseSize 512KB, Addr 5)"},
  29. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, ONFI, Addr 4)"},
  30. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI, Addr 4)"},
  31. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 8, ONFI, Addr 5)"},
  32. {BOOT_DEVICE_NAND, "NAND (Mirror 8, ECC 16, ONFI, Addr 5)"},
  33. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, ONFI Addr 4)"},
  34. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI Addr 4)"},
  35. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 8, ONFI Addr 5)"},
  36. {BOOT_DEVICE_NAND, "NAND (Mirror 1, ECC 16, ONFI Addr 5)"},
  37. {BOOT_DEVICE_MMC1, "eMMC (Legacy, 4bit, 1.8V, Training Off)"},
  38. {BOOT_DEVICE_MMC1, "eMMC (Legacy, 4bit, 1.8V, Training On)"},
  39. {BOOT_DEVICE_MMC1, "eMMC (Legacy, 8bit, 1.8V, Training Off)"},
  40. {BOOT_DEVICE_MMC1, "eMMC (Legacy, 8bit, 1.8V, Training On)"},
  41. {BOOT_DEVICE_MMC1, "eMMC (High Speed SDR, 8bit, 1.8V, Training Off)"},
  42. {BOOT_DEVICE_MMC1, "eMMC (High Speed SDR, 8bit, 1.8V, Training On)"},
  43. {BOOT_DEVICE_MMC1, "eMMC (Legacy, 4bit, 1.8V, Training Off)"},
  44. {BOOT_DEVICE_NOR, "NOR (XECS1)"},
  45. };
  46. static int get_boot_mode_sel(void)
  47. {
  48. return (readl(SG_PINMON0) >> 1) & 0x1f;
  49. }
  50. u32 uniphier_ld20_boot_device(void)
  51. {
  52. int boot_mode;
  53. u32 usb_boot_mask;
  54. switch (uniphier_get_soc_type()) {
  55. #if defined(CONFIG_ARCH_UNIPHIER_LD11)
  56. case SOC_UNIPHIER_LD11:
  57. usb_boot_mask = 0x00000080;
  58. break;
  59. #endif
  60. #if defined(CONFIG_ARCH_UNIPHIER_LD20)
  61. case SOC_UNIPHIER_LD20:
  62. usb_boot_mask = 0x00000780;
  63. break;
  64. #endif
  65. default:
  66. BUG();
  67. }
  68. if (~readl(SG_PINMON0) & usb_boot_mask)
  69. return BOOT_DEVICE_USB;
  70. boot_mode = get_boot_mode_sel();
  71. return boot_device_table[boot_mode].type;
  72. }
  73. void uniphier_ld20_boot_mode_show(void)
  74. {
  75. int mode_sel, i;
  76. mode_sel = get_boot_mode_sel();
  77. puts("Boot Mode Pin:\n");
  78. for (i = 0; i < ARRAY_SIZE(boot_device_table); i++)
  79. printf(" %c %02x %s\n", i == mode_sel ? '*' : ' ', i,
  80. boot_device_table[i].info);
  81. }