Skip to content

Commit

Permalink
dmaengine: imx-sdma: pass sdma firmware name via platform data
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shawn Guo authored and Sascha Hauer committed Jul 7, 2011
1 parent 3622360 commit 2e534b2
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 22 deletions.
3 changes: 1 addition & 2 deletions arch/arm/mach-imx/mm-imx25.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};

Expand Down
9 changes: 6 additions & 3 deletions arch/arm/mach-imx/mm-imx31.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};

Expand All @@ -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);
}
9 changes: 6 additions & 3 deletions arch/arm/mach-imx/mm-imx35.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};

Expand All @@ -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);
}
9 changes: 2 additions & 7 deletions arch/arm/mach-mx5/mm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};

Expand All @@ -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);
}

Expand Down
6 changes: 2 additions & 4 deletions arch/arm/plat-mxc/include/mach/sdma.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

Expand Down
6 changes: 3 additions & 3 deletions drivers/dma/imx-sdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 2e534b2

Please sign in to comment.