mirror of
https://github.com/thelsing/knx.git
synced 2025-10-12 11:15:54 +02:00
git-subtree-dir: examples/knx-cc1310/coresdk_cc13xx_cc26xx git-subtree-split: 0d78d3280357416a5c0388148cda13717c9ffaa5
607 lines
29 KiB
C
607 lines
29 KiB
C
/******************************************************************************
|
|
* 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__
|