aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/mmc
Commit message (Collapse)AuthorAgeFilesLines
...
* dwmmc_hisi: Fix build when option MMCCAM is definedEmmanuel Vadot2018-01-131-0/+2
| | | | Notes: svn path=/head/; revision=327922
* dwmmc: Fully subclass driverEmmanuel Vadot2017-12-306-84/+334
| | | | | | | | | | | | | Fully subclass the dwmmc driver and split every driver into multiple files. There is still a few quirks in the dwmmc driver that will need some work. Tested On: Pine64 Rock64 Differential Revision: https://reviews.freebsd.org/D13615 Notes: svn path=/head/; revision=327392
* - Don't allow userland to switch partitions; it's next to impossibleMarius Strobl2017-12-291-8/+22
| | | | | | | | | to recover from that, especially when something goes wrong. - When userland changes EXT_CSD, update the kernel copy before using relevant EXT_CSD bits in mmcsd_switch_part(). Notes: svn path=/head/; revision=327355
* Do pass removing some write-only variables from the kernel.Alexander Kabaev2017-12-253-9/+2
| | | | | | | | | | | | This reduces noise when kernel is compiled by newer GCC versions, such as one used by external toolchain ports. Reviewed by: kib, andrew(sys/arm and sys/arm64), emaste(partial), erj(partial) Reviewed by: jhb (sys/dev/pci/* sys/kern/vfs_aio.c and sys/kern/kern_synch.c) Differential Revision: https://reviews.freebsd.org/D10385 Notes: svn path=/head/; revision=327173
* sys/dev: further adoption of SPDX licensing ID tags.Pedro F. Giffuni2017-11-276-0/+12
| | | | | | | | | | | | | | | Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts. Notes: svn path=/head/; revision=326255
* Correct an inverted conditional for determining the multiplier ofMarius Strobl2017-10-191-1/+1
| | | | | | | the user data area size. Notes: svn path=/head/; revision=324776
* Miscellaneous fixes and improvements to MMCCAM stackIlya Bakulin2017-09-151-0/+4
| | | | | | | | | | | | | | | | | | * Demote the level of several debug messages to CAM_DEBUG_TRACE * Add detection for SDHC cards that can do 1.8V. No voltage switch sequence is issued yet; * Don't create a separate LUN for each SDIO function. We need just one to make pass(4) attach; * Remove obsolete mmc_sdio* files. SDIO functionality will be moved into the separate device that will manage a new sdio(4) bus; * Terminate probing if got no reply to CMD0; * Make bcm2835 SDHCI host controller driver compile with 'option MMCCAM'. Approved by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D12109 Notes: svn path=/head/; revision=323619
* - If available, use TRIM instead of ERASE for implementing BIO_DELETE.Marius Strobl2017-08-075-53/+189
| | | | | | | | | | | | | | | | | | | | | | | | | | This also involves adding a quirk table as TRIM is broken for some Kingston eMMC devices, though. Compared to ERASE (declared "legacy" in the eMMC specification v5.1), TRIM has the advantage of operating on write sectors rather than on erase sectors, which typically are of a much larger size. Thus, employing TRIM, we don't need to fiddle with coalescing BIO_DELETE requests that are also of (write) sector units into erase sectors, which might not even add up in all cases. - For some SanDisk iNAND devices, the CMD38 argument, e. g. ERASE, TRIM etc., has to be specified via EXT_CSD[113], which now is also handled via a quirk. - My initial understanding was that for eMMC partitions, the granularity should be used as erase sector size, e. g. 128 KB for boot partitions. However, rereading the relevant parts of the eMMC specification v5.1, this isn't actually correct. So drop the code which used partition granularities for delmaxsize and stripesize. For the most part, this change is a NOP, though, because a) for ERASE, mmcsd_delete() used the erase sector size unconditionally for all partitions anyway and b) g_disk_limit() doesn't actually take the stripesize into account. - Take some more advantage of mmcsd_errmsg() in mmcsd(4) for making error codes human readable. Notes: svn path=/head/; revision=322209
* - Correct the remainder of confusing and error prone mix-ups betweenMarius Strobl2017-08-025-86/+84
| | | | | | | | | | | | | | | | | | | | | | | | "br" or "bridge" where - according to the terminology outlined in comments of bridge.h and mmcbr_if.m around since their addition in r163516 - the bus is meant and used instead. Some of these instances are also rather old, while those in e. g. mmc_subr.c are as new as r315430 and were caused by choosing mmc_wait_for_request(), i. e. the one pre-r315430 outliner existing in mmc.c, as template for function parameters in mmc_subr.c inadvertently. This correction translates to renaming "brdev" to "busdev" and "mmcbr" to "mmcbus" respectively as appropriate. While at it, also rename "reqdev" to just "dev" in mmc_subr.[c,h] for consistency with was already used in mmm.c pre-r315430, again modulo mmc_wait_for_request() that is. - Remove comment lines from bridge.h incorrectly suggesting that there would be a MMC bridge base class driver. - Update comments in bridge.h regarding the star topology of SD and SDIO; since version 3.00 of the SDHCI specification, for eSD and eSDIO bus topologies are actually possible in form of so called "shared buses" (in some subcontext later on renamed to "embedded" buses). Notes: svn path=/head/; revision=321948
* Correctly use the size of a pointer rather than that of a pointer to aMarius Strobl2017-07-261-2/+2
| | | | | | | | | | pointer. Reported by: Coverity CID: 1378432 Notes: svn path=/head/; revision=321588
* Improve the clarity of a comment added in r321385 by not referring toMarius Strobl2017-07-251-1/+1
| | | | | | | volatile SDHCI specification lingo. Notes: svn path=/head/; revision=321490
* o Add support for eMMC HS200 and HS400 bus speed modes at 200 MHz toMarius Strobl2017-07-2310-276/+1010
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sdhci(4), mmc(4) and mmcsd(4). For the most part, this consists of: - Correcting and extending the infrastructure for negotiating and enabling post-DDR52 modes already added as part of r315598. In fact, HS400ES now should work as well but hasn't been activated due to lack of corresponding hardware. - Adding support executing standard SDHCI initial tuning as well as re-tuning as required for eMMC HS200/HS400 and the fast UHS-I SD card modes. Currently, corresponding methods are only hooked up to the ACPI and PCI front-ends of sdhci(4), though. Moreover, sdhci(4) won't offer any modes requiring (re-)tuning to the MMC/SD layer in order to not break operations with other sdhci(4) front- ends. Likewise, sdhci(4) now no longer offers modes requiring the set_uhs_timing method introduced in r315598 to be implemented/ hooked up (previously, this method was used with DDR52 only, which in turn is only available with Intel controllers so far, i. e. no such limitation was necessary before). Similarly for 1.2/1.8 V VCCQ support and the switch_vccq method. - Addition of locking to the IOCTL half of mmcsd(4) to prevent races with detachment and suspension, especially since it's required to immediately switch away from RPMB partitions again after an access to these (so re-tuning can take place anew, given that the current eMMC specification v5.1 doesn't allow tuning commands to be issued with a RPMB partition selected). Therefore, the existing part_mtx lock in the mmcsd(4) softc is additionally renamed to disk_mtx in order to denote that it only refers to the disk(9) half, likewise for corresponding macros. On the system where the addition of DDR52 support increased the read throughput to ~80 MB/s (from ~45 MB/s at high speed), HS200 yields ~154 MB/s and HS400 ~187 MB/s, i. e. performance now has more than quadrupled compared to pre-r315598. Also, with the advent of (re-)tuning support, most infrastructure necessary for SD card UHS-I modes up to SDR104 now is also in place. Note, though, that the standard SDHCI way of (re-)tuning is special in several ways, which also is why sending the actual tuning requests to the device is part of sdhci(4). SDHCI implementations not following the specification, MMC and non-SDHCI SD card controllers likely will use a generic implementation in the MMC/SD layer for executing tuning, which hasn't been written so far, though. However, in fact this isn't a feature-only change; there are boards based on Intel Bay Trail where DDR52 is problematic and the suggested workaround is to use HS200 mode instead. So far exact details are unknown, however, i. e. whether that's due to a defect in these SoCs or on the boards. Moreover, due to the above changes requiring to be aware of possible MMC siblings in the fast path of mmc(4), corresponding information now is cached in mmc_softc. As a side-effect, mmc_calculate_clock(), mmc_delete_cards(), mmc_discover_cards() and mmc_rescan_cards() now all are guaranteed to operate on the same set of devices as there no longer is any use of device_get_children(9), which can fail in low memory situations. Likewise, mmc_calculate_clock() now longer will trigger a panic due to the latter. o Fix a bug in the failure reporting of mmcsd_delete(); in case of an error when the starting block of a previously stored erase request is used (in order to be able to erase a full erase sector worth of data), the starting block of the newly supplied bio_pblkno has to be returned for indicating no progress. Otherwise, upper layers might be told that a negative number of BIOs have been completed, leading to a panic. o Fix 2 bugs on resume: - Things done in fork1(9) like the acquisition of an SX lock or the sleepable memory allocation are incompatible with a MTX_DEF taken. Thus, mmcsd_resume() must not call kproc_create(9), which in turn uses fork1(9), with the disk_mtx (formerly part_mtx) held. - In mmc_suspend(), the bus is powered down, which in the typical case of a device being selected at the time of suspension, causes the device deselection as part of the bus acquisition by mmc(4) in mmc_scan() to fail as the bus isn't powered up again before later in mmc_go_discovery(). Thus, power down with the bus acquired in mmc_suspend(), which will trigger the deselection up-front. o Fix a memory leak in mmcsd_ioctl() in case copyin(9) fails. [1] o Fix missing variable initialization in mmc_switch_status(). [2] o Fix R1_SWITCH_ERROR detection in mmc_switch_status(). [3] o Handle the case of device_add_child(9) failing, for example due to a memory shortage, gracefully in mmc(4) and sdhci(4), including not leaking memory for the instance variables in case of mmc(4) (which might or might not fix [4] as the latter problem has been discovered independently). o Handle the case of an unknown SD CSD version in mmc_decode_csd_sd() gracefully instead of calling panic(9). o Again, check and handle the return values of some additional function calls in mmc(4) instead of assuming that everything went right or mark non-fatal errors by casting the return value to void. o Correct a typo in the Linux IOCTL compatibility; it should have been MMC_IOC_MULTI_CMD rather than MMC_IOC_CMD_MULTI. o Now that we are reaching ever faster speeds (more improvement in this regard is to be expected when adding ADMA support to sdhci(4)), apply a few micro-optimizations like predicting mmc(4) and sdhci(4) debugging to be off or caching erase sector and maximum data sizes as well support of block addressing in mmsd(4) (instead of doing 2 indirections on every read/write request for determining the maximum data size for example). Reported by: Coverity CID: 1372612 [1], 1372624 [2], 1372594 [3], 1007069 [4] Notes: svn path=/head/; revision=321385
* An MMC/SD/SDIO stack using CAMWarner Losh2017-07-093-1/+104
| | | | | | | | | | | | | | | | | | | | | | | Implement the MMC/SD/SDIO protocol within a CAM framework. CAM's flexible queueing will make it easier to write non-storage drivers than the legacy stack. SDIO drivers from both the kernel and as userland daemons are possible, though much of that functionality will come later. Some of the CAM integration isn't complete (there are sleeps in the device probe state machine, for example), but those minor issues can be improved in-tree more easily than out of tree and shouldn't gate progress on other fronts. Appologies to reviews if specific items have been overlooked. Submitted by: Ilya Bakulin Reviewed by: emaste, imp, mav, adrian, ian Differential Review: https://reviews.freebsd.org/D4761 merge with first commit, various compile hacks. Notes: svn path=/head/; revision=320844
* o Add support for eMMC DDR bus speed mode at 52 MHz to sdhci(4) andMarius Strobl2017-03-195-87/+473
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mmc(4). For the most part, this consists of support for: - Switching the signal voltage (VCCQ) to 1.8 V or (if supported by the host controller) to 1.2 V, - setting the UHS mode as appropriate in the SDHCI_HOST_CONTROL2 register, - setting the power class in the eMMC device according to the core supply voltage (VCC), - using different bits for enabling a bus width of 4 and 8 bits in the the eMMC device at DDR or higher timings respectively, - arbitrating timings faster than high speed if there actually are additional devices on the same MMC bus. Given that support for DDR52 is not denoted by SDHCI capability registers, availability of that timing is indicated by a new quirk SDHCI_QUIRK_MMC_DDR52 and only enabled for Intel SDHCI controllers so far. Generally, what it takes for a sdhci(4) front-end to enable support for DDR52 is to hook up the bridge method mmcbr_switch_vccq (which especially for 1.2 V signaling support is chip/board specific) and the sdhci_set_uhs_timing sdhci(4) method. As a side-effect, this change also fixes communication with some eMMC devices at SDR high speed mode with 52 MHz due to the signaling voltage and UHS bits in the SDHCI controller no longer being left in an inappropriate state. Compared to 52 MHz at SDR high speed which typically yields ~45 MB/s with the eMMC chips tested, throughput goes up to ~80 MB/s at DDR52. Additionally, this change already adds infrastructure and quite some code for modes up to HS400ES and SDR104 respectively (I did not want to add to much stuff at a time, though). Essentially, what is still missing in order to be able to activate support for these latter is is support for and handling of (re-)tuning. o In sdhci(4), add two tunables hw.sdhci.quirk_clear as well as hw.sdhci.quirk_set, which (when hooked up in the front-end) allow to set/clear sdhci(4) quirks for debugging and testing purposes. However, especially for SDHCI controllers on the PCI bus which have no specific support code so far and, thus, are picked up as generic SDHCI controllers, hw.sdhci.quirk_set allows for setting the necessary quirks (if required). o In mmc(4), check and handle the return values of some more function calls instead of assuming that everything went right. In case failures actually are not problematic, indicate that by casting the return value to void. Reviewed by: jmcneill Notes: svn path=/head/; revision=315598
* Again, fixes regarding style(4), to comments, includes and unusedMarius Strobl2017-03-173-6/+8
| | | | | | | parameters. Notes: svn path=/head/; revision=315466
* - Add support for eMMC "partitions". Besides the user data area, i. e.Marius Strobl2017-03-1610-375/+1515
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the default partition, eMMC v4.41 and later devices can additionally provide up to: 1 enhanced user data area partition 2 boot partitions 1 RPMB (Replay Protected Memory Block) partition 4 general purpose partitions (optionally with a enhanced or extended attribute) Of these "partitions", only the enhanced user data area one actually slices the user data area partition and, thus, gets handled with the help of geom_flashmap(4). The other types of partitions have address space independent from the default partition and need to be switched to via CMD6 (SWITCH), i. e. constitute a set of additional "disks". The second kind of these "partitions" doesn't fit that well into the design of mmc(4) and mmcsd(4). I've decided to let mmcsd(4) hook all of these "partitions" up as disk(9)'s (except for the RPMB partition as it didn't seem to make much sense to be able to put a file-system there and may require authentication; therefore, RPMB partitions are solely accessible via the newly added IOCTL interface currently; see also below). This approach for one resulted in cleaner code. Second, it retains the notion of mmcsd(4) children corresponding to a single physical device each. With the addition of some layering violations, it also would have been possible for mmc(4) to add separate mmcsd(4) instances with one disk each for all of these "partitions", however. Still, both mmc(4) and mmcsd(4) share some common code now e. g. for issuing CMD6, which has been factored out into mmc_subr.c. Besides simply subdividing eMMC devices, some Intel NUCs having UEFI code in the boot partitions etc., another use case for the partition support is the activation of pseudo-SLC mode, which manufacturers of eMMC chips typically associate with the enhanced user data area and/ or the enhanced attribute of general purpose partitions. CAVEAT EMPTOR: Partitioning eMMC devices is a one-time operation. - Now that properly issuing CMD6 is crucial (so data isn't written to the wrong partition for example), make a step into the direction of correctly handling the timeout for these commands in the MMC layer. Also, do a SEND_STATUS when CMD6 is invoked with an R1B response as recommended by relevant specifications. However, quite some work is left to be done in this regard; all other R1B-type commands done by the MMC layer also should be followed by a SEND_STATUS (CMD13), the erase timeout calculations/handling as documented in specifications are entirely ignored so far, the MMC layer doesn't provide timeouts applicable up to the bridge drivers and at least sdhci(4) currently is hardcoding 1 s as timeout for all command types unconditionally. Let alone already available return codes often not being checked in the MMC layer ... - Add an IOCTL interface to mmcsd(4); this is sufficiently compatible with Linux so that the GNU mmc-utils can be ported to and used with FreeBSD (note that due to the remaining deficiencies outlined above SANITIZE operations issued by/with `mmc` currently most likely will fail). These latter will be added to ports as sysutils/mmc-utils in a bit. Among others, the `mmc` tool of the GNU mmc-utils allows for partitioning eMMC devices (tested working). - For devices following the eMMC specification v4.41 or later, year 0 is 2013 rather than 1997; so correct this for assembling the device ID string properly. - Let mmcsd.ko depend on mmc.ko. Additionally, bump MMC_VERSION as at least for some of the above a matching pair is required. - In the ACPI front-end of sdhci(4) describe the Intel eMMC and SDXC controllers as such in order to match the PCI one. Additionally, in the entry for the 80860F14 SDXC controller remove the eMMC-only SDHCI_QUIRK_INTEL_POWER_UP_RESET. OKed by: imp Submitted by: ian (mmc_switch_status() implementation) Notes: svn path=/head/; revision=315430
* Add and use a MMC_DECLARE_BRIDGE macro for declaring mmc(4) bridgesMarius Strobl2017-03-072-2/+7
| | | | | | | | | | as kernel drivers and their dependency onto mmc(4); this allows for incrementing the mmc(4) module version but also for entire omission of these bridge declarations for mmccam(4) in a single place, i. e. in dev/mmc/bridge.h. Notes: svn path=/head/; revision=314887
* o Another round fixes for mmc(4), mmcsd(4) and sdhci(4) regardingMarius Strobl2017-03-066-27/+40
| | | | | | | | | | | | | | | comments, marking unused parameters as such, style(9), whitespace, etc. o In the mmc(4) bridges and sdhci(4) (bus) front-ends: - Remove redundant assignments of the default bus_generic_print_child device method (I've whipped these out of the tree as part of r227843 once, but they keep coming back ...), - use DEVMETHOD_END, - use NULL instead of 0 for pointers. o Trim/adjust includes. Notes: svn path=/head/; revision=314811
* Fix some more overly long lines, whitespace and other bugs according toMarius Strobl2017-02-042-46/+46
| | | | | | | style(9) as well as spelling in comments. Notes: svn path=/head/; revision=313250
* Fix overly long lines, whitespace and other bugs according to style(9).Marius Strobl2017-01-292-35/+52
| | | | Notes: svn path=/head/; revision=312939
* "Buses" is the preferred plural of "bus"Conrad Meyer2017-01-151-1/+1
| | | | | | | | | | | | | | | | | | | | Replace archaic "busses" with modern form "buses." Intentionally excluded: * Old/random drivers I didn't recognize * Old hardware in general * Use of "busses" in code as identifiers No functional change. http://grammarist.com/spelling/buses-busses/ PR: 216099 Reported by: bltsrc at mail.ru Sponsored by: Dell EMC Isilon Notes: svn path=/head/; revision=312234
* Report random flash storage as non-rotating to GEOM_DISK.Alexander Motin2017-01-121-0/+1
| | | | | | | | | While doing it, introduce respective constants in geom_disk.h. MFC after: 1 week Notes: svn path=/head/; revision=311971
* In mmcsd_task(), bio_resid was not being set to 0 on a successful readMarius Strobl2017-01-091-0/+2
| | | | | | | | | | | or write, resulting in random short-read and short-write returns for requests. Fixing this fixes nominal block I/O via mmcsd(4). Obtained from: DragonFlyBSD (fd4b97583be1a1e57234713c25f6e81bc0411cb0) MFC after: 5 days Notes: svn path=/head/; revision=311793
* mmc: Accept even lower voltage for CherryviewConrad Meyer2017-01-081-1/+1
| | | | | | | | | | | And HP x2 210, per DragonFlyBSD 240bd9cd58f8259c12c14a8006837e698. Submitted by: Johannes Lundberg <yohanesu75 at gmail.com> No objection: gonzo@ Obtained from: DragonFlyBSD Notes: svn path=/head/; revision=311664
* sdhci/mmc: Minor whitespace cleanupsConrad Meyer2016-12-201-11/+11
| | | | | | | | | No functional change. Submitted by: Johannes Lundberg <yohanesu75 at gmail.com> Notes: svn path=/head/; revision=310309
* Add DMA sync operations around accessing the dwmmc descriptor ring. EvenAndrew Turner2016-05-131-0/+7
| | | | | | | | | | with it maps as cache-coherent we still need to call bus_dmamap_sync. Obtained from: ABT Systems Ltd Sponsored by: The FreeBSD Foundation Notes: svn path=/head/; revision=299679
* sys/dev: minor spelling fixes.Pedro F. Giffuni2016-05-031-1/+1
| | | | | | | Most affect comments, very few have user-visible effects. Notes: svn path=/head/; revision=298955
* sys/dev: extend use of the howmany() macro when available.Pedro F. Giffuni2016-04-261-1/+1
| | | | | | | | We have a howmany() macro in the <sys/param.h> header that is convenient to re-use as it makes things easier to read. Notes: svn path=/head/; revision=298646
* Cleanup unnecessary semicolons from the kernel.Pedro F. Giffuni2016-04-101-1/+1
| | | | | | | Found with devel/coccinelle. Notes: svn path=/head/; revision=297793
* Use correct response bits for MMC_RSP_R4-R7 typesAlexander Kabaev2016-03-271-2/+5
| | | | Notes: svn path=/head/; revision=297329
* Fix fallout from r292180 (Dec 2015)... ensure that every driver which hasIan Lepore2016-03-212-0/+3
| | | | | | | | | | | | a DRIVER_MODULE() referencing mmc_driver has a MODULE_DEPEND() on mmc. This is because the kernel linker only searches for symbols in dependent modules, so loading sdhci_pci (and other bus-flavors of sdhci) would fail when mmc was not compiled into the kernel (even if you hand-loaded mmc first). (Thanks to jilles@ for providing the vital clue about the kernel linker.) Notes: svn path=/head/; revision=297127
* Create an API to reset a struct bio (g_reset_bio). This is mandatoryWarner Losh2016-02-171-1/+2
| | | | | | | | | | | | for all struct bio you get back from g_{new,alloc}_bio. Temporary bios that you create on the stack or elsewhere should use this before first use of the bio, and between uses of the bio. At the moment, it is nothing more than a wrapper around bzero, but that may change in the future. The wrapper also removes one place where we encode the size of struct bio in the KBI. Notes: svn path=/head/; revision=295707
* Flag sysctl hw.mmc.debug as a tunable, since often you want to debug theIan Lepore2015-12-181-1/+1
| | | | | | | bus probing during system startup. Notes: svn path=/head/; revision=292420
* Move the DRIVER_MODULE() statements that declare mmc(4) to be a child ofIan Lepore2015-12-143-16/+8
| | | | | | | | | the various bridge drivers out of dev/mmc.c and into the bridge drivers. Requested by: jhb (almost two years ago; better late than never) Notes: svn path=/head/; revision=292180
* Add support for the DesignWare MMC hardware in the HiSilicon hi6220. ThisAndrew Turner2015-09-011-0/+96
| | | | | | | | | | | | | | | | | SoC is used in the HiKey board from 96boards. Currently on the SD card is working on the HiKey, as such devices 0 and 2 will need to be disabled, for example by adding the following to loader.conf: hint.hisi_dwmmc.0.disabled=1 hint.hisi_dwmmc.2.disabled=1 Relnotes: yes (Hikey board booting) Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287371
* Finish allowing the dwmmc driver to be subclassed, move the softc to a newAndrew Turner2015-09-012-45/+91
| | | | | | | | | header, along with the hwtype enum, device attach prototype, and driver_t. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287367
* Remove an variable we only ever write to, and stop assigning 0 to valuesAndrew Turner2015-09-011-4/+1
| | | | | | | | | | in the softc as it's the default value. The latter helps with subclassing this driver. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287356
* Move dwmmc.h to dwmmc_reg.h. This is in preperation for adding support toAndrew Turner2015-08-282-1/+6
| | | | | | | | | subclass the dwmmc driver to allow SoC specific attachments. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287258
* Only check for the bus frequency if it has not already been set, forAndrew Turner2015-08-281-4/+6
| | | | | | | | | example through a driver running as a subclass of this. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287250
* There is no need to get the bus tag or handle.Andrew Turner2015-08-271-6/+0
| | | | | | | Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287214
* Limit the speed to the bus frequency.Andrew Turner2015-08-271-1/+1
| | | | | | | Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287213
* Allow the fifo-depth and num-slots to be missing. For the former we readAndrew Turner2015-08-271-8/+16
| | | | | | | | | the value from the hardware, for the latter assume a single slot. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287212
* Allow us to select the transfer count. This allows us to work with hardwareAndrew Turner2015-08-271-7/+9
| | | | | | | | | that seems to only work with a single block at a time. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287202
* Fix freescale sdhc driver, and add it to the files list.Justin Hibbits2015-08-271-0/+1
| | | | | | | Also, add it to the mmc DRIVER_MODULE attachment list. Notes: svn path=/head/; revision=287189
* Only access the Samsung registers when targeting Samsung hardware.Andrew Turner2015-08-261-1/+1
| | | | | | | Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=287161
* Attach dwmmc to the ofwbus, som devicetrees place it here.Andrew Turner2015-08-071-0/+1
| | | | | | | Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=286408
* Stop including machine/fdt.h, it's unneeded, and purposefullyAndrew Turner2015-08-071-1/+0
| | | | | | | | | unimplemented on arm64. Sponsored by: ABT Systems Ltd Notes: svn path=/head/; revision=286407
* Deselect the sd card before re-selecting it when working around a problemIan Lepore2015-07-181-10/+11
| | | | | | | | | | | with some cards that causes them to become deselected after probing for switch capabilities. The old workaround fixes the behavior with some cards, but causes problems with the cards the behave correctly and don't become deselected. Forcing a deselect then reselect appears to work correctly with all cards in initial testing. Notes: svn path=/head/; revision=285678
* Do not set d_fwsectors nor d_fwheads. Primarily because the valuesMarcel Moolenaar2015-05-291-24/+1
| | | | | | | | | | | tend to be invalid. On a Beaglebone Black, we get 8192 sectors per track and that causes major breakages. Differential Revision: D2646 Reviewed by: ian@ imp@ Notes: svn path=/head/; revision=283754
* Add the MMC/SD driver for Allwinner SoCs.Luiz Otavio O Souza2015-05-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | This is based on the patch sent by Alexander Fedorov with the following fixes/improvements: - Better error handling; - Clock is derived from PLL6 (obtained from netbsd); - No more unnecessary busy loops on interrupt handler; - style(9) fixes and code cleanup. I also want to thanks Martin Galvan who has sent an alternative implementation with some interesting fixes. Tested on CubieBoard2, Banana-Pi (thanks to netgate!) and Cubieboard1 (Pratik Singhal). This is intended to pave the way for the upcoming GSoC work (and make easier the build of images for the supported boards). PR: 196081 Submitted by: Alexander Fedorov <alexander.fedorov@rtlservice.com> Notes: svn path=/head/; revision=283253