Merge tag 'rpmsg-v6.16' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux
Pull rpmsg updates from Bjorn Andersson: - Remove some dead and unused code from core and virtio modules - Improve the error messages from the Qualcomm SMD driver and initialize an uninitialized variable in the send path * tag 'rpmsg-v6.16' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux: rpmsg: qcom_smd: Fix uninitialized return variable in __qcom_smd_send() rpmsg: qcom_smd: Improve error handling for qcom_smd_parse_edge rpmsg: Remove unused method pointers *send_offchannel rpmsg: virtio: Remove uncallable offchannel functions rpmsg: core: Remove deadcode
This commit is contained in:
@@ -110,31 +110,6 @@ or a timeout of 15 seconds elapses. When the latter happens,
|
||||
The function can only be called from a process context (for now).
|
||||
Returns 0 on success and an appropriate error value on failure.
|
||||
|
||||
::
|
||||
|
||||
int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len);
|
||||
|
||||
|
||||
sends a message across to the remote processor, using the src and dst
|
||||
addresses provided by the user.
|
||||
|
||||
The caller should specify the endpoint, the data it wants to send,
|
||||
its length (in bytes), and explicit source and destination addresses.
|
||||
The message will then be sent to the remote processor to which the
|
||||
endpoint's channel belongs, but the endpoint's src and channel dst
|
||||
addresses will be ignored (and the user-provided addresses will
|
||||
be used instead).
|
||||
|
||||
In case there are no TX buffers available, the function will block until
|
||||
one becomes available (i.e. until the remote processor consumes
|
||||
a tx buffer and puts it back on virtio's used descriptor ring),
|
||||
or a timeout of 15 seconds elapses. When the latter happens,
|
||||
-ERESTARTSYS is returned.
|
||||
|
||||
The function can only be called from a process context (for now).
|
||||
Returns 0 on success and an appropriate error value on failure.
|
||||
|
||||
::
|
||||
|
||||
int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
@@ -173,27 +148,6 @@ return -ENOMEM without waiting until one becomes available.
|
||||
The function can only be called from a process context (for now).
|
||||
Returns 0 on success and an appropriate error value on failure.
|
||||
|
||||
::
|
||||
|
||||
int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len);
|
||||
|
||||
|
||||
sends a message across to the remote processor, using source and
|
||||
destination addresses provided by the user.
|
||||
|
||||
The user should specify the channel, the data it wants to send,
|
||||
its length (in bytes), and explicit source and destination addresses.
|
||||
The message will then be sent to the remote processor to which the
|
||||
channel belongs, but the channel's src and dst addresses will be
|
||||
ignored (and the user-provided addresses will be used instead).
|
||||
|
||||
In case there are no TX buffers available, the function will immediately
|
||||
return -ENOMEM without waiting until one becomes available.
|
||||
|
||||
The function can only be called from a process context (for now).
|
||||
Returns 0 on success and an appropriate error value on failure.
|
||||
|
||||
::
|
||||
|
||||
struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *rpdev,
|
||||
|
||||
@@ -746,7 +746,7 @@ static int __qcom_smd_send(struct qcom_smd_channel *channel, const void *data,
|
||||
__le32 hdr[5] = { cpu_to_le32(len), };
|
||||
int tlen = sizeof(hdr) + len;
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
int ret = 0;
|
||||
|
||||
/* Word aligned channels only accept word size aligned data */
|
||||
if (channel->info_word && len % 4)
|
||||
@@ -1369,7 +1369,8 @@ static int qcom_smd_parse_edge(struct device *dev,
|
||||
edge->mbox_chan = mbox_request_channel(&edge->mbox_client, 0);
|
||||
if (IS_ERR(edge->mbox_chan)) {
|
||||
if (PTR_ERR(edge->mbox_chan) != -ENODEV) {
|
||||
ret = PTR_ERR(edge->mbox_chan);
|
||||
ret = dev_err_probe(dev, PTR_ERR(edge->mbox_chan),
|
||||
"failed to acquire IPC mailbox\n");
|
||||
goto put_node;
|
||||
}
|
||||
|
||||
@@ -1386,6 +1387,7 @@ static int qcom_smd_parse_edge(struct device *dev,
|
||||
of_node_put(syscon_np);
|
||||
if (IS_ERR(edge->ipc_regmap)) {
|
||||
ret = PTR_ERR(edge->ipc_regmap);
|
||||
dev_err(dev, "failed to get regmap from syscon: %d\n", ret);
|
||||
goto put_node;
|
||||
}
|
||||
|
||||
@@ -1501,10 +1503,8 @@ struct qcom_smd_edge *qcom_smd_register_edge(struct device *parent,
|
||||
}
|
||||
|
||||
ret = qcom_smd_parse_edge(&edge->dev, node, edge);
|
||||
if (ret) {
|
||||
dev_err(&edge->dev, "failed to parse smd edge\n");
|
||||
if (ret)
|
||||
goto unregister_dev;
|
||||
}
|
||||
|
||||
ret = qcom_smd_create_chrdev(edge);
|
||||
if (ret) {
|
||||
|
||||
@@ -193,38 +193,6 @@ int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst)
|
||||
}
|
||||
EXPORT_SYMBOL(rpmsg_sendto);
|
||||
|
||||
/**
|
||||
* rpmsg_send_offchannel() - send a message using explicit src/dst addresses
|
||||
* @ept: the rpmsg endpoint
|
||||
* @src: source address
|
||||
* @dst: destination address
|
||||
* @data: payload of message
|
||||
* @len: length of payload
|
||||
*
|
||||
* This function sends @data of length @len to the remote @dst address,
|
||||
* and uses @src as the source address.
|
||||
* The message will be sent to the remote processor which the @ept
|
||||
* endpoint belongs to.
|
||||
* In case there are no TX buffers available, the function will block until
|
||||
* one becomes available, or a timeout of 15 seconds elapses. When the latter
|
||||
* happens, -ERESTARTSYS is returned.
|
||||
*
|
||||
* Can only be called from process context (for now).
|
||||
*
|
||||
* Return: 0 on success and an appropriate error value on failure.
|
||||
*/
|
||||
int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len)
|
||||
{
|
||||
if (WARN_ON(!ept))
|
||||
return -EINVAL;
|
||||
if (!ept->ops->send_offchannel)
|
||||
return -ENXIO;
|
||||
|
||||
return ept->ops->send_offchannel(ept, src, dst, data, len);
|
||||
}
|
||||
EXPORT_SYMBOL(rpmsg_send_offchannel);
|
||||
|
||||
/**
|
||||
* rpmsg_trysend() - send a message across to the remote processor
|
||||
* @ept: the rpmsg endpoint
|
||||
@@ -301,37 +269,6 @@ __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp,
|
||||
}
|
||||
EXPORT_SYMBOL(rpmsg_poll);
|
||||
|
||||
/**
|
||||
* rpmsg_trysend_offchannel() - send a message using explicit src/dst addresses
|
||||
* @ept: the rpmsg endpoint
|
||||
* @src: source address
|
||||
* @dst: destination address
|
||||
* @data: payload of message
|
||||
* @len: length of payload
|
||||
*
|
||||
* This function sends @data of length @len to the remote @dst address,
|
||||
* and uses @src as the source address.
|
||||
* The message will be sent to the remote processor which the @ept
|
||||
* endpoint belongs to.
|
||||
* In case there are no TX buffers available, the function will immediately
|
||||
* return -ENOMEM without waiting until one becomes available.
|
||||
*
|
||||
* Can only be called from process context (for now).
|
||||
*
|
||||
* Return: 0 on success and an appropriate error value on failure.
|
||||
*/
|
||||
int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len)
|
||||
{
|
||||
if (WARN_ON(!ept))
|
||||
return -EINVAL;
|
||||
if (!ept->ops->trysend_offchannel)
|
||||
return -ENXIO;
|
||||
|
||||
return ept->ops->trysend_offchannel(ept, src, dst, data, len);
|
||||
}
|
||||
EXPORT_SYMBOL(rpmsg_trysend_offchannel);
|
||||
|
||||
/**
|
||||
* rpmsg_set_flow_control() - request remote to pause/resume transmission
|
||||
* @ept: the rpmsg endpoint
|
||||
|
||||
@@ -50,10 +50,8 @@ struct rpmsg_device_ops {
|
||||
* @destroy_ept: see @rpmsg_destroy_ept(), required
|
||||
* @send: see @rpmsg_send(), required
|
||||
* @sendto: see @rpmsg_sendto(), optional
|
||||
* @send_offchannel: see @rpmsg_send_offchannel(), optional
|
||||
* @trysend: see @rpmsg_trysend(), required
|
||||
* @trysendto: see @rpmsg_trysendto(), optional
|
||||
* @trysend_offchannel: see @rpmsg_trysend_offchannel(), optional
|
||||
* @poll: see @rpmsg_poll(), optional
|
||||
* @set_flow_control: see @rpmsg_set_flow_control(), optional
|
||||
* @get_mtu: see @rpmsg_get_mtu(), optional
|
||||
@@ -67,13 +65,9 @@ struct rpmsg_endpoint_ops {
|
||||
|
||||
int (*send)(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
int (*sendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
|
||||
int (*send_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len);
|
||||
|
||||
int (*trysend)(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
int (*trysendto)(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
|
||||
int (*trysend_offchannel)(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len);
|
||||
__poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp,
|
||||
poll_table *wait);
|
||||
int (*set_flow_control)(struct rpmsg_endpoint *ept, bool pause, u32 dst);
|
||||
|
||||
@@ -141,13 +141,9 @@ static void virtio_rpmsg_destroy_ept(struct rpmsg_endpoint *ept);
|
||||
static int virtio_rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
|
||||
u32 dst);
|
||||
static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
|
||||
u32 dst, void *data, int len);
|
||||
static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
|
||||
int len, u32 dst);
|
||||
static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
|
||||
u32 dst, void *data, int len);
|
||||
static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept);
|
||||
static struct rpmsg_device *__rpmsg_create_channel(struct virtproc_info *vrp,
|
||||
struct rpmsg_channel_info *chinfo);
|
||||
@@ -156,10 +152,8 @@ static const struct rpmsg_endpoint_ops virtio_endpoint_ops = {
|
||||
.destroy_ept = virtio_rpmsg_destroy_ept,
|
||||
.send = virtio_rpmsg_send,
|
||||
.sendto = virtio_rpmsg_sendto,
|
||||
.send_offchannel = virtio_rpmsg_send_offchannel,
|
||||
.trysend = virtio_rpmsg_trysend,
|
||||
.trysendto = virtio_rpmsg_trysendto,
|
||||
.trysend_offchannel = virtio_rpmsg_trysend_offchannel,
|
||||
.get_mtu = virtio_rpmsg_get_mtu,
|
||||
};
|
||||
|
||||
@@ -545,7 +539,7 @@ static void rpmsg_downref_sleepers(struct virtproc_info *vrp)
|
||||
* the function will immediately fail, and -ENOMEM will be returned.
|
||||
*
|
||||
* Normally drivers shouldn't use this function directly; instead, drivers
|
||||
* should use the appropriate rpmsg_{try}send{to, _offchannel} API
|
||||
* should use the appropriate rpmsg_{try}send{to} API
|
||||
* (see include/linux/rpmsg.h).
|
||||
*
|
||||
* Return: 0 on success and an appropriate error value on failure.
|
||||
@@ -665,14 +659,6 @@ static int virtio_rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
|
||||
return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, true);
|
||||
}
|
||||
|
||||
static int virtio_rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
|
||||
u32 dst, void *data, int len)
|
||||
{
|
||||
struct rpmsg_device *rpdev = ept->rpdev;
|
||||
|
||||
return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, true);
|
||||
}
|
||||
|
||||
static int virtio_rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
|
||||
{
|
||||
struct rpmsg_device *rpdev = ept->rpdev;
|
||||
@@ -690,14 +676,6 @@ static int virtio_rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
|
||||
return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, false);
|
||||
}
|
||||
|
||||
static int virtio_rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
|
||||
u32 dst, void *data, int len)
|
||||
{
|
||||
struct rpmsg_device *rpdev = ept->rpdev;
|
||||
|
||||
return rpmsg_send_offchannel_raw(rpdev, src, dst, data, len, false);
|
||||
}
|
||||
|
||||
static ssize_t virtio_rpmsg_get_mtu(struct rpmsg_endpoint *ept)
|
||||
{
|
||||
struct rpmsg_device *rpdev = ept->rpdev;
|
||||
|
||||
@@ -184,13 +184,9 @@ struct rpmsg_endpoint *rpmsg_create_ept(struct rpmsg_device *,
|
||||
|
||||
int rpmsg_send(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
|
||||
int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len);
|
||||
|
||||
int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len);
|
||||
int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, u32 dst);
|
||||
int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src, u32 dst,
|
||||
void *data, int len);
|
||||
|
||||
__poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp,
|
||||
poll_table *wait);
|
||||
@@ -271,15 +267,6 @@ static inline int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len,
|
||||
|
||||
}
|
||||
|
||||
static inline int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, u32 src,
|
||||
u32 dst, void *data, int len)
|
||||
{
|
||||
/* This shouldn't be possible */
|
||||
WARN_ON(1);
|
||||
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
static inline int rpmsg_trysend(struct rpmsg_endpoint *ept, void *data, int len)
|
||||
{
|
||||
/* This shouldn't be possible */
|
||||
@@ -297,15 +284,6 @@ static inline int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data,
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
static inline int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, u32 src,
|
||||
u32 dst, void *data, int len)
|
||||
{
|
||||
/* This shouldn't be possible */
|
||||
WARN_ON(1);
|
||||
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
static inline __poll_t rpmsg_poll(struct rpmsg_endpoint *ept,
|
||||
struct file *filp, poll_table *wait)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user