diff options
author | Fabio Estevam <fabio.estevam@nxp.com> | 2016-08-10 12:05:05 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2016-08-31 00:26:54 -0400 |
commit | b7d2648ac3d4da3ae27f65f14958d2130cdf30ac (patch) | |
tree | 06aa50b984d9e32bbd37956d2170c2e7ed01c858 | |
parent | e4b75760faac2b858e0b244ce716bf30a239ae2f (diff) |
dmaengine: imx-sdma: Add i.MX7 support
Allow i.MX7 to work with the imx-sdma driver.
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Tested-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
-rw-r--r-- | Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt | 1 | ||||
-rw-r--r-- | drivers/dma/imx-sdma.c | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt b/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt index 175f0e44ed85..3c9a57a8443b 100644 --- a/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt +++ b/Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt | |||
@@ -8,6 +8,7 @@ Required properties: | |||
8 | "fsl,imx51-sdma" | 8 | "fsl,imx51-sdma" |
9 | "fsl,imx53-sdma" | 9 | "fsl,imx53-sdma" |
10 | "fsl,imx6q-sdma" | 10 | "fsl,imx6q-sdma" |
11 | "fsl,imx7d-sdma" | ||
11 | The -to variants should be preferred since they allow to determine the | 12 | The -to variants should be preferred since they allow to determine the |
12 | correct ROM script addresses needed for the driver to work without additional | 13 | correct ROM script addresses needed for the driver to work without additional |
13 | firmware. | 14 | firmware. |
diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 5f55c5a6708b..6eade3828aca 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c | |||
@@ -479,6 +479,24 @@ static struct sdma_driver_data sdma_imx6q = { | |||
479 | .script_addrs = &sdma_script_imx6q, | 479 | .script_addrs = &sdma_script_imx6q, |
480 | }; | 480 | }; |
481 | 481 | ||
482 | static struct sdma_script_start_addrs sdma_script_imx7d = { | ||
483 | .ap_2_ap_addr = 644, | ||
484 | .uart_2_mcu_addr = 819, | ||
485 | .mcu_2_app_addr = 749, | ||
486 | .uartsh_2_mcu_addr = 1034, | ||
487 | .mcu_2_shp_addr = 962, | ||
488 | .app_2_mcu_addr = 685, | ||
489 | .shp_2_mcu_addr = 893, | ||
490 | .spdif_2_mcu_addr = 1102, | ||
491 | .mcu_2_spdif_addr = 1136, | ||
492 | }; | ||
493 | |||
494 | static struct sdma_driver_data sdma_imx7d = { | ||
495 | .chnenbl0 = SDMA_CHNENBL0_IMX35, | ||
496 | .num_events = 48, | ||
497 | .script_addrs = &sdma_script_imx7d, | ||
498 | }; | ||
499 | |||
482 | static const struct platform_device_id sdma_devtypes[] = { | 500 | static const struct platform_device_id sdma_devtypes[] = { |
483 | { | 501 | { |
484 | .name = "imx25-sdma", | 502 | .name = "imx25-sdma", |
@@ -499,6 +517,9 @@ static const struct platform_device_id sdma_devtypes[] = { | |||
499 | .name = "imx6q-sdma", | 517 | .name = "imx6q-sdma", |
500 | .driver_data = (unsigned long)&sdma_imx6q, | 518 | .driver_data = (unsigned long)&sdma_imx6q, |
501 | }, { | 519 | }, { |
520 | .name = "imx7d-sdma", | ||
521 | .driver_data = (unsigned long)&sdma_imx7d, | ||
522 | }, { | ||
502 | /* sentinel */ | 523 | /* sentinel */ |
503 | } | 524 | } |
504 | }; | 525 | }; |
@@ -511,6 +532,7 @@ static const struct of_device_id sdma_dt_ids[] = { | |||
511 | { .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, }, | 532 | { .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, }, |
512 | { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, }, | 533 | { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, }, |
513 | { .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, }, | 534 | { .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, }, |
535 | { .compatible = "fsl,imx7d-sdma", .data = &sdma_imx7d, }, | ||
514 | { /* sentinel */ } | 536 | { /* sentinel */ } |
515 | }; | 537 | }; |
516 | MODULE_DEVICE_TABLE(of, sdma_dt_ids); | 538 | MODULE_DEVICE_TABLE(of, sdma_dt_ids); |
@@ -1375,6 +1397,7 @@ static void sdma_issue_pending(struct dma_chan *chan) | |||
1375 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1 34 | 1397 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1 34 |
1376 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2 38 | 1398 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2 38 |
1377 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3 41 | 1399 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3 41 |
1400 | #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V4 42 | ||
1378 | 1401 | ||
1379 | static void sdma_add_scripts(struct sdma_engine *sdma, | 1402 | static void sdma_add_scripts(struct sdma_engine *sdma, |
1380 | const struct sdma_script_start_addrs *addr) | 1403 | const struct sdma_script_start_addrs *addr) |
@@ -1424,6 +1447,9 @@ static void sdma_load_firmware(const struct firmware *fw, void *context) | |||
1424 | case 3: | 1447 | case 3: |
1425 | sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3; | 1448 | sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3; |
1426 | break; | 1449 | break; |
1450 | case 4: | ||
1451 | sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V4; | ||
1452 | break; | ||
1427 | default: | 1453 | default: |
1428 | dev_err(sdma->dev, "unknown firmware version\n"); | 1454 | dev_err(sdma->dev, "unknown firmware version\n"); |
1429 | goto err_firmware; | 1455 | goto err_firmware; |