Skip to content

Commit fc182ba

Browse files
authored
Merge pull request #23 from danielinux/freescale-ltc
Support for Freescale PKHA
2 parents 3aaf863 + db8918f commit fc182ba

File tree

7 files changed

+96
-30
lines changed

7 files changed

+96
-30
lines changed

arch.mk

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,20 @@ ifeq ($(ARCH),RISCV)
7575
OBJS+=src/boot_riscv.o src/vector_riscv.o
7676
ARCH_FLASH_OFFSET=0x20010000
7777
endif
78+
79+
80+
ifeq ($(TARGET),kinetis)
81+
CFLAGS+= -I$(KINETIS_DRIVERS)/drivers -I$(KINETIS_DRIVERS) -DCPU_$(KINETIS_CPU) -I$(KINETIS_CMSIS)/Include -DDEBUG_CONSOLE_ASSERT_DISABLE=1
82+
OBJS+= $(KINETIS_DRIVERS)/drivers/fsl_clock.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_flash.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_cache.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o
83+
## The following lines can be used to enable HW acceleration
84+
ifeq ($(KINETIS_CPU),MK82FN256VLL15)
85+
ifeq ($(PKA),1)
86+
ECC_EXTRA_CFLAGS+=-DFREESCALE_LTC_ECC -DFREESCALE_USE_LTC -DFREESCALE_LTC_TFM
87+
ECC_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/ksdk_port.o $(KINETIS_DRIVERS)/drivers/fsl_ltc.o
88+
endif
89+
endif
90+
endif
91+
7892

7993
CFLAGS+=-DARCH_FLASH_OFFSET=$(ARCH_FLASH_OFFSET)
8094

@@ -87,16 +101,6 @@ SIZE:=$(CROSS_COMPILE)size
87101
BOOT_IMG?=test-app/image.bin
88102

89103

90-
ifeq ($(TARGET),kinetis)
91-
CFLAGS+= -I$(KINETIS_DRIVERS)/drivers -I$(KINETIS_DRIVERS) -DCPU_$(KINETIS_CPU) -I$(KINETIS_CMSIS)/Include -DDEBUG_CONSOLE_ASSERT_DISABLE=1
92-
OBJS+= $(KINETIS_DRIVERS)/drivers/fsl_clock.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_flash.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_cache.o $(KINETIS_DRIVERS)/drivers/fsl_ftfx_controller.o
93-
## The following lines can be used to enable HW acceleration
94-
##ifeq ($(KINETIS_CPU),MK82FN256VLL15)
95-
## ECC_EXTRA_CFLAGS+=-DFREESCALE_LTC_ECC -DFREESCALE_USE_LTC
96-
## ECC_EXTRA_OBJS+=./lib/wolfssl/wolfcrypt/src/port/nxp/ksdk_port.o $(KINETIS_DRIVERS)/drivers/fsl_ltc.o
97-
##endif
98-
endif
99-
100104
ifeq ($(TARGET),stm32wb)
101105
ifneq ($(PKA),0)
102106
ECC_EXTRA_OBJS+= $(STM32CUBE)/Drivers/STM32WBxx_HAL_Driver/Src/stm32wbxx_hal_pka.o ./lib/wolfssl/wolfcrypt/src/port/st/stm32.o

config/examples/kinetis-k82f.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ SPMATH?=1
2020
RAM_CODE?=0
2121
DUALBANK_SWAP?=0
2222
IMAGE_HEADER_SIZE?=256
23+
PKA?=1
2324
WOLFBOOT_PARTITION_SIZE?=0x7A000
2425
WOLFBOOT_SECTOR_SIZE?=0x1000
2526
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0xA000

hal/kinetis.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
#include "fsl_ftfx_cache.h"
2828
#include "fsl_sysmpu.h"
2929

30+
#if defined(CPU_MK82FN256VLL15) && defined(FREESCALE_USE_LTC)
31+
#include <wolfssl/wolfcrypt/port/nxp/ksdk_port.h>
32+
#endif
33+
3034
static flash_config_t pflash;
3135
static ftfx_cache_config_t pcache;
3236
static int flash_init = 0;
@@ -217,6 +221,9 @@ void hal_init(void)
217221
{
218222
/* Disable MPU */
219223
SYSMPU_Enable(SYSMPU, false);
224+
#if defined(CPU_MK82FN256VLL15) && defined(FREESCALE_USE_LTC)
225+
ksdk_port_init();
226+
#endif
220227

221228
/* Set the system clock dividers in SIM to safe value. */
222229
#if defined(CPU_MK64FN1M0VLL12)

include/user_settings.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#define SINGLE_THREADED
3232
//#define WOLFSSL_SMALL_STACK
3333
#define WOLFCRYPT_ONLY
34-
#define TFM_TIMING_RESISTANT
34+
//#define TFM_TIMING_RESISTANT
3535

3636
/* ED25519 and SHA512 */
3737
#ifdef WOLFBOOT_SIGN_ED25519
@@ -47,25 +47,37 @@
4747
#ifdef WOLFBOOT_SIGN_ECC256
4848
# define HAVE_ECC
4949
# define ECC_TIMING_RESISTANT
50-
# define USE_FAST_MATH
50+
# undef USE_FAST_MATH
5151
# define FP_MAX_BITS (256 + 32)
5252

53+
54+
/* Kinetis LTC support */
5355
# ifdef FREESCALE_USE_LTC
5456
# define LTC_MAX_ECC_BITS (256)
5557
# define LTC_MAX_INT_BYTES (128)
58+
# ifndef LTC_BASE
5659
# define LTC_BASE ((LTC_Type *)LTC0_BASE)
57-
# else
58-
# define WOLFSSL_SP
59-
# define WOLFSSL_SP_SMALL
60-
# define WOLFSSL_SP_MATH
61-
# define SP_WORD_SIZE 32
62-
# define WOLFSSL_HAVE_SP_ECC
60+
# endif
6361
# endif
6462

63+
/* SP MATH */
64+
# define WOLFSSL_SP
65+
# define WOLFSSL_SP_MATH
66+
# define WOLFSSL_SP_SMALL
67+
# define SP_WORD_SIZE 32
68+
# define WOLFSSL_HAVE_SP_ECC
69+
70+
/* ECC options disabled to reduce size */
6571
# define NO_ECC_SIGN
6672
# define NO_ECC_EXPORT
6773
# define NO_ECC_DHE
6874
# define NO_ECC_KEY_EXPORT
75+
76+
/* Curve */
77+
# define NO_ECC192
78+
# define NO_ECC224
79+
# define HAVE_ECC256
80+
# define NO_ECC384
6981
#endif
7082

7183
/* Disables - For minimum wolfCrypt build */

src/xmalloc.c

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,12 @@
2626
#include <stdint.h>
2727

2828
/* Allow one single sp_point to be allocated at one time */
29-
#ifdef WOLFSSL_SP_ASM
29+
#ifdef FREESCALE_USE_LTC
30+
# define SP_POINT_SIZE (132)
31+
# define MAX_POINTS (3)
32+
# define SP_BIGINT_SIZE (128)
33+
# define MAX_BIGINTS (4)
34+
#elif defined(WOLFSSL_SP_ASM)
3035
# define SP_POINT_SIZE (196)
3136
# define SCRATCHBOARD_SIZE (512)
3237
# define SP_DIGITS_SIZE (320)
@@ -42,21 +47,25 @@
4247
#define TMP_BUFFER_SIZE (124)
4348
#define SP_NORMALIZER_SIZE (128)
4449

45-
static uint8_t sp_scratchboard[SCRATCHBOARD_SIZE];
46-
static int sp_scratchboard_in_use = 0;
4750

4851
static int sp_point_in_use[MAX_POINTS] = { };
4952
static uint8_t sp_point_buffer[MAX_POINTS][SP_POINT_SIZE];
5053

54+
#ifdef FREESCALE_USE_LTC
55+
static int sp_bigint_in_use[MAX_BIGINTS] = { };
56+
static uint8_t sp_bigint_buffer[MAX_BIGINTS][SP_BIGINT_SIZE];
57+
#else
5158
static uint8_t tmp_buffer[TMP_BUFFER_SIZE];
5259
static uint8_t sp_multipoint[SP_POINT_SIZE * MULTIPOINT_SIZE];
5360
static uint8_t sp_digits[SP_DIGITS_SIZE];
5461
static uint8_t sp_normalizer[SP_NORMALIZER_SIZE];
55-
62+
static uint8_t sp_scratchboard[SCRATCHBOARD_SIZE];
63+
static int sp_scratchboard_in_use = 0;
5664
static int tmp_buffer_in_use = 0;
5765
static int sp_multipoint_in_use = 0;
5866
static int sp_digits_in_use = 0;
5967
static int sp_normalizer_in_use = 0;
68+
#endif
6069

6170
static void* xmalloc_sp_point(void)
6271
{
@@ -70,6 +79,20 @@ static void* xmalloc_sp_point(void)
7079
return NULL;
7180
}
7281

82+
#ifdef FREESCALE_USE_LTC
83+
static void* xmalloc_sp_bigint(void)
84+
{
85+
int i;
86+
for (i = 0; i < MAX_BIGINTS; i++) {
87+
if (sp_bigint_in_use[i] == 0) {
88+
sp_bigint_in_use[i]++;
89+
return sp_bigint_buffer[i];
90+
}
91+
}
92+
return NULL;
93+
}
94+
#else
95+
7396
static void* xmalloc_sp_scratchboard(void)
7497
{
7598
if (sp_scratchboard_in_use)
@@ -111,10 +134,16 @@ static void* xmalloc_sp_normalizer(void)
111134
}
112135

113136

137+
#endif
138+
114139
void* XMALLOC(size_t n, void* heap, int type)
115140
{
116141
if (n == SP_POINT_SIZE)
117142
return xmalloc_sp_point();
143+
#ifdef FREESCALE_USE_LTC
144+
if (n == SP_BIGINT_SIZE)
145+
return xmalloc_sp_bigint();
146+
#else
118147
if (n == SCRATCHBOARD_SIZE)
119148
return xmalloc_sp_scratchboard();
120149
if (n == TMP_BUFFER_SIZE)
@@ -125,12 +154,27 @@ void* XMALLOC(size_t n, void* heap, int type)
125154
return xmalloc_sp_digits();
126155
if (n == SP_NORMALIZER_SIZE)
127156
return xmalloc_sp_normalizer();
157+
#endif
128158
return NULL;
129159
}
130160

131161
void XFREE(void *ptr)
132162
{
133163
int i;
164+
for (i = 0; i < MAX_POINTS; i++) {
165+
if (ptr == sp_point_buffer[i]) {
166+
sp_point_in_use[i] = 0;
167+
return;
168+
}
169+
}
170+
#ifdef FREESCALE_USE_LTC
171+
for (i = 0; i < MAX_BIGINTS; i++) {
172+
if (ptr == sp_bigint_buffer[i]) {
173+
sp_bigint_in_use[i] = 0;
174+
return;
175+
}
176+
}
177+
#else
134178
if (ptr == sp_scratchboard)
135179
sp_scratchboard_in_use = 0;
136180
if (ptr == tmp_buffer)
@@ -141,10 +185,5 @@ void XFREE(void *ptr)
141185
sp_digits_in_use = 0;
142186
if (ptr == sp_normalizer)
143187
sp_normalizer_in_use = 0;
144-
for (i = 0; i < MAX_POINTS; i++) {
145-
if (ptr == sp_point_buffer[i]) {
146-
sp_point_in_use[i] = 0;
147-
return;
148-
}
149-
}
188+
#endif
150189
}

test-app/app_kinetis.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,15 @@ void main(void) {
135135
BOARD_LED_GPIO->PDDR |= (1U << BOARD_LED_GPIO_PIN);
136136
GPIO_PortClear(BOARD_LED_GPIO, 1u << BOARD_LED_GPIO_PIN);
137137

138+
#if 0
138139
while(1) {
139140
for(i = 0; i < 7200000; i++) {
140141

141142
}
142143

143144
GPIO_PortToggle(BOARD_LED_GPIO, 1 << BOARD_LED_GPIO_PIN);
144145
}
146+
#endif
145147

146148
while(1)
147149
__WFI();

tools/config.mk

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ ifeq ($(ARCH),)
2323
RAM_CODE?=0
2424
DUALBANK_SWAP=0
2525
IMAGE_HEADER_SIZE?=256
26+
PKA=1
2627
WOLFBOOT_PARTITION_SIZE?=0x20000
2728
WOLFBOOT_SECTOR_SIZE?=0x20000
2829
WOLFBOOT_PARTITION_BOOT_ADDRESS?=0x20000
@@ -34,8 +35,8 @@ endif
3435
CONFIG_VARS:= ARCH TARGET SIGN KINETIS KINETIS_CPU KINETIS_DRIVERS \
3536
KINETIS_CMSIS FREEDOM_E_SDK STM32CUBE DEBUG VTOR CORTEX_M0 NO_ASM EXT_FLASH \
3637
SPI_FLASH ALLOW_DOWNGRADE NVM_FLASH_WRITEONCE WOLFBOOT_VERSION V \
37-
SPMATH RAM_CODE DUALBANK_SWAP IMAGE_HEADER_SIZE \
38-
WOLFBOOT_PARTITION_SIZE WOLFBOOT_SECTOR_SIZE \
38+
SPMATH RAM_CODE DUALBANK_SWAP IMAGE_HEADER_SIZE PKA \
39+
WOLFBOOT_PARTITION_SIZE WOLFBOOT_SECTOR_SIZE \
3940
WOLFBOOT_PARTITION_BOOT_ADDRESS WOLFBOOT_PARTITION_UPDATE_ADDRESS \
4041
WOLFBOOT_PARTITION_SWAP_ADDRESS
4142

0 commit comments

Comments
 (0)