1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/cpu/cc2538/include/vendor/hw_pka.h
Benjamin Valentin 9d836888c2 treewide: fix file permissions
C files should not be executable.
2020-07-08 17:32:36 +02:00

793 lines
51 KiB
C

/******************************************************************************
* Filename: hw_pka.h
* Revised: $Date: 2013-04-30 17:13:44 +0200 (Tue, 30 Apr 2013) $
* Revision: $Revision: 9943 $
*
* Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 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.
*
* Neither the name of Texas Instruments Incorporated 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
* OWNER 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__
//*****************************************************************************
//
// The following are defines for the PKA register offsets.
//
//*****************************************************************************
#define PKA_APTR 0x44004000 // PKA vector A address During
// execution of basic PKCP
// operations, this register is
// double buffered and can be
// written with a new value for the
// next operation; when not
// written, the value remains
// intact. During the execution of
// sequencer-controlled complex
// operations, this register may
// not be written and its value is
// undefined at the conclusion of
// the operation. The driver
// software cannot rely on the
// written value to remain intact.
#define PKA_BPTR 0x44004004 // PKA vector B address During
// execution of basic PKCP
// operations, this register is
// double buffered and can be
// written with a new value for the
// next operation; when not
// written, the value remains
// intact. During the execution of
// sequencer-controlled complex
// operations, this register may
// not be written and its value is
// undefined at the conclusion of
// the operation. The driver
// software cannot rely on the
// written value to remain intact.
#define PKA_CPTR 0x44004008 // PKA vector C address During
// execution of basic PKCP
// operations, this register is
// double buffered and can be
// written with a new value for the
// next operation; when not
// written, the value remains
// intact. During the execution of
// sequencer-controlled complex
// operations, this register may
// not be written and its value is
// undefined at the conclusion of
// the operation. The driver
// software cannot rely on the
// written value to remain intact.
#define PKA_DPTR 0x4400400C // PKA vector D address During
// execution of basic PKCP
// operations, this register is
// double buffered and can be
// written with a new value for the
// next operation; when not
// written, the value remains
// intact. During the execution of
// sequencer-controlled complex
// operations, this register may
// not be written and its value is
// undefined at the conclusion of
// the operation. The driver
// software cannot rely on the
// written value to remain intact.
#define PKA_ALENGTH 0x44004010 // PKA vector A length During
// execution of basic PKCP
// operations, this register is
// double buffered and can be
// written with a new value for the
// next operation; when not
// written, the value remains
// intact. During the execution of
// sequencer-controlled complex
// operations, this register may
// not be written and its value is
// undefined at the conclusion of
// the operation. The driver
// software cannot rely on the
// written value to remain intact.
#define PKA_BLENGTH 0x44004014 // PKA vector B length During
// execution of basic PKCP
// operations, this register is
// double buffered and can be
// written with a new value for the
// next operation; when not
// written, the value remains
// intact. During the execution of
// sequencer-controlled complex
// operations, this register may
// not be written and its value is
// undefined at the conclusion of
// the operation. The driver
// software cannot rely on the
// written value to remain intact.
#define PKA_SHIFT 0x44004018 // PKA bit shift value For basic
// PKCP operations, modifying the
// contents of this register is
// made impossible while the
// operation is being performed.
// For the ExpMod-variable and
// ExpMod-CRT operations, this
// register is used to indicate the
// number of odd powers to use
// (directly as a value in the
// range 1-16). For the ModInv and
// ECC operations, this register is
// used to hold a completion code.
#define PKA_FUNCTION 0x4400401C // PKA function This register
// contains the control bits to
// start basic PKCP as well as
// complex sequencer operations.
// The run bit can be used to poll
// for the completion of the
// operation. Modifying bits [11:0]
// is made impossible during the
// execution of a basic PKCP
// operation. During the execution
// of sequencer-controlled complex
// operations, this register is
// modified; the run and stall
// result bits are set to zero at
// the conclusion, but other bits
// are undefined. Attention:
// Continuously reading this
// register to poll the run bit is
// not allowed when executing
// complex sequencer operations
// (the sequencer cannot access the
// PKCP when this is done). Leave
// at least one sysclk cycle
// between poll operations.
#define PKA_COMPARE 0x44004020 // PKA compare result This
// register provides the result of
// a basic PKCP compare operation.
// It is updated when the run bit
// in the PKA_FUNCTION register is
// reset at the end of that
// operation. Status after a
// complex sequencer operation is
// unknown
#define PKA_MSW 0x44004024 // PKA most-significant-word of
// result vector This register
// indicates the (word) address in
// the PKA RAM where the most
// significant nonzero 32-bit word
// of the result is stored. Should
// be ignored for modulo
// operations. For basic PKCP
// operations, this register is
// updated when the run bit in the
// PKA_FUNCTION register is reset
// at the end of the operation. For
// the complex-sequencer controlled
// operations, updating of the
// final value matching the actual
// result is done near the end of
// the operation; note that the
// result is only meaningful if no
// errors were detected and that
// for ECC operations, the PKA_MSW
// register will provide
// information for the x-coordinate
// of the result point only.
#define PKA_DIVMSW 0x44004028 // PKA most-significant-word of
// divide remainder This register
// indicates the (32-bit word)
// address in the PKA RAM where the
// most significant nonzero 32-bit
// word of the remainder result for
// the basic divide and modulo
// operations is stored. Bits [4:0]
// are loaded with the bit number
// of the most-significant nonzero
// bit in the most-significant
// nonzero word when MS one control
// bit is set. For divide, modulo,
// and MS one reporting, this
// register is updated when the RUN
// bit in the PKA_FUNCTION register
// is reset at the end of the
// operation. For the complex
// sequencer controlled operations,
// updating of bits [4:0] of this
// register with the
// most-significant bit location of
// the actual result is done near
// the end of the operation. The
// result is meaningful only if no
// errors were detected and that
// for ECC operations; the
// PKA_DIVMSW register provides
// information for the x-coordinate
// of the result point only.
#define PKA_SEQ_CTRL 0x440040C8 // PKA sequencer control and
// status register The sequencer is
// interfaced with the outside
// world through a single control
// and status register. With the
// exception of bit [31], the
// actual use of bits in the
// separate sub-fields of this
// register is determined by the
// sequencer firmware. This
// register need only be accessed
// when the sequencer program is
// stored in RAM. The reset value
// of the RESTE bit depends upon
// the option chosen for sequencer
// program storage.
#define PKA_OPTIONS 0x440040F4 // PKA hardware options register
// This register provides the host
// with a means to determine the
// hardware configuration
// implemented in this PKA engine,
// focused on options that have an
// effect on software interacting
// with the module. Note: (32 x
// (1st LNME nr. of PEs + 1st LNME
// FIFO RAM depth - 10)) equals the
// maximum modulus vector length
// (in bits) that can be handled by
// the modular exponentiation and
// ECC operations executed on a PKA
// engine that includes an LNME.
#define PKA_SW_REV 0x440040F8 // PKA firmware revision and
// capabilities register This
// register allows the host access
// to the internal firmware
// revision number of the PKA
// Engine for software driver
// matching and diagnostic
// purposes. This register also
// contains a field that encodes
// the capabilities of the embedded
// firmware. The PKA_SW_REV
// register is written by the
// firmware within a few clock
// cycles after starting up that
// firmware. The hardware reset
// value is zero, indicating that
// the information has not been
// written yet.
#define PKA_REVISION 0x440040FC // PKA hardware revision register
// This register allows the host
// access to the hardware revision
// number of the PKA engine for
// software driver matching and
// diagnostic purposes. It is
// always located at the highest
// address in the access space of
// the module and contains an
// encoding of the EIP number (with
// its complement as signature) for
// recognition of the hardware
// module.
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_APTR register.
//
//*****************************************************************************
#define PKA_APTR_APTR_M 0x000007FF // 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_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_BPTR register.
//
//*****************************************************************************
#define PKA_BPTR_BPTR_M 0x000007FF // 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_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_CPTR register.
//
//*****************************************************************************
#define PKA_CPTR_CPTR_M 0x000007FF // 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_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_DPTR register.
//
//*****************************************************************************
#define PKA_DPTR_DPTR_M 0x000007FF // 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_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_ALENGTH register.
//
//*****************************************************************************
#define PKA_ALENGTH_ALENGTH_M 0x000001FF // This register specifies the
// length (in 32-bit words) of
// Vector A.
#define PKA_ALENGTH_ALENGTH_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_BLENGTH register.
//
//*****************************************************************************
#define PKA_BLENGTH_BLENGTH_M 0x000001FF // This register specifies the
// length (in 32-bit words) of
// Vector B.
#define PKA_BLENGTH_BLENGTH_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_SHIFT register.
//
//*****************************************************************************
#define PKA_SHIFT_NUM_BITS_TO_SHIFT_M \
0x0000001F // 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_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_FUNCTION register.
//
//*****************************************************************************
#define PKA_FUNCTION_STALL_RESULT \
0x01000000 // When written with a 1b,
// updating of the PKA_COMPARE,
// PKA_MSW and PKA_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_M \
0x01000000
#define PKA_FUNCTION_STALL_RESULT_S 24
#define PKA_FUNCTION_RUN 0x00008000 // 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. The complement of
// this bit is output as
// interrupts[1]. 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 reset bit in
// PKA_SEQ_CRTL 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_M 0x00008000
#define PKA_FUNCTION_RUN_S 15
#define PKA_FUNCTION_SEQUENCER_OPERATIONS_M \
0x00007000 // These bits select the complex
// sequencer operation to perform:
// 000b: None 001b: ExpMod-CRT
// 010b: ExpMod-ACT4 (compatible
// with EIP2315) 011b: ECC-ADD (if
// available in firmware, otherwise
// reserved) 100b: ExpMod-ACT2
// (compatible with EIP2316) 101b:
// ECC-MUL (if available in
// firmware, otherwise reserved)
// 110b: ExpMod-variable 111b:
// ModInv (if available in
// firmware, otherwise reserved)
// The encoding of these operations
// is determined by sequencer
// firmware.
#define PKA_FUNCTION_SEQUENCER_OPERATIONS_S 12
#define PKA_FUNCTION_COPY 0x00000800 // Perform copy operation
#define PKA_FUNCTION_COPY_M 0x00000800
#define PKA_FUNCTION_COPY_S 11
#define PKA_FUNCTION_COMPARE 0x00000400 // Perform compare operation
#define PKA_FUNCTION_COMPARE_M 0x00000400
#define PKA_FUNCTION_COMPARE_S 10
#define PKA_FUNCTION_MODULO 0x00000200 // Perform modulo operation
#define PKA_FUNCTION_MODULO_M 0x00000200
#define PKA_FUNCTION_MODULO_S 9
#define PKA_FUNCTION_DIVIDE 0x00000100 // Perform divide operation
#define PKA_FUNCTION_DIVIDE_M 0x00000100
#define PKA_FUNCTION_DIVIDE_S 8
#define PKA_FUNCTION_LSHIFT 0x00000080 // Perform left shift operation
#define PKA_FUNCTION_LSHIFT_M 0x00000080
#define PKA_FUNCTION_LSHIFT_S 7
#define PKA_FUNCTION_RSHIFT 0x00000040 // Perform right shift operation
#define PKA_FUNCTION_RSHIFT_M 0x00000040
#define PKA_FUNCTION_RSHIFT_S 6
#define PKA_FUNCTION_SUBTRACT 0x00000020 // Perform subtract operation
#define PKA_FUNCTION_SUBTRACT_M 0x00000020
#define PKA_FUNCTION_SUBTRACT_S 5
#define PKA_FUNCTION_ADD 0x00000010 // Perform add operation
#define PKA_FUNCTION_ADD_M 0x00000010
#define PKA_FUNCTION_ADD_S 4
#define PKA_FUNCTION_MS_ONE 0x00000008 // Loads the location of the Most
// Significant one bit within the
// result word indicated in the
// PKA_MSW register into bits [4:0]
// of the PKA_DIVMSW register - can
// only be used with basic PKCP
// operations, except for Divide,
// Modulo and Compare.
#define PKA_FUNCTION_MS_ONE_M 0x00000008
#define PKA_FUNCTION_MS_ONE_S 3
#define PKA_FUNCTION_ADDSUB 0x00000002 // Perform combined add/subtract
// operation
#define PKA_FUNCTION_ADDSUB_M 0x00000002
#define PKA_FUNCTION_ADDSUB_S 1
#define PKA_FUNCTION_MULTIPLY 0x00000001 // Perform multiply operation
#define PKA_FUNCTION_MULTIPLY_M 0x00000001
#define PKA_FUNCTION_MULTIPLY_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_COMPARE register.
//
//*****************************************************************************
#define PKA_COMPARE_A_GREATER_THAN_B \
0x00000004 // Vector_A is greater than
// Vector_B
#define PKA_COMPARE_A_GREATER_THAN_B_M \
0x00000004
#define PKA_COMPARE_A_GREATER_THAN_B_S 2
#define PKA_COMPARE_A_LESS_THAN_B \
0x00000002 // Vector_A is less than Vector_B
#define PKA_COMPARE_A_LESS_THAN_B_M \
0x00000002
#define PKA_COMPARE_A_LESS_THAN_B_S 1
#define PKA_COMPARE_A_EQUALS_B 0x00000001 // Vector_A is equal to Vector_B
#define PKA_COMPARE_A_EQUALS_B_M \
0x00000001
#define PKA_COMPARE_A_EQUALS_B_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_MSW register.
//
//*****************************************************************************
#define PKA_MSW_RESULT_IS_ZERO 0x00008000 // The result vector is all
// zeroes, ignore the address
// returned in bits [10:0]
#define PKA_MSW_RESULT_IS_ZERO_M \
0x00008000
#define PKA_MSW_RESULT_IS_ZERO_S 15
#define PKA_MSW_MSW_ADDRESS_M 0x000007FF // Address of the most-significant
// nonzero 32-bit word of the
// result vector in PKA RAM
#define PKA_MSW_MSW_ADDRESS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_DIVMSW register.
//
//*****************************************************************************
#define PKA_DIVMSW_RESULT_IS_ZERO \
0x00008000 // The result vector is all
// zeroes, ignore the address
// returned in bits [10:0]
#define PKA_DIVMSW_RESULT_IS_ZERO_M \
0x00008000
#define PKA_DIVMSW_RESULT_IS_ZERO_S 15
#define PKA_DIVMSW_MSW_ADDRESS_M \
0x000007FF // Address of the most significant
// nonzero 32-bit word of the
// remainder result vector in PKA
// RAM
#define PKA_DIVMSW_MSW_ADDRESS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_SEQ_CTRL register.
//
//*****************************************************************************
#define PKA_SEQ_CTRL_RESET 0x80000000 // 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 run bit in the PKA_FUNCTION
// register should be zero).
#define PKA_SEQ_CTRL_RESET_M 0x80000000
#define PKA_SEQ_CTRL_RESET_S 31
#define PKA_SEQ_CTRL_SEQUENCER_STATUS_M \
0x0000FF00 // 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 run bit in
// PKA_FUNCTION. This field should
// always be written with zeroes
// and ignored when reading this
// register.
#define PKA_SEQ_CTRL_SEQUENCER_STATUS_S 8
#define PKA_SEQ_CTRL_SW_CONTROL_STATUS_M \
0x000000FF // 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
// run bit in PKA_FUNCTION 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_SEQ_CTRL_SW_CONTROL_STATUS_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_OPTIONS register.
//
//*****************************************************************************
#define PKA_OPTIONS_FIRST_LNME_FIFO_DEPTH_M \
0xFF000000 // Number of words in the first
// LNME's FIFO RAM Should be
// ignored if LNME configuration is
// 0. The contents of this field
// indicate the actual depth as
// selected by the LNME FIFO RAM
// size strap input, fifo_size_sel.
// Note: Reset value is undefined
#define PKA_OPTIONS_FIRST_LNME_FIFO_DEPTH_S 24
#define PKA_OPTIONS_FIRST_LNME_NR_OF_PES_M \
0x003F0000 // Number of processing elements
// in the pipeline of the first
// LNME Should be ignored if LNME
// configuration is 0. Note: Reset
// value is undefined.
#define PKA_OPTIONS_FIRST_LNME_NR_OF_PES_S 16
#define PKA_OPTIONS_MMM3A 0x00001000 // Reserved for a future
// functional extension to the LNME
// Always 0b
#define PKA_OPTIONS_MMM3A_M 0x00001000
#define PKA_OPTIONS_MMM3A_S 12
#define PKA_OPTIONS_INT_MASKING 0x00000800 // Value 0b 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,
// value 1b indicates that
// interrupt masking logic is
// present for this output. Note:
// Reset value is undefined
#define PKA_OPTIONS_INT_MASKING_M \
0x00000800
#define PKA_OPTIONS_INT_MASKING_S 11
#define PKA_OPTIONS_PROTECTION_OPTION_M \
0x00000700 // Value 0 indicates no additional
// protection against side channel
// attacks, value 1 indicates the
// SCAP option, value 3 indicates
// the PROT option; other values
// are reserved. Note: Reset value
// is undefined
#define PKA_OPTIONS_PROTECTION_OPTION_S 8
#define PKA_OPTIONS_PROGRAM_RAM 0x00000080 // Value 1b indicates sequencer
// program storage in RAM, value 0b
// in ROM. Note: Reset value is
// undefined
#define PKA_OPTIONS_PROGRAM_RAM_M \
0x00000080
#define PKA_OPTIONS_PROGRAM_RAM_S 7
#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_M \
0x00000060 // Value 1 indicates a standard
// sequencer; other values are
// reserved.
#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_S 5
#define PKA_OPTIONS_LNME_CONFIGURATION_M \
0x0000001C // Value 0 indicates NO LNME,
// value 1 indicates one standard
// LNME (with alpha = 32, beta =
// 8); other values reserved. Note:
// Reset value is undefined
#define PKA_OPTIONS_LNME_CONFIGURATION_S 2
#define PKA_OPTIONS_PKCP_CONFIGURATION_M \
0x00000003 // Value 1 indicates a PKCP with a
// 16x16 multiplier, value 2
// indicates a PKCP with a 32x32
// multiplier, other values
// reserved. Note: Reset value is
// undefined.
#define PKA_OPTIONS_PKCP_CONFIGURATION_S 0
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_SW_REV register.
//
//*****************************************************************************
#define PKA_SW_REV_FW_CAPABILITIES_M \
0xF0000000 // 4-bit binary encoding for the
// functionality implemented in the
// firmware. Value 0 indicates
// basic ModExp with/without CRT.
// Value 1 adds Modular Inversion,
// value 2 adds Modular Inversion
// and ECC operations. Values 3-15
// are reserved.
#define PKA_SW_REV_FW_CAPABILITIES_S 28
#define PKA_SW_REV_MAJOR_FW_REVISION_M \
0x0F000000 // 4-bit binary encoding of the
// major firmware revision number
#define PKA_SW_REV_MAJOR_FW_REVISION_S 24
#define PKA_SW_REV_MINOR_FW_REVISION_M \
0x00F00000 // 4-bit binary encoding of the
// minor firmware revision number
#define PKA_SW_REV_MINOR_FW_REVISION_S 20
#define PKA_SW_REV_FW_PATCH_LEVEL_M \
0x000F0000 // 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_SW_REV_FW_PATCH_LEVEL_S 16
//*****************************************************************************
//
// The following are defines for the bit fields in the PKA_REVISION register.
//
//*****************************************************************************
#define PKA_REVISION_MAJOR_HW_REVISION_M \
0x0F000000 // 4-bit binary encoding of the
// major hardware revision number
#define PKA_REVISION_MAJOR_HW_REVISION_S 24
#define PKA_REVISION_MINOR_HW_REVISION_M \
0x00F00000 // 4-bit binary encoding of the
// minor hardware revision number
#define PKA_REVISION_MINOR_HW_REVISION_S 20
#define PKA_REVISION_HW_PATCH_LEVEL_M \
0x000F0000 // 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_REVISION_HW_PATCH_LEVEL_S 16
#define PKA_REVISION_COMPLEMENT_OF_BASIC_EIP_NUMBER_M \
0x0000FF00 // Bit-by-bit logic complement of
// bits [7:0], EIP-28 gives 0xE3
#define PKA_REVISION_COMPLEMENT_OF_BASIC_EIP_NUMBER_S 8
#define PKA_REVISION_BASIC_EIP_NUMBER_M \
0x000000FF // 8-bit binary encoding of the
// EIP number, EIP-28 gives 0x1C
#define PKA_REVISION_BASIC_EIP_NUMBER_S 0
#endif // __HW_PKA_H__