1 /* 2 * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef _CMPU_HW_DEFS_H 8 #define _CMPU_HW_DEFS_H 9 10 #include "cc_regs.h" 11 #include "dx_host.h" 12 #include "cc_hal_plat.h" 13 14 15 #define CC_PROD_AIB_ADDR_REG_READ_ACCESS_BIT_SHIFT 0x10UL 16 #define CC_PROD_AIB_ADDR_REG_WRITE_ACCESS_BIT_SHIFT 0x11UL 17 18 #define CC_PROD_ROT32(val) ( (val) >> 16 | (val) << 16 ) 19 #define CC_PROD_CONVERT_WORD_END(val) ( ((CC_PROD_ROT32((val)) & 0xff00ff00UL) >> 8) | ((CC_PROD_ROT32((val)) & 0x00ff00ffUL) << 8) ) 20 #ifdef BIG__ENDIAN 21 /* inverse the bytes order in a word */ 22 #define CC_PROD_SET_WORD_AS_LE(val) ( CC_PROD_CONVERT_WORD_END(val) ) 23 #define CC_PROD_SET_WORD_AS_BE(val) (val) 24 #else 25 #define CC_PROD_SET_WORD_AS_LE(val) (val) 26 #define CC_PROD_SET_WORD_AS_BE(val) ( CC_PROD_CONVERT_WORD_END(val) ) 27 #endif 28 29 /* Poll on the AIB bit */ 30 #define CC_PROD_WAIT_ON_AIB_PROG_COMP_BIT() \ 31 do {\ 32 uint32_t regVal;\ 33 do {\ 34 regVal = CC_HAL_READ_REGISTER(CC_REG_OFFSET(HOST_RGF, AIB_FUSE_PROG_COMPLETED));\ 35 }while( !(regVal & 0x1 ));\ 36 }while(0) 37 38 /******************************************************* OTP defines ******************************************************/ 39 /* read a word directly from OTP memory */ 40 #define CC_PROD_OTP_READ(otpData, otpWordOffset) \ 41 do { \ 42 otpData = CC_HAL_READ_REGISTER( CC_OTP_BASE_ADDR + ((otpWordOffset)*CC_32BIT_WORD_SIZE)); \ 43 }while(0) 44 45 /* write a word directly from OTP memory */ 46 #define CC_PROD_OTP_WRITE(otpData, otpWordOffset) \ 47 do { \ 48 CC_HAL_WRITE_REGISTER(( CC_OTP_BASE_ADDR + ((otpWordOffset)*CC_32BIT_WORD_SIZE)), otpData); \ 49 CC_PROD_WAIT_ON_AIB_PROG_COMP_BIT(); \ 50 }while(0) 51 52 53 #define CC_PROD_OTP_WRITE_VERIFY_WORD(otpWordOffset, wordValue, rc) {\ 54 uint32_t otpActualVal = 0;\ 55 if (wordValue != 0x0) { \ 56 CC_PROD_OTP_WRITE((wordValue), (otpWordOffset));\ 57 CC_PROD_OTP_READ(otpActualVal, (otpWordOffset));\ 58 if (otpActualVal !=(wordValue)) {\ 59 rc = CC_PROD_HAL_FATAL_ERR;\ 60 } else { \ 61 rc = CC_OK;\ 62 }\ 63 } \ 64 rc = CC_OK;\ 65 } 66 67 #define CC_PROD_OTP_WRITE_VERIFY_WORD_BUFF(otpWordOffset, wordBuff, buffWordSize, rc) {\ 68 uint32_t ii = 0;\ 69 for (ii =0; ii < (buffWordSize); ii++) { \ 70 CC_PROD_OTP_WRITE_VERIFY_WORD((otpWordOffset+ii), wordBuff[ii], rc); \ 71 if (rc != CC_OK) { \ 72 break; \ 73 } \ 74 } \ 75 } 76 77 78 #define SET_OTP_MANUFACTURE_FLAG(manufactorWord, bitField, fieldValue) \ 79 BITFIELD_SET(manufactorWord, \ 80 CC_OTP_MANUFACTURE_FLAG_ ## bitField ## _BIT_SHIFT, \ 81 CC_OTP_MANUFACTURE_FLAG_ ## bitField ## _BIT_SIZE, \ 82 fieldValue) 83 84 #define SET_OTP_OEM_FLAG(manufactorWord, bitField, fieldValue) \ 85 BITFIELD_SET(manufactorWord, \ 86 CC_OTP_OEM_FLAG_ ## bitField ## _BIT_SHIFT, \ 87 CC_OTP_OEM_FLAG_ ## bitField ## _BIT_SIZE, \ 88 fieldValue) 89 90 #define IS_HBK0_USED(icvWord) (BITFIELD_GET(icvWord, \ 91 CC_OTP_MANUFACTURE_FLAG_HBK0_NOT_IN_USE_BIT_SHIFT, \ 92 CC_OTP_MANUFACTURE_FLAG_HBK0_NOT_IN_USE_BIT_SIZE) == 0) 93 94 95 96 #endif // _PROD_HW_DEFS_H 97 98