]>
Commit | Line | Data |
---|---|---|
a042ac84 WD |
1 | /* |
2 | * (C) Copyright 2000-2002 | |
3 | * Wolfgang Denk, DENX Software Engineering, wd@denx.de. | |
4 | * | |
1a459660 | 5 | * SPDX-License-Identifier: GPL-2.0+ |
a042ac84 WD |
6 | */ |
7 | ||
8 | #include <common.h> | |
9 | #include <commproc.h> | |
10 | ||
d87080b7 WD |
11 | DECLARE_GLOBAL_DATA_PTR; |
12 | ||
6d0f6bcf | 13 | #ifdef CONFIG_SYS_ALLOC_DPRAM |
a042ac84 WD |
14 | |
15 | int dpram_init (void) | |
16 | { | |
a042ac84 | 17 | /* Reclaim the DP memory for our use. */ |
6bb9ba72 SG |
18 | gd->arch.dp_alloc_base = CPM_DATAONLY_BASE; |
19 | gd->arch.dp_alloc_top = CPM_DATAONLY_BASE + CPM_DATAONLY_SIZE; | |
a042ac84 WD |
20 | |
21 | return (0); | |
22 | } | |
23 | ||
24 | /* Allocate some memory from the dual ported ram. We may want to | |
25 | * enforce alignment restrictions, but right now everyone is a good | |
26 | * citizen. | |
27 | */ | |
28 | uint dpram_alloc (uint size) | |
29 | { | |
6bb9ba72 | 30 | uint addr = gd->arch.dp_alloc_base; |
a042ac84 | 31 | |
6bb9ba72 | 32 | if ((gd->arch.dp_alloc_base + size) >= gd->arch.dp_alloc_top) |
a042ac84 WD |
33 | return (CPM_DP_NOSPACE); |
34 | ||
6bb9ba72 | 35 | gd->arch.dp_alloc_base += size; |
a042ac84 WD |
36 | |
37 | return addr; | |
38 | } | |
39 | ||
40 | uint dpram_base (void) | |
41 | { | |
6bb9ba72 | 42 | return gd->arch.dp_alloc_base; |
a042ac84 WD |
43 | } |
44 | ||
45 | /* Allocate some memory from the dual ported ram. We may want to | |
46 | * enforce alignment restrictions, but right now everyone is a good | |
47 | * citizen. | |
48 | */ | |
49 | uint dpram_alloc_align (uint size, uint align) | |
50 | { | |
a042ac84 WD |
51 | uint addr, mask = align - 1; |
52 | ||
6bb9ba72 | 53 | addr = (gd->arch.dp_alloc_base + mask) & ~mask; |
a042ac84 | 54 | |
6bb9ba72 | 55 | if ((addr + size) >= gd->arch.dp_alloc_top) |
a042ac84 WD |
56 | return (CPM_DP_NOSPACE); |
57 | ||
6bb9ba72 | 58 | gd->arch.dp_alloc_base = addr + size; |
a042ac84 WD |
59 | |
60 | return addr; | |
61 | } | |
62 | ||
63 | uint dpram_base_align (uint align) | |
64 | { | |
a042ac84 WD |
65 | uint mask = align - 1; |
66 | ||
6bb9ba72 | 67 | return (gd->arch.dp_alloc_base + mask) & ~mask; |
a042ac84 | 68 | } |
6d0f6bcf | 69 | #endif /* CONFIG_SYS_ALLOC_DPRAM */ |