123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792 |
- /******************************************************************************
- * 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__
|