summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm
diff options
context:
space:
mode:
authorTomasz Moń <desowin@gmail.com>2021-06-07 12:48:44 +0200
committerTomasz Moń <desowin@gmail.com>2021-06-09 10:09:50 +0000
commit7f3d0ce814ef2f4edf5128f3a2970f3673b9353b (patch)
treecf29a6e52589330652a703dbb482a2c9e83dbb2a /firmware/target/arm
parent41ced369f6f3766d45da149cee2261a7e1321247 (diff)
downloadrockbox-7f3d0ce814ef2f4edf5128f3a2970f3673b9353b.tar.gz
rockbox-7f3d0ce814ef2f4edf5128f3a2970f3673b9353b.tar.bz2
rockbox-7f3d0ce814ef2f4edf5128f3a2970f3673b9353b.zip
DM320: Fix SDHC response format 2 handling
Return complete R2 response to caller. Due to incorrect bitfield handling only bits [127-96] were ever returned to caller. Change-Id: I83726af35fb24a8051fcca8b8d019ad89d17500e
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/tms320dm320/sdmmc-dm320.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/firmware/target/arm/tms320dm320/sdmmc-dm320.c b/firmware/target/arm/tms320dm320/sdmmc-dm320.c
index f479b54a91..fdc3e041a0 100644
--- a/firmware/target/arm/tms320dm320/sdmmc-dm320.c
+++ b/firmware/target/arm/tms320dm320/sdmmc-dm320.c
@@ -71,6 +71,7 @@
#define BLOCKS_PER_BANK 0x7A7800
/* command flags for send_cmd */
+#define SDHC_RESP_FMT_MASK 0x0600
#define SDHC_RESP_FMT_NONE 0x0000
#define SDHC_RESP_FMT_1 0x0200
#define SDHC_RESP_FMT_2 0x0400
@@ -306,16 +307,23 @@ static int sd_command(int cmd, unsigned long arg,
{
/* discard response */
}
- else if ((cmdat & SDHC_RESP_FMT_1) || (cmdat & SDHC_RESP_FMT_3))
- {
- response[0] = (IO_MMC_RESPONSE7 << 16) | IO_MMC_RESPONSE6;
- }
- else if (cmdat & SDHC_RESP_FMT_2)
+ else
{
- response[0] = (IO_MMC_RESPONSE7 << 16) | IO_MMC_RESPONSE6;
- response[1] = (IO_MMC_RESPONSE5 << 16) | IO_MMC_RESPONSE4;
- response[2] = (IO_MMC_RESPONSE3 << 16) | IO_MMC_RESPONSE2;
- response[3] = (IO_MMC_RESPONSE1 << 16) | IO_MMC_RESPONSE0;
+ switch (cmdat & SDHC_RESP_FMT_MASK)
+ {
+ case SDHC_RESP_FMT_1:
+ case SDHC_RESP_FMT_3:
+ response[0] = (IO_MMC_RESPONSE7 << 16) | IO_MMC_RESPONSE6;
+ break;
+ case SDHC_RESP_FMT_2:
+ response[0] = (IO_MMC_RESPONSE7 << 16) | IO_MMC_RESPONSE6;
+ response[1] = (IO_MMC_RESPONSE5 << 16) | IO_MMC_RESPONSE4;
+ response[2] = (IO_MMC_RESPONSE3 << 16) | IO_MMC_RESPONSE2;
+ response[3] = (IO_MMC_RESPONSE1 << 16) | IO_MMC_RESPONSE0;
+ break;
+ default:
+ break;
+ }
}
return 0;