Skip to content

Commit

Permalink
[sw,utils] Replace write_str for log.print
Browse files Browse the repository at this point in the history
Signed-off-by: Douglas Reis <[email protected]>
  • Loading branch information
engdoreis committed Oct 24, 2024
1 parent 2f39d58 commit 376ce5e
Show file tree
Hide file tree
Showing 11 changed files with 133 additions and 145 deletions.
47 changes: 25 additions & 22 deletions sw/cheri/checks/hyperram_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
// clang-format on
#include <platform-uart.hh>

#include "../common/console-utils.hh"
#include "../common/console.hh"
#include "../common/uart-utils.hh"

using namespace CHERI;
Expand Down Expand Up @@ -236,14 +236,17 @@ int execute_test(Capability<volatile uint32_t> &hyperram_area, ds::xoroshiro::P6
Capability<void> root{rwRoot};

// Create a bounded capability to the UART
Capability<volatile OpenTitanUart> uart = root.cast<volatile OpenTitanUart>();
uart.address() = UART_ADDRESS;
uart.bounds() = UART_BOUNDS;
Capability<volatile OpenTitanUart> uart0 = root.cast<volatile OpenTitanUart>();
uart0.address() = UART_ADDRESS;
uart0.bounds() = UART_BOUNDS;

uart->init(BAUD_RATE);
set_console_mode(uart, CC_BOLD);
write_str(uart, "\r\n\r\nGet hyped for hyperram!\r\n");
set_console_mode(uart, CC_RESET);
uart0->init(BAUD_RATE);
WriteUart uart{uart0};
Log log(uart);

set_console_mode(log, CC_BOLD);
log.print("\r\n\r\nGet hyped for hyperram!\r\n");
set_console_mode(log, CC_RESET);

ds::xoroshiro::P64R32 prng;
prng.set_state(0xDEADBEEF, 0xBAADCAFE);
Expand All @@ -258,32 +261,32 @@ int execute_test(Capability<volatile uint32_t> &hyperram_area, ds::xoroshiro::P6

while (true) {
int failures = 0;
write_str(uart, "Running RND cap test...");
log.print("Running RND cap test...");
failures += rand_cap_test(hyperram_area, hyperram_cap_area, prng, HyperramSize / 4);
write_test_result(uart, failures);
write_test_result(log, failures);

write_str(uart, "Running RND data test...");
log.print("Running RND data test...");
failures = rand_data_test_full(hyperram_area, prng);
write_test_result(uart, failures);
write_test_result(log, failures);

write_str(uart, "Running RND data & address test...");
log.print("Running RND data & address test...");
failures = rand_data_addr_test(hyperram_area, prng, HyperramSize / 4);
write_test_result(uart, failures);
write_test_result(log, failures);

write_str(uart, "Running 0101 stripe test...");
log.print("Running 0101 stripe test...");
failures = stripe_test(hyperram_area, 0x55555555);
write_test_result(uart, failures);
write_test_result(log, failures);

write_str(uart, "Running 1001 stripe test...");
log.print("Running 1001 stripe test...");
failures = stripe_test(hyperram_area, 0x99999999);
write_test_result(uart, failures);
write_test_result(log, failures);

write_str(uart, "Running 0000_1111 stripe test...");
log.print("Running 0000_1111 stripe test...");
failures = stripe_test(hyperram_area, 0x0F0F0F0F);
write_test_result(uart, failures);
write_test_result(log, failures);

write_str(uart, "Running Execution test...");
log.print("Running Execution test...");
failures = execute_test(hyperram_area, prng, HyperramSize / 4);
write_test_result(uart, failures);
write_test_result(log, failures);
}
}
36 changes: 22 additions & 14 deletions sw/cheri/common/console.hh
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,39 @@
* SPDX-License-Identifier: Apache-2.0
*/
#pragma once
// clang-format off

#include "fmt.hh"
#include "sonata-devices.hh"
#include "../../common/defs.h"
// clang-format on
#include <platform-uart.hh>

#include "uart-utils.hh"
#include "console.hh"

#define CC_BOLD "1"
#define CC_RED "31"
#define CC_GREEN "32"
#define CC_RESET "0"

[[maybe_unused]] static void set_console_mode(volatile OpenTitanUart *uart, const char *cc) {
write_str(uart, "\x1b[");
write_str(uart, cc);
write_str(uart, "m");
}
struct WriteUart {
UartPtr uart;
void write(const char* buf, size_t n) {
while (n--) {
uart->blocking_write(*buf++);
}
}
};

using Log = reisfmt::Fmt<WriteUart>;

[[maybe_unused]] static void set_console_mode(Log& log, const char* cc) { log.print("\x1b[{}m", cc); }

[[maybe_unused]] static void write_test_result(volatile OpenTitanUart *uart, int failures) {
[[maybe_unused]] static void write_test_result(Log& log, int failures) {
if (failures == 0) {
set_console_mode(uart, CC_GREEN);
write_str(uart, "PASS!\r\n");
set_console_mode(log, CC_GREEN);
log.println("PASS!");
} else {
set_console_mode(uart, CC_RED);
write_str(uart, "FAIL!\r\n");
set_console_mode(log, CC_RED);
log.println("FAIL!");
}
set_console_mode(uart, CC_RESET);
set_console_mode(log, CC_RESET);
}
2 changes: 1 addition & 1 deletion sw/cheri/tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ foreach(TEST ${TESTS})
get_filename_component(NAME ${TEST} NAME_WE)

add_executable(${NAME} ${TEST})
target_include_directories(${NAME} PRIVATE ${CHERIOT_SDK_INCLUDES})
target_include_directories(${NAME} PRIVATE ${CHERIOT_SDK_INCLUDES} "${reisfmt_SOURCE_DIR}/include")
target_link_libraries(${NAME} common)

install(TARGETS ${NAME})
Expand Down
44 changes: 20 additions & 24 deletions sw/cheri/tests/hyperram_tests.hh
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@
// clang-format on
#include <platform-uart.hh>

#include "../common/console-utils.hh"
#include "../common/console.hh"
#include "../common/sonata-devices.hh"
#include "../common/uart-utils.hh"
#include "test_runner.hh"
#include "../common/console.hh"

using namespace CHERI;

Expand Down Expand Up @@ -256,7 +257,7 @@ int execute_test(Capability<volatile uint32_t> hyperram_area, ds::xoroshiro::P64
return failures;
}

void hyperram_tests(CapRoot root, UartPtr console) {
void hyperram_tests(CapRoot root, Log &log) {
auto hyperram_area = hyperram_ptr(root);

Capability<Capability<volatile uint32_t>> hyperram_cap_area = root.cast<Capability<volatile uint32_t>>();
Expand All @@ -267,52 +268,47 @@ void hyperram_tests(CapRoot root, UartPtr console) {
prng.set_state(0xDEADBEEF, 0xBAADCAFE);

for (size_t i = 0; i < HYPERRAM_TEST_ITERATIONS; i++) {
write_str(console, "\r\nrunning hyperram_test: ");
write_hex8b(console, i);
write_str(console, "\\");
write_hex8b(console, HYPERRAM_TEST_ITERATIONS - 1);
write_str(console, "\r\n ");
write_hex(console, HYPERRAM_TEST_SIZE);
write_str(console, "\r\n ");
log.println("\nrunning hyperram_test: {} \\ {}", i, HYPERRAM_TEST_ITERATIONS - 1);
log.println("HYPERRAM_TEST_SIZE: 0x{:08x}", HYPERRAM_TEST_SIZE);

bool test_failed = false;
int failures = 0;

write_str(console, "Running RND cap test...");
log.print("Running RND cap test...");
failures = rand_cap_test(hyperram_area, hyperram_cap_area, prng, HYPERRAM_TEST_SIZE);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, "Running RND data test...");
log.print("Running RND data test...");
failures = rand_data_test_full(hyperram_area, prng);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, "Running RND data & address test...");
log.print("Running RND data & address test...");
failures = rand_data_addr_test(hyperram_area, prng, HYPERRAM_TEST_SIZE);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, "Running 0101 stripe test...");
log.print("Running 0101 stripe test...");
failures = stripe_test(hyperram_area, 0x55555555);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, "Running 1001 stripe test...");
log.print("Running 1001 stripe test...");
failures = stripe_test(hyperram_area, 0x99999999);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, "Running 0000_1111 stripe test...");
log.print("Running 0000_1111 stripe test...");
failures = stripe_test(hyperram_area, 0x0F0F0F0F);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, "Running Execution test...");
log.print("Running Execution test...");
failures = execute_test(hyperram_area, prng, HYPERRAM_TEST_SIZE);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

check_result(console, !test_failed);
check_result(log, !test_failed);
}
}
24 changes: 10 additions & 14 deletions sw/cheri/tests/i2c_tests.hh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

#pragma once
#include "../../common/defs.h"
#include "../common/console-utils.hh"
#include "../common/console.hh"
#include "../common/sonata-devices.hh"
#include "../common/uart-utils.hh"
#include "../common/rpi-hat-eeprom.hh"
Expand Down Expand Up @@ -312,14 +312,10 @@ int i2c_as6212_temperature_sense_test(I2cPtr i2c) {
/**
* Run the whole suite of I2C tests.
*/
void i2c_tests(CapRoot root, UartPtr console) {
void i2c_tests(CapRoot root, Log& log) {
// Execute the specified number of iterations of each test.
for (size_t i = 0; i < I2C_TEST_ITERATIONS; i++) {
write_str(console, "\r\nrunning i2c_test: ");
write_hex8b(console, i);
write_str(console, "\\");
write_hex8b(console, I2C_TEST_ITERATIONS - 1);
write_str(console, "\r\n");
log.println("\r\nrunning i2c_test: {} \\ {}", i, I2C_TEST_ITERATIONS - 1);

bool test_failed = false;
int failures = 0;
Expand All @@ -329,27 +325,27 @@ void i2c_tests(CapRoot root, UartPtr console) {
I2cPtr i2c0 = i2c_ptr(root, 0);
I2cPtr i2c1 = i2c_ptr(root, 1);

write_str(console, " Running RPI HAT ID EEPROM test... ");
log.print(" Running RPI HAT ID EEPROM test... ");
failures = i2c_rpi_hat_id_eeprom_test(i2c0);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);

write_str(console, " Running RPI HAT ID WHO_AM_I test... ");
log.print(" Running RPI HAT ID WHO_AM_I test... ");
failures = i2c_rpi_hat_imu_whoami_test(i2c1);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);
}

if (I2C_AS6212_AVAILABLE) {
// Retrieve bounded capabilities for I2C controller 1
I2cPtr i2c1 = i2c_ptr(root, 1);

write_str(console, " Running AS6212 Temperature test... ");
log.print(" Running AS6212 Temperature test... ");
failures = i2c_as6212_temperature_sense_test(i2c1);
test_failed |= (failures > 0);
write_test_result(console, failures);
write_test_result(log, failures);
}

check_result(console, !test_failed);
check_result(log, !test_failed);
}
}
35 changes: 13 additions & 22 deletions sw/cheri/tests/plic_tests.hh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
struct PlicTest {
CapRoot root;
PLIC::SonataPlic *plic;
UartPtr console;
Log *log_;
uint32_t error_count = 0;

size_t instance = 0;
Expand Down Expand Up @@ -51,9 +51,7 @@ struct PlicTest {
}};

auto uart = uart_ptr(root, instance);
write_str(console, "testing uart: ");
write_hex8b(console, instance);
write_str(console, "\r\n");
log_->println("testing uart: {}", instance);
for (size_t i = 0; i < uartMap.size(); ++i) {
ip_irq_id = uartMap[i].id;
is_irq_clearable = uartMap[i].can_clear;
Expand Down Expand Up @@ -108,9 +106,7 @@ struct PlicTest {
}};

auto i2c = i2c_ptr(root, instance);
write_str(console, "testing i2c: ");
write_hex8b(console, instance);
write_str(console, "\r\n");
log_->println("testing i2c: {}", instance);
for (size_t i = 0; i < i2cMap.size(); ++i) {
ip_irq_id = static_cast<uint32_t>(i2cMap[i].id);
is_irq_clearable = i2cMap[i].can_clear;
Expand Down Expand Up @@ -155,9 +151,7 @@ struct PlicTest {
}};

auto spi = spi_ptr(root, instance);
write_str(console, "testing spi: ");
write_hex8b(console, instance);
write_str(console, "\r\n");
log_->println("testing spi: {}", instance);
for (size_t i = 0; i < spiMap.size(); ++i) {
ip_irq_id = spiMap[i].id;
is_irq_clearable = spiMap[i].can_clear;
Expand Down Expand Up @@ -214,7 +208,7 @@ struct PlicTest {
}};

auto usbdev = usbdev_ptr(root);
write_str(console, "testing usbdev: \r\n");
log_->println("testing usbdev");
for (size_t i = 0; i < usbdevMap.size(); ++i) {
ip_irq_id = usbdevMap[i].id;
is_irq_clearable = usbdevMap[i].can_clear;
Expand Down Expand Up @@ -252,11 +246,8 @@ struct PlicTest {
}

void log(PLIC::Interrupts fired) {
write_str(console, "irq fired: 0x");
write_hex8b(console, static_cast<uint32_t>(fired));
write_str(console, ", expected: 0x");
write_hex8b(console, static_cast<uint32_t>(plic_irq_id));
write_str(console, "\r\n");
log_->println("irq fired: {:#x}, expected: {:#x}", static_cast<uint32_t>(fired),
static_cast<uint32_t>(plic_irq_id));
}

bool all_interrupts_test(void) {
Expand Down Expand Up @@ -298,11 +289,11 @@ extern "C" void irq_external_handler(void) {
}
}

void plic_tests(CapRoot root, UartPtr console) {
void plic_tests(CapRoot root, Log &log) {
PLIC::SonataPlic plic(root);
plic_test.root = root;
plic_test.plic = &plic;
plic_test.console = console;
write_str(console, "running plic_test\r\n");
check_result(console, plic_test.all_interrupts_test());
plic_test.root = root;
plic_test.plic = &plic;
plic_test.log_ = &log;
log.println("running plic_test");
check_result(log, plic_test.all_interrupts_test());
}
Loading

0 comments on commit 376ce5e

Please sign in to comment.