The root cause is cam->enc_counter is not re-initialized to 0 when calls
STREAMOFF ioctl, and then in DQBUF ioctl wait_event_interruptible_timeout()
sees the condition is true and access cam->done_q queue which has no strict
check and could be empty.
This patch adds the re-initialization and the sanity check.
Also, add the pointer check for memcpy because the destination may be
NULL on UERSPTR mode.
Jason Liu [Tue, 13 Aug 2013 01:55:42 +0000 (09:55 +0800)]
ENGR00275391 i.mx6d/q: disable the double linefill feature of PL310
The L2 cache controller(PL310) version on the i.MX6D/Q is r3p1-50rel0
The L2 cache controller(PL310) version on the i.MX6DL/SOLO/SL is r3p2
But according to ARM PL310 errata: 752271
ID: 752271: Double linefill feature can cause data corruption
Fault Status: Present in: r3p0, r3p1, r3p1-50rel0. Fixed in r3p2
Workaround: The only workaround to this erratum is to disable the
double linefill feature. This is the default behavior.
There is one error in the commit log, the correct PL310 version in
i.MX6DL/SOLO should be r3p2, not r3p1-50rel0.
so, PL310_ERRATA_769419, will not apply to i.MX6DL/SOLO. But since we build
one image to support both i.MX6Q and i.MX6DL/SOLO, the ideal solution is to
manage this errata in dynamic way. Someone did post the patches here:
http://lists.infradead.org/pipermail/linux-arm-kernel/2013-January/145593.html
As the discussion on the above link, Russell King, the ARM arch maintainer said:
"As I already said, there is _no_ point making the barrier conditional;
it's probably more expensive to make it conditional than just to execute
it every time. But we still might as well optimize it away if we are
running _only_ on platforms which _do_ _not_ have that errata."
So, we will turn on the PL310_ERRATA_769419 on both i.MX6D/Q and i.MX6DL/SOLO.
Robby Cai [Thu, 8 Aug 2013 09:45:17 +0000 (17:45 +0800)]
ENGR00274493 mx6sl: csi/v4l: Fix capture incorrect data with format UYVY
There's an interim buffer which should only be used when PxP CSC is used.
Otherwise the video buffer gets incorrect data by copying the content of
interim buffer. The patch fixes this by moving the memcpy to the right place.
ENGR00273432 DMA: imx-sdma: Allocate 4KB iram page size for bd
One bd actually needs 4KB page size. So changed the iram_alloc()
size parameter to allocate a precise iram memory for bd.
This patch also removed the extra iram pool for SDMA due to its
insufficient total size: SDMA allows around 48 channels to work
simultaneously, so it's better to allocate memory from iram pool
directly.
[There will be 3KB size waste in sdma->channel_control, which is
640B but actually using 4KB due to 4KB alignment for iram pool.]
With the commit 881e21c1 and 7b60e285, the system will hang when do suspend
and resume stress test continuouly while run edpc test in the background.
Revert it now and revisit it later.
With the commit 881e21c1 and 7b60e285, the system will hang when do suspend
and resume stress test continuouly while run edpc test in the background.
Revert it now and revisit it later.
Dong Aisheng [Wed, 7 Aug 2013 12:20:27 +0000 (20:20 +0800)]
ENGR00274382 imx6q: fix can transceiver unwork on AI RevE baseboard
The transceiver TJA1041A on sabreauto RevE baseboard will
fail to transit to Normal state if EN/STBY is high by default
after board power up. So we set the EN/STBY initial state to low
first then to high to guarantee the state transition successfully.
Signed-off-by: Dong Aisheng <b29396@freescale.com> Acked-by: Jason Liu <r64343@freescale.com>
CONFIG_USB_EHCI_TT_NEWSCHED introduces a new schedule method
for periodic transfer, it can cover more peridic transfers which
introduced recently years.
Meanwhile, both PC and our 3.5.7 (and coming 3.10) enable it,
and have not found any issues, this commit also fixes a bug
this CR reported.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Peter Chen [Thu, 25 Jul 2013 06:28:04 +0000 (14:28 +0800)]
ENGR00272597 mx6-msl: usb: fix building warning when only build host driver
CC arch/arm/mach-mx6/usb_h1.o
/home/b29397/work/projects/linux-2.6-imx/arch/arm/mach-mx6/usb_dr.c:
In function '_host_wakeup_enable':
/home/b29397/work/projects/linux-2.6-imx/arch/arm/mach-mx6/usb_dr.c:
522: warning: unused variable 'phy_reg'
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Peter Chen [Tue, 23 Jul 2013 00:22:01 +0000 (08:22 +0800)]
ENGR00272135 msl-mx6: usb-h1: Fix the bug that using the wrong register
At host 1 code, we should use UH1_XXXX. The wrong register
access causing a bug that the u-disk disconnion at host 1
can't be recognized after system resume.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
At mx6, if usb wakeup is not enabled, the PHY's power
will be off during the system suspend, so the dp/dm
will be unknown after the system resumes, it may wake up
controller at some boards since dp/dm's status satisfies
wake up condition. If the controller is waken up, the
PHCD will be cleared automatically.
According to IC requirement, after PHCD is cleared, we
need to wait 1ms before clear PHY's clock gate to wait
PHY's clock stable. At above condition, the PHCD is cleared
automatically, it may less than 1ms before we clear
PHY's clock gate, then, software operation to clear PHY's
clock gate will be useless. At this case, the PHY will works
abnormal, and cause the controller hang when we write some registers
(eg, portsc).
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Simon Horman [Fri, 28 Sep 2012 01:12:45 +0000 (02:12 +0100)]
ARM: 7541/1: Add ARM ERRATA 775420 workaround
arm: Add ARM ERRATA 775420 workaround
Workaround for the 775420 Cortex-A9 (r2p2, r2p6,r2p8,r2p10,r3p0) erratum.
In case a date cache maintenance operation aborts with MMU exception, it
might cause the processor to deadlock. This workaround puts DSB before
executing ISB if an abort may occur on cache maintenance.
Based on work by Kouei Abe and feedback from Catalin Marinas.
Signed-off-by: Kouei Abe <kouei.abe.cp@rms.renesas.com>
[ horms@verge.net.au: Changed to implementation
suggested by catalin.marinas@arm.com ] Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Simon Horman <horms@verge.net.au> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
ENGR00270573-2 [MX6SL]Add support for dynamic Power Gating of the display MIX
The display MIX can be power gated when EPDC, PXP and LCDIF are all inactive.
This will save around 1.5mW-1.8mW of power in system IDLE mode.
Need to re-initialize the EPDC and PXP whenever the display MIX is
powered up as all the register state is lost when the display MIX is
power gated.
Signed-off-by: Hudson Winston <B45308@freescale.com> Signed-off-by: Steve Cornelius <steve.cornelius@freescale.com> Signed-off-by: Jason Liu <r64343@freescale.com> Signed-off-by: Terry Lv <r65388@freescale.com>
Peter Chen [Wed, 17 Jul 2013 08:05:17 +0000 (16:05 +0800)]
ENGR00271566 usb: otg: comment otg_statemachine which we do not need
We have not implemented fully OTG support, so we can't call
otg_statemachine since the state machine may incorrect at current
dual-role switch design.
At existed code, it will call otg_statemachine, in fact, it doesn't
need. Besides, it causes one kernel dump at Sabreauto board due
to it calls gpio API at spin lock, but at Sabreauto board the
USB power GPIO is expanded by MAX7310 which calls i2c read/write
and will schedule itself.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
The ASoC core tries to not enforce symmetric rates when
two streams open simultaneously. It does so by checking
rtd->rate being zero. This works exactly once after booting
because it is not set to zero again when the streams close.
Fix this by setting rtd->rate when no active stream is left.
[This leads to lots of warnings about not enforcing the symmetry in some
situations as there's a race in the userspace API where we know we've
got two applications but don't know what rates they want to set.
-- broonie ]
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Nicolin Chen <b42378@freescale.com>
In the imx6sl, we meet the compiling warning shows below:
--------------------------------------------------------------------
drivers/dma/imx-sdma.c: In function Pleasesdma_iram_free:
drivers/dma/imx-sdma.c:366: warning: passing argument 2 of
Pleasegen_pool_free makes integer from pointer without a cast
include/linux/genalloc.h:58: note: expected Pleaselong unsigned integer
but argument is of type Pleaselong unsigned int *Please
drivers/dma/imx-sdma.c: In function Pleasesdma_load_script:
drivers/dma/imx-sdma.c:452: warning: passing argument 2 of
Pleasesdma_iram_malloc makes pointer from integer without a cast
drivers/dma/imx-sdma.c:352: note: expected Pleaselong unsigned
int *Please but argument is of type Pleaselong unsigned integer
drivers/dma/imx-sdma.c:475: warning: passing argument 1 of
Pleasesdma_iram_free makes pointer from integer without a cast
drivers/dma/imx-sdma.c:361: note: expected Pleaselong unsigned
int *Please but argument is of type Pleasedma_addr_t
drivers/dma/imx-sdma.c: In function Pleasesdma_request_channel:
drivers/dma/imx-sdma.c:942: warning: passing argument 2 of
Pleasesdma_iram_malloc makes pointer from integer without a cast
drivers/dma/imx-sdma.c:352: note: expected Pleaselong unsigned int
*Please but argument is of type Pleaselong unsigned integer
drivers/dma/imx-sdma.c: In function Pleasesdma_free_chan_resources:
drivers/dma/imx-sdma.c:1109: warning: passing argument 1 of
Pleasesdma_iram_free makes pointer from integer without a cast
drivers/dma/imx-sdma.c:361: note: expected Pleaselong unsigned int
*Please but argument is of type Pleasedma_addr_t
drivers/dma/imx-sdma.c: In function Pleasesdma_init:
drivers/dma/imx-sdma.c:1505: warning: passing argument 2 of
Pleasesdma_iram_malloc from incompatible pointer type
drivers/dma/imx-sdma.c:352: note: expected Pleaselong unsigned int
*Please but argument is of type Pleasedma_addr_t *Please
--------------------------------------------------------------------
ENGR00261419 MX6Q HDMI CEC: Unit test failed put TV to powerdown.
TV will been setting powerdown state when first run HDMI CEC unit
test on MX6Q, but failed in the secondly run and loop in print
message:
sleep for ready!
sleep for ready!
sleep for ready!
...
It is cause by cec interrupter been enabled before interrupter
polarity setting, controler will received fake interrupter,
and cec unit test will get wrong device state.
Fix the issue with move interrupter polarity setting code before
interrupter enabled.
CC [M] drivers/gpu/drm/drm_global.o
drivers/mxc/mlb/mxc_mlb150.c: In function 'mxc_mlb150_open':
drivers/mxc/mlb/mxc_mlb150.c:1910: warning: format '%x'
expects type 'unsigned int', but argument 2 has type 'void *'
....
Peter Chen [Fri, 12 Jul 2013 05:45:49 +0000 (13:45 +0800)]
ENGR00270802 usb: otg: delete redundant vbus off operation
The problem locates at:
fsl_otg_start_host(fsm, 0);
if (pdata->wake_up_enable)
pdata->wake_up_enable(pdata, false);
otg_drv_vbus(fsm, 0);
fsl_otg_start_host(fsm, 0) internally calls fsl_otg_drv_vbus(), which does
the same thing as otg_drv_vbus(fsm, 0). More critically, we need disable
VBUS wakeup before close VBUS operation, otherwise unexpected VBUS
wakeup will occur. The solution is to remove the call of fsl_otg_drv_vbus()
in fsl_otg_start_host().
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Liu Ying [Fri, 12 Jul 2013 07:44:18 +0000 (15:44 +0800)]
ENGR00269468 IPUv3 dev:Silence an annoying warning message
We call the function ipu_calc_stripes_sizes() to calculate
stripe settings for vdi split mode. Chances are that the
parameters output_frame_width and maximal_stripe_width for the
function satisfy the relationship 'output_frame_width <=
maximal_stripe_width' and make the function return non-zero
value. This causes the IPU device driver generates an annoying
warning message, though the default stripe settings still can
work. This patch simply silences the warning message by reducing
the print log level from error to debug.
ENGR00270996 net:fec: fix fec probe fail due to gpio_irq check error
Board files correctly define fec gpio irq to wake up wait mode since FEC
interrupt cannot connect to GPC, otherwise board files define fec gpio irq
to -1. So, fec probe function check the gpio irq to decide whether fec use
gpio irq or fec irq.
Current irq checking logic is incorrect. Correct the gpio irq checking.
For imx6 serial silicon, fec MDC clock parent is ipg 66MHz.
The current clock file define the clock source is enet_pll8 50Mhz.
So, the MDC clock is more than 2.5Mhz after divider.
The phy Ar8031 work fine in current MDC clock, which shows the phy
have exceeding flexibility. Correct the parent clock source to make
MDC clock little than 2.5Mhz.
For imx6 serial silicon, fec MDC clock parent is ipg 66MHz.
The current clock file define the clock source is enet_pll8 50Mhz.
So, the MDC clock is more than 2.5Mhz after divider.
The phy Ar8031 work fine in current MDC clock, which shows the phy
have exceeding flexibility. Correct the parent clock source to make
MDC clock little than 2.5Mhz.
ENGR00262502-2 [MX6Q/MX6DLS]Add commandline option to route enet irq to gpio
Add a command line option to route the ENET interrupts to the GPIO_1_6.
To route the ENET interrupts to GPIO_6 add "enet_gpio_6" to the
kernel command line.
Also remove the CONFIG option (MX6_ENET_IRQ_TO_GPIO).
ENGR00262502-1 [MX6Q/MX6DLS]Add commandline option to route enet irq to gpio
Add a command line option to route the ENET interrupts to the GPIO_1_6.
To route the ENET interrupts to GPIO_6 add "enet_gpio_6" to the
kernel command line.
Also remove the CONFIG option (MX6_ENET_IRQ_TO_GPIO).
Liu Ying [Thu, 11 Jul 2013 08:21:48 +0000 (16:21 +0800)]
ENGR00269619 mxc vout:improve vb handling for 3 field deinterlacing
We need 2 video buffers to get a deinterlaced frame in VDI low motion
mode or medium motion mode. When there is no enough video buffer in
the active list, no one triggers the video buffer timer, then users
may be blocked at dqueue buffer ioctrl if they are in blocking mode.
In order to fix this issue, we may peek the first available video
buffer in the queue list so that the buffer may be taken as a reference
video buffer to do deinterlacing. If there is no video buffer in the
queue list, we should make users be able to trigger the timer again
when they queue buffers to the driver.
Robby Cai [Wed, 10 Jul 2013 12:46:47 +0000 (20:46 +0800)]
ENGR00263553 fb: Change type uint to unsigned int in struct mxcfb_update_data
This file could be included in user-space application while uint is not quite
standard type. This patch changed to unsigned int to avoid to include specific
header file. This is requested from mm team.
Robby Cai [Fri, 5 Jul 2013 07:38:08 +0000 (15:38 +0800)]
ENGR00269827 mx6sl: lcdif: fix lcd timing setting
The commit 0c0334779a08cca6c5a509570c944fe229837a21
corrected the v_period/v_wait_cnt, h_period/h_wait_cnt caculation in elcdif
framebuffer driver but in WVGA panel timing setting the left_margin and
upper_margin includes the length of hsyn_len and vsyn_len.
Thus the timing setting for lcd panel is not correct.
This patch fixes it.
Robby Cai [Mon, 1 Jul 2013 06:28:22 +0000 (14:28 +0800)]
ENGR00261293-1 mx6sl: csi/v4l2: resize function not work for v4l2 capture
- the root cause is pxp input/output buffer for csi post-processing is
same one, some part of content is overridded.
- use S_CROP ioctl to control crop, S_FMT to control output size.
ASRC driver allows users to set channel number via PROC interface,
but only passes the total number equal 10.
This's not reasonable because ASRC can use total number lower than 10
if user assure each of them is an even number.
Acked-by: Wang Shengjiu <b02247@freescale.com> Signed-off-by: Nicolin Chen <b42378@freescale.com>
(cherry picked from commit d76d08c93550cf2de9b1eff569ad6c0928ba122c)
Set bit18 of gpr1 before enter into supend, and clean it
after resume, can fix the following errata.
Errata ERR005723_PCIe PCIe does not support L2 Power Down.
Liu Ying [Wed, 10 Jul 2013 03:27:28 +0000 (11:27 +0800)]
ENGR00255920-2 mxc vout:wait for 2 vsyncs when streamoff
Some expiring video buffers may have been rendered to
display triple buffers for display. The relevant triple
buffers are set to be ready and depend on the display
hardware engine to switch them to be active on screen in
turn automatically. So, we need to wait for at least 2
vsyncs to make sure all of the expiring video buffers be
shown on display already.
Liu Ying [Wed, 10 Jul 2013 02:56:45 +0000 (10:56 +0800)]
ENGR00255920-1 mxc vout:Remove cancel_work_sync() when streamoff
We hope the queued works can be done before streamoff, since the
works will render expiring video buffers to display. But, the
function cancel_work_sync() cannot guarantee this. Instead, it
may cancel some queued works before they starts to work. This
patch removes the function call cancel_work_sync() when streamoff.
We rely on the function flush_workqueue() right after it to make
sure queued works be done before streamoff.
ENGR00270045: thermal: Add timeout for temperature update
Need to add timeout for temperature update, otherwise, if suspend
comes during thermal sensor measurement, its power will be turned
off, and after resume, the delay work thread will never get
finish flag and result in thread forever loop, temperature will
never get updated. And if we wait for the measurement finish before
suspend, the time is too long for suspend, as one single measurement
would take as long as 100ms which is not good for suspend, so just
add a timeout.
Hongzhang Yang [Wed, 3 Jul 2013 07:20:12 +0000 (15:20 +0800)]
ENGR00264650 VPU can not playback after driver reload
Picked from 3.5.7 branch and removed linux version check
Bug: VPU can not playback after driver reload
- To reproduce (if VPU is never powered off)
0. Build VPU driver as a loadable module
1. Playback
2. Unload driver
3. Reload driver
4. Playback
VPU was blocked in vpu_DecGetInitialInfo.
Root cause:
VPU is still alive after unload
Solution:
Reset VPU state before unload
Signed-off-by: Hongzhang Yang <Hongzhang.Yang@freescale.com>