board.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. * Copyright (C) 2018, STMicroelectronics - All Rights Reserved
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause
  5. */
  6. #include <common.h>
  7. #include <dm.h>
  8. #include <asm/io.h>
  9. #include <asm/arch/ddr.h>
  10. #include <power/pmic.h>
  11. #include <power/stpmu1.h>
  12. #ifdef CONFIG_PMIC_STPMU1
  13. int board_ddr_power_init(void)
  14. {
  15. struct udevice *dev;
  16. int ret;
  17. ret = uclass_get_device_by_driver(UCLASS_PMIC,
  18. DM_GET_DRIVER(pmic_stpmu1), &dev);
  19. if (ret)
  20. /* No PMIC on board */
  21. return 0;
  22. /* Set LDO3 to sync mode */
  23. ret = pmic_reg_read(dev, STPMU1_LDOX_CTRL_REG(STPMU1_LDO3));
  24. if (ret < 0)
  25. return ret;
  26. ret &= ~STPMU1_LDO3_MODE;
  27. ret &= ~STPMU1_LDO12356_OUTPUT_MASK;
  28. ret |= STPMU1_LDO3_DDR_SEL << STPMU1_LDO12356_OUTPUT_SHIFT;
  29. ret = pmic_reg_write(dev, STPMU1_LDOX_CTRL_REG(STPMU1_LDO3),
  30. ret);
  31. if (ret < 0)
  32. return ret;
  33. /* Set BUCK2 to 1.35V */
  34. ret = pmic_clrsetbits(dev,
  35. STPMU1_BUCKX_CTRL_REG(STPMU1_BUCK2),
  36. STPMU1_BUCK_OUTPUT_MASK,
  37. STPMU1_BUCK2_1350000V);
  38. if (ret < 0)
  39. return ret;
  40. /* Enable BUCK2 and VREF */
  41. ret = pmic_clrsetbits(dev,
  42. STPMU1_BUCKX_CTRL_REG(STPMU1_BUCK2),
  43. STPMU1_BUCK_EN, STPMU1_BUCK_EN);
  44. if (ret < 0)
  45. return ret;
  46. mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
  47. ret = pmic_clrsetbits(dev, STPMU1_VREF_CTRL_REG,
  48. STPMU1_VREF_EN, STPMU1_VREF_EN);
  49. if (ret < 0)
  50. return ret;
  51. mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
  52. /* Enable LDO3 */
  53. ret = pmic_clrsetbits(dev,
  54. STPMU1_LDOX_CTRL_REG(STPMU1_LDO3),
  55. STPMU1_LDO_EN, STPMU1_LDO_EN);
  56. if (ret < 0)
  57. return ret;
  58. mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
  59. return 0;
  60. }
  61. #endif