From 6eb96e8434087867010ad793d475f5f4370a318b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=AE=87=E6=89=AC?= Date: Mon, 22 Apr 2024 14:38:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4tfacc=20compute=20server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- third_party/tfacc/driver/tfacc2/Makefile | 22 + .../tfacc/driver/tfacc2/build_driver.sh | 21 + third_party/tfacc/driver/tfacc2/modules.order | 1 + third_party/tfacc/driver/tfacc2/tfacc2.c | 1949 +++++++++++++++++ third_party/tfacc/driver/tfacc2/tfacc2.h | 290 +++ third_party/tfacc/launch.py | 22 + third_party/tfacc/pull.sh | 3 + third_party/tfacc/server | Bin 0 -> 396328 bytes 9 files changed, 2310 insertions(+), 1 deletion(-) create mode 100644 third_party/tfacc/driver/tfacc2/Makefile create mode 100755 third_party/tfacc/driver/tfacc2/build_driver.sh create mode 100644 third_party/tfacc/driver/tfacc2/modules.order create mode 100644 third_party/tfacc/driver/tfacc2/tfacc2.c create mode 100644 third_party/tfacc/driver/tfacc2/tfacc2.h create mode 100644 third_party/tfacc/launch.py create mode 100755 third_party/tfacc/pull.sh create mode 100755 third_party/tfacc/server diff --git a/.gitignore b/.gitignore index 0368710f..f5d53364 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,5 @@ token /example/Android/LLMAssistant/local.properties /test/cmmlu/results/ /models/ -/localtest/ \ No newline at end of file +/localtest/ +/third_party/tfacc/driver/tfacc2/result \ No newline at end of file diff --git a/third_party/tfacc/driver/tfacc2/Makefile b/third_party/tfacc/driver/tfacc2/Makefile new file mode 100644 index 00000000..c4b46975 --- /dev/null +++ b/third_party/tfacc/driver/tfacc2/Makefile @@ -0,0 +1,22 @@ +obj-m += tfacc2.o +PWD=$(shell pwd) + +#LINUX_VERSION=$(LINUX_VERSION) +KERNEL_VERSION=$(shell uname -r) + +ifeq ($(LINUX_VERSION),Ubuntu) + KDIR=/usr/src/linux-headers-$(KERNEL_VERSION) +else + KDIR=/usr/src/kernels/$(KERNEL_VERSION)/ +endif + + +install: + bash ./build_driver.sh + +tfacc2: + make -C $(KDIR) M=$(PWD) modules + make -C $(KDIR) M=$(PWD) modules_install + depmod -A +clean: + make -C $(KDIR) M=$(PWD) clean diff --git a/third_party/tfacc/driver/tfacc2/build_driver.sh b/third_party/tfacc/driver/tfacc2/build_driver.sh new file mode 100755 index 00000000..5620532f --- /dev/null +++ b/third_party/tfacc/driver/tfacc2/build_driver.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +base_dir=$( + cd "$(dirname "$0")" || exit + pwd +) +cd "${base_dir}" || exit + +cp ../../tfsmi /usr/local/bin/tfsmi +cp ../../tfsmbios /usr/local/bin/tfsmbios + +output_path=result/$1 + +rm -rf "${output_path}" +mkdir -p "${output_path}" +cp -r $(ls | grep -v result | xargs) "${output_path}" + +cd "${output_path}" || exit + +export LINUX_VERSION=$(cat /etc/issue | awk -F ' ' '{print $1}' | awk 'NR==1') +make tfacc2 diff --git a/third_party/tfacc/driver/tfacc2/modules.order b/third_party/tfacc/driver/tfacc2/modules.order new file mode 100644 index 00000000..301382fe --- /dev/null +++ b/third_party/tfacc/driver/tfacc2/modules.order @@ -0,0 +1 @@ +/home/huangyuyang/Downloads/new/tfdl2/driver/tfacc2/tfacc2.ko diff --git a/third_party/tfacc/driver/tfacc2/tfacc2.c b/third_party/tfacc/driver/tfacc2/tfacc2.c new file mode 100644 index 00000000..baaa01b9 --- /dev/null +++ b/third_party/tfacc/driver/tfacc2/tfacc2.c @@ -0,0 +1,1949 @@ +#include "tfacc2.h" +#include "linux/of.h" +#include +#include +#include + +static struct tf_device *tf_dev = NULL; +static bool versionIsRight = false; // 表明version是否check过,如果check成功则置为true +static int isNextUncache = 0; +static int chips = 1; +static int efuse = 0; +static int chipInit = 0; +static int cacheInit = 0; +static int chipInitCnt = 0; +static int cacheInitCnt = 0; +static int skipFullSwRst = 0; +static unsigned long long chipGap = 0; // 相邻两个chip之间的寄存器地址差多少 +static unsigned long long ddrStart = 0x100000000LL; + +static int needReset = 0; + +static void cpu_write(unsigned long long base, int value) { + volatile unsigned int *clk = ioremap(base, 4); + clk[0] = value; + iounmap(clk); +} + +static void hardware_tfacc_reset(void) { + if (efuse) { + return; + } + // 下面这段代码是硬件复位 + cpu_write(0xfe110000 + 0x84 * 4, 0x2); + cpu_write(0xfc200000 + 0xe0, 0x0); + cpu_write(0xfc200000 + 0xf8, 0x0); + cpu_write(0xfc200000 + 0xfc, 0x0); + cpu_write(0xfc600000 + 0xe0, 0x0); + cpu_write(0xfc600000 + 0xf8, 0x0); + cpu_write(0xfc600000 + 0xfc, 0x0); + cpu_write(0xfe110000 + 0x82 * 4, 0x1); + cpu_write(0xfe110000 + 0x82 * 4, 0x3); + cpu_write(0xfe110000 + 0x84 * 4, 0x0); + + cpu_write(0xed400000 + 0x84 * 4, 0x3); + cpu_write(0xec200000 + 0xe0, 0x0); + cpu_write(0xec200000 + 0xf8, 0x0); + cpu_write(0xec200000 + 0xfc, 0x0); + cpu_write(0xec600000 + 0xe0, 0x0); + cpu_write(0xec600000 + 0xf8, 0x0); + cpu_write(0xec600000 + 0xfc, 0x0); + cpu_write(0xed400000 + 0x82 * 4, 0x1); + cpu_write(0xed400000 + 0x82 * 4, 0x3); + cpu_write(0xed400000 + 0x84 * 4, 0x1); +} + +/* reserve mem */ +struct ReserveDDRBlock reserveDDRBlocks[1005]; +int reserveDDRBlcokCnt = 0; + +static int tf_get_reserve_ddr_blocks(struct ReserveDDRBlock* p) { + int i; + int ret; + if (efuse) { + return -1; + } + + for (i = 0; i < reserveDDRBlcokCnt; ++i) { + ret = copy_to_user((void *) p, &reserveDDRBlocks[i], sizeof(struct ReserveDDRBlock)); + p++; + } + return 0; +} + +/* app lock */ +static struct mutex app_mutex; +static spinlock_t app_spin_lock; + +#define MAX_APP_LOCK_RECORDS 500 +// Parameter 'size' for an ioctl code is limited with (16K -1). +static struct tf_lock_record app_lock_records[MAX_APP_LOCK_RECORDS]; +static int curRecordOffset = 0; +static int tfaccRecordOffsets[MAX_TFACC_CNT]; + +// 记录一个TFACC的使用情况 +// 分为两部分 +// 第一部分是一个循环队列,记录过去最多300秒之内,每一秒的占用率 +// 第二部分是还没有进入队列的信息 +// 这里面事件记录均使用MS为单位 +#define MAX_RECORD_SECONDS 300 +#define RECORD_QUEUE_LEN 305 +struct tf_use_record { + // 这部分是循环队列, startTime[x]往后一秒内的使用率为percent[x] / 1000.0 + unsigned int percent[MAX_RECORD_SECONDS + 10]; + unsigned int startTime[MAX_RECORD_SECONDS + 10]; + int head, len; + + unsigned int lastTimeInQueue; // 即将计入队列的最早时间,这个数必须是1000的倍数。如果lastTimeInQueue = 2000,代表<=1999的数据都已经被计入队列了 + unsigned int lastRecordTime; // 最后一次记录的时间 + unsigned int lastUseTime; // 在[lastTimeInQueue, lastRecordTime]这段区间内有多久被锁定 + int isHolding; // 是否还在持有 +}; +struct tf_use_record useRecords[MAX_TFACC_CNT]; + +static void initRecords(void) { + int i = 0; + if (efuse) { + return; + } + for (i = 0; i < MAX_APP_LOCK_RECORDS; ++i) { + app_lock_records[i].pid = 0; + app_lock_records[i].tgid = 0; + app_lock_records[i].isHolding = 0; + app_lock_records[i].lockTime = 0; + app_lock_records[i].unlockTime = 0; + app_lock_records[i].tfaccID = -1; + } + + for (i = 0; i < MAX_TFACC_CNT; ++i) { + tfaccRecordOffsets[i] = 0; + } + + for (i = 0; i < MAX_TFACC_CNT; i++) { + useRecords[i].head = 0; + useRecords[i].len = 0; + useRecords[i].isHolding = 0; + useRecords[i].lastTimeInQueue = 0; + useRecords[i].lastRecordTime = 0; + useRecords[i].lastUseTime = 0; + } + + curRecordOffset = 0; +} + +static void updateUseRecord(int tfaccID, int lastHolding, unsigned long curMs) { + // 处理使用记录 + // 1. 先把超过300秒的记录都删掉 + struct tf_use_record *record = &useRecords[tfaccID]; + while (record->len > 0 && (curMs - record->startTime[record->head]) / 1000 + 1 > MAX_RECORD_SECONDS) { + record->head = (record->head + 1) % RECORD_QUEUE_LEN; + record->len--; + } + + // 2. 处理LastRecordTime到当前时间 + if (record->isHolding) { + // 如果最后处于锁定状态 + if ((curMs - record->lastTimeInQueue) / 1000 + 1 > MAX_RECORD_SECONDS) { + // 上次记录已经过去很久了,调整到需要计入队列的最晚事件 + int x = (curMs / 1000 * 1000 - MAX_RECORD_SECONDS * 1000 + 1000); + record->lastTimeInQueue = (x < 0) ? 0 : x; + record->lastRecordTime = record->lastTimeInQueue; + record->lastUseTime = 0; + } + + while (record->lastTimeInQueue < curMs / 1000 * 1000) { + int pos = (record->head + record->len) % RECORD_QUEUE_LEN; + record->startTime[pos] = record->lastTimeInQueue; + record->percent[pos] = (record->lastUseTime + (1000 - record->lastRecordTime % 1000)); + record->len++; + + record->lastTimeInQueue += 1000; + record->lastRecordTime = record->lastTimeInQueue; + record->lastUseTime = 0; + } + + record->lastUseTime += (curMs - record->lastRecordTime); + record->lastRecordTime = curMs; + } else { + // 如果最后处于非锁定状态 + if ((curMs - record->lastTimeInQueue) / 1000 + 1 > MAX_RECORD_SECONDS) { + // 上次记录已经过去很久了.. 忽略 + record->lastTimeInQueue = curMs / 1000 * 1000; + record->lastRecordTime = curMs; + record->lastUseTime = 0; + } else { + // 上次记录的时间在300秒之内 + if (curMs / 1000 * 1000 == record->lastTimeInQueue) { + // 上次记录还在1秒内 + record->lastRecordTime = curMs; + } else { + // 上次记录的时间超过1秒了,放入队列 + int pos = (record->head + record->len) % RECORD_QUEUE_LEN; + record->startTime[pos] = record->lastTimeInQueue; + record->percent[pos] = record->lastUseTime; + record->len++; + + record->lastTimeInQueue = curMs / 1000 * 1000; + record->lastRecordTime = curMs; + record->lastUseTime = 0; + } + } + } + + // 更新最终状态 + record->isHolding = lastHolding; +} + +static void insertAppLockRecord(struct tf_device* dev, int tfaccID) { + if (efuse) { + return; + } + // 更新app 使用tfacc记录 + app_lock_records[curRecordOffset].pid = current->pid; + app_lock_records[curRecordOffset].tgid = current->tgid; + app_lock_records[curRecordOffset].lockTime = jiffies; + app_lock_records[curRecordOffset].unlockTime = jiffies; + app_lock_records[curRecordOffset].isHolding = 1; + app_lock_records[curRecordOffset].tfaccID = tfaccID; + + dev->holdTFACCPid[tfaccID] = current->pid; + dev->holdTFACCTgid[tfaccID] = current->tgid; + + tfaccRecordOffsets[tfaccID] = curRecordOffset; + curRecordOffset = (curRecordOffset + 1) % MAX_APP_LOCK_RECORDS; + + updateUseRecord(tfaccID, 1, jiffies_to_msecs(jiffies)); +} + +static void finishAppLockRecord(struct tf_device* dev, int tfaccID) { + int offset = tfaccRecordOffsets[tfaccID]; + if (efuse) { + return; + } + + dev->holdTFACCPid[tfaccID] = -1; + dev->holdTFACCTgid[tfaccID] = -1; + app_lock_records[offset].unlockTime = jiffies; + app_lock_records[offset].isHolding = 0; + + // curRecordOffset = (curRecordOffset + 1) % MAX_APP_LOCK_RECORDS; + updateUseRecord(tfaccID, 0, jiffies_to_msecs(jiffies)); +} + +static int tf_app_try_lock(struct tf_device* dev, int* p) { + int sleepUs = 0; + int tfaccID = -1; + int lock_pid = -1; + long uWait = (long) sleepUs; + + if (efuse) { + return -1; + } + __get_user(sleepUs, p); + p++; + __get_user(tfaccID, p); + + if (tfaccID < 0 || tfaccID >= MAX_TFACC_CNT) { + DPRINTK("TFACCID is not valid: %d\n", tfaccID); + return -EBADMSG; + } + + // DPRINTK("Try lock, pid: %d, tgid: %d, for tfacc: %d \n", current->pid, current->tgid, tfaccID); + // DPRINTK("Current lock holder pid: %d, tgid: %d, tfacc: %d \n", + // dev->holdTFACCPid[tfaccID], dev->holdTFACCTgid[tfaccID], tfaccID); + + // 如果已经持有锁,直接返回成功 + if (dev->holdTFACCPid[tfaccID] == current->pid) { + DPRINTK("ALREADY HOLD TFACC, %d, tfacc: %d\n", current->pid, tfaccID); + return 0; + } + + while (true) { + // 尝试进入临界区 + // DPRINTK("[ENTERING ZONE], pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + mutex_lock(&app_mutex); + // DPRINTK("[ENTERED ZONE], pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + if (dev->holdTFACCPid[tfaccID] == -1) { + dev->holdTFACCPid[tfaccID] = current->pid; + dev->holdTFACCTgid[tfaccID] = current->tgid; + lock_pid = current->pid; + insertAppLockRecord(dev, tfaccID); + } + mutex_unlock(&app_mutex); + // DPRINTK("[QUIT ZONE], pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + + // 检查是否拿到TFACC + if (lock_pid == current->pid) { + // DPRINTK("GOT TFACC SUCC: %d, tfacc: %d\n", current->pid, tfaccID); + return 0; + } + + // 如果只是尝试一次,那么失败立即返回 + if (sleepUs < 0) { + DPRINTK("FAIL to get tfacc once: %d\n", current->pid); + return -EBADMSG; + } + + // 如果 = 0 ,表示不断重试 + if (sleepUs == 0) { + // udelay(10); + DPRINTK("Not supported wait until: %d\n", current->pid); + return -EBADMSG; + } else { // 不断重试, 直到时间 + udelay(10); + uWait -= 10; + if (uWait < 0) { + DPRINTK("FAIL to get tfacc for useconds: %d pid: %d, tgid: %d, tfacc: %d\n", + sleepUs, current->pid, current->tgid, tfaccID); + return -EBADMSG; + } + } + } + return 0; +} + +static int tf_app_try_unlock(struct tf_device* dev, int* p) { + int tfaccID = -1; + if (efuse) { + return -1; + } + __get_user(tfaccID, (int*) (p) ); + + if (tfaccID < 0 || tfaccID >= MAX_TFACC_CNT) { + DPRINTK("TFACCID is not valid: %d\n", tfaccID); + return -EBADMSG; + } + + // DPRINTK("Try unlock, pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + // DPRINTK("Current lock holder pid: %d, tgid: %d, tfaccID: %d \n", + // dev->holdTFACCPid[tfaccID], dev->holdTFACCTgid[tfaccID], tfaccID); + + { + // 正常退出判断 + // DPRINTK("[ENTERING ZONE], pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + mutex_lock(&app_mutex); + // DPRINTK("[ENTERED ZONE], pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + if (dev->holdTFACCPid[tfaccID] == current->pid) { + finishAppLockRecord(dev, tfaccID); + } + mutex_unlock(&app_mutex); + // DPRINTK("[QUIT ZONE], pid: %d, tgid: %d, tfaccID: %d \n", current->pid, current->tgid, tfaccID); + } + + // DPRINTK("Current lock holder pid: %d, tgid: %d, tfaccID: %d \n", + // dev->holdTFACCPid[tfaccID], dev->holdTFACCTgid[tfaccID], tfaccID); + return 0; +} + +static int tf_app_release_tgid_lock(struct tf_device* dev) { + int i; + if (efuse) { + return -1; + } + DPRINTK("Releasing, pid: %d, tgid: %d \n", current->pid, current->tgid); + // DPRINTK("Current lock holder pid: %d, tgid: %d \n", dev->holdAppLockPid, dev->holdAppLockTgid); + + // 意味着进程组退出, 需要退出pid, 以及检查当前持有锁的tgid + { + // DPRINTK("TG [ENTERING ZONE], pid: %d, tgid: %d\n", current->pid, current->tgid); + mutex_lock(&app_mutex); + // DPRINTK("TG [ENTERED ZONE], pid: %d, tgid: %d\n", current->pid, current->tgid); + + for (i = 0; i < MAX_TFACC_CNT; ++i) { + if (dev->holdTFACCPid[i] == current->pid) { + finishAppLockRecord(dev, i); + } else { + if (dev->holdTFACCTgid[i] == current->tgid) { + finishAppLockRecord(dev, i); + } + } + } + mutex_unlock(&app_mutex); + // DPRINTK("[QUIT ZONE], pid: %d, tgid: %d. \n", current->pid, current->tgid); + // DPRINTK("TG [QUIT LOCK], pid: %d, tgid: %d\n", current->pid, current->tgid); + } + + for (i = 0; i < MAX_TFACC_CNT; ++i) { + DPRINTK("Current lock holder for tfacc: %d, pid: %d, tgid: %d \n", + i, dev->holdTFACCPid[i], dev->holdTFACCTgid[i]); + } + // DPRINTK("Current lock holder pid: %d, tgid: %d \n", dev->holdAppLockPid, dev->holdAppLockTgid); + return 0; +} + +/// 获得所有锁获取记录 +static int tf_get_app_lock_records(struct tf_lock_record* p) { + int i; + int ret; + if (efuse) { + return -1; + } + for (i = 0; i < MAX_APP_LOCK_RECORDS; ++i) { + if (app_lock_records[i].isHolding) app_lock_records[i].unlockTime = jiffies; + ret = copy_to_user((void *) p, &app_lock_records[i], sizeof(struct tf_lock_record)); + p++; + } + return 0; +} + +// 获取使用率状态 +// p[0]: 15s之内的总使用率 +// p[1]: 60s之内的总使用率 +// p[2]: 300s之内的总使用率 +// p[3 ~ 34]: p[i]代表(i - 3)号tfacc在15s内的使用率,如果为-1代表这个tfacc不存在,否则为0~1000之间的数代表利用率 * 1000 +static int tf_get_app_usage(int *pp) { + int i, j; + int p[MAX_TFACC_CNT + 5]; + int s1, s2; + struct tf_use_record *record; + unsigned int curMs; + for (i = 0; i < MAX_TFACC_CNT + 3; i++) { + __put_user(-1, pp + i); + p[i] = -1; + } + if (efuse) { + return -1; + } + p[0] = p[1] = p[2] = 0; + + for (i = 0; i < chips * 8; i++) { + p[3 + i] = 0; + s1 = 0; + s2 = 0; + curMs = jiffies_to_msecs(jiffies); + updateUseRecord(i, useRecords[i].isHolding, curMs); + record = &useRecords[i]; + for (j = 0; j < record->len; j++) { + int pos = (record->head + j) % RECORD_QUEUE_LEN; + int gap = (curMs - record->startTime[pos]) / 1000 + 1; + if (gap <= 15) { + p[3 + i] += record->percent[pos]; + } + if (gap <= 60) { + s1 += record->percent[pos]; + } + if (gap <= 300) { + s2 += record->percent[pos]; + } + } + p[3 + i] += record->lastUseTime; + p[3 + i] *= 1000; + p[3 + i] /= (14000 + (record->lastRecordTime - record->lastTimeInQueue)); + p[0] += p[3 + i]; + + s1 *= 1000; + s1 /= (59000 + (record->lastRecordTime - record->lastTimeInQueue)); + + s2 *= 1000; + s2 /= (299000 + (record->lastRecordTime - record->lastTimeInQueue)); + + p[1] += s1; + p[2] += s2; + } + + for (i = 0; i < MAX_TFACC_CNT + 3; i++) { + __put_user(p[i], pp + i); + } + return 0; +} + +/* pids using this driver, TODO use a struct to collect process info */ +struct mutex pid_mutex; +#define MAXPINLIST 64 +struct tf_app_info app_infos[MAXPINLIST]; + +void push_pid(void) { + int pid = current->pid; + int i = 0; + + if (efuse) { + return; + } + mutex_lock(&pid_mutex); + for (i = 0; i < MAXPINLIST; ++i) { + if (app_infos[i].pid == pid) { + mutex_unlock(&pid_mutex); + return; + } + } + for (i = 0; i < MAXPINLIST; ++i) { + if (app_infos[i].pid == -1) { + app_infos[i].pid = pid; + app_infos[i].tgid = current->tgid; + mutex_unlock(&pid_mutex); + return; + } + } + mutex_unlock(&pid_mutex); + return; +} + +void pop_pid(void) { + int i = 0; + int pid = current->pid; + if (efuse) { + return; + } + + mutex_lock(&pid_mutex); + for (i = 0; i < MAXPINLIST; ++i) { + if (app_infos[i].pid == pid) { + app_infos[i].pid = -1; + app_infos[i].tgid = -1; + } + } + mutex_unlock(&pid_mutex); + return; +} + +void pop_tgid(void) { + int i = 0; + if (efuse) { + return; + } + + mutex_lock(&pid_mutex); + for (i = 0; i < MAXPINLIST; ++i) { + if (app_infos[i].tgid == current->tgid) { + app_infos[i].pid = -1; + app_infos[i].tgid = -1; + } + } + mutex_unlock(&pid_mutex); + return; +} + +void get_pids(int* p) { + int offset = 0; + if (efuse) { + return; + } + + mutex_lock(&pid_mutex); + for (offset = 0; offset < MAXPINLIST; ++offset) { + if (app_infos[offset].pid >= 0) { + __put_user(app_infos[offset].pid, p); + p++; + } + } + __put_user(-1, p); + + mutex_unlock(&pid_mutex); + return; +} + +static void init_pids(void) { + // init pids + int i = 0; + + if (efuse) { + return; + } + + for (i = 0; i < MAXPINLIST; ++i) { + app_infos[i].pid = -1; + app_infos[i].tgid = -1; + } + return; +} + +static struct tf_device * tf_create_and_init_device(int device_id_counter) { + int retval; + struct tf_device * dev; + int c; + + if (efuse) { + return dev; + } + + DPRINTK("ENTER\n"); + + /* dev zeroed in alloc_etherdev */ + if (!(dev = (struct tf_device *) kzalloc(sizeof(struct tf_device), GFP_KERNEL))) { + DPRINTK("failed to alloc tf_device\n"); + retval = -ENOMEM; + goto fail_alloc_device; + } + + spin_lock_init(&dev->lock); + dev->isBusy = 0; + // dev->holdAppLockPid = -1; + for (c = 0; c < MAX_TFACC_CNT; ++c) { + dev->holdTFACCPid[c] = -1; + dev->holdTFACCTgid[c] = -1; + } + DPRINTK("dev tfacc inited\n"); + + DPRINTK("isBusy = %d\n", dev->isBusy); + tf_dev = dev; + dev->mmap_id_counter = 1; + + for (c = 0; c < chips; c++) { + int i; + unsigned long long gap = chipGap * c; + unsigned int TFACC_BASE[TFACC_REG_CNT] = {TFACC0_BASE, TFACC1_BASE, TFACC2_BASE, TFACC3_BASE, + TFACCLITE0_BASE, TFACCLITE1_BASE, TFACCLITE2_BASE, TFACCLITE3_BASE}; + unsigned int TFACC_CACHE_BASE[TFACC_REG_CNT] = { + TFACC0_CACHE_BASE, TFACC1_CACHE_BASE, TFACC2_CACHE_BASE, TFACC3_CACHE_BASE, + TFACCLITE0_CACHE_BASE, TFACCLITE1_CACHE_BASE, TFACCLITE2_CACHE_BASE, TFACCLITE3_CACHE_BASE + }; + for (i = 0; i < TFACC_REG_CNT; i++) { + unsigned long long base = gap + TFACC_BASE[i]; + int index = i + c * TFACC_REG_CNT; + dev->ioreg[index] = ioremap(base, DEVICE_IO_LENGTH); + if (dev->ioreg[index] == NULL || (unsigned long long)dev->ioreg[index] == 0xFFFFFFFF) { + DPRINTK("failed to map io reg!\n"); + goto fail_remap; + } + DPRINTK("version: 0x%x\n", *(volatile unsigned int *)(dev->ioreg[index])); + dev->reg_buf[index].phy_addr = base; + dev->reg_buf[index].kernel_addr = dev->ioreg[index]; + dev->reg_buf[index].len = DEVICE_IO_LENGTH; + dev->reg_buf[index].mmap_id = (index == 0 ? 0 : REG2ID + (index - 1)); + + base = gap + TFACC_CACHE_BASE[i]; + dev->ioreg_cache[index] = ioremap(base, DEVICE_IO_LENGTH); + if (dev->ioreg_cache[index] == NULL || (unsigned long long)dev->ioreg_cache[index] == 0xFFFFFFFF) { + DPRINTK("failed to map io reg_cache!\n"); + goto fail_remap; + } + dev->cache_reg_buf[index].phy_addr = base; + dev->cache_reg_buf[index].kernel_addr = dev->ioreg_cache[index]; + dev->cache_reg_buf[index].len = DEVICE_IO_LENGTH; + dev->cache_reg_buf[index].mmap_id = CACHEREGID + index; + } + } +/* + dev->cbuf.phy_addr = 0xF4400000; + dev->cbuf.kernel_addr = ioremap(0xF4400000, 0x200000); + dev->cbuf.len = 0x200000; + dev->cbuf.mmap_id = CBUF; +*/ + dev->cbuf.phy_addr = reserveDDRBlocks[15].startPos; + dev->cbuf.len = 256 * 1024 * 1024; + dev->cbuf.kernel_addr = ioremap(dev->cbuf.phy_addr, dev->cbuf.len); + dev->cbuf.mmap_id = CBUF; + + DPRINTK("EXIT, succeed\n"); + return dev; + + fail_remap: + kfree(dev); + dev = NULL; + + fail_alloc_device: + DPRINTK("EXIT, failed with code %d\n", retval); + return NULL; +} + +static void tf_remove_device_buf(struct tf_device * dev) { + if (efuse) { + return; + } + + DPRINTK("ENTER\n"); + DPRINTK("EXIT, succeed\n"); +} + +static int tf_create_and_init_cdev(struct tf_device * dev, int device_id) { + dev_t chrdev; + int retval; + + if (efuse) { + return -1; + } + + assert(dev != NULL); + + // register a char device + dev->minor = device_id; + if ((retval = alloc_chrdev_region(&chrdev, dev->minor, 1, "thinkforce")) < 0) { + DPRINTK("failed to alloc chrdev\n"); + goto origin; + } + + dev->major = MAJOR(chrdev); + DPRINTK("Major: %d, Minor:%d\n", dev->major, dev->minor); + dev->device = device_create(thinkforce_class, NULL, chrdev, NULL, "thinkforce" "%d", dev->minor); + if (!dev->device) { + DPRINTK("failed to create cdev\n"); + goto after_alloc; + } + + cdev_init(&dev->cdev, &tf_device_ops); + dev->cdev.owner = THIS_MODULE; + if ((retval = cdev_add(&dev->cdev, chrdev, 1))) { + DPRINTK("failed to add cdev %d\n", device_id); + goto after_create; + } + dev_set_drvdata(dev->device, dev); + +/* + DPRINTK("dev->device->dma_mem: 0x%p\n", dev->device->dma_mem); +*/ + DPRINTK("EXIT, succeed\n"); + return 0; + + after_create: + device_destroy(thinkforce_class, chrdev); + + after_alloc: + unregister_chrdev_region(chrdev, 1); + + origin: + DPRINTK("EXIT, failed with code %d\n", retval); + + return retval; +} + +static void tf_remove_cdev(struct tf_device *dev) { + dev_t chrdev; + if (efuse) { + return; + } +#if 0 + volatile unsigned int *cache0_apb = ioremap(TFACC0_CACHE_BASE, DEVICE_IO_LENGTH); + int i; + for (i = 0; i < 64; i++) { + DPRINTK("cache0_apb[0x%x] = 0x%x\n", 0x100 + i * 4, cache0_apb[0x40 + i]); + } + iounmap(cache0_apb); + + volatile unsigned int *cache1_apb = ioremap(TFACC1_CACHE_BASE, DEVICE_IO_LENGTH); + for (i = 0; i < 64; i++) { + DPRINTK("cache1_apb[0x%x] = 0x%x\n", 0x100 + i * 4, cache1_apb[0x40 + i]); + } + iounmap(cache1_apb); + + volatile unsigned int *reg = ioremap(TFACC0_CACHE_BASE, DEVICE_IO_LENGTH); + for (i = 0; i < 128; i++) { + DPRINTK("reg[0x%x] = 0x%x\n", i * 4, reg[i]); + } + + DPRINTK("reg[0x004] = 0x%x\n", reg[0x004 / 4]); + DPRINTK("reg[0x198] = 0x%x\n", reg[0x198 / 4]); + DPRINTK("reg[0x19C] = 0x%x\n", reg[0x19C / 4]); + DPRINTK("reg[0x1A0] = 0x%x\n", reg[0x1A0 / 4]); + DPRINTK("reg[0x1A4] = 0x%x\n", reg[0x1A4 / 4]); + DPRINTK("reg[0x1A8] = 0x%x\n", reg[0x1A8 / 4]); + DPRINTK("reg[0x1AC] = 0x%x\n", reg[0x1AC / 4]); + DPRINTK("reg[0x1B0] = 0x%x\n", reg[0x1B0 / 4]); + DPRINTK("reg[0x1B4] = 0x%x\n", reg[0x1B4 / 4]); + DPRINTK("reg[0x1B8] = 0x%x\n", reg[0x1B8 / 4]); + DPRINTK("reg[0x1BC] = 0x%x\n", reg[0x1BC / 4]); + DPRINTK("reg[0x1C0] = 0x%x\n", reg[0x1C0 / 4]); + DPRINTK("reg[0x1C4] = 0x%x\n", reg[0x1C4 / 4]); +#endif + DPRINTK("ENTER\n"); + + //remove cdev + chrdev = MKDEV(dev->major, dev->minor); + cdev_del(&dev->cdev); + device_destroy(thinkforce_class, chrdev); + unregister_chrdev_region(chrdev, 1); + + DPRINTK("EXIT, succeed\n"); +} + +void tfacc_full_swrst(unsigned long long, unsigned long long); +void tfacc_lite_swrst(unsigned long long); +void tfacc_enable_one_cache(unsigned long long); + +static int tf_release(struct inode *inode, struct file *filp) { + struct tf_device *dev = container_of(inode->i_cdev, struct tf_device, cdev); + int i; + unsigned long long gap; + + if (efuse) { + return -1; + } + + DPRINTK("release ENTER\n"); + spin_lock(&dev->lock); + dev->isBusy--; + DPRINTK("isBusy = %d\n", dev->isBusy); + + for (i = 0; i < reserveDDRBlcokCnt; i++) { + if (reserveDDRBlocks[i].tgid == current->tgid) { + reserveDDRBlocks[i].isMalloc = false; + reserveDDRBlocks[i].offset = 0; + } + } + + if (dev->isBusy == 0) { + for (i = 0; i < reserveDDRBlcokCnt; i++) { + reserveDDRBlocks[i].isMalloc = false; + reserveDDRBlocks[i].offset = 0; + } + + tf_remove_device_buf(dev); + dev->mmap_id_counter = 1; + } + + // 进程退出的时候,把整个线程组的锁都释放掉 + // if (current->pid == current->tgid) { + tf_app_release_tgid_lock(dev); + pop_tgid(); + // } else { + // tf_app_try_unlock(dev, NULL); + // pop_pid(); + // } + if (dev->isBusy == 0) + { + int c; + for (c = chips-1; c>=0; c--) { + gap = chipGap * c; + //tfacc_full_swrst(gap + TFACC0_BASE, gap + TFACC1_BASE); + //tfacc_full_swrst(gap + TFACC2_BASE, gap + TFACC3_BASE); + tfacc_lite_swrst(gap + TFACCLITE0_BASE); + tfacc_lite_swrst(gap + TFACCLITE1_BASE); + tfacc_lite_swrst(gap + TFACCLITE2_BASE); + tfacc_lite_swrst(gap + TFACCLITE3_BASE); + + tfacc_enable_one_cache(TFACC0_CACHE_BASE); + tfacc_enable_one_cache(TFACC1_CACHE_BASE); + tfacc_enable_one_cache(TFACC2_CACHE_BASE); + tfacc_enable_one_cache(TFACC3_CACHE_BASE); + tfacc_enable_one_cache(TFACCLITE0_CACHE_BASE); + tfacc_enable_one_cache(TFACCLITE1_CACHE_BASE); + tfacc_enable_one_cache(TFACCLITE2_CACHE_BASE); + tfacc_enable_one_cache(TFACCLITE3_CACHE_BASE); + + } + } + + spin_unlock(&dev->lock); + + DPRINTK("EXIT, succeed\n"); + return 0; +} + +static int tf_mmap(struct file *filp, struct vm_area_struct *vma) { + struct tf_device *dev = (struct tf_device *)filp->private_data; + int size = vma->vm_end - vma->vm_start; + int mmap_id = vma->vm_pgoff; + dma_addr_t phy_addr = -1; + int max_size = 0; + struct kbuf * kbuf_p; + void *kernel_addr; + + if (efuse) { + return -1; + } + + DPRINTK("ENTER\n"); + DPRINTK("mapping typeid: %d\n", mmap_id); +/* + if (!versionIsRight) { + DPRINTK("SDK's version is wrong.\n"); + return -EINVAL; + } +*/ + if (mmap_id == SRAM1ID) { + //sram1 + DPRINTK("prepare mapping sram1\n"); + max_size = dev->sram1_buf.len; + phy_addr = dev->sram1_buf.phy_addr; + kernel_addr = dev->sram1_buf.kernel_addr; + } else if (mmap_id == SRAM2ID) { + //sram2 + DPRINTK("prepare mapping sram2\n"); + max_size = dev->sram2_buf.len; + phy_addr = dev->sram2_buf.phy_addr; + kernel_addr = dev->sram2_buf.kernel_addr; + } else if (mmap_id == 0) { + //reg + DPRINTK("prepare mapping reg\n"); + max_size = dev->reg_buf[0].len; + phy_addr = dev->reg_buf[0].phy_addr; + kernel_addr = dev->reg_buf[0].kernel_addr; + } else if (mmap_id >= REG2ID && mmap_id < REG2ID + TFACC_REG_CNT * chips - 1) { + DPRINTK("prepare mapping reg2\n"); + max_size = dev->reg_buf[mmap_id - REG2ID + 1].len; + phy_addr = dev->reg_buf[mmap_id - REG2ID + 1].phy_addr; + kernel_addr = dev->reg_buf[mmap_id - REG2ID + 1].kernel_addr; + } else if (mmap_id >= CACHEREGID && mmap_id < CACHEREGID + TFACC_REG_CNT * chips) { + DPRINTK("prepare mapping cache reg\n"); + max_size = dev->cache_reg_buf[mmap_id - CACHEREGID].len; + phy_addr = dev->cache_reg_buf[mmap_id - CACHEREGID].phy_addr; + kernel_addr = dev->cache_reg_buf[mmap_id - CACHEREGID].kernel_addr; + } else if (mmap_id == REGMAINID) { + DPRINTK("prepare mapping regMain\n"); + max_size = dev->regMain_buf.len; + phy_addr = dev->regMain_buf.phy_addr; + kernel_addr = dev->regMain_buf.kernel_addr; + } else if (mmap_id < dev->mmap_id_counter) { + DPRINTK("prepare mapping buf %d\n", mmap_id); + hash_for_each_possible(dev->buf_list, kbuf_p, list, mmap_id & TF_BUF_HASHMASK) { + if (kbuf_p->mmap_id == mmap_id) { + max_size = kbuf_p->len; + phy_addr = kbuf_p->phy_addr; + kernel_addr = kbuf_p->kernel_addr; + break; + } + } + } else if (mmap_id == CBUF) { + max_size = dev->cbuf.len; + phy_addr = dev->cbuf.phy_addr; + kernel_addr = dev->cbuf.kernel_addr; + } else { + DPRINTK("invalid offset\n"); + return -EINVAL; + } + + DPRINTK("size: %d, max_size: %d\n", size, max_size); + + if (size > max_size) { + DPRINTK("require mmap size too large\n"); + return -EINVAL; + } + + DPRINTK("mmap phy_addr: 0x%llx, size: %d\n", phy_addr, size); + vma->vm_flags |= VM_LOCKED; //disable swap + + DPRINTK("PAGE_SHIFT: %d\n", PAGE_SHIFT); + if (!mmap_id || (mmap_id >= REG2ID && mmap_id < REG2ID + TFACC_REG_CNT * chips - 1) || + (mmap_id >= CACHEREGID && mmap_id < CACHEREGID + TFACC_REG_CNT * chips)) { + int r; + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); + r = remap_pfn_range(vma, vma->vm_start, phy_addr >> PAGE_SHIFT, size, vma->vm_page_prot); + if (r != 0) { + DPRINTK("remap page range failed: %d\n", r); + return -ENXIO; + } + } else { + int r; + vma->vm_pgoff = 0; + //DPRINTK("kernel_addr: 0x%p, phy_addr: 0x%p\n", kernel_addr, (void *)phy_addr); + if (isNextUncache == 1) { + //vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); + vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); + isNextUncache = 0; + } + + //vma->vm_page_prot = pgprot_cached(vma->vm_page_prot); + r = remap_pfn_range(vma, vma->vm_start, phy_addr >> PAGE_SHIFT, size, vma->vm_page_prot); + if (r < 0) { + DPRINTK("mmap coherent failed: %d\n", r); + return -ENXIO; + } + } + + DPRINTK("EXIT, succeed\n"); + return 0; +} + +void tfacc_full_clap(unsigned long long base) { + volatile unsigned int* clk = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + *(clk + 0x84) |= 0x3; + iounmap(clk); +} +void tfacc_full_unclap(unsigned long long base) { + volatile unsigned int* clk = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + *(clk + 0x84) &= ~0x3; + iounmap(clk); +} + +void tfacc_full_acp(unsigned long long base, int highAddr) { + volatile unsigned int *buf = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + DPRINTK("base = 0x%llx, highAddr = 0x%x\n", base, highAddr); + if (buf != NULL) { + unsigned int temp = buf[0x10 / 4]; + DPRINTK("prot = 0x%x\n", temp); + buf[0x10 / 4] = (buf[0x10 / 4] & (~(7 << 8))) | (2 << 8); + buf[0x10 / 4] = (buf[0x10 / 4] & (~(7 << 12))) | (2 << 12); + buf[0x10 / 4] = (buf[0x10 / 4] & (~(255 << 16))) | (highAddr << 16); // high addr + buf[0x10 / 4] = (buf[0x10 / 4] & (~(255 << 24))) | (highAddr << 24); // high addr + DPRINTK("prot = 0x%x\n", buf[0x10 / 4]); + + if (base == TFACC3_FULL_ACP_BASE) { + buf[0xc4 / 4] |= (0x3 << 2); + buf[0xc8 / 4] |= (0x7FFFF << 16); + } else { + buf[0x98 / 4] |= 3; + buf[0x9c / 4] |= 0x7FFFF; + } + + buf[0x90 / 4] |= (1 << 28) + (1 << 8) + (1 << 24) + (highAddr << 0) + (highAddr << 16); // (1 << 0) 和 (1 << 16)是高位地址 + buf[0x94 / 4] |= (1 << 28) + (1 << 8) + (1 << 24) + (highAddr << 0) + (highAddr << 16); // (1 << 0) 和 (1 << 16)是高位地址 + iounmap(buf); + } +} + +void tfacc_swrst_one_cache(unsigned long long base) { + volatile unsigned int *apb = ioremap(base, DEVICE_IO_LENGTH); + //unsigned int cache_num=0; + + if (efuse) { + return; + } + //volatile unsigned int *offset = apb + (cache_num * (1<<22) / sizeof(unsigned int)); + apb[0xe0 / 4] = 0x0; + apb[0xf8 / 4] = 0x0; + apb[0xfc / 4] = 0x0; + + iounmap(apb); +} +void tfacc_enable_one_cache(unsigned long long base) { + volatile unsigned int *apb = ioremap(base, DEVICE_IO_LENGTH); + int data = 0; + if (efuse) { + return; + } + + apb[0x50 / 4] = 1; + __asm__ __volatile__ ("dmb sy"); + while (data != 1) { + data = apb[0x54 / 4]; + } + apb[0x04 / 4] = apb[0x04 / 4] | (1 << 6); + + + iounmap(apb); +} +void tfacc_enable_one_uncache(unsigned long long base) { + volatile unsigned int *apb = ioremap(base, DEVICE_IO_LENGTH); + if (efuse) { + return; + } + + apb[0x04 / 4] = apb[0x04 / 4] | (1 << 6); + apb[0x10 / 4] = 0x100; // 31:0 + apb[0x14 / 4] = 0x0; // 31:0 + apb[0x30 / 4] = 0x0; // 63:32 + apb[0x34 / 4] = 0x0; // 63:32 + apb[0x20 / 4] = 0x100; // 31:0 + apb[0x24 / 4] = 0x0; // 31:0 + apb[0x40 / 4] = 0x0; // 63:32 + apb[0x44 / 4] = 0x0; // 63:32 + + apb[0x18 / 4] = 0x0; // 31:0 + apb[0x1C / 4] = 0xffffffff; // 31:0 + apb[0x38 / 4] = 0x0; // 63:32 + apb[0x3C / 4] = 0xffffffff; // 63:32 + apb[0x28 / 4] = 0x0; // 31:0 + apb[0x2C / 4] = 0xffffffff; // 31:0 + apb[0x48 / 4] = 0x0; // 63:32 + apb[0x4C / 4] = 0xffffffff; // 63:32 + + + iounmap(apb); +} + +void tfacc_full_enable_interleave(unsigned long long base) { + volatile unsigned int *apb = ioremap(base, DEVICE_IO_LENGTH); + if (efuse) { + return; + } + apb[0x04 / 4] = apb[0x04 / 4] | (1 << 12); + DPRINTK("interleave = 0x%x\n", apb[0x04 / 4]); + iounmap(apb); +} + +void tfacc_lite_swrst(unsigned long long BASE) { + unsigned int *reg = ioremap(BASE, DEVICE_IO_LENGTH); + if (efuse) { + return; + } + reg[0xff] = 0xc012 | (0x1<<31) | (0x1<<5); + iounmap(reg); +} +void tfacc_full_swrst(unsigned long long BASE, unsigned long long BASE1) { + unsigned int *reg = ioremap(BASE, DEVICE_IO_LENGTH); + unsigned int *reg1 = ioremap(BASE1, DEVICE_IO_LENGTH); + if (efuse) { + return; + } + + reg1[0xff] = (0x1<<5); + reg1[0xfa]= (0x100); + reg[0xfa] = (0x100); + reg[0xff] = 0xc012 | (0x1 << 31) | (0x1<<5); + __asm__ __volatile__ ("dmb sy"); + + + iounmap(reg); + iounmap(reg1); +} + +void tfacc_lite_enable_cache(unsigned long long BASE, unsigned long long CACHE_BASE) { + unsigned int *reg = ioremap(BASE, DEVICE_IO_LENGTH); + if (efuse) { + return; + } + + if (!cacheInit) { + tfacc_swrst_one_cache(CACHE_BASE); + reg[0xfa] = 0x1; + reg[0xff] = 0xc012 | (0x1 << 31) | (0x1<<5); + ++cacheInitCnt; + if (cacheInitCnt == 6*chips) + cacheInit = 1; + } + tfacc_enable_one_cache(CACHE_BASE); + iounmap(reg); +} + +void tfacc_full_enable(unsigned long long base); +void tfacc_full_disable(unsigned long long base); + +void tfacc_full_enable_cache(unsigned long long BASE, unsigned long long BASE1, unsigned long long CACHE0_BASE, unsigned long long CACHE1_BASE, + unsigned long long CLKBASE, unsigned long long CFGBASE) { + unsigned int *reg = ioremap(BASE, DEVICE_IO_LENGTH); + unsigned int *reg1 = ioremap(BASE1, DEVICE_IO_LENGTH); + unsigned int *cfgreg = ioremap(CFGBASE, TFACC_CLK_LENGTH); + //unsigned int *clkreg = ioremap(CLKBASE, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + +#if 1 + if (!cacheInit) { + +// tfacc_full_clap(CLKBASE); + tfacc_swrst_one_cache(CACHE1_BASE); +// tfacc_full_unclap(CLKBASE); + +// reg[0xfa] |= 0x1; +// reg[0xff] = 0xc012 + (0x1 << 31); +// __asm__ __volatile__ ("dmb sy"); +// reg[0xfa] = 0; +// reg[0xff] = 0xc012; + +// tfacc_full_clap(CLKBASE); +// tfacc_full_unclap(CLKBASE); + tfacc_swrst_one_cache(CACHE0_BASE); + + //cfgreg[0x28/4] = 0x0; + //cfgreg[0x20/4] = 0x1; + + //Reset Mau and set reset with Cache + reg1[0xfa]|= (0x1|0x100); + reg[0xfa] |= (0x1|0x100); + + //Manually reset bufaptr + reg1[0xff] = (0x1<<5); + reg[0xff] = (0x1<<5); + + reg1[0xff] |= (0x1<<5); + reg1[0xff] &= ~(0x1<<5); + + reg[0xff] = 0xc012 | (0x1 << 31) | (0x1<<5); + __asm__ __volatile__ ("dmb sy"); + + reg[0xfa] = 0; + reg1[0xfa] = 0; + + //if ((cfgreg[0x2c/4]&0x7)!=0) { + // DPRINTK("glitch at reset\n"); + //} + //cfgreg[0x28/4] = 0xffffffff; + //cfgreg[0x20/4] = 0x0; + +// tfacc_full_disable(CLKBASE); +// tfacc_full_enable(CLKBASE); + + + ++cacheInitCnt; + if (cacheInitCnt == 6*chips) + cacheInit = 1; + + } + iounmap(reg); + iounmap(reg1); + iounmap(cfgreg); + //iounmap(clkreg); + tfacc_enable_one_cache(CACHE0_BASE); + tfacc_enable_one_cache(CACHE1_BASE); +#else + iounmap(reg); + iounmap(reg1); + ++cacheInitCnt; + tfacc_enable_one_cache(CACHE0_BASE); + tfacc_enable_one_cache(CACHE1_BASE); +#endif + + + //tfacc_full_enable_interleave(CACHE0_BASE); + //tfacc_full_enable_interleave(CACHE1_BASE); +} + +void tfacc_full_enable(unsigned long long base) { + unsigned int pllstatus; + volatile unsigned int *clk = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + + if (clk != NULL) { + *(clk + 0x24) = 0; // unlock + if (!chipInit) { + DPRINTK("Reset tfacc%d pll\n", chipInitCnt); + *(clk + 0x21) = 1; + *(clk + 0x22) &= ~(1<<24); + udelay(400); + *(clk + 0x22) |= (1<<24); + udelay(100); + pllstatus = *(clk+0xf0); + while ((pllstatus&0x3) != 0x3) + pllstatus = *(clk+0xf0); + chipInitCnt++; + if (chipInitCnt == 2*chips) + chipInit = 1; + } + *(clk + 0x86) |= 6; + *(clk + 0x82) |= 2; + *(clk + 0x84) &= ~0x3; + iounmap(clk); + } +} + +void tfacc_full_checkrstcond(void) { + unsigned int* periscfg = ioremap(TFACC0_FULL_ACP_BASE, TFACC_CLK_LENGTH); + int retval; + if (efuse) { + return; + } + if (needReset == 1) periscfg[0x34/4] = 1; + retval = periscfg[0x34/4]; + DPRINTK("Flag = %llx\n", (unsigned long long)retval); + if (retval == 1) { + periscfg[0x34/4] = 2; + skipFullSwRst = 2; + } + iounmap(periscfg); +} + +void tfacc_full_disable(unsigned long long base) { + volatile unsigned int *clk = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + DPRINTK("ioremap %llx\n", base); + DPRINTK("ioremap %llx finish\n", base); + + if (clk != NULL) { + *(clk + 0x24) = 0; // unlock + *(clk + 0x84) |= 0x3; + if (skipFullSwRst != 2) { + *(clk + 0x82) &= 0xFFFFFFFD; + udelay(1); + *(clk + 0x82) |= 2; + udelay(10); + } else { + DPRINTK("Skip HW Reset\n"); + } + *(clk + 0x86) &= 0xFFFFFFF9; + + //*(clk + 0x22) &= ~(1<<24); + iounmap(clk); + } +} + +void tfacc_lite_enable(unsigned long long base) { + volatile unsigned int *clk = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + if (clk != NULL) { + *(clk + 0x24) = 0; + *(clk + 0x86) |= 0x3C0000; + *(clk + 0x82) |= 0x600; + *(clk + 0x84) &= ~(0x3<<9); + iounmap(clk); + } +} + +void tfacc_lite_disable(unsigned long long base) { + volatile unsigned int *clk = ioremap(base, TFACC_CLK_LENGTH); + if (efuse) { + return; + } + if (clk != NULL) { + *(clk + 0x24) = 0; + *(clk + 0x84) |= (0x3<<9); + if (skipFullSwRst !=2) { + *(clk + 0x82) &= 0xFFFFF9FF; + } else { + DPRINTK("Skip HW Reset\n"); + } + *(clk + 0x86) &= 0xFFC3FFFF; + iounmap(clk); + } +} +static void tf_ioctl_clear(struct tf_device * dev) { + if (efuse) { + return; + } + DPRINTK("ENTER\n"); + + tf_remove_device_buf(dev); + dev->mmap_id_counter = 1; + + DPRINTK("EXIT, succeed\n"); +} + +static void tf_ioctl_reset(struct tf_device * dev) { + if (efuse) { + return; + } + DPRINTK("ENTER\n"); + + hardware_tfacc_reset(); + + tfacc_full_enable(TFACC_BL_CLK_BASE); + tfacc_full_enable(TFACC_BR_CLK_BASE); + tfacc_lite_enable(TFACC_L_CLK_BASE); + tfacc_lite_enable(TFACC_R_CLK_BASE); + + tfacc_full_acp(TFACC0_FULL_ACP_BASE, ddrStart >> 32); + tfacc_full_acp(TFACC1_FULL_ACP_BASE, ddrStart >> 32); + tfacc_full_acp(TFACC2_FULL_ACP_BASE, ddrStart >> 32); + tfacc_full_acp(TFACC3_FULL_ACP_BASE, ddrStart >> 32); + + tfacc_full_enable_cache(TFACC0_BASE, TFACC1_BASE, TFACC0_CACHE_BASE, TFACC1_CACHE_BASE, TFACC_BL_CLK_BASE, TFACC0_FULL_ACP_BASE); + tfacc_full_enable_cache(TFACC2_BASE, TFACC3_BASE, TFACC2_CACHE_BASE, TFACC3_CACHE_BASE, TFACC_BR_CLK_BASE, TFACC1_FULL_ACP_BASE); + + tfacc_lite_enable_cache(TFACCLITE0_BASE, TFACCLITE0_CACHE_BASE); + tfacc_lite_enable_cache(TFACCLITE1_BASE, TFACCLITE1_CACHE_BASE); + tfacc_lite_enable_cache(TFACCLITE2_BASE, TFACCLITE2_CACHE_BASE); + tfacc_lite_enable_cache(TFACCLITE3_BASE, TFACCLITE3_CACHE_BASE); + + DPRINTK("EXIT, succeed\n"); +} + + +static int tf_ioctl_check_version(struct tf_device * dev, void * arg) { + struct tf_version *io_param; + int retval; + int minVersion = 1840; + if (efuse) { + return -1; + } + + DPRINTK("ENTER\n"); + if (!(io_param = (struct tf_version*) kmalloc(sizeof(struct tf_version), GFP_KERNEL))) { + DPRINTK("fail to alloc io_param\n"); + retval = -ENOMEM; + goto origin; + } + if ((retval = copy_from_user(io_param, (void *) arg, sizeof(struct tf_version)))) { + DPRINTK("fail to copy io_param from user\n"); + goto after_alloc_io_param; + } + + //check version + if (io_param->sdk_version >= minVersion) { + versionIsRight = true; + io_param->kernel_version = 20190605; + } else { + io_param->kernel_version = -1; + io_param->excepted_sdk_version = minVersion; + } + + if ((retval = copy_to_user((void *) arg, io_param, sizeof(struct tf_version)))) { + DPRINTK("fail to copy io_param to user\n"); + goto after_alloc_io_param; + } + + kfree(io_param); + DPRINTK("EXIT, succeed\n"); + return 0; + + after_alloc_io_param: + kfree(io_param); + + origin: + DPRINTK("EXIT, failed with code %d\n", retval); + return retval; +} + +static int tf_init_kbuf(struct tf_device * dev,struct kbuf * kbuf_p) { + bool mallocOk; + int i; + if (efuse) { + return -1; + } + + DPRINTK("ENTER\n"); + + dma_set_mask(dev->device, DMA_BIT_MASK(32)); + dma_set_coherent_mask(dev->device, DMA_BIT_MASK(32)); + + mallocOk = false; + + for (i = 0; i < reserveDDRBlcokCnt; i++) { + if (reserveDDRBlocks[i].chipId == dev->useDDR2 && + reserveDDRBlocks[i].offset + kbuf_p->len <= reserveDDRBlocks[i].len) { + if (!reserveDDRBlocks[i].isMalloc || reserveDDRBlocks[i].tgid == current->tgid) { + kbuf_p->phy_addr = reserveDDRBlocks[i].startPos + reserveDDRBlocks[i].offset; + reserveDDRBlocks[i].offset += kbuf_p->len; + reserveDDRBlocks[i].isMalloc = true; + reserveDDRBlocks[i].tgid = current->tgid; + + kbuf_p->mmap_id = dev->mmap_id_counter++; + if (dev->mmap_id_counter == 9000) { + //中间这一段编号保留,另做他用 + dev->mmap_id_counter = 11000; + } + + mallocOk = true; + break; + } + } + } + + if (!mallocOk) { + kbuf_p->phy_addr = 0x0; + kbuf_p->mmap_id = -1; + } + + DPRINTK("EXIT, succeed\n"); + return 0; +} + +static struct kbuf * tf_create_and_init_kbuf(struct tf_device * dev, int len) { + int retval; + struct kbuf * kbuf_p; + if (efuse) { + return (struct kbuf *)-1; + } + + DPRINTK("ENTER, succeed\n"); + if (!(kbuf_p = kzalloc(sizeof(struct kbuf), GFP_KERNEL))) { + retval = -ENOMEM; + goto origin; + } + kbuf_p->len = len; + DPRINTK("kbuf_p->len: 0x%08x\n", len); + if ((retval = tf_init_kbuf(dev, kbuf_p))) { + DPRINTK("failed to init kbuf\n"); + goto after_alloc_kbuf; + } + DPRINTK("buf phy_addr: %llx, kernel_addr: %p, len: 0x%08x, mmap_id: 0x%08x\n", + kbuf_p->phy_addr, kbuf_p->kernel_addr, kbuf_p->len, kbuf_p->mmap_id); + DPRINTK("EXIT, succeed\n"); + return kbuf_p; + + after_alloc_kbuf: + kfree(kbuf_p); + origin: + DPRINTK("EXIT, failed with code %d\n", retval); + return NULL; +} + + +static int tf_ioctl_create(struct tf_device * dev, void * arg) { + struct tf_buf_io_param *io_param; + struct kbuf * kbuf_p; + int retval; + if (efuse) { + return -1; + } + + DPRINTK("ENTER\n"); + if (!(io_param = (struct tf_buf_io_param*) kmalloc(sizeof(struct tf_buf_io_param), GFP_KERNEL))) { + DPRINTK("fail to alloc io_param\n"); + retval = -ENOMEM; + goto origin; + } + if ((retval = copy_from_user(io_param, (void *) arg, sizeof(struct tf_buf_io_param)))) { + DPRINTK("fail to copy io_param from user\n"); + goto after_alloc_io_param; + } + + dev->useDDR2 = io_param->useDDR2; + + //create kbuf + if (!(kbuf_p = tf_create_and_init_kbuf(dev, io_param->len))) { + DPRINTK("fail to create_and_init kbuf\n"); + retval = -ENOMEM; + goto after_alloc_io_param; + } + + if (io_param->uncache) { + isNextUncache = 1; + } + + //add to hlist + hash_add(dev->buf_list, &kbuf_p->list, + kbuf_p->mmap_id & TF_BUF_HASHMASK); + //copy to user + io_param->phy_addr = kbuf_p->phy_addr; + io_param->mmap_id = kbuf_p->mmap_id; + if ((retval = copy_to_user((void *) arg, io_param, sizeof(struct tf_buf_io_param)))) { + DPRINTK("fail to copy io_param to user\n"); + goto after_add_to_hlist; + } + + kfree(io_param); + DPRINTK("EXIT, succeed\n"); + return 0; + + after_add_to_hlist: + hash_del(&kbuf_p->list); +#ifdef ZYNQMP +#elif defined(USE_DMA) + dma_free_coherent(dev->device, kbuf_p->len, kbuf_p->kernel_addr, kbuf_p->phy_addr); +#else + free_pages((unsigned long)kbuf_p->kernel_addr, get_order(kbuf_p->len)); +#endif + kfree(kbuf_p); + after_alloc_io_param: + kfree(io_param); + origin: + DPRINTK("EXIT, failed with code %d\n", retval); + return retval; +} + +static int tf_ioctl_get_app_infos(struct tf_device* dev, int* p) { + DPRINTK("GET PID LIST\n"); + + get_pids(p); + return 0; +} + +static long tf_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { + struct tf_device *dev = (struct tf_device *) filp->private_data; + long retval; + if (efuse) { + return -1; + } + + // DPRINTK("ENTER: %u, type: %d NR: %d, %u \n", cmd, _IOC_TYPE(cmd), _IOC_NR(cmd), TF_READ_PIDS); + if (_IOC_TYPE(cmd) != TF_MAGIC) return -EINVAL; + if (_IOC_NR(cmd) >= TF_MAX_NR) return -EINVAL; + switch (cmd) { + case TF_VERSION_CHECK: + retval = tf_ioctl_check_version(dev, (void*) arg); + break; + case TF_BUF_RESET: + tf_ioctl_reset(dev); + retval = 0; + break; + case TF_BUF_CLEAR: + tf_ioctl_clear(dev); + retval = 0; + break; + case TF_BUF_CREATE: + retval = tf_ioctl_create(dev, (void *) arg); + break; + case TF_READ_PIDS: + retval = tf_ioctl_get_app_infos(dev, (int*) arg); + break; + + case TF_APP_LOCK: + retval = tf_app_try_lock(dev, (int*) arg); + break; + + case TF_APP_UNLOCK: + retval = tf_app_try_unlock(dev, (int*) arg); + break; + + case TF_READ_APP_LOCK_RECORD: + retval = tf_get_app_lock_records((struct tf_lock_record*) arg); + break; + + case TF_READ_APP_USAGE: + retval = tf_get_app_usage((int*)arg); + break; + + case TF_READ_RESERVE_MEM_RECORD: + retval = tf_get_reserve_ddr_blocks((struct ReserveDDRBlock*) arg); + break; + default: + DPRINTK("error cmd\n"); + retval = -EINVAL; + break; + } + + if (!retval) { + // DPRINTK("EXIT, succeed\n"); + return 0; + } + DPRINTK("EXIT, failed with code %ld\n", retval); + DPRINTK("FAIL CMD: %u, type: %d NR: %d \n", cmd, _IOC_TYPE(cmd), _IOC_NR(cmd)); + return retval; +} + +void tf_remove(void) { + if (efuse) { + return; + } + DPRINTK("ENTER\n"); + + tf_remove_cdev(tf_dev); + tf_remove_device_buf(tf_dev); + dev_set_drvdata(tf_dev->device, NULL); + kfree(tf_dev); + + DPRINTK("EXIT, succeed\n"); +} + +//reserve reserveSize M bytes. +//normal: 256 +//1MFace: 512 +//5MFace: 1536 +//10MFace: 2560 +long long reserveSize = 0; + +static ssize_t show_kernel_version(struct device *dev, + struct device_attribute *attr, char *buf) +{ + int ret; + if (efuse) { + return -1; + } + if (reserveSize == 256) { + ret = sprintf(buf, "Normal\n"); + } else if (reserveSize == 512) { + ret = sprintf(buf, "1M Face\n"); + } else if (reserveSize == 800) { + ret = sprintf(buf, "3M Face\n"); + } else if (reserveSize == 1536) { + ret = sprintf(buf, "5M Face\n"); + } else if (reserveSize == 2560) { + ret = sprintf(buf, "10M Face\n"); + } else { + ret = sprintf(buf, "Unknown\n"); + } + + return ret; +} + +static ssize_t set_my_kernel(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (efuse) { + return -1; + } + return len; +} + +static DEVICE_ATTR(kernel_version, S_IWUSR|S_IRUSR, show_kernel_version, set_my_kernel); + + +struct file_operations mytest_ops={ + .owner = THIS_MODULE, +}; + +static int major; +//static struct class *cls; +//static struct class *profileCls; + +void output_tfacc_id(unsigned long long base) { + unsigned int *reg = ioremap(base, DEVICE_IO_LENGTH); + if (efuse) { + return; + } + if (reg) { + printk("version: 0x%08X\n", *reg); + printk("ID: 0x%08X\n", *(reg + 1)); + iounmap(reg); + } +} + +static void readSocketInfo(void) { + unsigned int isDualSocket, isDualDie; + unsigned int *configBase = ioremap(0xFE170000, 0x100000); + long long perChip, perBlock; + int c, i; + unsigned long long gap; + unsigned int *efuseAddr = ioremap(EFUSE_BASE, 0x100); + + if (efuseAddr[0] & 2) { + efuse = 1; + } + + // 读取chip信息 + isDualSocket = (*(volatile unsigned int *)(configBase + 0x30 / 4) & 0x40) >> 6; + isDualDie = *(volatile unsigned int *)(configBase + 0x3046C / 4) & 0x1; + iounmap(configBase); + + if (isDualSocket) chips = 4; + else if (isDualDie) chips = 2; + else chips = 1; + + if (chips == 2) { + chipGap = 0x8000000000LL; + } else if (chips == 4) { + chipGap = 0x4000000000LL; + } + + reserveDDRBlcokCnt = 0; + perChip = 0x100000000; + perBlock = 256 * 1024 * 1024; + + for (c = 0; c < chips; c++) { + for (i = 0; i < perChip / perBlock; i++) { + gap = chipGap * c; + reserveDDRBlocks[reserveDDRBlcokCnt].chipId = c; + reserveDDRBlocks[reserveDDRBlcokCnt].len = perBlock; + reserveDDRBlocks[reserveDDRBlcokCnt].isMalloc = false; + reserveDDRBlocks[reserveDDRBlcokCnt].offset = 0; + reserveDDRBlocks[reserveDDRBlcokCnt].startPos = ddrStart + gap + perBlock * i; + reserveDDRBlocks[reserveDDRBlcokCnt].tgid = -1; + + if (reserveDDRBlocks[reserveDDRBlcokCnt].startPos % 0x100000000 == 0) { + reserveDDRBlocks[reserveDDRBlcokCnt].startPos += 1 * 1024 * 1024; + reserveDDRBlocks[reserveDDRBlcokCnt].len -= 1 * 1024 * 1024; + } + reserveDDRBlcokCnt++; + } + } + + return; +} + +static int tf_open(struct inode *inode, struct file *filp) { + struct tf_device *dev = container_of(inode->i_cdev, struct tf_device, cdev); + if (efuse) { + return -1; + } + + DPRINTK("ENTER: pid: %d, tgid: %d\n", current->pid, current->tgid); + spin_lock(&dev->lock); + DPRINTK("isBusy = %d\n", dev->isBusy); + filp->private_data = dev; + dev->isBusy++; +#if 0 + if (dev->isBusy == 1) { + //if (chips == 1) { + // //hardware_tfacc_reset(); + //} + + tfacc_full_enable(TFACC_BL_CLK_BASE); + tfacc_full_enable(TFACC_BR_CLK_BASE); + tfacc_lite_enable(TFACC_L_CLK_BASE); + tfacc_lite_enable(TFACC_R_CLK_BASE); + + tfacc_full_acp(TFACC0_FULL_ACP_BASE, ddrStart >> 32); + tfacc_full_acp(TFACC1_FULL_ACP_BASE, ddrStart >> 32); + tfacc_full_acp(TFACC2_FULL_ACP_BASE, ddrStart >> 32); + tfacc_full_acp(TFACC3_FULL_ACP_BASE, ddrStart >> 32); + + tfacc_full_enable_cache(TFACC0_BASE, TFACC1_BASE, TFACC0_CACHE_BASE, TFACC1_CACHE_BASE, TFACC_BL_CLK_BASE); + tfacc_full_enable_cache(TFACC2_BASE, TFACC1_BASE, TFACC2_CACHE_BASE, TFACC3_CACHE_BASE, TFACC_BR_CLK_BASE); + + tfacc_lite_enable_cache(TFACCLITE0_BASE, TFACCLITE0_CACHE_BASE); + tfacc_lite_enable_cache(TFACCLITE1_BASE, TFACCLITE1_CACHE_BASE); + tfacc_lite_enable_cache(TFACCLITE2_BASE, TFACCLITE2_CACHE_BASE); + tfacc_lite_enable_cache(TFACCLITE3_BASE, TFACCLITE3_CACHE_BASE); + } +#endif + + push_pid(); + DPRINTK("current pid: %d\n", current->pid); + spin_unlock(&dev->lock); + + DPRINTK("EXIT, succeed\n"); + return 0; +} + +#ifdef CONFIG_ACPI +static int __init tf_init_module(struct platform_device *pdev) +#else +static int __init tf_init_module(void) +#endif +{ +#ifdef CONFIG_ACPI + struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +#endif + int retval; + struct tf_device *dev; + int c; + unsigned long long gap; + if (efuse) { + return -1; + } + + //struct device *mydev; + DPRINTK("page = %d\n", PAGE_SHIFT); + DPRINTK("ENTER\n"); + +#ifdef CONFIG_ACPI + ddrStart = res->start; +#else + // 读取reserveDDR的信息 + struct device_node *reserved0 = of_find_node_by_path("/reserved-memory/buffer@1"); + uint8_t *r0 = (uint8_t*)reserved0->properties[1].value; + ddrStart = (((long long)r0[3] << 32) + ((long long)r0[4] << 24) + ((long long)r0[5] << 16) + ((long long)r0[6] << 8) + (long long)r0[7]); +#endif + + DPRINTK("ddrStart: 0x%llx\n", (unsigned long long)ddrStart); + + readSocketInfo(); + DPRINTK("EFUSE = %d\n", efuse); + DPRINTK("chips = %d\n", chips); + if (efuse) { + return -1; + } + + major = register_chrdev(0, "thinkforce_kernel", &mytest_ops); + //cls = class_create(THIS_MODULE, "thinkforce_kernel_class"); + //mydev = device_create(cls, 0, MKDEV(major,0),NULL,"thinkforce_kernel_device"); + + //if (sysfs_create_file(&(mydev->kobj), &dev_attr_kernel_version.attr)) { + // return -1; + //} + + // init mutex for pid list + mutex_init(&pid_mutex); + mutex_init(&app_mutex); + spin_lock_init(&app_spin_lock); + init_pids(); + + // init app lock records + initRecords(); + + { + unsigned int* periscfg = ioremap(TFACC0_FULL_ACP_BASE, TFACC_CLK_LENGTH); + retval = periscfg[0x34/4]; + DPRINTK("Init Flag = %llx\n", (unsigned long long)periscfg[0x34/4]); + if (retval == 0) { + periscfg[0x34/4] = 1; + DPRINTK("Flag = %llx\n", (unsigned long long)periscfg[0x34/4]); + skipFullSwRst = 0; + } else { + DPRINTK("Skip Full Cache rst\n"); + skipFullSwRst = retval; + } + iounmap(periscfg); + } + + for (c = 0; c < chips; c++) { + DPRINTK("init chip %d\n", c); + gap = chipGap * c; + + tfacc_full_enable(gap + TFACC_BL_CLK_BASE); + tfacc_full_enable(gap + TFACC_BR_CLK_BASE); + tfacc_lite_enable(gap + TFACC_L_CLK_BASE); + tfacc_lite_enable(gap + TFACC_R_CLK_BASE); + + tfacc_full_acp(gap + TFACC0_FULL_ACP_BASE, 0x80 / (chips / 2) * c + (ddrStart >> 32)); + tfacc_full_acp(gap + TFACC1_FULL_ACP_BASE, 0x80 / (chips / 2) * c + (ddrStart >> 32)); + tfacc_full_acp(gap + TFACC2_FULL_ACP_BASE, 0x80 / (chips / 2) * c + (ddrStart >> 32)); + tfacc_full_acp(gap + TFACC3_FULL_ACP_BASE, 0x80 / (chips / 2) * c + (ddrStart >> 32)); + + if (!skipFullSwRst) { + tfacc_full_enable_cache(gap + TFACC0_BASE, gap + TFACC1_BASE, gap + TFACC0_CACHE_BASE, gap + TFACC1_CACHE_BASE, gap + TFACC_BL_CLK_BASE, gap+TFACC0_FULL_ACP_BASE); + tfacc_full_enable_cache(gap + TFACC2_BASE, gap + TFACC3_BASE, gap + TFACC2_CACHE_BASE, gap + TFACC3_CACHE_BASE, gap + TFACC_BR_CLK_BASE, gap+TFACC1_FULL_ACP_BASE); + tfacc_lite_enable_cache(gap + TFACCLITE0_BASE, gap + TFACCLITE0_CACHE_BASE); + tfacc_lite_enable_cache(gap + TFACCLITE1_BASE, gap + TFACCLITE1_CACHE_BASE); + tfacc_lite_enable_cache(gap + TFACCLITE2_BASE, gap + TFACCLITE2_CACHE_BASE); + tfacc_lite_enable_cache(gap + TFACCLITE3_BASE, gap + TFACCLITE3_CACHE_BASE); + } + + + output_tfacc_id(gap + 0xFC000000); + output_tfacc_id(gap + 0xFC100000); + output_tfacc_id(gap + 0xEC000000); + output_tfacc_id(gap + 0xEC100000); + output_tfacc_id(gap + 0xF9800000); + output_tfacc_id(gap + 0xF9900000); + output_tfacc_id(gap + 0xE9800000); + output_tfacc_id(gap + 0xE9900000); + } + + if (IS_ERR(thinkforce_class = class_create(THIS_MODULE, "thinkforce_class"))) { + DPRINTK("failed to device register class\n"); + retval = -ENOMEM; + goto origin; + } + + dev = tf_create_and_init_device(0); + if (dev == NULL) { + goto origin; + } + + if (tf_create_and_init_cdev(dev, 0) < 0) { + goto create_error; + } + + DPRINTK("EXIT, succeed\n"); + return 0; + + create_error: +#ifdef CONFIG_ACPI + tf_cleanup_module(pdev); +#else + tf_cleanup_module(); +#endif + + origin: + DPRINTK("EXIT, failed with code %d\n", retval); + + return retval; +} + +void tfacc_cache_debug(unsigned long long BASE) { + volatile unsigned int *apb = ioremap(BASE, DEVICE_IO_LENGTH); + int i=0; + if (efuse) { + return; + } + while (i<0x200/4) { + DPRINTK("%08x = %llx\n", 4*i, (unsigned long long)(*(apb+i))); + i++; + } + iounmap(apb); +} + +#ifdef CONFIG_ACPI +static int __exit tf_cleanup_module(struct platform_device *pdev) { + int c; + unsigned long long gap; + if (efuse) { + return -1; + } +#else +static void __exit tf_cleanup_module(void) { + int c; + unsigned long long gap; + if (efuse) { + return; + } +#endif + + DPRINTK("ENTER\n"); + + tf_remove(); + tf_dev = NULL; + class_destroy(thinkforce_class); + +// device_destroy(cls, MKDEV(major,0)); +// class_destroy(cls); + unregister_chrdev(major, "mytest"); + + for (c = 0; c < chips; c++) { + DPRINTK("disable chip %d tfacc\n", c); + gap = chipGap * c; + +// tfacc_cache_debug(gap + TFACC1_CACHE_BASE); +// tfacc_cache_debug(gap + TFACC3_CACHE_BASE); + + tfacc_full_disable(gap + TFACC_BL_CLK_BASE); + tfacc_full_disable(gap + TFACC_BR_CLK_BASE); + tfacc_lite_disable(gap + TFACC_L_CLK_BASE); + tfacc_lite_disable(gap + TFACC_R_CLK_BASE); + } + tfacc_full_checkrstcond(); + + DPRINTK("EXIT, succeed\n"); +#ifdef CONFIG_ACPI + return 0; +#endif +} + +module_param(needReset, int, S_IWUSR|S_IRUSR); +MODULE_PARM_DESC(needReset, "Enforce TFACC hardware reset"); \ No newline at end of file diff --git a/third_party/tfacc/driver/tfacc2/tfacc2.h b/third_party/tfacc/driver/tfacc2/tfacc2.h new file mode 100644 index 00000000..e3de443a --- /dev/null +++ b/third_party/tfacc/driver/tfacc2/tfacc2.h @@ -0,0 +1,290 @@ +// driver for TFDriver inference acceleration +// created by Jingzhou Ji + +#ifndef __TFDRIVER_H__ +#define __TFDRIVER_H__ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//#include + +#define DRIVER_VERSION "0.4.0" +#ifdef CONFIG_ACPI +#define MODNAME "tfacc2_ACPI" +#else +#define MODNAME "tfacc2" +#endif +#define DRIVER_LOAD_MSG "Think-Force AI driver " DRIVER_VERSION " loaded" +#define DRIVER + +MODULE_AUTHOR("think-force.com"); +MODULE_DESCRIPTION("Think Force AI Driver"); +MODULE_LICENSE("GPL"); +MODULE_VERSION(DRIVER_VERSION); + +#define REG_CHICKEN_BASE 0xff +#define TF_BUF_HASHBITS 16 //2^15 buf +#define TF_BUF_HASHENTRIES (1 << TF_BUF_HASHBITS) +#define TF_BUF_HASHMASK (TF_BUF_HASHENTRIES - 1) + +#define TF_DEBUG + +#ifdef TF_DEBUG +#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __func__ , ## args) +#else +#define DPRINTK(fmt, args...) do {} while (0) +#endif +#define NDPRINTK(fmt, args...) do {} while(0) + +#ifdef TF_DEBUG +#define assert(expr) \ + if (!(expr)) { \ + printk("Assertion failed! %s,%s,%s,line=%d\n", \ + #expr, __FILE__, __func__, __LINE__); \ + } +#else +#define assert(expr) do {} while (0) +#endif + +#ifdef TF_DEBUG +#define DASSERT2(expr1, expr2) \ + if (expr1 != expr2) { \ + printk("Assertion failed! %s,%016lx,%s,%016lx,%s,%s,line=%d\n", \ + #expr1, expr1, #expr2, expr2, __FILE__, __func__, __LINE__); \ + } +#else +#define DASSERT2(expr1, expr2) do {} while (0) +#endif + + +static int tf_open(struct inode *inode, struct file *filp); +static int tf_release(struct inode *inode, struct file *filp); +static int tf_mmap(struct file *filp, struct vm_area_struct *vma); +static long tf_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); + +void tf_remove(void); + +#ifdef CONFIG_ACPI +static int __init tf_init_module(struct platform_device *pdev); +static int __exit tf_cleanup_module(struct platform_device *pdev); +#else +static int __init tf_init_module(void); +static void __exit tf_cleanup_module(void); +#endif + +#define TF_MAGIC 'x' +#define TF_MAX_NR 9 +#define TF_BUF_CLEAR _IO(TF_MAGIC, 0) +#define TF_BUF_RESET _IO(TF_MAGIC, 8) +#define TF_BUF_CREATE _IOWR(TF_MAGIC, 0, struct tf_buf_io_param *) +#define TF_BUF_FLUSHL1 _IOWR(TF_MAGIC, 1, struct tf_get_phy_value *) +#define TF_VERSION_CHECK _IOWR(TF_MAGIC, 2, struct tf_version *) + +// get lock, return 0 as SUCCESS, +// 第一个参数 , 表示锁的方式:-1: try lock , +// > 0 wait lock. 尝试一段时间, 单位us +// = 0 wait until lock,一直等 +// 第二个参数, 表示对应锁住的TFACC ID +#define TF_APP_LOCK _IOW(TF_MAGIC, 3, int*) + +// unlock, return 0 as SUCCESS, 如果没有持有锁,解锁也会返回成功 +// 第一个参数, 表示对应解锁的TFACC ID +#define TF_APP_UNLOCK _IOW(TF_MAGIC, 4, int*) + +// get pids 正在使用这个driver的,返回pid 列表,-1表示结尾 +#define TF_READ_PIDS _IOR(TF_MAGIC, 5, int*) +#define TF_READ_APP_LOCK_RECORD _IOR(TF_MAGIC, 6, struct tf_lock_record*) // 获得锁的历史访问记录 +#define TF_READ_RESERVE_MEM_RECORD _IOR(TF_MAGIC, 7, struct ReserveDDRBlock*) // reserve 内存 +#define TF_READ_APP_USAGE _IOR(TF_MAGIC, 8, int*) // 获取使用情况 + +#define TFACC_REG_CNT 8 + +#define EFUSE_BASE 0xFE1A046C // EFUSE + +#define TFACC0_BASE 0xFC000000 // TFACC0 +#define TFACC1_BASE 0xFC100000 // TFACC1 +#define TFACC0_CACHE_BASE 0xFC200000 // TFACC2 Cache +#define TFACC1_CACHE_BASE 0xFC600000 // TFACC3 Cache + +#define TFACC2_BASE 0xEC000000 // TFACC2 +#define TFACC3_BASE 0xEC100000 // TFACC3 +#define TFACC2_CACHE_BASE 0xEC200000 // TFACC2 Cache +#define TFACC3_CACHE_BASE 0xEC600000 // TFACC3 Cache + +#define TFACCLITE0_BASE 0xF9800000 // TFACC Lite 0 +#define TFACCLITE1_BASE 0xF9900000 // TFACC Lite 1 +#define TFACCLITE0_CACHE_BASE 0xF9000000 // TFACC Lite 1 +#define TFACCLITE1_CACHE_BASE 0xF9400000 // TFACC Lite 1 + +#define TFACCLITE2_BASE 0xE9800000 // TFACC Lite 2 +#define TFACCLITE3_BASE 0xE9900000 // TFACC Lite 3 +#define TFACCLITE2_CACHE_BASE 0xE9000000 // TFACC Lite 2 +#define TFACCLITE3_CACHE_BASE 0xE9400000 // TFACC Lite 3 + +#define DEVICE_IO_LENGTH 0x100000 + +#define TFACC_BL_CLK_BASE 0xFE110000 +#define TFACC_BR_CLK_BASE 0xED400000 +#define TFACC_L_CLK_BASE 0xB1500000 +#define TFACC_R_CLK_BASE 0xB1100000 +#define TFACC_CLK_LENGTH 0x8000 + +#define TFACC0_FULL_ACP_BASE 0xFE170000 +#define TFACC1_FULL_ACP_BASE 0xED090000 +#define TFACC2_FULL_ACP_BASE 0xB1460000 +#define TFACC3_FULL_ACP_BASE 0xB10D0000 + +#define SRAM1ID 10001 +#define SRAM2ID 10002 +#define REG2ID 10003 +#define CACHEREGID 10100 +#define REGMAINID 9998 + +#define MAX_TFACC_CNT 32 +#define CBUF 9997 + +////@brief kernel buf +struct kbuf { + struct hlist_node list; + struct kobject kobj; + void * kernel_addr; + dma_addr_t phy_addr; + int len; + int mmap_id; +}; + +////@brief device +struct tf_device { + spinlock_t lock; + void *ioreg[TFACC_REG_CNT * 10]; + void *ioreg_cache[TFACC_REG_CNT * 10]; + void *ioregMain; + void *sram1; + void *sram2; + unsigned int major; + unsigned int minor; + struct cdev cdev; + struct device *device; + int isBusy; + int version; + int nParallel; + int nBuf; + + struct kobject kobj; + struct kbuf reg_buf[TFACC_REG_CNT * 10]; + struct kbuf cache_reg_buf[TFACC_REG_CNT * 10]; + struct kbuf regMain_buf; + struct kbuf sram1_buf; + struct kbuf sram2_buf; + struct kbuf cbuf; // cachable buf + struct kobject buf_list_top; + DECLARE_HASHTABLE(buf_list, TF_BUF_HASHBITS); + + int mmap_id_counter; + int device_id; + + int useDDR2; // 7140之后的芯片,这个属性用来表示分配在哪个numa节点上 + // int holdAppLockPid; // 当前持有app锁的pid + // int holdAppLockTgid; // 当前持有app锁的tgid + + /// 每个TFACC目前被哪个进程占用 + int holdTFACCPid[MAX_TFACC_CNT]; + /// 每个TFACC目前被哪个TGID占用 + int holdTFACCTgid[MAX_TFACC_CNT]; +}; + +struct tf_buf_io_param{ + dma_addr_t phy_addr; + int len; + int mmap_id; + int uncache; + int useDDR2; +}; + +struct tf_version { + int sdk_version; //传过来SDK编号,检测该SDK是否可以运行在这个Driver上 + int kernel_version; //传回去的Kernel编号,在SDK端检测Kernel编号是否符合要求 + int excepted_sdk_version; //当SDK版本过低时,以此来表示至少需要的SDK版本 +}; + +struct tf_get_phy_value { + unsigned int phy_addr; + int len; + unsigned int *dst; +}; + +struct tf_app_info { + int pid; // 打开driver的pid + int tgid; // thread group id +}; + +// Parameter 'size' for an ioctl code is limited with (16K -1). +// 512 * (4 + 4 + 8 + 8 + 4 + 4) = 16K +struct tf_lock_record { + int pid; // 持有app_lock 的pid + int tgid; // 持有app_lock 的tid + unsigned long lockTime; // jiffies + unsigned long unlockTime; // jiffies, 如果正在持有, jiffies = 最新 + int isHolding; // 是否还在持有 + int tfaccID; // 锁的TFACC ID +}; + +// reserve 内存分配信息, size = 8 + 8 + 8 + 4 + 1 + 4 = 33 +struct ReserveDDRBlock { + long long startPos; // 起始地址 + long long offset; // 当前 + long long len; // 最大长度 + int chipId; // 归属的芯片ID + bool isMalloc; // 是否被使用 + int tgid; // 线程组id +}; + +// +static const struct file_operations tf_device_ops = { + .owner = THIS_MODULE, + .open = tf_open, + .release = tf_release, + .mmap = tf_mmap, + .unlocked_ioctl = tf_ioctl, +}; + + +static struct class *thinkforce_class; + +#ifdef CONFIG_ACPI +static const struct acpi_device_id acpi_tf_tfacc_match[] = { + { "TFA0001" }, + { } +}; +MODULE_DEVICE_TABLE(acpi, acpi_tf_tfacc_match); + +static struct platform_driver tf_tfacc_driver = { + .driver = { + .name = "tf_tfacc", + .pm = NULL, + .of_match_table = NULL, + .acpi_match_table = ACPI_PTR(acpi_tf_tfacc_match), + }, + .probe = tf_init_module, + .remove = tf_cleanup_module, +}; +module_platform_driver(tf_tfacc_driver); +#else +module_init(tf_init_module); +module_exit(tf_cleanup_module); +#endif + +#endif // PCI_THINKFORCE_H diff --git a/third_party/tfacc/launch.py b/third_party/tfacc/launch.py new file mode 100644 index 00000000..a3986f50 --- /dev/null +++ b/third_party/tfacc/launch.py @@ -0,0 +1,22 @@ +import os +import threading +import sys + +def run(cmd): + os.system(cmd) + +#modelName = "/root/flmModels/chatglm3-6b-int4.flm" +#modelName = "/root/flmModels/qwen1.5-36B-chat-int4.flm" + +total = int(sys.argv[1]) + +for i in range(total): + st = i * 40 + end = st + 39 + cmd = "numactl -C " + str(st) + "-" + str(end) + " -m " + str(i) + " ./server " + str(i) + " " + str(total) + print(cmd) + (threading.Thread(target = run, args = ([cmd]) )).start() + + + + diff --git a/third_party/tfacc/pull.sh b/third_party/tfacc/pull.sh new file mode 100755 index 00000000..44d578fa --- /dev/null +++ b/third_party/tfacc/pull.sh @@ -0,0 +1,3 @@ +cp ../../../TFACCComputeServer/build/server . +cp ../../../TFACCComputeServer/launch.py . +cp -r ../../../TFACCComputeServer/driver . \ No newline at end of file diff --git a/third_party/tfacc/server b/third_party/tfacc/server new file mode 100755 index 0000000000000000000000000000000000000000..b4bfc8ee949f2d2d8d4af725d73710bff1df0767 GIT binary patch literal 396328 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

6D;9 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

|+jN=KYn`I4 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 literal 0 HcmV?d00001