Skip to content

Commit b1d7a74

Browse files
committed
Update libmetal to version v2023.10.0 - 1.5.0.
Signed-off-by: iabdalkader <[email protected]>
1 parent c2ad368 commit b1d7a74

40 files changed

+2628
-2285
lines changed

libraries/openamp_arduino/src/device.c

+10-11
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
*/
66

77
#include <string.h>
8-
#include <metal/errno.h>
98
#include <metal/assert.h>
109
#include <metal/device.h>
10+
#include <metal/errno.h>
1111
#include <metal/list.h>
1212
#include <metal/log.h>
1313
#include <metal/sys.h>
@@ -43,11 +43,10 @@ int metal_bus_find(const char *name, struct metal_bus **result)
4343

4444
metal_list_for_each(&_metal.common.bus_list, node) {
4545
bus = metal_container_of(node, struct metal_bus, node);
46-
if (strcmp(bus->name, name) != 0)
47-
continue;
48-
if (result)
46+
if (strcmp(bus->name, name) == 0 && result) {
4947
*result = bus;
50-
return 0;
48+
return 0;
49+
}
5150
}
5251
return -ENOENT;
5352
}
@@ -106,10 +105,10 @@ int metal_generic_dev_open(struct metal_bus *bus, const char *dev_name,
106105

107106
metal_list_for_each(&_metal.common.generic_device_list, node) {
108107
dev = metal_container_of(node, struct metal_device, node);
109-
if (strcmp(dev->name, dev_name) != 0)
110-
continue;
111-
*device = dev;
112-
return metal_generic_dev_sys_open(dev);
108+
if (strcmp(dev->name, dev_name) == 0) {
109+
*device = dev;
110+
return metal_generic_dev_sys_open(dev);
111+
}
113112
}
114113

115114
return -ENODEV;
@@ -122,9 +121,9 @@ int metal_generic_dev_dma_map(struct metal_bus *bus,
122121
int nents_in,
123122
struct metal_sg *sg_out)
124123
{
124+
int i;
125125
(void)bus;
126126
(void)device;
127-
int i;
128127

129128
if (sg_out != sg_in)
130129
memcpy(sg_out, sg_in, nents_in*(sizeof(struct metal_sg)));
@@ -144,10 +143,10 @@ void metal_generic_dev_dma_unmap(struct metal_bus *bus,
144143
struct metal_sg *sg,
145144
int nents)
146145
{
146+
int i;
147147
(void)bus;
148148
(void)device;
149149
(void)dir;
150-
int i;
151150

152151
for (i = 0; i < nents; i++) {
153152
metal_cache_invalidate(sg[i].virt, sg[i].len);

libraries/openamp_arduino/src/dma.c

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved.
3+
*
4+
* SPDX-License-Identifier: BSD-3-Clause
5+
*/
6+
7+
#include <metal/errno.h>
8+
#include <string.h>
9+
#include <metal/device.h>
10+
#include <metal/log.h>
11+
#include <metal/dma.h>
12+
#include <metal/atomic.h>
13+
14+
int metal_dma_map(struct metal_device *dev,
15+
uint32_t dir,
16+
struct metal_sg *sg_in,
17+
int nents_in,
18+
struct metal_sg *sg_out)
19+
{
20+
int nents_out;
21+
22+
if (!dev || !sg_in || !sg_out)
23+
return -EINVAL;
24+
if (!dev->bus->ops.dev_dma_map)
25+
return -ENODEV;
26+
27+
/* memory barrier */
28+
if (dir == METAL_DMA_DEV_R)
29+
/* If it is device read, apply memory write fence. */
30+
atomic_thread_fence(memory_order_release);
31+
else
32+
/* If it is device write or r/w, apply memory r/w fence. */
33+
atomic_thread_fence(memory_order_acq_rel);
34+
nents_out = dev->bus->ops.dev_dma_map(dev->bus,
35+
dev, dir, sg_in, nents_in, sg_out);
36+
return nents_out;
37+
}
38+
39+
void metal_dma_unmap(struct metal_device *dev,
40+
uint32_t dir,
41+
struct metal_sg *sg,
42+
int nents)
43+
{
44+
/* memory barrier */
45+
if (dir == METAL_DMA_DEV_R)
46+
/* If it is device read, apply memory write fence. */
47+
atomic_thread_fence(memory_order_release);
48+
else
49+
/*If it is device write or r/w, apply memory r/w fence */
50+
atomic_thread_fence(memory_order_acq_rel);
51+
52+
if (!dev || !dev->bus->ops.dev_dma_unmap || !sg)
53+
return;
54+
dev->bus->ops.dev_dma_unmap(dev->bus,
55+
dev, dir, sg, nents);
56+
}

libraries/openamp_arduino/src/generic_device.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
int metal_generic_dev_sys_open(struct metal_device *dev)
1818
{
1919
struct metal_io_region *io;
20-
unsigned i;
20+
unsigned int i;
2121

2222
/* map I/O memory regions */
2323
for (i = 0; i < dev->num_regions; i++) {

libraries/openamp_arduino/src/generic_io.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ void metal_sys_io_mem_map(struct metal_io_region *io)
1717
size_t psize;
1818
size_t *va;
1919

20-
va = (size_t *)io->virt;
21-
psize = io->size;
20+
va = io->virt;
21+
psize = (size_t)io->size;
2222
if (psize) {
2323
if (psize >> io->page_shift)
2424
psize = (size_t)1 << io->page_shift;

libraries/openamp_arduino/src/init.c

+7
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ int metal_init(const struct metal_init_params *params)
1111
{
1212
int error = 0;
1313

14+
if (_metal.common.ref_count++ != 0)
15+
return 0;
16+
1417
memset(&_metal, 0, sizeof(_metal));
1518

1619
_metal.common.log_handler = params->log_handler;
@@ -24,11 +27,15 @@ int metal_init(const struct metal_init_params *params)
2427
if (error)
2528
return error;
2629

30+
++_metal.common.ref_count;
2731
return error;
2832
}
2933

3034
void metal_finish(void)
3135
{
36+
if (--_metal.common.ref_count != 0)
37+
return;
38+
3239
metal_sys_finish();
3340
memset(&_metal, 0, sizeof(_metal));
3441
}

libraries/openamp_arduino/src/io.c

+9-7
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,19 @@
44
* SPDX-License-Identifier: BSD-3-Clause
55
*/
66

7-
#include <metal/errno.h>
87
#include <limits.h>
8+
#include <metal/errno.h>
99
#include <metal/io.h>
1010
#include <metal/sys.h>
1111

1212
void metal_io_init(struct metal_io_region *io, void *virt,
1313
const metal_phys_addr_t *physmap, size_t size,
14-
unsigned page_shift, unsigned int mem_flags,
14+
unsigned int page_shift, unsigned int mem_flags,
1515
const struct metal_io_ops *ops)
1616
{
17-
const struct metal_io_ops nops = {NULL, NULL, NULL, NULL, NULL, NULL};
17+
const struct metal_io_ops nops = {
18+
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
19+
};
1820

1921
io->virt = virt;
2022
io->physmap = physmap;
@@ -37,7 +39,7 @@ int metal_io_block_read(struct metal_io_region *io, unsigned long offset,
3739
unsigned char *dest = dst;
3840
int retlen;
3941

40-
if (offset > io->size)
42+
if (!ptr)
4143
return -ERANGE;
4244
if ((offset + len) > io->size)
4345
len = io->size - offset;
@@ -74,7 +76,7 @@ int metal_io_block_write(struct metal_io_region *io, unsigned long offset,
7476
const unsigned char *source = src;
7577
int retlen;
7678

77-
if (offset > io->size)
79+
if (!ptr)
7880
return -ERANGE;
7981
if ((offset + len) > io->size)
8082
len = io->size - offset;
@@ -110,7 +112,7 @@ int metal_io_block_set(struct metal_io_region *io, unsigned long offset,
110112
unsigned char *ptr = metal_io_virt(io, offset);
111113
int retlen = len;
112114

113-
if (offset > io->size)
115+
if (!ptr)
114116
return -ERANGE;
115117
if ((offset + len) > io->size)
116118
len = io->size - offset;
@@ -123,7 +125,7 @@ int metal_io_block_set(struct metal_io_region *io, unsigned long offset,
123125
unsigned int i;
124126

125127
for (i = 1; i < sizeof(int); i++)
126-
cint |= ((unsigned int)value << (8 * i));
128+
cint |= ((unsigned int)value << (CHAR_BIT * i));
127129

128130
for (; len && ((uintptr_t)ptr % sizeof(int)); ptr++, len--)
129131
*(unsigned char *)ptr = (unsigned char) value;

0 commit comments

Comments
 (0)