cadmus.c 1.6 KB

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