#
ad398477 |
|
22-Apr-2022 |
Adrien Destugues <adrien.destugues@opensource.viveris.fr> |
Enable some more Werror and fix compiler warnings - All servers are now Werror - All bus_managers are now Werror - All input_server add-ons are now Werror - Some more things in bin/ are Werror Only tested on x86_64, I'll let the buildbot test on x86_gcc2 and RISC-V Change-Id: I5ec86512eac729c862828a45d8431f85c4ec422b Reviewed-on: https://review.haiku-os.org/c/haiku/+/5226 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
2028d638 |
|
17-Jan-2021 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
mmc_disk: implement B_TRIM_DEVICE Change-Id: Ib08a1e196441f35550fe221b912332b4803a04b4 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3641 Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
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>
|
#
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>
|
#
cc2642c1 |
|
23-Dec-2018 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
sdhci/mmc: add to the image. Change-Id: Ic43965efea2c62b6e731c7552e4f27d6d20fc26b Reviewed-on: https://review.haiku-os.org/c/haiku/+/448 Reviewed-by: Stephan Aßmus <superstippi@gmx.de>
|
#
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>
|
#
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>
|
#
62eaf4c0 |
|
26-Jul-2020 |
Adrien Destugues <adrien.destugues@opensource.viveris.fr> |
mmc_bus: add execute_command function For now it just forwards the command to the SDHCI controller. The bus will gain more features and functions as work advances (tracking which card is active, arbitration of DMA transfers, etc). Change-Id: I094eb84f27e7789387a3f8fb65fba1e5fcfa3e8a Reviewed-on: https://review.haiku-os.org/c/haiku/+/3094 Reviewed-by: waddlesplash <waddlesplash@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>
|