summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cesar/hal/phy/inc/bridgedma_proto.h6
-rw-r--r--cesar/hal/phy/src/bridgedma.c42
-rw-r--r--cesar/hal/phy/test/bridgedma-proto/sparc-Makefile6
-rw-r--r--cesar/hal/phy/test/bridgedma-proto/src/bridgedma-crc-test.c255
-rw-r--r--cesar/hal/phy/test/bridgedma-proto/src/bridgedma-init-test.c1
-rw-r--r--cesar/hal/phy/test/bridgedma-proto/synth-Makefile5
6 files changed, 277 insertions, 38 deletions
diff --git a/cesar/hal/phy/inc/bridgedma_proto.h b/cesar/hal/phy/inc/bridgedma_proto.h
index a082ec51a3..1ef1f82d06 100644
--- a/cesar/hal/phy/inc/bridgedma_proto.h
+++ b/cesar/hal/phy/inc/bridgedma_proto.h
@@ -31,6 +31,9 @@
#ifdef __sparc__
+#define bridgedma_crc_compute_continue_block crc_compute_continue_block_le
+#define bridgedma_crc_compute_block crc_compute_block_le
+
#define BRIDGEDMA_PROTO_ECOS_IT_BASE_REGISTER 0x80000098
#define BRIDGEDMA_PROTO_ECOS_IT_ENABLE_REGISTER \
BRIDGEDMA_PROTO_ECOS_IT_BASE_REGISTER
@@ -45,6 +48,9 @@
#define BRIDGEDMA_PROTO_ECOS_IT_DISABLE_REGISTER \
BRIDGEDMA_PROTO_ECOS_IT_BASE_REGISTER
+#define bridgedma_crc_compute_continue_block crc_compute_continue_block
+#define bridgedma_crc_compute_block crc_compute_block
+
#endif /* ! __sparc__ */
diff --git a/cesar/hal/phy/src/bridgedma.c b/cesar/hal/phy/src/bridgedma.c
index fb213b8577..e6763afc42 100644
--- a/cesar/hal/phy/src/bridgedma.c
+++ b/cesar/hal/phy/src/bridgedma.c
@@ -31,9 +31,19 @@
#define ETH_BUFFER_SIZE(job) (ETH_BUFFER_MASK(job) + 1)
#define ETH_BUFFER_ADDR(job) (unsigned char *)((unsigned long)job->data_addr & ~ETH_BUFFER_MASK(job))
+
+#ifdef __sparc__
+ #define bridgedma_crc_compute_continue_block crc_compute_continue_block_le
+ #define bridgedma_crc_compute_block crc_compute_block_le
+#else
+ #define bridgedma_crc_compute_continue_block crc_compute_continue_block
+ #define bridgedma_crc_compute_block crc_compute_block
+#endif
+
static cyg_uint32 _bridgedma_ecos_isr(cyg_vector_t vector, cyg_addrword_t data)
{
- volatile uint* ecos_it_register = (uint*) BRIDGEDMA_PROTO_ECOS_IT_DISABLE_REGISTER;
+ volatile uint* ecos_it_register =
+ (uint*) BRIDGEDMA_PROTO_ECOS_IT_DISABLE_REGISTER;
/* nothing to do except calling the bridgedma callback */
phy_bridgedma_t *bridgedma_ctx;
@@ -45,7 +55,7 @@ static cyg_uint32 _bridgedma_ecos_isr(cyg_vector_t vector, cyg_addrword_t data)
bridgedma_ctx = (phy_bridgedma_t *)data;
if((*bridgedma_ctx->bridgedma_cb)(bridgedma_ctx->user_data,
- *((u32 *)((void *)&bridgedma_ctx->status))))
+ *((u32 *)((void *)&bridgedma_ctx->status))))
return CYG_ISR_CALL_DSR; // Cause DSR to be run
else
{
@@ -54,7 +64,8 @@ static cyg_uint32 _bridgedma_ecos_isr(cyg_vector_t vector, cyg_addrword_t data)
}
}
-static void _bridgedma_ecos_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
+static void _bridgedma_ecos_dsr(cyg_vector_t vector,
+ cyg_ucount32 count, cyg_addrword_t data)
{
/* nothing to do except calling the phy dsr */
phy_bridgedma_t *bridgedma_ctx;
@@ -131,7 +142,8 @@ phy_bridgedma_uninit (phy_bridgedma_t *ctx)
/**
* Fragment a mac_frame data into one or several PBs.
- * Mac frame data MUST NOT cross the mac frame buffer boundary (going at beginning of circular buffer)
+ * Mac frame data MUST NOT cross the mac frame buffer boundary
+ * (going at beginning of circular buffer)
* ie: we must have mac_ptr + mac_len <= end_of_mac_buffer
* \param pb_current pointer of pointer to first pb to store data
* \param pb_data_ptr pointer of pointer to data beginning into first pb
@@ -193,11 +205,13 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
unsigned long icv_final, icv_compare;
/* variable to write in the ecos raising it. */
- volatile uint* ecos_enable_it = (uint*) BRIDGEDMA_PROTO_ECOS_IT_ENABLE_REGISTER;
+ volatile uint* ecos_enable_it =
+ (uint*) BRIDGEDMA_PROTO_ECOS_IT_ENABLE_REGISTER;
ctx->job_current = job;
dbg_assert(job->data_addr);
- dbg_assert((job->header_len == 0) || (job->header_len == 2) || (job->header_len == 6));
+ dbg_assert((job->header_len == 0) || (job->header_len == 2) ||
+ (job->header_len == 6));
dbg_assert((job->data_len >= 60) && (job->data_len <= 1518));
dbg_assert(job->first_pb_desc);
dbg_assert(job->first_pb_offset < job->segment_len);
@@ -236,7 +250,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
MACFRAME_TO_PB); /* we are in little endian for simulator... */
if(!job->crc_error)
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
((unsigned char *)&job->mf_header1) + 2, 4);
@@ -250,7 +264,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
_pb_data_add(&pb_current, &data_ptr, job->segment_len, job->data_addr, ETH_BUFFER_ADDR(job) + ETH_BUFFER_SIZE(job) - job->data_addr, MACFRAME_TO_PB);
if(!job->crc_error)
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
job->data_addr,
@@ -259,7 +273,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
_pb_data_add(&pb_current, &data_ptr, job->segment_len, job->data_addr, ((unsigned long)(job->data_addr) + job->data_len) & ETH_BUFFER_MASK(job), MACFRAME_TO_PB);
if(!job->crc_error)
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
job->data_addr,
@@ -271,7 +285,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
_pb_data_add(&pb_current, &data_ptr, job->segment_len, job->data_addr, job->data_len, MACFRAME_TO_PB);
if(!job->crc_error)
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
job->data_addr, job->data_len);
@@ -315,7 +329,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
4,
PB_TO_MACFRAME); /* we are in little endian for simulator... */
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
((unsigned char *)&job->mf_header1) + 2, 4);
@@ -328,7 +342,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
{
_pb_data_add(&pb_current, &data_ptr, job->segment_len, job->data_addr, ETH_BUFFER_ADDR(job) + ETH_BUFFER_SIZE(job) - job->data_addr, PB_TO_MACFRAME);
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
job->data_addr,
@@ -336,7 +350,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
- job->data_addr);
_pb_data_add(&pb_current, &data_ptr, job->segment_len, (unsigned char *)((unsigned long)job->data_addr & ~ETH_BUFFER_MASK(job)), ((unsigned long)(job->data_addr) + job->data_len) & ETH_BUFFER_MASK(job), PB_TO_MACFRAME);
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
(unsigned char *)((unsigned long)job->data_addr & ~ETH_BUFFER_MASK(job)), ((unsigned long)(job->data_addr) + job->data_len) & ETH_BUFFER_MASK(job));
@@ -345,7 +359,7 @@ _job_process(phy_bridgedma_t *ctx, phy_bridgedma_job_t *job)
{
_pb_data_add(&pb_current, &data_ptr, job->segment_len, job->data_addr, job->data_len, PB_TO_MACFRAME);
ctx->proto_ctx.icv_current =
- crc_compute_continue_block(
+ bridgedma_crc_compute_continue_block(
&ctx->proto_ctx.crc_ctx,
ctx->proto_ctx.icv_current,
job->data_addr,
diff --git a/cesar/hal/phy/test/bridgedma-proto/sparc-Makefile b/cesar/hal/phy/test/bridgedma-proto/sparc-Makefile
index e2057c1c38..11d5430522 100644
--- a/cesar/hal/phy/test/bridgedma-proto/sparc-Makefile
+++ b/cesar/hal/phy/test/bridgedma-proto/sparc-Makefile
@@ -7,7 +7,8 @@ DEFS = -DCONFIG_BRIDGEDMA_PROTO
TARGET_PROGRAMS = test-bridgedma-proto \
test-bridgedma-proto-tx \
- test-bridgedma-proto-rx
+ test-bridgedma-proto-rx \
+ test-bridgedma-proto-crc
test-bridgedma-proto_SOURCES = bridgedma-init-test.c
test-bridgedma-proto_MODULES = hal/phy lib
@@ -18,6 +19,9 @@ test-bridgedma-proto-tx_MODULES = hal/phy lib
test-bridgedma-proto-rx_SOURCES = bridgedma-rx-test.c
test-bridgedma-proto-rx_MODULES = hal/phy lib
+test-bridgedma-proto-crc_SOURCES = bridgedma-crc-test.c
+test-bridgedma-proto-crc_MODULES = hal/phy lib
+
VARIANT = sparc
include $(BASE)/common/make/top.mk
diff --git a/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-crc-test.c b/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-crc-test.c
index 3fb731e0ff..22c9b6fa75 100644
--- a/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-crc-test.c
+++ b/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-crc-test.c
@@ -34,16 +34,48 @@
#define START_OFFSET 128
+
cyg_thread my_test_thread;
cyg_handle_t my_test_thread_handle;
u8 my_test_thread_stack [CYGNUM_HAL_STACK_SIZE_TYPICAL];
-phy_bridgedma_t *bridgedma_ctx;
+pb_t *my_pb_first;
+pb_t *my_pb_last;
+phy_bridgedma_job_t *job_current;
+
phy_bridgedma_job_t job1;
+phy_bridgedma_t *bridgedma_ctx;
+u8 frame_buffer [2048] __attribute__((aligned(2048)));
+crc_t crc_ctx;
+blk_t *pb_first, *pb_last, *pb_current;
+u32 mf_header;
+u32 enc_tab[256];
+uint ats;
/* WARNING: callback are not possible to test inside UNIT TEST */
-bool _bridgedma_cb(void *data, u32 status)
+bool _bridgedma_segmentation_cb(void *data, u32 status)
{
+ // If no more jobs to process by the bridgedma wake up the test thread to
+ // continue
+ if (!job_current)
+ {
+ cyg_thread_resume (my_test_thread_handle);
+ }
+
+ if (job_current)
+ {
+ diag_printf ("----- Bridge Cb ----\n");
+ diag_printf ("SSN : %d\n",
+ ((pb_t*)job_current->first_pb_desc)->header.ssn);
+ diag_printf ("offset : %d\n", job_current->first_pb_offset);
+ diag_printf ("length : %d\n", read_u16_from_word
+ (((pb_t *)job_current->first_pb_desc)->data +
+ job_current->first_pb_offset) >> 2);
+ diag_printf ("---- END Bridge Cb ----\n");
+ }
+
+ job_current = job_current->next;
+ return true;
}
/* WARNING: callback are not possible to test inside UNIT TEST */
@@ -60,14 +92,14 @@ void bridgedma_init_test_case(test_t t)
test_begin(t, "init")
{
bridgedma_ctx = NULL;
- bridgedma_ctx = phy_bridgedma_init(&user_data, _bridgedma_cb, _bridgedma_deffered_cb);
+ bridgedma_ctx = phy_bridgedma_init(&user_data, _bridgedma_segmentation_cb, _bridgedma_deffered_cb);
test_fail_unless(
(bridgedma_ctx != NULL)
&& (bridgedma_ctx->job_first == NULL)
&& (bridgedma_ctx->job_current == NULL)
&& (bridgedma_ctx->job_last == NULL)
&& (bridgedma_ctx->user_data == &user_data)
- && (bridgedma_ctx->bridgedma_cb == _bridgedma_cb)
+ && (bridgedma_ctx->bridgedma_cb == _bridgedma_segmentation_cb)
&& (bridgedma_ctx->deferred_cb == _bridgedma_deffered_cb)
&& !bridgedma_ctx->status.running
&& bridgedma_ctx->status.stop
@@ -76,27 +108,40 @@ void bridgedma_init_test_case(test_t t)
return;
}
-void
-bridgedma_crc_test_case (test_t test)
+void bridgedma_segmentation_test_case(test_t t)
{
- crc_t crc_ctx;
- unsigned long crc_current;
+ uint i;
+ pb_t *my_current;
+ dbg_assert (bridgedma_ctx);
+ test_case_begin(t, "segmentation");
- crc_ctx.width = 32;
- crc_ctx.generator = HPAV_CRC32_GENERATOR;
- crc_ctx.init = HPAV_CRC32_INIT;
- crc_ctx.refin = true;
- crc_ctx.refout = true;
- crc_ctx.xorout = 0xffffffff;
- crc_ctx.reg_init = 0;
- crc_ctx.table.t32 = enc_tab;
- crc_init(&crc_ctx);
+ pb_first = blk_alloc_desc_range(4, &pb_last);
+ pb_last->next = NULL;
+
+ my_pb_first = (pb_t *) pb_first;
+ my_pb_last = (pb_t *)pb_last;
+
+ my_current = my_pb_first;
+ for (i = 0; i < 4; i++)
+ {
+ my_current->header.ssn = i;
+ my_current = my_current->next;
+ }
+
+ ats = 0x12345678;
+ /************************************************************************
+ * simple segmentation with 3 mac frames into 5 PBs
+ * 1st mac frame: len=1518, offset=128, ATS, ICV into 1st to 4th PB
+ * 2nd mac frame: len=64, ATS, ICV into 4th PB
+ * 3nd mac frame: len=466, ATS, ICV, padding into 4th to 5th PB
+ ***********************************************************************/
+
memset(&job1, '\0', sizeof(job1));
job1.next = NULL;
job1.data_addr = frame_buffer;
job1.header_len = 6;
- job1.data_len = MAC_FRAME_MAX_LEN;
+ job1.data_len = ETH_PACKET_MAX_SIZE;
job1.first_pb_desc = pb_first;
job1.first_pb_offset = START_OFFSET;
job1.segment_len = 512;
@@ -105,11 +150,166 @@ bridgedma_crc_test_case (test_t test)
job1.crc_store = 1;
job1.job_it = 1;
job1.eth_buffer_mask = 0x1fffff0; /* 2048 bytes mask */
- job1.mf_header1 = (((job1.data_len + 4 - 1) << 2) | 0x02);
- job1.mf_header2 = 0x0;
+ job1.mf_header1 = (((job1.data_len + 4 - 1) << 2) | 0x02) | (ats << 16); /* Payload + ATS */
+ job1.mf_header2 = (ats >> 16);
+
+ job_current = &job1;
+ phy_bridgedma_start (bridgedma_ctx, &job1, &job1);
+ return;
+}
- phy_bridgedma_start(bridgedma_ctx, &job1, &job1);
+void
+bridgedma_segmentation_crc_verify_test_case (test_t test)
+{
+ uint payload_cnt;
+ uint crc_current;
+ pb_t *my_pb_current;
+
+ uint i;
+ uint length;
+ uint pb_offset;
+ uint qte_pb;
+ uint frame_offset;
+ bool cont;
+
+ crc_ctx.width = 32;
+ crc_ctx.generator = HPAV_CRC32_GENERATOR;
+ crc_ctx.init = HPAV_CRC32_INIT;
+ crc_ctx.refin = true;
+ crc_ctx.refout = true;
+ crc_ctx.xorout = 0xffffffff;
+ crc_ctx.reg_init = 0;
+ crc_ctx.table.t32 = enc_tab;
+ crc_init(&crc_ctx);
+
+ test_begin(test, "segmentation of 1 frames")
+ {
+ for (i = 0, my_pb_current = my_pb_first; my_pb_current; my_pb_current =
+ my_pb_current->next, i++)
+ {
+ test_fail_if (my_pb_current->header.ssn != i, "Wong sequence");
+ }
+
+ /* check pb content */
+ /* check 1st mac frame into PB */
+ payload_cnt = 0;
+
+ pb_offset = START_OFFSET;
+ job_current = &job1;
+ frame_offset = 0;
+ pb_current = pb_first;
+
+ cont = true;
+ length = 1 + (read_u16_from_word (pb_current->data + pb_offset) >> 2);
+
+ // To get the payload length, the frame length is 10
+ // bytes greater.
+ length -= 4;
+
+ diag_printf ("Length read in pb : %d\n", length);
+ diag_printf ("pb ssn : %d\n", ((pb_t *)pb_current)->header.ssn);
+ diag_printf ("pb offset : %d\n", pb_offset);
+ test_fail_unless (length == job_current->data_len,
+ "Data length is wrong.");
+
+ // Copy the data of the current pb.
+
+ // Jump directly to the start of the payload.
+ pb_offset += 6;
+ crc_current = crc_compute_begin(&crc_ctx);
+ if (length + pb_offset > BLK_SIZE)
+ {
+ test_fail_unless (
+ bitstream_memcmp (frame_buffer + frame_offset,
+ pb_current->data + pb_offset,
+ BLK_SIZE - pb_offset),
+ "data corrupted");
+ frame_offset += BLK_SIZE - pb_offset;
+ length -= BLK_SIZE - pb_offset;
+ }
+ else
+ {
+ test_fail_unless (
+ bitstream_memcmp (frame_buffer + frame_offset,
+ pb_current->data + pb_offset,
+ length),
+ "data corrupted");
+ frame_offset += length;
+ cont = false;
+ }
+
+
+ if (cont)
+ {
+ // Add 10 to the length to use the complete MF length
+ // (ATS + MFH + ICV), the ATS and MFH are already include in the
+ // pb_offset.
+ for (qte_pb = (pb_offset + length + 4) / BLK_SIZE + 1;
+ qte_pb;
+ qte_pb --)
+ {
+ pb_current = pb_current->next;
+
+ if (length > BLK_SIZE)
+ {
+ test_fail_unless(
+ bitstream_memcmp (frame_buffer + frame_offset,
+ pb_current->data ,
+ BLK_SIZE),
+ "data corrupted");
+ length -= BLK_SIZE;
+ frame_offset += BLK_SIZE;
+ }
+ else
+ {
+ test_fail_unless(
+ bitstream_memcmp (frame_buffer + frame_offset,
+ pb_current->data ,
+ length),
+ "data corrupted");
+ frame_offset += length;
+ }
+ }
+ }
+
+ // The future offset is length + 4 cause of the ICV of the MF.
+ // The ATS and the MFH has already been jumped above in the
+ // pb_offset.
+ pb_offset = (pb_offset + job_current->data_len + 4) % BLK_SIZE;
+ } test_end;
+
+ test_begin (test, "Verify CRC")
+ {
+ uint mf_length;
+ uint offset;
+ uint crc_pb;
+ uint i;
+ u8 buffer_reconstitute [2048] __attribute__((aligned(2048)));
+
+ mf_length = (read_u16_from_word((u8 *) &job1.mf_header1)>> 2) + 3;
+ offset = (job1.first_pb_offset + mf_length) % BLK_SIZE;
+
+ crc_pb = read_u32_from_word (my_pb_last->data + offset);
+
+ for (i = 0; i < 6; i++)
+ buffer_reconstitute [i] = my_pb_first->data[130+i];
+ bitstream_memcpy (buffer_reconstitute + 4, frame_buffer,
+ ETH_PACKET_MAX_SIZE);
+
+ crc_current = bridgedma_crc_compute_block (&crc_ctx, buffer_reconstitute,
+ ETH_PACKET_MAX_SIZE + 4);
+
+ diag_printf ("Data length = %d\n", mf_length);
+ diag_printf ("ICV pos = %d\n", offset);
+
+ diag_printf ("CRC pb = %x\n", crc_pb);
+ diag_printf ("CRC frame = %x\n", crc_current);
+ test_fail_if (crc_current != crc_pb, "Wrong CRC computed");
+ }
+ test_end;
+
+ blk_release_desc_range((blk_t *)my_pb_first, (blk_t *) my_pb_last);
}
void
@@ -120,7 +320,8 @@ test_thread_process (cyg_addrword_t data)
test = (test_t *) data;
bridgedma_init_test_case (*test);
- bridgedma_crc_test_case (*test);
+ bridgedma_segmentation_test_case (*test);
+ bridgedma_segmentation_crc_verify_test_case (*test);
phy_bridgedma_uninit (bridgedma_ctx);
@@ -135,9 +336,19 @@ int
main (void)
{
test_t test;
+ uint i;
test_init (test, 0, NULL);
+ pb_first = NULL;
+ pb_last = NULL;
+
+ my_pb_first = NULL;
+ my_pb_last = NULL;
+
+ for (i = 0; i < 2048; i++)
+ frame_buffer[i] = i;
+
// Create the thread.
cyg_thread_create( 9,
&test_thread_process,
diff --git a/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-init-test.c b/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-init-test.c
index aec478f7ef..72bb6051f1 100644
--- a/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-init-test.c
+++ b/cesar/hal/phy/test/bridgedma-proto/src/bridgedma-init-test.c
@@ -43,6 +43,7 @@ phy_bridgedma_t *bridgedma_ctx;
/* WARNING: callback are not possible to test inside UNIT TEST */
bool _bridgedma_segmentation_cb(void *data, u32 status)
{
+ return true;
}
/* WARNING: callback are not possible to test inside UNIT TEST */
diff --git a/cesar/hal/phy/test/bridgedma-proto/synth-Makefile b/cesar/hal/phy/test/bridgedma-proto/synth-Makefile
index 1229c454b3..43e430838a 100644
--- a/cesar/hal/phy/test/bridgedma-proto/synth-Makefile
+++ b/cesar/hal/phy/test/bridgedma-proto/synth-Makefile
@@ -5,7 +5,8 @@ DEFS = -DCONFIG_BRIDGEDMA_PROTO
TARGET_PROGRAMS = test-bridgedma-proto \
test-bridgedma-proto-tx \
- test-bridgedma-proto-rx
+ test-bridgedma-proto-rx \
+ test-bridgedma-proto-crc
test-bridgedma-proto_SOURCES = bridgedma-init-test.c
test-bridgedma-proto_MODULES = hal/phy lib
@@ -16,6 +17,8 @@ test-bridgedma-proto-tx_MODULES = hal/phy lib
test-bridgedma-proto-rx_SOURCES = bridgedma-rx-test.c
test-bridgedma-proto-rx_MODULES = hal/phy lib
+test-bridgedma-proto-crc_SOURCES = bridgedma-crc-test.c
+test-bridgedma-proto-crc_MODULES = hal/phy lib
VARIANT = synth