From 86fb107d7074915a8a0ee99b50665b051fe2d2e6 Mon Sep 17 00:00:00 2001 From: Andrey Gusakov Date: Thu, 13 Feb 2025 17:35:54 +0300 Subject: [PATCH] mass_storage: speed up MSD by increasing SCSI read/write buffer --- .../hw_layer/mass_storage/mass_storage_device.cpp | 3 ++- firmware/hw_layer/mass_storage/mass_storage_device.h | 2 +- firmware/hw_layer/mass_storage/mass_storage_init.cpp | 11 ++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/firmware/hw_layer/mass_storage/mass_storage_device.cpp b/firmware/hw_layer/mass_storage/mass_storage_device.cpp index d978caf1ad..e420895492 100644 --- a/firmware/hw_layer/mass_storage/mass_storage_device.cpp +++ b/firmware/hw_layer/mass_storage/mass_storage_device.cpp @@ -161,7 +161,7 @@ static const scsi_unit_serial_number_inquiry_response_t default_scsi_unit_serial }; void MassStorageController::attachLun(uint8_t lunIndex, - BaseBlockDevice *blkdev, uint8_t *blkbuf, + BaseBlockDevice *blkdev, uint8_t *blkbuf, size_t blkbufsize, const scsi_inquiry_response_t *inquiry, const scsi_unit_serial_number_inquiry_response_t *serialInquiry) { chibios_rt::MutexLocker lock(m_lunMutex); @@ -182,6 +182,7 @@ void MassStorageController::attachLun(uint8_t lunIndex, lun.config.unit_serial_number_inquiry_response = serialInquiry; } lun.config.blkbuf = blkbuf; + lun.config.blkbufsize = blkbufsize; lun.config.blkdev = blkdev; lun.config.transport = &m_scsiTransport; diff --git a/firmware/hw_layer/mass_storage/mass_storage_device.h b/firmware/hw_layer/mass_storage/mass_storage_device.h index 4de46db9f6..8ac8314072 100644 --- a/firmware/hw_layer/mass_storage/mass_storage_device.h +++ b/firmware/hw_layer/mass_storage/mass_storage_device.h @@ -16,7 +16,7 @@ class MassStorageController : public ThreadController { public: MassStorageController(USBDriver* usb); - void attachLun(uint8_t lunIndex, BaseBlockDevice *blkdev, uint8_t *blkbuf, + void attachLun(uint8_t lunIndex, BaseBlockDevice *blkdev, uint8_t *blkbuf, size_t blkbufsize, const scsi_inquiry_response_t *inquiry, const scsi_unit_serial_number_inquiry_response_t *serialInquiry); protected: diff --git a/firmware/hw_layer/mass_storage/mass_storage_init.cpp b/firmware/hw_layer/mass_storage/mass_storage_init.cpp index 8a218cd7a5..c7707deaac 100644 --- a/firmware/hw_layer/mass_storage/mass_storage_init.cpp +++ b/firmware/hw_layer/mass_storage/mass_storage_init.cpp @@ -43,7 +43,8 @@ // One block buffer per LUN static NO_CACHE uint8_t blkbuf0[MMCSD_BLOCK_SIZE]; -static NO_CACHE uint8_t blkbuf1[MMCSD_BLOCK_SIZE]; +// Speed-up SD card +static NO_CACHE uint8_t blkbuf1[4 * MMCSD_BLOCK_SIZE]; static MassStorageController msd(usb_driver); @@ -76,7 +77,7 @@ static const scsi_inquiry_response_t sdCardInquiry = { }; void attachMsdSdCard(BaseBlockDevice* blkdev) { - msd.attachLun(1, blkdev, blkbuf1, &sdCardInquiry, nullptr); + msd.attachLun(1, blkdev, blkbuf1, sizeof(blkbuf1), &sdCardInquiry, nullptr); #if EFI_TUNER_STUDIO // SD MSD attached, enable indicator in TS @@ -85,7 +86,7 @@ void attachMsdSdCard(BaseBlockDevice* blkdev) { } void deattachMsdSdCard(void) { - msd.attachLun(1, (BaseBlockDevice*)&ND1, blkbuf1, &sdCardInquiry, nullptr); + msd.attachLun(1, (BaseBlockDevice*)&ND1, blkbuf1, sizeof(blkbuf1), &sdCardInquiry, nullptr); #if EFI_TUNER_STUDIO // SD MSD attached, enable indicator in TS @@ -123,10 +124,10 @@ static BaseBlockDevice* getRamdiskDevice() { void initUsbMsd() { // Attach the ini ramdisk - msd.attachLun(0, getRamdiskDevice(), blkbuf0, &iniDriveInquiry, nullptr); + msd.attachLun(0, getRamdiskDevice(), blkbuf0, sizeof(blkbuf0), &iniDriveInquiry, nullptr); // attach a null device in place of the SD card for now - the SD thread may replace it later - msd.attachLun(1, (BaseBlockDevice*)&ND1, blkbuf1, &sdCardInquiry, nullptr); + msd.attachLun(1, (BaseBlockDevice*)&ND1, blkbuf1, sizeof(blkbuf1), &sdCardInquiry, nullptr); // start the mass storage thread msd.start();