The ADSP OS requires carveouts where SMMU is not avialable or
is not being used by ADSP OS.
Bug
1351881
Change-Id: I46bfa682fd727059f3874e9deca75ffd607c0ae0
Signed-off-by: Ajay Nandakumar <anandakumarm@nvidia.com>
Reviewed-on: http://git-master/r/375878
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Bo Yan <byan@nvidia.com>
Tested-by: Bo Yan <byan@nvidia.com>
void __init tegra14x_init_early(void);
void __init tegra21x_init_early(void);
void __init tegra_map_common_io(void);
+phys_addr_t __init tegra_reserve_adsp(unsigned long size);
void __init tegra_reserve(unsigned long carveout_size, unsigned long fb_size,
unsigned long fb2_size);
void __init tegra_reserve4(ulong carveout_size, ulong fb_size,
static inline void __init tegra_reserve_bpmp(void) {}
#endif
+phys_addr_t __init tegra_reserve_adsp(unsigned long size)
+{
+ phys_addr_t reserve = memblock_end_of_4G() - size;
+ if (memblock_remove(reserve, size)) {
+ pr_err("%s failed for %llx:%lx\n",
+ __func__, (u64)reserve, size);
+ }
+ pr_info("%s: reserved %llx:%lx\n",
+ __func__, (u64)reserve, size);
+ return reserve;
+}
+
void __init tegra_reserve(unsigned long carveout_size, unsigned long fb_size,
unsigned long fb2_size)
{
#include <linux/kernel.h>
#include <linux/of.h>
#include <linux/of_platform.h>
+#include <linux/tegra_nvadsp.h>
#include <asm/mach/arch.h>
&t210_nvmap_device,
};
+#if defined(CONFIG_TEGRA_NVADSP)
+static struct nvadsp_platform_data nvadsp_plat_data;
+#endif
+
static void __init tegra_t210_reserve(void)
{
+#if defined(CONFIG_TEGRA_NVADSP)
+ nvadsp_plat_data.co_pa = tegra_reserve_adsp(SZ_128M);
+ nvadsp_plat_data.co_size = SZ_32M;
+#endif
+
#if defined(CONFIG_NVMAP_CONVERT_CARVEOUT_TO_IOVMM)
tegra_reserve(0, SZ_16M + SZ_2M, SZ_4M);
#else
NULL),
OF_DEV_AUXDATA("nvidia,tegra114-hsuart", 0x70006200, "serial-tegra.2",
NULL),
+#ifdef CONFIG_TEGRA_NVADSP
+ OF_DEV_AUXDATA("nvidia,tegra210-adsp", TEGRA_APE_AMC_BASE,
+ "tegra210-adsp", &nvadsp_plat_data),
+#endif
{}
};
#include <linux/completion.h>
#include <linux/dma-mapping.h>
+struct nvadsp_platform_data {
+ phys_addr_t co_pa;
+ unsigned long co_size;
+};
+
typedef int status_t;
/*