Commit Graph

271369 Commits

Author SHA1 Message Date
yxj
06fdbd6756 rk30 lcdc:delay 30ms before disable lcdc clk 2013-07-09 16:08:13 +08:00
Subhash Jadavani
b81062c4cc mmc: block: replace __blk_end_request() with blk_end_request()
[rk emmc: read rate up to 78MB/s, write rate up to 26MB/s]

For completing any block request, MMC block driver is calling:
	spin_lock_irq(queue)
	__blk_end_request()
	spin_unlock_irq(queue)

But if we analyze the sources of latency in kernel using ftrace,
__blk_end_request() function at times may take up to 6.5ms with
spinlock held and irq disabled.

__blk_end_request() calls couple of functions and ftrace output
shows that blk_update_bidi_request() function is almost taking 6ms.
There are 2 function to end the current request: ___blk_end_request()
and blk_end_request(). Both these functions do same thing except
that blk_end_request() function doesn't take up the spinlock
while calling the blk_update_bidi_request().

This patch replaces all __blk_end_request() calls with
blk_end_request() and __blk_end_request_all() calls with
blk_end_request_all().

Testing done: 20 process concurrent read/write on sd card
and eMMC. Ran this test for almost a day on multicore system
and no errors observed.

This change is not meant for improving MMC throughput; it's basically
about becoming fair to other threads/interrupts in the system. By
holding spin lock and interrupts disabled for longer duration, we
won't allow other threads/interrupts to run at all.  Actually slight
performance degradation at file system level can be expected as we
are not holding the spin lock during blk_update_bidi_request() which
means our mmcqd thread may get preempted for other high priority
thread or any interrupt in the system.

These are performance numbers (100MB file write) with eMMC running
in DDR mode:

Without this patch:
	Name of the Test   Value   Unit
	LMDD Read Test     53.79   MBPS
	LMDD Write Test    18.86   MBPS
	IOZONE  Read Test  51.65   MBPS
	IOZONE  Write Test 24.36   MBPS

With this patch:
	Name of the Test    Value  Unit
	LMDD Read Test      52.94  MBPS
	LMDD Write Test     16.70  MBPS
	IOZONE  Read Test   52.08  MBPS
	IOZONE  Write Test  23.29  MBPS

Read numbers are fine. Write numbers are bit down (especially LMDD
write), may be because write requests normally have large transfer
size and which means there are chances that while mmcq is executing
blk_update_bidi_request(), it may get interrupted by interrupts or
other high priority thread.

Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Reviewed-by: Namjae Jeon <linkinjeon@gmail.com>
Signed-off-by: Chris Ball <cjb@laptop.org>

Conflicts:
	drivers/mmc/card/block.c
2013-07-09 15:08:16 +08:00
黄涛
b0addf30d0 rk2928: tb: fix defconfig for lvds rename 2013-07-09 14:41:50 +08:00
黄涛
29e180c979 rk2928: fix lvds support, rename from rk_lvds 2013-07-09 14:41:49 +08:00
ZHW
84115ec457 rk_fb:fix CONFIG_DONE in rk_fb_disp_scaler 2013-07-09 14:36:20 +08:00
hhb
57cce20018 mipi dsi: fix compile error of rk616_mipi_dsi.c 2013-07-09 11:47:06 +08:00
hhb
4d3405ed76 mipi dsi: dcs commmand sent by command mode in HS mode 2013-07-09 11:38:44 +08:00
邱建斌
bc07a28a70 rt5631: support sample rate up to 192khz
RT5631_VERSION "0.01 alsa 1.0.25"
2013-07-09 11:38:02 +08:00
黄涛
f59786a58d rk30: replace RK30_GICD_BASE with GIC_DIST_BASE, RK30_GICC_BASE with GIC_CPU_BASE 2013-07-09 11:35:59 +08:00
hhb
1afedb32d7 mipi:dsi: modify some registers configuration about electricity parameter and data phase 2013-07-09 11:26:21 +08:00
chenxing
981f1d9f96 rk3188: Priority setting i2s under cpll to fix i2s frac div do not effect, let axi_cpu's pll different with i2s's 2013-07-09 11:11:32 +08:00
陈金泉
25354452dd add new config(CONFIG_RK616_USE_MCLK_12M) for HDMI using 12M, use fromdos correct format of rk_rk616.c 2013-07-09 11:06:36 +08:00
kfx
a496af6374 Revert "sdmmc: module_init->fs_initcall, emmc: fs_inicall-->fs_initcall_sync"
This reverts commit aa4812bdf2.
2013-07-09 10:55:43 +08:00
kfx
fbba14e2e8 fixed compile error: drivers/mmc/card/block.c:992:46: error: request for member 'stop' in something not a structure or union 2013-07-09 10:55:13 +08:00
chenxing
1900714c60 rk3188: plus: add adjust dvfs table support 2013-07-09 09:40:02 +08:00
黄涛
906ffdfff7 rk_timer: version 1.3, make it consistent with arm twd 2013-07-08 19:48:38 +08:00
kfx
8427754129 mmc: emmc: revert thread name 2013-07-08 17:12:23 +08:00
kfx
318034e914 sdmmc: fixed crash due to commit '1db93c3593381dd716685e01856c7680113363c5' 2013-07-08 16:54:05 +08:00
Per Forlin
1db93c3593 mmc: block: add handling for two parallel block requests in issue_rw_rq(emmc)
Change mmc_blk_issue_rw_rq() to become asynchronous.
The execution flow looks like this:

* The mmc-queue calls issue_rw_rq(), which sends the request
  to the host and returns back to the mmc-queue.
* The mmc-queue calls issue_rw_rq() again with a new request.
* This new request is prepared in issue_rw_rq(), then it waits for
  the active request to complete before pushing it to the host.
* When the mmc-queue is empty it will call issue_rw_rq() with a NULL
  req to finish off the active request without starting a new request.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Venkatraman S <svenkatr@ti.com>
Tested-by: Sourav Poddar <sourav.poddar@ti.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>

Conflicts:
	drivers/mmc/card/block.c
2013-07-08 16:29:50 +08:00
kfx
aa4812bdf2 sdmmc: module_init->fs_initcall, emmc: fs_inicall-->fs_initcall_sync 2013-07-08 15:37:17 +08:00
邱建斌
4a3e05653b rt5631 : add pcm playback volume config 2013-07-08 15:16:50 +08:00
Per Forlin
ede6fc1a54 mmc: queue: add a second mmc queue request member
Add an additional mmc queue request instance to make way for two active
block requests. One request may be active while the other request is
being prepared.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Venkatraman S <svenkatr@ti.com>
Tested-by: Sourav Poddar <sourav.poddar@ti.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
2013-07-08 14:38:52 +08:00
Per Forlin
3bc2a47d44 mmc: block: move error path in issue_rw_rq to a separate function(emmc).
Break out code without functional changes. This simplifies the code and
makes way for handling two parallel requests.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Venkatraman S <svenkatr@ti.com>
Tested-by: Sourav Poddar<sourav.poddar@ti.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>

Conflicts:
	drivers/mmc/card/block.c
2013-07-08 14:36:43 +08:00
Per Forlin
4702b8371e mmc: block: add a block request prepare function(emmc)
Break out code from mmc_blk_issue_rw_rq to create a block request prepare
function. This doesn't change any functionallity. This helps when handling
more than one active block request.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Venkatraman S <svenkatr@ti.com>
Tested-by: Sourav Poddar <sourav.poddar@ti.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>

Conflicts:
	drivers/mmc/card/block.c
2013-07-08 14:25:06 +08:00
kfx
16ccab258d sdmmc: fixed compile error 2013-07-08 12:38:29 +08:00
Per Forlin
2a796dea79 mmc: block: add member in mmc queue struct to hold request data
The way the request data is organized in the mmc queue struct, it only
allows processing of one request at a time.  This patch adds a new struct
to hold mmc queue request data such as sg list, request, blk request and
bounce buffers, and updates any functions depending on the mmc queue
struct. This prepares for using multiple active requests in one mmc queue.

Signed-off-by: Per Forlin <per.forlin@linaro.org>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Venkatraman S <svenkatr@ti.com>
Tested-by: Sourav Poddar <sourav.poddar@ti.com>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
2013-07-08 12:38:28 +08:00
Adrian Hunter
b59a03d3b1 mmc: queue: let host controllers specify maximum discard timeout
Some host controllers will not operate without a hardware
timeout that is limited in value.  However large discards
require large timeouts, so there needs to be a way to
specify the maximum discard size.

A host controller driver may now specify the maximum discard
timeout possible so that max_discard_sectors can be calculated.

However, for eMMC when the High Capacity Erase Group Size
is not in use, the timeout calculation depends on clock
rate which may change.  For that case Preferred Erase Size
is used instead.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
2013-07-08 12:38:28 +08:00
hjc
8cf82395ff rk3066b lcdc: add support lut function 2013-07-08 11:44:24 +08:00
kfx
d2715c4a6b rk3188&rk3168: mmc: emmc support 2013-07-08 10:11:39 +08:00
ZHW
3e08f63568 add new config "CONFIG_RK616_USE_MCLK_12M" 2013-07-05 16:41:54 +08:00
ddl
5a3a5ad7a3 camera: rk2928 sync rk30 2013-07-05 11:44:56 +08:00
kfx
b3ffe9c05a memory reserved: size align: 1M 2013-07-05 09:15:55 +08:00
Simon Glass
e4cfc535dd serial: Fix wakeup init logic to speed up startup
The synchronize_rcu() call resulting from making every serial driver
wake-up capable (commit b3b708fa) slows boot down on my Tegra2x system
(with CONFIG_PREEMPT disabled).

But this is avoidable since it is the device_set_wakeup_enable() and then
subsequence disable which causes the delay. We might as well just make
the device wakeup capable but not actually enable it for wakeup until
needed.

Effectively the current code does this:

	device_set_wakeup_capable(dev, 1);
	device_set_wakeup_enable(dev, 1);
	device_set_wakeup_enable(dev, 0);

We can just drop the last two lines.

Before this change my boot log says:
[    0.227062] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.702928] serial8250.0: ttyS0 at MMIO 0x70006040 (irq = 69) is a Tegra

after:
[    0.227264] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[    0.227983] serial8250.0: ttyS0 at MMIO 0x70006040 (irq = 69) is a Tegra

for saving of 450ms.

Suggested-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2013-07-04 17:56:54 +08:00
黄涛
fcd7a57c9a serial: rk3188: Kconfig disable Serial port 2 CTS/RTS support 2013-07-04 17:54:05 +08:00
陈金泉
dee5f3a379 rk616 codec:set mclk to 12M when codec shutdown for HDMI 2013-07-04 15:32:12 +08:00
张晴
236516672f rk31xx:RT5025:support pmic rt5025 2013-07-04 15:09:13 +08:00
ddl
dd1dd60661 camera: cif :v0.3.9 2013-07-04 14:22:00 +08:00
kfx
e27d49b6c1 Merge commit "aa8b683a7d392271ed349c6ab9f36b8c313794b7" of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linu
mmc: core: add non-blocking mmc request function

    Previously there has only been one function mmc_wait_for_req()
    to start and wait for a request. This patch adds:

     * mmc_start_req() - starts a request wihtout waiting
         If there is on ongoing request wait for completion
         of that request and start the new one and return.
         Does not wait for the new command to complete.

    This patch also adds new function members in struct mmc_host_ops
    only called from core.c:

     * pre_req - asks the host driver to prepare for the next job
     * post_req - asks the host driver to clean up after a completed job

    The intention is to use pre_req() and post_req() to do cache maintenance
    while a request is active. pre_req() can be called while a request is
    active to minimize latency to start next job. post_req() can be used after
    the next job is started to clean up the request. This will minimize the
    host driver request end latency. post_req() is typically used before
    ending the block request and handing over the buffer to the block layer.

    Add a host-private member in mmc_data to be used by pre_req to mark the
    data. The host driver will then check this mark to see if the data is
    prepared or not.
2013-07-04 11:27:10 +08:00
xuhuicong
6d3fbffa37 rk616 hdmi: remove some hdmi global variable and change operate reg func name 2013-07-03 23:34:44 +08:00
xuhuicong
d9f1316d4f rk616 hdmi: change irq flag as IRQF_TRIGGER_LOW to modify some time lost interrupt 2013-07-03 23:29:52 +08:00
hwg
ef49919498 mt6622: support wake up host 2013-07-03 17:08:35 +08:00
ddl
b9ec311ce0 camera: cif v0.3.7:support rk3028 , read 3028 chip id by efuse for check cif controller is normal or not 2013-07-03 15:04:08 +08:00
xbw
83e70aef90 rk2928:
eliminate the build error using rk2928_tb_defconfig/rk2928_sdk_defconfig.
as the following:
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
drivers/built-in.o: In function rk29_sdmmc_gpio_open'
make: *** [.tmp_vmlinux1] Error 1
2013-07-03 13:15:33 +08:00
ddl
2fd8a03bf7 camera: ov5640 v0.1.3, rk_cam_io:v0.1.1 2013-07-03 11:00:40 +08:00
黄涛
c83124f13a rk30: cpufreq: support sys_state 2013-07-03 10:11:09 +08:00
陈金泉
95ebffb4bf rk hdmi i2s: add I2S judgement 2013-07-02 16:47:48 +08:00
陈金泉
590a98edfe rk616 codec: delete proc, correct get parameter 2013-07-02 11:47:07 +08:00
陈金泉
ce1982dfad rk616 codec:get parameter with new method 2013-07-01 17:35:36 +08:00
陈金泉
1dbd249045 add es8323 codec for pcm modem 2013-07-01 17:31:52 +08:00
wdc
d5db020589 reverts commit for error commit
Revert "ad"

This reverts commit cfb56f5fce.
2013-07-01 16:19:46 +08:00