Hi Adrian,

Thank you for the reply. I fix it according to what you suggest but it
still does not solve the problem (still hang at the same place. Do you have
any other suggestions on what I should fix or how I should look into
debugging it?

Best,
Oak

On Tue, Jan 17, 2017 at 8:58 PM, <[email protected]> wrote:

> Hi Oak,
>
> I don't know much about SD cards or this driver but it seems to me like
> passing it a physical address of 0 isn't what you want, and whilst I know
> nothing about the mmc hardware it seems reasonable to me that it might hang
> trying to DMA to memory that doesn't exist. There is also the additional
> problem that even if paddr was correct for the first page, there is no
> guarantee that the 5 pages you have allocated are contiguously physically
> even though they will be mapped contiguous virtually.
>
> My recommendation is to use the page dma allocator in
> seL4_libs/libsel4utils/include/sel4utils/page_dma.h, this will provide
> you an easy way to allocate/map pages for the purposes of DMA. So instead
> of
>
> void *vaddr = vspace_new_pages(&vspace, seL4_AllRights, 5, seL4_PageBits);
> uintptr_t paddr = 0;
>
> You would have
>
> ps_dma_man_t dma_man;
> error = sel4utils_new_page_dma_alloc(&vka, &vspace, &dma_man);
> void *vaddr = ps_dma_alloc(&dma_man, 5 * PAGE_SIZE_4K, PAGE_SIZE_4K, 0,
> PS_MEM_NORMAL);
> uintptr_t paddr = ps_dma_pin(&dma_man, vaddr, 5 * PAGE_SIZE_4K);
>
> As I said at the start, I don't know if this will actually fix your
> current problem, but it's still something you will need to fix.
>
> Adrian
>
>
> On Wed 18-Jan-2017 6:31 AM, Norrathep Rattanavipanon wrote:
>
> 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 [email protected]https://sel4.systems/lists/listinfo/devel
>
>
>


-- 
Norrathep (Oak) Rattanavipanon
M.S. in Computer Science
University of California - Irvine
_______________________________________________
Devel mailing list
[email protected]
https://sel4.systems/lists/listinfo/devel

Reply via email to