mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-11-10 01:34:12 +00:00
dapf: Support reg indexing + add ISP
Also enable power if domain exists. Signed-off-by: Eileen Yoon <eyn@gmx.com>
This commit is contained in:
parent
e378605d70
commit
6072b8facf
3 changed files with 33 additions and 10 deletions
39
src/dapf.c
39
src/dapf.c
|
@ -5,6 +5,7 @@
|
||||||
#include "assert.h"
|
#include "assert.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "pmgr.h"
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
@ -83,7 +84,7 @@ static int dapf_init_t8110(const char *path, u64 base, int node)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dapf_init(const char *path)
|
int dapf_init(const char *path, int index)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int dart_path[8];
|
int dart_path[8];
|
||||||
|
@ -93,8 +94,14 @@ int dapf_init(const char *path)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 pwr;
|
||||||
|
if (!adt_getprop(adt, node, "clock-gates", &pwr))
|
||||||
|
pwr = 0;
|
||||||
|
if (pwr && (pmgr_adt_power_enable(path) < 0))
|
||||||
|
return -1;
|
||||||
|
|
||||||
u64 base;
|
u64 base;
|
||||||
if (adt_get_reg(adt, dart_path, "reg", 1, &base, NULL) < 0) {
|
if (adt_get_reg(adt, dart_path, "reg", index, &base, NULL) < 0) {
|
||||||
printf("dapf: Error getting DAPF %s base address.\n", path);
|
printf("dapf: Error getting DAPF %s base address.\n", path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -110,28 +117,44 @@ int dapf_init(const char *path)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pwr)
|
||||||
|
pmgr_adt_power_disable(path);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
printf("dapf: Initialized %s\n", path);
|
printf("dapf: Initialized %s\n", path);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *dapf_paths[] = {"/arm-io/dart-aop", "/arm-io/dart-mtp", "/arm-io/dart-pmp", NULL};
|
struct entry {
|
||||||
|
const char *path;
|
||||||
|
int index;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct entry dapf_entries[] = {
|
||||||
|
{"/arm-io/dart-aop", 1},
|
||||||
|
{"/arm-io/dart-mtp", 1},
|
||||||
|
{"/arm-io/dart-pmp", 1},
|
||||||
|
{"/arm-io/dart-isp", 5},
|
||||||
|
{NULL, -1},
|
||||||
|
};
|
||||||
|
|
||||||
int dapf_init_all(void)
|
int dapf_init_all(void)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
for (const char **path = dapf_paths; *path; path++) {
|
struct entry *entry = dapf_entries;
|
||||||
if (adt_path_offset(adt, *path) < 0)
|
while (entry->path != NULL) {
|
||||||
|
if (adt_path_offset(adt, entry->path) < 0) {
|
||||||
|
entry++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (dapf_init(*path) < 0) {
|
if (dapf_init(entry->path, entry->index) < 0) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
entry++;
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret ? ret : count;
|
return ret ? ret : count;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
#define DAPF_H
|
#define DAPF_H
|
||||||
|
|
||||||
int dapf_init_all(void);
|
int dapf_init_all(void);
|
||||||
int dapf_init(const char *path);
|
int dapf_init(const char *path, int index);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -586,7 +586,7 @@ int proxy_process(ProxyRequest *request, ProxyReply *reply)
|
||||||
reply->retval = dapf_init_all();
|
reply->retval = dapf_init_all();
|
||||||
break;
|
break;
|
||||||
case P_DAPF_INIT:
|
case P_DAPF_INIT:
|
||||||
reply->retval = dapf_init((const char *)request->args[0]);
|
reply->retval = dapf_init((const char *)request->args[0], 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case P_CPUFREQ_INIT:
|
case P_CPUFREQ_INIT:
|
||||||
|
|
Loading…
Reference in a new issue