imx-sdma.c (5d43889c07bb38694742936aa70d1187c012e198) | imx-sdma.c (cd72b8462a2ebbf9524e726c65c2770f0bf70d22) |
---|---|
1/* 2 * drivers/dma/imx-sdma.c 3 * 4 * This file contains a driver for the Freescale Smart DMA engine 5 * 6 * Copyright 2010 Sascha Hauer, Pengutronix <s.hauer@pengutronix.de> 7 * 8 * Based on code from Freescale: --- 309 unchanged lines hidden (view full) --- 318 struct sdma_channel_control *channel_control; 319 void __iomem *regs; 320 struct sdma_context_data *context; 321 dma_addr_t context_phys; 322 struct dma_device dma_device; 323 struct clk *clk_ipg; 324 struct clk *clk_ahb; 325 spinlock_t channel_0_lock; | 1/* 2 * drivers/dma/imx-sdma.c 3 * 4 * This file contains a driver for the Freescale Smart DMA engine 5 * 6 * Copyright 2010 Sascha Hauer, Pengutronix <s.hauer@pengutronix.de> 7 * 8 * Based on code from Freescale: --- 309 unchanged lines hidden (view full) --- 318 struct sdma_channel_control *channel_control; 319 void __iomem *regs; 320 struct sdma_context_data *context; 321 dma_addr_t context_phys; 322 struct dma_device dma_device; 323 struct clk *clk_ipg; 324 struct clk *clk_ahb; 325 spinlock_t channel_0_lock; |
326 u32 script_number; |
|
326 struct sdma_script_start_addrs *script_addrs; 327 const struct sdma_driver_data *drvdata; 328}; 329 330static struct sdma_driver_data sdma_imx31 = { 331 .chnenbl0 = SDMA_CHNENBL0_IMX31, 332 .num_events = 32, 333}; --- 899 unchanged lines hidden (view full) --- 1233 struct sdma_channel *sdmac = to_sdma_chan(chan); 1234 struct sdma_engine *sdma = sdmac->sdma; 1235 1236 if (sdmac->status == DMA_IN_PROGRESS) 1237 sdma_enable_channel(sdma, sdmac->channel); 1238} 1239 1240#define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1 34 | 327 struct sdma_script_start_addrs *script_addrs; 328 const struct sdma_driver_data *drvdata; 329}; 330 331static struct sdma_driver_data sdma_imx31 = { 332 .chnenbl0 = SDMA_CHNENBL0_IMX31, 333 .num_events = 32, 334}; --- 899 unchanged lines hidden (view full) --- 1234 struct sdma_channel *sdmac = to_sdma_chan(chan); 1235 struct sdma_engine *sdma = sdmac->sdma; 1236 1237 if (sdmac->status == DMA_IN_PROGRESS) 1238 sdma_enable_channel(sdma, sdmac->channel); 1239} 1240 1241#define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1 34 |
1242#define SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2 38 |
|
1241 1242static void sdma_add_scripts(struct sdma_engine *sdma, 1243 const struct sdma_script_start_addrs *addr) 1244{ 1245 s32 *addr_arr = (u32 *)addr; 1246 s32 *saddr_arr = (u32 *)sdma->script_addrs; 1247 int i; 1248 | 1243 1244static void sdma_add_scripts(struct sdma_engine *sdma, 1245 const struct sdma_script_start_addrs *addr) 1246{ 1247 s32 *addr_arr = (u32 *)addr; 1248 s32 *saddr_arr = (u32 *)sdma->script_addrs; 1249 int i; 1250 |
1249 for (i = 0; i < SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1; i++) | 1251 for (i = 0; i < sdma->script_number; i++) |
1250 if (addr_arr[i] > 0) 1251 saddr_arr[i] = addr_arr[i]; 1252} 1253 1254static void sdma_load_firmware(const struct firmware *fw, void *context) 1255{ 1256 struct sdma_engine *sdma = context; 1257 const struct sdma_firmware_header *header; --- 9 unchanged lines hidden (view full) --- 1267 goto err_firmware; 1268 1269 header = (struct sdma_firmware_header *)fw->data; 1270 1271 if (header->magic != SDMA_FIRMWARE_MAGIC) 1272 goto err_firmware; 1273 if (header->ram_code_start + header->ram_code_size > fw->size) 1274 goto err_firmware; | 1252 if (addr_arr[i] > 0) 1253 saddr_arr[i] = addr_arr[i]; 1254} 1255 1256static void sdma_load_firmware(const struct firmware *fw, void *context) 1257{ 1258 struct sdma_engine *sdma = context; 1259 const struct sdma_firmware_header *header; --- 9 unchanged lines hidden (view full) --- 1269 goto err_firmware; 1270 1271 header = (struct sdma_firmware_header *)fw->data; 1272 1273 if (header->magic != SDMA_FIRMWARE_MAGIC) 1274 goto err_firmware; 1275 if (header->ram_code_start + header->ram_code_size > fw->size) 1276 goto err_firmware; |
1277 switch (header->version_major) { 1278 case 1: 1279 sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V1; 1280 break; 1281 case 2: 1282 sdma->script_number = SDMA_SCRIPT_ADDRS_ARRAY_SIZE_V2; 1283 break; 1284 default: 1285 dev_err(sdma->dev, "unknown firmware version\n"); 1286 goto err_firmware; 1287 } |
|
1275 1276 addr = (void *)header + header->script_addrs_start; 1277 ram_code = (void *)header + header->ram_code_start; 1278 1279 clk_enable(sdma->clk_ipg); 1280 clk_enable(sdma->clk_ahb); 1281 /* download the RAM image for SDMA */ 1282 sdma_load_script(sdma, ram_code, --- 340 unchanged lines hidden --- | 1288 1289 addr = (void *)header + header->script_addrs_start; 1290 ram_code = (void *)header + header->ram_code_start; 1291 1292 clk_enable(sdma->clk_ipg); 1293 clk_enable(sdma->clk_ahb); 1294 /* download the RAM image for SDMA */ 1295 sdma_load_script(sdma, ram_code, --- 340 unchanged lines hidden --- |