Skip to content

Commit 7acf0ff

Browse files
jasonbuxiaoxiang781216
authored andcommitted
drivertest_pm: compatible with SMP
Signed-off-by: buxiasen <buxiasen@xiaomi.com>
1 parent 9353bce commit 7acf0ff

File tree

1 file changed

+44
-26
lines changed

1 file changed

+44
-26
lines changed

testing/drivertest/drivertest_pm.c

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@
5656
*/
5757

5858
#define TEST_DOMAIN 0
59-
#define TEST_STAYTIMEOUT 100 /* in ms */
60-
#define TEST_WAITTIME 10000 /* in us */
59+
#define TEST_STAYTIMEOUT 10 /* in ms */
60+
#define TEST_WAITTIME 1000 /* in us */
6161

6262
/****************************************************************************
6363
* Private Functions Prototypes
@@ -150,16 +150,14 @@ static void test_pm_callback_notify(FAR struct pm_callback_s *cb,
150150

151151
static void test_pm(FAR void **argv)
152152
{
153-
int ret;
154-
int cnt;
155-
int domain;
156-
int staycount;
153+
int persist_stay_cnt[PM_COUNT];
157154
int init_delay;
155+
int staycount;
156+
int target;
158157
bool check;
159-
160-
ret = 0;
161-
cnt = TEST_PM_LOOP_COUNT;
162-
domain = TEST_DOMAIN;
158+
int domain = TEST_DOMAIN;
159+
int ret = 0;
160+
int cnt = TEST_PM_LOOP_COUNT;
163161

164162
if (CONFIG_PM_GOVERNOR_EXPLICIT_RELAX < 0)
165163
{
@@ -173,51 +171,64 @@ static void test_pm(FAR void **argv)
173171
CONFIG_SERIAL_PM_ACTIVITY_PRIORITY);
174172
}
175173

174+
usleep(init_delay * 1000000);
175+
usleep(TEST_WAITTIME);
176+
177+
for (int i = 0; i < PM_COUNT; i++)
178+
{
179+
persist_stay_cnt[i] = pm_staycount(domain, i);
180+
}
181+
176182
while (cnt--)
177183
{
178184
ret = pm_domain_register(domain, &g_test_pm_callback);
179185
assert_int_equal(ret, 0);
180186

181-
usleep(init_delay * 1000000);
182-
183187
/* test when pm prepare failed */
184188

185189
g_test_pm_dev.prepare_fail = true;
186190
for (int state = 0; state < PM_COUNT; state++)
187191
{
188-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check);
192+
target = persist_stay_cnt[state] + 0;
193+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
189194

190195
pm_stay(domain, state);
191196
usleep(TEST_WAITTIME);
192197
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
193198
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
194-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check);
199+
target = persist_stay_cnt[state] + 1;
200+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
195201

196202
pm_staytimeout(domain, state, TEST_STAYTIMEOUT);
197203
usleep(TEST_WAITTIME);
198204
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
199205
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
200-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 2, check);
206+
target = persist_stay_cnt[state] + 2;
207+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
201208
usleep(TEST_STAYTIMEOUT * 1000);
202209
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
203210
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
204-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check);
211+
target = persist_stay_cnt[state] + 1;
212+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
205213

206214
pm_relax(domain, state);
207215
usleep(TEST_WAITTIME);
208216
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
209217
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
210-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check);
218+
target = persist_stay_cnt[state] + 0;
219+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
211220

212221
pm_staytimeout(domain, state, TEST_STAYTIMEOUT);
213222
usleep(TEST_WAITTIME);
214223
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
215224
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
216-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check);
225+
target = persist_stay_cnt[state] + 1;
226+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
217227
usleep(TEST_STAYTIMEOUT * 1000);
218228
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
219229
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
220-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check);
230+
target = persist_stay_cnt[state] + 0;
231+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
221232
}
222233

223234
for (int state = 0; state < PM_COUNT; state++)
@@ -270,39 +281,46 @@ static void test_pm(FAR void **argv)
270281

271282
for (int state = 0; state < PM_COUNT; state++)
272283
{
273-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check);
284+
target = persist_stay_cnt[state] + 0;
285+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
274286

275287
pm_stay(domain, state);
276288
usleep(TEST_WAITTIME);
277289
assert_int_equal(g_test_pm_dev.state, state);
278290
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check);
279-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check);
291+
target = persist_stay_cnt[state] + 1;
292+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
280293

281294
pm_staytimeout(domain, state, TEST_STAYTIMEOUT);
282295
usleep(TEST_WAITTIME);
283296
assert_int_equal(g_test_pm_dev.state, state);
284297
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check);
285-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 2, check);
298+
target = persist_stay_cnt[state] + 2;
299+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
286300
usleep(TEST_STAYTIMEOUT * 1000);
287301
assert_int_equal(g_test_pm_dev.state, state);
288302
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check);
289-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check);
303+
target = persist_stay_cnt[state] + 1;
304+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
290305

291306
pm_relax(domain, state);
292307
usleep(TEST_WAITTIME);
293308
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
294309
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
295-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check);
310+
target = persist_stay_cnt[state] + 0;
311+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
296312

297313
pm_staytimeout(domain, state, TEST_STAYTIMEOUT);
298314
usleep(TEST_WAITTIME);
299315
assert_int_equal(g_test_pm_dev.state, state);
300316
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), state, check);
301-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 1, check);
317+
target = persist_stay_cnt[state] + 1;
318+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
302319
usleep(TEST_STAYTIMEOUT * 1000);
303320
assert_int_equal(g_test_pm_dev.state, PM_SLEEP);
304321
ASSERT_EQUAL_IF_CHECK(pm_querystate(domain), PM_SLEEP, check);
305-
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), 0, check);
322+
target = persist_stay_cnt[state] + 0;
323+
ASSERT_EQUAL_IF_CHECK(pm_staycount(domain, state), target, check);
306324
}
307325

308326
for (int state = 0; state < PM_COUNT; state++)

0 commit comments

Comments
 (0)