Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
blackfin
mach-bf561
coreb.c
Go to the documentation of this file.
1
/* Load firmware into Core B on a BF561
2
*
3
* Copyright 2004-2009 Analog Devices Inc.
4
* Licensed under the GPL-2 or later.
5
*/
6
7
/* The Core B reset func requires code in the application that is loaded into
8
* Core B. In order to reset, the application needs to install an interrupt
9
* handler for Supplemental Interrupt 0, that sets RETI to 0xff600000 and
10
* writes bit 11 of SICB_SYSCR when bit 5 of SICA_SYSCR is 0. This causes Core
11
* B to stall when Supplemental Interrupt 0 is set, and will reset PC to
12
* 0xff600000 when COREB_SRAM_INIT is cleared.
13
*/
14
15
#include <linux/device.h>
16
#include <linux/fs.h>
17
#include <linux/kernel.h>
18
#include <
linux/miscdevice.h
>
19
#include <linux/module.h>
20
21
#define CMD_COREB_START _IO('b', 0)
22
#define CMD_COREB_STOP _IO('b', 1)
23
#define CMD_COREB_RESET _IO('b', 2)
24
25
static
long
26
coreb_ioctl(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
27
{
28
int
ret
= 0;
29
30
switch
(cmd) {
31
case
CMD_COREB_START
:
32
bfin_write_SYSCR
(
bfin_read_SYSCR
() & ~0x0020);
33
break
;
34
case
CMD_COREB_STOP
:
35
bfin_write_SYSCR
(
bfin_read_SYSCR
() | 0x0020);
36
bfin_write_SICB_SYSCR
(
bfin_read_SICB_SYSCR
() | 0x0080);
37
break
;
38
case
CMD_COREB_RESET
:
39
bfin_write_SICB_SYSCR
(
bfin_read_SICB_SYSCR
() | 0x0080);
40
break
;
41
default
:
42
ret = -
EINVAL
;
43
break
;
44
}
45
46
CSYNC();
47
48
return
ret
;
49
}
50
51
static
const
struct
file_operations
coreb_fops = {
52
.owner =
THIS_MODULE
,
53
.unlocked_ioctl = coreb_ioctl,
54
.llseek =
noop_llseek
,
55
};
56
57
static
struct
miscdevice
coreb_dev = {
58
.minor =
MISC_DYNAMIC_MINOR
,
59
.name =
"coreb"
,
60
.fops = &coreb_fops,
61
};
62
63
static
int
__init
bf561_coreb_init(
void
)
64
{
65
return
misc_register
(&coreb_dev);
66
}
67
module_init
(bf561_coreb_init);
68
69
static
void
__exit
bf561_coreb_exit(
void
)
70
{
71
misc_deregister
(&coreb_dev);
72
}
73
module_exit
(bf561_coreb_exit);
74
75
MODULE_AUTHOR
(
"Bas Vermeulen <
[email protected]
>"
);
76
MODULE_DESCRIPTION
(
"BF561 Core B Support"
);
77
MODULE_LICENSE
(
"GPL"
);
Generated on Thu Jan 10 2013 13:04:44 for Linux Kernel by
1.8.2