Commit graph

858,652 commits

Author SHA1 Message Date
Arun Kumar Neelakantam
a63f27a695 net: qrtr: Add pm_wakeup_event() support
In some cases system enters into suspend state before handling
incoming packets and cause delay in communication.

Add pm_wakup_event() to abort the suspend when a packet is received.

CRs-Fixed: 2432846
Change-Id: I5cec4f9273362e8e2c1df1dae159a6bb5e54d16d
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
2019-10-09 11:35:26 -07:00
Arun Kumar Neelakantam
3b5c20d784 net: qrtr: Make qrtr rx threads as RT priorities
To support high priority clients like sensor use cases in all system
conditions elevating the router reader threads to RT priorities based
on configuration.

Change-Id: I6f46097f6678f2e00c3ec8872b208d773c377224
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
2019-10-09 11:35:25 -07:00
Arun Kumar Neelakantam
b2117d5f34 net: qrtr: Move rx worker to separate worker thread
In system heavy load cases the rx work queued in global worker queue is
getting delayed and causing clients request timeouts.

Create and use separate worker thread to process qrtr rx packets.

Change-Id: I56793a463820340666288bae6111e160d3fc85b9
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
2019-10-09 11:35:25 -07:00
Arun Kumar Neelakantam
0cc9f2c2c8 net: qrtr: Add support to read qrtr packet size
Some transports need to know qrtr packet to read complete packet
from underlying transport.

Add API support to get the incoming packet size form qrtr header.

Change-Id: I4e4e4ab2e4c1fe0e1e1261af85a8b8618ce65bb3
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
2019-10-09 11:35:25 -07:00
Ajay Agarwal
7c4b317c62 net: qrtr: Handle IPCR control port format of older targets
The destination port value in the IPCR control buffer on older
targets is 0xFFFF. Handle the same by updating the dst_port to
QRTR_PORT_CTRL.

Change-Id: Ia70ce1c078ea84f0de47240f6fc3e764f4ae7a6f
Signed-off-by: Ajay Agarwal <ajaya@codeaurora.org>
2019-10-09 11:35:24 -07:00
Chris Lew
a7b81fb7db net: qrtr: Return success if control port is not bound
If a port tries to send a message before the name service binds to the
control port, then that message should succeed. This will allow clients
to operate normally until the name service comes online and causes a
net reset to restart all the ports.

Change-Id: Ica0a5e45df0e51f282e5bf426d11ff8e41b339c4
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:24 -07:00
Chris Lew
3fa03f25b4 net: qrtr: Add dynamic node id configuration
Add support to configure the node id through defconfig. This is useful
for targets that are unable to configure the node id through qrtr-ns
because of security reasons. The local node id can still be overridden
by the ns if it is capable.

Change-Id: Ie9fec2ae276948340f4f5a7e0374d554502a0ee1
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:23 -07:00
Chris Lew
a14995b484 net: qrtr: Add permission rules for QTI targets
Give control port access to processes that have root user priveleges,
AID_VENDOR_QRTR user priveleges, or NET_ADMIN capabilities.

Remove the need for SYS_ADMIN priveleges because they will not be
granted on any QTI targets.

This change squashes the following commits from msm-4.14:
  commit 17da4da93c96 ("qrtr: Allow net bind service capabilities")
  commit 56faadfd27b4 ("qrtr: Fix NET_BIND_SERVICE logic")
  commit 82ea58d60c46 ("net: qrtr: Allow control port access to
                        AID_VENDOR_QRTR")
  commit 9db4f5803ce1 ("net: qrtr: Allow Root guid process to bind")

In addition fix minor format issues.

Change-Id: I1441cbf53eb62880333a1031334a5331c1f54a77
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:23 -07:00
Chris Lew
22e63b1f1b net: qrtr: Add support for DEL_PROC control message
Add the DEL_PROC control message for forwarding usecases. If this proc
acts as a gateway between two procs then they need a notification to
clean up servers and client ports when either goes down. This message
acts as notification to clean up all resources associated with the node
in the message.

Change-Id: I3514f54aa0221e104196e2120e929cc9f351847d
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:22 -07:00
Chris Lew
8eef6a4ad1 net: qrtr: Add forwarding support based on net id
Add support for QRTR to forward messages between network clusters. The
network subnet id's are attached to the QRTR subnodes in the MHI and
RPMSG/GLINK nodes.

The current forwarding decisions are done based on the net ids and are
wrapped in a single function for easier maintenance of forwarding
decisions later on. The function will return true once it determines
a subnet has no connection to another subnet.

The NEW_SERVER, DEL_SERVER, and DEL_CLIENT control messages should be
forwarded while the DATA and RESUME_TX commands should be passed along
to their destination node.

The nameservice is expected to send NEW_SERVER commands for it's entire
database instead of just the local service database with these changes.
This is to make sure new nodes get service notifications that came
earlier and were meant to be forwarded to the new node.

This change squashes the following commits from msm-4.14:
  commit e5f6a6769ceb ("net: qrtr: Add forwarding support based on net id")
  commit 4516ab18718d ("net: qrtr: avoid deadlock in case of recursive
                        lock for node list")
  commit dc2d47cd12d3 ("net: qrtr: Only update pkts with broadcast node
                        ID")
  commit 4277aebeff91 ("net: qrtr: Free skb if qrtr_node_lookup fails
                        during qrtr_fwd_pkt")

In addition fix minor format issues and update copyright.

Change-Id: Iaf01dd212b07dfbb13ec087ea0aae980cda7c2fd
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:22 -07:00
Chris Lew
077ebed657 net: qrtr: Add non blocking option for tx_resume
QRTR should support asynchronous sends even with the tx flow control
enabled. Add a timeout to the tx_wait and send a zero size packet to
nonblocking sockets after the remote port is no longer flow controlled.
This zero size packet will act as a notification for clients to start
sending again.

This change squashes the following commits from msm-4.14:
  commit 5dff60d7bb53 ("net: qrtr: Add non blocking option for tx_resume")
  commit aff4c897bcf5 ("net: qrtr: Fix missing resume_tx notification")
  commit c969cce741fc ("net: qrtr: Rearrange tx wait and protect critical
                        section")

In addition fix minor format issues.

Change-Id: I4b2a145b9507aa18ff08ef58e5620b72952f7f5f
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:22 -07:00
Chris Lew
61218504c8 net: qrtr: Move tx_resume handling to work context
There will be non-atomic work associated with receiving the tx resume
packet from the remote. Move the handling to work function context in
preparation for the non-blocking socket blocking improvement.

Change-Id: I2389bdcffba068258650bfbb579f8cb98a0ac928
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:21 -07:00
Chris Lew
bb300aedea net: qrtr: Send BYE message for all nodes on ept
An ept can represent multiple nodes in a system. If an ept unregisters,
qrtr should send a BYE control message for all the nodes that it
represents. Iterate through the node tree to find all the nodes that
belong to the ept.

Change-Id: I641bba615e689f59acecc9ac87fec61c3eecc0d1
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:21 -07:00
Chris Lew
b92521c119 net: qrtr: Add node assignment on new server
The remote processor will not forward a hello packet for the other
processors that it is forwarding from. Discover nodes through
QRTR_TYPE_NEW_SERVER messages as well in order to find remote hosts
which require more than one hop to reach it.

Change-Id: Ia79df1fa2730250786d221fb847029046a53bea4
Signed-off-by: Gustavo Solaira <gustavos@codeaurora.org>
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:20 -07:00
Chris Lew
5afd5bc51d net: qrtr: Rename qrtr_all_nodes to qrtr_all_epts
The node list only respresents the adjacent nodes in the system. Rename
the list to qrtr_all_epts to better describe the list contents. Rename
qrtr_nodes_lock to qrtr_epts_lock to better describe lock.

Change-Id: I168ca597d5b9b30d6c064c2a56b6e8b2dffa387b
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:20 -07:00
Chris Lew
162cff4d10 net: qrtr: Add support for multiple nodes on a single ept
An ept can be associated with multiple node ids in network. The node
tree should keep track of how to send to a specific node id where as
the node list should keep track of all the adjacent nodes in the
network. Use the node list to broadcast control messages to adjacent
nodes.

Change-Id: If0f4828da149b6e590525518a8410f497f5e3894
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:19 -07:00
Arun Kumar Neelakantam
33685bb27f net: qrtr: use alloc_skb_with_frags() in rx path
net_dev_alloc() fails for high order allocations in system where memory
is fragmented and cause communication stall due to packet drops.

Use alloc_skb_with_frags() to avoid packet drops in memory fragmented case.

This change squashes the following commits from msm-4.14:
  commit 5121b211a5e6 ("net: qrtr: Use skb with fragments in memory
                        failure case")
  commit bdc91a0dae07 ("net: qrtr: use alloc_skb_with_frag() in rx path")

In addition, fix minor format issues and update the copyright.

Change-Id: I46b7e0da0ed04c9222c975ee930f0f8d9b41453b
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
2019-10-09 11:35:19 -07:00
Arun Kumar Neelakantam
a8fb633c78 net: qrtr: Check function pointer before calling
sk_error_report callback function called without validating cause the NULL
pointer dereference.

Validate function pointer before using for error report.

Change-Id: I19d04f85a5457f3857623088f8e0578514f0c395
Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org>
2019-10-09 11:35:19 -07:00
Chris Lew
d2a5084230 net: qrtr: Prevent stale ports from sending
The current implementation of the control port bind releases and
reacquires the port lock between allocating the port idr and resetting
the existing sockets. This creates a race condition where sockets
can send to the control port during the control port bind. Hold the
lock for the duration of the control port bind to prevent this.

In order to prevent messages from stale sockets being sent, check if
ENETRESET has been set on the socket and drop the packet.

Change-Id: Ie9abc6c51139e82d3c9ebd4d546d1acd7269875e
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:35:18 -07:00
Chris Lew
0d116bcb6a net: qrtr: Detach socket from sock during release
There is a race between releasing a socket and a sock structure. Skbs
still in flight may hold references to the sock structure, preventing
it from being freed when the socket is released. Detach the socket in
the release call to prevent references to that sockets resources.

Change-Id: I44ac553cf73b3a2148ce50d7552c39b08f5e0f91
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-09 11:21:23 -07:00
qctecmdr
967986251f Merge "msm: ipa3: Fix to not remove endpoint delay if stop channel fails" 2019-10-09 10:17:35 -07:00
qctecmdr
b53f720c52 Merge "ion: msm: Correct OF node refcount handling in error paths" 2019-10-09 09:23:24 -07:00
qctecmdr
3f044b1ec2 Merge "ion: msm: enable debugfs for ion heaps" 2019-10-09 08:29:17 -07:00
qctecmdr
e8eaa8ee05 Merge "ion: msm: Assume devicetree support" 2019-10-09 06:41:46 -07:00
qctecmdr
6dad06ccde Merge "ion: msm: Upgrade the ION ABI version" 2019-10-09 06:03:01 -07:00
qctecmdr
6789de4ceb Merge "ion: msm: Fix several errors in the MSM ION kernel header" 2019-10-09 05:29:27 -07:00
Ashok Vuyyuru
a1575e6ec0 msm: ipa3: Fix to not remove endpoint delay if stop channel fails
Because of removing endpoint delay when the stop channel failed case
observing some junk packets received on a pipe. To avoid junk packets,
add change to avoid endpoint delay if stopping GSI channel fails.

Change-Id: I4d3d8d9a0de823229d780fe31c8d7f1162e20668
Signed-off-by: Ashok Vuyyuru <avuyyuru@codeaurora.org>
2019-10-09 00:15:18 -07:00
qctecmdr
053a2be904 Merge "pinctrl: Add api to enable/disable wakeup capability for a gpio" 2019-10-09 00:09:01 -07:00
qctecmdr
9963fe6c8a Merge "defconfig: lahaina-gki: enable refgen regulator driver" 2019-10-08 23:11:50 -07:00
qctecmdr
f755b6b67f Merge "net: qrtr: Change port allocation to use cyclic idr" 2019-10-08 22:32:56 -07:00
qctecmdr
81b7681939 Merge "arm64: defconfig: Enable gcc clock driver for Lahaina" 2019-10-08 21:40:36 -07:00
qctecmdr
0468e66895 Merge "net: qrtr: Change node mutex to a rw_semaphore" 2019-10-08 21:00:30 -07:00
qctecmdr
13db81d1b0 Merge "msm: gsi: gsi 2.9 upgrade" 2019-10-08 20:16:25 -07:00
qctecmdr
f611892041 Merge "of: Make of_get_ddrtype module friendly" 2019-10-08 19:24:26 -07:00
qctecmdr
2810686555 Merge "soc: qcom: Add a config flag to know the build variant" 2019-10-08 18:40:12 -07:00
Rishabh Bhatnagar
9c23c34725 pinctrl: Add api to enable/disable wakeup capability for a gpio
Add api to write to mpm wakeup registers to configure a gpio
as wakeup capable.

Change-Id: Ia11a22160394e76969200691cfaf8fb1505bf5c1
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
2019-10-08 14:28:03 -07:00
Jeevan Shriram
9c0e5c7054 drivers: pinctrl: Add support for read/write of QUP registers
Add support to read and write QUP mode registers in TLMM block.

Change-Id: I9878af50f6920c577fa74047e01e9b37c0542dd1
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: Jeevan Shriram <jshriram@codeaurora.org>
[eberman@codeaurora.org: reintroduce msm_pinctrl_data]
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
2019-10-08 14:28:03 -07:00
Chris Lew
06809f9816 net: qrtr: Change port allocation to use cyclic idr
There is a race for clients that open sockets before the control port
is bound. If a client gets an idr that was allocated before the control
port is bound, there is a chance the previous address owner sent lookup
packets to the control port. The new address owner will get residual
responses to this the lookup packets.

Change the idr_alloc to idr_alloc_cyclic so new idr's are allocated
instead of trying to reuse the freed idrs.

Change-Id: Ie1bda7a818309503f80542e739bac646327296f7
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-07 16:50:11 -07:00
Chris Lew
5e6fd7cda2 net: qrtr: Change node mutex to a rw_semaphore
There is a chance for a remote processor to become unresponsive while
QRTR is trying to broadcast a control message. This results in the node
lock being held for an extended period of time and prevents node lookup
which is needed to send messages.

Change the mutex to a rw_semaphore to allow concurrency during node
lookups and broadcasts.

Change-Id: I2e3fdde22edaac64f164cf08900e9d09b16c380d
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-07 16:50:11 -07:00
Chris Lew
01b08fdd53 net: qrtr: Add socket mode optimization
A remote endpoint should not need to know when a client socket is freed
if the socket never established commnication with the endpoint. Add a
mode to keep track of which endpoints a socket communicates with.

There are three modes a socket can be in:
	INIT   - Socket has not sent anything or only local messages,
		 only send client close to local services.

	SINGLE - Socket has sent messages to a single ept, send event
		 to this single ept.

	MULTI  - Socket has sent messages to multiple epts, broadcast
		 release of this socket.

Server state changes should be broadcast throughout the system. Change
the ipc state of a port when it sends a NEW SERVER control packet. This
ensures the DEL CLIENT control packet is propagated correctly for
servers.

This change squashes the following commits from msm-4.14:
  commit 3373eb77cd6d ("net: qrtr: Add socket mode optimization")
  commit d984a2d6f150 ("net: qrtr: Make servers multi state ports")

In addition, fix minor format issues.

Change-Id: I416742cff598bf7aa9da2baa2e86a53b18367870
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-07 16:50:11 -07:00
Chris Lew
94869df328 net: qrtr: Do not send packets before hello negotiation
There is a race where broadcast packets can be sent to a node that has
not sent the hello message to the remote processor. This breaks the
protocol expectation. Add a status variable to track when the hello
packet has been sent.

An alternative solution attempted was to remove the nodes from the
broadcast list until the hello packet is sent. This is not a valid
solution because hello messages are broadcasted if the ns is restarted
or started late. There needs to be a status variable separate from the
broadcast list.

This change squashes the following commits from msm-4.14:
  commit abd3961d05be ("qrtr: Only broadcast to initialized nodes")
  commit 90cb0e473226 ("net: qrtr: Do not send packets before Hello
                        negotiation")
  commit 07abd1abe803 ("net: qrtr: Fix hello packet drop memory leak")

In addition, fix minor format issues.

Change-Id: I2a55e587f324e64e2bde4ea634de66008f190de1
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-07 16:49:48 -07:00
qctecmdr
c4787643fa Merge "net: qrtr: Align header and payload" 2019-10-07 15:20:46 -07:00
Isaac J. Manjarres
03bb3d6ddd ion: msm: Correct OF node refcount handling in error paths
The for_each_[available]_child_of_node iterators implicitly
increment the reference count on the current OF node at the
start of the iteration, and decrements it at the end of the
iteration.

However, if the control flow is such that the loop
can be broken out of prior to finishing an iteration, then
the reference count must be decremented in the subsequent
code path.

Thus, fix the error path in the MSM ION code to decrement the
reference on the current OF node when prematurely exiting
an of_node loop.

Change-Id: I5c2ec02a57eff416c04b1fe63c80d6e573a692d4
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
2019-10-07 15:13:39 -07:00
qctecmdr
7f16200f1c Merge "soc: qcom: qmi_interface: Protect sk_user_data with RCU" 2019-10-07 14:24:19 -07:00
qctecmdr
226b72604a Merge "pinctrl: qcom: Add EGPIO feature support to pinctrl driver" 2019-10-04 19:27:42 -07:00
Prasad Sodagudi
49d73826d0 pinctrl: qcom: Add EGPIO feature support to pinctrl driver
Island IO can be assigned to Apps TLMM dynamically
if that island is not using the pin for any connectivity.
Add support for enabling EGPIO feature if the pin can
support it. EGPIO_PRESENT bit shows if EGPIO feature
is present or not for particular pin. Once EGPIO_ENABLE
bit is set the pin is now controlled by Apps TLMM.
When pinctrl properties are getting initialized by device
driver framework, pin functions select would call to
msm_pinmux_set_mux function to select pin function and
enable EGPIO.

Change-Id: I64514904096286f2a5df351880cd56d753f0658f
Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
2019-10-04 15:55:36 -07:00
qctecmdr
7ca8fd6d83 Merge "defconfig: Add MSM Core Hang Detection as module" 2019-10-04 14:58:57 -07:00
Bojun Pan
54f5b081c1 msm: gsi: gsi 2.9 upgrade
Driver upgrade for GSI v2.9.

Change-Id: I5d148ead27499e6571196bc320c60da1e727163d
Signed-off-by: Bojun Pan <bojunp@codeaurora.org>
2019-10-04 12:19:55 -07:00
Bojun Pan
76a1edce0e msm: ipa: Configure IPA pipes and group resources for Lahaina IPA 4.9
Lahaina uses different pipe endpoint mappings and group resources.
This change captures these configurations.

Change-Id: Ib45848bb52d9a6680b38b4305cbab38c0b00e7d2
Acked-by: Priyadarshini Rajagopal <prajagop@qti.qualcomm.com>
Signed-off-by: Bojun Pan <bojunp@codeaurora.org>
2019-10-04 12:19:50 -07:00
Chris Lew
6edb7067ed net: qrtr: Align header and payload
Remote IPC Router drivers expect the received packet to be aligned.
This case is only exposed using the MHI transport because it does not
ensure the packet will be received as one chunk like RPMSG GLINK.

Change-Id: I0e5c27e3c5896e6721c8bbbfcda29551f0968626
Signed-off-by: Chris Lew <clew@codeaurora.org>
2019-10-04 11:27:35 -07:00