cpu-imx35.c 896 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * MX35 CPU type detection
  4. *
  5. * Copyright (c) 2009 Daniel Mack <[email protected]>
  6. */
  7. #include <linux/module.h>
  8. #include <linux/of_address.h>
  9. #include <linux/io.h>
  10. #include "hardware.h"
  11. #include "iim.h"
  12. static int mx35_cpu_rev = -1;
  13. static int mx35_read_cpu_rev(void)
  14. {
  15. void __iomem *iim_base;
  16. struct device_node *np;
  17. u32 rev;
  18. np = of_find_compatible_node(NULL, NULL, "fsl,imx35-iim");
  19. iim_base = of_iomap(np, 0);
  20. of_node_put(np);
  21. BUG_ON(!iim_base);
  22. rev = imx_readl(iim_base + MXC_IIMSREV);
  23. switch (rev) {
  24. case 0x00:
  25. return IMX_CHIP_REVISION_1_0;
  26. case 0x10:
  27. return IMX_CHIP_REVISION_2_0;
  28. case 0x11:
  29. return IMX_CHIP_REVISION_2_1;
  30. default:
  31. return IMX_CHIP_REVISION_UNKNOWN;
  32. }
  33. }
  34. int mx35_revision(void)
  35. {
  36. if (mx35_cpu_rev == -1)
  37. mx35_cpu_rev = mx35_read_cpu_rev();
  38. return mx35_cpu_rev;
  39. }
  40. EXPORT_SYMBOL(mx35_revision);