system_manager_s10.c 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2016-2018 Intel Corporation <www.intel.com>
  4. *
  5. */
  6. #include <common.h>
  7. #include <asm/io.h>
  8. #include <asm/arch/system_manager.h>
  9. DECLARE_GLOBAL_DATA_PTR;
  10. static struct socfpga_system_manager *sysmgr_regs =
  11. (struct socfpga_system_manager *)SOCFPGA_SYSMGR_ADDRESS;
  12. /*
  13. * Configure all the pin muxes
  14. */
  15. void sysmgr_pinmux_init(void)
  16. {
  17. populate_sysmgr_pinmux();
  18. populate_sysmgr_fpgaintf_module();
  19. }
  20. /*
  21. * Populate the value for SYSMGR.FPGAINTF.MODULE based on pinmux setting.
  22. * The value is not wrote to SYSMGR.FPGAINTF.MODULE but
  23. * CONFIG_SYSMGR_ISWGRP_HANDOFF.
  24. */
  25. void populate_sysmgr_fpgaintf_module(void)
  26. {
  27. u32 handoff_val = 0;
  28. /* Enable the signal for those HPS peripherals that use FPGA. */
  29. if (readl(&sysmgr_regs->nandusefpga) == SYSMGR_FPGAINTF_USEFPGA)
  30. handoff_val |= SYSMGR_FPGAINTF_NAND;
  31. if (readl(&sysmgr_regs->sdmmcusefpga) == SYSMGR_FPGAINTF_USEFPGA)
  32. handoff_val |= SYSMGR_FPGAINTF_SDMMC;
  33. if (readl(&sysmgr_regs->spim0usefpga) == SYSMGR_FPGAINTF_USEFPGA)
  34. handoff_val |= SYSMGR_FPGAINTF_SPIM0;
  35. if (readl(&sysmgr_regs->spim1usefpga) == SYSMGR_FPGAINTF_USEFPGA)
  36. handoff_val |= SYSMGR_FPGAINTF_SPIM1;
  37. writel(handoff_val, &sysmgr_regs->fpgaintf_en_2);
  38. handoff_val = 0;
  39. if (readl(&sysmgr_regs->rgmii0usefpga) == SYSMGR_FPGAINTF_USEFPGA)
  40. handoff_val |= SYSMGR_FPGAINTF_EMAC0;
  41. if (readl(&sysmgr_regs->rgmii1usefpga) == SYSMGR_FPGAINTF_USEFPGA)
  42. handoff_val |= SYSMGR_FPGAINTF_EMAC1;
  43. if (readl(&sysmgr_regs->rgmii2usefpga) == SYSMGR_FPGAINTF_USEFPGA)
  44. handoff_val |= SYSMGR_FPGAINTF_EMAC2;
  45. writel(handoff_val, &sysmgr_regs->fpgaintf_en_3);
  46. }
  47. /*
  48. * Configure all the pin muxes
  49. */
  50. void populate_sysmgr_pinmux(void)
  51. {
  52. const u32 *sys_mgr_table_u32;
  53. unsigned int len, i;
  54. /* setup the pin sel */
  55. sysmgr_pinmux_table_sel(&sys_mgr_table_u32, &len);
  56. for (i = 0; i < len; i = i + 2) {
  57. writel(sys_mgr_table_u32[i + 1],
  58. sys_mgr_table_u32[i] + (u8 *)&sysmgr_regs->pinsel0[0]);
  59. }
  60. /* setup the pin ctrl */
  61. sysmgr_pinmux_table_ctrl(&sys_mgr_table_u32, &len);
  62. for (i = 0; i < len; i = i + 2) {
  63. writel(sys_mgr_table_u32[i + 1],
  64. sys_mgr_table_u32[i] + (u8 *)&sysmgr_regs->ioctrl0[0]);
  65. }
  66. /* setup the fpga use */
  67. sysmgr_pinmux_table_fpga(&sys_mgr_table_u32, &len);
  68. for (i = 0; i < len; i = i + 2) {
  69. writel(sys_mgr_table_u32[i + 1],
  70. sys_mgr_table_u32[i] +
  71. (u8 *)&sysmgr_regs->rgmii0usefpga);
  72. }
  73. /* setup the IO delay */
  74. sysmgr_pinmux_table_delay(&sys_mgr_table_u32, &len);
  75. for (i = 0; i < len; i = i + 2) {
  76. writel(sys_mgr_table_u32[i + 1],
  77. sys_mgr_table_u32[i] + (u8 *)&sysmgr_regs->iodelay0[0]);
  78. }
  79. }