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
nexedi
linux
Commits
26ac5650
Commit
26ac5650
authored
Jul 04, 2019
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'spi/topic/pump-rt' into spi-next
parents
106dbe24
924b5867
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
32 additions
and
6 deletions
+32
-6
drivers/spi/spi.c
drivers/spi/spi.c
+30
-6
include/linux/spi/spi.h
include/linux/spi/spi.h
+2
-0
No files found.
drivers/spi/spi.c
View file @
26ac5650
...
...
@@ -1417,10 +1417,32 @@ static void spi_pump_messages(struct kthread_work *work)
__spi_pump_messages
(
ctlr
,
true
);
}
static
int
spi_init_queue
(
struct
spi_controller
*
ctlr
)
/**
* spi_set_thread_rt - set the controller to pump at realtime priority
* @ctlr: controller to boost priority of
*
* This can be called because the controller requested realtime priority
* (by setting the ->rt value before calling spi_register_controller()) or
* because a device on the bus said that its transfers needed realtime
* priority.
*
* NOTE: at the moment if any device on a bus says it needs realtime then
* the thread will be at realtime priority for all transfers on that
* controller. If this eventually becomes a problem we may see if we can
* find a way to boost the priority only temporarily during relevant
* transfers.
*/
static
void
spi_set_thread_rt
(
struct
spi_controller
*
ctlr
)
{
struct
sched_param
param
=
{
.
sched_priority
=
MAX_RT_PRIO
-
1
};
dev_info
(
&
ctlr
->
dev
,
"will run message pump with realtime priority
\n
"
);
sched_setscheduler
(
ctlr
->
kworker_task
,
SCHED_FIFO
,
&
param
);
}
static
int
spi_init_queue
(
struct
spi_controller
*
ctlr
)
{
ctlr
->
running
=
false
;
ctlr
->
busy
=
false
;
...
...
@@ -1440,11 +1462,8 @@ static int spi_init_queue(struct spi_controller *ctlr)
* request and the scheduling of the message pump thread. Without this
* setting the message pump thread will remain at default priority.
*/
if
(
ctlr
->
rt
)
{
dev_info
(
&
ctlr
->
dev
,
"will run message pump with realtime priority
\n
"
);
sched_setscheduler
(
ctlr
->
kworker_task
,
SCHED_FIFO
,
&
param
);
}
if
(
ctlr
->
rt
)
spi_set_thread_rt
(
ctlr
);
return
0
;
}
...
...
@@ -3071,6 +3090,11 @@ int spi_setup(struct spi_device *spi)
spi_set_cs
(
spi
,
false
);
if
(
spi
->
rt
&&
!
spi
->
controller
->
rt
)
{
spi
->
controller
->
rt
=
true
;
spi_set_thread_rt
(
spi
->
controller
);
}
dev_dbg
(
&
spi
->
dev
,
"setup mode %d, %s%s%s%s%u bits/w, %u Hz max --> %d
\n
"
,
(
int
)
(
spi
->
mode
&
(
SPI_CPOL
|
SPI_CPHA
)),
(
spi
->
mode
&
SPI_CS_HIGH
)
?
"cs_high, "
:
""
,
...
...
include/linux/spi/spi.h
View file @
26ac5650
...
...
@@ -109,6 +109,7 @@ void spi_statistics_add_transfer_stats(struct spi_statistics *stats,
* This may be changed by the device's driver, or left at the
* default (0) indicating protocol words are eight bit bytes.
* The spi_transfer.bits_per_word can override this for each transfer.
* @rt: Make the pump thread real time priority.
* @irq: Negative, or the number passed to request_irq() to receive
* interrupts from this device.
* @controller_state: Controller's runtime state
...
...
@@ -143,6 +144,7 @@ struct spi_device {
u32
max_speed_hz
;
u8
chip_select
;
u8
bits_per_word
;
bool
rt
;
u32
mode
;
#define SPI_CPHA 0x01
/* clock phase */
#define SPI_CPOL 0x02
/* clock polarity */
...
...
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