aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/imx-sdma.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-08-20 04:04:32 -0400
committerVinod Koul <vinod.koul@intel.com>2013-08-26 11:17:16 -0400
commitdcfec3c09890120d86d4e86887074c76763075ca (patch)
tree9522a808823128c8ec673f2ded11f5f40b1671d0 /drivers/dma/imx-sdma.c
parent17bba72f8f89a1a164faa0d0b3f1d850eba399ce (diff)
dma: imx-sdma: Add ROM script addresses to driver
This adds the ROM script addresses for i.MX25, i.MX5x and i.MX6 to the SDMA driver needed for the driver to work without additional firmware. The ROM script addresses are SoC specific and in some cases even tapeout specific. This patch adds the ROM script addresses only for SoCs which do not have a tapeout specific SDMA ROM, because currently it's unclear how this case should be handled. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Acked-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/imx-sdma.c')
-rw-r--r--drivers/dma/imx-sdma.c100
1 files changed, 99 insertions, 1 deletions
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
index e62be230d2fc..59bf9f59fcaa 100644
--- a/drivers/dma/imx-sdma.c
+++ b/drivers/dma/imx-sdma.c
@@ -308,6 +308,7 @@ struct sdma_firmware_header {
308struct sdma_driver_data { 308struct sdma_driver_data {
309 int chnenbl0; 309 int chnenbl0;
310 int num_events; 310 int num_events;
311 struct sdma_script_start_addrs *script_addrs;
311}; 312};
312 313
313struct sdma_engine { 314struct sdma_engine {
@@ -331,27 +332,122 @@ struct sdma_driver_data sdma_imx31 = {
331 .num_events = 32, 332 .num_events = 32,
332}; 333};
333 334
335static struct sdma_script_start_addrs sdma_script_imx25 = {
336 .ap_2_ap_addr = 729,
337 .uart_2_mcu_addr = 904,
338 .per_2_app_addr = 1255,
339 .mcu_2_app_addr = 834,
340 .uartsh_2_mcu_addr = 1120,
341 .per_2_shp_addr = 1329,
342 .mcu_2_shp_addr = 1048,
343 .ata_2_mcu_addr = 1560,
344 .mcu_2_ata_addr = 1479,
345 .app_2_per_addr = 1189,
346 .app_2_mcu_addr = 770,
347 .shp_2_per_addr = 1407,
348 .shp_2_mcu_addr = 979,
349};
350
351struct sdma_driver_data sdma_imx25 = {
352 .chnenbl0 = SDMA_CHNENBL0_IMX35,
353 .num_events = 48,
354 .script_addrs = &sdma_script_imx25,
355};
356
334struct sdma_driver_data sdma_imx35 = { 357struct sdma_driver_data sdma_imx35 = {
335 .chnenbl0 = SDMA_CHNENBL0_IMX35, 358 .chnenbl0 = SDMA_CHNENBL0_IMX35,
336 .num_events = 48, 359 .num_events = 48,
337}; 360};
338 361
362static struct sdma_script_start_addrs sdma_script_imx51 = {
363 .ap_2_ap_addr = 642,
364 .uart_2_mcu_addr = 817,
365 .mcu_2_app_addr = 747,
366 .mcu_2_shp_addr = 961,
367 .ata_2_mcu_addr = 1473,
368 .mcu_2_ata_addr = 1392,
369 .app_2_per_addr = 1033,
370 .app_2_mcu_addr = 683,
371 .shp_2_per_addr = 1251,
372 .shp_2_mcu_addr = 892,
373};
374
375struct sdma_driver_data sdma_imx51 = {
376 .chnenbl0 = SDMA_CHNENBL0_IMX35,
377 .num_events = 48,
378 .script_addrs = &sdma_script_imx51,
379};
380
381static struct sdma_script_start_addrs sdma_script_imx53 = {
382 .ap_2_ap_addr = 642,
383 .app_2_mcu_addr = 683,
384 .mcu_2_app_addr = 747,
385 .uart_2_mcu_addr = 817,
386 .shp_2_mcu_addr = 891,
387 .mcu_2_shp_addr = 960,
388 .uartsh_2_mcu_addr = 1032,
389 .spdif_2_mcu_addr = 1100,
390 .mcu_2_spdif_addr = 1134,
391 .firi_2_mcu_addr = 1193,
392 .mcu_2_firi_addr = 1290,
393};
394
395struct sdma_driver_data sdma_imx53 = {
396 .chnenbl0 = SDMA_CHNENBL0_IMX35,
397 .num_events = 48,
398 .script_addrs = &sdma_script_imx53,
399};
400
401static struct sdma_script_start_addrs sdma_script_imx6q = {
402 .ap_2_ap_addr = 642,
403 .uart_2_mcu_addr = 817,
404 .mcu_2_app_addr = 747,
405 .per_2_per_addr = 6331,
406 .uartsh_2_mcu_addr = 1032,
407 .mcu_2_shp_addr = 960,
408 .app_2_mcu_addr = 683,
409 .shp_2_mcu_addr = 891,
410 .spdif_2_mcu_addr = 1100,
411 .mcu_2_spdif_addr = 1134,
412};
413
414struct sdma_driver_data sdma_imx6q = {
415 .chnenbl0 = SDMA_CHNENBL0_IMX35,
416 .num_events = 48,
417 .script_addrs = &sdma_script_imx6q,
418};
419
339static struct platform_device_id sdma_devtypes[] = { 420static struct platform_device_id sdma_devtypes[] = {
340 { 421 {
422 .name = "imx25-sdma",
423 .driver_data = (unsigned long)&sdma_imx25,
424 }, {
341 .name = "imx31-sdma", 425 .name = "imx31-sdma",
342 .driver_data = (unsigned long)&sdma_imx31, 426 .driver_data = (unsigned long)&sdma_imx31,
343 }, { 427 }, {
344 .name = "imx35-sdma", 428 .name = "imx35-sdma",
345 .driver_data = (unsigned long)&sdma_imx35, 429 .driver_data = (unsigned long)&sdma_imx35,
346 }, { 430 }, {
431 .name = "imx51-sdma",
432 .driver_data = (unsigned long)&sdma_imx51,
433 }, {
434 .name = "imx53-sdma",
435 .driver_data = (unsigned long)&sdma_imx53,
436 }, {
437 .name = "imx6q-sdma",
438 .driver_data = (unsigned long)&sdma_imx6q,
439 }, {
347 /* sentinel */ 440 /* sentinel */
348 } 441 }
349}; 442};
350MODULE_DEVICE_TABLE(platform, sdma_devtypes); 443MODULE_DEVICE_TABLE(platform, sdma_devtypes);
351 444
352static const struct of_device_id sdma_dt_ids[] = { 445static const struct of_device_id sdma_dt_ids[] = {
353 { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, }, 446 { .compatible = "fsl,imx6q-sdma", .data = &sdma_imx6q, },
447 { .compatible = "fsl,imx53-sdma", .data = &sdma_imx53, },
448 { .compatible = "fsl,imx51-sdma", .data = &sdma_imx51, },
354 { .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, }, 449 { .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, },
450 { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, },
355 { /* sentinel */ } 451 { /* sentinel */ }
356}; 452};
357MODULE_DEVICE_TABLE(of, sdma_dt_ids); 453MODULE_DEVICE_TABLE(of, sdma_dt_ids);
@@ -1424,6 +1520,8 @@ static int __init sdma_probe(struct platform_device *pdev)
1424 if (ret) 1520 if (ret)
1425 goto err_init; 1521 goto err_init;
1426 1522
1523 if (sdma->drvdata->script_addrs)
1524 sdma_add_scripts(sdma, sdma->drvdata->script_addrs);
1427 if (pdata && pdata->script_addrs) 1525 if (pdata && pdata->script_addrs)
1428 sdma_add_scripts(sdma, pdata->script_addrs); 1526 sdma_add_scripts(sdma, pdata->script_addrs);
1429 1527