setup.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /*
  2. * Display CPU info in /proc/cpuinfo.
  3. *
  4. * Copyright (C) 2003, Axis Communications AB.
  5. */
  6. #include <linux/seq_file.h>
  7. #include <linux/proc_fs.h>
  8. #include <linux/delay.h>
  9. #include <linux/param.h>
  10. #include <linux/i2c.h>
  11. #include <linux/platform_device.h>
  12. #ifdef CONFIG_PROC_FS
  13. #define HAS_FPU 0x0001
  14. #define HAS_MMU 0x0002
  15. #define HAS_ETHERNET100 0x0004
  16. #define HAS_TOKENRING 0x0008
  17. #define HAS_SCSI 0x0010
  18. #define HAS_ATA 0x0020
  19. #define HAS_USB 0x0040
  20. #define HAS_IRQ_BUG 0x0080
  21. #define HAS_MMU_BUG 0x0100
  22. struct cpu_info {
  23. char *cpu_model;
  24. unsigned short rev;
  25. unsigned short cache_size;
  26. unsigned short flags;
  27. };
  28. /* Some of these model are here for historical reasons only. */
  29. static struct cpu_info cpinfo[] = {
  30. {"ETRAX 1", 0, 0, 0},
  31. {"ETRAX 2", 1, 0, 0},
  32. {"ETRAX 3", 2, 0, 0},
  33. {"ETRAX 4", 3, 0, 0},
  34. {"Simulator", 7, 8, HAS_ETHERNET100 | HAS_SCSI | HAS_ATA},
  35. {"ETRAX 100", 8, 8, HAS_ETHERNET100 | HAS_SCSI | HAS_ATA | HAS_IRQ_BUG},
  36. {"ETRAX 100", 9, 8, HAS_ETHERNET100 | HAS_SCSI | HAS_ATA},
  37. {"ETRAX 100LX", 10, 8, HAS_ETHERNET100 | HAS_SCSI | HAS_ATA | HAS_USB
  38. | HAS_MMU | HAS_MMU_BUG},
  39. {"ETRAX 100LX v2", 11, 8, HAS_ETHERNET100 | HAS_SCSI | HAS_ATA | HAS_USB
  40. | HAS_MMU},
  41. #ifdef CONFIG_ETRAXFS
  42. {"ETRAX FS", 32, 32, HAS_ETHERNET100 | HAS_ATA | HAS_MMU},
  43. #else
  44. {"ARTPEC-3", 32, 32, HAS_ETHERNET100 | HAS_MMU},
  45. #endif
  46. {"Unknown", 0, 0, 0}
  47. };
  48. int show_cpuinfo(struct seq_file *m, void *v)
  49. {
  50. int i;
  51. int cpu = (int)v - 1;
  52. unsigned long revision;
  53. struct cpu_info *info;
  54. info = &cpinfo[ARRAY_SIZE(cpinfo) - 1];
  55. #ifdef CONFIG_SMP
  56. if (!cpu_online(cpu))
  57. return 0;
  58. #endif
  59. revision = rdvr();
  60. for (i = 0; i < ARRAY_SIZE(cpinfo); i++) {
  61. if (cpinfo[i].rev == revision) {
  62. info = &cpinfo[i];
  63. break;
  64. }
  65. }
  66. return seq_printf(m,
  67. "processor\t: %d\n"
  68. "cpu\t\t: CRIS\n"
  69. "cpu revision\t: %lu\n"
  70. "cpu model\t: %s\n"
  71. "cache size\t: %d KB\n"
  72. "fpu\t\t: %s\n"
  73. "mmu\t\t: %s\n"
  74. "mmu DMA bug\t: %s\n"
  75. "ethernet\t: %s Mbps\n"
  76. "token ring\t: %s\n"
  77. "scsi\t\t: %s\n"
  78. "ata\t\t: %s\n"
  79. "usb\t\t: %s\n"
  80. "bogomips\t: %lu.%02lu\n\n",
  81. cpu,
  82. revision,
  83. info->cpu_model,
  84. info->cache_size,
  85. info->flags & HAS_FPU ? "yes" : "no",
  86. info->flags & HAS_MMU ? "yes" : "no",
  87. info->flags & HAS_MMU_BUG ? "yes" : "no",
  88. info->flags & HAS_ETHERNET100 ? "10/100" : "10",
  89. info->flags & HAS_TOKENRING ? "4/16 Mbps" : "no",
  90. info->flags & HAS_SCSI ? "yes" : "no",
  91. info->flags & HAS_ATA ? "yes" : "no",
  92. info->flags & HAS_USB ? "yes" : "no",
  93. (loops_per_jiffy * HZ + 500) / 500000,
  94. ((loops_per_jiffy * HZ + 500) / 5000) % 100);
  95. }
  96. #endif /* CONFIG_PROC_FS */
  97. void show_etrax_copyright(void)
  98. {
  99. #ifdef CONFIG_ETRAXFS
  100. printk(KERN_INFO "Linux/CRISv32 port on ETRAX FS "
  101. "(C) 2003, 2004 Axis Communications AB\n");
  102. #else
  103. printk(KERN_INFO "Linux/CRISv32 port on ARTPEC-3 "
  104. "(C) 2003-2009 Axis Communications AB\n");
  105. #endif
  106. }
  107. static struct i2c_board_info __initdata i2c_info[] = {
  108. {I2C_BOARD_INFO("camblock", 0x43)},
  109. {I2C_BOARD_INFO("tmp100", 0x48)},
  110. {I2C_BOARD_INFO("tmp100", 0x4A)},
  111. {I2C_BOARD_INFO("tmp100", 0x4C)},
  112. {I2C_BOARD_INFO("tmp100", 0x4D)},
  113. {I2C_BOARD_INFO("tmp100", 0x4E)},
  114. #ifdef CONFIG_RTC_DRV_PCF8563
  115. {I2C_BOARD_INFO("pcf8563", 0x51)},
  116. #endif
  117. #ifdef CONFIG_ETRAX_VIRTUAL_GPIO
  118. {I2C_BOARD_INFO("vgpio", 0x20)},
  119. {I2C_BOARD_INFO("vgpio", 0x21)},
  120. #endif
  121. {I2C_BOARD_INFO("pca9536", 0x41)},
  122. {I2C_BOARD_INFO("fnp300", 0x40)},
  123. {I2C_BOARD_INFO("fnp300", 0x42)},
  124. {I2C_BOARD_INFO("adc101", 0x54)},
  125. };
  126. static struct i2c_board_info __initdata i2c_info2[] = {
  127. {I2C_BOARD_INFO("camblock", 0x43)},
  128. {I2C_BOARD_INFO("tmp100", 0x48)},
  129. {I2C_BOARD_INFO("tmp100", 0x4A)},
  130. {I2C_BOARD_INFO("tmp100", 0x4C)},
  131. {I2C_BOARD_INFO("tmp100", 0x4D)},
  132. {I2C_BOARD_INFO("tmp100", 0x4E)},
  133. #ifdef CONFIG_ETRAX_VIRTUAL_GPIO
  134. {I2C_BOARD_INFO("vgpio", 0x20)},
  135. {I2C_BOARD_INFO("vgpio", 0x21)},
  136. #endif
  137. {I2C_BOARD_INFO("pca9536", 0x41)},
  138. {I2C_BOARD_INFO("fnp300", 0x40)},
  139. {I2C_BOARD_INFO("fnp300", 0x42)},
  140. {I2C_BOARD_INFO("adc101", 0x54)},
  141. };
  142. static struct i2c_board_info __initdata i2c_info3[] = {
  143. {I2C_BOARD_INFO("adc101", 0x54)},
  144. };
  145. static int __init etrax_init(void)
  146. {
  147. i2c_register_board_info(0, i2c_info, ARRAY_SIZE(i2c_info));
  148. i2c_register_board_info(1, i2c_info2, ARRAY_SIZE(i2c_info2));
  149. i2c_register_board_info(2, i2c_info3, ARRAY_SIZE(i2c_info3));
  150. return 0;
  151. }
  152. arch_initcall(etrax_init);