spi.c 830 B

12345678910111213141516171819202122232425262728293031
  1. // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
  2. /*
  3. * Copyright (c) 2018 Microsemi Coprporation
  4. */
  5. #include <common.h>
  6. #include <asm/io.h>
  7. #include <spi.h>
  8. void external_cs_manage(struct udevice *dev, bool enable)
  9. {
  10. u32 cs = spi_chip_select(dev);
  11. /* IF_SI0_OWNER, select the owner of the SI interface
  12. * Encoding: 0: SI Slave
  13. * 1: SI Boot Master
  14. * 2: SI Master Controller
  15. */
  16. if (!enable) {
  17. writel(ICPU_SW_MODE_SW_PIN_CTRL_MODE |
  18. ICPU_SW_MODE_SW_SPI_CS(BIT(cs)),
  19. BASE_CFG + ICPU_SW_MODE);
  20. clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
  21. ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
  22. ICPU_GENERAL_CTRL_IF_SI_OWNER(2));
  23. } else {
  24. writel(0, BASE_CFG + ICPU_SW_MODE);
  25. clrsetbits_le32(BASE_CFG + ICPU_GENERAL_CTRL,
  26. ICPU_GENERAL_CTRL_IF_SI_OWNER_M,
  27. ICPU_GENERAL_CTRL_IF_SI_OWNER(1));
  28. }
  29. }