<?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>i.MX Processors中的主题 How to enable timer Interrupt in iMX8MQ EVK</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988745#M146829</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;I am trying to writing a bare metal OS in iMX8MQ EVK.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;The OS is loaded by uboot to DDR @address:&amp;nbsp;0x60900000. The OS is running in EL2 of AArch64.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;UL&gt;   &lt;LI&gt;The GIC is working if i enabled interrupt of UART or watch dog.&lt;/LI&gt;   &lt;LI&gt;And I can get the system counter work according the example of Linux kernel&amp;nbsp; in file&amp;nbsp;drivers/clocksource/timer-imx-sysctr.c.&lt;/LI&gt; &lt;/UL&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;The is the system counter return value when boot my OS.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;System counter return 6b497049&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CNTID: 0 , CNTSR: 256 , CNTCV 1799998267&amp;nbsp;&lt;/EM&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;But i can't get any interrupt from GIC.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;System Counter Address:&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;static void *sys_ctr_rd_base = 0x306a0000;&lt;BR /&gt;static void *sys_ctr_cmp_base = 0x306b0000;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;This is my code&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;int enable_timer(void)&lt;BR /&gt; {&lt;BR /&gt; uint64_t current_time;&lt;BR /&gt; uint32_t rd;&lt;BR /&gt;uint32_t i = 0; &lt;BR /&gt; &lt;BR /&gt; //&lt;BR /&gt; // Configure the interrupt controller&lt;BR /&gt; //&lt;BR /&gt; rd = initGIC();&lt;BR /&gt; &lt;BR /&gt;//&lt;BR /&gt; // Configure and enable the System Counter&lt;BR /&gt; //&lt;BR /&gt; printf("configure and enable the sytem couner \n");&lt;BR /&gt;setSystemCounterBaseAddr(0x306c0000); // Address of the System Counter&lt;BR /&gt; initSystemCounter(SYSTEM_COUNTER_CNTCR_nHDBG,&lt;BR /&gt; SYSTEM_COUNTER_CNTCR_FREQ0,&lt;BR /&gt; SYSTEM_COUNTER_CNTCR_nSCALE);&lt;BR /&gt;for (i = 10; i&amp;lt;50; i++) {&lt;BR /&gt;setIntPriority(i, rd, 0);&lt;BR /&gt;&amp;nbsp;setIntGroup(i, rd, 2);&lt;BR /&gt;&amp;nbsp;SetSPIRoute(i, 0, gicdirouter_ModeAny); // Route INTID to (this core)&lt;BR /&gt;&amp;nbsp;ConfigureSPI(i, gicdicfgr_Level); // Set INTID&amp;nbsp; as level-sensitive&lt;BR /&gt;&amp;nbsp;enableInt(i, rd); &lt;BR /&gt;&amp;nbsp;}&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;printf("Configure non-secure physical timer\n");&lt;BR /&gt; // Configure the Non-secure Physical Timer&lt;BR /&gt; // This uses the TVAL/timer to fire the timer in X ticks&lt;BR /&gt;~ current_time = getPhysicalCount();&lt;BR /&gt;~ setNSEL2PhysicalCompValue(current_time + 100000);&lt;BR /&gt;+ //setNSEL2PhysicalTimerValue(2000);&lt;BR /&gt;+ setNSEL2PhysicalTimerCtrl(CNTP_CTL_ENABLE);&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;}&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;uint32_t initGIC(void)&lt;BR /&gt; {&lt;BR /&gt; uint32_t rd;&lt;BR /&gt; &lt;BR /&gt; printf("setGIC addr\n");&lt;BR /&gt; // Set location of GIC&lt;BR /&gt; setGICAddr((void*)0x38800000, (void*)0x38880000);&lt;BR /&gt; &lt;BR /&gt; &lt;BR /&gt; printf("Enable GIC\n");&lt;BR /&gt; // Set location of GIC&lt;BR /&gt; // Enable GIC&lt;BR /&gt; enableGIC();&lt;BR /&gt; &lt;BR /&gt; printf("Get the ID of the Redistributor connected to this PE\n");&lt;BR /&gt; // Get the ID of the Redistributor connected to this PE&lt;BR /&gt; rd = getRedistID(getAffinity());&lt;BR /&gt; &lt;BR /&gt; printf("Mark this core as beign active\n");&lt;BR /&gt; // Mark this core as beign active&lt;BR /&gt; wakeUpRedist(rd);&lt;BR /&gt; &lt;BR /&gt; // Configure the CPU interface&lt;BR /&gt; // This assumes that the SRE bits are already set&lt;BR /&gt; setPriorityMask(0xFF);&lt;BR /&gt; printf("enableGroup0Ints skipped\n");&lt;BR /&gt; //enableGroup0Ints();&lt;BR /&gt; printf("enableGroup1Ints\n");&lt;BR /&gt; enableGroup1Ints();&lt;BR /&gt; &lt;BR /&gt; return rd;&lt;BR /&gt; }&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;+ void sysctr_timer_enable(int enable)&lt;BR /&gt;+ {&lt;BR /&gt;+ unsigned int val;&lt;BR /&gt;+ &lt;BR /&gt;+ val = mymmio_read_32(sys_ctr_cmp_base + CMPCR);&lt;BR /&gt;+ val &amp;amp;= ~SYS_CTR_EN;&lt;BR /&gt;+ if (enable)&lt;BR /&gt;+ val |= SYS_CTR_EN;&lt;BR /&gt;+ &lt;BR /&gt;+ mymmio_write_32(sys_ctr_cmp_base + CMPCR, val);&lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt;+ unsigned long sysctr_read_counter(void)&lt;BR /&gt;+ {&lt;BR /&gt;+ unsigned int cnt_hi, tmp_hi, cnt_lo;&lt;BR /&gt;+ &lt;BR /&gt;+ cnt_hi = mymmio_read_32(sys_ctr_rd_base + CNTCV_HI);&lt;BR /&gt;+ cnt_lo = mymmio_read_32(sys_ctr_rd_base + CNTCV_LO);&lt;BR /&gt;+ tmp_hi = mymmio_read_32(sys_ctr_rd_base + CNTCV_HI);&lt;BR /&gt;+ &lt;BR /&gt;+ return ((unsigned long) cnt_hi &amp;lt;&amp;lt; 32) | cnt_lo;&lt;BR /&gt;+ }&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;+ int sysctr_set_next_event(unsigned long delta)&lt;BR /&gt;+ {&lt;BR /&gt;+ unsigned int cmp_hi, cmp_lo;&lt;BR /&gt;+ unsigned long next;&lt;BR /&gt;+ &lt;BR /&gt;+ sysctr_timer_enable(false);&lt;BR /&gt;+ &lt;BR /&gt;+ next = sysctr_read_counter();&lt;BR /&gt;+ &lt;BR /&gt;+ next += delta;&lt;BR /&gt;+ &lt;BR /&gt;+ cmp_hi = (next &amp;gt;&amp;gt; 32) &amp;amp; 0x00fffff;&lt;BR /&gt;+ cmp_lo = next &amp;amp; 0xffffffff;&lt;BR /&gt;+ &lt;BR /&gt;+ mymmio_write_32(sys_ctr_cmp_base + CMPCV_HI, cmp_hi);&lt;BR /&gt;+ mymmio_write_32(sys_ctr_cmp_base + CMPCV_LO, cmp_lo);&lt;BR /&gt;+ &lt;BR /&gt;+ sysctr_timer_enable(true);&lt;BR /&gt;+ &lt;BR /&gt;+ return 0;&lt;BR /&gt;+ }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 31 Oct 2019 09:28:54 GMT</pubDate>
    <dc:creator>yali_zhang</dc:creator>
    <dc:date>2019-10-31T09:28:54Z</dc:date>
    <item>
      <title>How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988745#M146829</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;I am trying to writing a bare metal OS in iMX8MQ EVK.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;The OS is loaded by uboot to DDR @address:&amp;nbsp;0x60900000. The OS is running in EL2 of AArch64.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;UL&gt;   &lt;LI&gt;The GIC is working if i enabled interrupt of UART or watch dog.&lt;/LI&gt;   &lt;LI&gt;And I can get the system counter work according the example of Linux kernel&amp;nbsp; in file&amp;nbsp;drivers/clocksource/timer-imx-sysctr.c.&lt;/LI&gt; &lt;/UL&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;The is the system counter return value when boot my OS.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;EM&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;System counter return 6b497049&lt;/EM&gt;&lt;BR /&gt;&lt;EM&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;CNTID: 0 , CNTSR: 256 , CNTCV 1799998267&amp;nbsp;&lt;/EM&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;But i can't get any interrupt from GIC.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;System Counter Address:&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;static void *sys_ctr_rd_base = 0x306a0000;&lt;BR /&gt;static void *sys_ctr_cmp_base = 0x306b0000;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;This is my code&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;int enable_timer(void)&lt;BR /&gt; {&lt;BR /&gt; uint64_t current_time;&lt;BR /&gt; uint32_t rd;&lt;BR /&gt;uint32_t i = 0; &lt;BR /&gt; &lt;BR /&gt; //&lt;BR /&gt; // Configure the interrupt controller&lt;BR /&gt; //&lt;BR /&gt; rd = initGIC();&lt;BR /&gt; &lt;BR /&gt;//&lt;BR /&gt; // Configure and enable the System Counter&lt;BR /&gt; //&lt;BR /&gt; printf("configure and enable the sytem couner \n");&lt;BR /&gt;setSystemCounterBaseAddr(0x306c0000); // Address of the System Counter&lt;BR /&gt; initSystemCounter(SYSTEM_COUNTER_CNTCR_nHDBG,&lt;BR /&gt; SYSTEM_COUNTER_CNTCR_FREQ0,&lt;BR /&gt; SYSTEM_COUNTER_CNTCR_nSCALE);&lt;BR /&gt;for (i = 10; i&amp;lt;50; i++) {&lt;BR /&gt;setIntPriority(i, rd, 0);&lt;BR /&gt;&amp;nbsp;setIntGroup(i, rd, 2);&lt;BR /&gt;&amp;nbsp;SetSPIRoute(i, 0, gicdirouter_ModeAny); // Route INTID to (this core)&lt;BR /&gt;&amp;nbsp;ConfigureSPI(i, gicdicfgr_Level); // Set INTID&amp;nbsp; as level-sensitive&lt;BR /&gt;&amp;nbsp;enableInt(i, rd); &lt;BR /&gt;&amp;nbsp;}&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;printf("Configure non-secure physical timer\n");&lt;BR /&gt; // Configure the Non-secure Physical Timer&lt;BR /&gt; // This uses the TVAL/timer to fire the timer in X ticks&lt;BR /&gt;~ current_time = getPhysicalCount();&lt;BR /&gt;~ setNSEL2PhysicalCompValue(current_time + 100000);&lt;BR /&gt;+ //setNSEL2PhysicalTimerValue(2000);&lt;BR /&gt;+ setNSEL2PhysicalTimerCtrl(CNTP_CTL_ENABLE);&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;}&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;uint32_t initGIC(void)&lt;BR /&gt; {&lt;BR /&gt; uint32_t rd;&lt;BR /&gt; &lt;BR /&gt; printf("setGIC addr\n");&lt;BR /&gt; // Set location of GIC&lt;BR /&gt; setGICAddr((void*)0x38800000, (void*)0x38880000);&lt;BR /&gt; &lt;BR /&gt; &lt;BR /&gt; printf("Enable GIC\n");&lt;BR /&gt; // Set location of GIC&lt;BR /&gt; // Enable GIC&lt;BR /&gt; enableGIC();&lt;BR /&gt; &lt;BR /&gt; printf("Get the ID of the Redistributor connected to this PE\n");&lt;BR /&gt; // Get the ID of the Redistributor connected to this PE&lt;BR /&gt; rd = getRedistID(getAffinity());&lt;BR /&gt; &lt;BR /&gt; printf("Mark this core as beign active\n");&lt;BR /&gt; // Mark this core as beign active&lt;BR /&gt; wakeUpRedist(rd);&lt;BR /&gt; &lt;BR /&gt; // Configure the CPU interface&lt;BR /&gt; // This assumes that the SRE bits are already set&lt;BR /&gt; setPriorityMask(0xFF);&lt;BR /&gt; printf("enableGroup0Ints skipped\n");&lt;BR /&gt; //enableGroup0Ints();&lt;BR /&gt; printf("enableGroup1Ints\n");&lt;BR /&gt; enableGroup1Ints();&lt;BR /&gt; &lt;BR /&gt; return rd;&lt;BR /&gt; }&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;+ void sysctr_timer_enable(int enable)&lt;BR /&gt;+ {&lt;BR /&gt;+ unsigned int val;&lt;BR /&gt;+ &lt;BR /&gt;+ val = mymmio_read_32(sys_ctr_cmp_base + CMPCR);&lt;BR /&gt;+ val &amp;amp;= ~SYS_CTR_EN;&lt;BR /&gt;+ if (enable)&lt;BR /&gt;+ val |= SYS_CTR_EN;&lt;BR /&gt;+ &lt;BR /&gt;+ mymmio_write_32(sys_ctr_cmp_base + CMPCR, val);&lt;BR /&gt;+ }&lt;BR /&gt;+ &lt;BR /&gt;+ unsigned long sysctr_read_counter(void)&lt;BR /&gt;+ {&lt;BR /&gt;+ unsigned int cnt_hi, tmp_hi, cnt_lo;&lt;BR /&gt;+ &lt;BR /&gt;+ cnt_hi = mymmio_read_32(sys_ctr_rd_base + CNTCV_HI);&lt;BR /&gt;+ cnt_lo = mymmio_read_32(sys_ctr_rd_base + CNTCV_LO);&lt;BR /&gt;+ tmp_hi = mymmio_read_32(sys_ctr_rd_base + CNTCV_HI);&lt;BR /&gt;+ &lt;BR /&gt;+ return ((unsigned long) cnt_hi &amp;lt;&amp;lt; 32) | cnt_lo;&lt;BR /&gt;+ }&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;+ int sysctr_set_next_event(unsigned long delta)&lt;BR /&gt;+ {&lt;BR /&gt;+ unsigned int cmp_hi, cmp_lo;&lt;BR /&gt;+ unsigned long next;&lt;BR /&gt;+ &lt;BR /&gt;+ sysctr_timer_enable(false);&lt;BR /&gt;+ &lt;BR /&gt;+ next = sysctr_read_counter();&lt;BR /&gt;+ &lt;BR /&gt;+ next += delta;&lt;BR /&gt;+ &lt;BR /&gt;+ cmp_hi = (next &amp;gt;&amp;gt; 32) &amp;amp; 0x00fffff;&lt;BR /&gt;+ cmp_lo = next &amp;amp; 0xffffffff;&lt;BR /&gt;+ &lt;BR /&gt;+ mymmio_write_32(sys_ctr_cmp_base + CMPCV_HI, cmp_hi);&lt;BR /&gt;+ mymmio_write_32(sys_ctr_cmp_base + CMPCV_LO, cmp_lo);&lt;BR /&gt;+ &lt;BR /&gt;+ sysctr_timer_enable(true);&lt;BR /&gt;+ &lt;BR /&gt;+ return 0;&lt;BR /&gt;+ }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Oct 2019 09:28:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988745#M146829</guid>
      <dc:creator>yali_zhang</dc:creator>
      <dc:date>2019-10-31T09:28:54Z</dc:date>
    </item>
    <item>
      <title>Re: How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988746#M146830</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi zhang&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;one can refer to linux gpt interrupt example, described in sect.2.1.3.3 Timer &lt;BR /&gt;Source Code Structure, sect.2.1.2.4 Interrupt Source Code Structure&lt;BR /&gt;attached Linux Manual.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Oct 2019 23:42:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988746#M146830</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2019-10-31T23:42:27Z</dc:date>
    </item>
    <item>
      <title>Re: How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988747#M146831</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Ignorpadykov&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;Thanks. I will try to review the code of GPT in the Linux kernel.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;BTW, according to the i.MX_Referenc_Manul, The i.MX 8M used the&amp;nbsp;&lt;BR /&gt;System Counter instead of GP. And I tried to programming the GPT by myself, it doesn't work.&amp;nbsp;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;SPAN class=""&gt;The following tables describes the different timers used.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;TABLE style="border-width: 1px; border-color: #000000; background-color: #dbbfbf;"&gt;   &lt;TBODY&gt;    &lt;TR style="height: 24px;"&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;Timer &lt;/SPAN&gt;&lt;/TD&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;Description&lt;/SPAN&gt;&lt;/TD&gt;    &lt;/TR&gt;    &lt;TR style="height: 126px;"&gt;     &lt;TD style="height: 126px;" width="335"&gt;&lt;SPAN class=""&gt;General Purpose Timer (GPT) &lt;/SPAN&gt;&lt;/TD&gt;     &lt;TD style="height: 126px;" width="335"&gt;&lt;SPAN class=""&gt;GPT is configured to generate a periodic interrupt at a certain&lt;BR /&gt;interval (every 10 ms). Used by i.MX 6 to go into WFI mode.&lt;BR /&gt;Used by i.MX 6 and i.MX 7.&lt;/SPAN&gt;&lt;/TD&gt;    &lt;/TR&gt;    &lt;TR style="height: 24px;"&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;Enhanced Periodic Interrupt Timer (EPIT) &lt;/SPAN&gt;&lt;/TD&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;Available on i.MX 6 and i.MX 7.&lt;/SPAN&gt;&lt;/TD&gt;    &lt;/TR&gt;    &lt;TR style="height: 24px;"&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;Arm Arch Timer &lt;/SPAN&gt;&lt;/TD&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;i.MX 8 usage instead of GPT&lt;/SPAN&gt;&lt;/TD&gt;    &lt;/TR&gt;    &lt;TR style="height: 24px;"&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;System Counter Timer &lt;/SPAN&gt;&lt;/TD&gt;     &lt;TD style="height: 24px;" width="335"&gt;&lt;SPAN class=""&gt;i.MX 8M and i.MX 8X usage instead of GP&lt;/SPAN&gt;&lt;/TD&gt;    &lt;/TR&gt;   &lt;/TBODY&gt; &lt;/TABLE&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;This is the code from the Linux kernel. There is no iMX8MQ support.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;572 TIMER_OF_DECLARE(imx1_timer, "fsl,imx1-gpt", imx1_timer_init_dt);&lt;BR /&gt;573 TIMER_OF_DECLARE(imx21_timer, "fsl,imx21-gpt", imx21_timer_init_dt);&lt;BR /&gt;574 TIMER_OF_DECLARE(imx27_timer, "fsl,imx27-gpt", imx21_timer_init_dt);&lt;BR /&gt;575 TIMER_OF_DECLARE(imx31_timer, "fsl,imx31-gpt", imx31_timer_init_dt);&lt;BR /&gt;576 TIMER_OF_DECLARE(imx25_timer, "fsl,imx25-gpt", imx31_timer_init_dt);&lt;BR /&gt;577 TIMER_OF_DECLARE(imx50_timer, "fsl,imx50-gpt", imx31_timer_init_dt);&lt;BR /&gt;578 TIMER_OF_DECLARE(imx51_timer, "fsl,imx51-gpt", imx31_timer_init_dt);&lt;BR /&gt;579 TIMER_OF_DECLARE(imx53_timer, "fsl,imx53-gpt", imx31_timer_init_dt);&lt;BR /&gt;580 TIMER_OF_DECLARE(imx6q_timer, "fsl,imx6q-gpt", imx31_timer_init_dt);&lt;BR /&gt;581 TIMER_OF_DECLARE(imx6dl_timer, "fsl,imx6dl-gpt", imx6dl_timer_init_dt);&lt;BR /&gt;582 TIMER_OF_DECLARE(imx6sl_timer, "fsl,imx6sl-gpt", imx6dl_timer_init_dt);&lt;BR /&gt;583 TIMER_OF_DECLARE(imx6sll_timer, "fsl,imx6sll-gpt", imx6dl_timer_init_dt);&lt;BR /&gt;584 TIMER_OF_DECLARE(imx6sx_timer, "fsl,imx6sx-gpt", imx6dl_timer_init_dt);&lt;BR /&gt;585 TIMER_OF_DECLARE(imx6ul_timer, "fsl,imx6ul-gpt", imx6dl_timer_init_dt);&lt;BR /&gt;586 TIMER_OF_DECLARE(mx7d_timer, "fsl,imx7d-gpt", imx6dl_timer_init_dt);&lt;BR /&gt;587 #ifdef CONFIG_ARM64&lt;BR /&gt;588 subsys_initcall(imx8qxp_timer_init);&lt;BR /&gt;589 #endif&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2019 01:59:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988747#M146831</guid>
      <dc:creator>yali_zhang</dc:creator>
      <dc:date>2019-11-01T01:59:20Z</dc:date>
    </item>
    <item>
      <title>Re: How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988748#M146832</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;from source.codeaurora.org/external/imx/linux-imx/tree/arch/arm64/boot/dts/freescale/fsl-imx8mq.dtsi&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;it is compatible with "mx7d_timer, "fsl,imx7d-gpt"&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; gpt1: gpt@302d0000 {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;compatible = "fsl,imx8mq-gpt", "fsl,imx7d-gpt";&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;A class="link-titled" href="https://source.codeaurora.org/external/imx/linux-imx/tree/arch/arm64/boot/dts/freescale/fsl-imx8mq.dtsi?h=imx_4.14.98_2.2.0" title="https://source.codeaurora.org/external/imx/linux-imx/tree/arch/arm64/boot/dts/freescale/fsl-imx8mq.dtsi?h=imx_4.14.98_2.2.0"&gt;fsl-imx8mq.dtsi\freescale\dts\boot\arm64\arch - linux-imx - i.MX Linux kernel&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2019 05:15:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988748#M146832</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2019-11-01T05:15:54Z</dc:date>
    </item>
    <item>
      <title>Re: How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988749#M146833</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The GPT driver doesn't work in my side. I could read the timer count, but there is no interrupt from GIC.&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;I don't know what is missing.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2019 13:20:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988749#M146833</guid>
      <dc:creator>yali_zhang</dc:creator>
      <dc:date>2019-11-01T13:20:59Z</dc:date>
    </item>
    <item>
      <title>Re: How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988750#M146834</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;nxp has special service for helping with porting custom software&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;A class="link-titled" href="https://www.nxp.com/design/engineering-services:SW-SUPPORT" title="https://www.nxp.com/design/engineering-services:SW-SUPPORT"&gt;Commercial Support and Engineering Services | NXP&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;&lt;/P&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;P&gt;Best regards&lt;BR /&gt;igor&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Nov 2019 14:26:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988750#M146834</guid>
      <dc:creator>igorpadykov</dc:creator>
      <dc:date>2019-11-01T14:26:06Z</dc:date>
    </item>
    <item>
      <title>Re: How to enable timer Interrupt in iMX8MQ EVK</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988751#M146835</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;For system counter, we found that the interrupt ID should be 79 instead of 47. There are 32 bits shift. The driver code is similar with the Linux kernel driver in&amp;nbsp;drivers/clocksource/timer-imx-sysctr.c&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Nov 2019 07:20:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/How-to-enable-timer-Interrupt-in-iMX8MQ-EVK/m-p/988751#M146835</guid>
      <dc:creator>yali_zhang</dc:creator>
      <dc:date>2019-11-04T07:20:29Z</dc:date>
    </item>
  </channel>
</rss>

