diff --git a/doc/classic_cli_manpage.rst b/doc/classic_cli_manpage.rst index 9a455b08a..5d6b7ef05 100644 --- a/doc/classic_cli_manpage.rst +++ b/doc/classic_cli_manpage.rst @@ -865,11 +865,15 @@ The schematic of the Xilinx DLC 5 was published in `a Xilinx guide = 0 && index < 256) { + request_enable = RAIDEN_DEBUG_SPI_REQ_ENABLE; + parameter = index; + } else if (!strcasecmp(target_str, "ap")) request_enable = get_ap_request_type(cfg); else if (!strcasecmp(target_str, "ec")) request_enable = RAIDEN_DEBUG_SPI_REQ_ENABLE_EC; else { msg_perr("Invalid target: %s\n", target_str); - request_enable = -1; + ret = 1; } } free(target_str); - msg_pinfo("Raiden target: %d\n", request_enable); + if (ret == 0) { + msg_pinfo("Raiden target: %d,%d\n", request_enable, parameter); - return request_enable; + *request = request_enable; + *request_parameter = parameter; + } + return ret; } static void free_dev_list(struct usb_device **dev_lst) @@ -1493,10 +1507,12 @@ static int raiden_debug_spi_init(const struct programmer_cfg *cfg) bool found = false; int ret; - int request_enable = get_target(cfg); - if (request_enable < 0) { + uint8_t request_enable; + uint16_t request_parameter; + ret = decode_programmer_param(cfg, &request_enable, &request_parameter); + if (ret != 0) { free(serial); - return 1; + return ret; } usb_match_init(cfg, &match); @@ -1588,7 +1604,7 @@ loop_end: LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_INTERFACE, request_enable, - 0, + request_parameter, device->interface_descriptor->bInterfaceNumber, NULL, 0, diff --git a/tests/raiden_debug_spi.c b/tests/raiden_debug_spi.c index 5c79a9095..4f0bdd3f9 100644 --- a/tests/raiden_debug_spi.c +++ b/tests/raiden_debug_spi.c @@ -104,15 +104,100 @@ void raiden_debug_basic_lifecycle_test_success(void **state) .fallback_open_state = &raiden_debug_fallback_open_state, }; - /* - * 12 is the length of programmer param string for 3-digit address. - * Address can be max 3-digit because it needs to fit into uint8_t. - */ - char raiden_debug_param[12]; - snprintf(raiden_debug_param, 12, "address=%d", USB_DEVICE_ADDRESS); + char raiden_debug_param[32]; + snprintf(raiden_debug_param, sizeof(raiden_debug_param), + "address=%d", USB_DEVICE_ADDRESS); + run_basic_lifecycle(state, &raiden_debug_io, &programmer_raiden_debug_spi, raiden_debug_param); +} + +void raiden_debug_targetAP_basic_lifecycle_test_success(void **state) +{ + struct io_mock_fallback_open_state raiden_debug_fallback_open_state = { + .noc = 0, + .paths = { NULL }, + }; + const struct io_mock raiden_debug_io = { + .libusb_get_device_list = raiden_debug_libusb_get_device_list, + .libusb_free_device_list = raiden_debug_libusb_free_device_list, + .libusb_get_device_descriptor = raiden_debug_libusb_get_device_descriptor, + .libusb_get_config_descriptor = raiden_debug_libusb_get_config_descriptor, + .libusb_free_config_descriptor = raiden_debug_libusb_free_config_descriptor, + .fallback_open_state = &raiden_debug_fallback_open_state, + }; + + char raiden_debug_param[32]; + snprintf(raiden_debug_param, sizeof(raiden_debug_param), + "address=%d,target=AP", USB_DEVICE_ADDRESS); + run_basic_lifecycle(state, &raiden_debug_io, &programmer_raiden_debug_spi, raiden_debug_param); +} + +void raiden_debug_targetEC_basic_lifecycle_test_success(void **state) +{ + struct io_mock_fallback_open_state raiden_debug_fallback_open_state = { + .noc = 0, + .paths = { NULL }, + }; + const struct io_mock raiden_debug_io = { + .libusb_get_device_list = raiden_debug_libusb_get_device_list, + .libusb_free_device_list = raiden_debug_libusb_free_device_list, + .libusb_get_device_descriptor = raiden_debug_libusb_get_device_descriptor, + .libusb_get_config_descriptor = raiden_debug_libusb_get_config_descriptor, + .libusb_free_config_descriptor = raiden_debug_libusb_free_config_descriptor, + .fallback_open_state = &raiden_debug_fallback_open_state, + }; + + char raiden_debug_param[32]; + snprintf(raiden_debug_param, sizeof(raiden_debug_param), + "address=%d,target=ec", USB_DEVICE_ADDRESS); + run_basic_lifecycle(state, &raiden_debug_io, &programmer_raiden_debug_spi, raiden_debug_param); +} + +void raiden_debug_target0_basic_lifecycle_test_success(void **state) +{ + struct io_mock_fallback_open_state raiden_debug_fallback_open_state = { + .noc = 0, + .paths = { NULL }, + }; + const struct io_mock raiden_debug_io = { + .libusb_get_device_list = raiden_debug_libusb_get_device_list, + .libusb_free_device_list = raiden_debug_libusb_free_device_list, + .libusb_get_device_descriptor = raiden_debug_libusb_get_device_descriptor, + .libusb_get_config_descriptor = raiden_debug_libusb_get_config_descriptor, + .libusb_free_config_descriptor = raiden_debug_libusb_free_config_descriptor, + .fallback_open_state = &raiden_debug_fallback_open_state, + }; + + char raiden_debug_param[32]; + snprintf(raiden_debug_param, sizeof(raiden_debug_param), + "address=%d,target=0", USB_DEVICE_ADDRESS); + run_basic_lifecycle(state, &raiden_debug_io, &programmer_raiden_debug_spi, raiden_debug_param); +} + +void raiden_debug_target1_basic_lifecycle_test_success(void **state) +{ + struct io_mock_fallback_open_state raiden_debug_fallback_open_state = { + .noc = 0, + .paths = { NULL }, + }; + const struct io_mock raiden_debug_io = { + .libusb_get_device_list = raiden_debug_libusb_get_device_list, + .libusb_free_device_list = raiden_debug_libusb_free_device_list, + .libusb_get_device_descriptor = raiden_debug_libusb_get_device_descriptor, + .libusb_get_config_descriptor = raiden_debug_libusb_get_config_descriptor, + .libusb_free_config_descriptor = raiden_debug_libusb_free_config_descriptor, + .fallback_open_state = &raiden_debug_fallback_open_state, + }; + + char raiden_debug_param[32]; + snprintf(raiden_debug_param, sizeof(raiden_debug_param), + "address=%d,target=1", USB_DEVICE_ADDRESS); run_basic_lifecycle(state, &raiden_debug_io, &programmer_raiden_debug_spi, raiden_debug_param); } #else SKIP_TEST(raiden_debug_basic_lifecycle_test_success) + SKIP_TEST(raiden_debug_targetAP_basic_lifecycle_test_success) + SKIP_TEST(raiden_debug_targetEC_basic_lifecycle_test_success) + SKIP_TEST(raiden_debug_target0_basic_lifecycle_test_success) + SKIP_TEST(raiden_debug_target1_basic_lifecycle_test_success) #endif /* CONFIG_RAIDEN_DEBUG_SPI */ diff --git a/tests/tests.c b/tests/tests.c index 8b4ad037d..35bd59986 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -463,6 +463,10 @@ int main(int argc, char *argv[]) cmocka_unit_test(dummy_all_buses_test_success), cmocka_unit_test(nicrealtek_basic_lifecycle_test_success), cmocka_unit_test(raiden_debug_basic_lifecycle_test_success), + cmocka_unit_test(raiden_debug_targetAP_basic_lifecycle_test_success), + cmocka_unit_test(raiden_debug_targetEC_basic_lifecycle_test_success), + cmocka_unit_test(raiden_debug_target0_basic_lifecycle_test_success), + cmocka_unit_test(raiden_debug_target1_basic_lifecycle_test_success), cmocka_unit_test(dediprog_basic_lifecycle_test_success), cmocka_unit_test(linux_mtd_probe_lifecycle_test_success), cmocka_unit_test(linux_spi_probe_lifecycle_test_success), diff --git a/tests/tests.h b/tests/tests.h index e273e1dbf..3841d20c9 100644 --- a/tests/tests.h +++ b/tests/tests.h @@ -54,6 +54,10 @@ void dummy_null_prog_param_test_success(void **state); void dummy_all_buses_test_success(void **state); void nicrealtek_basic_lifecycle_test_success(void **state); void raiden_debug_basic_lifecycle_test_success(void **state); +void raiden_debug_targetAP_basic_lifecycle_test_success(void **state); +void raiden_debug_targetEC_basic_lifecycle_test_success(void **state); +void raiden_debug_target0_basic_lifecycle_test_success(void **state); +void raiden_debug_target1_basic_lifecycle_test_success(void **state); void dediprog_basic_lifecycle_test_success(void **state); void linux_mtd_probe_lifecycle_test_success(void **state); void linux_spi_probe_lifecycle_test_success(void **state);