Commit bf2b33af authored by Rob Clark's avatar Rob Clark
Browse files

drm/msm: fix bus scaling



This got a bit broken with original patches when re-arranging things to
move dependencies on mach-msm inside #ifndef OF.

Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 3b57f23b
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -414,6 +414,9 @@ struct msm_gpu *a3xx_gpu_init(struct drm_device *dev)
	gpu->fast_rate = config->fast_rate;
	gpu->slow_rate = config->slow_rate;
	gpu->bus_freq  = config->bus_freq;
#ifdef CONFIG_MSM_BUS_SCALING
	gpu->bus_scale_table = config->bus_scale_table;
#endif

	DBG("fast_rate=%u, slow_rate=%u, bus_freq=%u",
			gpu->fast_rate, gpu->slow_rate, gpu->bus_freq);
@@ -436,12 +439,17 @@ fail:
 * The a3xx device:
 */

#if defined(CONFIG_MSM_BUS_SCALING) && !defined(CONFIG_OF)
#  include <mach/kgsl.h>
#endif

static int a3xx_probe(struct platform_device *pdev)
{
	static struct adreno_platform_config config = {};
#ifdef CONFIG_OF
	/* TODO */
#else
	struct kgsl_device_platform_data *pdata = pdev->dev.platform_data;
	uint32_t version = socinfo_get_version();
	if (cpu_is_apq8064ab()) {
		config.fast_rate = 450000000;
@@ -473,6 +481,9 @@ static int a3xx_probe(struct platform_device *pdev)
			config.rev = ADRENO_REV(3, 0, 5, 0);

	}
#  ifdef CONFIG_MSM_BUS_SCALING
	config.bus_scale_table = pdata->bus_scale_table;
#  endif
#endif
	pdev->dev.platform_data = &config;
	a3xx_pdev = pdev;
+3 −0
Original line number Diff line number Diff line
@@ -70,6 +70,9 @@ struct adreno_gpu {
struct adreno_platform_config {
	struct adreno_rev rev;
	uint32_t fast_rate, slow_rate, bus_freq;
#ifdef CONFIG_MSM_BUS_SCALING
	struct msm_bus_scale_pdata *bus_scale_table;
#endif
};

#define ADRENO_IDLE_TIMEOUT (20 * 1000)
+5 −15
Original line number Diff line number Diff line
@@ -25,20 +25,10 @@

#ifdef CONFIG_MSM_BUS_SCALING
#include <mach/board.h>
#include <mach/kgsl.h>
static void bs_init(struct msm_gpu *gpu, struct platform_device *pdev)
static void bs_init(struct msm_gpu *gpu)
{
	struct drm_device *dev = gpu->dev;
	struct kgsl_device_platform_data *pdata;

	if (!pdev) {
		dev_err(dev->dev, "could not find dtv pdata\n");
		return;
	}

	pdata = pdev->dev.platform_data;
	if (pdata->bus_scale_table) {
		gpu->bsc = msm_bus_scale_register_client(pdata->bus_scale_table);
	if (gpu->bus_scale_table) {
		gpu->bsc = msm_bus_scale_register_client(gpu->bus_scale_table);
		DBG("bus scale client: %08x", gpu->bsc);
	}
}
@@ -59,7 +49,7 @@ static void bs_set(struct msm_gpu *gpu, int idx)
	}
}
#else
static void bs_init(struct msm_gpu *gpu, struct platform_device *pdev) {}
static void bs_init(struct msm_gpu *gpu) {}
static void bs_fini(struct msm_gpu *gpu) {}
static void bs_set(struct msm_gpu *gpu, int idx) {}
#endif
@@ -452,7 +442,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
		goto fail;
	}

	bs_init(gpu, pdev);
	bs_init(gpu);

	return 0;

+4 −0
Original line number Diff line number Diff line
@@ -85,7 +85,11 @@ struct msm_gpu {
	struct regulator *gpu_reg, *gpu_cx;
	struct clk *ebi1_clk, *grp_clks[5];
	uint32_t fast_rate, slow_rate, bus_freq;

#ifdef CONFIG_MSM_BUS_SCALING
	struct msm_bus_scale_pdata *bus_scale_table;
	uint32_t bsc;
#endif

	/* Hang Detction: */
#define DRM_MSM_HANGCHECK_PERIOD 500 /* in ms */