Module Name:    src
Committed By:   ryo
Date:           Fri Jan  1 07:17:37 UTC 2021

Modified Files:
        src/sys/arch/arm/amlogic: mesongx_mmc.c

Log Message:
adapts to some register differences to add support "amlogic,meson-axg-mmc"


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/amlogic/mesongx_mmc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/amlogic/mesongx_mmc.c
diff -u src/sys/arch/arm/amlogic/mesongx_mmc.c:1.5 src/sys/arch/arm/amlogic/mesongx_mmc.c:1.6
--- src/sys/arch/arm/amlogic/mesongx_mmc.c:1.5	Sun Apr 21 13:08:48 2019
+++ src/sys/arch/arm/amlogic/mesongx_mmc.c	Fri Jan  1 07:17:36 2021
@@ -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 <jmcne...@invisible.ca>
@@ -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 @@ __KERNEL_RCSID(0, "$NetBSD: mesongx_mmc.
 #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 @@ __KERNEL_RCSID(0, "$NetBSD: mesongx_mmc.
 #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 @@ __KERNEL_RCSID(0, "$NetBSD: mesongx_mmc.
 #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 @@ struct mesongx_mmc_softc {
 
 	device_t		sc_sdmmc_dev;
 	uint32_t		sc_host_ocr;
+	int			sc_hwtype;
 
 	struct sdmmc_command	*sc_cmd;
 
@@ -257,8 +263,9 @@ CFATTACH_DECL_NEW(mesongx_mmc, sizeof(st
 	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 @@ mesongx_mmc_attach(device_t parent, devi
 	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 @@ mesongx_mmc_set_clock(struct mesongx_mmc
 		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;

Reply via email to