So I use the following code to create a new buffer for vaddr and paddr : void *vaddr = vspace_new_pages(&vspace, seL4_AllRights, 1, seL4PageBits);
seL4_CPtr frame_cap = vsapce_get_cap(&vspace, vaddr); seL4_ARM_Page_GetAddress_t gaddr = seL4_ARCH_Page_GetAddress(frame_cap); uintptr_t paddr = (uintptr_t) gaddr.paddr; long read_len = mmc_block_read(*mmc_card, 0x5, 1, vaddr, paddr, NULL, NULL); but the code is still stuck in mmc_block_read function. Anything I might be missing here? Thanks for the help, Oak On Fri, Oct 14, 2016 at 11:06 AM, Norrathep Rattanavipanon <[email protected] > wrote: > Ah I see. That might be a problem. I thought that function will > automatically build a mapping so I can use any vaddr, > > Thanks Alex! > > On Thu, Oct 13, 2016 at 8:38 PM, <[email protected]> wrote: > >> Hi Oak, >> >> Your code looks fine, but where do these numbers come from? >> >> void* vaddr = (void*) 0x1980000; >> uintptr_t paddr = (uintptr_t) 0x119a7000; >> >> >> vaddr should be the virtual address of a buffer to which the block >> should be read, and paddr should be the physical address of this buffer. >> >> >> - Alex >> >> >> >> >> On Thu, 2016-10-13 at 17:33 -0700, Norrathep Rattanavipanon wrote: >> > Is there any example on how to use sdhc driver in >> > (https://github.com/SEL4PROJ/projects_libs/tree/master/libsdhcdrivers)? >> > >> > >> > Currently, I'm struggling to read a block of data from micro-sd in >> > seL4. >> > I use the following code (assertions are omitted here for readability) >> > to instantiate the driver : >> > >> > >> > >> > >> > ps_io_mapper_t io_mapper = {0}; >> > error = sel4platsupport_new_io_mapper(simple, vspace, vka, >> > &io_mapper); >> > >> > ps_dma_man_t dma_man = {0}; >> > error = sel4utils_new_page_dma_alloc(&vka, &vspace, &dma_man); >> > >> > ps_io_ops_t io_ops = { >> > .io_mapper = io_mapper, >> > .dma_manager = dma_man >> > }; >> > >> > 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(); >> > error = sdio_init(id, &io_ops, dev); >> > >> > mmc_card_t* mmc_card = (mmc_card_t*) malloc(sizeof(*mmc_card)); >> > error = mmc_init(dev, &io_ops, mmc_card); >> > >> > >> > void* vaddr = (void*) 0x1980000; >> > >> > uintptr_t paddr = (uintptr_t) 0x119a7000; >> > >> > long read_len = mmc_block_read(*mmc_card, 0, 5, vaddr, paddr, NULL, >> > NULL); >> > >> > >> > >> > And the code's stuck in mmc_block_read function where interrupt status >> > (BRR and BWR) are never on. >> > >> > >> > Thanks in advance, >> > Oak >> > >> > >> > >> > >> > -- >> > Norrathep (Oak) Rattanavipanon >> > M.S. in Computer Science >> > University of California - Irvine >> > _______________________________________________ >> > Devel mailing list >> > [email protected] >> > https://sel4.systems/lists/listinfo/devel >> >> > > > -- > Norrathep (Oak) Rattanavipanon > M.S. in Computer Science > University of California - Irvine > -- Norrathep (Oak) Rattanavipanon M.S. in Computer Science University of California - Irvine
_______________________________________________ Devel mailing list [email protected] https://sel4.systems/lists/listinfo/devel
