sc_sps_1.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * SchulerControl GmbH, SC_SPS_1 module
  3. *
  4. * Copyright (C) 2012 Marek Vasut <marex@denx.de>
  5. * on behalf of DENX Software Engineering GmbH
  6. *
  7. * SPDX-License-Identifier: GPL-2.0+
  8. */
  9. #include <common.h>
  10. #include <asm/gpio.h>
  11. #include <asm/io.h>
  12. #include <asm/arch/imx-regs.h>
  13. #include <asm/arch/iomux-mx28.h>
  14. #include <asm/arch/clock.h>
  15. #include <asm/arch/sys_proto.h>
  16. #include <linux/mii.h>
  17. #include <miiphy.h>
  18. #include <netdev.h>
  19. #include <errno.h>
  20. DECLARE_GLOBAL_DATA_PTR;
  21. /*
  22. * Functions
  23. */
  24. int board_early_init_f(void)
  25. {
  26. /* IO0 clock at 480MHz */
  27. mxs_set_ioclk(MXC_IOCLK0, 480000);
  28. /* IO1 clock at 480MHz */
  29. mxs_set_ioclk(MXC_IOCLK1, 480000);
  30. /* SSP0 clock at 96MHz */
  31. mxs_set_sspclk(MXC_SSPCLK0, 96000, 0);
  32. /* SSP2 clock at 96MHz */
  33. mxs_set_sspclk(MXC_SSPCLK2, 96000, 0);
  34. #ifdef CONFIG_CMD_USB
  35. mxs_iomux_setup_pad(MX28_PAD_AUART1_CTS__USB0_OVERCURRENT);
  36. mxs_iomux_setup_pad(MX28_PAD_AUART2_TX__GPIO_3_9 |
  37. MXS_PAD_4MA | MXS_PAD_3V3 | MXS_PAD_NOPULL);
  38. gpio_direction_output(MX28_PAD_AUART2_TX__GPIO_3_9, 1);
  39. #endif
  40. return 0;
  41. }
  42. int board_init(void)
  43. {
  44. /* Adress of boot parameters */
  45. gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
  46. return 0;
  47. }
  48. int dram_init(void)
  49. {
  50. return mxs_dram_init();
  51. }
  52. #ifdef CONFIG_CMD_MMC
  53. int board_mmc_init(bd_t *bis)
  54. {
  55. return mxsmmc_initialize(bis, 0, NULL, NULL);
  56. }
  57. #endif
  58. #ifdef CONFIG_CMD_NET
  59. int board_eth_init(bd_t *bis)
  60. {
  61. struct mxs_clkctrl_regs *clkctrl_regs =
  62. (struct mxs_clkctrl_regs *)MXS_CLKCTRL_BASE;
  63. int ret;
  64. ret = cpu_eth_init(bis);
  65. clrsetbits_le32(&clkctrl_regs->hw_clkctrl_enet,
  66. CLKCTRL_ENET_TIME_SEL_MASK,
  67. CLKCTRL_ENET_TIME_SEL_RMII_CLK | CLKCTRL_ENET_CLK_OUT_EN);
  68. ret = fecmxc_initialize_multi(bis, 0, 0, MXS_ENET0_BASE);
  69. if (ret) {
  70. printf("FEC MXS: Unable to init FEC0\n");
  71. return ret;
  72. }
  73. ret = fecmxc_initialize_multi(bis, 1, 1, MXS_ENET1_BASE);
  74. if (ret) {
  75. printf("FEC MXS: Unable to init FEC1\n");
  76. return ret;
  77. }
  78. return ret;
  79. }
  80. #endif