dmaengine: imx-sdma: Add i.MX7 support
authorFabio Estevam <fabio.estevam@nxp.com>
Wed, 10 Aug 2016 16:05:05 +0000 (13:05 -0300)
committerVinod Koul <vinod.koul@intel.com>
Wed, 31 Aug 2016 04:26:54 +0000 (09:56 +0530)
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>
Documentation/devicetree/bindings/dma/fsl-imx-sdma.txt
drivers/dma/imx-sdma.c

index 175f0e4..3c9a57a 100644 (file)
@@ -8,6 +8,7 @@ Required properties:
       "fsl,imx51-sdma"
       "fsl,imx53-sdma"
       "fsl,imx6q-sdma"
+      "fsl,imx7d-sdma"
   The -to variants should be preferred since they allow to determine the
   correct ROM script addresses needed for the driver to work without additional
   firmware.
index 5f55c5a..6eade38 100644 (file)
@@ -479,6 +479,24 @@ static struct sdma_driver_data sdma_imx6q = {
        .script_addrs = &sdma_script_imx6q,
 };
 
+static struct sdma_script_start_addrs sdma_script_imx7d = {
+       .ap_2_ap_addr = 644,
+       .uart_2_mcu_addr = 819,
+       .mcu_2_app_addr = 749,
+       .uartsh_2_mcu_addr = 1034,
+       .mcu_2_shp_addr = 962,
+       .app_2_mcu_addr = 685,
+       .shp_2_mcu_addr = 893,
+       .spdif_2_mcu_addr = 1102,
+       .mcu_2_spdif_addr = 1136,
+};
+
+static struct sdma_driver_data sdma_imx7d = {
+       .chnenbl0 = SDMA_CHNENBL0_IMX35,
+       .num_events = 48,
+       .script_addrs = &sdma_script_imx7d,
+};
+
 static const struct platform_device_id sdma_devtypes[] = {
        {
                .name = "imx25-sdma",
@@ -498,6 +516,9 @@ static const struct platform_device_id sdma_devtypes[] = {
        }, {
                .name = "imx6q-sdma",
                .driver_data = (unsigned long)&sdma_imx6q,
+       }, {
+               .name = "imx7d-sdma",
+               .driver_data = (unsigned long)&sdma_imx7d,
        }, {
                /* sentinel */
        }
@@ -511,6 +532,7 @@ static const struct of_device_id sdma_dt_ids[] = {
        { .compatible = "fsl,imx35-sdma", .data = &sdma_imx35, },
        { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, },
        { .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, },
+       { .compatible = "fsl,imx7d-sdma", .data = &sdma_imx7d, },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, sdma_dt_ids);
@@ -1375,6 +1397,7 @@ static void sdma_issue_pending(struct dma_chan *chan)
 #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1        34
 #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2        38
 #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3        41
+#define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V4        42
 
 static void sdma_add_scripts(struct sdma_engine *sdma,
                const struct sdma_script_start_addrs *addr)
@@ -1424,6 +1447,9 @@ static void sdma_load_firmware(const struct firmware *fw, void *context)
        case 3:
                sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V3;
                break;
+       case 4:
+               sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V4;
+               break;
        default:
                dev_err(sdma->dev, "unknown firmware version\n");
                goto err_firmware;