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

Commit 88b222ad authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "disp: msm: sde: add support to read and modify display shared imem"

parents f2163420 9210835d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -178,6 +178,9 @@ int sde_reg_read(struct sde_hw_blk_reg_map *c, u32 reg_off);
#define SDE_REG_WRITE(c, off, val) sde_reg_write(c, off, val, #off)
#define SDE_REG_READ(c, off) sde_reg_read(c, off)

#define SDE_IMEM_WRITE(addr, val) writel_relaxed(val, addr)
#define SDE_IMEM_READ(addr) readl_relaxed(addr)

#define MISR_FRAME_COUNT_MASK		0xFF
#define MISR_CTRL_ENABLE		BIT(8)
#define MISR_CTRL_STATUS		BIT(9)
+30 −4
Original line number Diff line number Diff line
@@ -713,13 +713,25 @@ static int sde_kms_prepare_secure_transition(struct msm_kms *kms,
	return 0;
}

static int _sde_kms_release_splash_buffer(unsigned int mem_addr,
static void _sde_clear_boot_config(struct sde_boot_config *boot_cfg)
{
	if (!boot_cfg)
		return;

	SDE_IMEM_WRITE(&boot_cfg->header, 0x0);
	SDE_IMEM_WRITE(&boot_cfg->addr1, 0x0);
	SDE_IMEM_WRITE(&boot_cfg->addr2, 0x0);
}

static int _sde_kms_release_splash_buffer(struct sde_kms *sde_kms,
					unsigned int mem_addr,
					unsigned int splash_buffer_size,
					unsigned int ramdump_base,
					unsigned int ramdump_buffer_size)
{
	unsigned long pfn_start, pfn_end, pfn_idx;
	int ret = 0;
	struct sde_boot_config *boot_cfg = sde_kms->imem;

	if (!mem_addr || !splash_buffer_size) {
		SDE_ERROR("invalid params\n");
@@ -733,6 +745,9 @@ static int _sde_kms_release_splash_buffer(unsigned int mem_addr,
		splash_buffer_size -= ramdump_buffer_size;
	}

	if (!ramdump_base)
		_sde_clear_boot_config(boot_cfg);

	pfn_start = mem_addr >> PAGE_SHIFT;
	pfn_end = (mem_addr + splash_buffer_size) >> PAGE_SHIFT;

@@ -831,9 +846,9 @@ static int _sde_kms_splash_mem_put(struct sde_kms *sde_kms,
	if (!splash->ref_cnt) {
		mmu->funcs->one_to_one_unmap(mmu, splash->splash_buf_base,
				splash->splash_buf_size);
		rc = _sde_kms_release_splash_buffer(splash->splash_buf_base,
				splash->splash_buf_size, splash->ramdump_base,
				splash->ramdump_size);
		rc = _sde_kms_release_splash_buffer(sde_kms,
			splash->splash_buf_base, splash->splash_buf_size,
			splash->ramdump_base, splash->ramdump_size);
		splash->splash_buf_base = 0;
		splash->splash_buf_size = 0;
	}
@@ -3402,6 +3417,17 @@ static int _sde_kms_hw_init_ioremap(struct sde_kms *sde_kms,
					rc);
	}

	sde_kms->imem = msm_ioremap(platformdev, "sde_imem_phys",
							"sde_imem_phys");

	if (IS_ERR(sde_kms->imem)) {
		sde_kms->imem = NULL;
		sde_kms->imem_len = 0;
	} else {
		sde_kms->imem_len = msm_iomap_size(platformdev,
							"sde_imem_phys");
	}

	sde_kms->sid = msm_ioremap(platformdev, "sid_phys",
							"sid_phys");
	if (IS_ERR(sde_kms->sid)) {
+19 −2
Original line number Diff line number Diff line
@@ -248,8 +248,10 @@ struct sde_kms {
	struct dentry *debugfs_vbif;

	/* io/register spaces: */
	void __iomem *mmio, *vbif[VBIF_MAX], *reg_dma, *sid;
	unsigned long mmio_len, vbif_len[VBIF_MAX], reg_dma_len, sid_len;
	void __iomem *mmio, *vbif[VBIF_MAX], *reg_dma, *sid,
		*imem;
	unsigned long mmio_len, vbif_len[VBIF_MAX],
		reg_dma_len, sid_len, imem_len;

	struct regulator *vdd;
	struct regulator *mmagic;
@@ -299,6 +301,21 @@ struct sde_kms {
	struct irq_affinity_notify affinity_notify;
};

/**
 * struct sde_boot_config:	display info stored in imem region
 * @header:     header info containing magic ID, frame buffer sizes,
 *              checksum & platformID
 * @addr1:      Lower 32 bits of Frame Buffer Address
 * @addr2:      Higher 32 bits of Frame Buffer Address
 * @reserved:   Reserved
 */
struct sde_boot_config {
	u32 header;
	u32 addr1;
	u32 addr2;
	u32 reserved;
};

struct vsync_info {
	u32 frame_count;
	u32 line_count;