From 2b1ecbe87da757ddb12e38239773a05f816d03ae Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 18 Jun 2022 20:31:49 +0000 Subject: imx8/usdhc: work around broken multi-write for now for unknown reasons, multiwrite is busted in usdhc: sdhc: write error intr 10 stat ff88858e usdhccmd: need to reset Datinhibit intr 10 stat ff88858e usdhc: cmd 193a0027 arg 1e5b6b error intr 18010 stat ff88858f i'm disabling it for now, adding a flag to the SDio struct. --- sys/src/9/port/sd.h | 1 + sys/src/9/port/sdmmc.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'sys/src/9/port') diff --git a/sys/src/9/port/sd.h b/sys/src/9/port/sd.h index e4c567a17..0ef5dab33 100644 --- a/sys/src/9/port/sd.h +++ b/sys/src/9/port/sd.h @@ -162,6 +162,7 @@ struct SDio { void (*iosetup)(int, void*, int, int); void (*io)(int, uchar*, int); char highspeed; + char nomultiwrite; /* quirk for usdhc */ }; extern SDio sdio; diff --git a/sys/src/9/port/sdmmc.c b/sys/src/9/port/sdmmc.c index 34dbd046e..d7bd02d97 100644 --- a/sys/src/9/port/sdmmc.c +++ b/sys/src/9/port/sdmmc.c @@ -332,7 +332,7 @@ mmcbio(SDunit *unit, int lun, int write, void *data, long nb, uvlong bno) error(Echange); buf = data; len = unit->secsize; - if(Multiblock){ + if(Multiblock && (!write || !io->nomultiwrite)){ b = bno; tries = 0; while(waserror()) -- cgit v1.2.3