fsl-soc.c 966 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Freescale SOC support functions
  4. *
  5. * Author: Scott Wood <scottwood@freescale.com>
  6. *
  7. * Copyright (c) 2007 Freescale Semiconductor, Inc.
  8. */
  9. #include "ops.h"
  10. #include "types.h"
  11. #include "fsl-soc.h"
  12. #include "stdio.h"
  13. static u32 prop_buf[MAX_PROP_LEN / 4];
  14. u32 *fsl_get_immr(void)
  15. {
  16. void *soc;
  17. unsigned long ret = 0;
  18. soc = find_node_by_devtype(NULL, "soc");
  19. if (soc) {
  20. int size;
  21. u32 naddr;
  22. size = getprop(soc, "#address-cells", prop_buf, MAX_PROP_LEN);
  23. if (size == 4)
  24. naddr = prop_buf[0];
  25. else
  26. naddr = 2;
  27. if (naddr != 1 && naddr != 2)
  28. goto err;
  29. size = getprop(soc, "ranges", prop_buf, MAX_PROP_LEN);
  30. if (size < 12)
  31. goto err;
  32. if (prop_buf[0] != 0)
  33. goto err;
  34. if (naddr == 2 && prop_buf[1] != 0)
  35. goto err;
  36. if (!dt_xlate_addr(soc, prop_buf + naddr, 8, &ret))
  37. ret = 0;
  38. }
  39. err:
  40. if (!ret)
  41. printf("fsl_get_immr: Failed to find immr base\r\n");
  42. return (u32 *)ret;
  43. }