Merge "msm: vidc: write venus firmware version to smem" into msm-3.4

This commit is contained in:
Linux Build Service Account
2013-07-10 06:35:08 -07:00
committed by Gerrit - the friendly Code Review server
6 changed files with 76 additions and 1 deletions
@@ -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 + \