root/tools/testing/selftests/powerpc/dscr/dscr_user_test.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. check_dscr
  2. dscr_user
  3. main

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * POWER Data Stream Control Register (DSCR) SPR test
   4  *
   5  * This test modifies the DSCR value through both the SPR number
   6  * based mtspr instruction and then makes sure that the same is
   7  * reflected through mfspr instruction using either of the SPR
   8  * numbers.
   9  *
  10  * When using the privilege state SPR, the instructions such as
  11  * mfspr or mtspr are priviledged and the kernel emulates them
  12  * for us. Instructions using problem state SPR can be exuecuted
  13  * directly without any emulation if the HW supports them. Else
  14  * they also get emulated by the kernel.
  15  *
  16  * Copyright 2013, Anton Blanchard, IBM Corporation.
  17  * Copyright 2015, Anshuman Khandual, IBM Corporation.
  18  */
  19 #include "dscr.h"
  20 
  21 static int check_dscr(char *str)
  22 {
  23         unsigned long cur_dscr, cur_dscr_usr;
  24 
  25         cur_dscr = get_dscr();
  26         cur_dscr_usr = get_dscr_usr();
  27         if (cur_dscr != cur_dscr_usr) {
  28                 printf("%s set, kernel get %lx != user get %lx\n",
  29                                         str, cur_dscr, cur_dscr_usr);
  30                 return 1;
  31         }
  32         return 0;
  33 }
  34 
  35 int dscr_user(void)
  36 {
  37         int i;
  38 
  39         check_dscr("");
  40 
  41         for (i = 0; i < COUNT; i++) {
  42                 set_dscr(i);
  43                 if (check_dscr("kernel"))
  44                         return 1;
  45         }
  46 
  47         for (i = 0; i < COUNT; i++) {
  48                 set_dscr_usr(i);
  49                 if (check_dscr("user"))
  50                         return 1;
  51         }
  52         return 0;
  53 }
  54 
  55 int main(int argc, char *argv[])
  56 {
  57         return test_harness(dscr_user, "dscr_user_test");
  58 }

/* [<][>][^][v][top][bottom][index][help] */