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: Submitted [[email protected]] Signed-off-by: Anand Vastrad <[email protected]> --- .../amt/lms/0003-device-file-reference-fix.patch | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 common/recipes-bsp/amt/lms/0003-device-file-reference-fix.patch diff --git a/common/recipes-bsp/amt/lms/0003-device-file-reference-fix.patch b/common/recipes-bsp/amt/lms/0003-device-file-reference-fix.patch new file mode 100644 index 0000000..0269438 --- /dev/null +++ b/common/recipes-bsp/amt/lms/0003-device-file-reference-fix.patch @@ -0,0 +1,73 @@ +--- lms8_8.0.0-7.orig/src/mei/MEILinux.cpp 2012-10-11 05:16:05.000000000 -0700 ++++ lms8_8.0.0-7/src/mei/MEILinux.cpp 2017-06-21 15:14:13.725853901 -0700 +@@ -94,13 +94,17 @@ + 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::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 @@ + 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 -- _______________________________________________ meta-intel mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-intel
