ibm_emac_debug.c 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. /*
  2. * ibm_ocp_debug.c
  3. *
  4. * This has all the debug routines that where in *_enet.c
  5. *
  6. * Armin Kuster akuster@mvista.com
  7. * April , 2002
  8. *
  9. * Copyright 2002 MontaVista Softare Inc.
  10. *
  11. * This program is free software; you can redistribute it and/or modify it
  12. * under the terms of the GNU General Public License as published by the
  13. * Free Software Foundation; either version 2 of the License, or (at your
  14. * option) any later version.
  15. */
  16. #include <linux/config.h>
  17. #include <linux/kernel.h>
  18. #include <linux/netdevice.h>
  19. #include <asm/io.h>
  20. #include "ibm_ocp_mal.h"
  21. #include "ibm_ocp_zmii.h"
  22. #include "ibm_ocp_enet.h"
  23. extern int emac_phy_read(struct net_device *dev, int mii_id, int reg);
  24. void emac_phy_dump(struct net_device *dev)
  25. {
  26. struct ocp_enet_private *fep = dev->priv;
  27. unsigned long i;
  28. uint data;
  29. printk(KERN_DEBUG " Prepare for Phy dump....\n");
  30. for (i = 0; i < 0x1A; i++) {
  31. data = emac_phy_read(dev, fep->mii_phy_addr, i);
  32. printk(KERN_DEBUG "Phy reg 0x%lx ==> %4x\n", i, data);
  33. if (i == 0x07)
  34. i = 0x0f;
  35. }
  36. }
  37. void emac_desc_dump(struct net_device *dev)
  38. {
  39. struct ocp_enet_private *fep = dev->priv;
  40. int curr_slot;
  41. printk(KERN_DEBUG
  42. "dumping the receive descriptors: current slot is %d\n",
  43. fep->rx_slot);
  44. for (curr_slot = 0; curr_slot < NUM_RX_BUFF; curr_slot++) {
  45. printk(KERN_DEBUG
  46. "Desc %02d: status 0x%04x, length %3d, addr 0x%x\n",
  47. curr_slot, fep->rx_desc[curr_slot].ctrl,
  48. fep->rx_desc[curr_slot].data_len,
  49. (unsigned int)fep->rx_desc[curr_slot].data_ptr);
  50. }
  51. }
  52. void emac_mac_dump(struct net_device *dev)
  53. {
  54. struct ocp_enet_private *fep = dev->priv;
  55. volatile emac_t *emacp = fep->emacp;
  56. printk(KERN_DEBUG "EMAC DEBUG ********** \n");
  57. printk(KERN_DEBUG "EMAC_M0 ==> 0x%x\n", in_be32(&emacp->em0mr0));
  58. printk(KERN_DEBUG "EMAC_M1 ==> 0x%x\n", in_be32(&emacp->em0mr1));
  59. printk(KERN_DEBUG "EMAC_TXM0==> 0x%x\n", in_be32(&emacp->em0tmr0));
  60. printk(KERN_DEBUG "EMAC_TXM1==> 0x%x\n", in_be32(&emacp->em0tmr1));
  61. printk(KERN_DEBUG "EMAC_RXM ==> 0x%x\n", in_be32(&emacp->em0rmr));
  62. printk(KERN_DEBUG "EMAC_ISR ==> 0x%x\n", in_be32(&emacp->em0isr));
  63. printk(KERN_DEBUG "EMAC_IER ==> 0x%x\n", in_be32(&emacp->em0iser));
  64. printk(KERN_DEBUG "EMAC_IAH ==> 0x%x\n", in_be32(&emacp->em0iahr));
  65. printk(KERN_DEBUG "EMAC_IAL ==> 0x%x\n", in_be32(&emacp->em0ialr));
  66. printk(KERN_DEBUG "EMAC_VLAN_TPID_REG ==> 0x%x\n",
  67. in_be32(&emacp->em0vtpid));
  68. }
  69. void emac_mal_dump(struct net_device *dev)
  70. {
  71. struct ibm_ocp_mal *mal = ((struct ocp_enet_private *)dev->priv)->mal;
  72. printk(KERN_DEBUG " MAL DEBUG ********** \n");
  73. printk(KERN_DEBUG " MCR ==> 0x%x\n",
  74. (unsigned int)get_mal_dcrn(mal, DCRN_MALCR));
  75. printk(KERN_DEBUG " ESR ==> 0x%x\n",
  76. (unsigned int)get_mal_dcrn(mal, DCRN_MALESR));
  77. printk(KERN_DEBUG " IER ==> 0x%x\n",
  78. (unsigned int)get_mal_dcrn(mal, DCRN_MALIER));
  79. #ifdef CONFIG_40x
  80. printk(KERN_DEBUG " DBR ==> 0x%x\n",
  81. (unsigned int)get_mal_dcrn(mal, DCRN_MALDBR));
  82. #endif /* CONFIG_40x */
  83. printk(KERN_DEBUG " TXCASR ==> 0x%x\n",
  84. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXCASR));
  85. printk(KERN_DEBUG " TXCARR ==> 0x%x\n",
  86. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXCARR));
  87. printk(KERN_DEBUG " TXEOBISR ==> 0x%x\n",
  88. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXEOBISR));
  89. printk(KERN_DEBUG " TXDEIR ==> 0x%x\n",
  90. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXDEIR));
  91. printk(KERN_DEBUG " RXCASR ==> 0x%x\n",
  92. (unsigned int)get_mal_dcrn(mal, DCRN_MALRXCASR));
  93. printk(KERN_DEBUG " RXCARR ==> 0x%x\n",
  94. (unsigned int)get_mal_dcrn(mal, DCRN_MALRXCARR));
  95. printk(KERN_DEBUG " RXEOBISR ==> 0x%x\n",
  96. (unsigned int)get_mal_dcrn(mal, DCRN_MALRXEOBISR));
  97. printk(KERN_DEBUG " RXDEIR ==> 0x%x\n",
  98. (unsigned int)get_mal_dcrn(mal, DCRN_MALRXDEIR));
  99. printk(KERN_DEBUG " TXCTP0R ==> 0x%x\n",
  100. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXCTP0R));
  101. printk(KERN_DEBUG " TXCTP1R ==> 0x%x\n",
  102. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXCTP1R));
  103. printk(KERN_DEBUG " TXCTP2R ==> 0x%x\n",
  104. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXCTP2R));
  105. printk(KERN_DEBUG " TXCTP3R ==> 0x%x\n",
  106. (unsigned int)get_mal_dcrn(mal, DCRN_MALTXCTP3R));
  107. printk(KERN_DEBUG " RXCTP0R ==> 0x%x\n",
  108. (unsigned int)get_mal_dcrn(mal, DCRN_MALRXCTP0R));
  109. printk(KERN_DEBUG " RXCTP1R ==> 0x%x\n",
  110. (unsigned int)get_mal_dcrn(mal, DCRN_MALRXCTP1R));
  111. printk(KERN_DEBUG " RCBS0 ==> 0x%x\n",
  112. (unsigned int)get_mal_dcrn(mal, DCRN_MALRCBS0));
  113. printk(KERN_DEBUG " RCBS1 ==> 0x%x\n",
  114. (unsigned int)get_mal_dcrn(mal, DCRN_MALRCBS1));
  115. }
  116. void emac_serr_dump_0(struct net_device *dev)
  117. {
  118. struct ibm_ocp_mal *mal = ((struct ocp_enet_private *)dev->priv)->mal;
  119. unsigned long int mal_error, plb_error, plb_addr;
  120. mal_error = get_mal_dcrn(mal, DCRN_MALESR);
  121. printk(KERN_DEBUG "ppc405_eth_serr: %s channel %ld \n",
  122. (mal_error & 0x40000000) ? "Receive" :
  123. "Transmit", (mal_error & 0x3e000000) >> 25);
  124. printk(KERN_DEBUG " ----- latched error -----\n");
  125. if (mal_error & MALESR_DE)
  126. printk(KERN_DEBUG " DE: descriptor error\n");
  127. if (mal_error & MALESR_OEN)
  128. printk(KERN_DEBUG " ONE: OPB non-fullword error\n");
  129. if (mal_error & MALESR_OTE)
  130. printk(KERN_DEBUG " OTE: OPB timeout error\n");
  131. if (mal_error & MALESR_OSE)
  132. printk(KERN_DEBUG " OSE: OPB slave error\n");
  133. if (mal_error & MALESR_PEIN) {
  134. plb_error = mfdcr(DCRN_PLB0_BESR);
  135. printk(KERN_DEBUG
  136. " PEIN: PLB error, PLB0_BESR is 0x%x\n",
  137. (unsigned int)plb_error);
  138. plb_addr = mfdcr(DCRN_PLB0_BEAR);
  139. printk(KERN_DEBUG
  140. " PEIN: PLB error, PLB0_BEAR is 0x%x\n",
  141. (unsigned int)plb_addr);
  142. }
  143. }
  144. void emac_serr_dump_1(struct net_device *dev)
  145. {
  146. struct ibm_ocp_mal *mal = ((struct ocp_enet_private *)dev->priv)->mal;
  147. int mal_error = get_mal_dcrn(mal, DCRN_MALESR);
  148. printk(KERN_DEBUG " ----- cumulative errors -----\n");
  149. if (mal_error & MALESR_DEI)
  150. printk(KERN_DEBUG " DEI: descriptor error interrupt\n");
  151. if (mal_error & MALESR_ONEI)
  152. printk(KERN_DEBUG " OPB non-fullword error interrupt\n");
  153. if (mal_error & MALESR_OTEI)
  154. printk(KERN_DEBUG " OTEI: timeout error interrupt\n");
  155. if (mal_error & MALESR_OSEI)
  156. printk(KERN_DEBUG " OSEI: slave error interrupt\n");
  157. if (mal_error & MALESR_PBEI)
  158. printk(KERN_DEBUG " PBEI: PLB bus error interrupt\n");
  159. }
  160. void emac_err_dump(struct net_device *dev, int em0isr)
  161. {
  162. printk(KERN_DEBUG "%s: on-chip ethernet error:\n", dev->name);
  163. if (em0isr & EMAC_ISR_OVR)
  164. printk(KERN_DEBUG " OVR: overrun\n");
  165. if (em0isr & EMAC_ISR_PP)
  166. printk(KERN_DEBUG " PP: control pause packet\n");
  167. if (em0isr & EMAC_ISR_BP)
  168. printk(KERN_DEBUG " BP: packet error\n");
  169. if (em0isr & EMAC_ISR_RP)
  170. printk(KERN_DEBUG " RP: runt packet\n");
  171. if (em0isr & EMAC_ISR_SE)
  172. printk(KERN_DEBUG " SE: short event\n");
  173. if (em0isr & EMAC_ISR_ALE)
  174. printk(KERN_DEBUG " ALE: odd number of nibbles in packet\n");
  175. if (em0isr & EMAC_ISR_BFCS)
  176. printk(KERN_DEBUG " BFCS: bad FCS\n");
  177. if (em0isr & EMAC_ISR_PTLE)
  178. printk(KERN_DEBUG " PTLE: oversized packet\n");
  179. if (em0isr & EMAC_ISR_ORE)
  180. printk(KERN_DEBUG
  181. " ORE: packet length field > max allowed LLC\n");
  182. if (em0isr & EMAC_ISR_IRE)
  183. printk(KERN_DEBUG " IRE: In Range error\n");
  184. if (em0isr & EMAC_ISR_DBDM)
  185. printk(KERN_DEBUG " DBDM: xmit error or SQE\n");
  186. if (em0isr & EMAC_ISR_DB0)
  187. printk(KERN_DEBUG " DB0: xmit error or SQE on TX channel 0\n");
  188. if (em0isr & EMAC_ISR_SE0)
  189. printk(KERN_DEBUG
  190. " SE0: Signal Quality Error test failure from TX channel 0\n");
  191. if (em0isr & EMAC_ISR_TE0)
  192. printk(KERN_DEBUG " TE0: xmit channel 0 aborted\n");
  193. if (em0isr & EMAC_ISR_DB1)
  194. printk(KERN_DEBUG " DB1: xmit error or SQE on TX channel \n");
  195. if (em0isr & EMAC_ISR_SE1)
  196. printk(KERN_DEBUG
  197. " SE1: Signal Quality Error test failure from TX channel 1\n");
  198. if (em0isr & EMAC_ISR_TE1)
  199. printk(KERN_DEBUG " TE1: xmit channel 1 aborted\n");
  200. if (em0isr & EMAC_ISR_MOS)
  201. printk(KERN_DEBUG " MOS\n");
  202. if (em0isr & EMAC_ISR_MOF)
  203. printk(KERN_DEBUG " MOF\n");
  204. emac_mac_dump(dev);
  205. emac_mal_dump(dev);
  206. }