Lines Matching +full:rpm +full:- +full:msg +full:- +full:ram

1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2016-2017, Linaro Ltd
26 #define RPM_TOC_MAX_ENTRIES ((RPM_TOC_SIZE - sizeof(struct rpm_toc)) / \
62 head = readl(pipe->head); in glink_rpm_rx_avail()
63 tail = readl(pipe->tail); in glink_rpm_rx_avail()
66 return pipe->native.length - tail + head; in glink_rpm_rx_avail()
68 return head - tail; in glink_rpm_rx_avail()
78 tail = readl(pipe->tail); in glink_rpm_rx_peak()
80 if (tail >= pipe->native.length) in glink_rpm_rx_peak()
81 tail -= pipe->native.length; in glink_rpm_rx_peak()
83 len = min_t(size_t, count, pipe->native.length - tail); in glink_rpm_rx_peak()
85 __ioread32_copy(data, pipe->fifo + tail, in glink_rpm_rx_peak()
90 __ioread32_copy(data + len, pipe->fifo, in glink_rpm_rx_peak()
91 (count - len) / sizeof(u32)); in glink_rpm_rx_peak()
101 tail = readl(pipe->tail); in glink_rpm_rx_advance()
104 if (tail >= pipe->native.length) in glink_rpm_rx_advance()
105 tail -= pipe->native.length; in glink_rpm_rx_advance()
107 writel(tail, pipe->tail); in glink_rpm_rx_advance()
116 head = readl(pipe->head); in glink_rpm_tx_avail()
117 tail = readl(pipe->tail); in glink_rpm_tx_avail()
120 return pipe->native.length - head + tail; in glink_rpm_tx_avail()
122 return tail - head; in glink_rpm_tx_avail()
131 len = min_t(size_t, count, pipe->native.length - head); in glink_rpm_tx_write_one()
133 __iowrite32_copy(pipe->fifo + head, data, in glink_rpm_tx_write_one()
138 __iowrite32_copy(pipe->fifo, data + len, in glink_rpm_tx_write_one()
139 (count - len) / sizeof(u32)); in glink_rpm_tx_write_one()
143 if (head >= pipe->native.length) in glink_rpm_tx_write_one()
144 head -= pipe->native.length; in glink_rpm_tx_write_one()
170 memcpy(padding, data + aligned_dlen, dlen - aligned_dlen); in glink_rpm_tx_write()
172 head = readl(pipe->head); in glink_rpm_tx_write()
176 pad = ALIGN(tlen, 8) - ALIGN_DOWN(tlen, 4); in glink_rpm_tx_write()
179 writel(head, pipe->head); in glink_rpm_tx_write()
198 return -ENOMEM; in glink_rpm_parse_toc()
200 __ioread32_copy(buf, msg_ram + msg_ram_size - RPM_TOC_SIZE, in glink_rpm_parse_toc()
205 if (le32_to_cpu(toc->magic) != RPM_TOC_MAGIC) { in glink_rpm_parse_toc()
206 dev_err(dev, "RPM TOC has invalid magic\n"); in glink_rpm_parse_toc()
210 num_entries = le32_to_cpu(toc->count); in glink_rpm_parse_toc()
217 id = le32_to_cpu(toc->entries[i].id); in glink_rpm_parse_toc()
218 offset = le32_to_cpu(toc->entries[i].offset); in glink_rpm_parse_toc()
219 size = le32_to_cpu(toc->entries[i].size); in glink_rpm_parse_toc()
228 rx->native.length = size; in glink_rpm_parse_toc()
230 rx->tail = msg_ram + offset; in glink_rpm_parse_toc()
231 rx->head = msg_ram + offset + sizeof(u32); in glink_rpm_parse_toc()
232 rx->fifo = msg_ram + offset + 2 * sizeof(u32); in glink_rpm_parse_toc()
235 tx->native.length = size; in glink_rpm_parse_toc()
237 tx->tail = msg_ram + offset; in glink_rpm_parse_toc()
238 tx->head = msg_ram + offset + sizeof(u32); in glink_rpm_parse_toc()
239 tx->fifo = msg_ram + offset + 2 * sizeof(u32); in glink_rpm_parse_toc()
244 if (!rx->fifo || !tx->fifo) { in glink_rpm_parse_toc()
254 return -EINVAL; in glink_rpm_parse_toc()
265 struct device *dev = &pdev->dev; in glink_rpm_probe()
269 rx_pipe = devm_kzalloc(&pdev->dev, sizeof(*rx_pipe), GFP_KERNEL); in glink_rpm_probe()
270 tx_pipe = devm_kzalloc(&pdev->dev, sizeof(*tx_pipe), GFP_KERNEL); in glink_rpm_probe()
272 return -ENOMEM; in glink_rpm_probe()
274 np = of_parse_phandle(dev->of_node, "qcom,rpm-msg-ram", 0); in glink_rpm_probe()
283 return -ENOMEM; in glink_rpm_probe()
291 rx_pipe->native.avail = glink_rpm_rx_avail; in glink_rpm_probe()
292 rx_pipe->native.peak = glink_rpm_rx_peak; in glink_rpm_probe()
293 rx_pipe->native.advance = glink_rpm_rx_advance; in glink_rpm_probe()
294 tx_pipe->native.avail = glink_rpm_tx_avail; in glink_rpm_probe()
295 tx_pipe->native.write = glink_rpm_tx_write; in glink_rpm_probe()
297 writel(0, tx_pipe->head); in glink_rpm_probe()
298 writel(0, rx_pipe->tail); in glink_rpm_probe()
300 glink = qcom_glink_native_probe(&pdev->dev, in glink_rpm_probe()
302 &rx_pipe->native, in glink_rpm_probe()
303 &tx_pipe->native, in glink_rpm_probe()
323 { .compatible = "qcom,glink-rpm" },
350 MODULE_DESCRIPTION("Qualcomm GLINK RPM driver");