cadmus.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Copyright 2004, 2011 Freescale Semiconductor.
  4. */
  5. #include <common.h>
  6. /*
  7. * CADMUS Board System Registers
  8. */
  9. #ifndef CONFIG_SYS_CADMUS_BASE_REG
  10. #define CONFIG_SYS_CADMUS_BASE_REG (CADMUS_BASE_ADDR + 0x4000)
  11. #endif
  12. typedef struct cadmus_reg {
  13. u_char cm_ver; /* Board version */
  14. u_char cm_csr; /* General control/status */
  15. u_char cm_rst; /* Reset control */
  16. u_char cm_hsclk; /* High speed clock */
  17. u_char cm_hsxclk; /* High speed clock extended */
  18. u_char cm_led; /* LED data */
  19. u_char cm_pci; /* PCI control/status */
  20. u_char cm_dma; /* DMA control */
  21. u_char cm_reserved[248]; /* Total 256 bytes */
  22. } cadmus_reg_t;
  23. unsigned int
  24. get_board_version(void)
  25. {
  26. volatile cadmus_reg_t *cadmus = (cadmus_reg_t *)CONFIG_SYS_CADMUS_BASE_REG;
  27. return cadmus->cm_ver;
  28. }
  29. unsigned long
  30. get_clock_freq(void)
  31. {
  32. volatile cadmus_reg_t *cadmus = (cadmus_reg_t *)CONFIG_SYS_CADMUS_BASE_REG;
  33. uint pci1_speed = (cadmus->cm_pci >> 2) & 0x3; /* PSPEED in [4:5] */
  34. if (pci1_speed == 0) {
  35. return 33333333;
  36. } else if (pci1_speed == 1) {
  37. return 66666666;
  38. } else {
  39. /* Really, unknown. Be safe? */
  40. return 33333333;
  41. }
  42. }
  43. unsigned int
  44. get_pci_slot(void)
  45. {
  46. volatile cadmus_reg_t *cadmus = (cadmus_reg_t *)CONFIG_SYS_CADMUS_BASE_REG;
  47. /*
  48. * PCI slot in USER bits CSR[6:7] by convention.
  49. */
  50. return ((cadmus->cm_csr >> 6) & 0x3) + 1;
  51. }
  52. unsigned int
  53. get_pci_dual(void)
  54. {
  55. volatile cadmus_reg_t *cadmus = (cadmus_reg_t *)CONFIG_SYS_CADMUS_BASE_REG;
  56. /*
  57. * PCI DUAL in CM_PCI[3]
  58. */
  59. return cadmus->cm_pci & 0x10;
  60. }