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 ---