Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/amlogic adapts to some register differences to ...
details: https://anonhg.NetBSD.org/src/rev/0959d4c39f4a
branches: trunk
changeset: 1017581:0959d4c39f4a
user: ryo <ryo%NetBSD.org@localhost>
date: Fri Jan 01 07:17:36 2021 +0000
description:
adapts to some register differences to add support "amlogic,meson-axg-mmc"
diffstat:
sys/arch/arm/amlogic/mesongx_mmc.c | 32 ++++++++++++++++++++++----------
1 files changed, 22 insertions(+), 10 deletions(-)
diffs (95 lines):
diff -r 79a79a816b96 -r 0959d4c39f4a sys/arch/arm/amlogic/mesongx_mmc.c
--- a/sys/arch/arm/amlogic/mesongx_mmc.c Fri Jan 01 07:15:18 2021 +0000
+++ b/sys/arch/arm/amlogic/mesongx_mmc.c Fri Jan 01 07:17:36 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: mesongx_mmc.c,v 1.5 2019/04/21 13:08:48 jmcneill Exp $ */
+/* $NetBSD: mesongx_mmc.c,v 1.6 2021/01/01 07:17:36 ryo Exp $ */
/*-
* Copyright (c) 2019 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mesongx_mmc.c,v 1.5 2019/04/21 13:08:48 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mesongx_mmc.c,v 1.6 2021/01/01 07:17:36 ryo Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -45,10 +45,14 @@
#include <dev/fdt/fdtvar.h>
#define SD_EMMC_CLOCK 0x00
-#define CLOCK_CFG_IRQ_SDIO_SLEEP __BIT(25)
-#define CLOCK_CFG_ALWAYS_ON __BIT(24)
-#define CLOCK_CFG_RX_DELAY __BITS(23,20)
-#define CLOCK_CFG_TX_DELAY __BITS(19,16)
+#define CLOCK_CFG_V2_IRQ_SDIO_SLEEP __BIT(25)
+#define CLOCK_CFG_V2_ALWAYS_ON __BIT(24)
+#define CLOCK_CFG_V2_RX_DELAY __BITS(23,20)
+#define CLOCK_CFG_V2_TX_DELAY __BITS(19,16)
+#define CLOCK_CFG_V3_IRQ_SDIO_SLEEP __BIT(29)
+#define CLOCK_CFG_V3_ALWAYS_ON __BIT(28)
+#define CLOCK_CFG_V3_RX_DELAY __BITS(27,22)
+#define CLOCK_CFG_V3_TX_DELAY __BITS(21,16)
#define CLOCK_CFG_SRAM_PD __BITS(15,14)
#define CLOCK_CFG_RX_PHASE __BITS(13,12)
#define CLOCK_CFG_TX_PHASE __BITS(11,10)
@@ -56,7 +60,7 @@
#define CLOCK_CFG_SRC __BITS(7,6)
#define CLOCK_CFG_DIV __BITS(5,0)
#define SD_EMMC_DELAY 0x04
-#define SD_EMMC_ADJUST 0x08
+#define SD_EMMC_ADJUST 0x08 /* V2 */
#define ADJUST_ADJ_DELAY __BITS(21,16)
#define ADJUST_CALI_RISE __BIT(14)
#define ADJUST_ADJ_ENABLE __BIT(13)
@@ -66,6 +70,7 @@
#define CALOUT_CALI_SETUP __BITS(15,8)
#define CALOUT_CALI_VLD __BIT(7)
#define CALOUT_CALI_IDX __BITS(5,0)
+#define SD_EMMC_V3_ADJUST 0x0c
#define SD_EMMC_START 0x40
#define START_DESC_ADDR __BITS(31,2)
#define START_DESC_BUSY __BIT(1)
@@ -214,6 +219,7 @@
device_t sc_sdmmc_dev;
uint32_t sc_host_ocr;
+ int sc_hwtype;
struct sdmmc_command *sc_cmd;
@@ -257,8 +263,9 @@
bus_space_read_4((sc)->sc_bst, (sc)->sc_bsh, (reg))
static const struct of_compat_data compat_data[] = {
- { "amlogic,meson-gx-mmc", 1 },
- { "amlogic,meson-gxbb-mmc", 1 },
+ { "amlogic,meson-gx-mmc", 2 },
+ { "amlogic,meson-gxbb-mmc", 2 },
+ { "amlogic,meson-axg-mmc", 3 },
{ NULL }
};
@@ -280,6 +287,8 @@
bus_addr_t addr;
bus_size_t size;
+ sc->sc_hwtype = (int)of_search_compatible(phandle, compat_data)->data;
+
if (fdtbus_get_reg(phandle, 0, &addr, &size) != 0) {
aprint_error(": couldn't get registers\n");
return;
@@ -483,7 +492,10 @@
return ERANGE;
val = MMC_READ(sc, SD_EMMC_CLOCK);
- val |= CLOCK_CFG_ALWAYS_ON;
+ if (sc->sc_hwtype == 3)
+ val |= CLOCK_CFG_V3_ALWAYS_ON;
+ else
+ val |= CLOCK_CFG_V2_ALWAYS_ON;
val &= ~CLOCK_CFG_RX_PHASE;
val |= __SHIFTIN(0, CLOCK_CFG_RX_PHASE);
val &= ~CLOCK_CFG_TX_PHASE;
Home |
Main Index |
Thread Index |
Old Index