mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 05:24:12 +08:00
d997211e1e
In commit3169663ac5
"ARM: sa11x0/pxa: convert OS timer registers to IOMEM", the definition of the OSCR macro was changed to be an __iomem pointer, but the same register is also used by the XIP code. This patch does the corresponding change here as well. On PXA, the IRQ register definitions were removed even earlier, in commit5d284e353e
("ARM: pxa: avoid accessing interrupt registers directly"). This patch unfortunately brings some of that back. An earlier version of my patch moved the code into an external function, which could not work for CONFIG_XIP_KERNEL+CONFIG_MTD_XIP, so this restores something close to the original code. Link: http://lists.infradead.org/pipermail/linux-arm-kernel/2014-March/241716.html Acked-by: Robert Jarzmik <robert.jarzmik@free.fr> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
40 lines
1.3 KiB
C
40 lines
1.3 KiB
C
/*
|
|
* MTD primitives for XIP support. Architecture specific functions
|
|
*
|
|
* Do not include this file directly. It's included from linux/mtd/xip.h
|
|
*
|
|
* Author: Nicolas Pitre
|
|
* Created: Nov 2, 2004
|
|
* Copyright: (C) 2004 MontaVista Software, Inc.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
#ifndef __ARCH_PXA_MTD_XIP_H__
|
|
#define __ARCH_PXA_MTD_XIP_H__
|
|
|
|
#include <mach/regs-ost.h>
|
|
|
|
/* restored July 2017, this did not build since 2011! */
|
|
|
|
#define ICIP io_p2v(0x40d00000)
|
|
#define ICMR io_p2v(0x40d00004)
|
|
#define xip_irqpending() (readl(ICIP) & readl(ICMR))
|
|
|
|
/* we sample OSCR and convert desired delta to usec (1/4 ~= 1000000/3686400) */
|
|
#define xip_currtime() readl(OSCR)
|
|
#define xip_elapsed_since(x) (signed)((readl(OSCR) - (x)) / 4)
|
|
|
|
/*
|
|
* xip_cpu_idle() is used when waiting for a delay equal or larger than
|
|
* the system timer tick period. This should put the CPU into idle mode
|
|
* to save power and to be woken up only when some interrupts are pending.
|
|
* As above, this should not rely upon standard kernel code.
|
|
*/
|
|
|
|
#define xip_cpu_idle() asm volatile ("mcr p14, 0, %0, c7, c0, 0" :: "r" (1))
|
|
|
|
#endif /* __ARCH_PXA_MTD_XIP_H__ */
|