rpmsg updates for v4.19
This fixes a few compile and kerneldoc warnings, allows rpmsg devices to handle power domains, allow for labeling GLINK edges and supports compat for rpmsg_char. -----BEGIN PGP SIGNATURE----- iQJPBAABCAA5FiEEBd4DzF816k8JZtUlCx85Pw2ZrcUFAlt3PIMbHGJqb3JuLmFu ZGVyc3NvbkBsaW5hcm8ub3JnAAoJEAsfOT8Nma3FqmsP/2g8DnzDA9Dz5Q7MvM/N epdeKLhDhEQLd7X8RE0Lfjo2Fr5RSs8e3YsohVOKBnFZoptfurkn3WysaorIdwxc vJT6+RGXDg0rJRxaJ3RDu9FdmlILduJClXuqYiGKdNhs+NiUkUxIDu5WaQj9GJmr zBYzv5Lb9RHQOmsKMGaOIvZacMonM8Jl0O+k48uSPZRTZom+qCAogZHHCrg7YERh a9N8CRxNiprDrv91mZ6eS0MOwcSCTiutdUcvep+3P4m0J3cBI0i1QvQ5ZPhEjM2v F0ziT02CrnW0SguyYcHjaVv186H6Xkyhp1j/ci/s4LjJ+a+NWRK15SqPdy6fNhCH kY6R9CGhapZWdK9IKljD4L6wa4poqWyxOdjaSsMlcG9TereUyGG8F+LRNvaTUuRg iVob7J2uqalX4i94bMWO11RTwpCO8+PrinqtCAdECIBXNpW79HScd4NNwOdFIRtE QzbuM1dq2dg+wuZ1ny75DIy2bZDbcJGdF1Vp3afUQLC69s55ecwMnVNo1ML0HbE7 rBE7/qVB10cPIMM++kfqUKVJQpkQ/QVyLB9jqRL4KTg+UdLJcPZOWrrPHwzSr1ta CP6ObSW3bP5tX4LGZmSqopFfNnA2gTe9TA5GoHUwnac6jcjMu53iJM7/NEJvW6oE 8mD7Qn5xNE5V1GOWkbxdn3Iy =aTVF -----END PGP SIGNATURE----- Merge tag 'rpmsg-v4.19' of git://github.com/andersson/remoteproc Pull rpmsg updates from Bjorn Andersson: "This fixes a few compile and kerneldoc warnings, allows rpmsg devices to handle power domains, allow for labeling GLINK edges and supports compat for rpmsg_char" * tag 'rpmsg-v4.19' of git://github.com/andersson/remoteproc: rpmsg: Add compat ioctl for rpmsg char driver rpmsg: glink: Store edge name for glink device dt-bindings: soc: qcom: Add label for GLINK bindings rpmsg: core: add support to power domains for devices rpmsg: smd: fix kerneldoc warnings rpmsg: glink: Fix various kerneldoc warnings. rpmsg: glink: correctly annotate intent members rpmsg: smd: Add missing include of sizes.h
This commit is contained in:
commit
9a96d63aa8
5 changed files with 53 additions and 22 deletions
|
@ -10,6 +10,11 @@ edge.
|
|||
Value type: <stringlist>
|
||||
Definition: must be "qcom,glink-rpm"
|
||||
|
||||
- label:
|
||||
Usage: optional
|
||||
Value type: <string>
|
||||
Definition: should specify the subsystem name this edge corresponds to.
|
||||
|
||||
- interrupts:
|
||||
Usage: required
|
||||
Value type: <prop-encoded-array>
|
||||
|
|
|
@ -40,7 +40,7 @@ struct glink_msg {
|
|||
* struct glink_defer_cmd - deferred incoming control message
|
||||
* @node: list node
|
||||
* @msg: message header
|
||||
* data: payload of the message
|
||||
* @data: payload of the message
|
||||
*
|
||||
* Copy of a received control message, to be added to @rx_queue and processed
|
||||
* by @rx_work of @qcom_glink.
|
||||
|
@ -56,12 +56,13 @@ struct glink_defer_cmd {
|
|||
* struct glink_core_rx_intent - RX intent
|
||||
* RX intent
|
||||
*
|
||||
* data: pointer to the data (may be NULL for zero-copy)
|
||||
* id: remote or local intent ID
|
||||
* size: size of the original intent (do not modify)
|
||||
* reuse: To mark if the intent can be reused after first use
|
||||
* in_use: To mark if intent is already in use for the channel
|
||||
* offset: next write offset (initially 0)
|
||||
* @data: pointer to the data (may be NULL for zero-copy)
|
||||
* @id: remote or local intent ID
|
||||
* @size: size of the original intent (do not modify)
|
||||
* @reuse: To mark if the intent can be reused after first use
|
||||
* @in_use: To mark if intent is already in use for the channel
|
||||
* @offset: next write offset (initially 0)
|
||||
* @node: list node
|
||||
*/
|
||||
struct glink_core_rx_intent {
|
||||
void *data;
|
||||
|
@ -89,10 +90,14 @@ struct glink_core_rx_intent {
|
|||
* @idr_lock: synchronizes @lcids and @rcids modifications
|
||||
* @lcids: idr of all channels with a known local channel id
|
||||
* @rcids: idr of all channels with a known remote channel id
|
||||
* @features: remote features
|
||||
* @intentless: flag to indicate that there is no intent
|
||||
*/
|
||||
struct qcom_glink {
|
||||
struct device *dev;
|
||||
|
||||
const char *name;
|
||||
|
||||
struct mbox_client mbox_client;
|
||||
struct mbox_chan *mbox_chan;
|
||||
|
||||
|
@ -512,8 +517,8 @@ static void qcom_glink_rx_done(struct qcom_glink *glink,
|
|||
* qcom_glink_receive_version() - receive version/features from remote system
|
||||
*
|
||||
* @glink: pointer to transport interface
|
||||
* @r_version: remote version
|
||||
* @r_features: remote features
|
||||
* @version: remote version
|
||||
* @features: remote features
|
||||
*
|
||||
* This function is called in response to a remote-initiated version/feature
|
||||
* negotiation sequence.
|
||||
|
@ -538,8 +543,8 @@ static void qcom_glink_receive_version(struct qcom_glink *glink,
|
|||
* qcom_glink_receive_version_ack() - receive negotiation ack from remote system
|
||||
*
|
||||
* @glink: pointer to transport interface
|
||||
* @r_version: remote version response
|
||||
* @r_features: remote features response
|
||||
* @version: remote version response
|
||||
* @features: remote features response
|
||||
*
|
||||
* This function is called in response to a local-initiated version/feature
|
||||
* negotiation sequence and is the counter-offer from the remote side based
|
||||
|
@ -567,7 +572,7 @@ static void qcom_glink_receive_version_ack(struct qcom_glink *glink,
|
|||
|
||||
/**
|
||||
* qcom_glink_send_intent_req_ack() - convert an rx intent request ack cmd to
|
||||
wire format and transmit
|
||||
* wire format and transmit
|
||||
* @glink: The transport to transmit on.
|
||||
* @channel: The glink channel
|
||||
* @granted: The request response to encode.
|
||||
|
@ -594,7 +599,7 @@ static int qcom_glink_send_intent_req_ack(struct qcom_glink *glink,
|
|||
* transmit
|
||||
* @glink: The transport to transmit on.
|
||||
* @channel: The local channel
|
||||
* @size: The intent to pass on to remote.
|
||||
* @intent: The intent to pass on to remote.
|
||||
*
|
||||
* Return: 0 on success or standard Linux error code.
|
||||
*/
|
||||
|
@ -603,11 +608,11 @@ static int qcom_glink_advertise_intent(struct qcom_glink *glink,
|
|||
struct glink_core_rx_intent *intent)
|
||||
{
|
||||
struct command {
|
||||
u16 id;
|
||||
u16 lcid;
|
||||
u32 count;
|
||||
u32 size;
|
||||
u32 liid;
|
||||
__le16 id;
|
||||
__le16 lcid;
|
||||
__le32 count;
|
||||
__le32 size;
|
||||
__le32 liid;
|
||||
} __packed;
|
||||
struct command cmd;
|
||||
|
||||
|
@ -698,9 +703,9 @@ static void qcom_glink_handle_rx_done(struct qcom_glink *glink,
|
|||
/**
|
||||
* qcom_glink_handle_intent_req() - Receive a request for rx_intent
|
||||
* from remote side
|
||||
* if_ptr: Pointer to the transport interface
|
||||
* rcid: Remote channel ID
|
||||
* size: size of the intent
|
||||
* @glink: Pointer to the transport interface
|
||||
* @cid: Remote channel ID
|
||||
* @size: size of the intent
|
||||
*
|
||||
* The function searches for the local channel to which the request for
|
||||
* rx_intent has arrived and allocates and notifies the remote back
|
||||
|
@ -1572,6 +1577,10 @@ struct qcom_glink *qcom_glink_native_probe(struct device *dev,
|
|||
idr_init(&glink->lcids);
|
||||
idr_init(&glink->rcids);
|
||||
|
||||
ret = of_property_read_string(dev->of_node, "label", &glink->name);
|
||||
if (ret < 0)
|
||||
glink->name = dev->of_node->name;
|
||||
|
||||
glink->mbox_client.dev = dev;
|
||||
glink->mbox_client.knows_txdone = true;
|
||||
glink->mbox_chan = mbox_request_channel(&glink->mbox_client, 0);
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/soc/qcom/smem.h>
|
||||
#include <linux/wait.h>
|
||||
|
@ -93,6 +94,8 @@ static const struct {
|
|||
|
||||
/**
|
||||
* struct qcom_smd_edge - representing a remote processor
|
||||
* @dev: device associated with this edge
|
||||
* @name: name of this edge
|
||||
* @of_node: of_node handle for information related to this edge
|
||||
* @edge_id: identifier of this edge
|
||||
* @remote_pid: identifier of remote processor
|
||||
|
@ -106,6 +109,7 @@ static const struct {
|
|||
* @channels_lock: guard for modifications of @channels
|
||||
* @allocated: array of bitmaps representing already allocated channels
|
||||
* @smem_available: last available amount of smem triggering a channel scan
|
||||
* @new_channel_event: wait queue for new channel events
|
||||
* @scan_work: work item for discovering new channels
|
||||
* @state_work: work item for edge state changes
|
||||
*/
|
||||
|
@ -172,10 +176,12 @@ struct qcom_smd_endpoint {
|
|||
/**
|
||||
* struct qcom_smd_channel - smd channel struct
|
||||
* @edge: qcom_smd_edge this channel is living on
|
||||
* @qsdev: reference to a associated smd client device
|
||||
* @qsept: reference to a associated smd endpoint
|
||||
* @registered: flag to indicate if the channel is registered
|
||||
* @name: name of the channel
|
||||
* @state: local state of the channel
|
||||
* @remote_state: remote state of the channel
|
||||
* @state_change_event: state change event
|
||||
* @info: byte aligned outgoing/incoming channel info
|
||||
* @info_word: word aligned outgoing/incoming channel info
|
||||
* @tx_lock: lock to make writes to the channel mutually exclusive
|
||||
|
@ -187,6 +193,7 @@ struct qcom_smd_endpoint {
|
|||
* @cb: callback function registered for this channel
|
||||
* @recv_lock: guard for rx info modifications and cb pointer
|
||||
* @pkt_size: size of the currently handled packet
|
||||
* @drvdata: driver private data
|
||||
* @list: lite entry for @channels in qcom_smd_edge
|
||||
*/
|
||||
struct qcom_smd_channel {
|
||||
|
@ -726,6 +733,7 @@ static int qcom_smd_write_fifo(struct qcom_smd_channel *channel,
|
|||
* @channel: channel handle
|
||||
* @data: buffer of data to write
|
||||
* @len: number of bytes to write
|
||||
* @wait: flag to indicate if write has ca wait
|
||||
*
|
||||
* This is a blocking write of len bytes into the channel's tx ring buffer and
|
||||
* signal the remote end. It will sleep until there is enough space available
|
||||
|
|
|
@ -285,6 +285,7 @@ static const struct file_operations rpmsg_eptdev_fops = {
|
|||
.write = rpmsg_eptdev_write,
|
||||
.poll = rpmsg_eptdev_poll,
|
||||
.unlocked_ioctl = rpmsg_eptdev_ioctl,
|
||||
.compat_ioctl = rpmsg_eptdev_ioctl,
|
||||
};
|
||||
|
||||
static ssize_t name_show(struct device *dev, struct device_attribute *attr,
|
||||
|
@ -445,6 +446,7 @@ static const struct file_operations rpmsg_ctrldev_fops = {
|
|||
.open = rpmsg_ctrldev_open,
|
||||
.release = rpmsg_ctrldev_release,
|
||||
.unlocked_ioctl = rpmsg_ctrldev_ioctl,
|
||||
.compat_ioctl = rpmsg_ctrldev_ioctl,
|
||||
};
|
||||
|
||||
static void rpmsg_ctrldev_release_device(struct device *dev)
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/rpmsg.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/pm_domain.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include "rpmsg_internal.h"
|
||||
|
@ -449,6 +450,10 @@ static int rpmsg_dev_probe(struct device *dev)
|
|||
struct rpmsg_endpoint *ept = NULL;
|
||||
int err;
|
||||
|
||||
err = dev_pm_domain_attach(dev, true);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
if (rpdrv->callback) {
|
||||
strncpy(chinfo.name, rpdev->id.name, RPMSG_NAME_SIZE);
|
||||
chinfo.src = rpdev->src;
|
||||
|
@ -490,6 +495,8 @@ static int rpmsg_dev_remove(struct device *dev)
|
|||
|
||||
rpdrv->remove(rpdev);
|
||||
|
||||
dev_pm_domain_detach(dev, true);
|
||||
|
||||
if (rpdev->ept)
|
||||
rpmsg_destroy_ept(rpdev->ept);
|
||||
|
||||
|
|
Loading…
Reference in a new issue