dmaengine: imx-sdma: pass sdma firmware name via platform data
authorShawn Guo <shawn.guo@linaro.org>
Wed, 22 Jun 2011 14:41:31 +0000 (22:41 +0800)
committerSascha Hauer <s.hauer@pengutronix.de>
Thu, 7 Jul 2011 08:01:12 +0000 (10:01 +0200)
It is not good to have cpu_name and to_version encoded into sdma
firmware name as variables.  For example, there are three TOs of
imx51 soc, the sdma script never changes since TO1, which means
all three TOs of imx51 uses TO1 version of sdma script.  But we
have to prepare three identical firmwares, sdma-imx51-to1.bin
sdma-imx51-to2.bin and sdma-imx51-to3.bin, to have the kernel
capable of running on all three TOs.

The patch removes cpu_name and to_version from sdma platform data,
and instead uses fw_name to pass the firmware name, so that we can
pass the TO version where it's relevant and skip it where only one
firmware exists.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/mach-imx/mm-imx25.c
arch/arm/mach-imx/mm-imx31.c
arch/arm/mach-imx/mm-imx35.c
arch/arm/mach-mx5/mm.c
arch/arm/plat-mxc/include/mach/sdma.h
drivers/dma/imx-sdma.c

index 0c545207ce002a4caa62549eadab4b7a59d76112..1e0c95651c2315a5c7a113e27f5b71572cd80c6b 100644 (file)
@@ -80,8 +80,7 @@ static struct sdma_script_start_addrs imx25_sdma_script __initdata = {
 
 static struct sdma_platform_data imx25_sdma_pdata __initdata = {
        .sdma_version = 2,
-       .cpu_name = "imx25",
-       .to_version = 1,
+       .fw_name = "sdma-imx25.bin",
        .script_addrs = &imx25_sdma_script,
 };
 
index 6af8519d3d6c654cb5e3610cb8562c289e0521fd..a1ff96f249d1b90f2689909a47d06d0cc259c402 100644 (file)
@@ -70,7 +70,7 @@ static struct sdma_script_start_addrs imx31_to2_sdma_script __initdata = {
 
 static struct sdma_platform_data imx31_sdma_pdata __initdata = {
        .sdma_version = 1,
-       .cpu_name = "imx31",
+       .fw_name = "sdma-imx31-to2.bin",
        .script_addrs = &imx31_to2_sdma_script,
 };
 
@@ -82,8 +82,11 @@ void __init imx31_soc_init(void)
        mxc_register_gpio(1, MX31_GPIO2_BASE_ADDR, SZ_16K, MX31_INT_GPIO2, 0);
        mxc_register_gpio(2, MX31_GPIO3_BASE_ADDR, SZ_16K, MX31_INT_GPIO3, 0);
 
-       imx31_sdma_pdata.to_version = to_version;
-       if (to_version == 1)
+       if (to_version == 1) {
+               strncpy(imx31_sdma_pdata.fw_name, "sdma-imx31-to1.bin",
+                       strlen(imx31_sdma_pdata.fw_name));
                imx31_sdma_pdata.script_addrs = &imx31_to1_sdma_script;
+       }
+
        imx_add_imx_sdma(MX31_SDMA_BASE_ADDR, MX31_INT_SDMA, &imx31_sdma_pdata);
 }
index 9891adb524587eea1d0bd81103b6a8df295cd474..da530ca48aeadd6c757af71973b22f4e037cad0a 100644 (file)
@@ -87,7 +87,7 @@ static struct sdma_script_start_addrs imx35_to2_sdma_script __initdata = {
 
 static struct sdma_platform_data imx35_sdma_pdata __initdata = {
        .sdma_version = 2,
-       .cpu_name = "imx35",
+       .fw_name = "sdma-imx35-to2.bin",
        .script_addrs = &imx35_to2_sdma_script,
 };
 
@@ -99,8 +99,11 @@ void __init imx35_soc_init(void)
        mxc_register_gpio(1, MX35_GPIO2_BASE_ADDR, SZ_16K, MX35_INT_GPIO2, 0);
        mxc_register_gpio(2, MX35_GPIO3_BASE_ADDR, SZ_16K, MX35_INT_GPIO3, 0);
 
-       imx35_sdma_pdata.to_version = to_version;
-       if (to_version == 1)
+       if (to_version == 1) {
+               strncpy(imx35_sdma_pdata.fw_name, "sdma-imx35-to1.bin",
+                       strlen(imx35_sdma_pdata.fw_name));
                imx35_sdma_pdata.script_addrs = &imx35_to1_sdma_script;
+       }
+
        imx_add_imx_sdma(MX35_SDMA_BASE_ADDR, MX35_INT_SDMA, &imx35_sdma_pdata);
 }
index aa848ea987e88b59eacf77a733a7358874055924..1b7059f1ac7645c42eb305ffd30270ee0986cf9b 100644 (file)
@@ -116,8 +116,7 @@ static struct sdma_script_start_addrs imx51_sdma_script __initdata = {
 
 static struct sdma_platform_data imx51_sdma_pdata __initdata = {
        .sdma_version = 2,
-       .cpu_name = "imx51",
-       .to_version = 1,
+       .fw_name = "sdma-imx51.bin",
        .script_addrs = &imx51_sdma_script,
 };
 
@@ -137,21 +136,17 @@ static struct sdma_script_start_addrs imx53_sdma_script __initdata = {
 
 static struct sdma_platform_data imx53_sdma_pdata __initdata = {
        .sdma_version = 2,
-       .cpu_name = "imx53",
-       .to_version = 1,
+       .fw_name = "sdma-imx53.bin",
        .script_addrs = &imx53_sdma_script,
 };
 
 void __init imx51_soc_init(void)
 {
-       int to_version = mx51_revision() >> 4;
-
        mxc_register_gpio(0, MX51_GPIO1_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO1_LOW, MX51_MXC_INT_GPIO1_HIGH);
        mxc_register_gpio(1, MX51_GPIO2_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO2_LOW, MX51_MXC_INT_GPIO2_HIGH);
        mxc_register_gpio(2, MX51_GPIO3_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO3_LOW, MX51_MXC_INT_GPIO3_HIGH);
        mxc_register_gpio(3, MX51_GPIO4_BASE_ADDR, SZ_16K, MX51_MXC_INT_GPIO4_LOW, MX51_MXC_INT_GPIO4_HIGH);
 
-       imx51_sdma_pdata.to_version = to_version;
        imx_add_imx_sdma(MX51_SDMA_BASE_ADDR, MX51_INT_SDMA, &imx51_sdma_pdata);
 }
 
index 913e0432e40e99d17d2456ad26b8f3a02e1a72c3..f495c87c113fc269020d0ec49397c2bfc24d3ff0 100644 (file)
@@ -49,14 +49,12 @@ struct sdma_script_start_addrs {
  * struct sdma_platform_data - platform specific data for SDMA engine
  *
  * @sdma_version       The version of this SDMA engine
- * @cpu_name           used to generate the firmware name
- * @to_version         CPU Tape out version
+ * @fw_name            The firmware name
  * @script_addrs       SDMA scripts addresses in SDMA ROM
  */
 struct sdma_platform_data {
        int sdma_version;
-       char *cpu_name;
-       int to_version;
+       char *fw_name;
        struct sdma_script_start_addrs *script_addrs;
 };
 
index b6d1455fa9362ecba3dbfe088df72bc77b2ef21e..1ea47db2ff0630e6cb90f429f7008398597902e3 100644 (file)
@@ -1105,7 +1105,7 @@ static void sdma_add_scripts(struct sdma_engine *sdma,
 }
 
 static int __init sdma_get_firmware(struct sdma_engine *sdma,
-               const char *cpu_name, int to_version)
+               const char *fw_name)
 {
        const struct firmware *fw;
        char *fwname;
@@ -1114,7 +1114,7 @@ static int __init sdma_get_firmware(struct sdma_engine *sdma,
        const struct sdma_script_start_addrs *addr;
        unsigned short *ram_code;
 
-       fwname = kasprintf(GFP_KERNEL, "sdma-%s-to%d.bin", cpu_name, to_version);
+       fwname = kasprintf(GFP_KERNEL, "%s", fw_name);
        if (!fwname)
                return -ENOMEM;
 
@@ -1317,7 +1317,7 @@ static int __init sdma_probe(struct platform_device *pdev)
        if (pdata->script_addrs)
                sdma_add_scripts(sdma, pdata->script_addrs);
 
-       sdma_get_firmware(sdma, pdata->cpu_name, pdata->to_version);
+       sdma_get_firmware(sdma, pdata->fw_name);
 
        sdma->dma_device.dev = &pdev->dev;