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

dmaengine: ste_dma40: Fetch disabled channels from DT

Some platforms have channels which are not available for normal use.
This information is currently passed though platform data in internal
BSP kernels. Once those platforms land, they'll need to configure them
appropriately, so we may as well add the infrastructure.

Cc: Dan Williams <djbw@fb.com>
Cc: Per Forlin <per.forlin@stericsson.com>
Cc: Rabin Vincent <rabin@rab.in>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

Lee Jones and committed by
Linus Walleij
499c2bc3 fd59f9e6

+18 -1
+2
Documentation/devicetree/bindings/dma/ste-dma40.txt
··· 11 11 Optional properties: 12 12 - dma-channels: Number of channels supported by hardware - if not present 13 13 the driver will attempt to obtain the information from H/W 14 + - disabled-channels: Channels which can not be used 14 15 15 16 Example: 16 17 ··· 24 23 25 24 #dma-cells = <2>; 26 25 memcpy-channels = <56 57 58 59 60>; 26 + disabled-channels = <12>; 27 27 dma-channels = <8>; 28 28 }; 29 29
+16 -1
drivers/dma/ste_dma40.c
··· 3482 3482 struct device_node *np) 3483 3483 { 3484 3484 struct stedma40_platform_data *pdata; 3485 - int num_phy = 0, num_memcpy = 0; 3485 + int num_phy = 0, num_memcpy = 0, num_disabled = 0; 3486 3486 const const __be32 *list; 3487 3487 3488 3488 pdata = devm_kzalloc(&pdev->dev, ··· 3510 3510 of_property_read_u32_array(np, "memcpy-channels", 3511 3511 dma40_memcpy_channels, 3512 3512 num_memcpy); 3513 + 3514 + list = of_get_property(np, "disabled-channels", &num_disabled); 3515 + num_disabled /= sizeof(*list); 3516 + 3517 + if (num_disabled > STEDMA40_MAX_PHYS || num_disabled < 0) { 3518 + d40_err(&pdev->dev, 3519 + "Invalid number of disabled channels specified (%d)\n", 3520 + num_disabled); 3521 + return -EINVAL; 3522 + } 3523 + 3524 + of_property_read_u32_array(np, "disabled-channels", 3525 + pdata->disabled_channels, 3526 + num_disabled); 3527 + pdata->disabled_channels[num_disabled] = -1; 3513 3528 3514 3529 pdev->dev.platform_data = pdata; 3515 3530