<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Layerscape中的主题 Re: LS1046A EP MSI</title>
    <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1786173#M13853</link>
    <description>&lt;P&gt;I've seen that before and have also studied it, but that didn't really help that much as it's mostly linux-specific config that I don't know how to read. However I seem to got it to work with this:&lt;/P&gt;&lt;P&gt;volatile uint64_t uAddr = m_pPcieReg-&amp;gt;m_uMSIAddress + (((uint64_t)m_pPcieReg-&amp;gt;m_uMSIAddressUpper) &amp;lt;&amp;lt; 32);&lt;BR /&gt;volatile uint32_t* volatile pWrite = (uint32_t*)(0x4000000000 + uAddr);&lt;BR /&gt;// read configured MSI_Data and write it to MSI_Address (outgoing iATU)&lt;BR /&gt;*pWrite = m_pPcieReg-&amp;gt;m_uMSIData;&lt;/P&gt;&lt;P&gt;I can't just use any address in a iATU, it must be the one for PCIe (0x40_0000_0000). However that is nowhere explained in the reference manual, it was rather a guess. And only then did I also see that u-boot already set up an outgoing iATU from this address to 0 (on the bus). Maybe a little explanation in the manual might be useful.&lt;/P&gt;</description>
    <pubDate>Wed, 10 Jan 2024 16:07:27 GMT</pubDate>
    <dc:creator>fcenedese</dc:creator>
    <dc:date>2024-01-10T16:07:27Z</dc:date>
    <item>
      <title>LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1774036#M13744</link>
      <description>&lt;P&gt;Hello&lt;/P&gt;&lt;P&gt;We're creating a PCIe board for PC using an LS1046A as PCIe endpoint. It doesn't run linux but a proprietary RTOS, you can assume bare-metal. I already set up a BAR and can exchange data with PC (Windows for now, later also linux). But that's only using polling. For better performance I'd like to use interrupts.&lt;/P&gt;&lt;P&gt;PC -&amp;gt; LS1046A: As MSI is not possible I'm writing directly into register MSIIR (0x0158_0000) which triggers an interrupt. However the value in MSIR (0x0158_0004) is always 0x0000_0080, no matter what value I write. Is my understanding wrong that MSIIR can select which bit in which MSIR will be set? Shoould I do it differently?&lt;/P&gt;&lt;P&gt;LS1046A -&amp;gt; PC: I'm looking for code that can send an MSI on LS1046A which works without linux as OS. I saw the pci_endpoint_test.c but it didn't help me that much. Is there some other example code available? Or can somebody describe the necessary steps?&lt;/P&gt;&lt;P&gt;Thanks a lot&lt;/P&gt;</description>
      <pubDate>Wed, 13 Dec 2023 15:05:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1774036#M13744</guid>
      <dc:creator>fcenedese</dc:creator>
      <dc:date>2023-12-13T15:05:59Z</dc:date>
    </item>
    <item>
      <title>Re: LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1776305#M13760</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;Here's what I'm trying so far to send an interrupt from EP:&lt;/P&gt;&lt;P&gt;// Enabled Bus_master and Memory_space in Command_register, done in init&lt;BR /&gt;// *(volatile uint16*)0x03400004 = 0x0406&lt;BR /&gt;// Enabled MSI generation, done in init&lt;BR /&gt;// *(volatile uint16*)0x03400052 = 0x0089&lt;BR /&gt;// MSI&lt;BR /&gt;// with outgoing iATU from 0x015B0000 to 0xFEE00000, MSI_Address = 0xFEE00530)&lt;BR /&gt;volatile uint32* pReg = ((uint32*)0x015B0530);&lt;BR /&gt;// read configured MSI_Data and write it to MSI_Address (outgoing iATU)&lt;BR /&gt;*pReg = *(volatile uint32*)0x034C005C;&lt;/P&gt;&lt;P&gt;// legacy interrupt:&lt;BR /&gt;*(volatile uint32*)0x034C002C = 0x00000010;&lt;/P&gt;&lt;P&gt;But so far I couldn't get an interrupt on the driver side (RC) with any method. I assume the driver is correct as it works with other hardware. Is there anything else I need to do? Can the interrupt generation be checked without hardware analyzer?&lt;/P&gt;</description>
      <pubDate>Mon, 18 Dec 2023 09:52:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1776305#M13760</guid>
      <dc:creator>fcenedese</dc:creator>
      <dc:date>2023-12-18T09:52:46Z</dc:date>
    </item>
    <item>
      <title>Re: LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1780238#M13789</link>
      <description>&lt;P&gt;Please check whether this document would be helpful.&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.nxp.com/t5/QorIQ-Knowledge-Base/LS1046A-RDB-in-PCIe-Endpoint-Mode/ta-p/1107415" target="_blank"&gt;https://community.nxp.com/t5/QorIQ-Knowledge-Base/LS1046A-RDB-in-PCIe-Endpoint-Mode/ta-p/1107415&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 27 Dec 2023 03:43:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1780238#M13789</guid>
      <dc:creator>yipingwang</dc:creator>
      <dc:date>2023-12-27T03:43:44Z</dc:date>
    </item>
    <item>
      <title>Re: LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1786173#M13853</link>
      <description>&lt;P&gt;I've seen that before and have also studied it, but that didn't really help that much as it's mostly linux-specific config that I don't know how to read. However I seem to got it to work with this:&lt;/P&gt;&lt;P&gt;volatile uint64_t uAddr = m_pPcieReg-&amp;gt;m_uMSIAddress + (((uint64_t)m_pPcieReg-&amp;gt;m_uMSIAddressUpper) &amp;lt;&amp;lt; 32);&lt;BR /&gt;volatile uint32_t* volatile pWrite = (uint32_t*)(0x4000000000 + uAddr);&lt;BR /&gt;// read configured MSI_Data and write it to MSI_Address (outgoing iATU)&lt;BR /&gt;*pWrite = m_pPcieReg-&amp;gt;m_uMSIData;&lt;/P&gt;&lt;P&gt;I can't just use any address in a iATU, it must be the one for PCIe (0x40_0000_0000). However that is nowhere explained in the reference manual, it was rather a guess. And only then did I also see that u-boot already set up an outgoing iATU from this address to 0 (on the bus). Maybe a little explanation in the manual might be useful.&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jan 2024 16:07:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1786173#M13853</guid>
      <dc:creator>fcenedese</dc:creator>
      <dc:date>2024-01-10T16:07:27Z</dc:date>
    </item>
    <item>
      <title>Re: LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1787005#M13859</link>
      <description>&lt;P&gt;I've seen that before and have also studied it, but that didn't really help that much as it's mostly linux-specific config that I don't know how to read. However I seem to got it to work with this:&lt;/P&gt;&lt;P&gt;volatile uint64_t uAddr = m_pPcieReg-&amp;gt;m_uMSIAddress + (((uint64_t)m_pPcieReg-&amp;gt;m_uMSIAddressUpper) &amp;lt;&amp;lt; 32);&lt;BR /&gt;volatile uint32_t* volatile pWrite = (uint32_t*)(0x4000000000 + uAddr);&lt;BR /&gt;// read configured MSI_Data and write it to MSI_Address (outgoing iATU)&lt;BR /&gt;*pWrite = m_pPcieReg-&amp;gt;m_uMSIData;&lt;/P&gt;&lt;P&gt;I can't just use any address in a iATU, it must be the one for PCIe (0x40_0000_0000). However that is nowhere explained in the reference manual, it was rather a guess. And only then did I also see that u-boot already set up an outgoing iATU from this address to 0 (on the bus). Maybe a little explanation in the manual might be useful.&lt;/P&gt;&lt;P&gt;(That message got lost or was deleted)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jan 2024 08:18:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1787005#M13859</guid>
      <dc:creator>fcenedese</dc:creator>
      <dc:date>2024-01-11T08:18:21Z</dc:date>
    </item>
    <item>
      <title>Re: LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1787007#M13860</link>
      <description>&lt;P&gt;I've seen that before and have also studied it, but that didn't really help that much as it's mostly linux-specific config that I don't know how to read. However I seem to got it to work with this:&lt;/P&gt;&lt;P&gt;volatile uint64_t uAddr = m_pPcieReg-&amp;gt;m_uMSIAddress + (((uint64_t)m_pPcieReg-&amp;gt;m_uMSIAddressUpper) &amp;lt;&amp;lt; 32);&lt;BR /&gt;volatile uint32_t* volatile pWrite = (uint32_t*)(0x4000000000 + uAddr);&lt;BR /&gt;// read configured MSI_Data and write it to MSI_Address (outgoing iATU)&lt;BR /&gt;*pWrite = m_pPcieReg-&amp;gt;m_uMSIData;&lt;/P&gt;&lt;P&gt;I can't just use any address in a iATU, it must be the one for PCIe (0x40_0000_0000). However that is nowhere explained in the reference manual, it was rather a guess. And only then did I also see that u-boot already set up an outgoing iATU from this address to 0 (on the bus). Maybe a little explanation in the manual might be useful.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jan 2024 08:20:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1787007#M13860</guid>
      <dc:creator>fcenedese</dc:creator>
      <dc:date>2024-01-11T08:20:24Z</dc:date>
    </item>
    <item>
      <title>Re: LS1046A EP MSI</title>
      <link>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1787017#M13861</link>
      <description>&lt;P&gt;Sorry for the multiple posts, they didn't show up on my end and I thought they got lost&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jan 2024 08:30:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Layerscape/LS1046A-EP-MSI/m-p/1787017#M13861</guid>
      <dc:creator>fcenedese</dc:creator>
      <dc:date>2024-01-11T08:30:13Z</dc:date>
    </item>
  </channel>
</rss>

