2015-09-22 10:10:56 -07:00
/*
* Copyright ( C ) 2015 Imagination Technologies
2017-10-25 17:04:33 -07:00
* Author : Paul Burton < paul . burton @ mips . com >
2015-09-22 10:10:56 -07:00
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation ; either version 2 of the License , or ( at your
* option ) any later version .
*/
# include <asm/bcache.h>
# include <asm/debug.h>
2016-12-24 11:46:01 -08:00
# include <linux/uaccess.h>
2015-09-22 10:10:56 -07:00
# include <linux/debugfs.h>
# include <linux/init.h>
static ssize_t sc_prefetch_read ( struct file * file , char __user * user_buf ,
size_t count , loff_t * ppos )
{
bool enabled = bc_prefetch_is_enabled ( ) ;
char buf [ 3 ] ;
buf [ 0 ] = enabled ? ' Y ' : ' N ' ;
buf [ 1 ] = ' \n ' ;
buf [ 2 ] = 0 ;
return simple_read_from_buffer ( user_buf , count , ppos , buf , 2 ) ;
}
static ssize_t sc_prefetch_write ( struct file * file ,
const char __user * user_buf ,
size_t count , loff_t * ppos )
{
bool enabled ;
int err ;
2018-05-03 14:45:11 +03:00
err = kstrtobool_from_user ( user_buf , count , & enabled ) ;
2015-09-22 10:10:56 -07:00
if ( err )
return err ;
if ( enabled )
bc_prefetch_enable ( ) ;
else
bc_prefetch_disable ( ) ;
return count ;
}
static const struct file_operations sc_prefetch_fops = {
. open = simple_open ,
. llseek = default_llseek ,
. read = sc_prefetch_read ,
. write = sc_prefetch_write ,
} ;
static int __init sc_debugfs_init ( void )
{
2019-01-22 15:57:40 +01:00
struct dentry * dir ;
2015-09-22 10:10:56 -07:00
dir = debugfs_create_dir ( " l2cache " , mips_debugfs_dir ) ;
2019-01-22 15:57:40 +01:00
debugfs_create_file ( " prefetch " , S_IRUGO | S_IWUSR , dir , NULL ,
& sc_prefetch_fops ) ;
2015-09-22 10:10:56 -07:00
return 0 ;
}
late_initcall ( sc_debugfs_init ) ;