Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
3d88e178
Commit
3d88e178
authored
Sep 16, 2004
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Fix iomem warnings in cpwatchdog driver.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
d26bfee3
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
48 deletions
+34
-48
drivers/sbus/char/cpwatchdog.c
drivers/sbus/char/cpwatchdog.c
+34
-48
No files found.
drivers/sbus/char/cpwatchdog.c
View file @
3d88e178
...
...
@@ -118,40 +118,26 @@
* UNKNOWN, MAGICAL MYSTERY REGISTER
*
*/
struct
wd_timer_regblk
{
volatile
__u16
dcntr
;
/* down counter - hw */
volatile
__u16
dcntr_pad
;
volatile
__u16
limit
;
/* limit register - hw */
volatile
__u16
limit_pad
;
volatile
__u8
status
;
/* status register - b */
volatile
__u8
status_pad
;
volatile
__u16
status_pad2
;
volatile
__u32
pad32
;
/* yet more padding */
};
#define WD_TIMER_REGSZ 16
#define WD0_OFF 0
#define WD1_OFF (WD_TIMER_REGSZ * 1)
#define WD2_OFF (WD_TIMER_REGSZ * 2)
#define PLD_OFF (WD_TIMER_REGSZ * 3)
struct
wd_pld_regblk
{
volatile
__u8
intr_mask
;
/* interrupt mask - b */
volatile
__u8
intr_mask_pad
;
volatile
__u16
intr_mask_pad2
;
volatile
__u8
status
;
/* device status - b */
volatile
__u8
status_pad
;
volatile
__u16
status_pad2
;
};
#define WD_DCNTR 0x00
#define WD_LIMIT 0x04
#define WD_STATUS 0x08
struct
wd_regblk
{
volatile
struct
wd_timer_regblk
wd0_regs
;
volatile
struct
wd_timer_regblk
wd1_regs
;
volatile
struct
wd_timer_regblk
wd2_regs
;
volatile
struct
wd_pld_regblk
pld_regs
;
};
#define PLD_IMASK (PLD_OFF + 0x00)
#define PLD_STATUS (PLD_OFF + 0x04)
/* Individual timer structure
*/
struct
wd_timer
{
__u16
timeout
;
__u8
intr_mask
;
unsigned
char
runstatus
;
vo
latile
struct
wd_timer_regblk
*
regs
;
unsigned
char
runstatus
;
vo
id
__iomem
*
regs
;
};
/* Device structure
...
...
@@ -165,7 +151,7 @@ struct wd_device {
unsigned
short
opt_timeout
;
unsigned
char
initialized
;
struct
wd_timer
watchdog
[
WD_NUMDEVS
];
vo
latile
struct
wd_regblk
*
regs
;
vo
id
__iomem
*
regs
;
};
static
struct
wd_device
wd_dev
=
{
...
...
@@ -495,12 +481,12 @@ static void wd_dumpregs(void)
i
,
wd_getstatus
(
&
wd_dev
.
watchdog
[
i
]));
}
printk
(
"
\t
intr_mask at
0x%lx
: 0x%x
\n
"
,
(
unsigned
long
)(
&
wd_dev
.
regs
->
pld_regs
.
intr_mask
),
readb
(
&
wd_dev
.
regs
->
pld_regs
.
intr_mask
));
printk
(
"
\t
pld_status at
0x%lx
: 0x%x
\n
"
,
(
unsigned
long
)(
&
wd_dev
.
regs
->
pld_regs
.
status
)
,
readb
(
&
wd_dev
.
regs
->
pld_regs
.
status
));
printk
(
"
\t
intr_mask at
%p
: 0x%x
\n
"
,
wd_dev
.
regs
+
PLD_IMASK
,
readb
(
wd_dev
.
regs
+
PLD_IMASK
));
printk
(
"
\t
pld_status at
%p
: 0x%x
\n
"
,
wd_dev
.
regs
+
PLD_STATUS
,
readb
(
wd_dev
.
regs
+
PLD_STATUS
));
}
#endif
...
...
@@ -513,7 +499,7 @@ static void wd_dumpregs(void)
*/
static
void
wd_toggleintr
(
struct
wd_timer
*
pTimer
,
int
enable
)
{
unsigned
char
curregs
=
wd_readb
(
&
wd_dev
.
regs
->
pld_regs
.
intr_mask
);
unsigned
char
curregs
=
wd_readb
(
wd_dev
.
regs
+
PLD_IMASK
);
unsigned
char
setregs
=
(
NULL
==
pTimer
)
?
(
WD0_INTR_MASK
|
WD1_INTR_MASK
|
WD2_INTR_MASK
)
:
...
...
@@ -523,7 +509,7 @@ static void wd_toggleintr(struct wd_timer* pTimer, int enable)
(
curregs
&=
~
setregs
)
:
(
curregs
|=
setregs
);
wd_writeb
(
curregs
,
&
wd_dev
.
regs
->
pld_regs
.
intr_mask
);
wd_writeb
(
curregs
,
wd_dev
.
regs
+
PLD_IMASK
);
return
;
}
...
...
@@ -534,8 +520,8 @@ static void wd_toggleintr(struct wd_timer* pTimer, int enable)
*/
static
void
wd_pingtimer
(
struct
wd_timer
*
pTimer
)
{
if
(
wd_readb
(
&
pTimer
->
regs
->
status
)
&
WD_S_RUNNING
)
{
wd_readw
(
&
pTimer
->
regs
->
dcntr
);
if
(
wd_readb
(
pTimer
->
regs
+
WD_STATUS
)
&
WD_S_RUNNING
)
{
wd_readw
(
pTimer
->
regs
+
WD_DCNTR
);
}
}
...
...
@@ -547,7 +533,7 @@ static void wd_pingtimer(struct wd_timer* pTimer)
*/
static
void
wd_stoptimer
(
struct
wd_timer
*
pTimer
)
{
if
(
wd_readb
(
&
pTimer
->
regs
->
status
)
&
WD_S_RUNNING
)
{
if
(
wd_readb
(
pTimer
->
regs
+
WD_STATUS
)
&
WD_S_RUNNING
)
{
wd_toggleintr
(
pTimer
,
WD_INTR_OFF
);
if
(
wd_dev
.
isbaddoggie
)
{
...
...
@@ -574,7 +560,7 @@ static void wd_starttimer(struct wd_timer* pTimer)
}
pTimer
->
runstatus
&=
~
WD_STAT_SVCD
;
wd_writew
(
pTimer
->
timeout
,
&
pTimer
->
regs
->
limit
);
wd_writew
(
pTimer
->
timeout
,
pTimer
->
regs
+
WD_LIMIT
);
wd_toggleintr
(
pTimer
,
WD_INTR_ON
);
}
...
...
@@ -584,7 +570,7 @@ static void wd_starttimer(struct wd_timer* pTimer)
static
void
wd_resetbrokentimer
(
struct
wd_timer
*
pTimer
)
{
wd_toggleintr
(
pTimer
,
WD_INTR_ON
);
wd_writew
(
WD_BLIMIT
,
&
pTimer
->
regs
->
limit
);
wd_writew
(
WD_BLIMIT
,
pTimer
->
regs
+
WD_LIMIT
);
}
/* Timer device initialization helper.
...
...
@@ -593,7 +579,7 @@ static void wd_resetbrokentimer(struct wd_timer* pTimer)
static
int
wd_inittimer
(
int
whichdog
)
{
struct
miscdevice
*
whichmisc
;
vo
latile
struct
wd_timer_regblk
*
whichregs
;
vo
id
__iomem
*
whichregs
;
char
whichident
[
8
];
int
whichmask
;
__u16
whichlimit
;
...
...
@@ -603,7 +589,7 @@ static int wd_inittimer(int whichdog)
case
WD0_ID
:
whichmisc
=
&
wd0_miscdev
;
strcpy
(
whichident
,
"RIC"
);
whichregs
=
&
wd_dev
.
regs
->
wd0_regs
;
whichregs
=
wd_dev
.
regs
+
WD0_OFF
;
whichmask
=
WD0_INTR_MASK
;
whichlimit
=
(
0
==
wd0_timeout
)
?
(
wd_dev
.
opt_timeout
)
:
...
...
@@ -612,7 +598,7 @@ static int wd_inittimer(int whichdog)
case
WD1_ID
:
whichmisc
=
&
wd1_miscdev
;
strcpy
(
whichident
,
"XIR"
);
whichregs
=
&
wd_dev
.
regs
->
wd1_regs
;
whichregs
=
wd_dev
.
regs
+
WD1_OFF
;
whichmask
=
WD1_INTR_MASK
;
whichlimit
=
(
0
==
wd1_timeout
)
?
(
wd_dev
.
opt_timeout
)
:
...
...
@@ -621,7 +607,7 @@ static int wd_inittimer(int whichdog)
case
WD2_ID
:
whichmisc
=
&
wd2_miscdev
;
strcpy
(
whichident
,
"POR"
);
whichregs
=
&
wd_dev
.
regs
->
wd2_regs
;
whichregs
=
wd_dev
.
regs
+
WD2_OFF
;
whichmask
=
WD2_INTR_MASK
;
whichlimit
=
(
0
==
wd2_timeout
)
?
(
wd_dev
.
opt_timeout
)
:
...
...
@@ -686,8 +672,8 @@ static void wd_brokentimer(unsigned long data)
static
int
wd_getstatus
(
struct
wd_timer
*
pTimer
)
{
unsigned
char
stat
=
wd_readb
(
&
pTimer
->
regs
->
status
);
unsigned
char
intr
=
wd_readb
(
&
wd_dev
.
regs
->
pld_regs
.
intr_mask
);
unsigned
char
stat
=
wd_readb
(
pTimer
->
regs
+
WD_STATUS
);
unsigned
char
intr
=
wd_readb
(
wd_dev
.
regs
+
PLD_IMASK
);
unsigned
char
ret
=
WD_STOPPED
;
/* determine STOPPED */
...
...
@@ -805,7 +791,7 @@ static void __exit wd_cleanup(void)
* also now eventually trip.
*/
for
(
id
=
WD0_ID
;
id
<
WD_NUMDEVS
;
++
id
)
{
if
(
WD_S_RUNNING
==
wd_readb
(
&
wd_dev
.
watchdog
[
id
].
regs
->
status
))
{
if
(
WD_S_RUNNING
==
wd_readb
(
wd_dev
.
watchdog
[
id
].
regs
+
WD_STATUS
))
{
if
(
wd_dev
.
opt_enable
)
{
printk
(
KERN_WARNING
"%s%i: timer not stopped at release
\n
"
,
WD_OBPNAME
,
id
);
...
...
@@ -818,7 +804,7 @@ static void __exit wd_cleanup(void)
"%s%i: defect workaround disabled at release, "
\
"timer expires in ~%01i sec
\n
"
,
WD_OBPNAME
,
id
,
wd_readw
(
&
wd_dev
.
watchdog
[
id
].
regs
->
limit
)
/
10
);
wd_readw
(
wd_dev
.
watchdog
[
id
].
regs
+
WD_LIMIT
)
/
10
);
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment