Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
d8d607d5
Commit
d8d607d5
authored
Feb 27, 2010
by
Ralf Baechle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MIPS: BCM63xx: Convert timer locks to raw spinlocks.
Signed-off-by:
Ralf Baechle
<
ralf@linux-mips.org
>
parent
c45ef44f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
17 deletions
+17
-17
arch/mips/bcm63xx/timer.c
arch/mips/bcm63xx/timer.c
+17
-17
No files found.
arch/mips/bcm63xx/timer.c
View file @
d8d607d5
...
...
@@ -17,8 +17,8 @@
#include <bcm63xx_timer.h>
#include <bcm63xx_regs.h>
static
DEFINE_SPINLOCK
(
timer_reg_lock
);
static
DEFINE_SPINLOCK
(
timer_data_lock
);
static
DEFINE_
RAW_
SPINLOCK
(
timer_reg_lock
);
static
DEFINE_
RAW_
SPINLOCK
(
timer_data_lock
);
static
struct
clk
*
periph_clk
;
static
struct
timer_data
{
...
...
@@ -31,23 +31,23 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
u32
stat
;
int
i
;
spin_lock
(
&
timer_reg_lock
);
raw_
spin_lock
(
&
timer_reg_lock
);
stat
=
bcm_timer_readl
(
TIMER_IRQSTAT_REG
);
bcm_timer_writel
(
stat
,
TIMER_IRQSTAT_REG
);
spin_unlock
(
&
timer_reg_lock
);
raw_
spin_unlock
(
&
timer_reg_lock
);
for
(
i
=
0
;
i
<
BCM63XX_TIMER_COUNT
;
i
++
)
{
if
(
!
(
stat
&
TIMER_IRQSTAT_TIMER_CAUSE
(
i
)))
continue
;
spin_lock
(
&
timer_data_lock
);
raw_
spin_lock
(
&
timer_data_lock
);
if
(
!
timer_data
[
i
].
cb
)
{
spin_unlock
(
&
timer_data_lock
);
raw_
spin_unlock
(
&
timer_data_lock
);
continue
;
}
timer_data
[
i
].
cb
(
timer_data
[
i
].
data
);
spin_unlock
(
&
timer_data_lock
);
raw_
spin_unlock
(
&
timer_data_lock
);
}
return
IRQ_HANDLED
;
...
...
@@ -61,7 +61,7 @@ int bcm63xx_timer_enable(int id)
if
(
id
>=
BCM63XX_TIMER_COUNT
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
reg
=
bcm_timer_readl
(
TIMER_CTLx_REG
(
id
));
reg
|=
TIMER_CTL_ENABLE_MASK
;
...
...
@@ -71,7 +71,7 @@ int bcm63xx_timer_enable(int id)
reg
|=
TIMER_IRQSTAT_TIMER_IR_EN
(
id
);
bcm_timer_writel
(
reg
,
TIMER_IRQSTAT_REG
);
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
return
0
;
}
...
...
@@ -85,7 +85,7 @@ int bcm63xx_timer_disable(int id)
if
(
id
>=
BCM63XX_TIMER_COUNT
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
reg
=
bcm_timer_readl
(
TIMER_CTLx_REG
(
id
));
reg
&=
~
TIMER_CTL_ENABLE_MASK
;
...
...
@@ -95,7 +95,7 @@ int bcm63xx_timer_disable(int id)
reg
&=
~
TIMER_IRQSTAT_TIMER_IR_EN
(
id
);
bcm_timer_writel
(
reg
,
TIMER_IRQSTAT_REG
);
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
return
0
;
}
...
...
@@ -110,7 +110,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
return
-
EINVAL
;
ret
=
0
;
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
if
(
timer_data
[
id
].
cb
)
{
ret
=
-
EBUSY
;
goto
out
;
...
...
@@ -120,7 +120,7 @@ int bcm63xx_timer_register(int id, void (*callback)(void *data), void *data)
timer_data
[
id
].
data
=
data
;
out:
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
return
ret
;
}
...
...
@@ -133,9 +133,9 @@ void bcm63xx_timer_unregister(int id)
if
(
id
>=
BCM63XX_TIMER_COUNT
)
return
;
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_data_lock
,
flags
);
timer_data
[
id
].
cb
=
NULL
;
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_data_lock
,
flags
);
}
EXPORT_SYMBOL
(
bcm63xx_timer_unregister
);
...
...
@@ -159,7 +159,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
if
(
countdown
&
~
TIMER_CTL_COUNTDOWN_MASK
)
return
-
EINVAL
;
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
raw_
spin_lock_irqsave
(
&
timer_reg_lock
,
flags
);
reg
=
bcm_timer_readl
(
TIMER_CTLx_REG
(
id
));
if
(
monotonic
)
...
...
@@ -171,7 +171,7 @@ int bcm63xx_timer_set(int id, int monotonic, unsigned int countdown_us)
reg
|=
countdown
;
bcm_timer_writel
(
reg
,
TIMER_CTLx_REG
(
id
));
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
raw_
spin_unlock_irqrestore
(
&
timer_reg_lock
,
flags
);
return
0
;
}
...
...
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