RE: [RFC PATCH v3 00/16] DMA Engine support for AM33XX
From: Bedia, Vaibhav <hidden>
Date: 2012-10-19 10:27:14
Also in:
linux-arm-kernel, linux-mmc, linux-omap, linux-spi, lkml
Hi Matt, On Thu, Oct 18, 2012 at 18:56:39, Porter, Matt wrote:
Changes since v2: - Rebased on 3.7-rc1 - Fixed bug in DT/pdata parsing first found by Gururaja that turned out to be masked by some toolchains - Dropped unused mach-omap2/devices.c hsmmc patch - Added AM33XX crossbar DMA event mux support - Added am335x-evm support Changes since v1: - Rebased on top of mainline from 12250d8 - Dropped the feature removal schedule patch - Implemented dma_request_slave_channel_compat() and converted the mmc and spi drivers to use it - Dropped unneeded #address-cells and #size-cells from EDMA DT support - Moved private EDMA header to linux/platform_data/ and removed some unneeded definitions - Fixed parsing of optional properties TODO: - Add dmaengine support for per-channel caps so the hack to set the maximum segments can be replaced with a query to the dmaengine driver This series adds DMA Engine support for AM33xx, which uses an EDMA DMAC. The EDMA DMAC has been previously supported by only a private API implementation (much like the situation with OMAP DMA) found on the DaVinci family of SoCs. The series applies on top of 3.7-rc1 and the following patches: - GPMC fails to reserve memory fix: http://www.spinics.net/lists/linux-omap/msg79675.html - TPS65910 regulator fix: https://patchwork.kernel.org/patch/1593651/ - dmaengine DT support from Vinod's dmaengine_dt branch in git://git.infradead.org/users/vkoul/slave-dma.git since 027478851791df751176398be02a3b1c5f6aa824 The approach taken is similar to how OMAP DMA is being converted to DMA Engine support. With the functional EDMA private API already existing in mach-davinci/dma.c, we first move that to an ARM common area so it can be shared. Adding DT and runtime PM support to the private EDMA API implementation allows it to run on AM33xx. AM33xx *only* boots using DT so we leverage Jon's generic DT DMA helpers to register EDMA DMAC with the of_dma framework and then add support for calling the dma_request_slave_channel() API to both the mmc and spi drivers. With this series both BeagleBone and the AM335x EVM have working MMC and SPI support. This is tested on BeagleBone with a SPI framebuffer driver and MMC rootfs. A trivial gpio DMA event misc driver was used to test the crossbar DMA event support. It is also tested on the AM335x EVM with the onboard SPI flash and MMC rootfs. The branch at https://github.com/ohporter/linux/tree/edma-dmaengine-v3 has the complete series, dependencies, and some test drivers/defconfigs.
I didn't see all the patches that you posted on edma-dmaengine-v3
but I do seem them on edma-dmaengine-am33xx-v3 branch.
I added a couple of patches to enable earlyprintk and build the DTB
appended kernel image uImage-dtb.am335x-evm
Here's what i see
[...]
[ 0.128831] regulator-dummy: no parameters
[ 0.130793] NET: Registered protocol family 16
[ 0.131694] DMA: preallocated 256 KiB pool for atomic coherent allocations
[ 0.133030] omap-gpmc omap-gpmc: GPMC revision 6.0
[ 0.153136] platform 49000000.edma: alias fck already exists
[ 0.153176] platform 49000000.edma: alias fck already exists
[ 0.153199] platform 49000000.edma: alias fck already exists
[ 0.158184] OMAP GPIO hardware version 0.1
[ 0.172844] No ATAGs?
[ 0.172868] hw-breakpoint: debug architecture 0x4 unsupported.
[ 0.174282] genirq: Flags mismatch irq 28. 00000000 (edma) vs. 00000000 (edma)
[ 0.174536] ------------[ cut here ]------------
[ 0.174576] WARNING: at kernel/irq/manage.c:1211 __free_irq+0x9c/0x1c0()
[ 0.174586] Trying to free already-free IRQ 28
[ 0.174596] Modules linked in:
[ 0.174645] [<c001b0e0>] (unwind_backtrace+0x0/0xf0) from [<c0042900>] (warn_slowpath_common+0x4c/0x64)
[ 0.174668] [<c0042900>] (warn_slowpath_common+0x4c/0x64) from [<c00429ac>] (warn_slowpath_fmt+0x30/0x40)
[ 0.174688] [<c00429ac>] (warn_slowpath_fmt+0x30/0x40) from [<c00a8298>] (__free_irq+0x9c/0x1c0)
[ 0.174708] [<c00a8298>] (__free_irq+0x9c/0x1c0) from [<c00a8408>] (free_irq+0x4c/0xa8)
[ 0.174739] [<c00a8408>] (free_irq+0x4c/0xa8) from [<c07976ec>] (edma_probe+0x93c/0xa24)
[ 0.174770] [<c07976ec>] (edma_probe+0x93c/0xa24) from [<c03226d4>] (platform_drv_probe+0x18/0x1c)
[ 0.174793] [<c03226d4>] (platform_drv_probe+0x18/0x1c) from [<c0321494>] (driver_probe_device+0x84/0x224)
[ 0.174814] [<c0321494>] (driver_probe_device+0x84/0x224) from [<c03216c8>] (__driver_attach+0x94/0x98)
[ 0.174834] [<c03216c8>] (__driver_attach+0x94/0x98) from [<c031fd60>] (bus_for_each_dev+0x50/0x7c)
[ 0.174854] [<c031fd60>] (bus_for_each_dev+0x50/0x7c) from [<c0320bc4>] (bus_add_driver+0xa0/0x240)
[ 0.174874] [<c0320bc4>] (bus_add_driver+0xa0/0x240) from [<c0321bfc>] (driver_register+0x78/0x144)
[ 0.174896] [<c0321bfc>] (driver_register+0x78/0x144) from [<c03229a4>] (platform_driver_probe+0x18/0x9c)
[ 0.174918] [<c03229a4>] (platform_driver_probe+0x18/0x9c) from [<c0008874>] (do_one_initcall+0x34/0x180)
[ 0.174947] [<c0008874>] (do_one_initcall+0x34/0x180) from [<c055ad14>] (kernel_init+0x104/0x2b0)
[ 0.174978] [<c055ad14>] (kernel_init+0x104/0x2b0) from [<c0013590>] (ret_from_fork+0x14/0x24)
[ 0.175249] ---[ end trace 1b75b31a2719ed1c ]---
[ 0.175354] edma: probe of 49000000.edma failed with error -16
[ 0.253165] bio: create slab <bio-0> at 0
[ 0.257894] edma-dma-engine edma-dma-engine.0: Can't allocate PaRAM dummy slot
[ 0.257954] edma-dma-engine: probe of edma-dma-engine.0 failed with error -5
[ 0.341189] omap-dma-engine omap-dma-engine: OMAP DMA engine driver
[ 0.343155] vbat: 5000 mV
[ 0.352193] SCSI subsystem initialized
[ 0.354571] usbcore: registered new interface driver usbfs
[ 0.355085] usbcore: registered new interface driver hub
[ 0.355944] usbcore: registered new device driver usb
[ 0.376170] omap_i2c 44e0b000.i2c: bus 0 rev2.4.0 at 400 kHz
[ 0.384465] vrtc: 1800 mV
[ 0.384897] vrtc: supplied by vbat
[ 0.388130] vio: at 1800 mV
[ 0.388284] vio: supplied by vbat
[ 0.391570] vdd_mpu: 912 <--> 1312 mV at 1262 mV
[ 0.391727] vdd_mpu: supplied by vbat
[ 0.394747] vdd_core: 912 <--> 1150 mV at 1137 mV
[ 0.394898] vdd_core: supplied by vbat
[ 0.398155] vdd3: 5000 mV
[ 0.400791] vdig1: at 1800 mV
[ 0.400943] vdig1: supplied by vbat
[ 0.403675] vdig2: at 1800 mV
[ 0.403817] vdig2: supplied by vbat
[ 0.407001] vpll: at 1800 mV
[ 0.407151] vpll: supplied by vbat
[ 0.410187] vdac: at 1800 mV
[ 0.410352] vdac: supplied by vbat
[ 0.413275] vaux1: at 1800 mV
[ 0.413414] vaux1: supplied by vbat
[ 0.416325] vaux2: at 3300 mV
[ 0.416467] vaux2: supplied by vbat
[ 0.419280] vaux33: at 3300 mV
[ 0.419419] vaux33: supplied by vbat
[ 0.422440] vmmc: 1800 <--> 3300 mV at 3300 mV
[ 0.422583] vmmc: supplied by vbat
[ 0.424630] tps65910 0-002d: No interrupt support, no core IRQ
[ 0.432157] Bluetooth: Core ver 2.16
[ 0.432767] NET: Registered protocol family 31
[ 0.432785] Bluetooth: HCI device and connection manager initialized
[ 0.432928] Bluetooth: HCI socket layer initialized
[ 0.432965] Bluetooth: L2CAP socket layer initialized
[ 0.433071] Bluetooth: SCO socket layer initialized
[ 0.435116] cfg80211: Calling CRDA to update world regulatory domain
[ 0.437286] Switching to clocksource gp_timer
[ 0.585766] NET: Registered protocol family 2
[ 0.587934] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[ 0.588322] TCP bind hash table entries: 8192 (order: 6, 294912 bytes)
[ 0.592077] TCP: Hash tables configured (established 8192 bind 8192)
[ 0.592331] TCP: reno registered
[ 0.592369] UDP hash table entries: 256 (order: 2, 20480 bytes)
[ 0.592634] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[ 0.593454] NET: Registered protocol family 1
[ 0.595290] RPC: Registered named UNIX socket transport module.
[ 0.595315] RPC: Registered udp transport module.
[ 0.595328] RPC: Registered tcp transport module.
[ 0.595340] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.596399] NetWinder Floating Point Emulator V0.97 (double precision)
[ 0.596917] CPU PMU: probing PMU on CPU 0
[ 0.597083] hw perfevents: enabled with ARMv7 Cortex-A8 PMU driver, 5 counters available
[ 0.770294] VFS: Disk quotas dquot_6.5.2
[ 0.770539] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[ 0.773244] NFS: Registering the id_resolver key type
[ 0.773873] Key type id_resolver registered
[ 0.773897] Key type id_legacy registered
[ 0.774046] jffs2: version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc.
[ 0.776552] msgmni has been set to 477
[ 0.780591] io scheduler noop registered
[ 0.780618] io scheduler deadline registered
[ 0.780721] io scheduler cfq registered (default)
[ 0.783750] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[ 0.788066] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 0.795200] omap_uart 44e09000.serial: did not get pins for uart0 error: -19
[ 0.795696] 44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 88) is a OMAP UART0
[ 1.728556] console [ttyO0] enabled
[ 1.769162] brd: module loaded
[ 1.793083] loop: module loaded
[ 1.802779] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 1.811045] OneNAND driver initializing
[ 1.816279] omap2_mcspi 48030000.spi: pins are not configured from the driver
[ 61.836153] INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 0, t=7682 jiffies)
[ 61.845144] INFO: Stall ended before state dump start
[ 241.875170] INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 0, t=30727 jiffies)
[ 241.884226] INFO: Stall ended before state dump start
[ 421.914230] INFO: rcu_sched detected stalls on CPUs/tasks: {} (detected by 0, t=53772 jiffies)
[...]
Let me know if I missed something.
Regards,
Vaibhav
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct