mirror of
https://github.com/fail0verflow/mini.git
synced 2024-12-01 07:34:20 +01:00
Mebbe speed up IPC a bit
This commit is contained in:
parent
e8e0851ebe
commit
d6e55bbcd0
4
ipc.c
4
ipc.c
@ -90,7 +90,7 @@ void ipc_post(u32 code, u32 tag, u32 num_args, ...)
|
|||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
}
|
}
|
||||||
dc_flushrange((void*)&out_queue[out_tail], 32);
|
dc_flush_block_fast((void*)&out_queue[out_tail]);
|
||||||
out_tail = (out_tail+1)&(IPC_OUT_SIZE-1);
|
out_tail = (out_tail+1)&(IPC_OUT_SIZE-1);
|
||||||
poke_outtail(out_tail);
|
poke_outtail(out_tail);
|
||||||
write32(HW_IPC_ARMCTRL, IPC_CTRL_IRQ_IN | IPC_CTRL_OUT);
|
write32(HW_IPC_ARMCTRL, IPC_CTRL_IRQ_IN | IPC_CTRL_OUT);
|
||||||
@ -148,7 +148,7 @@ static void process_in(void)
|
|||||||
|
|
||||||
//gecko_printf("IPC: process in %d @ %p\n",in_head,req);
|
//gecko_printf("IPC: process in %d @ %p\n",in_head,req);
|
||||||
|
|
||||||
dc_invalidaterange((void*)req, 32);
|
dc_inval_block_fast((void*)req);
|
||||||
|
|
||||||
//gecko_printf("IPC: req %08x %08x [%08x %08x %08x %08x %08x %08x]\n", req->code, req->tag,
|
//gecko_printf("IPC: req %08x %08x [%08x %08x %08x %08x %08x %08x]\n", req->code, req->tag,
|
||||||
// req->args[0], req->args[1], req->args[2], req->args[3], req->args[4], req->args[5]);
|
// req->args[0], req->args[1], req->args[2], req->args[3], req->args[4], req->args[5]);
|
||||||
|
2
memory.c
2
memory.c
@ -138,7 +138,7 @@ void ahb_flush_to(enum AHBDEV type)
|
|||||||
{
|
{
|
||||||
u32 cookie = irq_kill();
|
u32 cookie = irq_kill();
|
||||||
_ahb_flush_to(type);
|
_ahb_flush_to(type);
|
||||||
if(type != 0)
|
if(type != AHB_STARLET)
|
||||||
_ahb_flush_to(AHB_STARLET);
|
_ahb_flush_to(AHB_STARLET);
|
||||||
irq_restore(cookie);
|
irq_restore(cookie);
|
||||||
}
|
}
|
||||||
|
14
memory.h
14
memory.h
@ -82,5 +82,19 @@ static inline u32 get_far(void)
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _ahb_flush_to(enum AHBDEV dev);
|
||||||
|
|
||||||
|
static inline void dc_inval_block_fast(void *block)
|
||||||
|
{
|
||||||
|
__asm__ volatile ( "mcr\tp15, 0, %0, c7, c6, 1" :: "r" (block) );
|
||||||
|
_ahb_flush_to(AHB_STARLET); //TODO: check if really needed and if not, remove
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void dc_flush_block_fast(void *block)
|
||||||
|
{
|
||||||
|
__asm__ volatile ( "mcr\tp15, 0, %0, c7, c10, 1" :: "r" (block) );
|
||||||
|
__asm__ volatile ( "mcr\tp15, 0, %0, c7, c10, 4" :: "r" (0) );
|
||||||
|
ahb_flush_from(AHB_1); //TODO: check if really needed and if not, remove
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user