public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] DSPBRIDGE: cleanup OPP handling
@ 2010-01-20 22:19 Nishanth Menon
  2010-01-20 22:19 ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Nishanth Menon
  0 siblings, 1 reply; 13+ messages in thread
From: Nishanth Menon @ 2010-01-20 22:19 UTC (permalink / raw)
  To: linux-omap
  Cc: Nishanth Menon, Ameya Palande, Deepak Chitriki, Felipe Contreras,
	Hiroshi Doyu, Omar Ramirez Luna

Applies on DSPbridge branch:
this is a two patch series of which patch 2/2 is provided as two options:
a) using legacy implementation
b) cleaner one using pm-wip-opp APIs.

only (b) has been tested on a 3630 platform.

Nishanth Menon (2):
  DSPBRIDGE: remove dependency of mpu freq
  DSPBRIDGE: pm: use old implementation for opps
	OR
  DSPBRIDGE: pm: use pm-wip-opp APIs for opp list [RFC]

 arch/arm/mach-omap2/dspbridge.c                |  125 ++++++++++++++++++++++++
 arch/arm/plat-omap/include/dspbridge/host_os.h |   13 +++-
 drivers/dsp/bridge/rmgr/drv_interface.c        |   38 -------
 drivers/dsp/bridge/rmgr/node.c                 |    4 +-
 drivers/dsp/bridge/rmgr/proc.c                 |    4 +-
 drivers/dsp/bridge/wmd/io_sm.c                 |   20 ++---
 6 files changed, 148 insertions(+), 56 deletions(-)

Cc: Ameya Palande <ameya.palande@nokia.com>
Cc: Deepak Chitriki <deepak.chitriki@ti.com>
Cc: Felipe Contreras <felipe.contreras@nokia.com>
Cc: Hiroshi Doyu <hiroshi.doyu@nokia.com>
Cc: Omar Ramirez Luna <omar.ramirez@ti.com>

Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq
  2010-01-20 22:19 [PATCH 0/2] DSPBRIDGE: cleanup OPP handling Nishanth Menon
@ 2010-01-20 22:19 ` Nishanth Menon
  2010-01-20 22:19   ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Nishanth Menon
                     ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Nishanth Menon @ 2010-01-20 22:19 UTC (permalink / raw)
  To: linux-omap
  Cc: Nishanth Menon, Ameya Palande, Deepak Chitriki, Felipe Contreras,
	Hiroshi Doyu, Omar Ramirez Luna

Current DSPBridge uses hardcoded logic which is not scalable
across OMAP3 silicons. introduce a structure based implementation
this allows for dsp frequency table indices to be generated runtime
instead of being compile time.

Cc: Ameya Palande <ameya.palande@nokia.com>
Cc: Deepak Chitriki <deepak.chitriki@ti.com>
Cc: Felipe Contreras <felipe.contreras@nokia.com>
Cc: Hiroshi Doyu <hiroshi.doyu@nokia.com>
Cc: Omar Ramirez Luna <omar.ramirez@ti.com>

Signed-off-by: Nishanth Menon <nm@ti.com>
---
 arch/arm/mach-omap2/dspbridge.c                |   28 +++++++++++++++++
 arch/arm/plat-omap/include/dspbridge/host_os.h |   13 +++++++-
 drivers/dsp/bridge/rmgr/drv_interface.c        |   38 ------------------------
 drivers/dsp/bridge/rmgr/node.c                 |    4 +-
 drivers/dsp/bridge/rmgr/proc.c                 |    4 +-
 drivers/dsp/bridge/wmd/io_sm.c                 |   20 ++++--------
 6 files changed, 51 insertions(+), 56 deletions(-)

diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
index ea109a3..26b860f 100644
--- a/arch/arm/mach-omap2/dspbridge.c
+++ b/arch/arm/mach-omap2/dspbridge.c
@@ -30,6 +30,23 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
 #endif
 };
 
+/**
+ * get_opp_table() - populate the pdata with opp info
+ * @pdata: pointer to pdata
+ *
+ * OPP table implementation is a variant b/w platforms.
+ * the platform file now incorporates this into the build
+ * itself and uses the interface to talk to platform specific
+ * functions
+ */
+static int get_opp_table(struct dspbridge_platform_data *pdata)
+{
+#ifdef CONFIG_BRIDGE_DVFS
+	/* Do nothing now  - fill based on PM implementation */
+#endif
+	return 0;
+}
+
 static int __init dspbridge_init(void)
 {
 	struct platform_device *pdev;
@@ -48,6 +65,10 @@ static int __init dspbridge_init(void)
 	if (!pdev)
 		goto err_out;
 
+	err = get_opp_table(pdata);
+	if (err)
+		goto err_out;
+
 	err = platform_device_add_data(pdev, pdata, sizeof(*pdata));
 	if (err)
 		goto err_out;
@@ -60,6 +81,10 @@ static int __init dspbridge_init(void)
 	return 0;
 
 err_out:
+	kfree(pdata->mpu_speeds);
+	kfree(pdata->dsp_freq_table);
+	pdata->mpu_speeds = NULL;
+	pdata->dsp_freq_table = NULL;
 	platform_device_put(pdev);
 	return err;
 }
@@ -67,6 +92,9 @@ module_init(dspbridge_init);
 
 static void __exit dspbridge_exit(void)
 {
+	struct dspbridge_platform_data *pdata = &dspbridge_pdata;
+	kfree(pdata->mpu_speeds);
+	kfree(pdata->dsp_freq_table);
 	platform_device_unregister(dspbridge_pdev);
 }
 module_exit(dspbridge_exit);
diff --git a/arch/arm/plat-omap/include/dspbridge/host_os.h b/arch/arm/plat-omap/include/dspbridge/host_os.h
index 066c4d7..ebf6a80 100644
--- a/arch/arm/plat-omap/include/dspbridge/host_os.h
+++ b/arch/arm/plat-omap/include/dspbridge/host_os.h
@@ -54,12 +54,23 @@
 #define INT_MAIL_MPU_IRQ        26
 #define INT_DSP_MMU_IRQ        28
 
+struct dsp_shm_freq_table {
+	unsigned long u_volts;
+	unsigned long dsp_freq;
+	unsigned long thresh_min_freq;
+	unsigned long thresh_max_freq;
+};
 struct dspbridge_platform_data {
 	void 	(*dsp_set_min_opp)(u8 opp_id);
 	u8 	(*dsp_get_opp)(void);
 	void 	(*cpu_set_freq)(unsigned long f);
 	unsigned long (*cpu_get_freq)(void);
-	unsigned long mpu_speed[6];
+	unsigned long *mpu_speeds;
+	u8 mpu_num_speeds;
+	unsigned long mpu_min_speed;
+	unsigned long mpu_max_speed;
+	struct dsp_shm_freq_table *dsp_freq_table;
+	u8 dsp_num_speeds;
 
 	u32 phys_mempool_base;
 	u32 phys_mempool_size;
diff --git a/drivers/dsp/bridge/rmgr/drv_interface.c b/drivers/dsp/bridge/rmgr/drv_interface.c
index d8fe250..9330f44 100644
--- a/drivers/dsp/bridge/rmgr/drv_interface.c
+++ b/drivers/dsp/bridge/rmgr/drv_interface.c
@@ -169,44 +169,12 @@ static struct file_operations bridge_fops = {
 static u32 timeOut = 1000;
 #ifdef CONFIG_BRIDGE_DVFS
 static struct clk *clk_handle;
-s32 dsp_max_opps = VDD1_OPP5;
 #endif
 
-/* Maximum Opps that can be requested by IVA*/
-/*vdd1 rate table*/
-#ifdef CONFIG_BRIDGE_DVFS
-const struct omap_opp  vdd1_rate_table_bridge[] = {
-	{0, 0, 0},
-	/*OPP1*/
-	{S125M, VDD1_OPP1, 0},
-	/*OPP2*/
-	{S250M, VDD1_OPP2, 0},
-	/*OPP3*/
-	{S500M, VDD1_OPP3, 0},
-	/*OPP4*/
-	{S550M, VDD1_OPP4, 0},
-	/*OPP5*/
-	{S600M, VDD1_OPP5, 0},
-};
-#endif
 #endif
 
 struct dspbridge_platform_data *omap_dspbridge_pdata;
 
-u32 vdd1_dsp_freq[6][4] = {
-	{0, 0, 0, 0},
-	/*OPP1*/
-	{0, 90000, 0, 86000},
-	/*OPP2*/
-	{0, 180000, 80000, 170000},
-	/*OPP3*/
-	{0, 360000, 160000, 340000},
-	/*OPP4*/
-	{0, 396000, 325000, 376000},
-	/*OPP5*/
-	{0, 430000, 355000, 430000},
-};
-
 #ifdef CONFIG_BRIDGE_DVFS
 static int dspbridge_post_scale(struct notifier_block *op, unsigned long level,
 				void *ptr)
@@ -228,9 +196,6 @@ static int __devinit omap34xx_bridge_probe(struct platform_device *pdev)
 	u32 temp;
 	dev_t   dev = 0 ;
 	int     result;
-#ifdef CONFIG_BRIDGE_DVFS
-	int i = 0;
-#endif
 	struct dspbridge_platform_data *pdata = pdev->dev.platform_data;
 
 	omap_dspbridge_dev = pdev;
@@ -341,9 +306,6 @@ static int __devinit omap34xx_bridge_probe(struct platform_device *pdev)
 	}
 	if (DSP_SUCCEEDED(initStatus)) {
 #ifdef CONFIG_BRIDGE_DVFS
-		for (i = 0; i < 6; i++)
-			pdata->mpu_speed[i] = vdd1_rate_table_bridge[i].rate;
-
 		clk_handle = clk_get(NULL, "iva2_ck");
 		if (!clk_handle) {
 			GT_0trace(driverTrace, GT_7CLASS,
diff --git a/drivers/dsp/bridge/rmgr/node.c b/drivers/dsp/bridge/rmgr/node.c
index e8ba0dd..5b06c37 100644
--- a/drivers/dsp/bridge/rmgr/node.c
+++ b/drivers/dsp/bridge/rmgr/node.c
@@ -1263,7 +1263,7 @@ DSP_STATUS NODE_Create(struct NODE_OBJECT *hNode)
 		/* Boost the OPP level to max level that DSP can be requested */
 #if defined(CONFIG_BRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ)
 		if (pdata->cpu_set_freq) {
-			(*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP3]);
+			(*pdata->cpu_set_freq)(pdata->mpu_max_speed);
 
 			if (pdata->dsp_get_opp) {
 				GT_1trace(NODE_debugMask, GT_4CLASS, "opp level"
@@ -1289,7 +1289,7 @@ DSP_STATUS NODE_Create(struct NODE_OBJECT *hNode)
 		/* Request the lowest OPP level*/
 #if defined(CONFIG_BRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ)
 		if (pdata->cpu_set_freq) {
-			(*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP1]);
+			(*pdata->cpu_set_freq)(pdata->mpu_min_speed);
 
 			if (pdata->dsp_get_opp) {
 				GT_1trace(NODE_debugMask, GT_4CLASS, "opp level"
diff --git a/drivers/dsp/bridge/rmgr/proc.c b/drivers/dsp/bridge/rmgr/proc.c
index 9eae2f9..7b60630 100644
--- a/drivers/dsp/bridge/rmgr/proc.c
+++ b/drivers/dsp/bridge/rmgr/proc.c
@@ -1134,7 +1134,7 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
 	/* Boost the OPP level to Maximum level supported by baseport*/
 #if defined(CONFIG_BRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ)
 	if (pdata->cpu_set_freq)
-		(*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP5]);
+		(*pdata->cpu_set_freq)(pdata->mpu_max_speed);
 #endif
 		status = COD_LoadBase(hCodMgr, iArgc, (char **)aArgv,
 				     DEV_BrdWriteFxn,
@@ -1156,7 +1156,7 @@ DSP_STATUS PROC_Load(DSP_HPROCESSOR hProcessor, IN CONST s32 iArgc,
 	/* Requesting the lowest opp supported*/
 #if defined(CONFIG_BRIDGE_DVFS) && !defined(CONFIG_CPU_FREQ)
 	if (pdata->cpu_set_freq)
-		(*pdata->cpu_set_freq)(pdata->mpu_speed[VDD1_OPP1]);
+		(*pdata->cpu_set_freq)(pdata->mpu_min_speed);
 #endif
 
 	}
diff --git a/drivers/dsp/bridge/wmd/io_sm.c b/drivers/dsp/bridge/wmd/io_sm.c
index 4511ec5..6c140c5 100644
--- a/drivers/dsp/bridge/wmd/io_sm.c
+++ b/drivers/dsp/bridge/wmd/io_sm.c
@@ -159,13 +159,6 @@ static DSP_STATUS registerSHMSegs(struct IO_MGR *hIOMgr,
 				  struct COD_MANAGER *hCodMan,
 				  u32 dwGPPBasePA);
 
-#ifdef CONFIG_BRIDGE_DVFS
-/* The maximum number of OPPs that are supported */
-extern s32 dsp_max_opps;
-/* The Vdd1 opp table information */
-extern u32 vdd1_dsp_freq[6][4] ;
-#endif
-
 #if GT_TRACE
 static struct GT_Mask dsp_trace_mask = { NULL, NULL }; /* GT trace variable */
 #endif
@@ -1839,29 +1832,30 @@ DSP_STATUS IO_SHMsetting(IN struct IO_MGR *hIOMgr, IN enum SHM_DESCTYPE desc,
 		 * Update the shared memory with the voltage, frequency,
 		 * min and max frequency values for an OPP.
 		 */
-		for (i = 0; i <= dsp_max_opps; i++) {
+		for (i = 0; i <= pdata->dsp_num_speeds; i++) {
 			hIOMgr->pSharedMem->oppTableStruct.oppPoint[i].voltage =
-				vdd1_dsp_freq[i][0];
+				pdata->dsp_freq_table[i].u_volts;
 			DBG_Trace(DBG_LEVEL5, "OPP shared memory -voltage: "
 				 "%d\n", hIOMgr->pSharedMem->oppTableStruct.
 				 oppPoint[i].voltage);
 			hIOMgr->pSharedMem->oppTableStruct.oppPoint[i].
-				frequency = vdd1_dsp_freq[i][1];
+				frequency = pdata->dsp_freq_table[i].dsp_freq;
 			DBG_Trace(DBG_LEVEL5, "OPP shared memory -frequency: "
 				 "%d\n", hIOMgr->pSharedMem->oppTableStruct.
 				 oppPoint[i].frequency);
 			hIOMgr->pSharedMem->oppTableStruct.oppPoint[i].minFreq =
-				vdd1_dsp_freq[i][2];
+				pdata->dsp_freq_table[i].thresh_min_freq;
 			DBG_Trace(DBG_LEVEL5, "OPP shared memory -min value: "
 				 "%d\n", hIOMgr->pSharedMem->oppTableStruct.
 				  oppPoint[i].minFreq);
 			hIOMgr->pSharedMem->oppTableStruct.oppPoint[i].maxFreq =
-				vdd1_dsp_freq[i][3];
+				pdata->dsp_freq_table[i].thresh_max_freq;
 			DBG_Trace(DBG_LEVEL5, "OPP shared memory -max value: "
 				 "%d\n", hIOMgr->pSharedMem->oppTableStruct.
 				 oppPoint[i].maxFreq);
 		}
-		hIOMgr->pSharedMem->oppTableStruct.numOppPts = dsp_max_opps;
+		hIOMgr->pSharedMem->oppTableStruct.numOppPts =
+			pdata->dsp_num_speeds;
 		DBG_Trace(DBG_LEVEL5, "OPP shared memory - max OPP number: "
 			 "%d\n", hIOMgr->pSharedMem->oppTableStruct.numOppPts);
 		/* Update the current OPP number */
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps
  2010-01-20 22:19 ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Nishanth Menon
@ 2010-01-20 22:19   ` Nishanth Menon
  2010-01-20 22:19     ` [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list Nishanth Menon
  2010-01-21  7:38     ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Romit Dasgupta
  2010-01-21  7:38   ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Romit Dasgupta
  2010-01-21  7:45   ` Romit Dasgupta
  2 siblings, 2 replies; 13+ messages in thread
From: Nishanth Menon @ 2010-01-20 22:19 UTC (permalink / raw)
  To: linux-omap
  Cc: Nishanth Menon, Ameya Palande, Deepak Chitriki, Felipe Contreras,
	Hiroshi Doyu, Omar Ramirez Luna

Use the old implementation for OPP list generation and update.
this is a 1-1 implementation of what we had previously without
support for 3630.

Cc: Ameya Palande <ameya.palande@nokia.com>
Cc: Deepak Chitriki <deepak.chitriki@ti.com>
Cc: Felipe Contreras <felipe.contreras@nokia.com>
Cc: Hiroshi Doyu <hiroshi.doyu@nokia.com>
Cc: Omar Ramirez Luna <omar.ramirez@ti.com>

Signed-off-by: Nishanth Menon <nm@ti.com>
---
This probably belongs to dspbridge-pm branch - I dont personally dont like
doing opp handling the way it is done currently, but dont want to mess around
with the current implementation.

 arch/arm/mach-omap2/dspbridge.c |   59 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 58 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
index 26b860f..120d8a2 100644
--- a/arch/arm/mach-omap2/dspbridge.c
+++ b/arch/arm/mach-omap2/dspbridge.c
@@ -42,7 +42,64 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
 static int get_opp_table(struct dspbridge_platform_data *pdata)
 {
 #ifdef CONFIG_BRIDGE_DVFS
-	/* Do nothing now  - fill based on PM implementation */
+	/* legacy values for 3430 */
+	u32 vdd1_dsp_freq[6][4] = {
+		{0, 0, 0, 0},
+		/*OPP1*/
+		{0, 90000, 0, 86000},
+		/*OPP2*/
+		{0, 180000, 80000, 170000},
+		/*OPP3*/
+		{0, 360000, 160000, 340000},
+		/*OPP4*/
+		{0, 396000, 325000, 376000},
+		/*OPP5*/
+		{0, 430000, 355000, 430000},
+	};
+	struct omap_opp vdd1_rate_table_bridge[] = {
+		{0, 0, 0},
+		/*OPP1*/
+		{S125M, VDD1_OPP1, 0},
+		/*OPP2*/
+		{S250M, VDD1_OPP2, 0},
+		/*OPP3*/
+		{S500M, VDD1_OPP3, 0},
+		/*OPP4*/
+		{S550M, VDD1_OPP4, 0},
+		/*OPP5*/
+		{S600M, VDD1_OPP5, 0},
+	};
+	pdata->dsp_num_speeds = VDD1_OPP5;
+	pdata->mpu_speeds = kzalloc(sizeof(u32) * pdata->dsp_num_speeds,
+			GFP_KERNEL);
+	if (!pdata->mpu_speeds) {
+		pr_err("unable to allocate memory for the mpu"
+		"frequencies\n");
+		return -ENOMEM;
+	}
+	pdata->dsp_freq_table = kzalloc(
+			sizeof(struct dsp_shm_freq_table) *
+			(pdata->dsp_num_speeds + 1), GFP_KERNEL);
+	if (!pdata->dsp_freq_table) {
+		pr_err("unable to allocate memory for the dsp"
+		"frequencies\n");
+		return -ENOMEM;
+	}
+	for (i = 0; i < 6; i++)
+		pdata->mpu_speed[i] = vdd1_rate_table_bridge[i].rate;
+	pdata->mpu_max_speed = pdata->mpu_speed[VDD1_OPP5];
+	pdata->mpu_min_speed = pdata->mpu_speed[VDD1_OPP1];
+	pdata->dsp_num_speeds = VDD1_OPP5;
+	for (i = 0; i <= pdata->dsp_num_speeds; i++) {
+		pdata->dsp_freq_table[i].u_volts =
+				vdd1_dsp_freq[i][0];
+		frequency = pdata->dsp_freq_table[i].dsp_freq =
+			frequency = vdd1_dsp_freq[i][1];
+		pdata->dsp_freq_table[i].thresh_min_freq =
+			vdd1_dsp_freq[i][2];
+		pdata->dsp_freq_table[i].thresh_max_freq =
+			vdd1_dsp_freq[i][3];
+	}
 #endif
 	return 0;
 }
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list
  2010-01-20 22:19   ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Nishanth Menon
@ 2010-01-20 22:19     ` Nishanth Menon
  2010-01-21  7:58       ` Romit Dasgupta
  2010-01-21  7:38     ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Romit Dasgupta
  1 sibling, 1 reply; 13+ messages in thread
From: Nishanth Menon @ 2010-01-20 22:19 UTC (permalink / raw)
  To: linux-omap
  Cc: Nishanth Menon, Ameya Palande, Deepak Chitriki, Felipe Contreras,
	Hiroshi Doyu, Omar Ramirez Luna

Use the PM-WIP-OPP branch apis for generating the opp list for DSP.
This allows for scaling accross 3430,3440,3450 and 3630 series.

Caveat: does not handle dynamic addition of opp after the
bridgedriver is inserted - this can be done once the framework for
the same is made available

Cc: Ameya Palande <ameya.palande@nokia.com>
Cc: Deepak Chitriki <deepak.chitriki@ti.com>
Cc: Felipe Contreras <felipe.contreras@nokia.com>
Cc: Hiroshi Doyu <hiroshi.doyu@nokia.com>
Cc: Omar Ramirez Luna <omar.ramirez@ti.com>

Signed-off-by: Nishanth Menon <nm@ti.com>
---
caveat: this does not use the ENUM implementation yet, this can be once it is
merged to pm-wip-opp branch.

 arch/arm/mach-omap2/dspbridge.c |   99 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 98 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
index 26b860f..935afd7 100644
--- a/arch/arm/mach-omap2/dspbridge.c
+++ b/arch/arm/mach-omap2/dspbridge.c
@@ -15,6 +15,20 @@
 
 #ifdef CONFIG_BRIDGE_DVFS
 #include <mach/omap-pm.h>
+#include <plat/opp.h>
+/*
+ * The DSP load balancer works on the following logic:
+ * Opp frequencies:
+ * 0 <---------> Freq 1 <------------> Freq 2 <---------> Freq 3
+ * DSP Thresholds for the frequencies:
+ * 0M<-------X-> Freq 1 <-------M--X-> Freq 2 <----M--X-> Freq 3
+ * Where, M is the minimal threshold and X is maximum threshold
+ *
+ * if from Freq x to Freq y; where x > y, transition happens on M
+ * if from Freq x to Freq y; where x < y, transition happens on X
+ */
+#define BRIDGE_THRESH_HIGH_PERCENT	95
+#define BRIDGE_THRESH_LOW_PERCENT	88
 #endif
 
 #include <dspbridge/host_os.h>
@@ -42,7 +56,90 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
 static int get_opp_table(struct dspbridge_platform_data *pdata)
 {
 #ifdef CONFIG_BRIDGE_DVFS
-	/* Do nothing now  - fill based on PM implementation */
+	int mpu_freqs;
+	int dsp_freqs;
+	int i;
+	struct omap_opp *opp;
+	unsigned long freq, old_rate;
+
+	mpu_freqs = opp_get_opp_count(mpu_opps);
+	dsp_freqs = opp_get_opp_count(dsp_opps);
+	if (mpu_freqs < 0 || dsp_freqs < 0 || mpu_freqs != dsp_freqs) {
+		pr_err("mpu and dsp frequencies are inconsistent! "
+			"mpu_freqs=%d dsp_freqs=%d\n", mpu_freqs, dsp_freqs);
+		return -EINVAL;
+	}
+	/* allocate memory if we have opps initialized */
+	pdata->mpu_speeds = kzalloc(sizeof(u32) * mpu_freqs,
+			GFP_KERNEL);
+	if (!pdata->mpu_speeds) {
+		pr_err("unable to allocate memory for the mpu"
+		"frequencies\n");
+		return -ENOMEM;
+	}
+	opp = mpu_opps;
+	i = 0;
+	freq = 0;
+	while (!IS_ERR(opp = opp_find_freq_ceil(opp, &freq))) {
+		pdata->mpu_speeds[i] = freq;
+		freq++;
+		i++;
+	}
+	pdata->mpu_num_speeds = mpu_freqs;
+	pdata->mpu_min_speed = pdata->mpu_speeds[0];
+	pdata->mpu_max_speed = pdata->mpu_speeds[mpu_freqs - 1];
+	/* need an initial terminator */
+	pdata->dsp_freq_table = kzalloc(
+			sizeof(struct dsp_shm_freq_table) *
+			(dsp_freqs + 1), GFP_KERNEL);
+	if (!pdata->dsp_freq_table) {
+		pr_err("unable to allocate memory for the dsp"
+			"frequencies\n");
+		return -ENOMEM;
+	}
+
+	opp = dsp_opps;
+	i = 1;
+	freq = 0;
+	old_rate = 0;
+	/*
+	 * the freq table is in terms of khz.. so we need to
+	 * divide by 1000
+	 */
+	while (!IS_ERR(opp = opp_find_freq_ceil(opp, &freq))) {
+		/* dsp frequencies are in khz */
+		u32 rate = freq / 1000;
+		/*
+		 * On certain 34xx silicons, certain OPPs are duplicated
+		 * for DSP - handle those by copying previous opp value
+		 */
+		if (rate == old_rate) {
+			memcpy(&pdata->dsp_freq_table[i],
+				&pdata->dsp_freq_table[i-1],
+				sizeof(struct dsp_shm_freq_table));
+		} else {
+			pdata->dsp_freq_table[i].dsp_freq = rate;
+			pdata->dsp_freq_table[i].u_volts =
+				opp_get_voltage(opp);
+			/*
+			 * min threshold:
+			 * NOTE: index 1 needs a min of 0! else no
+			 * scaling happens at DSP!
+			 */
+			pdata->dsp_freq_table[i].thresh_min_freq =
+				((old_rate * BRIDGE_THRESH_LOW_PERCENT) / 100);
+
+			/* max threshold */
+			pdata->dsp_freq_table[i].thresh_max_freq =
+				((rate * BRIDGE_THRESH_HIGH_PERCENT) / 100);
+		}
+		old_rate = rate;
+		freq++;
+		i++;
+	}
+	/* the last entry should map with maximum rate */
+	pdata->dsp_freq_table[i - 1].thresh_max_freq = old_rate;
+	pdata->dsp_num_speeds = dsp_freqs;
 #endif
 	return 0;
 }
-- 
1.6.3.3


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps
  2010-01-20 22:19   ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Nishanth Menon
  2010-01-20 22:19     ` [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list Nishanth Menon
@ 2010-01-21  7:38     ` Romit Dasgupta
  2010-01-21  7:47       ` Nishanth Menon
  1 sibling, 1 reply; 13+ messages in thread
From: Romit Dasgupta @ 2010-01-21  7:38 UTC (permalink / raw)
  To: Menon, Nishanth
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

> 
>  arch/arm/mach-omap2/dspbridge.c |   59 ++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 58 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
> index 26b860f..120d8a2 100644
> --- a/arch/arm/mach-omap2/dspbridge.c
> +++ b/arch/arm/mach-omap2/dspbridge.c
> @@ -42,7 +42,64 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
>  static int get_opp_table(struct dspbridge_platform_data *pdata)
>  {
>  #ifdef CONFIG_BRIDGE_DVFS
> -	/* Do nothing now  - fill based on PM implementation */
> +	/* legacy values for 3430 */
> +	u32 vdd1_dsp_freq[6][4] = {
> +		{0, 0, 0, 0},
> +		/*OPP1*/
> +		{0, 90000, 0, 86000},
> +		/*OPP2*/
> +		{0, 180000, 80000, 170000},
> +		/*OPP3*/
> +		{0, 360000, 160000, 340000},
> +		/*OPP4*/
> +		{0, 396000, 325000, 376000},
> +		/*OPP5*/
> +		{0, 430000, 355000, 430000},
> +	};
> +	struct omap_opp vdd1_rate_table_bridge[] = {
> +		{0, 0, 0},
> +		/*OPP1*/
> +		{S125M, VDD1_OPP1, 0},
> +		/*OPP2*/
> +		{S250M, VDD1_OPP2, 0},
> +		/*OPP3*/
> +		{S500M, VDD1_OPP3, 0},
> +		/*OPP4*/
> +		{S550M, VDD1_OPP4, 0},
> +		/*OPP5*/
> +		{S600M, VDD1_OPP5, 0},
> +	};
> +	pdata->dsp_num_speeds = VDD1_OPP5;
Why dont you use ARRAY_SIZE - 1 ?
> +	pdata->mpu_speeds = kzalloc(sizeof(u32) * pdata->dsp_num_speeds,
> +			GFP_KERNEL);
I understand pdata->dsp_num_speeds == pdata->mpu_num_speeds. But don't you think
passing pdata->mpu_num_speeds makes more sense here?
> +	if (!pdata->mpu_speeds) {
> +		pr_err("unable to allocate memory for the mpu"
> +		"frequencies\n");
> +		return -ENOMEM;
> +	}
As I mentioned in my earlier email. You return to the caller here but you free
pdata->dsp_freq_table in the caller even if pdata->dsp_freq_table is not allocated.

> +	pdata->dsp_freq_table = kzalloc(
> +			sizeof(struct dsp_shm_freq_table) *
> +			(pdata->dsp_num_speeds + 1), GFP_KERNEL);
> +	if (!pdata->dsp_freq_table) {
> +		pr_err("unable to allocate memory for the dsp"
> +		"frequencies\n");
> +		return -ENOMEM;
> +	}
> +	for (i = 0; i < 6; i++)
Why are you hard coding numeric 6 here?

> +		pdata->mpu_speed[i] = vdd1_rate_table_bridge[i].rate;
> +	pdata->mpu_max_speed = pdata->mpu_speed[VDD1_OPP5];
You can use ARRAY_SIZE.
> +	pdata->mpu_min_speed = pdata->mpu_speed[VDD1_OPP1];
> +	pdata->dsp_num_speeds = VDD1_OPP5;
Same..ARRAY_SIZE...
> +	for (i = 0; i <= pdata->dsp_num_speeds; i++) {
> +		pdata->dsp_freq_table[i].u_volts =
> +				vdd1_dsp_freq[i][0];
> +		frequency = pdata->dsp_freq_table[i].dsp_freq =
> +			frequency = vdd1_dsp_freq[i][1];
> +		pdata->dsp_freq_table[i].thresh_min_freq =
> +			vdd1_dsp_freq[i][2];
> +		pdata->dsp_freq_table[i].thresh_max_freq =
> +			vdd1_dsp_freq[i][3];
> +	}
>  #endif
>  	return 0;
>  }

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq
  2010-01-20 22:19 ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Nishanth Menon
  2010-01-20 22:19   ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Nishanth Menon
@ 2010-01-21  7:38   ` Romit Dasgupta
  2010-01-21  7:40     ` Romit Dasgupta
  2010-01-21  7:45   ` Romit Dasgupta
  2 siblings, 1 reply; 13+ messages in thread
From: Romit Dasgupta @ 2010-01-21  7:38 UTC (permalink / raw)
  To: Menon, Nishanth
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

> 
> diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
> +
>  static int __init dspbridge_init(void)
>  {
>  	struct platform_device *pdev;
> @@ -48,6 +65,10 @@ static int __init dspbridge_init(void)
>  	if (!pdev)
>  		goto err_out;
>  
> +	err = get_opp_table(pdata);
> +	if (err)
> +		goto err_out;
> +
>  	err = platform_device_add_data(pdev, pdata, sizeof(*pdata));
>  	if (err)
>  		goto err_out;
> @@ -60,6 +81,10 @@ static int __init dspbridge_init(void)
>  	return 0;
>  
>  err_out:
> +	kfree(pdata->mpu_speeds);
> +	kfree(pdata->dsp_freq_table);
Are we sure that pdata->dsp_freq_table is NULL before initialization?
Looking at your second part of the patch. You seem to invoke kfree for
pdata->dsp_freq_table even if pdata->dsp_freq_table is not allocated.
So my question is :

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq
  2010-01-21  7:38   ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Romit Dasgupta
@ 2010-01-21  7:40     ` Romit Dasgupta
  2010-01-21  7:42       ` Nishanth Menon
  0 siblings, 1 reply; 13+ messages in thread
From: Romit Dasgupta @ 2010-01-21  7:40 UTC (permalink / raw)
  To: Menon, Nishanth
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

Romit Dasgupta wrote:
>> diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
>> +
>>  static int __init dspbridge_init(void)
>>  {
>>  	struct platform_device *pdev;
>> @@ -48,6 +65,10 @@ static int __init dspbridge_init(void)
>>  	if (!pdev)
>>  		goto err_out;
>>  
>> +	err = get_opp_table(pdata);
>> +	if (err)
>> +		goto err_out;
>> +
>>  	err = platform_device_add_data(pdev, pdata, sizeof(*pdata));
>>  	if (err)
>>  		goto err_out;
>> @@ -60,6 +81,10 @@ static int __init dspbridge_init(void)
>>  	return 0;
>>  
>>  err_out:
>> +	kfree(pdata->mpu_speeds);
>> +	kfree(pdata->dsp_freq_table);
> Are we sure that pdata->dsp_freq_table is NULL before initialization?
> Looking at your second part of the patch. You seem to invoke kfree for
> pdata->dsp_freq_table even if pdata->dsp_freq_table is not allocated.
> So my question is :
missed the last part of the mail. If pdata->dsp_freq_table is NULL to start
with. This is ok. Otherwise this needs to be changed.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq
  2010-01-21  7:40     ` Romit Dasgupta
@ 2010-01-21  7:42       ` Nishanth Menon
  0 siblings, 0 replies; 13+ messages in thread
From: Nishanth Menon @ 2010-01-21  7:42 UTC (permalink / raw)
  To: Dasgupta, Romit
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

Dasgupta, Romit had written, on 01/21/2010 01:40 AM, the following:
> Romit Dasgupta wrote:
>>> diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
>>> +
>>>  static int __init dspbridge_init(void)
>>>  {
>>>  	struct platform_device *pdev;
>>> @@ -48,6 +65,10 @@ static int __init dspbridge_init(void)
>>>  	if (!pdev)
>>>  		goto err_out;
>>>  
>>> +	err = get_opp_table(pdata);
>>> +	if (err)
>>> +		goto err_out;
>>> +
>>>  	err = platform_device_add_data(pdev, pdata, sizeof(*pdata));
>>>  	if (err)
>>>  		goto err_out;
>>> @@ -60,6 +81,10 @@ static int __init dspbridge_init(void)
>>>  	return 0;
>>>  
>>>  err_out:
>>> +	kfree(pdata->mpu_speeds);
>>> +	kfree(pdata->dsp_freq_table);
>> Are we sure that pdata->dsp_freq_table is NULL before initialization?
>> Looking at your second part of the patch. You seem to invoke kfree for
>> pdata->dsp_freq_table even if pdata->dsp_freq_table is not allocated.
>> So my question is :
> missed the last part of the mail. If pdata->dsp_freq_table is NULL to start
> with. This is ok. Otherwise this needs to be changed.
;) yep it is NULL to start with as the same file passes pdata from:
static struct dspbridge_platform_data dspbridge_pdata __initdata
and kfree is NULL safe :D.

-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq
  2010-01-20 22:19 ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Nishanth Menon
  2010-01-20 22:19   ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Nishanth Menon
  2010-01-21  7:38   ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Romit Dasgupta
@ 2010-01-21  7:45   ` Romit Dasgupta
  2010-01-21  7:48     ` Nishanth Menon
  2 siblings, 1 reply; 13+ messages in thread
From: Romit Dasgupta @ 2010-01-21  7:45 UTC (permalink / raw)
  To: Menon, Nishanth
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

> @@ -67,6 +92,9 @@ module_init(dspbridge_init);
>  
>  static void __exit dspbridge_exit(void)
>  {
> +	struct dspbridge_platform_data *pdata = &dspbridge_pdata;
> +	kfree(pdata->mpu_speeds);
> +	kfree(pdata->dsp_freq_table);
>  	platform_device_unregister(dspbridge_pdev);
>  }
>  module_exit(dspbridge_exit);

Ok if pdata->mpu_speeds, pdata->dsp_freq_table are NULL to start with, then you
need to make them NULL after kfree as well. Otherwise next time you insert the
module it may fail if pdata_mpu_speeds is initialized but pdata->dsp_freq_table
is not.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps
  2010-01-21  7:38     ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Romit Dasgupta
@ 2010-01-21  7:47       ` Nishanth Menon
  0 siblings, 0 replies; 13+ messages in thread
From: Nishanth Menon @ 2010-01-21  7:47 UTC (permalink / raw)
  To: Dasgupta, Romit
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

Dasgupta, Romit had written, on 01/21/2010 01:38 AM, the following:
>>  arch/arm/mach-omap2/dspbridge.c |   59 ++++++++++++++++++++++++++++++++++++++-
>>  1 files changed, 58 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/dspbridge.c b/arch/arm/mach-omap2/dspbridge.c
>> index 26b860f..120d8a2 100644
>> --- a/arch/arm/mach-omap2/dspbridge.c
>> +++ b/arch/arm/mach-omap2/dspbridge.c
>> @@ -42,7 +42,64 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
>>  static int get_opp_table(struct dspbridge_platform_data *pdata)
>>  {
>>  #ifdef CONFIG_BRIDGE_DVFS
>> -	/* Do nothing now  - fill based on PM implementation */
>> +	/* legacy values for 3430 */
>> +	u32 vdd1_dsp_freq[6][4] = {
>> +		{0, 0, 0, 0},
>> +		/*OPP1*/
>> +		{0, 90000, 0, 86000},
>> +		/*OPP2*/
>> +		{0, 180000, 80000, 170000},
>> +		/*OPP3*/
>> +		{0, 360000, 160000, 340000},
>> +		/*OPP4*/
>> +		{0, 396000, 325000, 376000},
>> +		/*OPP5*/
>> +		{0, 430000, 355000, 430000},
>> +	};
>> +	struct omap_opp vdd1_rate_table_bridge[] = {
>> +		{0, 0, 0},
>> +		/*OPP1*/
>> +		{S125M, VDD1_OPP1, 0},
>> +		/*OPP2*/
>> +		{S250M, VDD1_OPP2, 0},
>> +		/*OPP3*/
>> +		{S500M, VDD1_OPP3, 0},
>> +		/*OPP4*/
>> +		{S550M, VDD1_OPP4, 0},
>> +		/*OPP5*/
>> +		{S600M, VDD1_OPP5, 0},
>> +	};
>> +	pdata->dsp_num_speeds = VDD1_OPP5;
> Why dont you use ARRAY_SIZE - 1 ?
This is a 1-1 transposition of old code here. further improvement 
patches is a good thing to have (though I find the usage of ARRAY_SIZE 
still wont make it cpu independent).

>> +	pdata->mpu_speeds = kzalloc(sizeof(u32) * pdata->dsp_num_speeds,
>> +			GFP_KERNEL);
> I understand pdata->dsp_num_speeds == pdata->mpu_num_speeds. But don't you think
> passing pdata->mpu_num_speeds makes more sense here?
thanks for catching this -> yeah, it is right to use mpu_num_speeds 
(even though the nums are the same)

>> +	if (!pdata->mpu_speeds) {
>> +		pr_err("unable to allocate memory for the mpu"
>> +		"frequencies\n");
>> +		return -ENOMEM;
>> +	}
> As I mentioned in my earlier email. You return to the caller here but you free
> pdata->dsp_freq_table in the caller even if pdata->dsp_freq_table is not allocated.
yes, that is coz kfree is NULL safe. you can verify that by writing a 
simple code and testing on checkpatch:
if (ptr)
	kfree(ptr);

> 
>> +	pdata->dsp_freq_table = kzalloc(
>> +			sizeof(struct dsp_shm_freq_table) *
>> +			(pdata->dsp_num_speeds + 1), GFP_KERNEL);
>> +	if (!pdata->dsp_freq_table) {
>> +		pr_err("unable to allocate memory for the dsp"
>> +		"frequencies\n");
>> +		return -ENOMEM;
>> +	}
>> +	for (i = 0; i < 6; i++)
> Why are you hard coding numeric 6 here?
carry over of old code - intention is *not* to optimize this.

> 
>> +		pdata->mpu_speed[i] = vdd1_rate_table_bridge[i].rate;
>> +	pdata->mpu_max_speed = pdata->mpu_speed[VDD1_OPP5];
> You can use ARRAY_SIZE.
>> +	pdata->mpu_min_speed = pdata->mpu_speed[VDD1_OPP1];
>> +	pdata->dsp_num_speeds = VDD1_OPP5;
> Same..ARRAY_SIZE...
intention was to retain the old logic here.
>> +	for (i = 0; i <= pdata->dsp_num_speeds; i++) {
>> +		pdata->dsp_freq_table[i].u_volts =
>> +				vdd1_dsp_freq[i][0];
>> +		frequency = pdata->dsp_freq_table[i].dsp_freq =
>> +			frequency = vdd1_dsp_freq[i][1];
>> +		pdata->dsp_freq_table[i].thresh_min_freq =
>> +			vdd1_dsp_freq[i][2];
>> +		pdata->dsp_freq_table[i].thresh_max_freq =
>> +			vdd1_dsp_freq[i][3];
>> +	}
>>  #endif
>>  	return 0;
>>  }


-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq
  2010-01-21  7:45   ` Romit Dasgupta
@ 2010-01-21  7:48     ` Nishanth Menon
  0 siblings, 0 replies; 13+ messages in thread
From: Nishanth Menon @ 2010-01-21  7:48 UTC (permalink / raw)
  To: Dasgupta, Romit
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

Dasgupta, Romit had written, on 01/21/2010 01:45 AM, the following:
>> @@ -67,6 +92,9 @@ module_init(dspbridge_init);
>>  
>>  static void __exit dspbridge_exit(void)
>>  {
>> +	struct dspbridge_platform_data *pdata = &dspbridge_pdata;
>> +	kfree(pdata->mpu_speeds);
>> +	kfree(pdata->dsp_freq_table);
>>  	platform_device_unregister(dspbridge_pdev);
>>  }
>>  module_exit(dspbridge_exit);
> 
> Ok if pdata->mpu_speeds, pdata->dsp_freq_table are NULL to start with, then you
> need to make them NULL after kfree as well. Otherwise next time you insert the
> module it may fail if pdata_mpu_speeds is initialized but pdata->dsp_freq_table
> is not.
Good catch. thanks.

-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list
  2010-01-20 22:19     ` [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list Nishanth Menon
@ 2010-01-21  7:58       ` Romit Dasgupta
  2010-01-21  7:59         ` Nishanth Menon
  0 siblings, 1 reply; 13+ messages in thread
From: Romit Dasgupta @ 2010-01-21  7:58 UTC (permalink / raw)
  To: Menon, Nishanth
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

Menon, Nishanth wrote:
> Use the PM-WIP-OPP branch apis for generating the opp list for DSP.
> This allows for scaling accross 3430,3440,3450 and 3630 series.
> 
> @@ -42,7 +56,90 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
>  static int get_opp_table(struct dspbridge_platform_data *pdata)
>  {
Is get_opp_table used anywhere other than dspbridge_init? I dont see any usage
outside this now.

Can't you make this __init?

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list
  2010-01-21  7:58       ` Romit Dasgupta
@ 2010-01-21  7:59         ` Nishanth Menon
  0 siblings, 0 replies; 13+ messages in thread
From: Nishanth Menon @ 2010-01-21  7:59 UTC (permalink / raw)
  To: Dasgupta, Romit
  Cc: linux-omap, Ameya Palande, Chitriki Rudramuni, Deepak,
	Felipe Contreras, Hiroshi Doyu, Ramirez Luna, Omar

Dasgupta, Romit had written, on 01/21/2010 01:58 AM, the following:
> Menon, Nishanth wrote:
>> Use the PM-WIP-OPP branch apis for generating the opp list for DSP.
>> This allows for scaling accross 3430,3440,3450 and 3630 series.
>>
>> @@ -42,7 +56,90 @@ static struct dspbridge_platform_data dspbridge_pdata __initdata = {
>>  static int get_opp_table(struct dspbridge_platform_data *pdata)
>>  {
> Is get_opp_table used anywhere other than dspbridge_init? I dont see any usage
> outside this now.
it was not meant to be (static).
> 
> Can't you make this __init?
ack. duh to myself.

-- 
Regards,
Nishanth Menon

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-01-21  7:59 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-20 22:19 [PATCH 0/2] DSPBRIDGE: cleanup OPP handling Nishanth Menon
2010-01-20 22:19 ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Nishanth Menon
2010-01-20 22:19   ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Nishanth Menon
2010-01-20 22:19     ` [RFC] [PATCH 2/2] DSPBRIDGE: pm: use pm-wip-opp APIs for opp list Nishanth Menon
2010-01-21  7:58       ` Romit Dasgupta
2010-01-21  7:59         ` Nishanth Menon
2010-01-21  7:38     ` [PATCH 2/2] DSPBRIDGE: pm: use old implementation for opps Romit Dasgupta
2010-01-21  7:47       ` Nishanth Menon
2010-01-21  7:38   ` [PATCH 1/2] DSPBRIDGE: remove dependency of mpu freq Romit Dasgupta
2010-01-21  7:40     ` Romit Dasgupta
2010-01-21  7:42       ` Nishanth Menon
2010-01-21  7:45   ` Romit Dasgupta
2010-01-21  7:48     ` Nishanth Menon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox