blob: cf17bedda3afad9ac8f45b52074ae87e0b46d33a [file] [log] [blame]
// SPDX-FileCopyrightText: 2021 Anish Singhani
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
#include "verilog/dv/caravel/defs.h"
#include "verilog/dv/caravel/stub.c"
#include "printio.h"
void main() {
reg_spimaster_config = 0xA002; // Allow use of pin3
reg_mprj_xfer = 1;
while (reg_mprj_xfer == 1);
// First test - small data
printstr("test1\n");
*((uint32_t*)0x30010000) = 0x1;
*((uint32_t*)0x30010004) = 0x68656C6C;
*((uint32_t*)0x30010004) = 0x6F800000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000028;
while ((*((uint32_t*)0x30010000) & 0x4) != 0x4);
if (*((uint32_t*)0x30010010) != 0x2CF24DBA) goto fail1;
if (*((uint32_t*)0x30010014) != 0x5FB0A30E) goto fail1;
if (*((uint32_t*)0x30010018) != 0x26E83B2A) goto fail1;
if (*((uint32_t*)0x3001001C) != 0xC5B9E29E) goto fail1;
if (*((uint32_t*)0x30010020) != 0x1B161E5C) goto fail1;
if (*((uint32_t*)0x30010024) != 0x1FA7425E) goto fail1;
if (*((uint32_t*)0x30010028) != 0x73043362) goto fail1;
if (*((uint32_t*)0x3001002C) != 0x938B9824) goto fail1;
goto pass1;
fail1:
printstr("Res: FAIL\n");
printhex(*((uint32_t*)0x30010010), true);
printhex(*((uint32_t*)0x30010014), true);
printhex(*((uint32_t*)0x30010018), true);
printhex(*((uint32_t*)0x3001001C), true);
printhex(*((uint32_t*)0x30010020), true);
printhex(*((uint32_t*)0x30010024), true);
printhex(*((uint32_t*)0x30010028), true);
printhex(*((uint32_t*)0x3001002C), true);
goto done1;
pass1:
printstr("Res: PASS\n");
done1:
// Second test - larger data
printstr("test2\n");
*((uint32_t*)0x30010000) = 0x1;
*((uint32_t*)0x30010004) = 0x33613537;
*((uint32_t*)0x30010004) = 0x63643330;
*((uint32_t*)0x30010004) = 0x35363066;
*((uint32_t*)0x30010004) = 0x62326637;
*((uint32_t*)0x30010004) = 0x32383361;
*((uint32_t*)0x30010004) = 0x37343333;
*((uint32_t*)0x30010004) = 0x65636539;
*((uint32_t*)0x30010004) = 0x31393436;
*((uint32_t*)0x30010004) = 0x61633664;
*((uint32_t*)0x30010004) = 0x61346234;
*((uint32_t*)0x30010004) = 0x30343063;
*((uint32_t*)0x30010004) = 0x38633337;
*((uint32_t*)0x30010004) = 0x61666135;
*((uint32_t*)0x30010004) = 0x36343031;
*((uint32_t*)0x30010004) = 0x39396465;
*((uint32_t*)0x30010004) = 0x64353964;
*((uint32_t*)0x30010004) = 0x80000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000000;
*((uint32_t*)0x30010004) = 0x00000200;
while ((*((uint32_t*)0x30010000) & 0x4) != 0x4);
if (*((uint32_t*)0x30010010) != 0x41812DC6) goto fail2;
if (*((uint32_t*)0x30010014) != 0x0561798D) goto fail2;
if (*((uint32_t*)0x30010018) != 0xC0CC6E57) goto fail2;
if (*((uint32_t*)0x3001001C) != 0x4B641893) goto fail2;
if (*((uint32_t*)0x30010020) != 0xECF4186D) goto fail2;
if (*((uint32_t*)0x30010024) != 0x4097283A) goto fail2;
if (*((uint32_t*)0x30010028) != 0xF4A6CFF3) goto fail2;
if (*((uint32_t*)0x3001002C) != 0xEDDAA4A0) goto fail2;
goto pass2;
fail2:
printstr("Res: FAIL\n");
printhex(*((uint32_t*)0x30010010), true);
printhex(*((uint32_t*)0x30010014), true);
printhex(*((uint32_t*)0x30010018), true);
printhex(*((uint32_t*)0x3001001C), true);
printhex(*((uint32_t*)0x30010020), true);
printhex(*((uint32_t*)0x30010024), true);
printhex(*((uint32_t*)0x30010028), true);
printhex(*((uint32_t*)0x3001002C), true);
goto done2;
pass2:
printstr("Res: PASS\n");
done2:
// Print identifier
printstr("Res: ");
printstr((char*)0x30010050);
printstr("\n");
endtest();
}