mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
Implement support for 64kB large page size. Add an API to create an address space via IOCTL so that we can accept flags, and assign one flag for enabling 64kB large page size. Also adds APIs to set per-context large page size. This is possible only on Maxwell, so return error if caller tries to set large page size on Kepler. Default large page size is still 128kB. Change-Id: I20b51c8f6d4a984acae8411ace3de9000c78e82f Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
52 lines
1.4 KiB
C
52 lines
1.4 KiB
C
/*
|
|
* GK20A memory interface
|
|
*
|
|
* Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope 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.
|
|
*/
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "gk20a.h"
|
|
#include "kind_gk20a.h"
|
|
#include "hw_mc_gk20a.h"
|
|
#include "hw_fb_gk20a.h"
|
|
|
|
static void fb_gk20a_reset(struct gk20a *g)
|
|
{
|
|
gk20a_dbg_info("reset gk20a fb");
|
|
|
|
gk20a_reset(g, mc_enable_pfb_enabled_f()
|
|
| mc_enable_l2_enabled_f()
|
|
| mc_enable_xbar_enabled_f()
|
|
| mc_enable_hub_enabled_f());
|
|
}
|
|
|
|
static void gk20a_fb_set_mmu_page_size(struct gk20a *g)
|
|
{
|
|
/* set large page size in fb */
|
|
u32 fb_mmu_ctrl = gk20a_readl(g, fb_mmu_ctrl_r());
|
|
|
|
fb_mmu_ctrl = (fb_mmu_ctrl &
|
|
~fb_mmu_ctrl_vm_pg_size_f(~0x0)) |
|
|
fb_mmu_ctrl_vm_pg_size_128kb_f();
|
|
|
|
gk20a_writel(g, fb_mmu_ctrl_r(), fb_mmu_ctrl);
|
|
}
|
|
|
|
void gk20a_init_fb(struct gpu_ops *gops)
|
|
{
|
|
gops->fb.reset = fb_gk20a_reset;
|
|
gops->fb.set_mmu_page_size = gk20a_fb_set_mmu_page_size;
|
|
gk20a_init_uncompressed_kind_map();
|
|
gk20a_init_kind_attr();
|
|
}
|