<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi Henbin,<o:p></o:p></p>
<p class="MsoNormal">I am assuming your device is 16 bit and in your last email you said 16bit check is failing. If that check fails then following code will not get executed. Also while loop is same as i2c_smbus_read_i2c_block_data().
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I would suggest one thing, if your 16bit check is passing and still you don’t see fru device, please make only one line change below and test.<o:p></o:p></p>
<p class="MsoNormal">    int ret = i2c_smbus_write_byte_data(file, high_addr, low_addr);<o:p></o:p></p>
<p class="MsoNormal">    //int ret = i2c_smbus_write_byte_data(file, 0, low_addr);<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Please let me know result.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Regards<o:p></o:p></p>
<p class="MsoNormal">-Vijay<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Henbin Chang <henbinchang@gmail.com><br>
<b>Date: </b>Sunday, March 24, 2019 at 6:39 PM<br>
<b>To: </b>Vijay Khemka <vijaykhemka@fb.com><br>
<b>Cc: </b>James Feist <james.feist@linux.intel.com>, OpenBMC Maillist <openbmc@lists.ozlabs.org><br>
<b>Subject: </b>Re: Some problems about FruDevice in the entity-manager<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Thanks for your response. <o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I also encountered another problem.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">That's,  I found the content of 16-bit EEPROM through the combination of the SMBUS APIs was not incorrect.<o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    /* This is for 16 bit addressing EEPROM device. First an offset<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">     * needs to be written before read data from a offset<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">     */<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    int ret = i2c_smbus_write_byte_data(file, 0, low_addr);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    if (ret < 0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        return ret;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    return i2c_smbus_read_i2c_block_data(file, high_addr, len, buf);<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">So I referred to i2c-tools to modify them. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">And then I could see my FRU under the tree of 'xyz/openbmc_project/FruDevice/'<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">    int ret = i2c_smbus_write_byte_data(file, high_addr, low_addr);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    //int ret = i2c_smbus_write_byte_data(file, 0, low_addr);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    if (ret < 0)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">        return ret;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    while (index < len){<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">buf[index] = i2c_smbus_read_byte(file);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">index++;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">    //return i2c_smbus_read_i2c_block_data(file, high_addr, len, buf);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    return len;<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Let me know if you have any comments.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks.<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>