app/testpmd: add async flow create/destroy operations
[dpdk.git] / app / test / test_power_cpufreq.c
index 52f58ef..4d013cd 100644 (file)
@@ -48,25 +48,27 @@ static uint32_t total_freq_num;
 static uint32_t freqs[TEST_POWER_FREQS_NUM_MAX];
 
 static int
-check_cur_freq(unsigned lcore_id, uint32_t idx)
+check_cur_freq(unsigned int lcore_id, uint32_t idx, bool turbo)
 {
 #define TEST_POWER_CONVERT_TO_DECIMAL 10
 #define MAX_LOOP 100
        FILE *f;
        char fullpath[PATH_MAX];
        char buf[BUFSIZ];
+       enum power_management_env env;
        uint32_t cur_freq;
+       uint32_t freq_conv;
        int ret = -1;
        int i;
 
        if (snprintf(fullpath, sizeof(fullpath),
-               TEST_POWER_SYSFILE_SCALING_FREQ, lcore_id) < 0) {
+               TEST_POWER_SYSFILE_CPUINFO_FREQ, lcore_id) < 0) {
                return 0;
        }
        f = fopen(fullpath, "r");
        if (f == NULL) {
                if (snprintf(fullpath, sizeof(fullpath),
-                       TEST_POWER_SYSFILE_CPUINFO_FREQ, lcore_id) < 0) {
+                       TEST_POWER_SYSFILE_SCALING_FREQ, lcore_id) < 0) {
                        return 0;
                }
                f = fopen(fullpath, "r");
@@ -80,17 +82,23 @@ check_cur_freq(unsigned lcore_id, uint32_t idx)
                        goto fail_all;
 
                cur_freq = strtoul(buf, NULL, TEST_POWER_CONVERT_TO_DECIMAL);
+               freq_conv = cur_freq;
+
+               env = rte_power_get_env();
+               if (env == PM_ENV_CPPC_CPUFREQ || env == PM_ENV_PSTATE_CPUFREQ) {
+                       /* convert the frequency to nearest 100000 value
+                        * Ex: if cur_freq=1396789 then freq_conv=1400000
+                        * Ex: if cur_freq=800030 then freq_conv=800000
+                        */
+                       freq_conv = (cur_freq + TEST_FREQ_ROUNDING_DELTA)
+                                               / TEST_ROUND_FREQ_TO_N_100000;
+                       freq_conv = freq_conv * TEST_ROUND_FREQ_TO_N_100000;
+               }
 
-               /* convert the frequency to nearest 100000 value
-                * Ex: if cur_freq=1396789 then freq_conv=1400000
-                * Ex: if cur_freq=800030 then freq_conv=800000
-                */
-               unsigned int freq_conv = 0;
-               freq_conv = (cur_freq + TEST_FREQ_ROUNDING_DELTA)
-                                       / TEST_ROUND_FREQ_TO_N_100000;
-               freq_conv = freq_conv * TEST_ROUND_FREQ_TO_N_100000;
-
-               ret = (freqs[idx] == freq_conv ? 0 : -1);
+               if (turbo)
+                       ret = (freqs[idx] <= freq_conv ? 0 : -1);
+               else
+                       ret = (freqs[idx] == freq_conv ? 0 : -1);
 
                if (ret == 0)
                        break;
@@ -183,7 +191,7 @@ check_power_get_freq(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, count);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, count, false);
        if (ret < 0)
                return -1;
 
@@ -233,7 +241,7 @@ check_power_set_freq(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1, false);
        if (ret < 0)
                return -1;
 
@@ -246,6 +254,8 @@ check_power_freq_down(void)
 {
        int ret;
 
+       rte_power_freq_enable_turbo(TEST_POWER_LCORE_ID);
+
        /* test with an invalid lcore id */
        ret = rte_power_freq_down(TEST_POWER_LCORE_INVALID);
        if (ret >= 0) {
@@ -269,7 +279,7 @@ check_power_freq_down(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1, false);
        if (ret < 0)
                return -1;
 
@@ -288,7 +298,7 @@ check_power_freq_down(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, 1);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, 1, false);
        if (ret < 0)
                return -1;
 
@@ -324,7 +334,7 @@ check_power_freq_up(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 2);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 2, false);
        if (ret < 0)
                return -1;
 
@@ -343,7 +353,7 @@ check_power_freq_up(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, 0, true);
        if (ret < 0)
                return -1;
 
@@ -371,7 +381,7 @@ check_power_freq_max(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, 0, true);
        if (ret < 0)
                return -1;
 
@@ -399,7 +409,7 @@ check_power_freq_min(void)
        }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, total_freq_num - 1, false);
        if (ret < 0)
                return -1;
 
@@ -431,9 +441,15 @@ check_power_turbo(void)
                                TEST_POWER_LCORE_ID);
                return -1;
        }
+       ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
+       if (ret < 0) {
+               printf("Fail to scale up the freq to max on lcore %u\n",
+                                               TEST_POWER_LCORE_ID);
+               return -1;
+       }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, 0);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, 0, true);
        if (ret < 0)
                return -1;
 
@@ -450,9 +466,15 @@ check_power_turbo(void)
                                TEST_POWER_LCORE_ID);
                return -1;
        }
+       ret = rte_power_freq_max(TEST_POWER_LCORE_ID);
+       if (ret < 0) {
+               printf("Fail to scale up the freq to max on lcore %u\n",
+                                               TEST_POWER_LCORE_ID);
+               return -1;
+       }
 
        /* Check the current frequency */
-       ret = check_cur_freq(TEST_POWER_LCORE_ID, 1);
+       ret = check_cur_freq(TEST_POWER_LCORE_ID, 1, false);
        if (ret < 0)
                return -1;
 
@@ -479,7 +501,8 @@ test_power_cpufreq(void)
 
        /* Test environment configuration */
        env = rte_power_get_env();
-       if ((env != PM_ENV_ACPI_CPUFREQ) && (env != PM_ENV_PSTATE_CPUFREQ)) {
+       if ((env != PM_ENV_ACPI_CPUFREQ) && (env != PM_ENV_PSTATE_CPUFREQ) &&
+                       (env != PM_ENV_CPPC_CPUFREQ)) {
                printf("Unexpectedly got an environment other than ACPI/PSTATE\n");
                goto fail_all;
        }
@@ -636,7 +659,7 @@ test_power_cpufreq(void)
        /* test of exit power management for an invalid lcore */
        ret = rte_power_exit(TEST_POWER_LCORE_INVALID);
        if (ret == 0) {
-               printf("Unpectedly exit power management successfully for "
+               printf("Unexpectedly exit power management successfully for "
                                "lcore %u\n", TEST_POWER_LCORE_INVALID);
                rte_power_unset_env();
                return -1;