Port-arm archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Using MMC on HoneyComb LX2 (patch)



The SolidRun HoneyComb LX2 has a 64 GB MMC built in.  NetBSD did not
attach the MMC until I patched sdhc@acpi.  See attachment.  Maybe
somebody else can try it out.  Does it look ok to apply?

David

-- 
David Young
dyoung%pobox.com@localhost    Urbana, IL    (217) 721-9981
Index: sys/dev/acpi/sdhc_acpi.c
===================================================================
RCS file: /cvsroot/src/sys/dev/acpi/sdhc_acpi.c,v
retrieving revision 1.20
diff -u -p -r1.20 sdhc_acpi.c
--- sys/dev/acpi/sdhc_acpi.c	6 Feb 2022 15:52:20 -0000	1.20
+++ sys/dev/acpi/sdhc_acpi.c	27 Mar 2024 01:23:34 -0000
@@ -104,7 +104,8 @@ static const struct sdhc_acpi_slot {
 	{ .hid = "NXP0003",  .uid = "0", .type = SLOT_TYPE_SD,
 					 .flags = SDHC_ESDHC_FLAGS },
 	{ .hid = "NXP0003",  .uid = "1", .type = SLOT_TYPE_EMMC,
-					 .flags = SDHC_ESDHC_FLAGS },
+					 .flags = SDHC_ESDHC_FLAGS |
+						  SDHC_FLAG_ALWAYS_PRESENT },
 	{ .hid = "RKCP0D40",		 .type = SLOT_TYPE_SD,
 					 .flags = SDHC_FLAG_32BIT_ACCESS |
 						  SDHC_FLAG_8BIT_MODE |
@@ -153,6 +154,13 @@ sdhc_acpi_match(device_t parent, cfdata_
 	return sdhc_acpi_find_slot(aa->aa_node->ad_devinfo) != NULL;
 }
 
+static int
+sdhc_acpi_card_detect_always(struct sdhc_softc *sc)
+{
+	(void)sc;
+	return 1;
+}
+
 static void
 sdhc_acpi_attach(device_t parent, device_t self, void *opaque)
 {
@@ -174,8 +182,10 @@ sdhc_acpi_attach(device_t parent, device
 	sc->sc_handle = aa->aa_node->ad_handle;
 
 	slot = sdhc_acpi_find_slot(aa->aa_node->ad_devinfo);
-	if (slot->type == SLOT_TYPE_EMMC)
+	if (slot != NULL && slot->type == SLOT_TYPE_EMMC)
 		sc->sc.sc_vendor_hw_reset = sdhc_acpi_intel_emmc_hw_reset;
+	if (slot != NULL && ISSET(slot->flags, SDHC_FLAG_ALWAYS_PRESENT))
+		sc->sc.sc_vendor_card_detect = sdhc_acpi_card_detect_always;
 
 	rv = acpi_dsm_query(sc->sc_handle, sdhc_acpi_rockchip_dsm_uuid, 
 	    ROCKCHIP_DSM_REV, &funcs);
Index: sys/dev/sdmmc/sdhcvar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/sdmmc/sdhcvar.h,v
retrieving revision 1.34
diff -u -p -r1.34 sdhcvar.h
--- sys/dev/sdmmc/sdhcvar.h	20 Jan 2024 00:22:11 -0000	1.34
+++ sys/dev/sdmmc/sdhcvar.h	27 Mar 2024 01:23:34 -0000
@@ -52,6 +52,10 @@ struct sdhc_softc {
 #define	SDHC_FLAG_NO_HS_BIT	0x00002000 /* Don't set SDHC_HIGH_SPEED bit */
 #define	SDHC_FLAG_EXTERNAL_DMA	0x00004000
 #define	SDHC_FLAG_EXTDMA_DMAEN	0x00008000 /* ext. dma need SDHC_DMA_ENABLE */
+#define	SDHC_FLAG_ALWAYS_PRESENT \
+				0x00010000 /* slot has no card detect, behave
+					    * as if a card is always present
+					    */
 #define	SDHC_FLAG_NO_CLKBASE	0x00020000 /* ignore clkbase register */
 #define	SDHC_FLAG_SINGLE_POWER_WRITE 0x00040000
 #define	SDHC_FLAG_NO_TIMEOUT	0x00080000 /* ignore timeout interrupts */
@@ -66,6 +70,7 @@ struct sdhc_softc {
 						   * Can't 64K Byte data transfer
 						   */
 #define	SDHC_FLAG_NO_1_8_V	0x08000000 /* No 1.8V supply */
+
 #define	SDHC_FLAG_BROKEN_ADMA	0x10000000 /* ADMA engine does not work */
 
 	uint32_t		sc_clkbase;


Home | Main Index | Thread Index | Old Index