Age | Commit message (Collapse) | Author |
|
Driver core clears the driver data to NULL after device_release or on probe
failure, so just remove it from here.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit e925a6b1b6e7ddb43a71b31c0afa12ca9a6ec118)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Add .owner field and also MODULE_ALIAS(), so that auto module loading can work.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit c445be35956b0cefe85db75d1e7994af5cecf16a)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Ensure continued operation with DAPM being mandatory.
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit c34e51b12751c3e81c752b385f02a97bf3f862da)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Devices like mobilephones, computers are typically used as
HDMI sources, but devices like TV, navigators will be HDMI
sinks.
for auto scenerios, In-Vehicle Infotainment(IVI) can be HDMI
sink to display movies from mobilephones.
Signed-off-by: Rongjun Ying <Rongjun.Ying@csr.com>
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit c6c0925ea32d37696da7d71631a4a0c999f2094f)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
to support HDMI on CSR SiRFprimaII and atlasVI, we need one more HDMI pseudo
codec, rather than add a new driver, we can make omap HDMI codec common for
other SoCs as well. then the omap-hdmi codec becomes a generic HDMI pseudo-
codec as HDMI audio features depend on HDMI specification not on SoCs.
Signed-off-by: Barry Song <Baohua.Song@csr.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit bf7c6e6ccbde22c96c5c1e5cec08740c31229df1)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Folder path correction in file header.
Signed-off-by: Rajeev Kumar <rajeevk-dlh.kumar@st.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 22a4adf25826d1128d116dd4a313f66175c703bd)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Debug message correction.
Signed-off-by: Rajeev Kumar <rajeevk-dlh.kumar@st.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 5e83c160d83070152a595f57a6ca7c5bb1ce16b3)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The datasheet for PL330 says that the data buffer value in the CRD
register is 10bits wide. However, the value stored is "minus one",
which the driver corrects for. Maximum value that the data buffer
depth can have is 1024 lines, which requires 11 bits for storage.
While making updates I found printing the peripheral ID as a hex
value to be more useful as the datasheet shows the values that way.
Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 1f0a5cbf61a54504236bbbe2c98b58e85f90e650)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Currently the driver uses dma_request_channel() with a custom filter function to
find the requested channel. This will loop over all available channels until the
one we want has been found, but we already know which channel we want to
request, so we can dma_get_slave_channel(). This also makes the code a bit
shorter cleaner.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 70cbb163de1c6de239375b967caf372a98fae935)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The pl330 dmaengine driver currently does not differentiate between submitted
and issued descriptors. It won't start transferring a newly submitted
descriptor until issue_pending() is called, but only if it is idle. If it is
active and a new descriptor is submitted before it goes idle it will happily
start the newly submitted descriptor once all earlier submitted descriptors have
been completed. This is not a 100% correct with regards to the dmaengine
interface semantics. A descriptor is not supposed to be started until the next
issue_pending() call after the descriptor has been submitted. This patch adds a
second per channel list that keeps track of the submitted descriptors. Once
issue_pending() is called the submitted descriptors are moved to the working
list and only descriptors on the working list are started.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 04abf5daf7df852566e5a4782d5954daa40e2542)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
In order to be able to set a maximum segment size for the device we need to
allocate a dma_parameters struct for the device first.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit b714b84e2b74de68b12847bcaf2cf409a18fb741)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The pl330 driver currently does not support residue reporting, so set the
residue granularity to DMA_RESIDUE_GRANULARITY_DESCRIPTOR.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit bfb9bb42d60d7cf1d8057c7c3978dcc53c4d25fd)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
This patch adds a new field to the dma_slave_caps struct which indicates the
granularity with which the driver is able to update the residue field of the
dma_tx_state struct. Making this information available to dmaengine users allows
them to make better decisions on how to operate. E.g. for audio certain features
like wakeup less operation or timer based scheduling only make sense and work
correctly if the reported residue is fine-grained enough.
Right now four different levels of granularity are supported:
* DESCRIPTOR: The DMA channel is only able to tell whether a descriptor has
been completed or not, which means residue reporting is not supported by
this channel. The residue field of the dma_tx_state field will always be
0.
* SEGMENT: The DMA channel updates the residue field after each successfully
completed segment of the transfer (For cyclic transfers this is after each
period). This is typically implemented by having the hardware generate an
interrupt after each transferred segment and then the drivers updates the
outstanding residue by the size of the segment. Another possibility is if
the hardware supports SG and the segment descriptor has a field which gets
set after the segment has been completed. The driver then counts the
number of segments without the flag set to compute the residue.
* BURST: The DMA channel updates the residue field after each transferred
burst. This is typically only supported if the hardware has a progress
register of some sort (E.g. a register with the current read/write address
or a register with the amount of bursts/beats/bytes that have been
transferred or still need to be transferred).
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
(cherry picked from commit 507205632dd12636cfe4af4322dace263dca0c21)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
Conflicts:
include/linux/dmaengine.h
|
|
I see the following splat with 3.13-rc1 when attempting to perform DMA:
[ 253.004516] Alignment trap: not handling instruction e1902f9f at [<c0204b40>]
[ 253.004583] Unhandled fault: alignment exception (0x221) at 0xdfdfdfd7
[ 253.004646] Internal error: : 221 [#1] PREEMPT SMP ARM
[ 253.004691] Modules linked in: dmatest(+) [last unloaded: dmatest]
[ 253.004798] CPU: 0 PID: 671 Comm: kthreadd Not tainted 3.13.0-rc1+ #2
[ 253.004864] task: df9b0900 ti: df03e000 task.ti: df03e000
[ 253.004937] PC is at dmaengine_unmap_put+0x14/0x34
[ 253.005010] LR is at pl330_tasklet+0x3c8/0x550
[ 253.005087] pc : [<c0204b44>] lr : [<c0207478>] psr: a00e0193
[ 253.005087] sp : df03fe48 ip : 00000000 fp : df03bf18
[ 253.005178] r10: bf00e108 r9 : 00000001 r8 : 00000000
[ 253.005245] r7 : df837040 r6 : dfb41800 r5 : df837048 r4 : df837000
[ 253.005316] r3 : dfdfdfcf r2 : dfb41f80 r1 : df837048 r0 : dfdfdfd7
[ 253.005384] Flags: NzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
[ 253.005459] Control: 30c5387d Table: 9fb9ba80 DAC: fffffffd
[ 253.005520] Process kthreadd (pid: 671, stack limit = 0xdf03e248)
This is due to desc->txd.unmap containing garbage (uninitialised memory).
Rather than add another dummy initialisation to _init_desc, instead
ensure that the descriptors are zero-initialised during allocation and
remove the dummy, per-field initialisation.
Cc: Andriy Shevchenko <andriy.shevchenko@intel.com>
Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
(cherry picked from commit 0baf8f6a2ac86c2c40ed0cacab8ea3d17371a1bb)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
On 64 bit systems GCC warns that:
drivers/dma/pl330.c: In function ‘pl330_filter’:
drivers/dma/pl330.c:2317:21: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
It's harmless and I have casted it away.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 2f986ec6fa57a5dcf77f19f5f0d44b1f680a100f)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
There are only AMBA_NR_IRQS (2) elements in adev->irq[]. This code
maybe works if the there is a zero directly after the array.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 02808b427689d46136d9662c5013145f70119f42)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Some pl330 have per channel irq and it is necessary
to allocate all of them. Loop over irq assigned for this
device to support these pl330 IPs.
For example this IP is available on Xilinx Zynq platform.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Tested-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit e98b3cafe5f048be40ff6acb18dfa7c9a0e9423e)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Use devm_request_irq function.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 173e838c31fded558dd27293ae6253a495696ca0)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The DMA API requires drivers to call the appropriate dma_set_mask()
functions before doing any DMA mapping. Add this required call to
the AMBA PL330 driver.
Acked-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
(cherry picked from commit 64113016a456399d3fe4849a4f6593fb1cd48f53)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit dbaf6d85114bd2043f3ca758f71f9f7e4e579601)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Implement the device_slave_caps() callback for the pl330 driver. This allows
dmaengine users like the generic ALSA dmaengine PCM driver to query the
capabilities of the driver. The PL330 supports all buswidths and both
mem-to-dev as well as dev-to-mem transfers. In theory there is no limit on the
number of segments that can be transferred (in practice you'll run out of memory
eventually) and the number of bytes per segment is limited by the size of the
PL330 program buffer. Due to the nature of the PL330 the maximum number of bytes
per segment depends on the burstsize, the driver sets it to the value for a
1-byte burstsize, since it is the smallest.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit ca38ff133eb85b64e62b508a7726ea0247edd359)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
add new device callback .device_slave_caps api which can be used by clients to
query the dma channel capablties before they program the channel. This can help
is removing errors during the channel programming. Also add helper
dma_slave_get_caps API
This patch folds the work done by Matt earlier
https://patchwork.kernel.org/patch/2094891/
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 221a27c76033a3a4196b3da09848bc5f237f3f94)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The pl330 DMA driver is broken in regard to handling a terminate all request
while it is processing the list of completed descriptors. This is most visible
when calling dmaengine_terminate_all() from within the descriptors callback for
cyclic transfers. In this case the TERMINATE_ALL transfer will clear the
work_list and stop the transfer. But after all callbacks for all completed
descriptors have been handled the descriptors will be re-enqueued into the (now
empty) work_list. So the next time dma_async_issue_pending() is called for the
channel these descriptors will be transferred again which will cause data
corruption. Similar issues can occur if dmaengine_terminate_all() is not called
from within the descriptor callback but runs on a different CPU at the same time
as the completed descriptor list is processed.
This patch introduces a new per channel list which will hold the completed
descriptors. While processing the list the channel's lock will be held to avoid
racing against dmaengine_terminate_all(). The lock will be released when calling
the descriptors callback though. Since the list of completed descriptors might
be modified (e.g. by calling dmaengine_terminate_all() from the callback) we can
not use the normal list iterator macros. Instead we'll need to check for each
loop iteration again if there are still items in the list. The drivers
TERMINATE_ALL implementation is updated to move descriptors from both the
work_list as well the new completed_list back to the descriptor pool. This makes
sure that none of the descripts finds its way back into the work list and also
that we do not call any futher complete callbacks after
dmaengine_terminate_all() has been called.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 39ff86130a36cb5779102832dec39abecebfc316)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Suggested by Arnd, add dma_get_slave_channel interface
Dma host driver could get specific channel specificied by request line, rather than filter.
host example:
static struct dma_chan *xx_of_dma_simple_xlate(struct of_phandle_args *dma_spec,
struct of_dma *ofdma)
{
struct xx_dma_dev *d = ofdma->of_dma_data;
unsigned int request = dma_spec->args[0];
if (request > d->dma_requests)
return NULL;
return dma_get_slave_channel(&(d->chans[request].vc.chan));
}
probe:
of_dma_controller_register((&op->dev)->of_node, xx_of_dma_simple_xlate, d);
Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 7bb587f4eef8f71ce589f360ab99bb54ab0fc85d)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
This patch adds __pl330_giveback_descs which give back descriptors when fails
allocating descriptors. It requires to eliminate duplication for
pl330_prep_dma_sg which will be added later.
Signed-off-by: Chanho Park <chanho61.park@samsung.com>
Acked-by : Jassi Brar <jassisinghbrar@gmail.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 52a9d179109c50b1a5077cc2a653295fa131f0d0)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The microcode bus address (pl330_dmac.mcode_bus) is currently a u32,
which fails to compile when building on a system with 64-bit bus
addresses.
This patch uses dma_addr_t to represent the address instead.
Cc: Jassi Brar <jaswinder.singh@linaro.org>
Cc: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Acked-by: Jassi Brar <jaswinder.singh@linaro.org>
Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit fed8c45727abd273fd74b3e78b35be4929121334)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
The PL330 driver probes the peripheral and primecell IDs of the device to
make sure that it is indeed an AMBA PL330. However, it does this by
making byte accesses to a device mapping of the word-aligned ID
registers, which is either UNPREDICTABLE or generates an alignment fault
(depending on the presence of the virtualisation extensions).
Rather than fix this code, we can actually rip most of it out and let
the AMBA bus driver correctly do the probing for us.
Cc: Jassi Brar <jaswinder.singh@linaro.org>
Cc: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Acked-by: Jassi Brar <jaswinder.singh@linaro.org>
Acked-by: Grant Likely <grant.likely@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
(cherry picked from commit 09677176610e7c3ed8ddb302fd24bbb59bdbf205)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
To enable makefiles and scripts determine the driver's software
version, and more intelligently select appropriate versions of
userside components.
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
NULL is a valid clock, don't treat it as an error.
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Clocks are also registered as a module platform driver and you can't
ensure that the clocks will be registered before the Mali driver so
defer the probe of the Mali driver until the clocks are ready.
Signed-off-by: Javi Merino <javi.merino@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
This error message can spam the logs if you have lots of probe
deferals due to missing clocks. Just silence the error in this
case because the driver should try again later.
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
(cherry picked from commit d8e53c3deb46ec5b45bd7f5e1cc8ff8d35ec92ba)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
At probe time, a clock device may not be ready when some other device
wants to use it.
This patch lets the functions clk_get/devm_clk_get return a probe defer
when the clock is defined in the DT but not yet available.
Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Tested-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
(cherry picked from commit a34cd4666f3da84228a82f70c94b8d9b692034ea)
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Setting up the OPPs via a module relies on the module being loaded at
the right time. For Juno that means that it has to be loaded after the
SCPI clocks are loaded but before the core mali driver. Getting that
ordering right is quite a pain and now that the SCPI is a platform
driver, using module_init is a guarantee for failure, as it's always
going to happen before any platform driver is loaded.
Instead, make setting up the opps a function that the driver
provides as a weak, dummy function that can be overridden by platforms
providing a strong function if they need to set up OPPs.
Signed-off-by: Javi Merino <javi.merino@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
This doesn't work however, because at the point init_juno_opps_from_scpi
is called the scpi driver hasn't finished initialising and so the call
to get_scpi_ops returns NULL.
Therefore, the mali driver probably needs reorganising so that
init_juno_opps_from_scpi is called from its probe function and we can
return -EPROBE_DEFER to get Mali initialisation to wait.
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Fix sizes being passed to printf.
Signed-off-by: Mark Hambleton <mark.hambleton@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Ørjan Eide <orjan.eide@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
|
|
The HDLCD controllers on Juno share the same PLL for the pixel
clock output. If the secondary output is not connected to a
monitor with the same resolution as the primary output, or
to a monitor with VGA resolution, it will cause the pixel
clock to be set to the wrong value for the primary output.
Comment out the secondary HDLCD controller for now.
Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Needed because Android CTS requires kernel to not support loadable
modules. A built-in driver is also useful for kernel developers as it
simplifies deployment of rebuilt kernels.
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
This is a workaround to ensure the i2c driver is loaded first and should
let us now have the driver built-in rather than as a loadable module.
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Make hdlcd_dmabuf_release a copy of drm_gem_dmabuf_release and only
release a reference on the gem object if the dma_buf was exported
from it.
Fixes https://bugs.linaro.org/show_bug.cgi?id=931
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|
|
Required for brackport to Linux 3.12 and earlier.
Signed-off-by: Jon Medhurst <tixy@linaro.org>
|