diff options
Diffstat (limited to 'mali_kbase/csf/mali_kbase_csf_tl_reader.c')
-rw-r--r-- | mali_kbase/csf/mali_kbase_csf_tl_reader.c | 105 |
1 files changed, 38 insertions, 67 deletions
diff --git a/mali_kbase/csf/mali_kbase_csf_tl_reader.c b/mali_kbase/csf/mali_kbase_csf_tl_reader.c index ce50683..06163e5 100644 --- a/mali_kbase/csf/mali_kbase_csf_tl_reader.c +++ b/mali_kbase/csf/mali_kbase_csf_tl_reader.c @@ -81,15 +81,13 @@ static int kbase_csf_tl_debugfs_poll_interval_write(void *data, u64 val) return 0; } -DEFINE_DEBUGFS_ATTRIBUTE(kbase_csf_tl_poll_interval_fops, - kbase_csf_tl_debugfs_poll_interval_read, - kbase_csf_tl_debugfs_poll_interval_write, "%llu\n"); +DEFINE_DEBUGFS_ATTRIBUTE(kbase_csf_tl_poll_interval_fops, kbase_csf_tl_debugfs_poll_interval_read, + kbase_csf_tl_debugfs_poll_interval_write, "%llu\n"); void kbase_csf_tl_reader_debugfs_init(struct kbase_device *kbdev) { - debugfs_create_file("csf_tl_poll_interval_in_ms", 0644, - kbdev->debugfs_instr_directory, kbdev, - &kbase_csf_tl_poll_interval_fops); + debugfs_create_file("csf_tl_poll_interval_in_ms", 0644, kbdev->debugfs_instr_directory, + kbdev, &kbase_csf_tl_poll_interval_fops); } #endif @@ -100,20 +98,18 @@ void kbase_csf_tl_reader_debugfs_init(struct kbase_device *kbdev) * @msg_buf_start: Start of the message. * @msg_buf_end: End of the message buffer. */ -static void tl_reader_overflow_notify( - const struct kbase_csf_tl_reader *self, - u8 *const msg_buf_start, - u8 *const msg_buf_end) +static void tl_reader_overflow_notify(const struct kbase_csf_tl_reader *self, + u8 *const msg_buf_start, u8 *const msg_buf_end) { struct kbase_device *kbdev = self->kbdev; - struct kbase_csffw_tl_message message = {0}; + struct kbase_csffw_tl_message message = { 0 }; /* Reuse the timestamp and cycle count from current event if possible */ if (msg_buf_start + sizeof(message) <= msg_buf_end) memcpy(&message, msg_buf_start, sizeof(message)); - KBASE_TLSTREAM_TL_KBASE_CSFFW_TLSTREAM_OVERFLOW( - kbdev, message.timestamp, message.cycle_counter); + KBASE_TLSTREAM_TL_KBASE_CSFFW_TLSTREAM_OVERFLOW(kbdev, message.timestamp, + message.cycle_counter); } /** @@ -124,9 +120,7 @@ static void tl_reader_overflow_notify( * * Return: True, if an overflow has happened, False otherwise. */ -static bool tl_reader_overflow_check( - struct kbase_csf_tl_reader *self, - u16 event_id) +static bool tl_reader_overflow_check(struct kbase_csf_tl_reader *self, u16 event_id) { struct kbase_device *kbdev = self->kbdev; bool has_overflow = false; @@ -135,13 +129,11 @@ static bool tl_reader_overflow_check( * after reset, we should skip overflow check when reset happened. */ if (event_id != 0) { - has_overflow = self->got_first_event - && self->expected_event_id != event_id; + has_overflow = self->got_first_event && self->expected_event_id != event_id; if (has_overflow) - dev_warn(kbdev->dev, - "CSFFW overflow, event_id: %u, expected: %u.", - event_id, self->expected_event_id); + dev_warn(kbdev->dev, "CSFFW overflow, event_id: %u, expected: %u.", + event_id, self->expected_event_id); } self->got_first_event = true; @@ -175,7 +167,7 @@ int kbase_csf_tl_reader_flush_buffer(struct kbase_csf_tl_reader *self) struct kbase_device *kbdev = self->kbdev; struct kbase_tlstream *stream = self->stream; - u8 *read_buffer = self->read_buffer; + u8 *read_buffer = self->read_buffer; const size_t read_buffer_size = sizeof(self->read_buffer); u32 bytes_read; @@ -196,13 +188,12 @@ int kbase_csf_tl_reader_flush_buffer(struct kbase_csf_tl_reader *self) /* Copying the whole buffer in a single shot. We assume * that the buffer will not contain partially written messages. */ - bytes_read = kbase_csf_firmware_trace_buffer_read_data( - self->trace_buffer, read_buffer, read_buffer_size); + bytes_read = kbase_csf_firmware_trace_buffer_read_data(self->trace_buffer, read_buffer, + read_buffer_size); csffw_data_begin = read_buffer; - csffw_data_end = read_buffer + bytes_read; + csffw_data_end = read_buffer + bytes_read; - for (csffw_data_it = csffw_data_begin; - csffw_data_it < csffw_data_end;) { + for (csffw_data_it = csffw_data_begin; csffw_data_it < csffw_data_end;) { u32 event_header; u16 event_id; u16 event_size; @@ -211,30 +202,25 @@ int kbase_csf_tl_reader_flush_buffer(struct kbase_csf_tl_reader *self) /* Can we safely read event_id? */ if (csffw_data_it + sizeof(event_header) > csffw_data_end) { - dev_warn( - kbdev->dev, - "Unable to parse CSFFW tracebuffer event header."); + dev_warn(kbdev->dev, "Unable to parse CSFFW tracebuffer event header."); ret = -EBUSY; break; } /* Read and parse the event header. */ memcpy(&event_header, csffw_data_it, sizeof(event_header)); - event_id = (event_header >> 0) & 0xFFFF; + event_id = (event_header >> 0) & 0xFFFF; event_size = (event_header >> 16) & 0xFFFF; csffw_data_it += sizeof(event_header); /* Detect if an overflow has happened. */ if (tl_reader_overflow_check(self, event_id)) - tl_reader_overflow_notify(self, - csffw_data_it, - csffw_data_end); + tl_reader_overflow_notify(self, csffw_data_it, csffw_data_end); /* Can we safely read the message body? */ if (csffw_data_it + event_size > csffw_data_end) { - dev_warn(kbdev->dev, - "event_id: %u, can't read with event_size: %u.", - event_id, event_size); + dev_warn(kbdev->dev, "event_id: %u, can't read with event_size: %u.", + event_id, event_size); ret = -EBUSY; break; } @@ -242,14 +228,13 @@ int kbase_csf_tl_reader_flush_buffer(struct kbase_csf_tl_reader *self) /* Convert GPU timestamp to CPU timestamp. */ { struct kbase_csffw_tl_message *msg = - (struct kbase_csffw_tl_message *) csffw_data_it; + (struct kbase_csffw_tl_message *)csffw_data_it; msg->timestamp = kbase_backend_time_convert_gpu_to_cpu(kbdev, msg->timestamp); } /* Copy the message out to the tl_stream. */ - buffer = kbase_tlstream_msgbuf_acquire( - stream, event_size, &acq_flags); + buffer = kbase_tlstream_msgbuf_acquire(stream, event_size, &acq_flags); kbasep_serialize_bytes(buffer, 0, csffw_data_it, event_size); kbase_tlstream_msgbuf_release(stream, acq_flags); csffw_data_it += event_size; @@ -268,8 +253,7 @@ static void kbasep_csf_tl_reader_read_callback(struct timer_list *timer) kbase_csf_tl_reader_flush_buffer(self); - rcode = mod_timer(&self->read_timer, - jiffies + msecs_to_jiffies(self->timer_interval)); + rcode = mod_timer(&self->read_timer, jiffies + msecs_to_jiffies(self->timer_interval)); CSTD_UNUSED(rcode); } @@ -286,9 +270,7 @@ static void kbasep_csf_tl_reader_read_callback(struct timer_list *timer) * * Return: Zero on success, -1 otherwise. */ -static int tl_reader_init_late( - struct kbase_csf_tl_reader *self, - struct kbase_device *kbdev) +static int tl_reader_init_late(struct kbase_csf_tl_reader *self, struct kbase_device *kbdev) { struct firmware_trace_buffer *tb; size_t hdr_size = 0; @@ -298,8 +280,8 @@ static int tl_reader_init_late( return 0; tb = kbase_csf_firmware_get_trace_buffer(kbdev, KBASE_CSFFW_TIMELINE_BUF_NAME); - hdr = kbase_csf_firmware_get_timeline_metadata( - kbdev, KBASE_CSFFW_TIMELINE_HEADER_NAME, &hdr_size); + hdr = kbase_csf_firmware_get_timeline_metadata(kbdev, KBASE_CSFFW_TIMELINE_HEADER_NAME, + &hdr_size); if (!tb) { dev_warn(kbdev->dev, "'%s' tracebuffer is not present in the firmware image.", @@ -308,10 +290,8 @@ static int tl_reader_init_late( } if (!hdr) { - dev_warn( - kbdev->dev, - "'%s' timeline metadata is not present in the firmware image.", - KBASE_CSFFW_TIMELINE_HEADER_NAME); + dev_warn(kbdev->dev, "'%s' timeline metadata is not present in the firmware image.", + KBASE_CSFFW_TIMELINE_HEADER_NAME); return -1; } @@ -334,25 +314,20 @@ static int tl_reader_init_late( * * Return: 0 on success, or negative error code for failure. */ -static int tl_reader_update_enable_bit( - struct kbase_csf_tl_reader *self, - bool value) +static int tl_reader_update_enable_bit(struct kbase_csf_tl_reader *self, bool value) { int err = 0; - err = kbase_csf_firmware_trace_buffer_update_trace_enable_bit( - self->trace_buffer, 0, value); + err = kbase_csf_firmware_trace_buffer_update_trace_enable_bit(self->trace_buffer, 0, value); return err; } -void kbase_csf_tl_reader_init(struct kbase_csf_tl_reader *self, - struct kbase_tlstream *stream) +void kbase_csf_tl_reader_init(struct kbase_csf_tl_reader *self, struct kbase_tlstream *stream) { self->timer_interval = KBASE_CSF_TL_READ_INTERVAL_DEFAULT; - kbase_timer_setup(&self->read_timer, - kbasep_csf_tl_reader_read_callback); + kbase_timer_setup(&self->read_timer, kbasep_csf_tl_reader_read_callback); self->stream = stream; @@ -372,8 +347,7 @@ void kbase_csf_tl_reader_term(struct kbase_csf_tl_reader *self) del_timer_sync(&self->read_timer); } -int kbase_csf_tl_reader_start(struct kbase_csf_tl_reader *self, - struct kbase_device *kbdev) +int kbase_csf_tl_reader_start(struct kbase_csf_tl_reader *self, struct kbase_device *kbdev) { int rcode; @@ -383,9 +357,7 @@ int kbase_csf_tl_reader_start(struct kbase_csf_tl_reader *self, if (tl_reader_init_late(self, kbdev)) { #if IS_ENABLED(CONFIG_MALI_NO_MALI) - dev_warn( - kbdev->dev, - "CSFFW timeline is not available for MALI_NO_MALI builds!"); + dev_warn(kbdev->dev, "CSFFW timeline is not available for MALI_NO_MALI builds!"); return 0; #else return -EINVAL; @@ -405,8 +377,7 @@ int kbase_csf_tl_reader_start(struct kbase_csf_tl_reader *self, if (rcode != 0) return rcode; - rcode = mod_timer(&self->read_timer, - jiffies + msecs_to_jiffies(self->timer_interval)); + rcode = mod_timer(&self->read_timer, jiffies + msecs_to_jiffies(self->timer_interval)); return 0; } |