hw/sd: sd: Drop sd_crc16()
commite9d28020d267fc76aa261537c0114d4402d678da
authorBin Meng <bin.meng@windriver.com>
Sat, 23 Jan 2021 10:39:56 +0000 (23 18:39 +0800)
committerPhilippe Mathieu-Daudé <f4bug@amsat.org>
Sun, 24 Jan 2021 18:14:15 +0000 (24 19:14 +0100)
tree6845aa4bc3d289e6e3a49a06f79ec838a5c0b84e
parentdec6d33849f3589426c5a14dce264d5c6f86e85b
hw/sd: sd: Drop sd_crc16()

commit f6fb1f9b319f ("sdcard: Correct CRC16 offset in sd_function_switch()")
changed the 16-bit CRC to be stored at offset 64. In fact, this CRC
calculation is completely wrong. From the original codes, it wants
to calculate the CRC16 of the first 64 bytes of sd->data[], however
passing 64 as the `width` to sd_crc16() actually counts 256 bytes
starting from the `message` for the CRC16 calculation, which is not
what we want.

Besides that, it seems existing sd_crc16() algorithm does not match
the SD spec, which says CRC16 is the CCITT one but the calculation
does not produce expected result. It turns out the CRC16 was never
transferred outside the sd core, as in sd_read_byte() we see:

    if (sd->data_offset >= 64)
        sd->state = sd_transfer_state;

Given above reasons, let's drop it.

Signed-off-by: Bin Meng <bin.meng@windriver.com>
Tested-by: Pragnesh Patel <pragnesh.patel@sifive.com>
Reviewed-by: Pragnesh Patel <pragnesh.patel@sifive.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20210123104016.17485-6-bmeng.cn@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
hw/sd/sd.c