imx8mq_cm.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright 2018 NXP
  4. */
  5. #include <common.h>
  6. #include <miiphy.h>
  7. #include <asm-generic/gpio.h>
  8. #include <asm/arch/imx8mq_pins.h>
  9. #include <asm/arch/sys_proto.h>
  10. #include <asm/arch/clock.h>
  11. DECLARE_GLOBAL_DATA_PTR;
  12. #define UART_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_FSEL1)
  13. #define WDOG_PAD_CTRL (PAD_CTL_DSE6 | PAD_CTL_HYS | PAD_CTL_PUE)
  14. static iomux_v3_cfg_t const wdog_pads[] = {
  15. IMX8MQ_PAD_GPIO1_IO02__WDOG1_WDOG_B | MUX_PAD_CTRL(WDOG_PAD_CTRL),
  16. };
  17. static iomux_v3_cfg_t const uart_pads[] = {
  18. IMX8MQ_PAD_UART1_RXD__UART1_RX | MUX_PAD_CTRL(UART_PAD_CTRL),
  19. IMX8MQ_PAD_UART1_TXD__UART1_TX | MUX_PAD_CTRL(UART_PAD_CTRL),
  20. };
  21. int board_early_init_f(void)
  22. {
  23. struct wdog_regs *wdog = (struct wdog_regs *)WDOG1_BASE_ADDR;
  24. imx_iomux_v3_setup_multiple_pads(wdog_pads, ARRAY_SIZE(wdog_pads));
  25. set_wdog_reset(wdog);
  26. imx_iomux_v3_setup_multiple_pads(uart_pads, ARRAY_SIZE(uart_pads));
  27. return 0;
  28. }
  29. static int setup_fec(void)
  30. {
  31. struct iomuxc_gpr_base_regs *gpr =
  32. (struct iomuxc_gpr_base_regs *)IOMUXC_GPR_BASE_ADDR;
  33. /* Use 125M anatop REF_CLK1 for ENET1, not from external */
  34. clrsetbits_le32(&gpr->gpr[1], BIT(13) | BIT(17), 0);
  35. return set_clk_enet(ENET_125MHZ);
  36. }
  37. int board_phy_config(struct phy_device *phydev)
  38. {
  39. /* enable rgmii rxc skew and phy mode select to RGMII copper */
  40. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x1f);
  41. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x8);
  42. phy_write(phydev, MDIO_DEVAD_NONE, 0x1d, 0x05);
  43. phy_write(phydev, MDIO_DEVAD_NONE, 0x1e, 0x100);
  44. if (phydev->drv->config)
  45. phydev->drv->config(phydev);
  46. return 0;
  47. }
  48. int board_init(void)
  49. {
  50. setup_fec();
  51. return 0;
  52. }
  53. int board_mmc_get_env_dev(int devno)
  54. {
  55. return devno;
  56. }
  57. int board_late_init(void)
  58. {
  59. if (IS_ENABLED(CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG)) {
  60. env_set("board_name", "imx8mq-cm");
  61. env_set("board_rev", "v2.0");
  62. }
  63. return 0;
  64. }