Skip to content

Commit 3be4bc0

Browse files
committed
Update libmetal to version v2023.10.0 - 1.5.0.
Signed-off-by: iabdalkader <i.abdalkader@gmail.com>
1 parent c2ad368 commit 3be4bc0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2630
-2287
lines changed

libraries/openamp_arduino/src/device.c

Lines changed: 10 additions & 11 deletions
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

Lines changed: 56 additions & 0 deletions
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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 7 additions & 0 deletions
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

Lines changed: 9 additions & 7 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy