#
343505 |
|
27-Jan-2019 |
marius |
MFC: r342634 (partial)
o Don't allocate resources for SDMA in sdhci(4) if the controller or the front-end doesn't support SDMA or the latter implements a platform- specific transfer method instead. While at it, factor out allocation and freeing of SDMA resources to sdhci_dma_{alloc,free}() in order to keep the code more readable when adding support for ADMA variants.
o Base the size of the SDMA bounce buffer on MAXPHYS up to the maximum of 512 KiB instead of using a fixed 4-KiB-buffer. With the default MAXPHYS of 128 KiB and depending on the controller and medium, this reduces the number of SDHCI interrupts by a factor of ~16 to ~32 on sequential reads while an increase of throughput of up to ~84 % was seen.
Front-ends for broken controllers that only support an SDMA buffer boundary of a specific size may set SDHCI_QUIRK_BROKEN_SDMA_BOUNDARY and supply a size via struct sdhci_slot. According to Linux, only - unsupported in stable/10 anyway - Qualcomm MSM-type SDHCI controllers are affected by this, though.
Requested by: Shreyank Amartya (unconditional bump to 512 KiB)
o Introduce a SDHCI_DEPEND macro for specifying the dependency of the front-end modules on the sdhci(4) one and bump the module version of sdhci(4) to 2 via an also newly introduced SDHCI_VERSION in order to ensure that all components are in sync WRT struct sdhci_slot.
o In sdhci(4): - Make pointers const were applicable, and - replace a few device_printf(9) calls with slot_printf() for consistency.
|
#
322724 |
|
20-Aug-2017 |
marius |
MFC: r266470, r273546, r276017, r277932, r279153, r279778, r279780, r278797, r278861, r280283, r280284, r280294, r280452, r280558, r280571, r281863, r282049, r282357, r282440, r282441, r282358, r282359, r283550, r283918, r290171, r290667, r290381, r290533, r290666, r292483, r295659, r297545, r298305, r298383, r298428, r306489, r306557, r307067, r307068, r307087, r307088, r307089, r307091, r307092, r307093, r307098, r307115, r307154, r307240, r307241, r315967, r316476
Unbreak BCM2835/RPI-B support by bringing it in line with stable/11 and head:
- Optimise reading of pending interrupt registers.
- Fix a bug where some DTS layouts could cause the premature ending of the search (i.e. without returning any result) and you would end up with a random MAC address.
- Reduce the diff between head and arm_intrng with the bcm2835 interrupt controller.
- Allow the retrieving of the reserved pins state.
- Add support to the bcm2835 mailbox driver to work before interrupts are enabled. This will be needed to enable the power on devices early on in the boot process.
- Add support for enabling the USB on the Raspberry Pi boards when it hasn't been done by U-Boot. This allows the USB to work when we load the kernel directly.
- Call config_intrhook_disestablish on failure of the bcm2835 fb and fbd intr hooks. With this we can get through the boot even if these functions fail.
- Add the structures needed to get/set the power state. These can be used when, for example, we boot without U-Boot and wish to enable USB, or to suspend an unneeded device.
- Add a mask to match only the relative base address of BSC controllers.
- Move the code to set the device power to the bcm2835 mailbox driver so it can be reused by other drivers.
- Add the SOC_BCM2835 and SOC_BCM2836 options for the arm kernel and add the former to std.bcm2835.
- Add a helper function to read clock frequencies from videocore and use this to get the default frequency of the sdhci device.
- Add partial support for the Raspberry Pi 2.
- Remove a debug #error from the bcm2835 sdhci driver.
- Fetch the SDHCI frequency from videocore (our prefered source) and only if it fails, fetch the clock-frequency from DTB. If both methods fail, use the hardcoded default.
- Pass the supplied buffer length instead of a fixed size.
- Add the routines to query and setup the framebuffer state using the BCM2835_MBOX_CHAN_PROP channel. The old channel (BCM2835_MBOX_CHAN_FB) seems deprecated on recent firmware versions and is causing a freeze on RPi 2.
- Fix DMA on RPi 2. BCM2836 has a different base address for peripherals.
- Enable DMA for sdhci on RPi 2 (BCM2836).
- Add a missing wakeup when releasing ownership of the SPI hardware.
- Fix framebuffer compatibility with new RPi firmware.
- Refactor bcm2835_cpufreq to use bcm2835_mbox_property API.
- Fix the sc(4) framebuffer driver on RPi 2.
- Fix the vt(4) framebuffer driver on RPi 2.
- Remove unused mutex and softc variables.
- Refactor mailbox property API to make it usable for /dev/vcio driver.
- Replace semaphore-base locking with sleep/wait synchronization.
- Fix infinite loop if response from VideoCore never received.
- Set have_message in interrupt to handle "response before READ" case.
- Serialize access to property channel when using bcm2835_mbox_property.
- Force framebuffer virtual viewport to be the same as physical.
- Use proper type of tag in bcm2835_mbox_fb_init.
- bcm2835_cpufreq: Only attach driver if we correcly match on the machine compatible string.
- Add dev.fb.X.resync sysctl to resync ARM framebuffer with VideoCore.
- Do not use DMA channels used by GPU.
- Define local-intc for BCM2836 platform (RPI2) and make BCM2835 intc a child of it.
- Fix build for Pi kernels with syscons enabled.
- Use VM_MEMATTR_WRITE_COMBINING memattr for mmap(2) on framebuffer.
- Make intc driver compatible with upstream DTS.
- Make Rapsberry Pi watchdog driver compatible with upstream DTS.
- Make sure intc is attached before interrupt consumers.
- Make framebuffer driver compatible with upstream DT.
- Add one more heuristic to determine MAC address of the SMSC device.
- Add compatibility strings from upstream DT.
- Fix spelling mistake, BCM2835_PASWORD -> BCM2835_PASSWORD.
Approved by: re (kib)
|
#
318198 |
|
11-May-2017 |
marius |
MFC: r292180 (partial), r297127 (partial), r311911, r311923, r312939, r313250, r313712, r314811 (partial), r314887 (partial), r315430, r317981, r315466
o Move the DRIVER_MODULE() statements that declare mmc(4) to be a child of the various bridge drivers out of dev/mmc.c and into the bridge drivers.
o Add ACPI platform support for SDHCI driver.
o Fix some overly long lines, whitespace and other bugs according to style(9) as well as spelling etc. in mmc(4), mmcsd(4) and sdhci(4).
o In the mmc(4) bridges and sdhci(4) (bus) front-ends: - Remove redundant assignments of the default bus_generic_print_child device method, - use DEVMETHOD_END, - use NULL instead of 0 for pointers.
o Trim/adjust includes.
o Add and use a MMC_DECLARE_BRIDGE macro for declaring mmc(4) bridges as kernel drivers and their dependency onto mmc(4).
o Add support for eMMC "partitions". Besides the user data area, i. e. 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)
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.
o 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.
o 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 have been added to ports as sysutils/mmc-utils. Among others, the `mmc` tool of mmc-utils allows for partitioning eMMC devices (tested working).
o 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.
o Let mmcsd.ko depend on mmc.ko. Additionally, bump MMC_VERSION as at least for some of the above a matching pair is required.
|
#
278778 |
|
14-Feb-2015 |
loos |
MFC: r273264, r274409, r278212, r278213:
Add a workaround needed to fix a bug of Arasan Host Controller where it may lose the contents of consecutive writes (that happens within two SD card clock cycles).
This fixes the causes of instability during the SD card detection and identification on Raspberry Pi (which happens at 400 kHz and so was much more vulnerable to this issue).
Remove the previous workaround which clearly can't provide the same effect.
Remove stale comments about the issues with HS mode.
Remove a previous workaround to limit the minimum sdhci frequency that isn't needed anymore.
Remove some duplicate calls to bus_release_resource() and destroy the mutex on error cases.
While here remove unnecessary includes.
|
#
278703 |
|
13-Feb-2015 |
ian |
MFC r277306, r277307, r277346:
Add defines for SDHCI 3.0 controllers.
Add a new SDHCI quirk, SDHCI_QUIRK_DONT_SET_HISPD_BIT.
Save the command-and-flags value into shadow register when it is written.
|
#
278689 |
|
13-Feb-2015 |
ian |
MFC r277028, r277038:
Check for and handle failures of bus_dmamap_load(). Handle dma mappings with more than one segment for rpi sdhci.
|
#
278685 |
|
13-Feb-2015 |
ian |
MFC r276985:
Store the shadow command/mode register in the softc, not a local static var.
|
#
271051 |
|
03-Sep-2014 |
marius |
MFC: r270885, r270948
- Nuke unused sdhci_softc. - Static'ize sdhci_debug local to sdhci.c. - Const'ify PCI device description strings. - Nuke redundant resource ID members from sdhci_pci_softc. - Nuke unused hw.sdhci_pci.debug tunable. - Add support for using MSI instead of INTx, controllable via the tunable hw.sdhci.enable_msi (defaulting to on) and tested with a RICOH R5CE823 SD controller. - Use NULL instead of 0 for pointers.
|
#
266152 |
|
15-May-2014 |
ian |
MFC r261410
Follow r261352 by updating all drivers which are children of simplebus to check the status property in their probe routines.
|
#
259329 |
|
13-Dec-2013 |
ian |
MFC r257199, r257200, r257217:
Remove all #include <machine/pmap.h> from arm code. It's already included by vm/pmap.h, which is a prerequisite for arm/machine/pmap.h so there's no reason to ever include it directly.
Remove #include <machine/frame.h> from all the arm code that doesn't really need it. That would be almost everywhere it was included. Add it in a couple files that really do need it and were previously getting it by accident via another header.
Remove the last dregs of trapframe_t. It turns out only arm was using this type, so remove it to make arm code more consistant with other platforms.
|
#
278778 |
|
14-Feb-2015 |
loos |
MFC: r273264, r274409, r278212, r278213:
Add a workaround needed to fix a bug of Arasan Host Controller where it may lose the contents of consecutive writes (that happens within two SD card clock cycles).
This fixes the causes of instability during the SD card detection and identification on Raspberry Pi (which happens at 400 kHz and so was much more vulnerable to this issue).
Remove the previous workaround which clearly can't provide the same effect.
Remove stale comments about the issues with HS mode.
Remove a previous workaround to limit the minimum sdhci frequency that isn't needed anymore.
Remove some duplicate calls to bus_release_resource() and destroy the mutex on error cases.
While here remove unnecessary includes.
|
#
278703 |
|
13-Feb-2015 |
ian |
MFC r277306, r277307, r277346:
Add defines for SDHCI 3.0 controllers.
Add a new SDHCI quirk, SDHCI_QUIRK_DONT_SET_HISPD_BIT.
Save the command-and-flags value into shadow register when it is written.
|
#
278689 |
|
13-Feb-2015 |
ian |
MFC r277028, r277038:
Check for and handle failures of bus_dmamap_load(). Handle dma mappings with more than one segment for rpi sdhci.
|
#
278685 |
|
13-Feb-2015 |
ian |
MFC r276985:
Store the shadow command/mode register in the softc, not a local static var.
|
#
271051 |
|
03-Sep-2014 |
marius |
MFC: r270885, r270948
- Nuke unused sdhci_softc. - Static'ize sdhci_debug local to sdhci.c. - Const'ify PCI device description strings. - Nuke redundant resource ID members from sdhci_pci_softc. - Nuke unused hw.sdhci_pci.debug tunable. - Add support for using MSI instead of INTx, controllable via the tunable hw.sdhci.enable_msi (defaulting to on) and tested with a RICOH R5CE823 SD controller. - Use NULL instead of 0 for pointers.
|
#
266152 |
|
15-May-2014 |
ian |
MFC r261410
Follow r261352 by updating all drivers which are children of simplebus to check the status property in their probe routines.
|
#
259329 |
|
13-Dec-2013 |
ian |
MFC r257199, r257200, r257217:
Remove all #include <machine/pmap.h> from arm code. It's already included by vm/pmap.h, which is a prerequisite for arm/machine/pmap.h so there's no reason to ever include it directly.
Remove #include <machine/frame.h> from all the arm code that doesn't really need it. That would be almost everywhere it was included. Add it in a couple files that really do need it and were previously getting it by accident via another header.
Remove the last dregs of trapframe_t. It turns out only arm was using this type, so remove it to make arm code more consistant with other platforms.
|