⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpc52xx_sleep.s

📁 linux内核源码
💻 S
字号:
#include <asm/reg.h>#include <asm/ppc_asm.h>#include <asm/processor.h>.text_GLOBAL(mpc52xx_deep_sleep)mpc52xx_deep_sleep: /* args r3-r6: SRAM, SDRAM regs, CDM regs, INTR regs */	/* enable interrupts */	mfmsr	r7	ori	r7, r7, 0x8000 /* EE */	mtmsr	r7	sync; isync;	li	r10, 0 /* flag that irq handler sets */	/* enable tmr7 (or any other) interrupt */	lwz	r8, 0x14(r6) /* intr->main_mask */	ori	r8, r8, 0x1	xori	r8, r8, 0x1	stw	r8, 0x14(r6)	sync	/* emulate tmr7 interrupt */	li	r8, 0x1	stw	r8, 0x40(r6) /* intr->main_emulate */	sync	/* wait for it to happen */1:	cmpi	cr0, r10, 1	bne	cr0, 1b	/* lock icache */	mfspr	r10, SPRN_HID0	ori	r10, r10, 0x2000	sync; isync;	mtspr	SPRN_HID0, r10	sync; isync;	mflr	r9 /* save LR */	/* jump to sram */	mtlr	r3	blrl	mtlr	r9 /* restore LR */	/* unlock icache */	mfspr	r10, SPRN_HID0	ori	r10, r10, 0x2000	xori	r10, r10, 0x2000	sync; isync;	mtspr	SPRN_HID0, r10	sync; isync;	/* return to C code */	blr_GLOBAL(mpc52xx_ds_sram)mpc52xx_ds_sram:	/* put SDRAM into self-refresh */	lwz	r8, 0x4(r4)	/* sdram->ctrl */	oris	r8, r8, 0x8000 /* mode_en */	stw	r8, 0x4(r4)	sync	ori	r8, r8, 0x0002 /* soft_pre */	stw	r8, 0x4(r4)	sync	xori	r8, r8, 0x0002	xoris	r8, r8, 0x8000 /* !mode_en */	stw	r8, 0x4(r4)	sync	oris	r8, r8, 0x5000	xoris	r8, r8, 0x4000 /* ref_en !cke */	stw	r8, 0x4(r4)	sync	/* disable SDRAM clock */	lwz	r8, 0x14(r5) /* cdm->clkenable */	ori	r8, r8, 0x0008	xori	r8, r8, 0x0008	stw	r8, 0x14(r5)	sync	/* put mpc5200 to sleep */	mfmsr	r10	oris	r10, r10, 0x0004	/* POW = 1 */	sync; isync;	mtmsr	r10	sync; isync;	/* enable clock */	lwz	r8, 0x14(r5)	ori	r8, r8, 0x0008	stw	r8, 0x14(r5)	sync	/* get ram out of self-refresh */	lwz	r8, 0x4(r4)	oris	r8, r8, 0x5000 /* cke ref_en */	stw	r8, 0x4(r4)	sync	blr_GLOBAL(mpc52xx_ds_sram_size)mpc52xx_ds_sram_size:	.long $-mpc52xx_ds_sram/* ### interrupt handler for wakeup from deep-sleep ### */_GLOBAL(mpc52xx_ds_cached)mpc52xx_ds_cached:	mtspr	SPRN_SPRG0, r7	mtspr	SPRN_SPRG1, r8	/* disable emulated interrupt */	mfspr	r7, 311 /* MBAR */	addi	r7, r7, 0x540	/* intr->main_emul */	li	r8, 0	stw	r8, 0(r7)	sync	dcbf	0, r7	/* acknowledge wakeup, so CCS releases power pown */	mfspr	r7, 311	/* MBAR */	addi	r7, r7, 0x524	/* intr->enc_status */	lwz	r8, 0(r7)	ori	r8, r8, 0x0400	stw	r8, 0(r7)	sync	dcbf	0, r7	/* flag - we handled the interrupt */	li	r10, 1	mfspr	r8, SPRN_SPRG1	mfspr	r7, SPRN_SPRG0	rfi_GLOBAL(mpc52xx_ds_cached_size)mpc52xx_ds_cached_size:	.long $-mpc52xx_ds_cached

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -