Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dma: imx-sdma: Add sdma firmware version 2 support

On i.MX5/6 series, SDMA is using new version firmware to support SSI
dual FIFO feature and HDMI Audio (i.MX6Q/DL only). Thus add it.

Signed-off-by: Nicolin Chen <b42378@freescale.com>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>

authored by

Nicolin Chen and committed by
Vinod Koul
cd72b846 b714b84e

+19 -1
+14 -1
drivers/dma/imx-sdma.c
··· 323 323 struct clk *clk_ipg; 324 324 struct clk *clk_ahb; 325 325 spinlock_t channel_0_lock; 326 + u32 script_number; 326 327 struct sdma_script_start_addrs *script_addrs; 327 328 const struct sdma_driver_data *drvdata; 328 329 }; ··· 1239 1238 } 1240 1239 1241 1240 #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1 34 1241 + #define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2 38 1242 1242 1243 1243 static void sdma_add_scripts(struct sdma_engine *sdma, 1244 1244 const struct sdma_script_start_addrs *addr) ··· 1248 1246 s32 *saddr_arr = (u32 *)sdma->script_addrs; 1249 1247 int i; 1250 1248 1251 - for (i = 0; i < SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1; i++) 1249 + for (i = 0; i < sdma->script_number; i++) 1252 1250 if (addr_arr[i] > 0) 1253 1251 saddr_arr[i] = addr_arr[i]; 1254 1252 } ··· 1274 1272 goto err_firmware; 1275 1273 if (header->ram_code_start + header->ram_code_size > fw->size) 1276 1274 goto err_firmware; 1275 + switch (header->version_major) { 1276 + case 1: 1277 + sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1; 1278 + break; 1279 + case 2: 1280 + sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2; 1281 + break; 1282 + default: 1283 + dev_err(sdma->dev, "unknown firmware version\n"); 1284 + goto err_firmware; 1285 + } 1277 1286 1278 1287 addr = (void *)header + header->script_addrs_start; 1279 1288 ram_code = (void *)header + header->ram_code_start;
+5
include/linux/platform_data/dma-imx-sdma.h
··· 43 43 s32 dptc_dvfs_addr; 44 44 s32 utra_addr; 45 45 s32 ram_code_start_addr; 46 + /* End of v1 array */ 47 + s32 mcu_2_ssish_addr; 48 + s32 ssish_2_mcu_addr; 49 + s32 hdmi_dma_addr; 50 + /* End of v2 array */ 46 51 }; 47 52 48 53 /**