#
34552f8e |
|
14-Jan-2021 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
sd/mmc: enable 4-bit data transfers It works, but performance is still unexpectedly low (getting about 50kB/s write speed) with almost no CPU load. Change-Id: I7da3ee70c8b379c4e6c2250d67f880c78635874f Reviewed-on: https://review.haiku-os.org/c/haiku/+/3630 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
522c141d |
|
12-Jan-2021 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
[WIP] sd/mmc: enable high speed transfers - Switch to 25MHz clock - Switch to 4bit transfers mode (the default is 1bit) Reading and writing SD cards do not seem to work anymore with these changes. I get invalid data on read, and on write, an interrupt is never called in some cases.
|
#
24136793 |
|
08-Jan-2021 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
sdhci_pci: support for inserting cards after boot. Change-Id: Ic67ea38bb80b35528ebb1a150d1a916a56184e69 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3617 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
d1fee57d |
|
15-Dec-2020 |
Adrien Destugues <adrien.destugues@opensource.viveris.fr> |
mmc_disk: add SDHC support. The main differences: - The initialization sequence requires an additional command (this was already done) - The layout of the CSD register and the way to compute the device geometry from it changes - The read and write commands parameter is a sector number instead of a byte position Change-Id: Ie729e333c9748f36b37acd70c970adfd425cf0b6 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3512 Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
|
#
9a37366b |
|
12-Dec-2020 |
Adrien Destugues <adrien.destugues@opensource.viveris.fr> |
mmc_disk: add write support Change-Id: I77cf1612569c43e79917ac5a1493b7ab4a04cb47 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3504 Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
|
#
7a160a86 |
|
06-Dec-2020 |
Adrien Destugues <adrien.destugues@opensource.viveris.fr> |
mmc_disk: read using "simple DMA" The SDHCI spec also offers an "advanced DMA" mode where we can use scatter-gather lists. It would allow to remove several of the DMA restrictions, but hardware support for it is optional, so we need this version anyway. The geometry is retrieved on demand in the first read or write or in a call to the get geometry or get device size ioctl. It is not possible to retrieve it from the device initialization because that is called as part of the mmc_bus scanning, which needs a specific sequence of commands and keeps the bus locked to prevent drivers to insert their own commands in the middle of that sequence. TODO: - Move the DMA restrictions definition to sdhci_pci and forward it up to mmc_disk (which is the one creating the IOScheduler) - Decide if we want to keep non-DMA support (probably should, but it makes things more complex, because it uses virtual addresses) Change-Id: Ib1dd14eacf62052d747bfb3ef7820bc5a34d3030 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3471 Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
|
#
74b60970 |
|
14-Oct-2020 |
Anarchos <sylvain_kerjean@hotmail.com> |
sd/mmc: read, naive method First implementation of reading sectors from an SD card. This is not the best performance for many reasons: - No DMA - Reads only one sector at a time - Cannot read more than 512 bytes per syscall Also there are major limitations: - Cannot read less than 512 bytes. The hardware of course works in full sectors. The mmc_disk driver should go through the io scheduler to make sure requests have a reasonable size and offset, and nothing tries to read just a few bytes in the middle of a sector. - SD cards only (no SDHC, no MMC) Architecture problems: I think too much of the implementation is done in sdhci_pci and should be moved to the upper layers. However it is difficult to say without having implemented DMA (which indeed will be at the low level of the sdhci controller). It doesn't help that the order of operations is a bit different depending on wether there is DMA or not. In DMA mode you first prepare the buffer, then run the command. In non-DMA mode you first send the command, then read the data into the buffer. We need an API at the mmc_bus level that doesn't care about that low-level detail. There are other things that the MMC bus should be doing however, such as switching to different clock speeds depending on which card is activated and how fast it can go. At least the following should be done: - The read method for mmc_bus and sdhci_pci should use a scatter-gather structure as a parameter instead of a single buffer - See if can be integrated into ExecuteCommand at sdhci level (it's essentially a command with an additional data phase) Change-Id: I688b6c694561074535c9c0c2545f06dc04b06e7d Reviewed-on: https://review.haiku-os.org/c/haiku/+/3466 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
dedbe94e |
|
17-Feb-2019 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
mmc: register devices for detected cards Change-Id: I90891ead9a425e0e8bd25c2190fe3d430d49411b Reviewed-on: https://review.haiku-os.org/c/haiku/+/1067 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
ff76d2df |
|
10-Feb-2019 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
sdhci and mmc implementation sdhci: - Add semaphore for interrupt management - Add basic operations (setting clock, executing a command) - Add early initialization (clocks and power up) - Wrap the bus in a C++ class to ease usage - Expose API to MMC bus manager - TODO: manage card insertion and removal interrupts - TODO: use MSI when available mmc_bus: - Implements SD card management independant of the way we access the bus (later on different drivers can provide the same API as SDHCI) - Worker thread to do the initialization - Implement card initialization process up until getting an RCA from the card. This is the generic part to assign an ID to the card, after this point commands can be targetted at the specific card so it can be handed over to the mmc_disk driver. - TODO: initialization for non-SDHC cards which do not reply to CMD8. Change-Id: I71950ca3ce206378a68fa7f97c19f638183d6cdd Reviewed-on: https://review.haiku-os.org/c/1032 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
25b6a6f1 |
|
28-Apr-2018 |
krish_iyer <krishnaniyer97@gmail.com> |
SDHCI MMC Driver 1. SDHCI PCI Bus: Discovering SDHC device from the PCI bus and registers a child node(MMC bus) to which slots are attached. SDHC registers are mapped by MMUIO, they are binded in a structure(struct* registers). A pin based interrupt handler is also installed, which triggers the handler function and interrupts are being taken care of. Added API's to set-up and the clock for SD/MMC card, change frequency and reset the registers. 2. Device Manager: Currently, busses subdir lists are har- dcoded and in order to load the driver. We hard coded the bus dir under PCI devices. 3. MMC Disk Driver: In order to register the slots under /dev/disk/mmc and hence data transfer and other operations can be done. 4. MMC Bus Manager: Setted up a bus manager to create an object to do a particular for eg certain data transfer and get freed until another operation is requested. Change-Id: I369354da6b79adc6b6dfb08fe160334af1392a34 Reviewed-on: https://review.haiku-os.org/318 Reviewed-by: Alexander von Gluck IV <kallisti5@unixzen.com>
|