예제 #1
0
static irqreturn_t ns9xxx_plat_rtc_irq(int irq, void *data)
{
	u32 sysrtcmc = __raw_readl(SYS_RTCMC);

	if (sysrtcmc & SYS_RTCMC_RIS) {
		REGSETIM(sysrtcmc, SYS_RTCMC, RIC, 1);
		__raw_writel(sysrtcmc, SYS_RTCMC);
		REGSETIM(sysrtcmc, SYS_RTCMC, RIC, 0);
		__raw_writel(sysrtcmc, SYS_RTCMC);

		return IRQ_HANDLED;
	}

	return IRQ_NONE;
}
예제 #2
0
void __init board_a9m9750dev_init_machine(void)
{
	u32 reg;

	/* setup static CS0: memory base ... */
	REGSETIM(SYS_SMCSSMB(0), SYS_SMCSSMB, CSxB,
			NS9XXX_CSxSTAT_PHYS(0) >> 12);

	/* ... and mask */
	reg = SYS_SMCSSMM(0);
	REGSETIM(reg, SYS_SMCSSMM, CSxM, 0xfffff);
	REGSET(reg, SYS_SMCSSMM, CSEx, EN);
	SYS_SMCSSMM(0) = reg;

	/* setup static CS0: memory configuration */
	reg = MEM_SMC(0);
	REGSET(reg, MEM_SMC, WSMC, OFF);
	REGSET(reg, MEM_SMC, BSMC, OFF);
	REGSET(reg, MEM_SMC, EW, OFF);
	REGSET(reg, MEM_SMC, PB, 1);
	REGSET(reg, MEM_SMC, PC, AL);
	REGSET(reg, MEM_SMC, PM, DIS);
	REGSET(reg, MEM_SMC, MW, 8);
	MEM_SMC(0) = reg;

	/* setup static CS0: timing */
	MEM_SMWED(0) = 0x2;
	MEM_SMOED(0) = 0x2;
	MEM_SMRD(0) = 0x6;
	MEM_SMWD(0) = 0x6;

	platform_add_devices(board_a9m9750dev_devices,
			ARRAY_SIZE(board_a9m9750dev_devices));
}
예제 #3
0
static inline int wait_for_clkrdy(void)
{
	u32 sysrtcmc;
	unsigned int timeout = 0x20;

wait:
	sysrtcmc = __raw_readl(SYS_RTCMC);
	if (!(sysrtcmc & SYS_RTCMC_RIS)) {
		if (unlikely(!--timeout))
			return -ETIMEDOUT;
		udelay(1);
		goto wait;
	}
	pr_debug("%s: SYS_RTCMC = 0x%x\n", __func__, sysrtcmc);

	REGSETIM(sysrtcmc, SYS_RTCMC, RIC, 1);
	__raw_writel(sysrtcmc, SYS_RTCMC);
	REGSETIM(sysrtcmc, SYS_RTCMC, RIC, 0);
	__raw_writel(sysrtcmc, SYS_RTCMC);

	return sysrtcmc & SYS_RTCMC_SS ? 0 : -EIO;
}