My apology that I have to continue the discussion from the old thread: (
http://sel4.systems/pipermail/devel/2016-October/001056.html).
My goal is to read and write data from/to micro sd in SabreLite platform.
I tried both Adrain and Anna's suggestions in that thread and they dont
seem to fix the problem. Nothing returns error and I also changed cacheable
parameter in sel4utils_new_pages_at_vaddr to 0 (I believe this is what Anna
meant instead of setting 3rd argument of vspace_new_pages).
The code's still stuck inside mmc_block_read function. I tracked it down
and it seems like BRR and BWR interrupt statuses are never set to 1
I add my code below, please let me know if anything is wrong with my code.
ps_io_mapper_t io_mapper = {0};
error = sel4platsupport_new_io_mapper(simple, vspace, vka, &io_mapper);
assert(error == 0);
ps_io_ops_t io_ops = {
.io_mapper = io_mapper
};
sdio_host_dev_t* dev = (sdio_host_dev_t*) malloc(sizeof(*dev));
assert(dev != NULL);
memset(dev, 0, sizeof(*dev));
enum sdio_id id = sdio_default_id(); // return id=3
error = sdio_init(id, &io_ops, dev);
assert(error == 0);
mmc_card_t* mmc_card = (mmc_card_t*) malloc(sizeof(*mmc_card));
error = mmc_init(dev, &io_ops, mmc_card);
assert(error == 0 && mmc_card != NULL);
void *vaddr = vspace_new_pages(&vspace, seL4_AllRights, 5, seL4_PageBits);
assert(vaddr != NULL);
uintptr_t paddr = 0;
printf("mmc card capacity %llu bytes\n", mmc_card_capacity(*mmc_card));
long read_len = mmc_block_read(*mmc_card, 0x50000, 1, vaddr,
paddr, NULL, NULL); // Stuck here
printf("read %lu bytes\n", read_len);
Thanks
Oak
--
Norrathep (Oak) Rattanavipanon
M.S. in Computer Science
University of California - Irvine
_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel