58#define PKA_RAM_BASE 0x44006000
59#define PKA_RAM_SIZE 0x800
60#define PKA_MAX_CURVE_SIZE 12
71#define PKA_APTR 0x44004000
86#define PKA_BPTR 0x44004004
101#define PKA_CPTR 0x44004008
116#define PKA_DPTR 0x4400400C
131#define PKA_ALENGTH 0x44004010
146#define PKA_BLENGTH 0x44004014
161#define PKA_SHIFT 0x44004018
174#define PKA_FUNCTION 0x4400401C
198#define PKA_COMPARE 0x44004020
207#define PKA_MSW 0x44004024
230#define PKA_DIVMSW 0x44004028
260#define PKA_SEQ_CTRL 0x440040C8
276#define PKA_OPTIONS 0x440040F4
291#define PKA_SW_REV 0x440040F8
309#define PKA_REVISION 0x440040FC
327#define PKA_APTR_APTR_M 0x000007FF
335#define PKA_APTR_APTR_S 0
341#define PKA_BPTR_BPTR_M 0x000007FF
349#define PKA_BPTR_BPTR_S 0
355#define PKA_CPTR_CPTR_M 0x000007FF
363#define PKA_CPTR_CPTR_S 0
369#define PKA_DPTR_DPTR_M 0x000007FF
377#define PKA_DPTR_DPTR_S 0
383#define PKA_ALENGTH_ALENGTH_M 0x000001FF
386#define PKA_ALENGTH_ALENGTH_S 0
392#define PKA_BLENGTH_BLENGTH_M 0x000001FF
395#define PKA_BLENGTH_BLENGTH_S 0
401#define PKA_SHIFT_NUM_BITS_TO_SHIFT_M \
408#define PKA_SHIFT_NUM_BITS_TO_SHIFT_S 0
414#define PKA_FUNCTION_STALL_RESULT \
436#define PKA_FUNCTION_STALL_RESULT_M \
438#define PKA_FUNCTION_STALL_RESULT_S 24
439#define PKA_FUNCTION_RUN 0x00008000
472#define PKA_FUNCTION_RUN_M 0x00008000
473#define PKA_FUNCTION_RUN_S 15
474#define PKA_FUNCTION_SEQUENCER_OPERATIONS_M \
492#define PKA_FUNCTION_SEQUENCER_OPERATIONS_S 12
493#define PKA_FUNCTION_COPY 0x00000800
494#define PKA_FUNCTION_COPY_M 0x00000800
495#define PKA_FUNCTION_COPY_S 11
496#define PKA_FUNCTION_COMPARE 0x00000400
497#define PKA_FUNCTION_COMPARE_M 0x00000400
498#define PKA_FUNCTION_COMPARE_S 10
499#define PKA_FUNCTION_MODULO 0x00000200
500#define PKA_FUNCTION_MODULO_M 0x00000200
501#define PKA_FUNCTION_MODULO_S 9
502#define PKA_FUNCTION_DIVIDE 0x00000100
503#define PKA_FUNCTION_DIVIDE_M 0x00000100
504#define PKA_FUNCTION_DIVIDE_S 8
505#define PKA_FUNCTION_LSHIFT 0x00000080
506#define PKA_FUNCTION_LSHIFT_M 0x00000080
507#define PKA_FUNCTION_LSHIFT_S 7
508#define PKA_FUNCTION_RSHIFT 0x00000040
509#define PKA_FUNCTION_RSHIFT_M 0x00000040
510#define PKA_FUNCTION_RSHIFT_S 6
511#define PKA_FUNCTION_SUBTRACT 0x00000020
512#define PKA_FUNCTION_SUBTRACT_M 0x00000020
513#define PKA_FUNCTION_SUBTRACT_S 5
514#define PKA_FUNCTION_ADD 0x00000010
515#define PKA_FUNCTION_ADD_M 0x00000010
516#define PKA_FUNCTION_ADD_S 4
517#define PKA_FUNCTION_MS_ONE 0x00000008
525#define PKA_FUNCTION_MS_ONE_M 0x00000008
526#define PKA_FUNCTION_MS_ONE_S 3
527#define PKA_FUNCTION_ADDSUB 0x00000002
529#define PKA_FUNCTION_ADDSUB_M 0x00000002
530#define PKA_FUNCTION_ADDSUB_S 1
531#define PKA_FUNCTION_MULTIPLY 0x00000001
532#define PKA_FUNCTION_MULTIPLY_M 0x00000001
533#define PKA_FUNCTION_MULTIPLY_S 0
534#define PKA_FUNCTION_ECCADD 0x00003000
535#define PKA_FUNCTION_ECCMUL 0x00005000
536#define PKA_FUNCTION_INVMOD 0x00007000
543#define PKA_COMPARE_A_GREATER_THAN_B \
547#define PKA_COMPARE_A_GREATER_THAN_B_M \
549#define PKA_COMPARE_A_GREATER_THAN_B_S 2
550#define PKA_COMPARE_A_LESS_THAN_B \
553#define PKA_COMPARE_A_LESS_THAN_B_M \
555#define PKA_COMPARE_A_LESS_THAN_B_S 1
556#define PKA_COMPARE_A_EQUALS_B 0x00000001
557#define PKA_COMPARE_A_EQUALS_B_M \
559#define PKA_COMPARE_A_EQUALS_B_S 0
565#define PKA_SHIFT_SUCCESS 0
566#define PKA_SHIFT_POINT_AT_INFINITY 7
567#define PKA_SHIFT_ERROR 31
573#define PKA_MSW_RESULT_IS_ZERO 0x00008000
576#define PKA_MSW_RESULT_IS_ZERO_M \
578#define PKA_MSW_RESULT_IS_ZERO_S 15
579#define PKA_MSW_MSW_ADDRESS_M 0x000007FF
582#define PKA_MSW_MSW_ADDRESS_S 0
588#define PKA_DIVMSW_RESULT_IS_ZERO \
593#define PKA_DIVMSW_RESULT_IS_ZERO_M \
595#define PKA_DIVMSW_RESULT_IS_ZERO_S 15
596#define PKA_DIVMSW_MSW_ADDRESS_M \
602#define PKA_DIVMSW_MSW_ADDRESS_S 0
608#define PKA_SEQ_CTRL_RESET 0x80000000
638#define PKA_SEQ_CTRL_RESET_M 0x80000000
639#define PKA_SEQ_CTRL_RESET_S 31
640#define PKA_SEQ_CTRL_SEQUENCER_STATUS_M \
653#define PKA_SEQ_CTRL_SEQUENCER_STATUS_S 8
654#define PKA_SEQ_CTRL_SW_CONTROL_STATUS_M \
671#define PKA_SEQ_CTRL_SW_CONTROL_STATUS_S 0
677#define PKA_OPTIONS_FIRST_LNME_FIFO_DEPTH_M \
687#define PKA_OPTIONS_FIRST_LNME_FIFO_DEPTH_S 24
688#define PKA_OPTIONS_FIRST_LNME_NR_OF_PES_M \
695#define PKA_OPTIONS_FIRST_LNME_NR_OF_PES_S 16
696#define PKA_OPTIONS_MMM3A 0x00001000
699#define PKA_OPTIONS_MMM3A_M 0x00001000
700#define PKA_OPTIONS_MMM3A_S 12
701#define PKA_OPTIONS_INT_MASKING 0x00000800
710#define PKA_OPTIONS_INT_MASKING_M \
712#define PKA_OPTIONS_INT_MASKING_S 11
713#define PKA_OPTIONS_PROTECTION_OPTION_M \
722#define PKA_OPTIONS_PROTECTION_OPTION_S 8
723#define PKA_OPTIONS_PROGRAM_RAM 0x00000080
727#define PKA_OPTIONS_PROGRAM_RAM_M \
729#define PKA_OPTIONS_PROGRAM_RAM_S 7
730#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_M \
735#define PKA_OPTIONS_SEQUENCER_CONFIGURATION_S 5
736#define PKA_OPTIONS_LNME_CONFIGURATION_M \
743#define PKA_OPTIONS_LNME_CONFIGURATION_S 2
744#define PKA_OPTIONS_PKCP_CONFIGURATION_M \
752#define PKA_OPTIONS_PKCP_CONFIGURATION_S 0
758#define PKA_SW_REV_FW_CAPABILITIES_M \
768#define PKA_SW_REV_FW_CAPABILITIES_S 28
769#define PKA_SW_REV_MAJOR_FW_REVISION_M \
773#define PKA_SW_REV_MAJOR_FW_REVISION_S 24
774#define PKA_SW_REV_MINOR_FW_REVISION_M \
778#define PKA_SW_REV_MINOR_FW_REVISION_S 20
779#define PKA_SW_REV_FW_PATCH_LEVEL_M \
788#define PKA_SW_REV_FW_PATCH_LEVEL_S 16
794#define PKA_REVISION_MAJOR_HW_REVISION_M \
798#define PKA_REVISION_MAJOR_HW_REVISION_S 24
799#define PKA_REVISION_MINOR_HW_REVISION_M \
803#define PKA_REVISION_MINOR_HW_REVISION_S 20
804#define PKA_REVISION_HW_PATCH_LEVEL_M \
813#define PKA_REVISION_HW_PATCH_LEVEL_S 16
814#define PKA_REVISION_COMPLEMENT_OF_BASIC_EIP_NUMBER_M \
818#define PKA_REVISION_COMPLEMENT_OF_BASIC_EIP_NUMBER_S 8
819#define PKA_REVISION_BASIC_EIP_NUMBER_M \
823#define PKA_REVISION_BASIC_EIP_NUMBER_S 0
830#define PKA_STATUS_SUCCESS 0
831#define PKA_STATUS_FAILURE 1
832#define PKA_STATUS_INVALID_PARAM 2
833#define PKA_STATUS_BUF_UNDERFLOW 3
834#define PKA_STATUS_RESULT_0 4
835#define PKA_STATUS_A_GR_B 5
838#define PKA_STATUS_A_LT_B 6
841#define PKA_STATUS_OPERATION_INPRG 7
842#define PKA_STATUS_OPERATION_NOT_INPRG 8
843#define PKA_STATUS_SIGNATURE_INVALID 9
844#define PKA_STATUS_A_EQ_B 10
845#define PKA_STATUS_POINT_AT_INFINITY 11
851#define PKA_NEXT_OFFSET(offset, words) \
852 (offset + ((words & 7) ? 8 : 0) + (words & ~7))
854#define PKA_MULTIPLY_SCRATCHPAD_WORDS(alen, blen) \
856#define PKA_ADD_SCRATCHPAD_WORDS(alen, blen) \
857 (MAX(alen, blen) + 1)
858#define PKA_SUBTRACT_SCRATCHPAD_WORDS(alen, blen) \
860#define PKA_LSHIFT_WORDS(len) \
862#define PKA_DIVIDE_SCRATCHPAD_WORDS(blen) \
864#define PKA_QUOTIENT_WORDS(alen, blen) \
866#define PKA_REMAINDER_WORDS(blen) \
869#define PKA_MOD_INV_SCRATCHPAD_WORDS(alen, blen) \
870 (5 * PKA_COORDINATE_WORDS(MAX(alen, blen)))
872#define PKA_COORDINATE_WORDS(len) \
873 (len + 2 + (len % 2))
874#define PKA_ECC_ADD_SCRATCHPAD_WORDS(blen) \
875 (2 * PKA_COORDINATE_WORDS(blen) + 5 * PKA_COORDINATE_WORDS(blen + 1))
876#define PKA_ECC_MUL_SCRATCHPAD_WORDS(blen) \
877 (18 * PKA_COORDINATE_WORDS(blen) + MAX(8, PKA_COORDINATE_WORDS(blen)))
878#define PKA_POINT_WORDS(len) \
879 (2 * PKA_COORDINATE_WORDS(len))
uint32_t pka_word_from_pka_ram(uintptr_t offset)
Retrieves a word from the PKA RAM.
void pka_run_function(uint32_t function)
Initiates the given PKA function.
void pka_word_to_pka_ram(uint32_t word, uintptr_t offset)
Copies a word to the PKA RAM.
void pka_register_process_notification(struct process *p)
Registers a process to be notified of the completion of a PKA operation.
void pka_big_endian_from_pka_ram(uint8_t *bytes, size_t num_words, uintptr_t offset)
Retrieves a big-endian sequence of bytes from the PKA RAM.
void pka_disable(void)
Disables the PKA engine.
void pka_init(void)
Enables and resets the PKA engine.
void pka_enable(void)
Enables the PKA engine.
void pka_little_endian_to_pka_ram(const uint32_t *words, size_t num_words, uintptr_t offset)
Copies a little-endian sequence of words to the PKA RAM.
void pka_big_endian_to_pka_ram(const uint8_t *bytes, size_t num_bytes, uintptr_t offset)
Copies a big-endian sequence of bytes to the PKA RAM.
bool pka_check_status(void)
Checks the status of the PKA engine operation.