90 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * POWER Data Stream Control Register (DSCR)4 *5 * This header file contains helper functions and macros6 * required for all the DSCR related test cases.7 *8 * Copyright 2012, Anton Blanchard, IBM Corporation.9 * Copyright 2015, Anshuman Khandual, IBM Corporation.10 */11#ifndef _SELFTESTS_POWERPC_DSCR_DSCR_H12#define _SELFTESTS_POWERPC_DSCR_DSCR_H13 14#include <unistd.h>15#include <stdio.h>16#include <stdlib.h>17#include <string.h>18#include <fcntl.h>19#include <dirent.h>20#include <pthread.h>21#include <sched.h>22#include <sys/types.h>23#include <sys/stat.h>24#include <sys/wait.h>25 26#include "reg.h"27#include "utils.h"28 29#define THREADS 100 /* Max threads */30#define COUNT 100 /* Max iterations */31#define DSCR_MAX 16 /* Max DSCR value */32#define LEN_MAX 100 /* Max name length */33 34#define DSCR_DEFAULT "/sys/devices/system/cpu/dscr_default"35#define CPU_PATH "/sys/devices/system/cpu/"36 37#define rmb() asm volatile("lwsync":::"memory")38#define wmb() asm volatile("lwsync":::"memory")39 40#define READ_ONCE(x) (*(volatile typeof(x) *)&(x))41 42/* Prilvilege state DSCR access */43inline unsigned long get_dscr(void)44{45 return mfspr(SPRN_DSCR_PRIV);46}47 48inline void set_dscr(unsigned long val)49{50 mtspr(SPRN_DSCR_PRIV, val);51}52 53/* Problem state DSCR access */54inline unsigned long get_dscr_usr(void)55{56 return mfspr(SPRN_DSCR);57}58 59inline void set_dscr_usr(unsigned long val)60{61 mtspr(SPRN_DSCR, val);62}63 64/* Default DSCR access */65unsigned long get_default_dscr(void)66{67 int err;68 unsigned long val;69 70 err = read_ulong(DSCR_DEFAULT, &val, 16);71 if (err) {72 perror("read() failed");73 exit(1);74 }75 return val;76}77 78void set_default_dscr(unsigned long val)79{80 int err;81 82 err = write_ulong(DSCR_DEFAULT, val, 16);83 if (err) {84 perror("write() failed");85 exit(1);86 }87}88 89#endif /* _SELFTESTS_POWERPC_DSCR_DSCR_H */90