mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-25 12:04:46 +08:00
c637fa5294
Isolated Memory Regions support a lock bit. The lock bit in an IMR prevents modification of the IMR until the core goes through a warm or cold reset. The lock bit feature is not useful in the context of the kernel API and is not really necessary since modification of IMRs is possible only from ring-zero anyway. This patch drops support for IMR locks bits, it simplifies the kernel API and removes an unnecessary and needlessly complex feature. Suggested-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: andriy.shevchenko@linux.intel.com Cc: boon.leong.ong@intel.com Cc: paul.gortmaker@windriver.com Link: http://lkml.kernel.org/r/1456190999-12685-3-git-send-email-pure.logic@nexus-software.ie Signed-off-by: Ingo Molnar <mingo@kernel.org>
61 lines
1.8 KiB
C
61 lines
1.8 KiB
C
/*
|
|
* imr.h: Isolated Memory Region API
|
|
*
|
|
* Copyright(c) 2013 Intel Corporation.
|
|
* Copyright(c) 2015 Bryan O'Donoghue <pure.logic@nexus-software.ie>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; version 2
|
|
* of the License.
|
|
*/
|
|
#ifndef _IMR_H
|
|
#define _IMR_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
/*
|
|
* IMR agent access mask bits
|
|
* See section 12.7.4.7 from quark-x1000-datasheet.pdf for register
|
|
* definitions.
|
|
*/
|
|
#define IMR_ESRAM_FLUSH BIT(31)
|
|
#define IMR_CPU_SNOOP BIT(30) /* Applicable only to write */
|
|
#define IMR_RMU BIT(29)
|
|
#define IMR_VC1_SAI_ID3 BIT(15)
|
|
#define IMR_VC1_SAI_ID2 BIT(14)
|
|
#define IMR_VC1_SAI_ID1 BIT(13)
|
|
#define IMR_VC1_SAI_ID0 BIT(12)
|
|
#define IMR_VC0_SAI_ID3 BIT(11)
|
|
#define IMR_VC0_SAI_ID2 BIT(10)
|
|
#define IMR_VC0_SAI_ID1 BIT(9)
|
|
#define IMR_VC0_SAI_ID0 BIT(8)
|
|
#define IMR_CPU_0 BIT(1) /* SMM mode */
|
|
#define IMR_CPU BIT(0) /* Non SMM mode */
|
|
#define IMR_ACCESS_NONE 0
|
|
|
|
/*
|
|
* Read/Write access-all bits here include some reserved bits
|
|
* These are the values firmware uses and are accepted by hardware.
|
|
* The kernel defines read/write access-all in the same way as firmware
|
|
* in order to have a consistent and crisp definition across firmware,
|
|
* bootloader and kernel.
|
|
*/
|
|
#define IMR_READ_ACCESS_ALL 0xBFFFFFFF
|
|
#define IMR_WRITE_ACCESS_ALL 0xFFFFFFFF
|
|
|
|
/* Number of IMRs provided by Quark X1000 SoC */
|
|
#define QUARK_X1000_IMR_MAX 0x08
|
|
#define QUARK_X1000_IMR_REGBASE 0x40
|
|
|
|
/* IMR alignment bits - only bits 31:10 are checked for IMR validity */
|
|
#define IMR_ALIGN 0x400
|
|
#define IMR_MASK (IMR_ALIGN - 1)
|
|
|
|
int imr_add_range(phys_addr_t base, size_t size,
|
|
unsigned int rmask, unsigned int wmask);
|
|
|
|
int imr_remove_range(phys_addr_t base, size_t size);
|
|
|
|
#endif /* _IMR_H */
|