<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii">
<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;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
span.n
        {mso-style-name:n;}
span.p
        {mso-style-name:p;}
span.o
        {mso-style-name:o;}
span.mi
        {mso-style-name:mi;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:638807685;
        mso-list-type:hybrid;
        mso-list-template-ids:756864570 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hi, Christophe and everyone from the LinuxPPC community,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Hope you are doing well!<o:p></o:p></p>
<p class="MsoNormal">I was working with Daniel, and we were reviewing the ipic source code and came to these questions:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]>The first one came up while reviewing the document “Understanding IPIC” from NXP (*). The document states that:<o:p></o:p></p>
<p class="MsoListParagraph" style="text-autospace:none"><i><span style="font-size:10.0pt;font-family:"Times New Roman",serif">System Error Status Register (SERSR) – 0x40: Each bit in the SERSR register corresponds to a non-maskable error source that generates
 a machine check exception (MCP). These bits are cleared by writing the bit location with a logic 1.<o:p></o:p></span></i></p>
<p class="MsoListParagraph" style="text-autospace:none"><i><span style="font-size:10.0pt;font-family:"Times New Roman",serif">The interrupting source must be cleared before clearing the interrupts error status bit.<o:p></o:p></span></i></p>
<p class="MsoListParagraph" style="text-autospace:none"><i><span style="font-size:10.0pt;font-family:"Times New Roman",serif">System Error Mask Register (SERMR) – 0x44 When a machine check exception is signaled from one of the peripheral modules, its corresponding
 flag bit in this register is set. Any of the interrupting sources can be individually masked.<o:p></o:p></span></i></p>
<p class="MsoNormal" style="text-autospace:none"><i><span style="font-size:10.0pt;font-family:"Times New Roman",serif"><o:p> </o:p></span></i></p>
<p class="MsoNormal" style="margin-left:.25in;text-indent:.25in;text-autospace:none">
We noticed that you changed the ipic_clear_mcp_status  function by swapping SERMR to SERSR, but we don’t fully understand why. Could you please elaborate on why this change is made? This because we had a code that was working before the patch and we would fully
 understand why it stopped working. From our perspective, both SERSR and SERMR are related to MCEs and honestly don’t know what’s the difference at the hardware level, and the role of every register on the machine check flow. It is also weird for us that before
 your patch the register SERSR wasn’t used in any part of the Linux kernel.<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><o:p> </o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo1;text-autospace:none">
<![if !supportLists]><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]>In commit 8acb88682cc00a41a677c2455a7c992d you removed ipic_set_highest_priority(), ipic_enable_mcp() and ipic_disable_mcp()because it wasn’t used but here we are confused because ipic_clear_mcp_status() sets all bits with the mask and
 in the old disable function the bits from the mask are cleared with a bitwise AND,changing the other bits from the SERMR register but the mcp_irq.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.25in;text-autospace:none"><o:p> </o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none">ipic_clear: <o:p>
</o:p></p>
<p class="MsoNormal" style="margin-left:.5in;text-indent:.5in;text-autospace:none">
<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/ipic_write"><span style="color:windowtext;text-decoration:none">ipic_write</span></a>(<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/primary_ipic"><span style="color:windowtext;text-decoration:none">primary_ipic</span></a>->regs,
<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/IPIC_SERMR"><span style="color:windowtext;text-decoration:none">IPIC_SERMR</span></a>, mask);<o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none">ipic_disable:<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none">                                <a href="https://elixir.bootlin.com/linux/v4.1.13/ident/temp">
<span style="color:windowtext;text-decoration:none">temp</span></a> = <a href="https://elixir.bootlin.com/linux/v4.1.13/ident/ipic_read">
<span style="color:windowtext;text-decoration:none">ipic_read</span></a>(<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/ipic"><span style="color:windowtext;text-decoration:none">ipic</span></a>->regs,
<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/IPIC_SERMR"><span style="color:windowtext;text-decoration:none">IPIC_SERMR</span></a>);<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none">                                <a href="https://elixir.bootlin.com/linux/v4.1.13/ident/temp">
<span style="color:windowtext;text-decoration:none">temp</span></a> &= (1 << (31 - mcp_irq));<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none">                                <a href="https://elixir.bootlin.com/linux/v4.1.13/ident/ipic_write">
<span style="color:windowtext;text-decoration:none">ipic_write</span></a>(<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/ipic"><span style="color:windowtext;text-decoration:none">ipic</span></a>->regs,
<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/IPIC_SERMR"><span style="color:windowtext;text-decoration:none">IPIC_SERMR</span></a>,
<a href="https://elixir.bootlin.com/linux/v4.1.13/ident/temp"><span style="color:windowtext;text-decoration:none">temp</span></a>);<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><o:p> </o:p></p>
<p class="MsoNormal" style="text-autospace:none">                Isn’t ipic_clear a set function instead of a clear function? This bring us confusion
<o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none">Another question is why these functions were created in the first place?<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><o:p> </o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo1;text-autospace:none">
<![if !supportLists]><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]>In the NXP document it states that: <i><span style="font-size:9.0pt">These bits are cleared by writing the bit location with a logic 1. The interrupting source must be cleared before clearing the interrupts error status bit.</span></i><o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.25in;text-indent:.25in;text-autospace:none">
Does this mean that these registers work with negative logic? How is this managed in the kernel?
<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.25in;text-indent:.25in;text-autospace:none">
The interrupting source is the SERMR register, the SERSR or any other?<o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none"><o:p> </o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l0 level1 lfo1;text-autospace:none">
<![if !supportLists]><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman"">      
</span></span><![endif]>What is the real difference between MCP and MCE? What are their uses?<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none">                <o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in;text-autospace:none">I know it is a lot of information but we are very confused about the use of these registers and we noticed that you are very involved on the PPC development. So we would like to hear from an
 expert.<o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none"><o:p> </o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none">Thank you very much for your time,<o:p></o:p></p>
<p class="MsoNormal" style="text-indent:.5in;text-autospace:none">Pablo<o:p></o:p></p>
<p class="MsoNormal" style="text-autospace:none"><o:p> </o:p></p>
<pre><span style="font-size:11.0pt;color:black"><o:p> </o:p></span></pre>
<p class="MsoNormal" style="margin-left:.5in;text-autospace:none"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p></o:p></p>
<p class="MsoNormal">(*) <a href="https://www.nxp.com/docs/en/application-note/AN3797.pdf">
https://www.nxp.com/docs/en/application-note/AN3797.pdf</a><o:p></o:p></p>
</div>
</body>
</html>