PERFORCE change 104734 for review
Warner Losh
imp at FreeBSD.org
Mon Aug 21 22:10:00 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=104734
Change 104734 by imp at imp_lighthouse on 2006/08/21 22:09:57
Fix block length calculations to be consistant.
implement %d == %u for printf. lame but useful.
nits
we're now to 'not ufs'! progress
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/boot2/boot2.c#7 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/mci_device.c#7 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/mci_device.h#5 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/printf.c#4 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/sd-card.c#5 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/boot2/boot2.c#7 (text+ko) ====
@@ -160,7 +160,7 @@
s = cmd;
for (;;) {
- switch (c = getc(0)) {
+ switch (c = getc(10000)) {
case 0:
break;
case '\177':
@@ -188,6 +188,9 @@
int autoboot;
ino_t ino;
+ if (kname[0])
+ printf("bss not zero\r\n");
+
EMAC_Init();
sdcard_init();
EMAC_SetMACAddress(mac);
@@ -218,10 +221,8 @@
"boot: ", kname);
if (!autoboot || getc(5) == -1)
getstr();
- else if (!autoboot || !OPT_CHECK(RBX_QUIET)) {
- xputchar('\r');
+ else if (!autoboot || !OPT_CHECK(RBX_QUIET))
xputchar('\n');
- }
autoboot = 0;
if (parse())
xputchar('\a');
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/mci_device.c#7 (text+ko) ====
@@ -162,6 +162,9 @@
unsigned int *dataBuffer,
int sizeToRead)
{
+ unsigned log2sl = pMCI_Device->pMCI_DeviceFeatures->READ_BL_LEN;
+ unsigned sectorLength = 1 << log2sl;
+
///////////////////////////////////////////////////////////////////////
if (pMCI_Device->pMCI_DeviceDesc->state != AT91C_MCI_IDLE) {
#if IMP_DEBUG
@@ -188,7 +191,7 @@
}
// If source does not fit a begin of a block
- if ((src & ((1 << pMCI_Device->pMCI_DeviceFeatures->READ_BL_LEN) - 1)) != 0) {
+ if ((src & (sectorLength - 1)) != 0) {
#if IMP_DEBUG
printf("4\r\n");
#endif
@@ -197,7 +200,7 @@
// Test if the MMC supports Partial Read Block
// ALWAYS SUPPORTED IN SD Memory Card
- if( (sizeToRead < pMCI_Device->pMCI_DeviceFeatures->Max_Read_DataBlock_Length)
+ if( (sizeToRead < sectorLength)
&& (pMCI_Device->pMCI_DeviceFeatures->Read_Partial == 0x00) ) {
#if IMP_DEBUG
printf("5\r\n");
@@ -205,7 +208,7 @@
return AT91C_READ_ERROR;
}
- if( sizeToRead > pMCI_Device->pMCI_DeviceFeatures->Max_Read_DataBlock_Length) {
+ if( sizeToRead > sectorLength) {
#if IMP_DEBUG
printf("6\r\n");
#endif
@@ -214,7 +217,7 @@
///////////////////////////////////////////////////////////////////////
// Init Mode Register
- AT91C_BASE_MCI->MCI_MR |= ((pMCI_Device->pMCI_DeviceFeatures->Max_Read_DataBlock_Length << 16) | AT91C_MCI_PDCMODE);
+ AT91C_BASE_MCI->MCI_MR |= ((sectorLength << 16) | AT91C_MCI_PDCMODE);
if (sizeToRead %4)
sizeToRead = (sizeToRead /4)+1;
@@ -251,6 +254,9 @@
unsigned int *dataBuffer,
int sizeToWrite )
{
+ unsigned log2sl = MCI_Device.pMCI_DeviceFeatures->WRITE_BL_LEN;
+ unsigned sectorLength = 1 << log2sl;
+
///////////////////////////////////////////////////////////////////////
if( pMCI_Device->pMCI_DeviceDesc->state != AT91C_MCI_IDLE)
return AT91C_WRITE_ERROR;
@@ -262,15 +268,15 @@
return AT91C_WRITE_ERROR;
// If source does not fit a begin of a block
- if ( (dest % pMCI_Device->pMCI_DeviceFeatures->Max_Read_DataBlock_Length) != 0 )
+ if ( dest % sectorLength != 0 )
return AT91C_WRITE_ERROR;
// Test if the MMC supports Partial Write Block
- if( (sizeToWrite < pMCI_Device->pMCI_DeviceFeatures->Max_Write_DataBlock_Length)
- && (pMCI_Device->pMCI_DeviceFeatures->Write_Partial == 0x00) )
+ if ((sizeToWrite < sectorLength)
+ && (pMCI_Device->pMCI_DeviceFeatures->Write_Partial == 0x00))
return AT91C_WRITE_ERROR;
- if( sizeToWrite > pMCI_Device->pMCI_DeviceFeatures->Max_Write_DataBlock_Length )
+ if (sizeToWrite > sectorLength)
return AT91C_WRITE_ERROR;
///////////////////////////////////////////////////////////////////////
@@ -449,27 +455,27 @@
f->Relative_Card_Address = 0;
continue;
}
- f->READ_BL_LEN = ((tab_response[1] >> AT91C_CSD_RD_B_LEN_S) & AT91C_CSD_RD_B_LEN_M);
- f->WRITE_BL_LEN = ((tab_response[3] >> AT91C_CSD_WBLEN_S) & AT91C_CSD_WBLEN_M );
- f->Max_Read_DataBlock_Length = 1 << f->READ_BL_LEN;
- f->Max_Write_DataBlock_Length = 1 << f->WRITE_BL_LEN;
- f->Sector_Size = 1 + ((tab_response[2] >> AT91C_CSD_v22_SECT_SIZE_S) & AT91C_CSD_v22_SECT_SIZE_M );
- f->Read_Partial = (tab_response[1] >> AT91C_CSD_RD_B_PAR_S) & AT91C_CSD_RD_B_PAR_M;
- f->Write_Partial = (tab_response[3] >> AT91C_CSD_WBLOCK_P_S) & AT91C_CSD_WBLOCK_P_M;
+ printf("Response is %x %x %x %x\r\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;
// None in MMC specification version 2.2
f->Erase_Block_Enable = 0;
- f->Read_Block_Misalignment = (tab_response[1] >> AT91C_CSD_RD_B_MIS_S) & AT91C_CSD_RD_B_MIS_M;
- f->Write_Block_Misalignment = (tab_response[1] >> AT91C_CSD_WR_B_MIS_S) & AT91C_CSD_WR_B_MIS_M;
+ 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;
//// Compute Memory Capacity
// compute MULT
- mult = 1 << ( ((tab_response[2] >> AT91C_CSD_C_SIZE_M_S) & AT91C_CSD_C_SIZE_M_M) + 2 );
+ mult = 1 << ( ((tab_response[2] >> CSD__C_SIZE_M_S) & CSD__C_SIZE_M_M) + 2 );
// compute MSB of C_SIZE
- blocknr = ((tab_response[1] >> AT91C_CSD_CSIZE_H_S) & AT91C_CSD_CSIZE_H_M) << 2;
+ blocknr = ((tab_response[1] >> CSD__CSIZE_H_S) & CSD__CSIZE_H_M) << 2;
// compute MULT * (LSB of C-SIZE + MSB already computed + 1) = BLOCKNR
- blocknr = mult * ( ( blocknr + ( (tab_response[2] >> AT91C_CSD_CSIZE_L_S) & AT91C_CSD_CSIZE_L_M) ) + 1 );
- f->Memory_Capacity = f->Max_Read_DataBlock_Length * blocknr;
+ blocknr = mult * ( ( blocknr + ( (tab_response[2] >> CSD__CSIZE_L_S) & CSD__CSIZE_L_M) ) + 1 );
+ f->Memory_Capacity = (1 << f->READ_BL_LEN) * blocknr;
//// End of Compute Memory Capacity
}
// XXX warner hacked this
@@ -577,40 +583,41 @@
if (AT91F_MCI_GetCSD(f->Relative_Card_Address,tab_response)
!= AT91C_CMD_SEND_OK)
return AT91C_INIT_ERROR;
- f->READ_BL_LEN = 1 << ((tab_response[1] >> AT91C_CSD_RD_B_LEN_S) &
- AT91C_CSD_RD_B_LEN_M);
- f->WRITE_BL_LEN = 1 << ((tab_response[3] >> AT91C_CSD_WBLEN_S) &
- AT91C_CSD_WBLEN_M);
- f->Max_Read_DataBlock_Length = 1 << f->READ_BL_LEN;
- f->Max_Write_DataBlock_Length = 1 << f->WRITE_BL_LEN;
- f->Sector_Size = 1 + ((tab_response[2] >> AT91C_CSD_v21_SECT_SIZE_S) &
- AT91C_CSD_v21_SECT_SIZE_M);
- f->Read_Partial = (tab_response[1] >> AT91C_CSD_RD_B_PAR_S) &
- AT91C_CSD_RD_B_PAR_M;
- f->Write_Partial = (tab_response[3] >> AT91C_CSD_WBLOCK_P_S) &
- AT91C_CSD_WBLOCK_P_M;
- f->Erase_Block_Enable = (tab_response[3] >> AT91C_CSD_v21_ER_BLEN_EN_S) &
- AT91C_CSD_v21_ER_BLEN_EN_M;
- f->Read_Block_Misalignment = (tab_response[1] >> AT91C_CSD_RD_B_MIS_S) &
- AT91C_CSD_RD_B_MIS_M;
- f->Write_Block_Misalignment = (tab_response[1] >> AT91C_CSD_WR_B_MIS_S) &
- AT91C_CSD_WR_B_MIS_M;
+ printf("Response is %x %x %x %x\r\n", tab_response[0],
+ 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_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] >> AT91C_CSD_C_SIZE_M_S) &
- AT91C_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] >> AT91C_CSD_CSIZE_H_S) &
- AT91C_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] >> AT91C_CSD_CSIZE_L_S) &
- AT91C_CSD_CSIZE_L_M)) + 1);
- f->Memory_Capacity = f->Max_Read_DataBlock_Length * 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 (AT91F_MCI_SDCard_SetBusWidth(pMCI_Device) != AT91C_CMD_SEND_OK)
return AT91C_INIT_ERROR;
- if (AT91F_MCI_SetBlocklength(f->Max_Read_DataBlock_Length) !=
- AT91C_CMD_SEND_OK)
+ if (AT91F_MCI_SetBlocklength(1 << f->READ_BL_LEN) != AT91C_CMD_SEND_OK)
return AT91C_INIT_ERROR;
+ printf("Found SD card %u bytes in size %u %u\r\n", f->Memory_Capacity,
+ blocknr, mult);
return AT91C_INIT_OK;
}
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/mci_device.h#5 (text+ko) ====
@@ -99,8 +99,6 @@
unsigned int Relative_Card_Address; // RCA
unsigned int READ_BL_LEN;
unsigned int WRITE_BL_LEN;
- unsigned int Max_Read_DataBlock_Length; // 2^(READ_BL_LEN) in CSD
- unsigned int Max_Write_DataBlock_Length; // 2^(WRITE_BL_LEN) in CSD
unsigned char Read_Partial; // READ_BL_PARTIAL
unsigned char Write_Partial; // WRITE_BL_PARTIAL
unsigned char Erase_Block_Enable; // ERASE_BLK_EN
@@ -308,99 +306,99 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////
// MMC CSD register header File
-// AT91C_CSD_xxx_S for shift value
-// AT91C_CSD_xxx_M for mask value
+// CSD_x_xxx_S for shift value for word x
+// CSD_x_xxx_M for mask value for word x
/////////////////////////////////////////////////////////////////////////////////////////////////////
// First Response INT <=> CSD[3] : bits 0 to 31
-#define AT91C_CSD_BIT0_S 0 // [0:0]
-#define AT91C_CSD_BIT0_M 0x01
-#define AT91C_CSD_CRC_S 1 // [7:1]
-#define AT91C_CSD_CRC_M 0x7F
-#define AT91C_CSD_MMC_ECC_S 8 // [9:8] reserved for MMC compatibility
-#define AT91C_CSD_MMC_ECC_M 0x03
-#define AT91C_CSD_FILE_FMT_S 10 // [11:10]
-#define AT91C_CSD_FILE_FMT_M 0x03
-#define AT91C_CSD_TMP_WP_S 12 // [12:12]
-#define AT91C_CSD_TMP_WP_M 0x01
-#define AT91C_CSD_PERM_WP_S 13 // [13:13]
-#define AT91C_CSD_PERM_WP_M 0x01
-#define AT91C_CSD_COPY_S 14 // [14:14]
-#define AT91C_CSD_COPY_M 0x01
-#define AT91C_CSD_FILE_FMT_GRP_S 15 // [15:15]
-#define AT91C_CSD_FILE_FMT_GRP_M 0x01
+#define CSD_3_BIT0_S 0 // [0:0]
+#define CSD_3_BIT0_M 0x01
+#define CSD_3_CRC_S 1 // [7:1]
+#define CSD_3_CRC_M 0x7F
+#define CSD_3_MMC_ECC_S 8 // [9:8] reserved for MMC compatibility
+#define CSD_3_MMC_ECC_M 0x03
+#define CSD_3_FILE_FMT_S 10 // [11:10]
+#define CSD_3_FILE_FMT_M 0x03
+#define CSD_3_TMP_WP_S 12 // [12:12]
+#define CSD_3_TMP_WP_M 0x01
+#define CSD_3_PERM_WP_S 13 // [13:13]
+#define CSD_3_PERM_WP_M 0x01
+#define CSD_3_COPY_S 14 // [14:14]
+#define CSD_3_COPY_M 0x01
+#define CSD_3_FILE_FMT_GRP_S 15 // [15:15]
+#define CSD_3_FILE_FMT_GRP_M 0x01
// reserved 16 // [20:16]
// reserved 0x1F
-#define AT91C_CSD_WBLOCK_P_S 21 // [21:21]
-#define AT91C_CSD_WBLOCK_P_M 0x01
-#define AT91C_CSD_WBLEN_S 22 // [25:22]
-#define AT91C_CSD_WBLEN_M 0x0F
-#define AT91C_CSD_R2W_F_S 26 // [28:26]
-#define AT91C_CSD_R2W_F_M 0x07
-#define AT91C_CSD_MMC_DEF_ECC_S 29 // [30:29] reserved for MMC compatibility
-#define AT91C_CSD_MMC_DEF_ECC_M 0x03
-#define AT91C_CSD_WP_GRP_EN_S 31 // [31:31]
-#define AT91C_CSD_WP_GRP_EN_M 0x01
+#define CSD_3_WBLOCK_P_S 21 // [21:21]
+#define CSD_3_WBLOCK_P_M 0x01
+#define CSD_3_WBLEN_S 22 // [25:22]
+#define CSD_3_WBLEN_M 0x0F
+#define CSD_3_R2W_F_S 26 // [28:26]
+#define CSD_3_R2W_F_M 0x07
+#define CSD_3_MMC_DEF_ECC_S 29 // [30:29] reserved for MMC compatibility
+#define CSD_3_MMC_DEF_ECC_M 0x03
+#define CSD_3_WP_GRP_EN_S 31 // [31:31]
+#define CSD_3_WP_GRP_EN_M 0x01
// Seconde Response INT <=> CSD[2] : bits 32 to 63
-#define AT91C_CSD_v21_WP_GRP_SIZE_S 0 // [38:32]
-#define AT91C_CSD_v21_WP_GRP_SIZE_M 0x7F
-#define AT91C_CSD_v21_SECT_SIZE_S 7 // [45:39]
-#define AT91C_CSD_v21_SECT_SIZE_M 0x7F
-#define AT91C_CSD_v21_ER_BLEN_EN_S 14 // [46:46]
-#define AT91C_CSD_v21_ER_BLEN_EN_M 0x01
+#define CSD_2_v21_WP_GRP_SIZE_S 0 // [38:32]
+#define CSD_2_v21_WP_GRP_SIZE_M 0x7F
+#define CSD_2_v21_SECT_SIZE_S 7 // [45:39]
+#define CSD_2_v21_SECT_SIZE_M 0x7F
+#define CSD_2_v21_ER_BLEN_EN_S 14 // [46:46]
+#define CSD_2_v21_ER_BLEN_EN_M 0x01
-#define AT91C_CSD_v22_WP_GRP_SIZE_S 0 // [36:32]
-#define AT91C_CSD_v22_WP_GRP_SIZE_M 0x1F
-#define AT91C_CSD_v22_ER_GRP_SIZE_S 5 // [41:37]
-#define AT91C_CSD_v22_ER_GRP_SIZE_M 0x1F
-#define AT91C_CSD_v22_SECT_SIZE_S 10 // [46:42]
-#define AT91C_CSD_v22_SECT_SIZE_M 0x1F
+#define CSD_2_v22_WP_GRP_SIZE_S 0 // [36:32]
+#define CSD_2_v22_WP_GRP_SIZE_M 0x1F
+#define CSD_2_v22_ER_GRP_SIZE_S 5 // [41:37]
+#define CSD_2_v22_ER_GRP_SIZE_M 0x1F
+#define CSD_2_v22_SECT_SIZE_S 10 // [46:42]
+#define CSD_2_v22_SECT_SIZE_M 0x1F
-#define AT91C_CSD_C_SIZE_M_S 15 // [49:47]
-#define AT91C_CSD_C_SIZE_M_M 0x07
-#define AT91C_CSD_VDD_WMAX_S 18 // [52:50]
-#define AT91C_CSD_VDD_WMAX_M 0x07
-#define AT91C_CSD_VDD_WMIN_S 21 // [55:53]
-#define AT91C_CSD_VDD_WMIN_M 0x07
-#define AT91C_CSD_RCUR_MAX_S 24 // [58:56]
-#define AT91C_CSD_RCUR_MAX_M 0x07
-#define AT91C_CSD_RCUR_MIN_S 27 // [61:59]
-#define AT91C_CSD_RCUR_MIN_M 0x07
-#define AT91C_CSD_CSIZE_L_S 30 // [63:62] <=> 2 LSB of CSIZE
-#define AT91C_CSD_CSIZE_L_M 0x03
+#define CSD_2_C_SIZE_M_S 15 // [49:47]
+#define CSD_2_C_SIZE_M_M 0x07
+#define CSD_2_VDD_WMAX_S 18 // [52:50]
+#define CSD_2_VDD_WMAX_M 0x07
+#define CSD_2_VDD_WMIN_S 21 // [55:53]
+#define CSD_2_VDD_WMIN_M 0x07
+#define CSD_2_RCUR_MAX_S 24 // [58:56]
+#define CSD_2_RCUR_MAX_M 0x07
+#define CSD_2_RCUR_MIN_S 27 // [61:59]
+#define CSD_2_RCUR_MIN_M 0x07
+#define CSD_2_CSIZE_L_S 30 // [63:62] <=> 2 LSB of CSIZE
+#define CSD_2_CSIZE_L_M 0x03
// Third Response INT <=> CSD[1] : bits 64 to 95
-#define AT91C_CSD_CSIZE_H_S 0 // [73:64] <=> 10 MSB of CSIZE
-#define AT91C_CSD_CSIZE_H_M 0x03FF
+#define CSD_1_CSIZE_H_S 0 // [73:64] <=> 10 MSB of CSIZE
+#define CSD_1_CSIZE_H_M 0x03FF
// reserved 10 // [75:74]
// reserved 0x03
-#define AT91C_CSD_DSR_I_S 12 // [76:76]
-#define AT91C_CSD_DSR_I_M 0x01
-#define AT91C_CSD_RD_B_MIS_S 13 // [77:77]
-#define AT91C_CSD_RD_B_MIS_M 0x01
-#define AT91C_CSD_WR_B_MIS_S 14 // [78:78]
-#define AT91C_CSD_WR_B_MIS_M 0x01
-#define AT91C_CSD_RD_B_PAR_S 15 // [79:79]
-#define AT91C_CSD_RD_B_PAR_M 0x01
-#define AT91C_CSD_RD_B_LEN_S 16 // [83:80]
-#define AT91C_CSD_RD_B_LEN_M 0x0F
-#define AT91C_CSD_CCC_S 20 // [95:84]
-#define AT91C_CSD_CCC_M 0x0FFF
+#define CSD_1_DSR_I_S 12 // [76:76]
+#define CSD_1_DSR_I_M 0x01
+#define CSD_1_RD_B_MIS_S 13 // [77:77]
+#define CSD_1_RD_B_MIS_M 0x01
+#define CSD_1_WR_B_MIS_S 14 // [78:78]
+#define CSD_1_WR_B_MIS_M 0x01
+#define CSD_1_RD_B_PAR_S 15 // [79:79]
+#define CSD_1_RD_B_PAR_M 0x01
+#define CSD_1_RD_B_LEN_S 16 // [83:80]
+#define CSD_1_RD_B_LEN_M 0x0F
+#define CSD_1_CCC_S 20 // [95:84]
+#define CSD_1_CCC_M 0x0FFF
// Fourth Response INT <=> CSD[0] : bits 96 to 127
-#define AT91C_CSD_TRANS_SPEED_S 0 // [103:96]
-#define AT91C_CSD_TRANS_SPEED_M 0xFF
-#define AT91C_CSD_NSAC_S 8 // [111:104]
-#define AT91C_CSD_NSAC_M 0xFF
-#define AT91C_CSD_TAAC_S 16 // [119:112]
-#define AT91C_CSD_TAAC_M 0xFF
+#define CSD_0_TRANS_SPEED_S 0 // [103:96]
+#define CSD_0_TRANS_SPEED_M 0xFF
+#define CSD_0_NSAC_S 8 // [111:104]
+#define CSD_0_NSAC_M 0xFF
+#define CSD_0_TAAC_S 16 // [119:112]
+#define CSD_0_TAAC_M 0xFF
// reserved 24 // [121:120]
// reserved 0x03
-#define AT91C_CSD_MMC_SPEC_VERS_S 26 // [125:122] reserved for MMC compatibility
-#define AT91C_CSD_MMC_SPEC_VERS_M 0x0F
-#define AT91C_CSD_STRUCT_S 30 // [127:126]
-#define AT91C_CSD_STRUCT_M 0x03
+#define CSD_0_MMC_SPEC_VERS_S 26 // [125:122] reserved for MMC compatibility
+#define CSD_0_MMC_SPEC_VERS_M 0x0F
+#define CSD_0_STRUCT_S 30 // [127:126]
+#define CSD_0_STRUCT_M 0x03
/////////////////////////////////////////////////////////////////////////////////////////////////////
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/printf.c#4 (text+ko) ====
@@ -42,6 +42,7 @@
for (s = va_arg(ap, char *); *s; s++)
putchar(*s);
continue;
+ case 'd': /* A lie, always prints unsigned */
case 'u':
u = va_arg(ap, unsigned);
s = buf;
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/sd-card.c#5 (text+ko) ====
@@ -47,6 +47,8 @@
#include "lib.h"
#include "sd-card.h"
+#define IMP_DEBUG 1
+
#define AT91C_MCI_TIMEOUT 1000000 /* For AT91F_MCIDeviceWaitReady */
#define BUFFER_SIZE_MCI_DEVICE 512
#define MASTER_CLOCK 60000000
@@ -96,7 +98,7 @@
int
MCI_write (unsigned dest, char* source, unsigned length)
{
- unsigned sectorLength = MCI_Device.pMCI_DeviceFeatures->Max_Read_DataBlock_Lenfgth;
+ unsigned sectorLength = 1 << MCI_Device.pMCI_DeviceFeatures->WRITE_BL_LEN;
unsigned offset = dest % sectorLength;
AT91S_MCIDeviceStatus status;
int sizeToWrite;
@@ -169,15 +171,16 @@
int
MCI_read(char* dest, unsigned source, unsigned length)
{
- unsigned sectorLength = MCI_Device.pMCI_DeviceFeatures->Max_Read_DataBlock_Length;
unsigned log2sl = MCI_Device.pMCI_DeviceFeatures->READ_BL_LEN;
- unsigned slmask = ((1 << log2sl) - 1);
+ unsigned sectorLength = 1 << log2sl;
+ unsigned slmask = sectorLength - 1;
// unsigned sector = (unsigned)source >> log2sl;
unsigned offset = (unsigned)source & slmask;
AT91S_MCIDeviceStatus status;
int sizeToRead;
unsigned int *walker;
+ printf("sector length is %d\r\n", sectorLength);
#if IMP_DEBUG
printf("Reading 0x%x bytes into ARM Addr 0x%x from card offset 0x%x\r\n",
length, dest, source);
@@ -279,8 +282,8 @@
MCI_Device_Features.Relative_Card_Address = 0;
MCI_Device_Features.Card_Inserted = AT91C_SD_CARD_INSERTED;
- MCI_Device_Features.Max_Read_DataBlock_Length = 0;
- MCI_Device_Features.Max_Write_DataBlock_Length = 0;
+ MCI_Device_Features.READ_BL_LEN = 0;
+ MCI_Device_Features.WRITE_BL_LEN = 0;
MCI_Device_Features.Read_Partial = 0;
MCI_Device_Features.Write_Partial = 0;
MCI_Device_Features.Erase_Block_Enable = 0;
More information about the p4-projects
mailing list