Prechádzať zdrojové kódy

sdhci: simplify sdhci_get_fifolen()

Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
Message-Id: <20180208164818.7961-10-f4bug@amsat.org>
Philippe Mathieu-Daudé 7 rokov pred
rodič
commit
09b738ff65
2 zmenil súbory, kde vykonal 8 pridanie a 16 odobranie
  1. 3 1
      hw/sd/sdhci-internal.h
  2. 5 15
      hw/sd/sdhci.c

+ 3 - 1
hw/sd/sdhci-internal.h

@@ -24,6 +24,8 @@
 #ifndef SDHCI_INTERNAL_H
 #ifndef SDHCI_INTERNAL_H
 #define SDHCI_INTERNAL_H
 #define SDHCI_INTERNAL_H
 
 
+#include "hw/registerfields.h"
+
 /* R/W SDMA System Address register 0x0 */
 /* R/W SDMA System Address register 0x0 */
 #define SDHC_SYSAD                     0x00
 #define SDHC_SYSAD                     0x00
 
 
@@ -185,7 +187,7 @@
 #define SDHC_CAN_DO_ADMA2              0x00080000
 #define SDHC_CAN_DO_ADMA2              0x00080000
 #define SDHC_CAN_DO_ADMA1              0x00100000
 #define SDHC_CAN_DO_ADMA1              0x00100000
 #define SDHC_64_BIT_BUS_SUPPORT        (1 << 28)
 #define SDHC_64_BIT_BUS_SUPPORT        (1 << 28)
-#define SDHC_CAPAB_BLOCKSIZE(x)        (((x) >> 16) & 0x3)
+FIELD(SDHC_CAPAB, MAXBLOCKLENGTH,     16, 2);
 
 
 /* HWInit Maximum Current Capabilities Register 0x0 */
 /* HWInit Maximum Current Capabilities Register 0x0 */
 #define SDHC_MAXCURR                   0x48
 #define SDHC_MAXCURR                   0x48

+ 5 - 15
hw/sd/sdhci.c

@@ -58,6 +58,11 @@
  */
  */
 #define SDHC_CAPAB_REG_DEFAULT 0x057834b4
 #define SDHC_CAPAB_REG_DEFAULT 0x057834b4
 
 
+static inline unsigned int sdhci_get_fifolen(SDHCIState *s)
+{
+    return 1 << (9 + FIELD_EX32(s->capareg, SDHC_CAPAB, MAXBLOCKLENGTH));
+}
+
 static uint8_t sdhci_slotint(SDHCIState *s)
 static uint8_t sdhci_slotint(SDHCIState *s)
 {
 {
     return (s->norintsts & s->norintsigen) || (s->errintsts & s->errintsigen) ||
     return (s->norintsts & s->norintsigen) || (s->errintsts & s->errintsigen) ||
@@ -1118,21 +1123,6 @@ static const MemoryRegionOps sdhci_mmio_ops = {
     .endianness = DEVICE_LITTLE_ENDIAN,
     .endianness = DEVICE_LITTLE_ENDIAN,
 };
 };
 
 
-static inline unsigned int sdhci_get_fifolen(SDHCIState *s)
-{
-    switch (SDHC_CAPAB_BLOCKSIZE(s->capareg)) {
-    case 0:
-        return 512;
-    case 1:
-        return 1024;
-    case 2:
-        return 2048;
-    default:
-        hw_error("SDHC: unsupported value for maximum block size\n");
-        return 0;
-    }
-}
-
 static void sdhci_init_readonly_registers(SDHCIState *s, Error **errp)
 static void sdhci_init_readonly_registers(SDHCIState *s, Error **errp)
 {
 {
     if (s->sd_spec_version != 2) {
     if (s->sd_spec_version != 2) {