[PATCH v2 6/6] dmaengine: imx-sdma: pass sdma firmware name via platform data
Vinod Koul
vkoul at infradead.org
Fri Jun 24 06:50:13 EDT 2011
On Wed, 2011-06-22 at 22:41 +0800, Shawn Guo wrote:
> 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 at linaro.org>
> Cc: Sascha Hauer <s.hauer at pengutronix.de>
> Cc: Vinod Koul <vinod.koul at intel.com>
Acked-by: Vinod Koul <vinod.koul at intel.com>
> ---
> arch/arm/mach-imx/mm-imx25.c | 3 +--
> arch/arm/mach-imx/mm-imx31.c | 9 ++++++---
> arch/arm/mach-imx/mm-imx35.c | 9 ++++++---
> arch/arm/mach-mx5/mm.c | 9 ++-------
> arch/arm/plat-mxc/include/mach/sdma.h | 6 ++----
> drivers/dma/imx-sdma.c | 6 +++---
> 6 files changed, 20 insertions(+), 22 deletions(-)
>
> diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c
> index 0c54520..1e0c956 100644
> --- a/arch/arm/mach-imx/mm-imx25.c
> +++ b/arch/arm/mach-imx/mm-imx25.c
> @@ -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,
> };
>
> diff --git a/arch/arm/mach-imx/mm-imx31.c b/arch/arm/mach-imx/mm-imx31.c
> index 6af8519..a1ff96f 100644
> --- a/arch/arm/mach-imx/mm-imx31.c
> +++ b/arch/arm/mach-imx/mm-imx31.c
> @@ -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);
> }
> diff --git a/arch/arm/mach-imx/mm-imx35.c b/arch/arm/mach-imx/mm-imx35.c
> index 9891adb..da530ca 100644
> --- a/arch/arm/mach-imx/mm-imx35.c
> +++ b/arch/arm/mach-imx/mm-imx35.c
> @@ -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);
> }
> diff --git a/arch/arm/mach-mx5/mm.c b/arch/arm/mach-mx5/mm.c
> index aa848ea..1b7059f 100644
> --- a/arch/arm/mach-mx5/mm.c
> +++ b/arch/arm/mach-mx5/mm.c
> @@ -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);
> }
>
> diff --git a/arch/arm/plat-mxc/include/mach/sdma.h b/arch/arm/plat-mxc/include/mach/sdma.h
> index 913e043..f495c87 100644
> --- a/arch/arm/plat-mxc/include/mach/sdma.h
> +++ b/arch/arm/plat-mxc/include/mach/sdma.h
> @@ -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;
> };
>
> diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
> index b6d1455..1ea47db 100644
> --- a/drivers/dma/imx-sdma.c
> +++ b/drivers/dma/imx-sdma.c
> @@ -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;
>
More information about the linux-arm-kernel
mailing list