forked from rubenslte/android_kernel_samsung_msm8226
Merge "msm: vidc: write venus firmware version to smem" into msm-3.4
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
ff7be82cd3
@@ -1343,3 +1343,17 @@ int create_pkt_ssr_cmd(enum hal_ssr_trigger_type type,
|
||||
pkt->trigger_type = get_hfi_ssr_type(type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int create_pkt_cmd_sys_image_version(
|
||||
struct hfi_cmd_sys_get_property_packet *pkt)
|
||||
{
|
||||
if (!pkt) {
|
||||
dprintk(VIDC_ERR, "%s invalid param :%p\n", __func__, pkt);
|
||||
return -EINVAL;
|
||||
}
|
||||
pkt->size = sizeof(struct hfi_cmd_sys_get_property_packet);
|
||||
pkt->packet_type = HFI_CMD_SYS_GET_PROPERTY;
|
||||
pkt->num_properties = 1;
|
||||
pkt->rg_property_data[0] = HFI_PROPERTY_SYS_IMAGE_VERSION;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -89,4 +89,7 @@ int create_pkt_cmd_session_set_property(
|
||||
|
||||
int create_pkt_ssr_cmd(enum hal_ssr_trigger_type type,
|
||||
struct hfi_cmd_sys_test_ssr_packet *pkt);
|
||||
|
||||
int create_pkt_cmd_sys_image_version(
|
||||
struct hfi_cmd_sys_get_property_packet *pkt);
|
||||
#endif
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <mach/msm_smem.h>
|
||||
#include "vidc_hfi_helper.h"
|
||||
#include "vidc_hfi_io.h"
|
||||
#include "msm_vidc_debug.h"
|
||||
@@ -1089,6 +1090,44 @@ static void hfi_process_session_get_seq_hdr_done(
|
||||
callback(SESSION_GET_SEQ_HDR_DONE, &data_done);
|
||||
}
|
||||
|
||||
void hfi_process_sys_property_info(
|
||||
struct hfi_property_sys_image_version_info_type *pkt)
|
||||
{
|
||||
int i = 0;
|
||||
u32 smem_block_size = 0;
|
||||
u8 *smem_table_ptr;
|
||||
char version[256];
|
||||
const u32 smem_image_index_venus = 14 * 128;
|
||||
|
||||
if (!pkt || !pkt->string_size) {
|
||||
dprintk(VIDC_ERR, "%s: invalid param\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pkt->string_size < sizeof(version)) {
|
||||
/*
|
||||
* The version string returned by firmware includes null
|
||||
* characters at the start and in between. Replace the null
|
||||
* characters with space, to print the version info.
|
||||
*/
|
||||
for (i = 0; i < pkt->string_size; i++) {
|
||||
if (pkt->str_image_version[i] != '\0')
|
||||
version[i] = pkt->str_image_version[i];
|
||||
else
|
||||
version[i] = ' ';
|
||||
}
|
||||
version[i] = '\0';
|
||||
dprintk(VIDC_INFO, "F/W version: %s\n", version);
|
||||
}
|
||||
|
||||
smem_table_ptr = smem_get_entry(SMEM_IMAGE_VERSION_TABLE,
|
||||
&smem_block_size);
|
||||
if (smem_table_ptr &&
|
||||
((smem_image_index_venus + 128) <= smem_block_size))
|
||||
memcpy(smem_table_ptr + smem_image_index_venus,
|
||||
(u8 *)pkt->str_image_version, 128);
|
||||
}
|
||||
|
||||
u32 hfi_process_msg_packet(
|
||||
msm_vidc_callback callback, u32 device_id,
|
||||
struct vidc_hal_msg_pkt_hdr *msg_hdr)
|
||||
@@ -1121,6 +1160,11 @@ u32 hfi_process_msg_packet(
|
||||
(struct hfi_msg_sys_session_init_done_packet *)
|
||||
msg_hdr);
|
||||
break;
|
||||
case HFI_MSG_SYS_PROPERTY_INFO:
|
||||
hfi_process_sys_property_info(
|
||||
(struct hfi_property_sys_image_version_info_type *)
|
||||
msg_hdr);
|
||||
break;
|
||||
case HFI_MSG_SYS_SESSION_END_DONE:
|
||||
hfi_process_session_end_done(callback, device_id,
|
||||
(struct hfi_msg_sys_session_end_done_packet *)
|
||||
|
||||
@@ -1030,6 +1030,7 @@ static int venus_hfi_sys_set_idle_message(struct venus_hfi_device *device,
|
||||
static int venus_hfi_core_init(void *device)
|
||||
{
|
||||
struct hfi_cmd_sys_init_packet pkt;
|
||||
struct hfi_cmd_sys_get_property_packet version_pkt;
|
||||
int rc = 0;
|
||||
struct venus_hfi_device *dev;
|
||||
|
||||
@@ -1088,6 +1089,10 @@ static int venus_hfi_core_init(void *device)
|
||||
rc = -ENOTEMPTY;
|
||||
goto err_core_init;
|
||||
}
|
||||
rc = create_pkt_cmd_sys_image_version(&version_pkt);
|
||||
if (rc || venus_hfi_iface_cmdq_write(dev, &version_pkt))
|
||||
dprintk(VIDC_WARN, "Failed to send image version pkt to f/w");
|
||||
|
||||
return rc;
|
||||
err_core_init:
|
||||
disable_irq_nosync(dev->hal_data->irq);
|
||||
|
||||
@@ -335,7 +335,6 @@ struct hfi_uncompressed_plane_actual_constraints_info {
|
||||
#define HFI_MSG_SYS_OX_START \
|
||||
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_OX_OFFSET + HFI_MSG_START_OFFSET + 0x0000)
|
||||
#define HFI_MSG_SYS_PING_ACK (HFI_MSG_SYS_OX_START + 0x2)
|
||||
#define HFI_MSG_SYS_PROPERTY_INFO (HFI_MSG_SYS_OX_START + 0x3)
|
||||
#define HFI_MSG_SYS_SESSION_ABORT_DONE (HFI_MSG_SYS_OX_START + 0x4)
|
||||
|
||||
#define HFI_MSG_SESSION_OX_START \
|
||||
|
||||
@@ -197,6 +197,10 @@ struct hfi_buffer_info {
|
||||
(HFI_PROPERTY_SYS_COMMON_START + 0x003)
|
||||
#define HFI_PROPERTY_SYS_IDLE_INDICATOR \
|
||||
(HFI_PROPERTY_SYS_COMMON_START + 0x004)
|
||||
#define HFI_PROPERTY_SYS_CODEC_POWER_PLANE_CTRL \
|
||||
(HFI_PROPERTY_SYS_COMMON_START + 0x005)
|
||||
#define HFI_PROPERTY_SYS_IMAGE_VERSION \
|
||||
(HFI_PROPERTY_SYS_COMMON_START + 0x006)
|
||||
|
||||
#define HFI_PROPERTY_PARAM_COMMON_START \
|
||||
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_COMMON_OFFSET + 0x1000)
|
||||
@@ -615,6 +619,11 @@ struct hfi_resource_ocmem_requirement_info {
|
||||
struct hfi_resource_ocmem_requirement rg_requirements[1];
|
||||
};
|
||||
|
||||
struct hfi_property_sys_image_version_info_type {
|
||||
u32 string_size;
|
||||
u8 str_image_version[1];
|
||||
};
|
||||
|
||||
struct hfi_venc_config_advanced {
|
||||
u8 pipe2d;
|
||||
u8 hw_mode;
|
||||
@@ -703,6 +712,7 @@ struct hfi_mvc_buffer_lauout_descp_type {
|
||||
#define HFI_MSG_SYS_SESSION_INIT_DONE (HFI_MSG_SYS_COMMON_START + 0x6)
|
||||
#define HFI_MSG_SYS_SESSION_END_DONE (HFI_MSG_SYS_COMMON_START + 0x7)
|
||||
#define HFI_MSG_SYS_IDLE (HFI_MSG_SYS_COMMON_START + 0x8)
|
||||
#define HFI_MSG_SYS_PROPERTY_INFO (HFI_MSG_SYS_COMMON_START + 0xA)
|
||||
|
||||
#define HFI_MSG_SESSION_COMMON_START \
|
||||
(HFI_DOMAIN_BASE_COMMON + HFI_ARCH_COMMON_OFFSET + \
|
||||
|
||||
Reference in New Issue
Block a user