<?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>P-SeriesのトピックRe: TSEC rx DMA putting in wrong spot?</title>
    <link>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887931#M4621</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you sir.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 27 Feb 2019 22:39:02 GMT</pubDate>
    <dc:creator>zwilcox</dc:creator>
    <dc:date>2019-02-27T22:39:02Z</dc:date>
    <item>
      <title>TSEC rx DMA putting in wrong spot?</title>
      <link>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887929#M4619</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm writing drivers for the TSEC.&amp;nbsp; I'm able to transmit.&amp;nbsp; I'm trying working on a bug while receiving.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;While setting up my Receive Buffer descriptors, I set the buffer pointer to their corresponding arrays.&lt;/P&gt;&lt;P&gt;When I receive a packet, the DMA puts it in 4 bytes before where I put my buffer pointer.&lt;BR /&gt;IE The DMA places the packet in&amp;nbsp;0x20d188 if I set my buffer pointer to&amp;nbsp;0x20d18c.&lt;BR /&gt;It does this for every packet I receive.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;I noticed the memory location is 64 bit aligned.&amp;nbsp; I know the Buffer Descriptor needs to be 64-bit aligned.&amp;nbsp; Does the buffer that the BD buffer pointer points to need to 64 bit aligned as well?&amp;nbsp; I receive the packet at the correct location when I aligned the buffer to 64 bits.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Below is a snippet of creating the BDs, buffers, and setting up the BD's&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="property macro token"&gt;#define NUM_OF_BD_BUFFER 10&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;typedef&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;struct&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 uint16_t flags&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//Flags Fields see Section 15.9.8.2 - table 15-1106 in RM&lt;/SPAN&gt;
 uint16_t length&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//Buffer length&lt;/SPAN&gt;
 uint32_t bufptr&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//Buffer Pointer&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt; txbd_t&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;typedef&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;struct&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 uint16_t flags&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//Flags Fields see Section 15.9.8.3 - table 15-1108 in RM&lt;/SPAN&gt;
 uint16_t length&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//Buffer Length&lt;/SPAN&gt;
 uint32_t bufptr&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//Buffer Pointer&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt; rxbd_t&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;typedef&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;struct&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;//The TxBD and RxBD need to be 64 bit aligned&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//this is due to the tbase/rbase register for the DMA needing to be 64 bit aligned&lt;/SPAN&gt;
 txbd_t txbd&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;NUM_OF_BD_BUFFER&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; __attribute__ &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;aligned &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;64&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 rxbd_t rxbd&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;NUM_OF_BD_BUFFER&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; __attribute__ &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;aligned &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;64&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

 tsec_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;regs&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 phy&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; phy&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

 uint32_t rx_idx&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//index of the current RX buffer&lt;/SPAN&gt;
 uint32_t tx_idx&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//index of the current TX buffer&lt;/SPAN&gt;
 uint64_t mac_address&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 uint32_t ip_address&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt; eth_device_t&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="property macro token"&gt;#define RX_BUFFER_SIZE 0x00001000&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;// size per receive buffer&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;//Why does it work when I align this to 64 bits? :smileysad:&lt;/SPAN&gt;
uint8_t rx_buffers&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;NUM_OF_BD_BUFFER&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;RX_BUFFER_SIZE&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;//__attribute__ ((aligned (64)));&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;setup_rx_buffer_bd&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;eth_device_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;dev&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;

 &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint8_t i &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; i &lt;SPAN class="operator token"&gt;&amp;lt;&lt;/SPAN&gt; NUM_OF_BD_BUFFER&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; i&lt;SPAN class="operator token"&gt;++&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 dev&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;rxbd&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;bufptr &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint32_t&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;rx_buffers&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//prepare the rx bds and mark them as empty&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint8_t i &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; i &lt;SPAN class="operator token"&gt;&amp;lt;&lt;/SPAN&gt; NUM_OF_BD_BUFFER&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; i&lt;SPAN class="operator token"&gt;++&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 &lt;SPAN class="comment token"&gt;//SEE Section 15.9.8.3 for flags&lt;/SPAN&gt;
 dev&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;rxbd&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;flags &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; RXBD_EMPTY &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt; RXBD_INTERRUPT&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

 dev&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;rxbd&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;NUM_OF_BD_BUFFER &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;flags &lt;SPAN class="operator token"&gt;|&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; RXBD_WRAP&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

 &lt;SPAN class="comment token"&gt;/*
 * Set the RBASE register. RBASE points to the start of
 * the receive BD ring. Note that at least two BDs should
 * be present in a transmit or receive BD ring
 */&lt;/SPAN&gt;
 dev&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;regs&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;rbase &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint32_t&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;dev&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;rxbd&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2019 18:38:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887929#M4619</guid>
      <dc:creator>zwilcox</dc:creator>
      <dc:date>2019-02-06T18:38:51Z</dc:date>
    </item>
    <item>
      <title>Re: TSEC rx DMA putting in wrong spot?</title>
      <link>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887930#M4620</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;P1020RM, Table Table 15-1108 states:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The receive buffer pointer, which always points to the first location of the associated data&lt;BR /&gt;buffer, must be 8-byte aligned. For best performance, use 64-byte aligned receive buffer&lt;BR /&gt;pointer addresses.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Platon&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Feb 2019 12:38:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887930#M4620</guid>
      <dc:creator>bpe</dc:creator>
      <dc:date>2019-02-19T12:38:25Z</dc:date>
    </item>
    <item>
      <title>Re: TSEC rx DMA putting in wrong spot?</title>
      <link>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887931#M4621</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you sir.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Feb 2019 22:39:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/P-Series/TSEC-rx-DMA-putting-in-wrong-spot/m-p/887931#M4621</guid>
      <dc:creator>zwilcox</dc:creator>
      <dc:date>2019-02-27T22:39:02Z</dc:date>
    </item>
  </channel>
</rss>

