[Skiboot] [PATCH v2 1/9] core/pldm/test : pldm self test common
Christophe Lombard
clombard at linux.vnet.ibm.com
Tue May 10 23:48:40 AEST 2022
Le 07/05/2022 à 08:35, Abhishek Singh Tomar a écrit :
> The patch contain common file to be used for PLDM self test.
> It bypass hardware dependent code for PLDM implementation.
>
> Signed-off-by: Abhishek Singh Tomar<abhishek at linux.ibm.com>
> ---
> core/pldm/test/common/test_pldm-common.c | 187 +++++++++++++++++++++++
> 1 file changed, 187 insertions(+)
> create mode 100644 core/pldm/test/common/test_pldm-common.c
>
> diff --git a/core/pldm/test/common/test_pldm-common.c b/core/pldm/test/common/test_pldm-common.c
> new file mode 100644
> index 00000000..33671150
> --- /dev/null
> +++ b/core/pldm/test/common/test_pldm-common.c
> @@ -0,0 +1,187 @@
> +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
> +/*
> + * Copyright 2013-2019 IBM Corp.
> + */
> +
2022
> +
> +#include <stdio.h>
> +#include <string.h>
> +#include <stdarg.h>
> +#include <stdbool.h>
> +#include <types.h>
> +#include <stdint.h>
> +#include <stdlib.h>
> +#include <unistd.h>
> +#include <time.h>
> +#include <timer.h>
> +#include <ccan/list/list.h>
> +#include <ccan/short_types/short_types.h>
> +
> +#define __LITTLE_ENDIAN_BITFIELD
> +#define __TEST__
> +#define __SKIBOOT__
> +#define zalloc(bytes) calloc((bytes), 1)
> +static inline unsigned long mftb(void);
> +#include <timebase.h>
> +#include <op-panel.h>
> +#include <include/platform.h>
> +#include "../../pldm.h"
> +#include <include/pldm.h>
> +#include <ast.h>
> +#ifdef ARRAY_SIZE
> +#undef ARRAY_SIZE
> +#endif
> +
> +
> +#include <pldm/libpldm/bios_table.h>
> +#include <pldm/libpldm/bios_table.c>
> +#undef pr_fmt
> +#include "../../pldm-bios-requests.c"
> +#include <pldm/libpldm/base.c>
> +#include <pldm/libpldm/pdr.c>
> +#include <pldm/libpldm/bios.c>
> +#include <pldm/libpldm/platform.c>
> +#include <pldm/libpldm/utils.c>
> +#include <pldm/ibm/libpldm/file_io.c>
> +#include <pldm/libpldm/fru.c>
> +#include "../../pldm-file-io-requests.c"
> +#include "../../pldm-requester.c"
> +#include "../../pldm-common.c"
> +#include "../../pldm-responder.c"
> +#include "../../pldm-base-requests.c"
> +#include "../../pldm-watchdog.c"
> +#include "../../pldm-fru-requests.c"
> +#include "../../pldm-platform-requests.c"
> +#include "../../../device.c"
> +
> +
any reason on include all these files ?
> +
> +char __rodata_start[1], __rodata_end[1];
> +unsigned long tb_hz = 512000000;
> +struct dt_node *dt_root;
> +struct debug_descriptor debug_descriptor;
> +struct platform platform;
> +
> +int pldm_test_reply_request(void *request_msg, size_t request_len,
> + void **response_msg, size_t *response_len);
> +int pldm_test_verify_response(void *response_msg, size_t response_len);
> +
Rather than declaring these functions in each test file, we could
instead have a
common list, each test would record its type and the functions to call.
> +void time_wait_ms(unsigned long ms)
> +{
> + usleep(ms * 1000);
> +}
> +void init_timer(struct timer *t, timer_func_t expiry, void *data)
> +{
> + t->link.next = t->link.prev = NULL;
> + t->target = 0;
> + t->expiry = expiry;
> + t->user_data = data;
> + t->running = NULL;
> +}
> +uint64_t schedule_timer(struct timer *t, uint64_t how_long)
> +{
> + if (t != NULL)
> + return how_long;
> + return 0;
> +}
> +void cancel_timer(struct timer *t)
> +{
> + t->link.next = t->link.prev = NULL;
> +}
> +
> +static inline unsigned long mftb(void)
> +{
> + unsigned long clk;
> +
> + clk = clock();
> + return clk;
> +}
why do you declare these previous fonctions ?
> +
> +int ast_mctp_init(void (*fn)(uint8_t src_eid, bool tag_owner, uint8_t msg_tag, void *data,
> + void *msg, size_t len))
> +{
> + if (fn != NULL)
> + return PLDM_SUCCESS;
> + return PLDM_ERROR_INVALID_DATA;
> +}
> +
> +int ast_mctp_message_tx(uint8_t eid, uint8_t *msg, int len)
> +{
> + int ret;
> + uint8_t *pldm_received_msg = msg+1;
> + void *response_msg;
> + char *vmsg;
> + size_t response_len;
> +
> + /* TEST eid is BMC_ID */
> + if (eid != BMC_EID)
> + return OPAL_PARAMETER;
> +
You mix return code OPAL and PLDM
> + /* TEST Message TYPE: PLDM = 0x01 (000_0001b) as per MCTP - DSP0240 */
> + if (msg[0] != 0x01) {
> + printf("TEST : %s : request MCTP message type not set for PLDM\n", __func__);
> + return OPAL_PARAMETER;
> + }
> +
> + if (((struct pldm_msg *)pldm_received_msg)->hdr.request == PLDM_RESPONSE) {
> + ret = pldm_test_verify_response(pldm_received_msg, len-1);
> + if (ret != PLDM_SUCCESS)
> + return ret;
> + }
> +
> + /* Reply to requests */
> + else if (((struct pldm_msg *)pldm_received_msg)->hdr.request == PLDM_REQUEST) {
> + ret = pldm_test_verify_response(pldm_received_msg, len-1);
verify_request ?
what happens if pldm_test_verify_response() returns an error ?
> + ret = pldm_test_reply_request(pldm_received_msg, len-1,
> + &response_msg, &response_len);
> + if (ret != PLDM_SUCCESS)
> + return ret;
> + vmsg = malloc(response_len+1);
> + /* TYPE: PLDM = 0x01 (000_0001b) as per MCTP - DSP0240 */
> + vmsg[0] = 0x01;
> +
> + memcpy(vmsg + 1, response_msg, response_len);
> +
> + pldm_rx_message(BMC_EID, 0, 0, NULL, vmsg, response_len+1);
vmsg is not freed.
> + }
> +
> + return PLDM_SUCCESS;
> +}
> +
> +void ast_mctp_exit(void)
> +{
> + return;
> +}
> +
> +void lock_caller(struct lock *l, const char *caller)
> +{
> + (void)caller;
> + assert(!l->lock_val);
> + l->lock_val++;
> +}
> +
> +int _opal_queue_msg(enum opal_msg_type msg_type, void *data,
> + void (*consumed)(void *data, int status),
> + size_t params_size, const void *params)
> +{
> + (void)msg_type;
> + if (data != NULL || consumed != NULL)
> + return OPAL_PARAMETER;
> + if (params != NULL && params_size > 0)
> + return OPAL_PARAMETER;
> + return PLDM_SUCCESS;
> +
> +}
> +
> +
> +void unlock(struct lock *l)
> +{
> + assert(l->lock_val);
> + l->lock_val = 0;
> +}
> +
> +void prd_occ_reset(uint32_t proc)
> +{
> + (void)proc;
> +}
> +
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/skiboot/attachments/20220510/19fef791/attachment.htm>
More information about the Skiboot
mailing list