aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* mmc: remove multiwrite capabilityPierre Ossman2008-07-15
| | | | | | | | | | Relax requirements on host controllers and only require that they do not report a transfer count than is larger than the actual one (i.e. a lower value is okay). This is how many other parts of the kernel behaves so upper layers should already be prepared to handle that scenario. This gives us a performance boost on MMC cards. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* wbsd: fix bad dma_addr_t conversionPierre Ossman2008-07-15
| | | | | | | DMA addresses are not pointers, so don't treat them as such. Avoids compiler warnings when using 64-bit DMA addresses on a 32-bit system. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* atmel-mci: Driver for Atmel on-chip MMC controllersHaavard Skinnemoen2008-07-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a driver for the MMC controller on the AP7000 chips from Atmel. It should in theory work on AT91 systems too with some tweaking, but since the DMA interface is quite different, it's not entirely clear if it's worth merging this with the at91_mci driver. This driver has been around for a while in BSPs and kernel sources provided by Atmel, but this particular version uses the generic DMA Engine framework (with the slave extensions) instead of an avr32-only DMA controller framework. This driver can also use PIO transfers when no DMA channels are available, and for transfers where using DMA may be difficult or impractical for some reason (e.g. the DMA setup overhead is usually not worth it for very short transfers, and badly aligned buffers or lengths are difficult to handle.) Currently, the driver only support PIO transfers. DMA support has been split out to a separate patch to hopefully make it easier to review. The driver has been tested using mmc-block and ext3fs on several SD, SDHC and MMC+ cards. Reads and writes work fine, with read transfer rates up to 3.5 MiB/s on fast cards with debugging disabled. The driver has also been tested using the mmc_test module on the same cards. All tests except 7, 9, 15 and 17 succeed. The first two are unsupported by all the cards I have, so I don't know if the driver handles this correctly. The last two fail because the hardware flags a Data CRC Error instead of a Data Timeout error. I'm not sure how to deal with that. Documentation for this controller can be found in many data sheets from Atmel, including the AT32AP7000 data sheet which can be found here: http://www.atmel.com/dyn/products/datasheets.asp?family_id=682 Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: fix sdio_io sparse errorsTomas Winkler2008-07-15
| | | | | | | | | | | | This patch fixes sdio_io sparse errors. This fix changes signature of API functions, changing unsigned char -> u8 unsigned short -> u16 unsigned long -> u32 - this was probably a bug in 64 bit platforms Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: wbsd.c fix shadowing of 'dma' variableTomas Winkler2008-07-15
| | | | | | | | | This patch fix warning :shadowing dma variable and made use of module_param_named instead of module_param Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Refuse incorrectly aligned transfersBen Dooks2008-07-15
| | | | | | | | | | | | | The hardware does not support any multi-block transfers with an block-size that is not 32bit aligned. Also the driver itself does not support single block non-32bit transfers either. Ensure that the s3cmci_setup_data() returns the appropriate error if we encounter this. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Add maintainer entryBen Dooks2008-07-15
| | | | | | | Add Ben Dooks as S3C24XX SD/MMC driver maintainer. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Update error debugging.Ben Dooks2008-07-15
| | | | | | | | | | | | Add better debugging to show where errors are being generated, as some error codes can come from several different code paths. Also fix the error return path from s3cmci_setup_data() to return the error it returned to the request. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Add media presence test to request handling.Ben Dooks2008-07-15
| | | | | | | | | Ensure that we have physical media present before attempting to send a request to a card. This ensures that we do not get flooded by errors from commands that can never be completed timing out. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Fix use of msecs where jiffies are neededBen Dooks2008-07-15
| | | | | | | | mmc_detect_change() takes jiffies, not msecs. Convert the previous value of msecs into jiffies before calling. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Add MODULE_ALIAS() entries for the platform devicesBen Dooks2008-07-15
| | | | | | | | Add MODULE_ALIAS() declerations for all the supported platform devices for this driver. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Fix s3c2410_dma_request() return code check.Ben Dooks2008-07-15
| | | | | | | | | The driver should be checking for a negative error code from s3c2410_dma_request(), not non-zero. Newer kernels now return the DMA channel number that was allocated by the request. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Allow card-detect on non-IRQ capable pinBen Dooks2008-07-15
| | | | | | | | Add support to the S3C24XX MMC driver to have the card detect be on a pin that is not IRQ capable. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Ensure host->mrq->data is validBen Dooks2008-07-15
| | | | | | | Fix a crash if host->mrq->data is NULL on ending a transfer. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Add support to invert write protect lineBen Dooks2008-07-15
| | | | | | | | Support for inverting the sense of the MMC driver's write protect detection line. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX: Add platform data for MMC/SD driverBen Dooks2008-07-15
| | | | | | | | | This patch adds platform data support to the s3mci driver. This allows flexible board-specific configuration of set_power, card detect and read only pins. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: Fix S3C24XX IRQ enable during PIO transfersRoman Moracik2008-07-15
| | | | | | | Fix Bug #677 - I/O errors on heavy microSD writes for 2.6.22.x. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* Fix the request finalisation by ensuring the controllerThomas Kleffel2008-07-15
| | | | | | | | is stopped. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Harald Welte <laforge@openmoko.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: DMA free fix for S3C24XX SD/MMC driverHarald Welte2008-07-15
| | | | | | | Bugfix to ensure DMA channel allocated is freed on exit. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX MMC/SD driver write fixesHarald Welte2008-07-15
| | | | | | | This patch is a workaround of some S3C2410 MMC chip bug Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: S3C24XX MMC/SD driver.Thomas Kleffel2008-07-15
| | | | | | | | | This is the latest S3C MMC/SD driver by Thomas Kleffel with cleanups as suggested by AKPM done by Ben Dooks. Signed-off-by: Ben Dooks <ben-linux@fluff.org> Signed-off-by: Thomas Kleffel <tk@maintech.de> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* sdhci: graceful handling of bad addressesPierre Ossman2008-07-15
| | | | | | | Be a bit more robust and fall back to PIO if someone is feeding us bogus addresses. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc_test: cleanupPierre Ossman2008-07-15
| | | | | | | Clean up and reorganise the mmc_test driver so that it (hopefully) is easier to extend with more complex tests. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc_block: wait for card even on failuresPierre Ossman2008-07-15
| | | | | | | | Many failures are non-permanent, but the card might need some time to finish what it is doing before becoming responsive again. Make sure we wait for it to finish programming before dealing with the error. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* sdhci: scatter-gather (ADMA) supportPierre Ossman2008-07-15
| | | | | | | | | | | Add support for the scatter-gather DMA mode present on newer controllers. As the mode requires 32-bit alignment, non-aligned chunks are handled by using a bounce buffer. Also add some new quirks to handle controllers that have bugs in the ADMA engine. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* sdhci-pci: don't penalize newer jmicron chipsPierre Ossman2008-07-15
| | | | | | | The upcoming JMicron chips will have solved all the currently known bugs, so don't penalize them for older problems. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc_test: only bind to supported cardsPierre Ossman2008-07-15
| | | | | | | We can only perform the tests on MMC and SD cards, so avoid binding to any other type. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* sdio: clean up handling of byte mode transfer sizePierre Ossman2008-07-15
| | | | | | | | | Make sure that the maximum size for a byte mode transfer is identical in all places. Also tweak the transfer helper so that a single byte mode transfer is preferred over (possibly multiple) block mode request(s). Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc,sdio: helper function for transfer paddingPierre Ossman2008-07-15
| | | | | | | | | | | | | There are a lot of crappy controllers out there that cannot handle all the request sizes that the MMC/SD/SDIO specifications require. In case the card driver can pad the data to overcome the problems, this commit adds a helper that calculates how much that padding should be. A corresponding helper is also added for SDIO, but it can also deal with all the complexities of splitting up a large transfer efficiently. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: remove custom carddetect poll implementation.Manuel Lauss2008-07-15
| | | | | | | | The MMC core provides a carddetect poll feature, time to remove the driver's own implementation of it. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: new maintainer.Manuel Lauss2008-07-15
| | | | | Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: abort requests early if no card is present.Manuel Lauss2008-07-15
| | | | | | | Don't process an MMC request if no card is present. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: codingstyle tidying.Manuel Lauss2008-07-15
| | | | | | | | | Clean up the codebase, no functional changes. - merge the au1xmmc.h header contents into the driver file, - indentation, spelling and style fixes. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: SDIO IRQ support.Manuel Lauss2008-07-15
| | | | | | | Wire up the SD controllers' SDIO IRQ capability. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: enable 4 bit transfer modeManuel Lauss2008-07-15
| | | | | Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* au1xmmc: remove db1200 board code, rewrite probe.Manuel Lauss2008-07-15
| | | | | | | | | | | | | | Remove the DB1200 board-specific functions (card present, read-only, activity LED methods) and instead add platform data which is passed to the driver. This also allows for platforms to implement other carddetect schemes (e.g. dedicated irq) without having to pollute the driver code. The poll timer (used for pb1200) is kept for compatibility. With the board-specific stuff gone, the driver's ->probe() code can be cleaned up considerably. Signed-off-by: Manuel Lauss <mano@roarinelk.homelinux.net> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* at91_mci: Fix byte mode transitions.Ville Syrjala2008-07-15
| | | | | | | | | | The byte mode support fails to clear the byte mode bit in the command register, possibly leaving byte mode enabled with the counters programmed in non-byte mode. Signed-off-by: Ville Syrjala <syrjala@sci.fi> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* at91_mci: Cover more AT91RM9200 and AT91SAM9261 errata.Ville Syrjala2008-07-15
| | | | | | | | | | | According to the documentation the AT91SAM9261 MCI shares the block size limitations of the AT91RM9200 MCI. Also the errata documentation for AT91RM9200 and AT91SAM9261 state that stream commands are not supported. This has not been tested on actual hardware. Signed-off-by: Ville Syrjala <syrjala@sci.fi> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* at91_mci: AT91SAM9260/9263 12 byte write erratum (v2)Ville Syrjala2008-07-15
| | | | | | | | | | AT91SAM926[0/3] PDC must write at least 12 bytes. The code compiles and runs but the actual condition for this erratum did not trigger in my tests so it's unclear if it actually works as intended. Signed-off-by: Ville Syrjala <syrjala@sci.fi> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* at91_mci: manage cmd error and data error independentlyNicolas Ferre2008-07-15
| | | | | | | | | In at91_mci_completed_command() function, this patch distinguishes command error and data error. It reports it in the corresponding error field. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: do not read irq status twice as it will forget some errorsNicolas Ferre2008-07-15
| | | | | | | | Reading AT91_MCI_SR again at the end of transfer can corrupt the error reporting. Some fields in the SR register are read-and-clear. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: add sdio irq managementEric Benard2008-07-15
| | | | | | | | Enable SDIO interrupt handling. Signed-off-by: Eric Benard <ebenard@free.fr> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: add multiwrite switchNicolas Ferre2008-07-15
| | | | | | | at91_mci is capable of multiwrite. Enable it before it disappears. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: update bytes_xfered value once xfer doneNicolas Ferre2008-07-15
| | | | | | | | | | | | | Modify bytes_xfered value after a write. That will report, as accurately as possible, the amount of sectors that are effectively written. This update introduces the check of the busy signal given by the card. Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: avoid timeoutsMarc Pignat2008-07-15
| | | | | | | | | | | The at91 mci controller internal state machine seems to often crash. This can be fixed by resetting the controller after each command for at91rm9200 and by setting the MCI_BLKR register on at91sam926*. Signed-off-by: Marc Pignat <marc.pignat@hevs.ch> Signed-off-by: Hans J Koch <hjk@linutronix.de> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: show timeoutsMarc Pignat2008-07-15
| | | | | | | | | Detect command timeout (or mci controller hangs). Signed-off-by: Marc Pignat <marc.pignat@hevs.ch> Signed-off-by: Hans J Koch <hjk@linutronix.de> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: at91_mci: support for block size not modulo 4Marc Pignat2008-07-15
| | | | | | | | | Implement transfer with size not modulo 4 for at91sam9*. Please note that the at91rm9200 simply can't handle this. Signed-off-by: Marc Pignat <marc.pignat@hevs.ch> Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* MMC: Trivial comment cleanupDeepak Saxena2008-07-15
| | | | | | | | Make the variable name in the comments match the actual name of the variable. Signed-off-by: Deepak Saxena <dsaxena@laptop.org> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc: change .get_ro() callback semanticsAnton Vorontsov2008-07-15
| | | | | | | | | | | | | | | | | | | | | | | | | Now get_ro() callback must return 0/1 values for its logical states, and negative errno values in case of error. If particular host instance doesn't support RO/WP switch, it should return -ENOSYS. This patch changes some hosts in two ways: 1. Now functions should be smart to not return negative values in "RO asserted" case (particularly gpio_ calls could return negative values for the outermost GPIOs). Also, board code usually passes get_ro() callbacks that directly return gpioreg & bit result, so at91_mci, imxmmc, pxamci and mmc_spi's get_ro() handlers need take special care when returning platform's values to the mmc core. 2. In case of host instance didn't implement get_ro() callback, it should really return -ENOSYS and let the mmc core decide what to do about it (mmc core thinks the same way as the hosts, so it isn't functional change). Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
* mmc_spi: add support for card-detection pollingAnton Vorontsov2008-07-15
| | | | | | | | | | | | This patch adds new platform data variable "caps", so platforms could pass theirs capabilities into MMC core (for example, platforms without interrupt on the CD line will most probably want to pass MMC_CAP_NEEDS_POLL). New platform get_cd() callback provided to optimize polling. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>