PERFORCE change 106045 for review

Warner Losh imp at FreeBSD.org
Tue Sep 12 23:45:25 PDT 2006


http://perforce.freebsd.org/chv.cgi?CH=106045

Change 106045 by imp at imp_lighthouse on 2006/09/13 06:45:09

	checkpoint

Affected files ...

.. //depot/projects/arm/src/sys/arm/at91/at91_qdmmc.c#6 edit

Differences ...

==== //depot/projects/arm/src/sys/arm/at91/at91_qdmmc.c#6 (text+ko) ====

@@ -160,11 +160,88 @@
 	return (0);
 }
 
+#if 0
+static int
+at91_qdmmc_SDCard_GetOCR(device_t dev)
+{
+	struct at91_qdmmc_softc *sc = device_get_softc(dev);
+	uint32_t response = 0;
+
+	// The RCA to be used for CMD55 in Idle state shall be the card's
+	// default RCA=0x0000.
+	sc->cards[0].rca = 0;
+ 	while(!(response & AT91C_CARD_POWER_UP_BUSY)) {
+		response = at91_qdmmc_SDCard_SendAppCommand(dev,
+		    SDCARD_APP_OP_COND_CMD, AT91C_MMC_HOST_VOLTAGE_RANGE);
+		if (response != 0)
+			return (-1);
+		response = RD4(sc, MCI_RSPR);
+	}
+	
+	return (response);
+}
+#endif
+
 static int
 at91_qdmmc_sdcard_init(device_t dev)
 {
-	printf("No SD cards found\n");
+#if 0
+	struct at91_qdmmc_softc *sc = device_get_softc(dev);
+	unsigned int	tab_response[4];
+	unsigned int	mult,blocknr;
+
+	at91_qdmmc_SendCommand(dev, GO_IDLE_STATE_CMD, AT91C_NO_ARGUMENT);
+
+	if (at91_qdmmc_SDCard_GetOCR(dev) == -1)
+		return ENXIO;
+
+	f = pMCI_Device->pMCI_DeviceFeatures;
+	if (at91_qdmmc_SDCard_GetCID(tab_response) != 0)
+		return AT91C_INIT_ERROR;
+	f->Card_Inserted = AT91C_SD_CARD_INSERTED;
+	if (at91_qdmmc_SendCommand(SET_RELATIVE_ADDR_CMD, 0) != 0)
+		return AT91C_INIT_ERROR;
+	f->Relative_Card_Address = (AT91C_BASE_MCI->MCI_RSPR[0] >> 16);
+	if (at91_qdmmc_GetCSD(f->Relative_Card_Address,tab_response)
+	    != AT91C_CMD_SEND_OK)
+		return AT91C_INIT_ERROR;
+	f->READ_BL_LEN = (tab_response[1] >> CSD_1_RD_B_LEN_S) &
+	    CSD_1_RD_B_LEN_M;
+	f->WRITE_BL_LEN = (tab_response[3] >> CSD_3_WBLEN_S) &
+	    CSD_3_WBLEN_M;
+	f->Sector_Size = 1 + ((tab_response[2] >> CSD_2_v21_SECT_SIZE_S) &
+	    CSD_2_v21_SECT_SIZE_M);
+	f->Read_Partial = (tab_response[1] >> CSD_1_RD_B_PAR_S) &
+	    CSD_1_RD_B_PAR_M;
+	f->Write_Partial = (tab_response[3] >> CSD_3_WBLOCK_P_S) &
+	    CSD_3_WBLOCK_P_M;
+	f->Erase_Block_Enable = (tab_response[2] >> CSD_2_v21_ER_BLEN_EN_S) &
+	    CSD_2_v21_ER_BLEN_EN_M;
+	f->Read_Block_Misalignment = (tab_response[1] >> CSD_1_RD_B_MIS_S) &
+	    CSD_1_RD_B_MIS_M;
+	f->Write_Block_Misalignment = (tab_response[1] >> CSD_1_WR_B_MIS_S) &
+	    CSD_1_WR_B_MIS_M;
+	//// Compute Memory Capacity
+	// compute MULT
+	mult = 1 << ( ((tab_response[2] >> CSD_2_C_SIZE_M_S) &
+	    CSD_2_C_SIZE_M_M) + 2 );
+	// compute MSB of C_SIZE
+	blocknr = ((tab_response[1] >> CSD_1_CSIZE_H_S) &
+	    CSD_1_CSIZE_H_M) << 2;
+	// compute MULT * (LSB of C-SIZE + MSB already computed + 1) = BLOCKNR
+	blocknr = mult * ((blocknr + ((tab_response[2] >> CSD_2_CSIZE_L_S) &
+	    CSD_2_CSIZE_L_M)) + 1);
+	f->Memory_Capacity = (1 << f->READ_BL_LEN) * blocknr;
+	//// End of Compute Memory Capacity
+	if (at91_qdmmc_SDCard_SetBusWidth(pMCI_Device) != AT91C_CMD_SEND_OK)
+		return AT91C_INIT_ERROR;
+	if (at91_qdmmc_SetBlocklength(1 << f->READ_BL_LEN) != AT91C_CMD_SEND_OK)
+		return AT91C_INIT_ERROR;
+	printf("Found SD card %u bytes\n", f->Memory_Capacity);
+	return (0);
+#else
 	return (ENXIO);
+#endif
 }
 
 static int


More information about the p4-projects mailing list