serial: Support Frame Check Sequence

According to DSP0253, implementing frame check sequence via
crc-16-ccitt calculation. crc-16-ccitt implementation refer
to RFC1662 Appendix C.

Tested:
Verified on sending/receiving mctp packets with mctp-serial
kernel driver.

Change-Id: I8417d521589e9f40a0ca68596cdcfd061fd919cc
Signed-off-by: John Chung <john.chung@arm.com>
diff --git a/tests/test_serial.c b/tests/test_serial.c
index e3a53a6..ac81f62 100644
--- a/tests/test_serial.c
+++ b/tests/test_serial.c
@@ -83,7 +83,23 @@
 
 	mctp_set_log_stdio(MCTP_LOG_DEBUG);
 
-	memset(&mctp_msg_src[0], 0x5a, MCTP_BTU);
+	/*
+	 * Adding data bytes (0x7e & 0x7d) for testing FCS calculation while the
+	 * escaped data is presented.
+	 *
+	 * Refer to DSP0253 chapter 7, data byte 0x7e / 0x7d should be replaced
+	 * to escape sequence 0x7d 0x5e / 0x7d 0x5d.
+	 *
+	 * For sender, FCS calculation should count data byte (0x7e / 0x7d) only,
+	 * not the escape sequece. For receiver, the escape sequence should be
+	 * translated back to data byte and put it in FCS calculation.
+	 *
+	 * If FCS calculation is not expected, similiar error msg
+	 * `serial: invalid fcs : 0xf5c1, expect 0x1d3e` will be observed.
+	 */
+	memset(&mctp_msg_src[0], 0x7e, 1);
+	memset(&mctp_msg_src[1], 0x7d, 1);
+	memset(&mctp_msg_src[2], 0x5a, MCTP_BTU - 2);
 	memset(&mctp_msg_src[MCTP_BTU], 0xa5, MCTP_BTU);
 
 	rc = pipe(p[0]);