17974dd1bSBen Skeggs #ifndef __NVKM_DEVICE_TEGRA_H__
27974dd1bSBen Skeggs #define __NVKM_DEVICE_TEGRA_H__
37974dd1bSBen Skeggs #include <core/device.h>
443a70661SBen Skeggs #include <core/mm.h>
57974dd1bSBen Skeggs 
67974dd1bSBen Skeggs struct nvkm_device_tegra {
7e396ecd1SAlexandre Courbot 	const struct nvkm_device_tegra_func *func;
87974dd1bSBen Skeggs 	struct nvkm_device device;
97974dd1bSBen Skeggs 	struct platform_device *pdev;
102b700825SBen Skeggs 	int irq;
1143a70661SBen Skeggs 
1243a70661SBen Skeggs 	struct reset_control *rst;
1343a70661SBen Skeggs 	struct clk *clk;
1434440ed6SAlexandre Courbot 	struct clk *clk_ref;
1543a70661SBen Skeggs 	struct clk *clk_pwr;
1643a70661SBen Skeggs 
1743a70661SBen Skeggs 	struct regulator *vdd;
1843a70661SBen Skeggs 
1943a70661SBen Skeggs 	struct {
2043a70661SBen Skeggs 		/*
2143a70661SBen Skeggs 		 * Protects accesses to mm from subsystems
2243a70661SBen Skeggs 		 */
2343a70661SBen Skeggs 		struct mutex mutex;
2443a70661SBen Skeggs 
2543a70661SBen Skeggs 		struct nvkm_mm mm;
2643a70661SBen Skeggs 		struct iommu_domain *domain;
2743a70661SBen Skeggs 		unsigned long pgshift;
2843a70661SBen Skeggs 	} iommu;
2943a70661SBen Skeggs 
3043a70661SBen Skeggs 	int gpu_speedo;
317974dd1bSBen Skeggs };
327974dd1bSBen Skeggs 
33e396ecd1SAlexandre Courbot struct nvkm_device_tegra_func {
34e396ecd1SAlexandre Courbot 	/*
35e396ecd1SAlexandre Courbot 	 * If an IOMMU is used, indicates which address bit will trigger a
36e396ecd1SAlexandre Courbot 	 * IOMMU translation when set (when this bit is not set, IOMMU is
37e396ecd1SAlexandre Courbot 	 * bypassed). A value of 0 means an IOMMU is never used.
38e396ecd1SAlexandre Courbot 	 */
39e396ecd1SAlexandre Courbot 	u8 iommu_bit;
4034440ed6SAlexandre Courbot 	/*
4134440ed6SAlexandre Courbot 	 * Whether the chip requires a reference clock
4234440ed6SAlexandre Courbot 	 */
4334440ed6SAlexandre Courbot 	bool require_ref_clk;
44e396ecd1SAlexandre Courbot };
45e396ecd1SAlexandre Courbot 
46e396ecd1SAlexandre Courbot int nvkm_device_tegra_new(const struct nvkm_device_tegra_func *,
47e396ecd1SAlexandre Courbot 			  struct platform_device *,
487974dd1bSBen Skeggs 			  const char *cfg, const char *dbg,
497974dd1bSBen Skeggs 			  bool detect, bool mmio, u64 subdev_mask,
507974dd1bSBen Skeggs 			  struct nvkm_device **);
517974dd1bSBen Skeggs #endif
52