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
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