This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VH-Q1: Setting gtc time causes rcu error

Part Number: TDA4VH-Q1


Hi  TI expert,

Our SDK version : 8.6

Our board model:j784s4_evm

Due to business requirements, we need to set the GTC time. When the time we set is before the current time, the system will appear rcu exception, and the system will occasionally stall, and the system time will be abnormal.The logs are as follows:

[1981-06-02 00:00:10][000041.883][r5f2][INF]ms 41883 us 41883979[   45.689382] rcu: INFO: rcu_preempt self-detected stall on CPU

[1981-06-02 00:00:10][000040.883][r5f2][INF]ms-1000 ms 40883 u[   45.699386] rcu:       1-...0: (1285 ticks this GP) idle=a16/0/0x3 softirq=514/514 fqs=2 
s 40883002
[1981-06-02 00:00:10][000039.883][r5f2][INF]us-1000000 ms 39883 us 39883004
[1981-06-02 00:00:13][000044.882][r5f2][INF]ms 44882 us 44882979
[1992-10-31 23:59:46][000043.882][r5f2][INF]ms-1000 ms 43882 us 43882002
[1992-10-31 23:59:46][000042.882][r5f2][INF]us-1000000 ms 42882 us 42882004
[1992-10-31 23:59:46][000047.881][r5f2][INF]ms 47881 us 47881979[   51.363295] rcu: INFO: rcu_preempt self-detected stall on CPU
[   51.374540] rcu:     0-...0: (3 ticks this GP) idle=e3e/0/0x7 softirq=237/238 fqs=2 

[1992-10-31 23:59:46][000046.881][r5f2][INF]ms-1000 ms 46881 us 46881002
[1992-10-31 23:59:46][000045.881][r5f2][INF]us-1000000 ms 45881 us 45881004
[1992-10-31 23:59:49][000050.880][r5f2][INF]ms 50880 us 50880979
[2004-04-01 23:59:21][000049.880][r5f2][INF]ms-1000 ms 49880 us 49880002
[2004-04-01 23:59:21][000048.880][r5f2][INF]us-1000000 ms 48880 us 48880004
[2004-04-01 23:59:23][000053.879][r5f2][INF]ms 53879 us 53879979[   57.728461] rcu: INFO: rcu_preempt self-detected stall on CPU

[2004-04-01 23:59:23][000052.879][r5f2][INF]ms-1000 ms 52879 u[   57.738708] rcu:       1-...!: (1 ticks this GP) idle=86a/0/0x3 softirq=527/527 fqs=1 
s 52879002
[2004-04-01 23:59:23][000051.879][r5f2][INF]us-1000000 ms 51879 us 51879004
[2004-04-01 23:59:26][000056.878][r5f2][INF]ms 56878 us 56878979
[2015-09-01 23:58:58][000055.878][r5f2][INF]ms-1000 ms 55878 us 55878002
[2015-09-01 23:58:58][000054.878][r5f2][INF]us-1000000 ms 54878 us 54878004
[2015-09-01 23:58:59][000059.877][r5f2][INF]ms 59877 us 59877979[   63.642745] rcu: INFO: rcu_preempt self-detected stall on CPU
[   63.653982] rcu:     0-...!: (3 ticks this GP) idle=4ae/0/0x7 softirq=296/297 fqs=1 

[2015-09-01 23:58:59][000058.877][r5f2][INF]ms-1000 ms 58877 us 58877002
[2015-09-01 23:58:59][000057.877][r5f2][INF]us-1000000 ms 57877 us 57877004
[2015-09-01 23:59:02][000062.876][r5f2][INF]ms 62876 us 62876979
[2027-01-31 23:58:34][000061.876][r5f2][INF]ms-1000 ms 61876 us 61876002
[2027-01-31 23:58:34][000060.876][r5f2][INF]us-1000000 ms 60876 us 60876004
[2027-01-31 23:58:35][000065.875][r5f2][INF]ms 65875 us 65875979[   70.162821] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:

[2027-01-31 23:58:35][000064.875][r5f2][INF]ms-1000 ms 64875 u[   70.172712] rcu:       3-...!: (0 ticks this GP) idle=cd6/1/0x4000000000000000 softirq=271/271 fqs=0 
s 64875002
[2027-01-31 23:58:35][000063.875][r5f2][INF]us-10000[   70.187021] rcu:         4-...!: (0 ticks this GP) idle=5d0/0/0x0 softirq=375/375 fqs=0  (false positive?)
00 ms 63875 us 63875004
[2027-01-31 23:58:38][000068.874][r5f2][   70.201586] rcu:      6-...!: (0 ticks this GP) idle=d28/0/0x0 softirq=257/257 fqs=0  (false positive?)
[INF]ms 68874 us 68874979
[   70.216260] rcu: rcu_preempt kthread starved for 90071719346 jiffies! g93 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=5
[   70.229246] rcu:     Unless rcu_preempt kthread gets sufficient CPU time, OOM is now expected behavior.
[   70.238355] rcu: RCU grace-period kthread stack dump:
[2038-07-02 23:58:11][000067.874][r5f2][INF]ms-1000 ms 67874 us 67874002
[2038-07-02 23:58:11][000066.874][r5f2][INF]us-1000000 ms 66874 us 66874004
[2038-07-02 23:58:11][000071.873][r5f2][INF]ms 71873 us 71873979[   76.163541] rcu: INFO: rcu_preempt self-detected stall on CPU
[   76.173081] rcu:     0-...!: (4 ticks this GP) idle=d72/0/0x3 softirq=321/322 fqs=1 

[2038-07-02 23:58:11][000070.873][r5f2][INF]ms-1000 ms 70873 us 70873002
[2038-07-02 23:58:11][000069.873][r5f2][INF]us-1000000 ms 69873 us 69873004
[2038-07-02 23:58:14][000074.872][r5f2][INF]ms 74872 us 74872979
[2038-07-02 23:58:14][000073.872][r5f2][INF]ms-1000 ms 73872 us 73872002
[2038-07-02 23:58:14][000072.872][r5f2][INF]us-1000000 ms 72872 us 72872004
[2049-12-01 23:57:47][000077.871][r5f2][INF]ms 77871 us 77871979[   82.165699] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:

[2049-12-01 23:57:47][000076.871][r5f2][INF]ms-1000 ms 76871 u[   82.175591] rcu:       0-...!: (1 GPs behind) idle=75e/0/0x3 softirq=330/332 fqs=0 
s 76871002
[2049-12-01 23:57:47][000075.871][r5f2][INF]us-10000[   82.188336] rcu:         1-...!: (2 ticks this GP) idle=99a/0/0x3 softirq=560/561 fqs=1 
00 ms 75871 us 75871004
[2049-12-01 23:57:50][000080.870][r5f2][   82.201342] rcu:      2-...!: (1 GPs behind) idle=c76/0/0x3 softirq=239/240 fqs=1 
[INF]ms 80870 us 80870979
[   82.214086] rcu:     3-...!: (1 GPs behind) idle=3b8/0/0x0 softirq=291/303 fqs=1 
[   82.223626] rcu:     4-...!: (12 ticks this GP) idle=628/0/0x0 softirq=395/395 fqs=1 
[   82.231175] rcu:     6-...!: (1 GPs behind) idle=f90/0/0x0 softirq=277/293 fqs=1 
[   82.238376] rcu:     7-...!: (1 ticks this GP) idle=ba6/0/0x3 softirq=396/397 fqs=1 
[2061-05-02 23:57:23][000079.870][r5f2][INF]ms-1000 ms 79870 us 79870002
[2061-05-02 23:57:23][000078.870][r5f2][INF]us-1000000 ms 78870 us 78870004
[2061-05-02 23:57:24][000083.869][r5f2][INF]ms 83869 us 83869979[   87.744263] rcu: INFO: rcu_preempt self-detected stall on CPU

[2061-05-02 23:57:24][000082.869][r5f2][INF]ms-1000 ms 82869 u[   87.754740] rcu:       3-...0: (1 ticks this GP) idle=6d2/0/0x3 softirq=323/323 fqs=2 
s 82869002

When I set it to a time after the current time, the system works fine.The logs are as follows:

[1970-01-01 00:01:02][000061.887][r5f2][INF]ms 61887 us 61887979
[1970-01-01 00:01:02][000062.887][r5f2][INF]ms+1000 ms 62887 us 62887002
[1970-01-01 00:01:02][000063.887][r5f2][INF]us+1000000 ms 63887 us 63887004
[1970-01-01 00:01:09][000068.886][r5f2][INF]ms 68886 us 68886979
[1970-01-01 00:01:09][000069.886][r5f2][INF]ms+1000 ms 69886 us 69886002
[1970-01-01 00:01:09][000070.886][r5f2][INF]us+1000000 ms 70886 us 70886004
[1970-01-01 00:01:16][000075.885][r5f2][INF]ms 75885 us 75885979
[1970-01-01 00:01:16][000076.885][r5f2][INF]ms+1000 ms 76885 us 76885002
[1970-01-01 00:01:16][000077.885][r5f2][INF]us+1000000 ms 77885 us 77885004
[1970-01-01 00:01:23][000082.884][r5f2][INF]ms 82884 us 82884979
[1970-01-01 00:01:23][000083.884][r5f2][INF]ms+1000 ms 83884 us 83884002
[1970-01-01 00:01:23][000084.884][r5f2][INF]us+1000000 ms 84884 us 84884004
[1970-01-01 00:01:30][000089.883][r5f2][INF]ms 89883 us 89883979
[1970-01-01 00:01:30][000090.883][r5f2][INF]ms+1000 ms 90883 us 90883002
[1970-01-01 00:01:30][000091.883][r5f2][INF]us+1000000 ms 91883 us 91883004
[1970-01-01 00:01:37][000096.882][r5f2][INF]ms 96882 us 96882978
[1970-01-01 00:01:37][000097.882][r5f2][INF]ms+1000 ms 97882 us 97882002
[1970-01-01 00:01:37][000098.882][r5f2][INF]us+1000000 ms 98882 us 98882004
[1970-01-01 00:01:43][000103.881][r5f2][INF]ms 103881 us 103881979
[1970-01-01 00:01:44][000104.881][r5f2][INF]ms+1000 ms 104881 us 104881002
[1970-01-01 00:01:44][000105.881][r5f2][INF]us+1000000 ms 105881 us 105881004
[1970-01-01 00:01:51][000110.880][r5f2][INF]ms 110880 us 110880978
[1970-01-01 00:01:51][000111.880][r5f2][INF]ms+1000 ms 111880 us 111880002
[1970-01-01 00:01:51][000112.880][r5f2][INF]us+1000000 ms 112880 us 112880004
[1970-01-01 00:01:58][000117.879][r5f2][INF]ms 117879 us 117879978
[1970-01-01 00:01:58][000118.879][r5f2][INF]ms+1000 ms 118879 us 118879002
[1970-01-01 00:01:58][000119.879][r5f2][INF]us+1000000 ms 119879 us 119879004
[1970-01-01 00:02:05][000124.878][r5f2][INF]ms 124878 us 124878978
[1970-01-01 00:02:05][000125.878][r5f2][INF]ms+1000 ms 125878 us 125878002
[1970-01-01 00:02:05][000126.878][r5f2][INF]us+1000000 ms 126878 us 126878004
[1970-01-01 00:02:12][000131.877][r5f2][INF]ms 131877 us 131877977
[1970-01-01 00:02:12][000132.877][r5f2][INF]ms+1000 ms 132877 us 132877002
[1970-01-01 00:02:12][000133.877][r5f2][INF]us+1000000 ms 133877 us 133877004
[1970-01-01 00:02:19][000138.876][r5f2][INF]ms 138876 us 138876978
[1970-01-01 00:02:19][000139.876][r5f2][INF]ms+1000 ms 139876 us 139876002
[1970-01-01 00:02:19][000140.876][r5f2][INF]us+1000000 ms 140876 us 140876004
[1970-01-01 00:02:26][000145.875][r5f2][INF]ms 145875 us 145875978
[1970-01-01 00:02:26][000146.875][r5f2][INF]ms+1000 ms 146875 us 146875002
[1970-01-01 00:02:26][000147.875][r5f2][INF]us+1000000 ms 147875 us 147875004
[1970-01-01 00:02:33][000152.874][r5f2][INF]ms 152874 us 152874978
[1970-01-01 00:02:33][000153.874][r5f2][INF]ms+1000 ms 153874 us 153874002
[1970-01-01 00:02:33][000154.874][r5f2][INF]us+1000000 ms 154874 us 154874004
[1970-01-01 00:02:40][000159.873][r5f2][INF]ms 159873 us 159873978
[1970-01-01 00:02:40][000160.873][r5f2][INF]ms+1000 ms 160873 us 160873002
[1970-01-01 00:02:40][000161.873][r5f2][INF]us+1000000 ms 161873 us 161873004
[1970-01-01 00:02:47][000166.872][][INF]ms 166872 us 166872978
[1970-01-01 00:02:47][000167.872][r5f2][INF]ms+1000 ms 167872 us 167872002
[1970-01-01 00:02:47][000168.872][r5f2][INF]us+1000000 ms 168872 us 168872004
[1970-01-01 00:02:54][000173.871][r5f2][INF]ms 173871 us 173871978
[1970-01-01 00:02:54][000174.871][r5f2][INF]ms+1000 ms 174871 us 174871002
[1970-01-01 00:02:54][000175.871][r5f2][INF]us+1000000 ms 175871 us 175871004
[1970-01-01 00:03:01][000180.870][r5f2][INF]m80870 us 180870978
[1970-01-01 00:03:01][000181.870][r5f2][INF]ms+1000 ms 181870 us 181870002
[1970-01-01 00:03:01][000182.870][r5f2][INF]us+1000000 ms 182870 us 182870004
[1970-01-01 00:03:08][000187.869][r5f2][INF]ms 187869 us 187869978
[1970-01-01 00:03:08][000188.869][r5f2][INF]ms+1000 ms 188869 us 188869002
[1970-01-01 00:03:08][000189.869][r5f2][INF]us+1000000 ms 189869 us 189869004
[1970-01-01 00:03:15][000194.868][r5f2][INF]ms 194868 us 194868978
[1970-01-01 00:03:15][000195.868][r5f2][INF]ms+1000 ms 195868 us 195868002
[1970-01-01 00:03:15][000196.868][r5f2][INF]us+1000000 ms 196868 us 196868004
[1970-01-01 00:03:22][000201.867][r5f2][INF]ms 201867 us 201867978
[1970-01-01 00:03:22][000202.867][r5f2][INF]ms+1000 ms 202867 us 202867002
[1970-01-01 00:03:22][000203.867][r5f2][INF]us+1000000 ms 203867 us 203867004
[1970-01-01 00:03:29][000208.866][r5f2][INF]ms 208866 us 208866978
[1970-01-01 0029][000209.866][r5f2][INF]ms+1000 ms 209866 us 209866002
[1970-01-01 00:03:29][000210.866][r5f2][INF]us+1000000 ms 210866 us 210866004
[1970-01-01 00:03:36][000215.865][r5f2][INF]ms 215865 us 215865978
[1970-01-01 00:03:36][000216.865][r5f2][INF]ms+1000 ms 216865 us 216865002
[1970-01-01 00:03:36][000217.865][r5f2][INF]us+1000000 ms 217865 us 217865004
[1970-01-01 00:03:43][000222.864][r5f2][INF]ms 222864 us 222864978
[1970-01-01 00:03:43][000223.864][r5f2][INF]ms+1000 ms 223864 us 223864002
[1970-01-01 00:03:43][000224.864][r5f2][INF]us+1000000 ms 224864 us 224864004

Below is my gtc timing implementation code:

INT32 hal_gtc_setms(UINT64 uMsec)
{
    /*select clock source*/
    UINT64 uCurrCycs;
    UINT32 uCntLow;
    UINT32 uCntHigh;
    UINT32 uCycsPerMsec;
    UINT32 uCntcr;

    uCycsPerMsec = g_gtcClk / 1000; /*200 000 clk/ per millisecond defaultly*/

    uCntcr = CSL_REG32_RD(g_gtc_base + CSL_GTC_CFG1_CNTCR);
    uCntcr &= ~0x1U;
    CSL_REG32_WR(g_gtc_base + CSL_GTC_CFG1_CNTCR, uCntcr); /* disable system counter */

    uCurrCycs = uMsec * uCycsPerMsec;
    uCntHigh = uCurrCycs >> 32;
    uCntLow = uCurrCycs & (0xFFFFFFFF);
    
    /* set globle system counter value */
    CSL_REG32_WR(g_gtc_base + CSL_GTC_CFG1_CNTCV_HI, uCntHigh);
    CSL_REG32_WR(g_gtc_base + CSL_GTC_CFG1_CNTCV_LO, uCntLow);

    uCntcr |= 0x1U;
    CSL_REG32_WR(g_gtc_base + CSL_GTC_CFG1_CNTCR, uCntcr); /* enable system counter */

    return 0;
}

Here is my test code:

while (1)
{
ms = hal_get_globalMs();
us = hal_get_globalUs();
pr_info("ms %lld us %lld\n", ms, us);

ms -=1000;
hal_gtc_setms(ms);

ms = hal_get_globalMs();
us = hal_get_globalUs();
pr_info("ms-1000 ms %lld us %lld\n", ms, us);

us -=1000000;
hal_gtc_setus(us);

ms = hal_get_globalMs();
us = hal_get_globalUs();
pr_info("us-1000000 ms %lld us %lld\n", ms, us);

sys_pthread_sleep(5000);
}

Q:Is there a problem with the way I set the gtc time? If there is no problem, is it normal to have rcu error printing and system time errors? Does gtc support setting the current time to the previous time?

Best regards !

QuanLi