Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c25a6835 authored by Venkat Chinta's avatar Venkat Chinta Committed by Gerrit - the friendly Code Review server
Browse files

msm: camera: vfe: Add support for BUS RD



This change adds register offsets to support BUS RD in VFE
480 hardware. This change also removes unnecessary and
unused fields from BUS RD client register offset struct.

Change-Id: I799f10e3f9f7c27b55d789fcb374de4a25f3ba6a
Signed-off-by: default avatarVenkat Chinta <vchinta@codeaurora.org>
parent 9aff11cf
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */

#ifndef _CAM_VFE175_130_H_
@@ -354,12 +354,11 @@ static struct cam_vfe_bus_rd_ver1_hw_info vfe175_130_bus_rd_hw_info = {
		{
			.cfg                      = 0x00005050,
			.image_addr               = 0x00005058,
			.buffer_width_cfg         = 0x0000505C,
			.unpacker_cfg             = 0x00005064,
			.buf_size                 = 0x0000505C,
			.stride                   = 0x00005060,
			.burst_limit              = 0x00005080,
			.unpacker_cfg             = 0x00005064,
			.latency_buf_allocation   = 0x00005078,
			.ubwc_regs                = NULL,
			.burst_limit              = 0x00005080,
		},
	},
	.num_bus_rd_resc = 1,
@@ -1093,7 +1092,7 @@ struct cam_vfe_hw_info cam_vfe175_130_hw_info = {
	.bus_version                   = CAM_VFE_BUS_VER_2_0,
	.bus_hw_info                   = &vfe175_130_bus_hw_info,

	.bus_rd_version                = CAM_VFE_BUS_VER_2_0,
	.bus_rd_version                = CAM_VFE_BUS_RD_VER_1_0,
	.bus_rd_hw_info                = &vfe175_130_bus_rd_hw_info,

	.top_version                   = CAM_VFE_TOP_VER_2_0,
+50 −0
Original line number Diff line number Diff line
@@ -980,12 +980,62 @@ static struct cam_vfe_bus_ver3_hw_info vfe480_bus_hw_info = {
	},
};

static struct cam_irq_register_set vfe480_bus_rd_irq_reg[1] = {
	{
		.mask_reg_offset   = 0x0000A810,
		.clear_reg_offset  = 0x0000A814,
		.status_reg_offset = 0x0000A81C,
	},
};

static struct cam_vfe_bus_rd_ver1_hw_info vfe480_bus_rd_hw_info = {
	.common_reg = {
		.hw_version                   = 0x0000A800,
		.hw_capability                = 0x0000A804,
		.sw_reset                     = 0x0000A808,
		.cgc_ovd                      = 0x0000A80C,
		.pwr_iso_cfg                  = 0x0000A834,
		.input_if_cmd                 = 0x0000A820,
		.test_bus_ctrl                = 0x0000A848,
		.irq_reg_info = {
			.num_registers        = 1,
			.irq_reg_set          = vfe480_bus_rd_irq_reg,
			.global_clear_offset  = 0x0000A818,
			.global_clear_bitmask = 0x00000001,
		},
	},
	.num_client = 1,
	.bus_client_reg = {
		/* BUS Client 0 */
		{
			.cfg                      = 0x0000A850,
			.image_addr               = 0x0000A858,
			.buf_size                 = 0x0000A85C,
			.stride                   = 0x0000A860,
			.unpacker_cfg             = 0x0000A864,
			.latency_buf_allocation   = 0x0000A878,
			.burst_limit              = 0x0000A880,
		},
	},
	.num_bus_rd_resc = 1,
	.vfe_bus_rd_hw_info = {
		{
			.vfe_bus_rd_type = CAM_VFE_BUS_RD_VER1_VFE_BUSRD_RDI0,
			.max_width     = -1,
			.max_height    = -1,
		},
	},
};

struct cam_vfe_hw_info cam_vfe480_hw_info = {
	.irq_reg_info                  = &vfe175_top_irq_reg_info,

	.bus_version                   = CAM_VFE_BUS_VER_3_0,
	.bus_hw_info                   = &vfe480_bus_hw_info,

	.bus_rd_version                = CAM_VFE_BUS_RD_VER_1_0,
	.bus_rd_hw_info                = &vfe480_bus_rd_hw_info,

	.top_version                   = CAM_VFE_TOP_VER_2_0,
	.top_hw_info                   = &vfe175_top_hw_info,

+13 −5
Original line number Diff line number Diff line
@@ -32,18 +32,26 @@ int cam_vfe_bus_init(uint32_t bus_version,
				bus_hw_info, vfe_irq_controller, vfe_bus);
			break;
		default:
			CAM_ERR(CAM_ISP, "Unsupported Bus Version %x",
			CAM_ERR(CAM_ISP, "Unsupported Bus WR Version 0x%x",
				bus_version);
			break;
		}
		break;
	case BUS_TYPE_RD:
		switch (bus_version) {
		case CAM_VFE_BUS_RD_VER_1_0:
			/* Call vfe bus rd init function */
			rc = cam_vfe_bus_rd_ver1_init(soc_info, hw_intf,
				bus_hw_info, vfe_irq_controller, vfe_bus);
			break;
		default:
		CAM_ERR(CAM_ISP, "Unsupported Bus type %x", bus_type);
			CAM_ERR(CAM_ISP, "Unsupported Bus RD Version 0x%x",
				bus_version);
			break;
		}
		break;
	default:
		CAM_ERR(CAM_ISP, "Unsupported Bus type %d", bus_type);
		break;
	}

+3 −4
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */

#include <linux/ratelimit.h>
@@ -318,7 +318,7 @@ static int cam_vfe_bus_start_rm(struct cam_isp_resource_node *rm_res)
	CAM_DBG(CAM_ISP, "min_vbi: 0x%x", rm_data->min_vbi);

	/* Write All the values*/
	offset = rm_data->hw_regs->buffer_width_cfg;
	offset = rm_data->hw_regs->buf_size;
	buf_size = ((rm_data->width)&(0x0000FFFF)) |
		((rm_data->height<<16)&(0xFFFF0000));
	cam_io_w_mb(buf_size, common_data->mem_base + offset);
@@ -809,8 +809,7 @@ static int cam_vfe_bus_rd_update_rm(void *priv, void *cmd_args,
		CAM_DBG(CAM_ISP, "size offset 0x%x buf_size 0x%x",
			rm_data->hw_regs->buf_size, buf_size);
		CAM_VFE_ADD_REG_VAL_PAIR(reg_val_pair, j,
			rm_data->hw_regs->buffer_width_cfg,
			buf_size);
			rm_data->hw_regs->buf_size, buf_size);
		CAM_DBG(CAM_ISP, "RM %d image size 0x%x",
			rm_data->index, reg_val_pair[j-1]);

+4 −12
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
 */

#ifndef _CAM_VFE_BUS_R_VER1_H_
@@ -50,21 +50,13 @@ struct cam_vfe_bus_rd_ver1_reg_offset_common {
 * @Brief:        Register offsets for BUS Clients
 */
struct cam_vfe_bus_rd_ver1_reg_offset_bus_client {
	uint32_t status0;
	uint32_t status1;
	uint32_t cfg;
	uint32_t header_addr;
	uint32_t header_cfg;
	uint32_t image_addr;
	uint32_t image_addr_offset;
	uint32_t buffer_width_cfg;
	uint32_t buffer_height_cfg;
	uint32_t unpacker_cfg;
	uint32_t buf_size;
	uint32_t stride;
	void    *ubwc_regs;
	uint32_t burst_limit;
	uint32_t unpacker_cfg;
	uint32_t latency_buf_allocation;
	uint32_t buf_size;
	uint32_t burst_limit;
};

/*
Loading