diff options
| -rw-r--r-- | cpu/microblaze/start.S | 33 | ||||
| -rw-r--r-- | include/common.h | 4 | 
2 files changed, 37 insertions, 0 deletions
diff --git a/cpu/microblaze/start.S b/cpu/microblaze/start.S index 29481af9a..453815818 100644 --- a/cpu/microblaze/start.S +++ b/cpu/microblaze/start.S @@ -117,3 +117,36 @@ clear_bss:  3:	/* jumping to board_init */  	brai	board_init  1:	bri	1b + +/* + * Read 16bit little endian + */ +	.text +	.global	in16 +	.ent	in16 +	.align	2 +in16:	lhu	r3, r0, r5 +	bslli	r4, r3, 8 +	bsrli	r3, r3, 8 +	andi	r4, r4, 0xffff +	or	r3, r3, r4 +	rtsd	r15, 8 +	sext16	r3, r3 +	.end	in16 + +/* + * Write 16bit little endian + * first parameter(r5) - address, second(r6) - short value + */ +	.text +	.global	out16 +	.ent	out16 +	.align	2 +out16:	bslli	r3, r6, 8 +	bsrli	r6, r6, 8 +	andi	r3, r3, 0xffff +	or	r3, r3, r6 +	sh	r3, r0, r5 +	rtsd	r15, 8 +	or	r0, r0, r0 +	.end	out16 diff --git a/include/common.h b/include/common.h index b162dbd7c..40fbba532 100644 --- a/include/common.h +++ b/include/common.h @@ -402,6 +402,10 @@ void		ppcDcbi(unsigned long value);  void		ppcSync(void);  void		ppcDcbz(unsigned long value);  #endif +#if defined (CONFIG_MICROBLAZE) +unsigned short	in16(unsigned int); +void		out16(unsigned int, unsigned short value); +#endif  #if defined (CONFIG_MPC83XX)  void		ppcDWload(unsigned int *addr, unsigned int *ret);  |