blob: 377f08e1089eb86730e2ea3784fbb6163ec8e07b [file] [log] [blame]
/******************************************************************************
* Filename: hw_pka_h
* Revised: 2018-05-14 12:24:52 +0200 (Mon, 14 May 2018)
* Revision: 51990
*
* Copyright (c) 2015 - 2017, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1) Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2) Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3) Neither the name of the ORGANIZATION nor the names of its contributors may
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#ifndef __HW_PKA_H__
#define __HW_PKA_H__
//*****************************************************************************
//
// This section defines the register offsets of
// PKA component
//
//*****************************************************************************
// PKA Vector A Address
#define PKA_O_APTR 0x00000000
// PKA Vector B Address
#define PKA_O_BPTR 0x00000004
// PKA Vector C Address
#define PKA_O_CPTR 0x00000008
// PKA Vector D Address
#define PKA_O_DPTR 0x0000000C
// PKA Vector A Length
#define PKA_O_ALENGTH 0x00000010
// PKA Vector B Length
#define PKA_O_BLENGTH 0x00000014
// PKA Bit Shift Value
#define PKA_O_SHIFT 0x00000018
// PKA Function
#define PKA_O_FUNCTION 0x0000001C
// PKA compare result
#define PKA_O_COMPARE 0x00000020
// PKA most-significant-word of result vector
#define PKA_O_MSW 0x00000024
// PKA most-significant-word of divide remainder
#define PKA_O_DIVMSW 0x00000028
// PKA sequencer control and status register
#define PKA_O_SEQCTRL 0x000000C8
// PKA hardware options register
#define PKA_O_OPTIONS 0x000000F4
// PKA firmware revision and capabilities register
#define PKA_O_FWREV 0x000000F8
// PKA hardware revision register
#define PKA_O_HWREV 0x000000FC
//*****************************************************************************
//
// Register: PKA_O_APTR
//
//*****************************************************************************
// Field: [10:0] APTR
//
// This register specifies the location of vector A within the PKA RAM. Vectors
// are identified through the location of their least-significant 32-bit word.
// Note that bit [0] must be zero to ensure that the vector starts at an 8-byte
// boundary.
#define PKA_APTR_APTR_W 11
#define PKA_APTR_APTR_M 0x000007FF
#define PKA_APTR_APTR_S 0
//*****************************************************************************
//
// Register: PKA_O_BPTR
//
//*****************************************************************************
// Field: [10:0] BPTR
//
// This register specifies the location of vector B within the PKA RAM. Vectors
// are identified through the location of their least-significant 32-bit word.
// Note that bit [0] must be zero to ensure that the vector starts at an 8-byte
// boundary.
#define PKA_BPTR_BPTR_W 11
#define PKA_BPTR_BPTR_M 0x000007FF
#define PKA_BPTR_BPTR_S 0
//*****************************************************************************
//
// Register: PKA_O_CPTR
//
//*****************************************************************************
// Field: [10:0] CPTR
//
// This register specifies the location of vector C within the PKA RAM. Vectors
// are identified through the location of their least-significant 32-bit word.
// Note that bit [0] must be zero to ensure that the vector starts at an 8-byte
// boundary.
#define PKA_CPTR_CPTR_W 11
#define PKA_CPTR_CPTR_M 0x000007FF
#define PKA_CPTR_CPTR_S 0
//*****************************************************************************
//
// Register: PKA_O_DPTR
//
//*****************************************************************************
// Field: [10:0] DPTR
//
// This register specifies the location of vector D within the PKA RAM. Vectors
// are identified through the location of their least-significant 32-bit word.
// Note that bit [0] must be zero to ensure that the vector starts at an 8-byte
// boundary.
#define PKA_DPTR_DPTR_W 11
#define PKA_DPTR_DPTR_M 0x000007FF
#define PKA_DPTR_DPTR_S 0
//*****************************************************************************
//
// Register: PKA_O_ALENGTH
//
//*****************************************************************************
// Field: [8:0] ALENGTH
//
// This register specifies the length (in 32-bit words) of Vector A.
#define PKA_ALENGTH_ALENGTH_W 9
#define PKA_ALENGTH_ALENGTH_M 0x000001FF
#define PKA_ALENGTH_ALENGTH_S 0
//*****************************************************************************
//
// Register: PKA_O_BLENGTH
//
//*****************************************************************************
// Field: [8:0] BLENGTH
//
// This register specifies the length (in 32-bit words) of Vector B.
#define PKA_BLENGTH_BLENGTH_W 9
#define PKA_BLENGTH_BLENGTH_M 0x000001FF
#define PKA_BLENGTH_BLENGTH_S 0
//*****************************************************************************
//
// Register: PKA_O_SHIFT
//
//*****************************************************************************
// Field: [4:0] NUM_BITS_TO_SHIFT
//
// This register specifies the number of bits to shift the input vector (in the
// range 0-31) during a Rshift or Lshift operation.
#define PKA_SHIFT_NUM_BITS_TO_SHIFT_W 5
#define PKA_SHIFT_NUM_BITS_TO_SHIFT_M 0x0000001F
#define PKA_SHIFT_NUM_BITS_TO_SHIFT_S 0
//*****************************************************************************
//
// Register: PKA_O_FUNCTION
//
//*****************************************************************************
// Field: [24] STALL_RESULT
//
// When written with a 1b, updating of the COMPARE bit, MSW and DIVMSW
// registers, as well as resetting the run bit is stalled beyond the point that
// a running operation is actually finished. Use this to allow software enough
// time to read results from a previous operation when the newly started
// operation is known to take only a short amount of time. If a result is
// waiting, the result registers is updated and the run bit is reset in the
// clock cycle following writing the stall result bit back to 0b. The Stall
// result function may only be used for basic PKCP operations.
#define PKA_FUNCTION_STALL_RESULT 0x01000000
#define PKA_FUNCTION_STALL_RESULT_BITN 24
#define PKA_FUNCTION_STALL_RESULT_M 0x01000000
#define PKA_FUNCTION_STALL_RESULT_S 24
// Field: [15] RUN
//
// The host sets this bit to instruct the PKA module to begin processing the
// basic PKCP or complex sequencer operation. This bit is reset low
// automatically when the operation is complete.
// After a reset, the run bit is always set to 1b. Depending on the option,
// program ROM or program RAM, the following applies:
// Program ROM - The first sequencer instruction sets the bit to 0b. This is
// done immediately after the hardware reset is released.
// Program RAM - The sequencer must set the bit to 0b. As a valid firmware may
// not have been loaded, the sequencer is held in software reset after the
// hardware reset is released (the SEQCTRL.RESET bit is set to 1b). After the
// FW image is loaded and the Reset bit is cleared, the sequencer starts to
// execute the FW. The first instruction clears the run bit.
// In both cases a few clock cycles are needed before the first instruction is
// executed and the run bit state has been propagated.
#define PKA_FUNCTION_RUN 0x00008000
#define PKA_FUNCTION_RUN_BITN 15
#define PKA_FUNCTION_RUN_M 0x00008000
#define PKA_FUNCTION_RUN_S 15
// Field: [14:12] SEQUENCER_OPERATIONS
//
// These bits select the complex sequencer operation to perform:
// 0x0: None
// 0x1: ExpMod-CRT
// 0x2: ECmontMUL
// 0x3: ECC-ADD (if available in firmware, otherwise reserved)
// 0x4: ExpMod-ACT2
// 0x5: ECC-MUL (if available in firmware, otherwise reserved)
// 0x6: ExpMod-variable
// 0x7: ModInv (if available in firmware, otherwise reserved)
// The encoding of these operations is determined by sequencer firmware.
#define PKA_FUNCTION_SEQUENCER_OPERATIONS_W 3
#define PKA_FUNCTION_SEQUENCER_OPERATIONS_M 0x00007000
#define PKA_FUNCTION_SEQUENCER_OPERATIONS_S 12
// Field: [11] COPY
//
// Perform copy operation
#define PKA_FUNCTION_COPY 0x00000800
#define PKA_FUNCTION_COPY_BITN 11
#define PKA_FUNCTION_COPY_M 0x00000800
#define PKA_FUNCTION_COPY_S 11
// Field: [10] COMPARE
//
// Perform compare operation
#define PKA_FUNCTION_COMPARE 0x00000400
#define PKA_FUNCTION_COMPARE_BITN 10
#define PKA_FUNCTION_COMPARE_M 0x00000400
#define PKA_FUNCTION_COMPARE_S 10
// Field: [9] MODULO
//
// Perform modulo operation
#define PKA_FUNCTION_MODULO 0x00000200
#define PKA_FUNCTION_MODULO_BITN 9
#define PKA_FUNCTION_MODULO_M 0x00000200
#define PKA_FUNCTION_MODULO_S 9
// Field: [8] DIVIDE
//
// Perform divide operation
#define PKA_FUNCTION_DIVIDE 0x00000100
#define PKA_FUNCTION_DIVIDE_BITN 8
#define PKA_FUNCTION_DIVIDE_M 0x00000100
#define PKA_FUNCTION_DIVIDE_S 8
// Field: [7] LSHIFT
//
// Perform left shift operation
#define PKA_FUNCTION_LSHIFT 0x00000080
#define PKA_FUNCTION_LSHIFT_BITN 7
#define PKA_FUNCTION_LSHIFT_M 0x00000080
#define PKA_FUNCTION_LSHIFT_S 7
// Field: [6] RSHIFT
//
// Perform right shift operation
#define PKA_FUNCTION_RSHIFT 0x00000040
#define PKA_FUNCTION_RSHIFT_BITN 6
#define PKA_FUNCTION_RSHIFT_M 0x00000040
#define PKA_FUNCTION_RSHIFT_S 6
// Field: [5] SUBTRACT
//
// Perform subtract operation
#define PKA_FUNCTION_SUBTRACT 0x00000020
#define PKA_FUNCTION_SUBTRACT_BITN 5
#define PKA_FUNCTION_SUBTRACT_M 0x00000020
#define PKA_FUNCTION_SUBTRACT_S 5
// Field: [4] ADD
//
// Perform add operation
#define PKA_FUNCTION_ADD 0x00000010
#define PKA_FUNCTION_ADD_BITN 4
#define PKA_FUNCTION_ADD_M 0x00000010
#define PKA_FUNCTION_ADD_S 4
// Field: [3] MS_ONE
//
// Loads the location of the Most Significant one bit within the result word
// indicated in the MSW register into bits [4:0] of the DIVMSW.MSW_ADDRESS
// register - can only be used with basic PKCP operations, except for Divide,
// Modulo and Compare.
#define PKA_FUNCTION_MS_ONE 0x00000008
#define PKA_FUNCTION_MS_ONE_BITN 3
#define PKA_FUNCTION_MS_ONE_M 0x00000008
#define PKA_FUNCTION_MS_ONE_S 3
// Field: [1] ADDSUB
//
// Perform combined add/subtract operation
#define PKA_FUNCTION_ADDSUB 0x00000002
#define PKA_FUNCTION_ADDSUB_BITN 1
#define PKA_FUNCTION_ADDSUB_M 0x00000002
#define PKA_FUNCTION_ADDSUB_S 1
// Field: [0] MULTIPLY
//
// Perform multiply operation
#define PKA_FUNCTION_MULTIPLY 0x00000001
#define PKA_FUNCTION_MULTIPLY_BITN 0
#define PKA_FUNCTION_MULTIPLY_M 0x00000001
#define PKA_FUNCTION_MULTIPLY_S 0
//*****************************************************************************
//
// Register: PKA_O_COMPARE
//
//*****************************************************************************
// Field: [2] A_GREATER_THAN_B
//
// Vector_A is greater than Vector_B
#define PKA_COMPARE_A_GREATER_THAN_B 0x00000004
#define PKA_COMPARE_A_GREATER_THAN_B_BITN 2
#define PKA_COMPARE_A_GREATER_THAN_B_M 0x00000004
#define PKA_COMPARE_A_GREATER_THAN_B_S 2
// Field: [1] A_LESS_THAN_B
//
// Vector_A is less than Vector_B
#define PKA_COMPARE_A_LESS_THAN_B 0x00000002
#define PKA_COMPARE_A_LESS_THAN_B_BITN 1
#define PKA_COMPARE_A_LESS_THAN_B_M 0x00000002
#define PKA_COMPARE_A_LESS_THAN_B_S 1
// Field: [0] A_EQUALS_B
//
// Vector_A is equal to Vector_B
#define PKA_COMPARE_A_EQUALS_B 0x00000001
#define PKA_COMPARE_A_EQUALS_B_BITN 0
#define PKA_COMPARE_A_EQUALS_B_M 0x00000001
#define PKA_COMPARE_A_EQUALS_B_S 0
//*****************************************************************************
//
// Register: PKA_O_MSW
//
//*****************************************************************************
// Field: [15] RESULT_IS_ZERO
//
// The result vector is all zeroes, ignore the address returned in bits [10:0]
#define PKA_MSW_RESULT_IS_ZERO 0x00008000
#define PKA_MSW_RESULT_IS_ZERO_BITN 15
#define PKA_MSW_RESULT_IS_ZERO_M 0x00008000
#define PKA_MSW_RESULT_IS_ZERO_S 15
// Field: [10:0] MSW_ADDRESS
//
// Address of the most-significant nonzero 32-bit word of the result vector in
// PKA RAM
#define PKA_MSW_MSW_ADDRESS_W 11
#define PKA_MSW_MSW_ADDRESS_M 0x000007FF
#define PKA_MSW_MSW_ADDRESS_S 0
//*****************************************************************************
//
// Register: PKA_O_DIVMSW
//
//*****************************************************************************
// Field: [15] RESULT_IS_ZERO
//
// The result vector is all zeroes, ignore the address returned in bits [10:0]
#define PKA_DIVMSW_RESULT_IS_ZERO 0x00008000
#define PKA_DIVMSW_RESULT_IS_ZERO_BITN 15
#define PKA_DIVMSW_RESULT_IS_ZERO_M 0x00008000
#define PKA_DIVMSW_RESULT_IS_ZERO_S 15
// Field: [10:0] MSW_ADDRESS
//
// Address of the most significant nonzero 32-bit word of the remainder result
// vector in PKA RAM
#define PKA_DIVMSW_MSW_ADDRESS_W 11
#define PKA_DIVMSW_MSW_ADDRESS_M 0x000007FF
#define PKA_DIVMSW_MSW_ADDRESS_S 0
//*****************************************************************************
//
// Register: PKA_O_SEQCTRL
//
//*****************************************************************************
// Field: [31] RESET
//
// Option program ROM: Reset value = 0. Read/Write, reset value 0b (ZERO).
// Writing 1b resets the sequencer, write to 0b to restart operations again. As
// the reset value is 0b, the sequencer will automatically start operations
// executing from program ROM. This bit should always be written with zero and
// ignored when reading this register.
//
// Option Program RAM: Reset value =1. Read/Write, reset value 1b (ONE). When
// 1b, the sequencer is held in a reset state and the PKA_PROGRAM area is
// accessible for loading the sequencer program (while the PKA_DATA_RAM is
// inaccessible), write to 0b to (re)start sequencer operations and disable
// PKA_PROGRAM area accessibility (also enables the PKA_DATA_RAM accesses).
// Resetting the sequencer (in order to load other firmware) should only be
// done when the PKA Engine is not performing any operations (i.e. the
// FUNCTION.RUN bit should be zero).
#define PKA_SEQCTRL_RESET 0x80000000
#define PKA_SEQCTRL_RESET_BITN 31
#define PKA_SEQCTRL_RESET_M 0x80000000
#define PKA_SEQCTRL_RESET_S 31
// Field: [15:8] SEQUENCER_STAT
//
// These read-only bits can be used by the sequencer to communicate status to
// the outside world. Bit [8] is also used as sequencer interrupt, with the
// complement of this bit ORed into the FUNCTION.RUN bit. This field should
// always be written with zeroes and ignored when reading this register.
#define PKA_SEQCTRL_SEQUENCER_STAT_W 8
#define PKA_SEQCTRL_SEQUENCER_STAT_M 0x0000FF00
#define PKA_SEQCTRL_SEQUENCER_STAT_S 8
// Field: [7:0] SW_CONTROL_STAT
//
// These bits can be used by software to trigger sequencer operations. External
// logic can set these bits by writing 1b, cannot reset them by writing 0b. The
// sequencer can reset these bits by writing 0b, cannot set them by writing 1b.
// Setting the FUNCTION.RUN bit together with a nonzero sequencer operations
// field automatically sets bit [0] here. This field should always be written
// with zeroes and ignored when reading this register.
#define PKA_SEQCTRL_SW_CONTROL_STAT_W 8
#define PKA_SEQCTRL_SW_CONTROL_STAT_M 0x000000FF
#define PKA_SEQCTRL_SW_CONTROL_STAT_S 0
//*****************************************************************************
//
// Register: PKA_O_OPTIONS
//
//*****************************************************************************
// Field: [11] INT_MASKING
//
// Interrupt Masking
// 0x0: indicates that the main interrupt output (bit [1] of the interrupts
// output bus) is the direct complement of the run bit in the PKA_CONTROL
// register, 0x1 : indicates
// that interrupt masking logic is present for this output.
// Note: Reset value is undefined
#define PKA_OPTIONS_INT_MASKING 0x00000800
#define PKA_OPTIONS_INT_MASKING_BITN 11
#define PKA_OPTIONS_INT_MASKING_M 0x00000800
#define PKA_OPTIONS_INT_MASKING_S 11
// Field: [10:8] PROTECTION_OPTION
//
// Protection Option
// 0x0: indicates no additional protection against side channel attacks,
//
// 0x1: indicates the SCAP option
// 0x2: Reserved
// 0x3: indicates the PROT option;
// Note: Reset value is undefined
#define PKA_OPTIONS_PROTECTION_OPTION_W 3
#define PKA_OPTIONS_PROTECTION_OPTION_M 0x00000700
#define PKA_OPTIONS_PROTECTION_OPTION_S 8
// Field: [7] PROGRAM_RAM
//
// Program RAM
// 0x1: indicates sequencer program storage in RAM, 0x0:
// indicates sequencer program storage in ROM.
// Note: Reset value is undefined
#define PKA_OPTIONS_PROGRAM_RAM 0x00000080
#define PKA_OPTIONS_PROGRAM_RAM_BITN 7
#define PKA_OPTIONS_PROGRAM_RAM_M 0x00000080
#define PKA_OPTIONS_PROGRAM_RAM_S 7
// Field: [6:5] SEQUENCER_CONFIGURATION
//
// Sequencer Configuration
// 0x0: Reserved
// 0x1 : Indicates a standard sequencer
// 0x2: Reserved
// 0x3: Reserved
#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_W 2
#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_M 0x00000060
#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_S 5
// Field: [1:0] PKCP_CONFIGURATION
//
// PKCP Configuration 0x0
// : Reserved
// 0x1 : Indicates a PKCP with a 16x16 multiplier, 0x2:
// indicates a PKCP with a 32x32 multiplier, 0x3 : Reserved
// Note: Reset value is undefined.
#define PKA_OPTIONS_PKCP_CONFIGURATION_W 2
#define PKA_OPTIONS_PKCP_CONFIGURATION_M 0x00000003
#define PKA_OPTIONS_PKCP_CONFIGURATION_S 0
//*****************************************************************************
//
// Register: PKA_O_FWREV
//
//*****************************************************************************
// Field: [31:28] FW_CAPABILITIES
//
// Firmware Capabilities
//
// 4-bit binary encoding for the functionality implemented
// in the firmware.
// 0x0: indicates basic ModExp with/without CRT. 0x1:
// adds Modular Inversion, 0x2: value
// 2 adds Modular Inversion and ECC operations.
// 0x3-0xF : Reserved.
#define PKA_FWREV_FW_CAPABILITIES_W 4
#define PKA_FWREV_FW_CAPABILITIES_M 0xF0000000
#define PKA_FWREV_FW_CAPABILITIES_S 28
// Field: [27:24] MAJOR_FW_REVISION
//
// 4-bit binary encoding of the major firmware revision number
#define PKA_FWREV_MAJOR_FW_REVISION_W 4
#define PKA_FWREV_MAJOR_FW_REVISION_M 0x0F000000
#define PKA_FWREV_MAJOR_FW_REVISION_S 24
// Field: [23:20] MINOR_FW_REVISION
//
// 4-bit binary encoding of the minor firmware revision number
#define PKA_FWREV_MINOR_FW_REVISION_W 4
#define PKA_FWREV_MINOR_FW_REVISION_M 0x00F00000
#define PKA_FWREV_MINOR_FW_REVISION_S 20
// Field: [19:16] FW_PATCH_LEVEL
//
// 4-bit binary encoding of the firmware patch level, initial release will
// carry value zero
// Patches are used to remove bugs without changing the functionality or
// interface of a module.
#define PKA_FWREV_FW_PATCH_LEVEL_W 4
#define PKA_FWREV_FW_PATCH_LEVEL_M 0x000F0000
#define PKA_FWREV_FW_PATCH_LEVEL_S 16
//*****************************************************************************
//
// Register: PKA_O_HWREV
//
//*****************************************************************************
// Field: [27:24] MAJOR_HW_REVISION
//
// 4-bit binary encoding of the major hardware revision number
#define PKA_HWREV_MAJOR_HW_REVISION_W 4
#define PKA_HWREV_MAJOR_HW_REVISION_M 0x0F000000
#define PKA_HWREV_MAJOR_HW_REVISION_S 24
// Field: [23:20] MINOR_HW_REVISION
//
// 4-bit binary encoding of the minor hardware revision number
#define PKA_HWREV_MINOR_HW_REVISION_W 4
#define PKA_HWREV_MINOR_HW_REVISION_M 0x00F00000
#define PKA_HWREV_MINOR_HW_REVISION_S 20
// Field: [19:16] HW_PATCH_LEVEL
//
// 4-bit binary encoding of the hardware patch level, initial release will
// carry value zero
// Patches are used to remove bugs without changing the functionality or
// interface of a module.
#define PKA_HWREV_HW_PATCH_LEVEL_W 4
#define PKA_HWREV_HW_PATCH_LEVEL_M 0x000F0000
#define PKA_HWREV_HW_PATCH_LEVEL_S 16
// Field: [15:8] COMPLEMENT_OF_BASIC_EIP_NUMBER
//
// Bit-by-bit logic complement of bits [7:0], EIP-28 gives 0xE3
#define PKA_HWREV_COMPLEMENT_OF_BASIC_EIP_NUMBER_W 8
#define PKA_HWREV_COMPLEMENT_OF_BASIC_EIP_NUMBER_M 0x0000FF00
#define PKA_HWREV_COMPLEMENT_OF_BASIC_EIP_NUMBER_S 8
// Field: [7:0] BASIC_EIP_NUMBER
//
// 8-bit binary encoding of the EIP number, EIP-28 gives 0x1C
#define PKA_HWREV_BASIC_EIP_NUMBER_W 8
#define PKA_HWREV_BASIC_EIP_NUMBER_M 0x000000FF
#define PKA_HWREV_BASIC_EIP_NUMBER_S 0
#endif // __PKA__