提交 94eae1a0 编写于 作者: W William Wang

tests: make huancunop test debug friendly

上级 879367ab
......@@ -19,7 +19,7 @@
#define CTRL_WAY_OFFSET 16
#define CTRL_DATA_OFFSET 24
#define CTRL_DIR_OFFSET 32
#define TEST_BUFFER_SIZE 32
#define TEST_BUFFER_SIZE 128
#define L3_SIZE_KB (3 * 1024)
#define L3_NR_WAY 6
#define L3_NR_BANK 4
......@@ -35,69 +35,84 @@ unsigned int log2(unsigned int n) {
return result;
}
volatile uint64_t test_buffer[TEST_BUFFER_SIZE] = {0};
volatile uint64_t test_buffer[TEST_BUFFER_SIZE] __attribute__((aligned(64))) = {0};
void success() {
printf("test passed.\n");
asm("li a0, 0\n");
asm(".word 0x0000006b\n");
// asm("li a0, 0\n");
// asm(".word 0x0000006b\n");
_halt(0);
}
void failure() {
printf("test failed.\n");
asm("li a0, 1\n");
asm(".word 0x0000006b\n");
// asm("li a0, 1\n");
// asm(".word 0x0000006b\n");
_halt(1);
}
int main() {
printf("HuanCun op (mmio based) test. Note that --no-diff is required!\n");
printf("HuanCun l3 size is set to %d KB, nr_way is set to %d, nr_bank is set to %d, ", L3_SIZE_KB, L3_NR_WAY, L3_NR_BANK);
unsigned int set_size = L3_SIZE_KB * 1024 / L3_NR_BANK / L3_NR_WAY / 64;
unsigned int set_len = log2(set_size);
printf("nr_set is %u, set_len is %u\n", set_size, set_len);
/* Fill data for test_buffer */
for (int i = 0; i < TEST_BUFFER_SIZE; i++) {
test_buffer[i] = (uint64_t)&test_buffer[i];
}
/* In our LLC design, full address is passed by CtrlUnit to one of the SliceCtrls according to BankBits
* Afterwards, BankBits are truncated in SliceCtrl to generate real MSHR request
* So we should provide full address here
*/
uint64_t tag = ((uint64_t)&test_buffer >> OFFSET_LEN) >> set_len; // paddr to l3 tag
uint64_t set = ((uint64_t)&test_buffer >> OFFSET_LEN) & (set_size-1); // paddr to l3 set
*(uint64_t*)(CACHE_CTRL_BASE + CTRL_TAG_OFFSET) = tag;
*(uint64_t*)(CACHE_CTRL_BASE + CTRL_SET_OFFSET) = set;
printf("addr 0x%llx tag 0x%llx set 0x%llx\n", &test_buffer, tag, set);
asm("fence\n");
void test1() {
test_buffer[0] = 1;
asm("fence\n");
(*(uint64_t*)CACHE_CMD_BASE) = CMD_CMO_INV;
printf("huancun op invalid done\n");
printf("data %lx\n", test_buffer[0]);
if (test_buffer[0] == 1) {
printf("CMO_INV failed: data right %lx wrong %lx", 1, test_buffer[0]);
failure();
}
}
void test2() {
test_buffer[0] = 2;
asm("fence\n");
(*(uint64_t*)CACHE_CMD_BASE) = CMD_CMO_CLEAN;
printf("huancun op clean done\n");
printf("data %lx\n", test_buffer[0]);
if (test_buffer[0] != 2) {
printf("CMD_CMO_CLEAN failed: data right %lx wrong %lx", 2, test_buffer[0]);
failure();
}
}
void test3() {
test_buffer[0] = 3;
asm("fence\n");
(*(uint64_t*)CACHE_CMD_BASE) = CMD_CMO_FLUSH;
printf("huancun op flush done\n");
printf("data %lx\n", test_buffer[0]);
if (test_buffer[0] != 3) {
printf("CMD_CMO_FLUSH failed: data right %lx wrong %lx", 3, test_buffer[0]);
failure();
}
}
int main() {
printf("HuanCun op (mmio based) test. Note that --no-diff is required!\n");
printf("HuanCun l3 size is set to %d KB, nr_way is set to %d, nr_bank is set to %d, ", L3_SIZE_KB, L3_NR_WAY, L3_NR_BANK);
unsigned int set_size = L3_SIZE_KB * 1024 / L3_NR_BANK / L3_NR_WAY / 64;
unsigned int set_len = log2(set_size);
printf("nr_set is %u, set_len is %u\n", set_size, set_len);
/* Fill data for test_buffer */
for (int i = 0; i < TEST_BUFFER_SIZE; i++) {
test_buffer[i] = (uint64_t)&test_buffer[i];
}
/* In our LLC design, full address is passed by CtrlUnit to one of the SliceCtrls according to BankBits
* Afterwards, BankBits are truncated in SliceCtrl to generate real MSHR request
* So we should provide full address here
*/
uint64_t tag = ((uint64_t)&test_buffer >> OFFSET_LEN) >> set_len; // paddr to l3 tag
uint64_t set = ((uint64_t)&test_buffer >> OFFSET_LEN) & (set_size-1); // paddr to l3 set
*(uint64_t*)(CACHE_CTRL_BASE + CTRL_TAG_OFFSET) = tag;
*(uint64_t*)(CACHE_CTRL_BASE + CTRL_SET_OFFSET) = set;
printf("addr 0x%llx tag 0x%llx set 0x%llx\n", &test_buffer, tag, set);
asm("fence\n");
test1();
test2();
test3();
// test to be added for a wider addr range
success();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册