diff options
author | Holmes Chou <holmeschou@google.com> | 2023-04-26 02:48:45 +0000 |
---|---|---|
committer | Holmes Chou <holmeschou@google.com> | 2023-04-27 04:13:59 +0000 |
commit | 0c19c9fa8f8f829376ac7d07d14ae935f98c2c7e (patch) | |
tree | 770bbfc55b6f2c6ac533b47f6ba4838baa6b0736 | |
parent | ff0f8c5a37be4752feb06a5f50b02a20a26f0827 (diff) | |
download | lwis-0c19c9fa8f8f829376ac7d07d14ae935f98c2c7e.tar.gz |
LWIS: Remove fence enable flagandroid-u-beta-3_r0.3android-u-beta-3_r0.2android-u-beta-2.1_r0.4android-u-beta-2.1_r0.3android-u-beta-2.1_r0.2android-gs-raviole-5.10-u-beta3android-gs-raviole-5.10-u-beta2android-gs-pantah-5.10-u-beta2android-gs-bluejay-5.10-u-beta3android-gs-bluejay-5.10-u-beta2
Remove fence enable flag
Bug: 272148112
Test: GCA, CTS
Change-Id: Ibcc35fbbbff3151bb9587c7ae12b90bbe5ce310c
Signed-off-by: Holmes Chou <holmeschou@google.com>
-rw-r--r-- | Kbuild | 1 | ||||
-rw-r--r-- | lwis_commands.h | 6 | ||||
-rw-r--r-- | lwis_fence.h | 64 | ||||
-rw-r--r-- | lwis_ioctl.c | 97 |
4 files changed, 78 insertions, 90 deletions
@@ -35,7 +35,6 @@ endif ifeq ($(CONFIG_SOC_GS201), y) lwis-objs += platform/busan/lwis_platform_busan.o lwis-objs += platform/busan/lwis_platform_busan_dma.o -# ccflags-y += -DLWIS_FENCE_ENABLED -DLWIS_BTS_BLOCK_NAME_ENABLED endif # Device tree specific file diff --git a/lwis_commands.h b/lwis_commands.h index 7ca8e1a..ba0db3a 100644 --- a/lwis_commands.h +++ b/lwis_commands.h @@ -304,6 +304,7 @@ struct lwis_transaction_trigger_node { }; enum lwis_transaction_trigger_node_operator { + LWIS_TRIGGER_NODE_OPERATOR_INVALID = -1, LWIS_TRIGGER_NODE_OPERATOR_NONE, LWIS_TRIGGER_NODE_OPERATOR_AND, LWIS_TRIGGER_NODE_OPERATOR_OR, @@ -324,14 +325,11 @@ struct lwis_transaction_trigger_condition { #define LWIS_ID_INVALID (-1LL) #define LWIS_EVENT_COUNTER_ON_NEXT_OCCURRENCE (-1LL) #define LWIS_EVENT_COUNTER_EVERY_TIME (-2LL) + struct lwis_transaction_info { // Input int64_t trigger_event_id; int64_t trigger_event_counter; -#ifdef LWIS_FENCE_ENABLED - struct lwis_transaction_trigger_condition trigger_condition; - int32_t completion_fence_fd; -#endif size_t num_io_entries; struct lwis_io_entry *io_entries; bool run_in_event_context; diff --git a/lwis_fence.h b/lwis_fence.h index 52cf887..a79fc06 100644 --- a/lwis_fence.h +++ b/lwis_fence.h @@ -57,8 +57,6 @@ int ioctl_lwis_fence_create(struct lwis_device *lwis_dev, int32_t __user *msg); */ struct lwis_device *lwis_fence_get(int fd); -#ifdef LWIS_FENCE_ENABLED - /* Creates all fences that do not currently exist */ int lwis_initialize_transaction_fences(struct lwis_client *client, struct lwis_transaction *transaction); @@ -103,67 +101,5 @@ void lwis_fences_pending_signal_emit(struct lwis_device *lwis_device, void lwis_pending_fences_move_all(struct lwis_device *lwis_device, struct lwis_transaction *transaction, struct list_head *pending_fences, int error_code); -#else - -static inline int lwis_initialize_transaction_fences(struct lwis_client *client, - struct lwis_transaction *transaction) -{ - return 0; -} - -static inline bool lwis_triggered_by_condition(struct lwis_transaction *transaction) -{ - return false; -} - -static inline bool lwis_event_triggered_condition_ready(struct lwis_transaction *transaction, - struct lwis_transaction *weak_transaction, - int64_t event_id, int64_t event_counter) -{ - return false; -} - -static inline bool lwis_fence_triggered_condition_ready(struct lwis_transaction *transaction, - int fence_status) -{ - return false; -} - -static inline int lwis_parse_trigger_condition(struct lwis_client *client, - struct lwis_transaction *transaction) -{ - return 0; -} - -static inline int lwis_fence_signal(struct lwis_fence *lwis_fence, int status) -{ - return 0; -} - -static inline int lwis_add_completion_fence(struct lwis_client *client, - struct lwis_transaction *transaction) -{ - return 0; -} - -static inline struct lwis_fence_pending_signal * -lwis_fence_pending_signal_create(struct lwis_fence *fence) -{ - return NULL; -} - -static inline void lwis_fences_pending_signal_emit(struct lwis_device *lwis_device, - struct list_head *pending_fences) -{ - return; -} - -static inline void lwis_pending_fences_move_all(struct lwis_device *lwis_device, - struct lwis_transaction *transaction, - struct list_head *pending_fences, int error_code) -{ - return; -} -#endif #endif /* LWIS_IOCTL_H_ */ diff --git a/lwis_ioctl.c b/lwis_ioctl.c index 4e29627..221dd98 100644 --- a/lwis_ioctl.c +++ b/lwis_ioctl.c @@ -1157,9 +1157,6 @@ static int construct_transaction_from_cmd(struct lwis_client *client, uint32_t c ret = -EFAULT; goto error_free_transaction; } -#ifdef LWIS_FENCE_ENABLED - memcpy(&k_transaction->info, &k_info_v1.info, sizeof(k_transaction->info)); -#else k_transaction->info.trigger_event_id = k_info_v1.info.trigger_event_id; k_transaction->info.trigger_event_counter = k_info_v1.info.trigger_event_counter; k_transaction->info.num_io_entries = k_info_v1.info.num_io_entries; @@ -1176,8 +1173,9 @@ static int construct_transaction_from_cmd(struct lwis_client *client, uint32_t c k_info_v1.info.submission_timestamp_ns; k_transaction->info.trigger_condition.num_nodes = 0; + k_transaction->info.trigger_condition.operator_type = + LWIS_TRIGGER_NODE_OPERATOR_INVALID; k_transaction->info.completion_fence_fd = LWIS_NO_COMPLETION_FENCE; -#endif } else { dev_err(lwis_dev->dev, "Invalid command id for transaction\n"); ret = -EINVAL; @@ -1206,11 +1204,36 @@ error_free_transaction: return ret; } +static int copy_transaction_info_v2_to_v1_locked(struct lwis_transaction_info_v2 *info_v2, + struct lwis_transaction_info *info_v1) +{ + if (!info_v2 || !info_v1) { + return -EINVAL; + } + + info_v1->trigger_event_id = info_v2->trigger_event_id; + info_v1->trigger_event_counter = info_v2->trigger_event_counter; + info_v1->num_io_entries = info_v2->num_io_entries; + info_v1->io_entries = info_v2->io_entries; + info_v1->run_in_event_context = info_v2->run_in_event_context; + info_v1->reserved = info_v2->reserved; + info_v1->emit_success_event_id = info_v2->emit_success_event_id; + info_v1->emit_error_event_id = info_v2->emit_error_event_id; + info_v1->is_level_triggered = info_v2->is_level_triggered; + info_v1->id = info_v2->id; + info_v1->current_trigger_event_counter = info_v2->current_trigger_event_counter; + info_v1->submission_timestamp_ns = info_v2->submission_timestamp_ns; + + return 0; +} + static int cmd_transaction_submit(struct lwis_client *client, struct lwis_cmd_pkt *header, struct lwis_cmd_pkt __user *u_msg) { struct lwis_transaction *k_transaction = NULL; - struct lwis_cmd_transaction_info_v2 k_transaction_info; + struct lwis_cmd_transaction_info k_cmd_transaction_info_v1; + struct lwis_cmd_transaction_info_v2 k_cmd_transaction_info_v2; + struct lwis_cmd_pkt *resp_header = NULL; struct lwis_device *lwis_dev = client->lwis_dev; int ret = 0; unsigned long flags; @@ -1234,18 +1257,33 @@ static int cmd_transaction_submit(struct lwis_client *client, struct lwis_cmd_pk spin_lock_irqsave(&client->transaction_lock, flags); ret = lwis_transaction_submit_locked(client, k_transaction); - k_transaction_info.info = k_transaction->info; + if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_SUBMIT_V2) { + resp_header = &k_cmd_transaction_info_v2.header; + k_cmd_transaction_info_v2.info = k_transaction->info; + } else if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_SUBMIT) { + resp_header = &k_cmd_transaction_info_v1.header; + ret = copy_transaction_info_v2_to_v1_locked(&k_transaction->info, + &k_cmd_transaction_info_v1.info); + } spin_unlock_irqrestore(&client->transaction_lock, flags); if (ret) { - k_transaction_info.info.id = LWIS_ID_INVALID; + k_cmd_transaction_info_v1.info.id = LWIS_ID_INVALID; + k_cmd_transaction_info_v2.info.id = LWIS_ID_INVALID; lwis_transaction_free(lwis_dev, k_transaction); } - k_transaction_info.header.cmd_id = header->cmd_id; - k_transaction_info.header.next = header->next; - k_transaction_info.header.ret_code = ret; - return copy_pkt_to_user(lwis_dev, u_msg, (void *)&k_transaction_info, - sizeof(k_transaction_info)); + resp_header->cmd_id = header->cmd_id; + resp_header->next = header->next; + resp_header->ret_code = ret; + if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_SUBMIT_V2) { + return copy_pkt_to_user(lwis_dev, u_msg, (void *)&k_cmd_transaction_info_v2, + sizeof(k_cmd_transaction_info_v2)); + } else if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_SUBMIT) { + return copy_pkt_to_user(lwis_dev, u_msg, (void *)&k_cmd_transaction_info_v1, + sizeof(k_cmd_transaction_info_v1)); + } + + ret = -EINVAL; err_exit: header->ret_code = ret; @@ -1280,7 +1318,9 @@ static int cmd_transaction_replace(struct lwis_client *client, struct lwis_cmd_p struct lwis_cmd_pkt __user *u_msg) { struct lwis_transaction *k_transaction = NULL; - struct lwis_cmd_transaction_info_v2 k_transaction_info; + struct lwis_cmd_transaction_info k_cmd_transaction_info_v1; + struct lwis_cmd_transaction_info_v2 k_cmd_transaction_info_v2; + struct lwis_cmd_pkt *resp_header = NULL; struct lwis_device *lwis_dev = client->lwis_dev; int ret = 0; unsigned long flags; @@ -1298,18 +1338,33 @@ static int cmd_transaction_replace(struct lwis_client *client, struct lwis_cmd_p spin_lock_irqsave(&client->transaction_lock, flags); ret = lwis_transaction_replace_locked(client, k_transaction); - k_transaction_info.info = k_transaction->info; + if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_REPLACE_V2) { + resp_header = &k_cmd_transaction_info_v2.header; + k_cmd_transaction_info_v2.info = k_transaction->info; + } else if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_REPLACE) { + resp_header = &k_cmd_transaction_info_v1.header; + ret = copy_transaction_info_v2_to_v1_locked(&k_transaction->info, + &k_cmd_transaction_info_v1.info); + } spin_unlock_irqrestore(&client->transaction_lock, flags); if (ret) { - k_transaction_info.info.id = LWIS_ID_INVALID; + k_cmd_transaction_info_v1.info.id = LWIS_ID_INVALID; + k_cmd_transaction_info_v2.info.id = LWIS_ID_INVALID; lwis_transaction_free(lwis_dev, k_transaction); } - k_transaction_info.header.cmd_id = header->cmd_id; - k_transaction_info.header.next = header->next; - k_transaction_info.header.ret_code = ret; - return copy_pkt_to_user(lwis_dev, u_msg, (void *)&k_transaction_info, - sizeof(k_transaction_info)); + resp_header->cmd_id = header->cmd_id; + resp_header->next = header->next; + resp_header->ret_code = ret; + if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_REPLACE_V2) { + return copy_pkt_to_user(lwis_dev, u_msg, (void *)&k_cmd_transaction_info_v2, + sizeof(k_cmd_transaction_info_v2)); + } else if (header->cmd_id == LWIS_CMD_ID_TRANSACTION_REPLACE) { + return copy_pkt_to_user(lwis_dev, u_msg, (void *)&k_cmd_transaction_info_v1, + sizeof(k_cmd_transaction_info_v1)); + } + + ret = -EINVAL; err_exit: header->ret_code = ret; @@ -1807,7 +1862,7 @@ static int handle_cmd_pkt(struct lwis_client *lwis_client, struct lwis_cmd_pkt * mutex_unlock(&lwis_client->lock); break; default: - dev_err_ratelimited(lwis_dev->dev, "Unknown command id\n"); + dev_err_ratelimited(lwis_dev->dev, "Unknown command id 0x%x\n", header->cmd_id); header->ret_code = -ENOSYS; ret = copy_pkt_to_user(lwis_dev, user_msg, (void *)header, sizeof(*header)); } |