blob: 36e3b0bfe188ecd4172fbcfa462b6f21eb68a613 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#include <stdbool.h>
#include <stdint.h>
#include "sw/device/lib/base/status.h"
#include "sw/device/lib/dif/dif_gpio.h"
#include "sw/device/lib/dif/dif_pinmux.h"
#include "sw/device/lib/runtime/log.h"
#include "sw/device/lib/testing/json/command.h"
#include "sw/device/lib/testing/json/gpio.h"
#include "sw/device/lib/testing/json/pinmux_config.h"
#include "sw/device/lib/testing/test_framework/check.h"
#include "sw/device/lib/testing/test_framework/ottf_flow_control.h"
#include "sw/device/lib/testing/test_framework/ottf_main.h"
#include "sw/device/lib/testing/test_framework/ujson_ottf.h"
#include "sw/device/lib/ujson/ujson.h"
#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
OTTF_DEFINE_TEST_CONFIG(.enable_uart_flow_control = true);
static dif_gpio_t gpio;
static dif_pinmux_t pinmux;
status_t command_processor(ujson_t *uj) {
while (true) {
test_command_t command;
TRY(ujson_deserialize_test_command_t(uj, &command));
switch (command) {
case kTestCommandGpioSet:
RESP_ERR(uj, gpio_set(uj, &gpio));
break;
case kTestCommandGpioGet:
RESP_ERR(uj, gpio_get(uj, &gpio));
break;
case kTestCommandPinmuxConfig:
RESP_ERR(uj, pinmux_config(uj, &pinmux));
break;
default:
LOG_ERROR("Unrecognized command: %d", command);
RESP_ERR(uj, INVALID_ARGUMENT());
}
}
// We should never reach here.
return INTERNAL();
}
bool test_main(void) {
CHECK_DIF_OK(dif_pinmux_init(
mmio_region_from_addr(TOP_EARLGREY_PINMUX_AON_BASE_ADDR), &pinmux));
CHECK_DIF_OK(
dif_gpio_init(mmio_region_from_addr(TOP_EARLGREY_GPIO_BASE_ADDR), &gpio));
ujson_t uj = ujson_ottf_console();
status_t s = command_processor(&uj);
LOG_INFO("status = %r", s);
return status_ok(s);
}