#
5ec64c5c |
|
16-Jan-2021 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
sd/mmc: Cleanup and improve reliability Store the bus cookie in the mmc_disk driver and pass it to the bus manager when executing commands. This avoids calling into the device manager at each read and write operation. The code to get the cookie from mmc_disk isn't so nice since it needs to access the grandparent device (the mmc bus root), it would be simpler if this cookie would be available directly from mmc bus devices. We can get card removal and card insertion interrupt at the same time due to insufficient hardware debouncing (the SDHCI spec says we shouldn't, but it happens on Ricoh controllers. Can't blame them, they don't advertise themselves as compliant with the spec). So, check the card status from the interrupt handler and ignore the incorrect interrupts. Fix unreliable card initialization: power must be turned on before starting up the SD clock. Remove a now unneeded delay that was added in an attempt to avoid initial instability. Change-Id: Ibd8d051da1a1d859f3924ee535f4a05d9b6398d4 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3639 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>
|
#
e21a1abe |
|
13-Dec-2020 |
Adrien Destugues <adrien.destugues@opensource.viveris.fr> |
mmc: properly set DMA restrictions - The restrictions are now set by the sdhci bus and retrieved from there by the DMAResources. - Configure SDMA with the maximal available boundary check of 512K and publish the corresponding DMA restrictions. - dma_resource cannot be initialized implicitly as a member of mmc_disk_driver_info because mmc_disk_driver_info is allocated with malloc/free, not new/delete. So we now explicitly allocate and delete it. This allows reads and writes of more than a single block at a time. Change-Id: Ibb97c91543312c7970c28a7a8c68a12708263e32 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3505 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>
|
#
e4689893 |
|
19-Feb-2019 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
Initial work for the mmc_disk driver No read and write support for now. But we implement getting SD card capacity. SDHC is not supported yet (it uses a different layout for the CSD register which will be rejected by this version of the code) Change-Id: Ife844a62f3846c0a780259e9a3a08195e2fd965e Reviewed-on: https://review.haiku-os.org/c/haiku/+/1068 Reviewed-by: Jérôme Duval <jerome.duval@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>
|