URL
https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk
Subversion Repositories or1k_soc_on_altera_embedded_dev_kit
Compare Revisions
- This comparison shows the changes necessary to convert path
/or1k_soc_on_altera_embedded_dev_kit/trunk/linux-2.6/linux-2.6.24/arch/or32/drivers
- from Rev 16 to Rev 18
- ↔ Reverse comparison
Rev 16 → Rev 18
/sd_card.c
49,8 → 49,9
# define SDC_PRINTK(fmt, args...) |
#endif |
|
#define DRIVER_NAME "sd_card" |
#define SD_CARD_MINORS 16 |
#define DRIVER_NAME "sd_card" |
#define SD_CARD_MINORS 8 |
#define SD_CARD_SIZE 1995440128 |
|
static int major = 8; |
|
67,8 → 68,6
|
SDC_PRINTK("spiMaster_init begin\n"); |
|
REG8(vbase + SD_TX_FIFO_CONTROL_REG) = 0x10; |
|
for (i = 0; i < 5; i++) { |
REG8(vbase + SD_TRANS_TYPE_REG) = SD_INIT_SD; |
REG8(vbase + SD_TRANS_CTRL_REG) = 1; // TRANS_START; |
116,9 → 115,9
REG8(sd_vbase + SD_ADDR_31_24_REG) = (unsigned char) ((sector >> 24) & 0xff); |
|
REG8(sd_vbase + SD_TRANS_TYPE_REG) = SD_RW_READ_SD_BLOCK; |
REG8(sd_vbase + SD_RX_FIFO_CONTROL_REG) = 0x1; // Clean the RX FIFO |
REG8(sd_vbase + SD_TRANS_CTRL_REG) = 0x1; //TRANS_START |
while (REG8(sd_vbase + SD_TRANS_STS_REG) & 0x1) { // exit while !TRABS_BUSY |
REG8(sd_vbase + SD_RX_FIFO_CONTROL_REG) = 0x1; /* Clean the RX FIFO */ |
REG8(sd_vbase + SD_TRANS_CTRL_REG) = 0x1; /* TRANS_START */ |
while (REG8(sd_vbase + SD_TRANS_STS_REG) & 0x1) { /* exit while !TRABS_BUSY */ |
; |
} |
|
142,7 → 141,58
return 0; |
} |
|
static int write_sd_block(void *sd_vbase, unsigned long sector, |
unsigned long nsect, char *buffer) |
{ |
int i; |
unsigned char data; |
unsigned int blockCnt; |
char *p = buffer; |
|
SDC_PRINTK("write_sd_block begin: sector=%d, nsect=%d\n", sector, nsect); |
|
for (blockCnt = 0; blockCnt < nsect; blockCnt++) { |
|
/* Clean the TX FIFO */ |
REG8(sd_vbase + SD_TX_FIFO_CONTROL_REG) = 0x1; |
|
REG8(sd_vbase + SD_ADDR_7_0_REG) = 0; |
REG8(sd_vbase + SD_ADDR_15_8_REG) = (unsigned char) ((sector >> 8) & 0xff); |
REG8(sd_vbase + SD_ADDR_23_16_REG) = (unsigned char) ((sector >> 16) & 0xff); |
REG8(sd_vbase + SD_ADDR_31_24_REG) = (unsigned char) ((sector >> 24) & 0xff); |
|
|
// Write data to TX_FIFO_DATA_REG |
for (i = 0; i < 512; i++) { |
REG8(sd_vbase + SD_TX_FIFO_DATA_REG) = p[i]; |
} |
|
|
REG8(sd_vbase + SD_TRANS_TYPE_REG) = SD_RW_WRITE_SD_BLOCK; |
REG8(sd_vbase + SD_TRANS_CTRL_REG) = 1; /* TRANS_START */ |
|
|
while (REG8(sd_vbase + SD_TRANS_STS_REG) & 0x1) { /* exit while !TRABS_BUSY */ |
; |
} |
|
data = REG8(sd_vbase + SD_TRANS_ERROR_REG) & 0x30; |
if (data == 1) { |
SDC_PRINTK("WRITE_CMD_ERROR\n\r"); |
} else if (data == 2) { |
SDC_PRINTK("WRITE_DATA_ERROR\n\r"); |
} else if (data == 3) { |
SDC_PRINTK("WRITE_BUSY_ERROR\n\r"); |
} |
|
sector += 512; |
p += 512; |
} |
|
SDC_PRINTK("write_sd_block done\n"); |
return 0; |
} |
|
/* |
* Handle an I/O request. |
*/ |
157,7 → 207,7
return; |
} |
if (write) |
printk(KERN_WARNING "Sorry, we are still working on sd block write\n"); |
write_sd_block(dev->vir_base, sector, nsect, buffer); |
else |
read_sd_block(dev->vir_base, sector, nsect, buffer); |
} |
276,10 → 326,10
* start of data at sector four. |
*/ |
size = dev->size; |
geo.cylinders = 1010; //984; |
geo.heads = 8; //32; |
geo.cylinders = (size & ~0x3f) >> 6; |
geo.heads = 62; //32; |
geo.sectors = 62; //63; |
geo.start = 0; |
geo.start = get_start_sect(inode->i_bdev); |
if (copy_to_user((void __user *) arg, &geo, sizeof(geo))) |
return -EFAULT; |
return 0; |
328,7 → 378,7
return -EBUSY; |
} |
|
dev->size = 256638976; //1015808000; /* 1GB */ |
dev->size = SD_CARD_SIZE; //1015808000; /* 1GB */ |
spin_lock_init(&dev->lock); |
dev->queue = blk_init_queue(sd_card_request, &dev->lock); |
blk_queue_hardsect_size(dev->queue, 512); |
335,6 → 385,12
|
dev->vir_base = ioremap(SD_BASE_ADD, 0x2000); |
|
/* Reset spiMaster controller */ |
REG8(dev->vir_base + SD_TRANS_CTRL_REG) = 0x1; /* reset spiMaster */ |
mdelay(1); |
REG8(dev->vir_base + SD_TRANS_CTRL_REG) = 0x0; |
REG8(dev->vir_base + SD_CLK_DEL_REG) = 0x1; |
|
/* allocate gendsik and init it */ |
dev->gd = alloc_disk(SD_CARD_MINORS); |
if (!dev->gd) { |
/Makefile
3,5 → 3,5
# |
|
obj-$(CONFIG_OETH) += open_eth.o |
#obj-y += sd_card.o |
obj-y += sd_card.o |
|