blob: 4cc53583738664f88669368a6dc755c205c0835e [file] [log] [blame]
/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
/* Architecture-specific VCM functions */
/* Device attributes */
/*
* Sharing attributes. Pick only one.
*/
#define VCM_DEV_ATTR_NON_SH (0x00)
#define VCM_DEV_ATTR_SH (0x04)
/*
* Caching attributes. Pick only one.
*/
#define VCM_DEV_ATTR_NONCACHED (0x00)
#define VCM_DEV_ATTR_CACHED_WB_WA (0x01)
#define VCM_DEV_ATTR_CACHED_WB_NWA (0x02)
#define VCM_DEV_ATTR_CACHED_WT (0x03)
/*
* A "good" default set of attributes: shareable and non-cacheable.
*/
#define VCM_DEV_DEFAULT_ATTR (VCM_DEV_ATTR_SH | VCM_DEV_ATTR_NONCACHED)
/**
* set_arm7_pte_attr() - Set ARMv7 page table attributes
* pt_base Virtual address of the first-level page table
* @va Virtual address whose attributes are to be set
* @len Page size used to map the given virtual address
* @attr Attributes to set for this mapping.
*
* Modify a mapping attribute. The base address of the page table must
* be a virtual address containing a valid ARMv7 page table. The
* virtual address must refer to an existing mapping and must be
* aligned to the length with which it was mapped. The mapping length
* must similarly be the same as was specified when the mapping was
* made (one of 4KB, 64KB, 1MB, or 16MB). The attribute must be one of
* the shareability attributes above ORed with one of the cacheability
* attributes. Any previous attributes are completely replaced by the
* most recent call to this function. This function only sets the
* cacheability and shareability attributes. This is accomplished by
* modifying the TEX class and the S bit in the PTE. It is an error to
* call this function without having called vcm_setup_tex_classes at
* least once.
*
* The return value is zero on success and non-zero on failure.
*/
int set_arm7_pte_attr(unsigned long pt_base, unsigned long va,
unsigned long len, unsigned int attr);
/**
* cpu_set_attr() - Set page table attributes on the CPU's page tables
* @va Virtual address whose attributes are to be set
* @len Page size used to map the given virtual address
* @attr Attributes to set for this mapping.
*
* Modify a mapping attribute within the ARM page tables. The va must
* refer to an existing mapping and must be aligned to the length with
* which it was mapped. The mapping length must similarly be the same
* as was specified when the mapping was made (one of 4KB, 64KB, 1MB,
* or 16MB). The attribute must be one of the shareability attributes
* above ORed with one of the cacheability attributes. Any previous
* attributes are completely replaced by the most recent call to this
* function. This function only sets the cacheability and shareability
* attributes. This is accomplished by modifying the TEX class and the
* S bit in the PTE. It is an error to call this function without
* having called vcm_setup_tex_classes at least once. It is an error
* to call this function on any system using a memory configuration
* that is anything OTHER than ARMv7 with TEX remap enabled. Only the
* HW page tables are modified; the Linux page tables are left
* untouched.
*
* The return value is zero on success and non-zero on failure.
*/
int cpu_set_attr(unsigned long va, unsigned long len, unsigned int attr);
/**
* vcm_setup_tex_classes() - Prepare TEX class table for use
*
* Initialize the attribute mapping table by examining the TEX classes
* used by the CPU and finding the classes that match the device
* attributes (VCM_DEV_xx) defined above. This function is only
* relevant if TEX remap is enabled. The results will be unpredictable
* and irrelevant if TEX remap is not in use. It is an error to call
* this function in any system using a memory configuration of
* anything OTHER than ARMv7 with TEX remap enabled.
*
* The return value is zero on success or non-zero on failure. In the
* present version, a failure will result in a panic.
*/
int vcm_setup_tex_classes(void);