From a7077153afda971b3c526bf23dd082e615ac2069 Mon Sep 17 00:00:00 2001 From: Anand Vastrad Date: Sat, 8 Jul 2017 19:11:46 -0700 Subject: lms8: Added 0003-Fix-device-file-referanc* patch which uses /dev/mei0. LMS uses /dev/mei to talk to mei, which is not present in recent kernels. So LMS fails to initialize and is broken. In addition to that the select timesout post write in SendMessage api which causes communication to mei fail leading to malfunctioning of LMS. 0003-Fix-device-file-referanc*.patch uses /dev/mei0 and removes select post write in SendMessage api and relies on write return length for write verification. This patch is required to get LMS properly working. Signed-off-by: Anand Vastrad Signed-off-by: Saul Wold --- ...-file-referance-to-dev-mei0-remove-select.patch | 91 ++++++++++++++++++++++ common/recipes-bsp/amt/lms8_8.0.0-7.bb | 1 + 2 files changed, 92 insertions(+) create mode 100644 common/recipes-bsp/amt/lms/0003-Fix-device-file-referance-to-dev-mei0-remove-select.patch (limited to 'common') diff --git a/common/recipes-bsp/amt/lms/0003-Fix-device-file-referance-to-dev-mei0-remove-select.patch b/common/recipes-bsp/amt/lms/0003-Fix-device-file-referance-to-dev-mei0-remove-select.patch new file mode 100644 index 00000000..433d3016 --- /dev/null +++ b/common/recipes-bsp/amt/lms/0003-Fix-device-file-referance-to-dev-mei0-remove-select.patch @@ -0,0 +1,91 @@ +Fix device file referance to /dev/mei0, remove select post write. + +LMS uses /dev/mei character device which is absent on current kernel versions causing LMS fail to initialize. LMS sends messages to MEI with a post select timeout. Select timeout causes SendMessage to fail causing LMS to not to communicate properly with MEI. + +Adding /dev/mei0 device file reference to check first and then /dev/mei sucessfully initializes LMS. Rely on write return length and remove select with timeout to fix communication with MEI. + +Upstream-Status: Pending + +Signed-off-by: Anand Vastrad +--- + src/mei/MEILinux.cpp | 43 +++++++------------------------------------ + 1 file changed, 7 insertions(+), 36 deletions(-) + +diff --git a/src/mei/MEILinux.cpp b/src/mei/MEILinux.cpp +index 1e9d28f..6d23f54 100755 +--- a/src/mei/MEILinux.cpp ++++ b/src/mei/MEILinux.cpp +@@ -94,13 +94,17 @@ bool MEILinux::Init(unsigned char reqProtocolVersion) + Deinit(); + } + +- _fd = open("/dev/mei", O_RDWR); ++ _fd = open("/dev/mei0", O_RDWR); + + if (_fd == -1 ) { + if (_verbose) { +- fprintf(stderr, "Error: Cannot establish a handle to the MEI driver\n"); ++ fprintf(stderr, "Warning: Cannot establish a handle to the MEI driver mei0, retrying with mei \n"); ++ } ++ _fd = open("/dev/mei", O_RDWR); ++ if (_fd == -1 ) { ++ fprintf(stderr, "Error: Cannot establish a handle to the MEI driver mei\n"); ++ return false; + } +- return false; + } + _initialized = true; + +@@ -181,13 +185,7 @@ int MEILinux::ReceiveMessage(unsigned char *buffer, int len, unsigned long timeo + int MEILinux::SendMessage(const unsigned char *buffer, int len, unsigned long timeout) + { + int rv = 0; +- int return_length =0; + int error = 0; +- fd_set set; +- struct timeval tv; +- +- tv.tv_sec = timeout / 1000; +- tv.tv_usec =(timeout % 1000) * 1000000; + + if (_verbose) { + fprintf(stdout, "call write length = %d\n", len); +@@ -198,35 +196,8 @@ int MEILinux::SendMessage(const unsigned char *buffer, int len, unsigned long ti + if (_verbose) { + fprintf(stderr,"write failed with status %d %d\n", rv, error); + } +- goto out; +- } +- +- return_length = rv; +- +- FD_ZERO(&set); +- FD_SET(_fd, &set); +- rv = select(_fd+1 ,&set, NULL, NULL, &tv); +- if (rv > 0 && FD_ISSET(_fd, &set)) { +- if (_verbose) { +- fprintf(stderr, "write success\n"); +- } + } +- else if (rv == 0) { +- if (_verbose) { +- fprintf(stderr, "write failed on timeout with status\n"); +- } +- goto out; +- } +- else { //rv<0 +- if (_verbose) { +- fprintf(stderr, "write failed on select with status %d\n", rv); +- } +- goto out; +- } +- +- rv = return_length; + +-out: + if (rv < 0) { + Deinit(); + } +-- +2.7.4 + diff --git a/common/recipes-bsp/amt/lms8_8.0.0-7.bb b/common/recipes-bsp/amt/lms8_8.0.0-7.bb index 842e34a0..145b307e 100644 --- a/common/recipes-bsp/amt/lms8_8.0.0-7.bb +++ b/common/recipes-bsp/amt/lms8_8.0.0-7.bb @@ -12,6 +12,7 @@ SRC_URI = "http://software.intel.com/sites/default/files/${BPN}-${PV}.tar.gz \ file://0001-Protocol.cpp-Add-whitespace-for-gcc6-compile-error.patch \ file://0001-Include-sys-select.h-for-fd_set.patch \ file://0002-Use-proper-netinet-in.h-API.patch \ + file://0003-Fix-device-file-referance-to-dev-mei0-remove-select.patch \ " COMPATIBLE_HOST = '(i.86|x86_64).*-linux' -- cgit v1.2.3-54-g00ecf