sysL1ICacheParity.c
上传用户:dqzhongke1
上传日期:2022-06-26
资源大小:667k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* sysL1ICacheParity.c - Motorola ads 85xx board L1 instruction cache parity */
  2. /*
  3.  * Copyright (c) 2003-2005 Wind River Systems, Inc.
  4.  *
  5.  * The right to copy, distribute or otherwise make use of this software
  6.  * may be licensed only pursuant to the terms of an applicable Wind River
  7.  * license agreement. No license to Wind River intellectual property rights
  8.  * is granted herein. All rights not licensed by Wind River are reserved
  9.  * by Wind River.
  10.  */
  11.  
  12. #include "copyright_wrs.h"
  13. /*
  14. modification history
  15. --------------------
  16. 01d,23mar05,mdo  Documentation fixes for apigen
  17. 01c,18aug04,dtr  Update names to reflect usage change.
  18. 01b,10jun04,dtr  Need to disable instruction cache before modifying parity
  19.                  bit.
  20. 01a,10jun04,dtr  Created. 
  21. */
  22.  
  23. /*
  24. DESCRIPTION
  25. INCLUDE FILES:
  26. */
  27. UINT instrParityCount=0;
  28. IMPORT void sysIParityHandler();
  29. IMPORT void sysIParityHandlerEnd();
  30. #ifdef INCLUDE_SHOW_ROUTINES
  31. void l1InstrParityErrorShow();
  32. #endif
  33. /*************************************************************************
  34. *
  35. * installL1ErrataParityErrorRecovery - install L1 parity error handler
  36. *
  37. * This routine installs the L1 parity error handler. The handler code is 
  38. * with the E500 cache library. Handler not used until IVOR1 set. 
  39. *
  40. * RETURNS: status
  41. *
  42. * ERRNO
  43. *
  44. * NOMANUAL
  45. */
  46. STATUS installL1ICacheParityErrorRecovery(void)
  47.     {
  48.     int key;
  49.     STATUS status;
  50.     GENERIC_LAYERED_EXC_INSTALL_DESC mchkParityDesc;
  51.     static char installErrMsg[] = "L1 Parity exception handler install has failed";
  52.     mchkParityDesc.funcStart = &sysIParityHandler;
  53.     mchkParityDesc.funcEnd = &sysIParityHandlerEnd;
  54.     mchkParityDesc.excOffset = _EXC_OFF_L1_PARITY;
  55.     mchkParityDesc.errExcOffset = _EXC_OFF_MACH;
  56.     mchkParityDesc.hdlrBase = NULL;
  57.     mchkParityDesc.hdlrCodeBase = NULL;
  58.     mchkParityDesc.forceBase = TRUE;
  59.     mchkParityDesc.excMsg = &installErrMsg[0];
  60.     /* Cautious should only be started from single thread */
  61.     key = intLock();
  62.     status = genericLayeredExcHdlrInstall(&mchkParityDesc);
  63.     intUnlock(key);
  64.     vxIvor1Set(_EXC_OFF_L1_PARITY);
  65.     cacheDisable(INSTRUCTION_CACHE);
  66.     vxL1CSR1Set(vxL1CSR1Get()|_PPC_L1CSR_CPE);
  67.     cacheEnable(INSTRUCTION_CACHE);
  68.     return status;
  69.     }
  70. #ifdef INCLUDE_SHOW_ROUTINES
  71. /***************************************************************************
  72. *
  73. * l1InstructionParityErrorShow - dump L1 instruction parity errors
  74. *
  75. * This routine prints out number of L1 instruction parity 
  76. * errors recovered from.
  77. *
  78. * RETURNS: N/A
  79. *
  80. * ERRNO
  81. */
  82. void l1InstrParityErrorShow(void)
  83.     {
  84.     printf("Number of L1 Instruction Parity Errors : %dn",instrParityCount);
  85.     }
  86. #endif /* INCLUDE_SHOW_ROUTINES */