PERFORCE change 105864 for review
Warner Losh
imp at FreeBSD.org
Sat Sep 9 00:03:24 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=105864
Change 105864 by imp at imp_lighthouse on 2006/09/09 00:03:09
Fix mmc support, to the extent that it compiles again. This costs
1100 bytes, so keep it disabled.
Save a few bytes with better math.
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/mci_device.c#9 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/mci_device.c#9 (text+ko) ====
@@ -48,6 +48,8 @@
#include "lib.h"
+#define MMC_SUPPORT 0
+
//*----------------------------------------------------------------------------
//* \fn AT91F_MCI_SendCommand
//* \brief Generic function to send a command to the MMC or SDCard
@@ -71,8 +73,10 @@
// Test error ==> if crc error and response R3 ==> don't check error
error = (AT91C_BASE_MCI->MCI_SR) & AT91C_MCI_SR_ERROR;
if (error != 0 ) {
- // if the command is SEND_OP_COND the CRC error flag is always present (cf : R3 response)
- if ( (Cmd != AT91C_SDCARD_APP_OP_COND_CMD) && (Cmd != AT91C_MMC_SEND_OP_COND_CMD) )
+ // if the command is SEND_OP_COND the CRC error flag is
+ // always present (cf : R3 response)
+ if ((Cmd != AT91C_SDCARD_APP_OP_COND_CMD) &&
+ (Cmd != AT91C_MMC_SEND_OP_COND_CMD))
return ((AT91C_BASE_MCI->MCI_SR) & AT91C_MCI_SR_ERROR);
if (error != AT91C_MCI_RCRCE)
return ((AT91C_BASE_MCI->MCI_SR) & AT91C_MCI_SR_ERROR);
@@ -175,8 +179,7 @@
if ((AT91F_MCI_GetStatus(
- pMCI_Device->pMCI_DeviceFeatures->Relative_Card_Address) & AT91C_SR_READY_FOR_DATA) !=
- AT91C_SR_READY_FOR_DATA) {
+ pMCI_Device->pMCI_DeviceFeatures->Relative_Card_Address) & AT91C_SR_READY_FOR_DATA) == 0) {
#if IMP_DEBUG
printf("2\n");
#endif
@@ -219,10 +222,7 @@
// Init Mode Register
AT91C_BASE_MCI->MCI_MR |= ((sectorLength << 16) | AT91C_MCI_PDCMODE);
- if (sizeToRead %4)
- sizeToRead = (sizeToRead /4)+1;
- else
- sizeToRead = sizeToRead/4;
+ sizeToRead = (sizeToRead + 3) / 4;
AT91C_BASE_PDC_MCI->PDC_PTCR = (AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS);
AT91C_BASE_PDC_MCI->PDC_RPR = (unsigned int)dataBuffer;
@@ -242,7 +242,7 @@
return AT91C_READ_OK;
}
-#if 0
+#if MMC_SUPPORT
//*----------------------------------------------------------------------------
//* \fn AT91F_MCI_WriteBlock
//* \brief Write an ENTIRE block but not always PARTIAL block !!!
@@ -254,14 +254,14 @@
unsigned int *dataBuffer,
int sizeToWrite )
{
- unsigned log2sl = MCI_Device.pMCI_DeviceFeatures->WRITE_BL_LEN;
+ unsigned log2sl = pMCI_Device->pMCI_DeviceFeatures->WRITE_BL_LEN;
unsigned sectorLength = 1 << log2sl;
///////////////////////////////////////////////////////////////////////
if( pMCI_Device->pMCI_DeviceDesc->state != AT91C_MCI_IDLE)
return AT91C_WRITE_ERROR;
- if( (AT91F_MCI_GetStatus(pMCI_Device->pMCI_DeviceFeatures->Relative_Card_Address) & AT91C_SR_READY_FOR_DATA) != AT91C_SR_READY_FOR_DATA)
+ if( (AT91F_MCI_GetStatus(pMCI_Device->pMCI_DeviceFeatures->Relative_Card_Address) & AT91C_SR_READY_FOR_DATA) == 0)
return AT91C_WRITE_ERROR;
if ((dest + sizeToWrite) > pMCI_Device->pMCI_DeviceFeatures->Memory_Capacity)
@@ -281,12 +281,9 @@
///////////////////////////////////////////////////////////////////////
// Init Mode Register
- AT91C_BASE_MCI->MCI_MR |= ((pMCI_Device->pMCI_DeviceFeatures->Max_Write_DataBlock_Length << 16) | AT91C_MCI_PDCMODE);
-
- if (sizeToWrite %4)
- sizeToWrite = (sizeToWrite /4)+1;
- else
- sizeToWrite = sizeToWrite/4;
+ AT91C_BASE_MCI->MCI_MR |= ((1 << pMCI_Device->pMCI_DeviceFeatures->WRITE_BL_LEN) << 16) | AT91C_MCI_PDCMODE;
+
+ sizeToWrite = (sizeToWrite + 3) / 4;
// Init PDC for write sequence
AT91C_BASE_PDC_MCI->PDC_PTCR = (AT91C_PDC_TXTDIS | AT91C_PDC_RXTDIS);
@@ -372,7 +369,7 @@
return( AT91F_MCI_SendCommand(AT91C_SET_BLOCKLEN_CMD, length) );
}
-#if 0
+#if MMC_SUPPORT
//*----------------------------------------------------------------------------
//* \fn AT91F_MCI_MMC_GetAllOCR
//* \brief Asks to all cards to send their operations conditions
@@ -456,25 +453,25 @@
continue;
}
printf("Response is %x %x %x %x\n", tab_response[0],
- tab_response[1], tab_response[2], tab_response[3])
- f->READ_BL_LEN = ((tab_response[2] >> CSD__RD_B_LEN_S) & CSD__RD_B_LEN_M);
- f->WRITE_BL_LEN = ((tab_response[3] >> CSD__WBLEN_S) & CSD__WBLEN_M );
- f->Sector_Size = 1 + ((tab_response[2] >> CSD__v22_SECT_SIZE_S) & CSD__v22_SECT_SIZE_M );
- f->Read_Partial = (tab_response[2] >> CSD__RD_B_PAR_S) & CSD__RD_B_PAR_M;
- f->Write_Partial = (tab_response[3] >> CSD__WBLOCK_P_S) & CSD__WBLOCK_P_M;
+ tab_response[1], tab_response[2], tab_response[3]);
+ 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_v22_SECT_SIZE_S) & CSD_2_v22_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;
// None in MMC specification version 2.2
f->Erase_Block_Enable = 0;
- f->Read_Block_Misalignment = (tab_response[2] >> CSD__RD_B_MIS_S) & CSD__RD_B_MIS_M;
- f->Write_Block_Misalignment = (tab_response[2] >> CSD__WR_B_MIS_S) & CSD__WR_B_MIS_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__C_SIZE_M_S) & CSD__C_SIZE_M_M) + 2 );
+ 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__CSIZE_H_S) & CSD__CSIZE_H_M) << 2;
+ 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__CSIZE_L_S) & CSD__CSIZE_L_M) ) + 1 );
+ 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
}
More information about the p4-projects
mailing list