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

Commit cc7e1098 authored by George Shen's avatar George Shen
Browse files

Revert "msm: kgsl: Support GFX CPR control in GPU driver"



This reverts commit 500ef6e6.
SW workaround is not needed as CPR HW bug is fixed.

CRs-Fixed: 2085877
Change-Id: I356973be5f2e86ac4b2a484f675c9e408e6d653c
Signed-off-by: default avatarGeorge Shen <sqiao@codeaurora.org>
parent 1d9aee75
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -965,10 +965,6 @@
#define A6XX_RSCC_TCS2_DRV0_STATUS                      0x23A16
#define A6XX_RSCC_TCS3_DRV0_STATUS                      0x23B7E


/* CPR controller */
#define A6XX_GPU_CPR_FSM_CTL				0x26801

/* GPU PDC sequencer registers in AOSS.RPMh domain */
#define	PDC_GPU_ENABLE_PDC			0x21140
#define PDC_GPU_SEQ_START_ADDR			0x21148
@@ -986,7 +982,5 @@
#define PDC_GPU_TCS1_CMD0_DATA			0x21577
#define PDC_GPU_SEQ_MEM_0			0xA0000

/* GFX rail CPR registers in AOSS.CPR domain */
#define CPR_CPRF_CPRF5_CTRL			0x1801
#endif /* _A6XX_REG_H */
+0 −6
Original line number Diff line number Diff line
@@ -1161,12 +1161,6 @@ static inline int adreno_is_a630v1(struct adreno_device *adreno_dev)
		(ADRENO_CHIPID_PATCH(adreno_dev->chipid) == 0);
}

static inline int adreno_is_a630v2(struct adreno_device *adreno_dev)
{
	return (ADRENO_GPUREV(adreno_dev) == ADRENO_REV_A630) &&
		(ADRENO_CHIPID_PATCH(adreno_dev->chipid) == 1);
}

/*
 * adreno_checkreg_off() - Checks the validity of a register enum
 * @adreno_dev:		Pointer to adreno device
+2 −41
Original line number Diff line number Diff line
@@ -871,16 +871,6 @@ static int _load_firmware(struct kgsl_device *device, const char *fwfile,

#define RSC_CMD_OFFSET 2
#define PDC_CMD_OFFSET 4
static void _regread(void __iomem *regbase,
		unsigned int offsetwords, unsigned int *value)
{
	void __iomem *reg;

	reg = regbase + (offsetwords << 2);
	*value = __raw_readl(reg);
	/* Ensure read completes */
	rmb();
}

static void _regwrite(void __iomem *regbase,
		unsigned int offsetwords, unsigned int value)
@@ -1399,8 +1389,6 @@ static int a6xx_rpmh_power_on_gpu(struct kgsl_device *device)
{
	struct gmu_device *gmu = &device->gmu;
	struct device *dev = &gmu->pdev->dev;
	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
	unsigned int tmp;
	int val;

	kgsl_gmu_regread(device, A6XX_GPU_CC_GX_DOMAIN_MISC, &val);
@@ -1430,19 +1418,6 @@ static int a6xx_rpmh_power_on_gpu(struct kgsl_device *device)

	kgsl_gmu_regwrite(device, A6XX_GMU_RSCC_CONTROL_REQ, 0);

	/* Turn on GFX rail CPR */
	if (adreno_is_a630v2(adreno_dev)) {
		_regread(gmu->cpr_reg_virt, CPR_CPRF_CPRF5_CTRL, &tmp);
		tmp |= BIT(2);
		_regwrite(gmu->cpr_reg_virt, CPR_CPRF_CPRF5_CTRL, tmp);

		kgsl_gmu_regread(device, A6XX_GPU_CPR_FSM_CTL, &tmp);
		tmp |= BIT(0);
		kgsl_gmu_regwrite(device, A6XX_GPU_CPR_FSM_CTL, tmp);
		/* Ensure write happens before exit the function */
		wmb();
	}

	/* Enable the power counter because it was disabled before slumber */
	kgsl_gmu_regwrite(device, A6XX_GMU_CX_GMU_POWER_COUNTER_ENABLE, 1);

@@ -1455,23 +1430,9 @@ static int a6xx_rpmh_power_on_gpu(struct kgsl_device *device)
static int a6xx_rpmh_power_off_gpu(struct kgsl_device *device)
{
	struct gmu_device *gmu = &device->gmu;
	struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
	unsigned int tmp;
	const struct adreno_device *adreno_dev = ADRENO_DEVICE(device);
	int val;

	/* Turn off GFX rail CPR */
	if (adreno_is_a630v2(adreno_dev)) {
		_regread(gmu->cpr_reg_virt, CPR_CPRF_CPRF5_CTRL, &tmp);
		tmp &= ~BIT(2);
		_regwrite(gmu->cpr_reg_virt, CPR_CPRF_CPRF5_CTRL, tmp);

		kgsl_gmu_regread(device, A6XX_GPU_CPR_FSM_CTL, &tmp);
		tmp &= ~BIT(0);
		kgsl_gmu_regwrite(device, A6XX_GPU_CPR_FSM_CTL, tmp);
		/* Ensure write completes before starting sleep seq */
		wmb();
	}

	/* RSC sleep sequence */
	kgsl_gmu_regwrite(device, A6XX_RSCC_TIMESTAMP_UNIT1_EN_DRV0, 1);
	kgsl_gmu_regwrite(device, A6XX_GMU_RSCC_CONTROL_REQ, 1);
@@ -1983,7 +1944,7 @@ static int a6xx_gmu_suspend(struct kgsl_device *device)
	a6xx_sptprac_disable(adreno_dev);

	/* Disconnect GPU from BUS. Clear and reconnected after reset */
	/* adreno_vbif_clear_pending_transactions(device); */
	adreno_vbif_clear_pending_transactions(device);
	/* Unnecessary: a6xx_soft_reset(adreno_dev); */

	/* Check no outstanding RPMh voting */
+5 −16
Original line number Diff line number Diff line
@@ -862,7 +862,7 @@ static int gmu_pwrlevel_probe(struct gmu_device *gmu, struct device_node *node)
	return 0;
}

static int gmu_reg_probe(struct gmu_device *gmu, const char *name)
static int gmu_reg_probe(struct gmu_device *gmu, const char *name, bool is_gmu)
{
	struct resource *res;

@@ -880,7 +880,7 @@ static int gmu_reg_probe(struct gmu_device *gmu, const char *name)
		return -EINVAL;
	}

	if (!strcmp(name, "kgsl_gmu_reg")) {
	if (is_gmu) {
		gmu->reg_phys = res->start;
		gmu->reg_len = resource_size(res);
		gmu->reg_virt = devm_ioremap(&gmu->pdev->dev, res->start,
@@ -891,20 +891,13 @@ static int gmu_reg_probe(struct gmu_device *gmu, const char *name)
			return -ENODEV;
		}

	} else if (!strcmp(name, "kgsl_gmu_pdc_reg")) {
	} else {
		gmu->pdc_reg_virt = devm_ioremap(&gmu->pdev->dev, res->start,
				resource_size(res));
		if (gmu->pdc_reg_virt == NULL) {
			dev_err(&gmu->pdev->dev, "PDC regs ioremap failed\n");
			return -ENODEV;
		}
	} else if (!strcmp(name, "kgsl_gmu_cpr_reg")) {
		gmu->cpr_reg_virt = devm_ioremap(&gmu->pdev->dev, res->start,
				resource_size(res));
		if (gmu->cpr_reg_virt == NULL) {
			dev_err(&gmu->pdev->dev, "CPR regs ioremap failed\n");
			return -ENODEV;
		}
	}

	return 0;
@@ -1125,15 +1118,11 @@ int gmu_probe(struct kgsl_device *device)
	mem_addr = gmu->hfi_mem;

	/* Map and reserve GMU CSRs registers */
	ret = gmu_reg_probe(gmu, "kgsl_gmu_reg");
	if (ret)
		goto error;

	ret = gmu_reg_probe(gmu, "kgsl_gmu_pdc_reg");
	ret = gmu_reg_probe(gmu, "kgsl_gmu_reg", true);
	if (ret)
		goto error;

	ret = gmu_reg_probe(gmu, "kgsl_gmu_cpr_reg");
	ret = gmu_reg_probe(gmu, "kgsl_gmu_pdc_reg", false);
	if (ret)
		goto error;

+0 −2
Original line number Diff line number Diff line
@@ -166,7 +166,6 @@ enum gpu_idle_level {
 *	and GPU register set, the offset will be used when accessing
 *	gmu registers using offset defined in GPU register space.
 * @pdc_reg_virt: starting kernel virtual address for RPMh PDC registers
 * @cpr_reg_virt: starting kernel virtual address for RPMh CPR controller
 * @gmu_interrupt_num: GMU interrupt number
 * @fw_image: descriptor of GMU memory that has GMU image in it
 * @hfi_mem: pointer to HFI shared memory
@@ -203,7 +202,6 @@ struct gmu_device {
	unsigned int reg_len;
	unsigned int gmu2gpu_offset;
	void __iomem *pdc_reg_virt;
	void __iomem *cpr_reg_virt;
	unsigned int gmu_interrupt_num;
	struct gmu_memdesc fw_image;
	struct gmu_memdesc *hfi_mem;