Skip to content

Commit b88eee9

Browse files
committed
rpmsg: glink: Make RX FIFO peak accessor to take an offset
To fully read the received rx data from FIFO both the command and data has to be read. Currently we read command, data separately and process them. By adding an offset parameter to RX FIFO peak accessor, command and data can be read together, simplifying things. So introduce this. Acked-by: Arun Kumar Neelakantam <aneela@codeaurora.org> Signed-off-by: Sricharan R <sricharan@codeaurora.org> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
1 parent 64f95f8 commit b88eee9

File tree

4 files changed

+16
-11
lines changed

4 files changed

+16
-11
lines changed

drivers/rpmsg/qcom_glink_native.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,9 @@ static size_t qcom_glink_rx_avail(struct qcom_glink *glink)
233233
}
234234

235235
static void qcom_glink_rx_peak(struct qcom_glink *glink,
236-
void *data, size_t count)
236+
void *data, unsigned int offset, size_t count)
237237
{
238-
glink->rx_pipe->peak(glink->rx_pipe, data, count);
238+
glink->rx_pipe->peak(glink->rx_pipe, data, offset, count);
239239
}
240240

241241
static void qcom_glink_rx_advance(struct qcom_glink *glink, size_t count)
@@ -600,7 +600,7 @@ static int qcom_glink_rx_defer(struct qcom_glink *glink, size_t extra)
600600

601601
INIT_LIST_HEAD(&dcmd->node);
602602

603-
qcom_glink_rx_peak(glink, &dcmd->msg, sizeof(dcmd->msg) + extra);
603+
qcom_glink_rx_peak(glink, &dcmd->msg, 0, sizeof(dcmd->msg) + extra);
604604

605605
spin_lock(&glink->rx_lock);
606606
list_add_tail(&dcmd->node, &glink->rx_queue);
@@ -633,7 +633,7 @@ static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail)
633633
return -EAGAIN;
634634
}
635635

636-
qcom_glink_rx_peak(glink, &hdr, sizeof(hdr));
636+
qcom_glink_rx_peak(glink, &hdr, 0, sizeof(hdr));
637637
chunk_size = le32_to_cpu(hdr.chunk_size);
638638
left_size = le32_to_cpu(hdr.left_size);
639639

@@ -700,9 +700,8 @@ static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail)
700700
goto advance_rx;
701701
}
702702

703-
qcom_glink_rx_advance(glink, ALIGN(sizeof(hdr), 8));
704703
qcom_glink_rx_peak(glink, intent->data + intent->offset,
705-
chunk_size);
704+
sizeof(hdr), chunk_size);
706705
intent->offset += chunk_size;
707706

708707
/* Handle message when no fragments remain to be received */
@@ -722,7 +721,7 @@ static int qcom_glink_rx_data(struct qcom_glink *glink, size_t avail)
722721
}
723722

724723
advance_rx:
725-
qcom_glink_rx_advance(glink, ALIGN(chunk_size, 8));
724+
qcom_glink_rx_advance(glink, ALIGN(sizeof(hdr) + chunk_size, 8));
726725

727726
return ret;
728727
}
@@ -759,7 +758,7 @@ static irqreturn_t qcom_glink_native_intr(int irq, void *data)
759758
if (avail < sizeof(msg))
760759
break;
761760

762-
qcom_glink_rx_peak(glink, &msg, sizeof(msg));
761+
qcom_glink_rx_peak(glink, &msg, 0, sizeof(msg));
763762

764763
cmd = le16_to_cpu(msg.cmd);
765764
param1 = le16_to_cpu(msg.param1);

drivers/rpmsg/qcom_glink_native.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct qcom_glink_pipe {
2424
size_t (*avail)(struct qcom_glink_pipe *glink_pipe);
2525

2626
void (*peak)(struct qcom_glink_pipe *glink_pipe, void *data,
27-
size_t count);
27+
unsigned int offset, size_t count);
2828
void (*advance)(struct qcom_glink_pipe *glink_pipe, size_t count);
2929

3030
void (*write)(struct qcom_glink_pipe *glink_pipe,

drivers/rpmsg/qcom_glink_rpm.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,16 @@ static size_t glink_rpm_rx_avail(struct qcom_glink_pipe *glink_pipe)
7777
}
7878

7979
static void glink_rpm_rx_peak(struct qcom_glink_pipe *glink_pipe,
80-
void *data, size_t count)
80+
void *data, unsigned int offset, size_t count)
8181
{
8282
struct glink_rpm_pipe *pipe = to_rpm_pipe(glink_pipe);
8383
unsigned int tail;
8484
size_t len;
8585

8686
tail = readl(pipe->tail);
87+
tail += offset;
88+
if (tail >= pipe->native.length)
89+
tail -= pipe->native.length;
8790

8891
len = min_t(size_t, count, pipe->native.length - tail);
8992
if (len) {

drivers/rpmsg/qcom_glink_smem.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,16 @@ static size_t glink_smem_rx_avail(struct qcom_glink_pipe *np)
8787
}
8888

8989
static void glink_smem_rx_peak(struct qcom_glink_pipe *np,
90-
void *data, size_t count)
90+
void *data, unsigned int offset, size_t count)
9191
{
9292
struct glink_smem_pipe *pipe = to_smem_pipe(np);
9393
size_t len;
9494
u32 tail;
9595

9696
tail = le32_to_cpu(*pipe->tail);
97+
tail += offset;
98+
if (tail >= pipe->native.length)
99+
tail -= pipe->native.length;
97100

98101
len = min_t(size_t, count, pipe->native.length - tail);
99102
if (len) {

0 commit comments

Comments
 (0)