Revert "Merge patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet""
[J-u-boot.git] / drivers / dfu / dfu_ram.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
a9479f04
AM
2/*
3 * (C) Copyright 2013
4 * Afzal Mohammed <afzal.mohd.ma@gmail.com>
5 *
6 * Reference: dfu_mmc.c
7 * Copyright (C) 2012 Samsung Electronics
8 * author: Lukasz Majewski <l.majewski@samsung.com>
a9479f04
AM
9 */
10
d678a59d 11#include <common.h>
a9479f04 12#include <malloc.h>
73f4ebb6 13#include <mapmem.h>
a9479f04
AM
14#include <errno.h>
15#include <dfu.h>
1e94b46f 16#include <linux/printk.h>
a9479f04
AM
17
18static int dfu_transfer_medium_ram(enum dfu_op op, struct dfu_entity *dfu,
19 u64 offset, void *buf, long *len)
20{
21 if (dfu->layout != DFU_RAM_ADDR) {
9b643e31 22 pr_err("unsupported layout: %s\n", dfu_get_layout(dfu->layout));
a9479f04
AM
23 return -EINVAL;
24 }
25
26 if (offset > dfu->data.ram.size) {
9b643e31 27 pr_err("request exceeds allowed area\n");
a9479f04
AM
28 return -EINVAL;
29 }
30
31 if (op == DFU_OP_WRITE)
73f4ebb6 32 memcpy(map_sysmem(dfu->data.ram.start + offset, 0), buf, *len);
a9479f04 33 else
73f4ebb6 34 memcpy(buf, map_sysmem(dfu->data.ram.start + offset, 0), *len);
a9479f04
AM
35
36 return 0;
37}
38
39static int dfu_write_medium_ram(struct dfu_entity *dfu, u64 offset,
40 void *buf, long *len)
41{
42 return dfu_transfer_medium_ram(DFU_OP_WRITE, dfu, offset, buf, len);
43}
44
15970d87 45int dfu_get_medium_size_ram(struct dfu_entity *dfu, u64 *size)
0e285b50 46{
4de51201
PD
47 *size = dfu->data.ram.size;
48
49 return 0;
0e285b50
SW
50}
51
a9479f04
AM
52static int dfu_read_medium_ram(struct dfu_entity *dfu, u64 offset,
53 void *buf, long *len)
54{
a9479f04
AM
55 return dfu_transfer_medium_ram(DFU_OP_READ, dfu, offset, buf, len);
56}
57
53b40636 58int dfu_fill_entity_ram(struct dfu_entity *dfu, char *devstr, char **argv, int argc)
a9479f04 59{
53b40636
MH
60 char *s;
61
62 if (argc != 3) {
63 pr_err("Invalid number of arguments.\n");
64 return -EINVAL;
e1b0f6fe 65 }
a9479f04
AM
66
67 dfu->dev_type = DFU_DEV_RAM;
e1b0f6fe 68 if (strcmp(argv[0], "ram")) {
9b643e31 69 pr_err("unsupported device: %s\n", argv[0]);
a9479f04
AM
70 return -ENODEV;
71 }
72
73 dfu->layout = DFU_RAM_ADDR;
53b40636
MH
74 dfu->data.ram.start = hextoul(argv[1], &s);
75 if (*s)
76 return -EINVAL;
77 dfu->data.ram.size = hextoul(argv[2], &s);
78 if (*s)
79 return -EINVAL;
a9479f04
AM
80
81 dfu->write_medium = dfu_write_medium_ram;
0e285b50 82 dfu->get_medium_size = dfu_get_medium_size_ram;
a9479f04
AM
83 dfu->read_medium = dfu_read_medium_ram;
84
85 dfu->inited = 0;
86
87 return 0;
88}
This page took 0.390467 seconds and 4 git commands to generate.