1. 27 5月, 2013 4 次提交
    • U
      mmc: core: Restructure and simplify code for mmc sleep|awake · 07a68216
      Ulf Hansson 提交于
      The mmc_card_sleep|awake APIs are not being used since the support is
      already properly encapsulated within the suspend sequence. Sleep|awake
      command is also specific for eMMC.
      
      We remove the sleep|awake bus_ops, the mmc_card_sleep|awake APIs and
      move the code into the mmc specific core instead. This also includes
      the mmc ops function, mmc_sleepawake. All releated functions have then
      become static and we have got far less code to maintain.
      
      Additionally this patch also simplifies the code from mmc_sleepawake,
      since it is only used to put the card to sleep and not awake.
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      07a68216
    • U
      mmc: core: Support aggressive power management for (e)MMC/SD · c4d770d7
      Ulf Hansson 提交于
      Aggressive power management is suitable when saving power is
      essential. At request inactivity timeout, aka pm runtime
      autosuspend timeout, the card will be suspended.
      
      Once a new request arrives, the card will be re-initalized and
      thus the first request will suffer from a latency. This latency
      is card-specific, experiments has shown in general that SD-cards
      has quite poor initialization time, around 300ms-1100ms. eMMC is
      not surprisingly far better but still a couple of hundreds of ms
      has been observed.
      
      Except for the request latency, it is important to know that
      suspending the card will also prevent the card from executing
      internal house-keeping operations in idle mode. This could mean
      degradation in performance.
      
      To use this feature make sure the request inactivity timeout is
      chosen carefully. This has not been done as a part of this patch.
      
      Enable this feature by using host cap MMC_CAP_AGGRESSIVE_PM and
      by setting CONFIG_MMC_UNSAFE_RESUME.
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      c4d770d7
    • M
      mmc: card: Adding support for sanitize in eMMC 4.5 · 775a9362
      Maya Erez 提交于
      The sanitize support is added as a user-app ioctl call, and
      was removed from the block-device request, since its purpose is
      to be invoked not via File-System but by a user.
      
      This feature deletes the unmap memory region of the eMMC card,
      by writing to a specific register in the EXT_CSD.
      
      unmap region is the memory region that was previously deleted
      (by erase, trim or discard operation).
      
      In order to avoid timeout when sanitizing large-scale cards,
      the timeout for sanitize operation is 240 seconds.
      Signed-off-by: NYaniv Gardi <ygardi@codeaurora.org>
      Signed-off-by: NMaya Erez <merez@codeaurora.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      775a9362
    • U
      mmc: core: Re-use code for MMC_CAP2_DETECT_ON_ERR in polling mode · b6891679
      Ulf Hansson 提交于
      Previously the MMC_CAP2_DETECT_ON_ERR was invented for detecting
      slow card removal. In was never a realy good solution and a proper
      fix has been merged using gpio debouncing instead. We remove this
      cap in this patch.
      
      Although when using polling card detect mode, the code invented for
      MMC_CAP2_DETECT_ON_ERR is re-used to complete card removal in an
      earlier phase. There are no need waiting for the polling timeout to
      elapse in this case.
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Reviewed-by: NKevin Liu <kliu5@marvell.com>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      b6891679
  2. 13 4月, 2013 1 次提交
  3. 02 4月, 2013 1 次提交
    • K
      leds: trigger: use inline functions instead of macros · 39f7e08a
      Kim, Milo 提交于
      Macros are used in case that an inline function doesn't work.
      Otherwise, use an empty inline function.
      
      (a) Case of !CONFIG_LEDS_TRIGGERS
      Following macros are replaced with inline functions.
        led_trigger_register_simple()
        led_trigger_unregister_simple()
        led_trigger_event()
      To make inline types, the structure, 'led_trigger' should be defined.
      This structure has no member at all.
      
      (b) Case of !CONFIG_LEDS_TRIGGER_IDE_DISK
      ledtrig_ide_activity() macro is replaced with an inline function as well.
      
      (c) DEFINE_LED_TRIGGER() and DEFINE_LED_TRIGGER_GLOBAL()
      Struct 'led_trigger' is defined both cases, with CONFIG_LEDS_TRIGGERS and
      without CONFIG_LEDS_TRIGGERS.
      Those macros are moved out of CONFIG_LED_TRIGGERS because of no-dependency
      on CONFIG_LEDS_TRIGGERS.
      
      (d) Fix build errors in mmc-core driver
      After replacing macros with inline functions, following build errors occur.
      (condition: CONFIG_LEDS_TRIGGERS is not set)
      
        drivers/mmc/core/core.c: In function 'mmc_request_done':
        drivers/mmc/core/core.c:164:25: error: 'struct mmc_host' has no member named 'led'
        drivers/mmc/core/core.c: In function 'mmc_start_request':
        drivers/mmc/core/core.c:254:24: error: 'struct mmc_host' has no member named 'led'
        make[3]: *** [drivers/mmc/core/core.o] Error 1
      
      The reason of these errors is non-existent member variable, 'led'.
      It is only valid when CONFIG_LEDS_TRIGGERS is set.
      But now, it can be used without this dependency.
      To fix build errors, member 'led' is always used without its config option in
      'include/linux/mmc/host.h'.
      Signed-off-by: NMilo(Woogyom) Kim <milo.kim@ti.com>
      Signed-off-by: NBryan Wu <cooloney@gmail.com>
      39f7e08a
  4. 23 3月, 2013 1 次提交
  5. 25 2月, 2013 6 次提交
  6. 12 2月, 2013 2 次提交
  7. 28 1月, 2013 2 次提交
  8. 08 12月, 2012 1 次提交
  9. 07 12月, 2012 2 次提交
  10. 08 10月, 2012 1 次提交
  11. 05 9月, 2012 1 次提交
  12. 23 7月, 2012 1 次提交
  13. 21 7月, 2012 4 次提交
  14. 22 4月, 2012 1 次提交
  15. 28 3月, 2012 3 次提交
  16. 16 3月, 2012 1 次提交
    • P
      device.h: audit and cleanup users in main include dir · 313162d0
      Paul Gortmaker 提交于
      The <linux/device.h> header includes a lot of stuff, and
      it in turn gets a lot of use just for the basic "struct device"
      which appears so often.
      
      Clean up the users as follows:
      
      1) For those headers only needing "struct device" as a pointer
      in fcn args, replace the include with exactly that.
      
      2) For headers not really using anything from device.h, simply
      delete the include altogether.
      
      3) For headers relying on getting device.h implicitly before
      being included themselves, now explicitly include device.h
      
      4) For files in which doing #1 or #2 uncovers an implicit
      dependency on some other header, fix by explicitly adding
      the required header(s).
      
      Any C files that were implicitly relying on device.h to be
      present have already been dealt with in advance.
      
      Total removals from #1 and #2: 51.  Total additions coming
      from #3: 9.  Total other implicit dependencies from #4: 7.
      
      As of 3.3-rc1, there were 110, so a net removal of 42 gives
      about a 38% reduction in device.h presence in include/*
      Signed-off-by: NPaul Gortmaker <paul.gortmaker@windriver.com>
      313162d0
  17. 14 2月, 2012 2 次提交
  18. 13 1月, 2012 2 次提交
  19. 12 1月, 2012 4 次提交
    • U
      mmc: core: Add option to prevent eMMC sleep command · aa9df4fb
      Ulf Hansson 提交于
      Host may now use MMC_CAP2_NO_SLEEP_CMD to disable the use
      of eMMC sleep/awake command.
      
      This option can be used when your platform has a buggy
      kernel crash dump software, which is supposed to store
      the dump on the eMMC, but is not able to wake up the eMMC
      from sleep state.
      
      In particular, failures have been seen with u-boot; even if
      it is fixed there, platforms will be slow to update their
      bootloader binaries.
      Signed-off-by: NUlf Hansson <ulf.hansson@stericsson.com>
      Reviewed-by: NHanumath Prasad <hanumath.prasad@stericsson.com>
      Reviewed-by: NSrinidhi Kasagar <srinidhi.kasagar@stericsson.com>
      Acked-by: NSubhash Jadavani <subhashj@codeaurora.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      aa9df4fb
    • G
      mmc: add a card hotplug handler context · b67e1980
      Guennadi Liakhovetski 提交于
      SD/MMC controllers provide different card insertion and removal detection
      methods. On some of them the controller itself issues an interrupt, on
      others polling is used, on yet others auxiliary means are used for this
      purpose, e.g., a GPIO IRQ. Further, on some systems one of those methods
      can be chosen at driver probing time and configured in software. E.g., on
      some systems the SD/MMC controller card hot-plug detection pin can be
      configured either as a respective controller functions, or an IRQ-capable
      GPIO. To support such flexible configurations a card hot-plug context
      is added by this patch.
      Signed-off-by: NGuennadi Liakhovetski <g.liakhovetski@gmx.de>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      b67e1980
    • A
      mmc: allow upper layers to know immediately if card has been removed · d3049504
      Adrian Hunter 提交于
      Add a function mmc_detect_card_removed() which upper layers can use to
      determine immediately if a card has been removed. This function should
      be called after an I/O request fails so that all queued I/O requests
      can be errored out immediately instead of waiting for the card device
      to be removed.
      Signed-off-by: NAdrian Hunter <adrian.hunter@intel.com>
      Acked-by: NSujit Reddy Thumma <sthumma@codeaurora.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      d3049504
    • S
      mmc: core: Use delayed work in clock gating framework · 597dd9d7
      Sujit Reddy Thumma 提交于
      Current clock gating framework disables the MCI clock as soon as the
      request is completed and enables it when a request arrives. This aggressive
      clock gating framework, when enabled, cause following issues:
      
      When there are back-to-back requests from the Queue layer, we unnecessarily
      end up disabling and enabling the clocks between these requests since 8MCLK
      clock cycles is a very short duration compared to the time delay between
      back to back requests reaching the MMC layer. This overhead can effect the
      overall performance depending on how long the clock enable and disable
      calls take which is platform dependent. For example on some platforms we
      can have clock control not on the local processor, but on a different
      subsystem and the time taken to perform the clock enable/disable can add
      significant overhead.
      
      Also if the host controller driver decides to disable the host clock too
      when mmc_set_ios function is called with ios.clock=0, it adds additional
      delay and it is highly possible that the next request had already arrived
      and unnecessarily blocked in enabling the clocks. This is seen frequently
      when the processor is executing at high speeds and in multi-core platforms
      thus reduces the overall throughput compared to if clock gating is
      disabled.
      
      Fix this by delaying turning off the clocks by posting request on
      delayed workqueue. Also cancel the unscheduled pending work, if any,
      when there is access to card.
      
      sysfs entry is provided to tune the delay as needed, default
      value set to 200ms.
      Signed-off-by: NSujit Reddy Thumma <sthumma@codeaurora.org>
      Acked-by: NLinus Walleij <linus.walleij@linaro.org>
      Signed-off-by: NChris Ball <cjb@laptop.org>
      597dd9d7