本文整理汇总了C++中outer_clean_range函数的典型用法代码示例。如果您正苦于以下问题:C++ outer_clean_range函数的具体用法?C++ outer_clean_range怎么用?C++ outer_clean_range使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了outer_clean_range函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: meson_trustzone_efuse
int meson_trustzone_efuse(struct efuse_hal_api_arg* arg)
{
int ret;
if (!arg) {
return -1;
}
set_cpus_allowed_ptr(current, cpumask_of(0));
__cpuc_flush_dcache_area(__va(arg->buffer_phy), arg->size);
outer_clean_range((arg->buffer_phy), (arg->buffer_phy + arg->size));
__cpuc_flush_dcache_area(__va(arg->retcnt_phy), sizeof(unsigned int));
outer_clean_range(arg->retcnt_phy, (arg->retcnt_phy + sizeof(unsigned int)));
__cpuc_flush_dcache_area((void*)arg, sizeof(struct efuse_hal_api_arg));
outer_clean_range(__pa(arg), __pa(arg + 1));
ret = meson_smc_hal_api(TRUSTZONE_HAL_API_EFUSE, __pa(arg));
if (arg->cmd == EFUSE_HAL_API_READ) {
outer_inv_range((arg->buffer_phy), (arg->buffer_phy + arg->size));
dmac_unmap_area(__va(arg->buffer_phy), arg->size, DMA_FROM_DEVICE);
}
outer_inv_range((arg->retcnt_phy), (arg->retcnt_phy + sizeof(unsigned int)));
dmac_unmap_area(__va(arg->buffer_phy), arg->size, DMA_FROM_DEVICE);
return ret;
}
开发者ID:Hedda,项目名称:s82_kernel,代码行数:27,代码来源:meson-secure.c
示例2: __cpu_suspend_save
/*
* This is called by __cpu_suspend() to save the state, and do whatever
* flushing is required to ensure that when the CPU goes to sleep we have
* the necessary data available when the caches are not searched.
*/
void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
{
u32 *ctx = ptr;
*save_ptr = virt_to_phys(ptr);
/* This must correspond to the LDM in cpu_resume() assembly */
*ptr++ = virt_to_phys(idmap_pgd);
*ptr++ = sp;
*ptr++ = virt_to_phys(cpu_do_resume);
cpu_do_suspend(ptr);
flush_cache_louis();
/*
* flush_cache_louis does not guarantee that
* save_ptr and ptr are cleaned to main memory,
* just up to the Level of Unification Inner Shareable.
* Since the context pointer and context itself
* are to be retrieved with the MMU off that
* data must be cleaned from all cache levels
* to main memory using "area" cache primitives.
*/
__cpuc_flush_dcache_area(ctx, ptrsz);
__cpuc_flush_dcache_area(save_ptr, sizeof(*save_ptr));
outer_clean_range(*save_ptr, *save_ptr + ptrsz);
outer_clean_range(virt_to_phys(save_ptr),
virt_to_phys(save_ptr) + sizeof(*save_ptr));
}
开发者ID:NicolFever,项目名称:Googy-Max3-Kernel-for-CM,代码行数:36,代码来源:suspend.c
示例3: pxa_cpu_reset_handler_init
void __init pxa_cpu_reset_handler_init(void)
{
int cpu;
#ifdef CONFIG_TZ_HYPERVISOR
tzlc_cmd_desc cmd_desc;
tzlc_handle tzlc_hdl;
#endif
/* Assign the address for saving reset handler */
reset_handler_pa = pm_reserve_pa + PAGE_SIZE;
reset_handler = (u32 *)__arm_ioremap(reset_handler_pa,
PAGE_SIZE, MT_MEMORY_SO);
if (reset_handler == NULL)
panic("failed to remap memory for reset handler!\n");
memset(reset_handler, 0x0, PAGE_SIZE);
/* Flush the addr to DDR */
__cpuc_flush_dcache_area((void *)&reset_handler_pa,
sizeof(reset_handler_pa));
outer_clean_range(__pa(&reset_handler_pa),
__pa(&reset_handler_pa + 1));
/*
* with TrustZone enabled, CIU_WARM_RESET_VECTOR is used by TrustZone software,
* and kernel use CIU_SW_SCRATCH_REG to save the cpu reset entry.
*/
#ifdef CONFIG_TZ_HYPERVISOR
tzlc_hdl = pxa_tzlc_create_handle();
cmd_desc.op = TZLC_CMD_SET_WARM_RESET_ENTRY;
cmd_desc.args[0] = __pa(pxa988_cpu_reset_entry);
pxa_tzlc_cmd_op(tzlc_hdl, &cmd_desc);
pxa_tzlc_destroy_handle(tzlc_hdl);
#else
/* We will reset from DDR directly by default */
writel(__pa(pxa988_cpu_reset_entry), CIU_WARM_RESET_VECTOR);
#endif
#ifdef CONFIG_PM
/* Setup the resume handler for the first core */
pxa988_set_reset_handler(__pa(pxa988_cpu_resume_handler), 0);
#endif
/* Setup the handler for secondary cores */
for (cpu = 1; cpu < CONFIG_NR_CPUS; cpu++)
pxa988_set_reset_handler(__pa(pxa988_secondary_startup), cpu);
#ifdef CONFIG_HOTPLUG_CPU
/* Setup the handler for Hotplug cores */
writel(__pa(pxa988_secondary_startup), &secondary_cpu_handler);
__cpuc_flush_dcache_area((void *)&secondary_cpu_handler,
sizeof(secondary_cpu_handler));
outer_clean_range(__pa(&secondary_cpu_handler),
__pa(&secondary_cpu_handler + 1));
#endif
}
开发者ID:C457,项目名称:android_kernel_samsung_t110,代码行数:55,代码来源:reset-pxa988.c
示例4: boot_secondary
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
/*
* set synchronisation state between this boot processor
* and the secondary one
*/
spin_lock(&boot_lock);
/*
* The secondary processor is waiting to be released from
* the holding pen - release it, then wait for it to flag
* that it has been released by resetting pen_release.
*/
pen_release = cpu;
__cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release));
outer_clean_range(__pa(&pen_release), __pa(&pen_release) + 1);
smp_cross_call(cpumask_of(cpu));
timeout = jiffies + (1 * HZ);
while (time_before(jiffies, timeout)) {
if (pen_release == -1)
break;
}
/*
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
spin_unlock(&boot_lock);
return pen_release != -1 ? -ENOSYS : 0;
}
开发者ID:Adjustxx,项目名称:Savaged-Zen,代码行数:35,代码来源:platsmp.c
示例5: omap4_secure_dispatcher
/*
* omap4_sec_dispatcher: Routine to dispatch low power secure
* service routines
*
* @idx: The HAL API index
* @flag: The flag indicating criticality of operation
* @nargs: Number of valid arguments out of four.
* @arg1, arg2, arg3 args4: Parameters passed to secure API
*
* Return the error value on success/failure
*/
u32 omap4_secure_dispatcher(u32 idx, u32 flag, u32 nargs, u32 arg1, u32 arg2,
u32 arg3, u32 arg4)
{
u32 ret;
u32 param[5];
param[0] = nargs;
param[1] = arg1;
param[2] = arg2;
param[3] = arg3;
param[4] = arg4;
/* Look-up Only once */
if (!l4_secure_clkdm)
l4_secure_clkdm = clkdm_lookup("l4_secure_clkdm");
/* Put l4 secure to SW_WKUP so that moduels are accessible */
omap2_clkdm_wakeup(l4_secure_clkdm);
/*
* Secure API needs physical address
* pointer for the parameters
*/
flush_cache_all();
outer_clean_range(__pa(param), __pa(param + 5));
ret = omap_smc2(idx, flag, __pa(param));
/* Restore the HW_SUP so that module can idle */
omap2_clkdm_allow_idle(l4_secure_clkdm);
return ret;
}
开发者ID:AdiPat,项目名称:i9003_Kernel,代码行数:44,代码来源:omap4-common.c
示例6: boot_secondary
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
{
/*
* Set synchronisation state between this boot processor
* and the secondary one
*/
spin_lock(&boot_lock);
/*
* Update the AuxCoreBoot0 with boot state for secondary core.
* omap_secondary_startup() routine will hold the secondary core till
* the AuxCoreBoot1 register is updated with cpu state
* A barrier is added to ensure that write buffer is drained
*/
flush_cache_all();
outer_clean_range(__pa(&secondary_data), __pa(&secondary_data + 1));
omap_modify_auxcoreboot0(0x200, 0xfffffdff);
smp_cross_call(cpumask_of(cpu));
set_event();
flush_cache_all();
smp_wmb();
/*
* Now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
spin_unlock(&boot_lock);
return 0;
}
开发者ID:chenjiaru,项目名称:samsung_kernel_nowplus,代码行数:30,代码来源:omap-smp.c
示例7: write_pen_release
/*
* Write pen_release in a way that is guaranteed to be visible to all
* observers, irrespective of whether they're taking part in coherency
* or not. This is necessary for the hotplug code to work reliably.
*/
static void write_pen_release(int val)
{
pen_release = val;
smp_wmb();
__cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release));
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
}
开发者ID:4atty,项目名称:linux,代码行数:12,代码来源:platsmp.c
示例8: unmap_page
static inline void unmap_page(struct device *dev, dma_addr_t dma_addr,
size_t size, enum dma_data_direction dir)
{
struct safe_buffer *buf = find_safe_buffer_dev(dev, dma_addr, "unmap");
if (buf) {
BUG_ON(buf->size != size);
BUG_ON(buf->direction != dir);
BUG_ON(!buf->page);
BUG_ON(buf->ptr);
dev_dbg(dev,
"%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
__func__, page_address(buf->page),
page_to_dma(dev, buf->page),
buf->safe, buf->safe_dma_addr);
DO_STATS(dev->archdata.dmabounce->bounce_count++);
if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL) {
void *ptr;
unsigned long phys;
ptr = kmap_atomic(buf->page, KM_BOUNCE_READ) + buf->offset;
phys = page_to_phys(buf->page) + buf->offset;
memcpy(ptr, buf->safe, size);
dmac_clean_range(ptr, ptr + size);
kunmap_atomic(ptr - buf->offset, KM_BOUNCE_READ);
outer_clean_range(phys, phys + size);
}
free_safe_buffer(dev->archdata.dmabounce, buf);
} else {
__dma_page_dev_to_cpu(dma_to_page(dev, dma_addr),
dma_addr & ~PAGE_MASK, size, dir);
}
}
开发者ID:0x0f,项目名称:adam-kernel,代码行数:34,代码来源:dmabounce.c
示例9: omap_secure_dispatcher
/**
* omap_sec_dispatcher: Routine to dispatch low power secure
* service routines
* @idx: The HAL API index
* @flag: The flag indicating criticality of operation
* @nargs: Number of valid arguments out of four.
* @arg1, arg2, arg3 args4: Parameters passed to secure API
*
* Return the non-zero error value on failure.
*/
u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, u32 arg1, u32 arg2,
u32 arg3, u32 arg4)
{
u32 ret;
u32 param[5];
param[0] = nargs;
param[1] = arg1;
param[2] = arg2;
param[3] = arg3;
param[4] = arg4;
if (!l4_secure_clkdm)
l4_secure_clkdm = clkdm_lookup("l4_secure_clkdm");
clkdm_wakeup(l4_secure_clkdm);
/*
* Secure API needs physical address
* pointer for the parameters
*/
flush_cache_all();
outer_clean_range(__pa(param), __pa(param + 5));
ret = omap_smc2(idx, flag, __pa(param));
clkdm_allow_idle(l4_secure_clkdm);
return ret;
}
开发者ID:bossino,项目名称:panda_es_kernel,代码行数:39,代码来源:omap-secure.c
示例10: __cpu_suspend_save
/*
* This is called by __cpu_suspend() to save the state, and do whatever
* flushing is required to ensure that when the CPU goes to sleep we have
* the necessary data available when the caches are not searched.
*/
void __cpu_suspend_save(u32 *ptr, u32 ptrsz, u32 sp, u32 *save_ptr)
{
*save_ptr = virt_to_phys(ptr);
/* This must correspond to the LDM in cpu_resume() assembly */
*ptr++ = virt_to_phys(idmap_pgd);
*ptr++ = sp;
*ptr++ = virt_to_phys(cpu_do_resume);
cpu_do_suspend(ptr);
flush_cache_all();
outer_clean_range(*save_ptr, *save_ptr + ptrsz);
outer_clean_range(virt_to_phys(save_ptr),
virt_to_phys(save_ptr) + sizeof(*save_ptr));
}
开发者ID:jameshilliard,项目名称:NCS_CS_1.1L.10.20_consumer,代码行数:21,代码来源:suspend.c
示例11: unmap_single
static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
size_t size, enum dma_data_direction dir)
{
struct safe_buffer *buf = find_safe_buffer_dev(dev, dma_addr, "unmap");
if (buf) {
BUG_ON(buf->size != size);
BUG_ON(buf->direction != dir);
dev_dbg(dev,
"%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
__func__, buf->ptr, virt_to_dma(dev, buf->ptr),
buf->safe, buf->safe_dma_addr);
DO_STATS(dev->archdata.dmabounce->bounce_count++);
if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL) {
void *ptr = buf->ptr;
dev_dbg(dev,
"%s: copy back safe %p to unsafe %p size %d\n",
__func__, buf->safe, ptr, size);
memcpy(ptr, buf->safe, size);
dmac_clean_range(ptr, ptr + size);
outer_clean_range(__pa(ptr), __pa(ptr) + size);
}
free_safe_buffer(dev->archdata.dmabounce, buf);
}
}
开发者ID:leemgs,项目名称:OptimusOneKernel-KandroidCommunity,代码行数:31,代码来源:dmabounce.c
示例12: tegra_cpu_reset_handler_init
void __init tegra_cpu_reset_handler_init(void)
{
#ifdef CONFIG_SMP
__tegra_cpu_reset_handler_data[TEGRA_RESET_MASK_PRESENT] =
*((u32 *)cpu_present_mask);
__tegra_cpu_reset_handler_data[TEGRA_RESET_STARTUP_SECONDARY] =
virt_to_phys((void *)tegra_secondary_startup);
#endif
#ifdef CONFIG_PM_SLEEP
__tegra_cpu_reset_handler_data[TEGRA_RESET_STARTUP_LP1] =
TEGRA_IRAM_CODE_AREA;
__tegra_cpu_reset_handler_data[TEGRA_RESET_STARTUP_LP2] =
virt_to_phys((void *)tegra_resume);
#endif
/* Push all of reset handler data out to the L3 memory system. */
__cpuc_coherent_kern_range(
(unsigned long)&__tegra_cpu_reset_handler_data[0],
(unsigned long)&__tegra_cpu_reset_handler_data[TEGRA_RESET_DATA_SIZE]);
outer_clean_range(__pa(&__tegra_cpu_reset_handler_data[0]),
__pa(&__tegra_cpu_reset_handler_data[TEGRA_RESET_DATA_SIZE]));
tegra_cpu_reset_handler_enable();
}
开发者ID:Packmaan7144,项目名称:kernel_nvidia_s8515,代码行数:26,代码来源:reset.c
示例13: osl_cache_flush
inline void BCMFASTPATH
osl_cache_flush(void *va, uint size)
{
unsigned long paddr;
dmac_map_area(va, size, DMA_TX);
paddr = __pa(va);
outer_clean_range(paddr, paddr + size);
}
开发者ID:RyanAM,项目名称:gs5-kernel,代码行数:8,代码来源:linux_osl.c
示例14: boot_secondary
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
/*
* Set synchronisation state between this boot processor
* and the secondary one
*/
spin_lock(&boot_lock);
/*
* This is really belt and braces; we hold unintended secondary
* CPUs in the holding pen until we're ready for them. However,
* since we haven't sent them a soft interrupt, they shouldn't
* be there.
*/
writew((BSYM(virt_to_phys(vexpress_secondary_startup))>>16), SECOND_START_ADDR_HI);
writew(BSYM(virt_to_phys(vexpress_secondary_startup)), SECOND_START_ADDR_LO);
pen_release = cpu;
#if defined(CONFIG_MSTAR_STR_DBGMSG)
{
unsigned int *ptr=&pen_release;
printk("pen_release = 0x%08x, addr= 0x%08x, pen_release ptr = 0x%08x\n ",pen_release,&pen_release,*ptr);
}
#endif
__cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release));
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
/*
* Send the secondary CPU a soft interrupt, thereby causing
* the boot monitor to read the system wide flags register,
* and branch to the address found there.
*/
smp_cross_call(cpumask_of(cpu));
timeout = jiffies + (1 * HZ);
while (time_before(jiffies, timeout)) {
smp_rmb();
if (pen_release == -1)
break;
udelay(10);
}
#if defined(CONFIG_MSTAR_STR_DBGMSG)
{
unsigned int *ptr=&pen_release;
printk("pen_release = 0x%08x, addr= 0x%08x, pen_release ptr = 0x%08x\n ",pen_release,&pen_release,*ptr);
}
#endif
/*
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
spin_unlock(&boot_lock);
return pen_release != -1 ? -ENOSYS : 0;
}
开发者ID:Scorpio92,项目名称:mstar6a918,代码行数:58,代码来源:platsmp.c
示例15: mcpm_set_early_poke
void mcpm_set_early_poke(unsigned cpu, unsigned cluster,
unsigned long poke_phys_addr, unsigned long poke_val)
{
unsigned long *poke = &mcpm_entry_early_pokes[cluster][cpu][0];
poke[0] = poke_phys_addr;
poke[1] = poke_val;
__cpuc_flush_dcache_area((void *)poke, 8);
outer_clean_range(__pa(poke), __pa(poke + 2));
}
开发者ID:925outer,项目名称:BPI-M2P-bsp,代码行数:9,代码来源:mcpm_entry.c
示例16: sunxi_set_cpus_boot_entry
void sunxi_set_cpus_boot_entry(int cpu, void *entry)
{
if(cpu < NR_CPUS) {
cpus_boot_entry[cpu] = (void *)(virt_to_phys(entry));
smp_wmb();
__cpuc_flush_dcache_area(cpus_boot_entry, NR_CPUS*4);
outer_clean_range(__pa(&cpus_boot_entry), __pa(&cpus_boot_entry + 1));
}
}
开发者ID:alex-deng,项目名称:a33_linux,代码行数:9,代码来源:sunxi-platsmp.c
示例17: memory_engine_cache
int memory_engine_cache(memory_engine_t *engine, uint cmd,
shm_driver_operation_t op)
{
int res = 0;
memory_node_t *node;
char tag_clean[] = "clean";
char tag_invalidate[] = "invalidate";
char tag_cleanAndinvalidate[] = "clean and invalidate";
char *ptr_tag;
if (engine == NULL) {
return -EINVAL;
}
down(&(engine->m_mutex));
node = memory_engine_lookup_shm_node_for_cache(&(engine->m_shm_root),
op.m_param3, op.m_param2);
if ((node == NULL) || (node->m_next_free != NULL)) {
res = 0;
if (cmd == SHM_DEVICE_CMD_INVALIDATE) {
ptr_tag = tag_invalidate;
} else if (cmd == SHM_DEVICE_CMD_CLEAN) {
ptr_tag = tag_clean;
} else {
ptr_tag = tag_cleanAndinvalidate;
}
up(&(engine->m_mutex));
return res;
}
up(&(engine->m_mutex));
switch (cmd) {
case SHM_DEVICE_CMD_INVALIDATE:
dmac_map_area((const void *)op.m_param1,
op.m_param2, DMA_FROM_DEVICE);
outer_inv_range(op.m_param3,
op.m_param3 + op.m_param2);
break;
case SHM_DEVICE_CMD_CLEAN:
dmac_map_area((const void *)op.m_param1,
op.m_param2, DMA_TO_DEVICE);
outer_clean_range(op.m_param3,
op.m_param3 + op.m_param2);
break;
case SHM_DEVICE_CMD_CLEANANDINVALIDATE:
dmac_flush_range((const void *)op.m_param1,
(const void *)(op.m_param1 +
op.m_param2));
outer_flush_range(op.m_param3,
op.m_param3 + op.m_param2);
break;
default:
res = -ENOTTY;
}
return res;
}
开发者ID:Akheon23,项目名称:chromecast-mirrored-source.kernel,代码行数:57,代码来源:memory_engine.c
示例18: boot_secondary
int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
{
unsigned long timeout;
static int is_first_boot = 1;
printk(KERN_CRIT "Boot slave CPU\n");
/*
* Set synchronisation state between this boot processor
* and the secondary one
*/
spin_lock(&boot_lock);
HOTPLUG_INFO("boot_secondary, cpu: %d\n", cpu);
/*
* The secondary processor is waiting to be released from
* the holding pen - release it, then wait for it to flag
* that it has been released by resetting pen_release.
*
* Note that "pen_release" is the hardware CPU ID, whereas
* "cpu" is Linux's internal ID.
*/
pen_release = cpu;
__cpuc_flush_dcache_area((void *)&pen_release, sizeof(pen_release));
outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));
if (is_first_boot)
{
mt65xx_reg_sync_writel(SLAVE_MAGIC_NUM, SLAVE_MAGIC_REG);
is_first_boot = 0;
}
else
{
mt65xx_reg_sync_writel(virt_to_phys(mt_secondary_startup), BOOTROM_BOOT_ADDR);
}
power_on_cpu1();
smp_cross_call(cpumask_of(cpu));
timeout = jiffies + (1 * HZ);
while (time_before(jiffies, timeout)) {
smp_rmb();
if (pen_release == -1)
break;
udelay(10);
}
/*
* Now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
spin_unlock(&boot_lock);
return pen_release != -1 ? -ENOSYS : 0;
}
开发者ID:zbyte,项目名称:cink-slim,代码行数:56,代码来源:mt-smp.c
示例19: exynos_mem_paddr_cache_clean
static void exynos_mem_paddr_cache_clean(dma_addr_t start, size_t length)
{
if (length > (size_t) L2_FLUSH_ALL) {
flush_cache_all(); /* L1 */
smp_call_function((smp_call_func_t)__cpuc_flush_kern_all, NULL, 1);
outer_clean_all(); /* L2 */
} else if (length > (size_t) L1_FLUSH_ALL) {
dma_addr_t end = start + length - 1;
flush_cache_all(); /* L1 */
smp_call_function((smp_call_func_t)__cpuc_flush_kern_all, NULL, 1);
outer_clean_range(start, end); /* L2 */
} else {
dma_addr_t end = start + length - 1;
dmac_flush_range(phys_to_virt(start), phys_to_virt(end));
outer_clean_range(start, end); /* L2 */
}
}
开发者ID:jamesrenn,项目名称:T889_Kernel,代码行数:19,代码来源:exynos_mem.c
示例20: disable_early_ack
static inline void disable_early_ack(u32 mc_override)
{
static u32 override_val;
override_val = mc_override & (~MC_EMEM_ARB_OVERRIDE_EACK_MASK);
mc_writel(override_val, MC_EMEM_ARB_OVERRIDE);
__cpuc_flush_dcache_area(&override_val, sizeof(override_val));
outer_clean_range(__pa(&override_val), __pa(&override_val + 1));
override_val |= mc_override & MC_EMEM_ARB_OVERRIDE_EACK_MASK;
}
开发者ID:AndroidDeveloperAlliance,项目名称:ZenKernel_Grouper,代码行数:10,代码来源:tegra3_emc.c
注:本文中的outer_clean_range函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论