History log of /freebsd-10.1-release/sys/dev/mmc/
Revision Date Author Comments
272461 03-Oct-2014 gjb

Copy stable/10@r272459 to releng/10.1 as part of
the 10.1-RELEASE process.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


269795 11-Aug-2014 ian

MFC r269341: Populate disk->d_ident with the sd or mmc card's serial number.


266200 15-May-2014 ian

MFC r261938, r261939, r261940, r261944, r261945, r261946, r261947, r261956, r261957, r261983, r261094,
r261955, r261958,

Add a driver to provide access to imx6 on-chip one-time-programmble data.

Make it possible to access the ocotp registers before the ocotp device
is attached, by establishing a temporary mapping of the registers when
necessary.

It turns out Freescale cleverly made the ocotp device compatible across
several different families of SoCs, so move it to the freescale directory
and prefix everything with fsl rather than imx6.

Convert the imx6 sdhci "R1B fix" from a busy-loop in the interrupt handler
to a callout.

Increase the wait time for acquiring the SD bus from 10 to 250ms.

If no compatible cards were found after probing the SD bus, say so.

Add timeout logic to sdhci, separate from the timeouts done by the hardware.

After a timeout, reset the controller using SDHCI_RESET_CMD|SDHCI_RESET_DATA
rather than SDHCI_RESET_ALL; the latter turns off clocks and power, removing
any possibility of recovering from the error.

Add a helper routine to depth-search the device tree for a node with a
matching 'compatible' property.


266160 15-May-2014 ian

MFC r261423, r261424, r261516, r261513, r261562, r261563, r261564, r261565,
r261596, r261606

Add the imx sdhci controller.

Move Open Firmware device root on PowerPC, ARM, and MIPS systems to
a sub-node of nexus (ofwbus) rather than direct attach under nexus. This
fixes FDT on x86 and will make coexistence with ACPI on ARM systems easier.
SPARC is unchanged.

Add the missing ')' at end of sentence. Reword it to use a more common idiom.

Pass the kernel physical address to initarm through the boot param struct.

Make functions only used in vfp.c static, and remove vfp_enable.

Fix __syscall on armeb EABI. As it returns a 64-bit value it needs to
place 32-bit data in r1, not r0. 64-bit data is already packed correctly.

Use abp_physaddr for the physical address over KERNPHYSADDR. This helps us
remove the need to load the kernel at a fixed address.

Remove references to PHYSADDR where it's used only in debugging output.

Dynamically generate the page table. This will allow us to detect the
physical address we are loaded at to change the mapping.


256281 10-Oct-2013 gjb

Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.

Approved by: re (implicit)
Sponsored by: The FreeBSD Foundation


254716 23-Aug-2013 ian

Don't give up so easily on failure of CMD55 to put the card into app-cmd
mode. We don't know why it failed, so we can't know that a retry will
also fail (the low-level driver might have reset the controller state
machine or something similar that would allow a retry to work).


254559 20-Aug-2013 ian

Make the standard sdhci(4) driver work for the TI OMAP family SoCs.
The MMCHS hardware is pretty much a standard SDHCI v2.0 controller with a
couple quirks, which are now supported by sdhci(4) as of r254507.

This should work for all TI SoCs that use the MMCHS hardware, but it has
only been tested on AM335x right now, so this enables it on those platforms
but leaves the existing ti_mmchs driver in place for other OMAP variants
until they can be tested.

This initial incarnation lacks DMA support (coming soon). Even without it
this improves performance pretty noticibly over the ti_mmchs driver,
primarily because it now does multiblock IO.


254432 17-Aug-2013 ian

Consistently init all mmc request, command, and data structures to zero
before using them.


254431 16-Aug-2013 ian

Handle command retries for commands originating at the mmc layer, and
ensure that all such commands have a non-zero retry count except for those
that are expected to fail (for example, because they are used to probe for
feature support).

While it is possible to pass a retry count down to the hardware driver in
the command request structure, no hardware driver currently implements any
retry logic. The hardware doesn't know much about the context of a single
request, so it makes more sense to handle retries at a layer that does.

This adds retry loops to the mmc_wait_for_cmd() and mmc_wait_for_app_cmd()
functions. These functions are the gateway from other code within mmc.c
to the hardware. App commands are a sequence of two commands and a retry
has to rerun both of them in order, so it needs its own retry loop.

Retry looping is specifically NOT implemented in mmc_wait_for_request()
because it is the gateway for children on the bus, and they have to
implement their own retry logic depending on what makes sense for them.


254427 16-Aug-2013 ian

During card identification, run the bus at 400KHz, not the minimum
speed the bus claims to be capable of. The 400KHz speed is dictated
by the SD and MMC standards.


254425 16-Aug-2013 ian

Print the card relative address in hex, because that's what all the
other debugging output does (when it appears in command arguments,
for example).


253054 09-Jul-2013 rpaulo

Use meaningful names when creating mmc/sd threads.

This can be useful when we want to be able to identify which mmcsd is stuck.


250709 16-May-2013 imp

When reporting the user readable size, round up. Several SD cards not
only use SI units, but also are a couple of percent short. If you need
to know the exact size, diskinfo will return exact results.


249999 27-Apr-2013 wkoszek

Add Xilinx Zynq ARM/FPGA SoC support to FreeBSD/arm port.

Submitted by: Thomas Skibo <ThomasSkibo (at) sbcglobal.net>
Tested by: wkoszek (ZedBoard)
Reviewed by: wkoszek, freebsd-arm@ (no objections raised)


249485 14-Apr-2013 imp

Print MB and GB instead of MiB and GiB mislabeled as MB and GB.
SD cards are sold in GB not GiB, this will result in less confusion.
Also, cache parent device pointer to save a few cycles for loops.


248689 24-Mar-2013 ian

Set the backlink in mmc commands to the mmc request that contains them.


245755 21-Jan-2013 gonzo

Fix highest voltage detection

Submitted by: Daisuke Aoyama <aoyama at peach.ne.jp>
Approved by: imp@


243387 22-Nov-2012 emaste

Use %u for unsigned serial number


242321 29-Oct-2012 gonzo

Add BCM2835 SDHCI driver and enable it in Raspberry Pi config


241600 16-Oct-2012 gonzo

Split sdhci driver in two parts: sdhci and sdhci_pci.
sdchi encapsulates a generic SD Host Controller logic that relies on
actual hardware driver for register access.

sdhci_pci implements driver for PCI SDHC controllers using new SDHCI
interface

No kernel config modifications are required, but if you load sdhc
as a module you must switch to sdhci_pci instead.


241067 30-Sep-2012 kevlo

Remove an unneeded NULL check after M_WAITOK.


239607 23-Aug-2012 imp

The check for MAXPHYS doesn't make sense, so remove it.
Report errors indicated by the transport. If this is too chatty, I'll
throw it behind a debug write.
Remove commented out debugs that are no longer useful.


239281 15-Aug-2012 gonzo

Merging of projects/armv6, part 10

- Support for Texas Instruments SoCs:
- AM335x
- OMAP4

- Kernel configs, DTS for Beaglebone and Pandaboard

Submitted by: Ben Gray, Damjan Marion


236491 02-Jun-2012 marius

Add missing prototypes. While at it, sort them alphabetically.

MFC after: 3 days


236156 27-May-2012 marius

- Fix some typos in mmc_acquire_bus() and mmc_send_csd().
- Fix some math errors in mmc_decode_csd_sd().
- Fix incorrect arguments to mmc_send_app_op_cond() in mmc_go_discovery().
- Add reporting of CSD for debug purposes.
- Add detection (and skipping) of password-locked cards.
- Add setting of block length on card if necessary.

Submitted by: Patrick Kelsey
MFC after: 3 days


234524 21-Apr-2012 marius

o Fixes:
- When switching to 4-bit operation, send a SET_CLR_CARD_DETECT command
to disconnect the card-detect pull-up resistor from the DAT3 line before
sending the SET_BUS_WIDTH command.
- Add the missing "reserved" zero entry to the mantissa table used to
decode various CSD fields. This was causing SD cards to report that they
could run at 30 MHz instead of the maximum 25 MHz mandated in the spec.
o Enhancements:
- At the MMC layer, format various info from the CID into a string that
uniquely identifies the card instance (manufacturer number, serial
number, product name and revision, etc). Export it as an instance
variable.
- At the MMCSD layer, display the formatted card ID string, and also
report the clock speed of the hardware (not the card's max speed), and
the number of bits and number of blocks per transfer. It comes out like
this now:
mmcsd0: 968MB <SD SD01G 8.0 SN 276886905 MFG 08/2008 by 3 SD> at mmc0
22.5MHz/4bit/128-block
o Use DEVMETHOD_END.
o Use NULL instead of 0 for pointers.

PR: 156496
Submitted by: Ian Lepore
MFC after: 1 week


227309 07-Nov-2011 ed

Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs.

The SYSCTL_NODE macro defines a list that stores all child-elements of
that node. If there's no SYSCTL_DECL macro anywhere else, there's no
reason why it shouldn't be static.


224868 14-Aug-2011 mav

Fix integer overflow on 32bit systems when calculating media size,
reintroduced by r222475.

Approved by: re (kib)


222475 30-May-2011 jchandra

Fix read_ivar implementation for MMC and SD.

1. Both mmc_read_ivar() and sdhci_read_ivar() use the expression
'*(int *)result = val' to assign to result which is uintptr_t *.
This does not work on big-endian 64 bit systems.

2. The media_size ivar is declared as 'off_t' which does not fit
into uintptr_t in 32bit systems, change this to long.

Submitted by: kanthms at netlogicmicro com (initial version)


217509 17-Jan-2011 mav

Fix 32bit bit fields handling. This fixes card serial number fetching.
It was just a cosmetic issue, because that number is only reported in logs.

Reported by: Michael Butler on current@


216941 04-Jan-2011 pjd

Wait for commands to complete 10 times longer. This makes my A-DATA 32GB SDHC
card being detected.

Reviewed by: imp
MFC after: 2 weeks


208441 23-May-2010 mav

Report relative card address to NewBus as location string.


196403 20-Aug-2009 jhb

Temporarily revert the new-bus locking for 8.0 release. It will be
reintroduced after HEAD is reopened for commits by re@.

Approved by: re (kib), attilio


196037 02-Aug-2009 attilio

Make the newbus subsystem Giant free by adding the new newbus sxlock.
The newbus lock is responsible for protecting newbus internIal structures,
device states and devclass flags. It is necessary to hold it when all
such datas are accessed. For the other operations, softc locking should
ensure enough protection to avoid races.

Newbus lock is automatically held when virtual operations on the device
and bus are invoked when loading the driver or when the suspend/resume
take place. For other 'spourious' operations trying to access/modify
the newbus topology, newbus lock needs to be automatically acquired and
dropped.

For the moment Giant is also acquired in some key point (modules subsystem)
in order to avoid problems before the 8.0 release as module handlers could
make assumptions about it. This Giant locking should go just after
the release happens.

Please keep in mind that the public interface can be expanded in order
to provide more support, if there are really necessities at some point
and also some bugs could arise as long as the patch needs a bit of
further testing.

Bump __FreeBSD_version in order to reflect the newbus lock introduction.

Reviewed by: ed, hps, jhb, imp, mav, scottl
No answer by: ariff, thompsa, yongari
Tested by: pho,
G. Trematerra <giovanni dot trematerra at gmail dot com>,
Brandon Gooch <jamesbrandongooch at gmail dot com>
Sponsored by: Yahoo! Incorporated
Approved by: re (ksmith)


189727 12-Mar-2009 imp

read_ivar takes a uintptr_t * not a u_char *.


188725 17-Feb-2009 mav

Add kernel dumping support. Works fine with sdhci controller driver.


188044 03-Feb-2009 imp

o Define some symbols for a few items that are bare constants in the
code.
o Use NULL in preference to 0 for a few pointers.
o default to bus timing normal, like we default to bus_width_1.


187877 28-Jan-2009 mav

Add one more debug level.


187875 28-Jan-2009 mav

Improve mmc driver verbose logging.
Make requests logging controllable by hw.mmc.debug sysctl.


187551 21-Jan-2009 imp

Default to normal bus timing mode on SD cards. In practice, most
cards people have today support high speed mode, so the timing field
would be initialized to bus_timing_hs, but there are some slow
cards...


187546 21-Jan-2009 imp

Fix minor style nit for file consistency.


187543 21-Jan-2009 imp

Make the command reporting be under boot verbose.
Also, report a few other things under boot verbose.
Small style nit to make new code look like old code in this file.


187525 21-Jan-2009 mav

Fix copy/paste mistake in variable name. This could lead to using incorrect
bus frequency.


185721 06-Dec-2008 mav

Implement suspend/resume for mmc and mmcsd drivers.
Now it is possible to suspend/resume with inserted and active card.

To reinitialize card on resume and to detect card change while suspended,
implement bus rescan routines. It can also be used by controllers without
card presence detection signals or with multiple cards per slot support.

While there, cleanup msleep() usage. We have no any rights to exit without
"request done" signal from driver as it could lead to modify after free.


185202 23-Nov-2008 mav

Report card erase sector size as disk stripe size.


185201 23-Nov-2008 mav

Improve detach handling: close races, flush queue.


184452 29-Oct-2008 mav

Allow card reader bridge driver to report maximum supported transfer size.
sdhci supports up to 65535 blocks transfers, at91_mci - one block.

Enable multiblock operations disabled before to follow at91_mci driver
limitations.

Reviewed by: imp@


184034 18-Oct-2008 mav

Coalesce sequentional BIO_DELETE requests to slightly relax size and alignment
constraints required by the card.


184033 18-Oct-2008 mav

Implement BIO_DELETE command with MMC and SD erase commands.

Erase operation gives card's logic information about unused areas to help it
implement wear-leveling with lower overhead comparing to usual writing.
Erase is much faster then write and does not depends on data bus speed.
Also as result of hitting in-card write logic optimizations I have measured
up to 50% performance boost on writing undersized blocks into preerased areas.

At the same time there are strict limitations on size and allignment of erase
operations. We can erase only blocks aligned to the erase sector size and
with size multiple of it. Different cards has different erase sector size
which usually varies from 64KB to 4MB. SD cards actually allow to erase
smaller blocks, but it is much more expensive as it is implemented via
read-erase-write sequence and so not sutable for the BIO_DELETE purposes.

Reviewed by: imp@


183805 12-Oct-2008 mav

Use GB suffix only from 10GB instead of 1GB.
There are lot of cards with uneven sizes and too strong rounding
will lead to very significant rounding errors.

Reviewed by: imp@


183775 12-Oct-2008 imp

style(9): spaces around operators.


183774 12-Oct-2008 imp

Print the cards natural size.
Move nested tertiary operator expressions into their own function.
Remove extra blank line.
cache sd->disk in 'd' to make the code easier to read.


183765 11-Oct-2008 mav

SELECT_CARD command with zero RCA deselects all cards and so has no reply.


183763 11-Oct-2008 mav

Give mmcsd driver a bit more information about card. It allows to reorganize
log message in a way a bit more common for disk devices. Also it will allow
mmcsd driver to use MMC/SD specific commands when needed.


183731 09-Oct-2008 mav

Add high capacity MMC cards support.


183729 09-Oct-2008 imp

o Use seprate routines to decode cid and csd for sd and mmc cards. All they
have in common right now is a memset. This saves a parameter to
these routines, as well as a level of indentation.
o Make mmc_get_bits a little clearer... It really only works on 128-bit
registers right now.


183709 08-Oct-2008 mav

Only voltage bits should be zero in send_op_cond argument to ignore busy.


183708 08-Oct-2008 mav

Generic SD Host Controller driver going to be named sdhci.


183705 08-Oct-2008 mav

Fix bit offset in mmc_sd_switch().


183704 08-Oct-2008 mav

Set of mmc layer improvements:
- add MMC support.
- add SDHC support.
- add 4 and 8 bit bus width support.
- add High Speed bus timing support.


183542 02-Oct-2008 imp

Define and use MMC_SECTOR_SIZE.
Make mmc_get_media_size now return an off_t and remove now useless cast.


183541 02-Oct-2008 imp

MAXPHYS seems more stable on the AT91RM9200 boards that I have. We
may need to ask the host controller for the right number to use
here...


183480 30-Sep-2008 imp

Improve support for multiple block read/write. This code is currently
disabled by default because there's problems with it on AT91RM9200,
currently the only host controller in the tree. I've not had time to
track those problems to ground. I'm committing because this is
important for other host controllers that are in the pipeline.

Submitted by: mav@


183471 29-Sep-2008 imp

Make the media size return the block rather than the bytes on the device.


183470 29-Sep-2008 imp

Explicitly set data to NULL rather than relying mmc_wait_for_cmd() to
do it for us. There may be commands we have to wait for that need to
set data.

Submitted by: mav@


183468 29-Sep-2008 imp

Minor style fixes from mav@ (with similar problems fixed where I noticed
them):
#define<tab>
zero memory when we allocate it
Put device name in error message.

Submitted by: mav@


183467 29-Sep-2008 imp

Conform to style(9) for return (foo); The files were a mix before.

Submitted by: mav@


183453 29-Sep-2008 imp

Convert all C++ comments to C style. There's lots of folks that don't
like them and they don't add enough to be worth standing out.


183452 29-Sep-2008 imp

The parameters to the MMCBR_ACQUIRE_HOST and MMCBR_RELEAES_HOST were
the device in question, rather than the bus doing the requesting. Fix
it so that it is the bus.

Submitted by: mav@


183450 28-Sep-2008 imp

Add "caps" word to host bridge.


183449 28-Sep-2008 imp

Implement power down, and power down the bus on detach.

Submitted by: mav@


183448 28-Sep-2008 imp

When a device is read only, fail all non-read BIO requests.

Submitted by: mav@


183447 28-Sep-2008 imp

Propigate read-only status of cards. Right now it is read only at
device attach time. We may need to read this more often in the
future, but for now simplicity of implementation wins.

Submitted by: mav@


183446 28-Sep-2008 imp

The OCR register defines both acceptable voltage bits, as well as bits
for other things. Mask out the voltage only bits when returning the
Vdd mask for voltage computation.

Submitted by: mav@


183445 28-Sep-2008 imp

Other busses on the system use the official capitalization for the
technology. Make mmc conform to that.

Submitted by: mav@


183444 28-Sep-2008 imp

Fix line continuation whitespace.

Submitted by: mav@


172836 20-Oct-2007 julian

Rename the kthread_xxx (e.g. kthread_create()) calls
to kproc_xxx as they actually make whole processes.
Thos makes way for us to add REAL kthread_create() and friends
that actually make theads. it turns out that most of these
calls actually end up being moved back to the thread version
when it's added. but we need to make this cosmetic change first.

I'd LOVE to do this rename in 7.0 so that we can eventually MFC the
new kthread_xxx() calls.


170337 05-Jun-2007 imp

MFp4: When querying the operating condition of SD cards (using the
application specific SEND_OP_COND (CMD55 + ACMD41), go ahead and allow
100 tries. This gives a timeout of a second rather than the ~100ms
the old style produces.

I've had one old 16MB SD card which needs the extra time. I've now
had reports from the field that other cards need this too.

Originally done at BSDcan 2007 while waiting to give my embedding
madness minitalk.


170002 26-May-2007 imp

A careful reading of the disclaimer that is required to download the
SD Simplified specification, as well as other SD and SDIO
implemenations I've examined, suggest this disclaimer may be required.
It is unclear to me exactly what the license would be for, or why it
might be required. Err on the side of caution and include this
disclaimer so anybody deploying this code can judge for themselves. I
have no further unformation about the details.


169567 15-May-2007 imp

First cut at making detach work. also add sdh as a possible mmc bridge.

Submitted by: Andrea Bittau
(Andrea may have updated patches, but I've tested these)


169566 15-May-2007 imp

Don't need mmc_mode ivar


163516 20-Oct-2006 imp

Preliminary MMC stack. This stack supports SD 1.0 cards only, but
should be easily adapted to SD 2.0 (aka SDHC), SDIO, MMC and MMCplus
cards. At the present time, there's only one bridge driver for the
ARM9 based Atmel AT91RM9200.