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 {
77974dd1bSBen Skeggs 	struct nvkm_device device;
87974dd1bSBen Skeggs 	struct platform_device *pdev;
92b700825SBen Skeggs 	int irq;
1043a70661SBen Skeggs 
1143a70661SBen Skeggs 	struct reset_control *rst;
1243a70661SBen Skeggs 	struct clk *clk;
1343a70661SBen Skeggs 	struct clk *clk_pwr;
1443a70661SBen Skeggs 
1543a70661SBen Skeggs 	struct regulator *vdd;
1643a70661SBen Skeggs 
1743a70661SBen Skeggs 	struct {
1843a70661SBen Skeggs 		/*
1943a70661SBen Skeggs 		 * Protects accesses to mm from subsystems
2043a70661SBen Skeggs 		 */
2143a70661SBen Skeggs 		struct mutex mutex;
2243a70661SBen Skeggs 
2343a70661SBen Skeggs 		struct nvkm_mm mm;
2443a70661SBen Skeggs 		struct iommu_domain *domain;
2543a70661SBen Skeggs 		unsigned long pgshift;
2643a70661SBen Skeggs 	} iommu;
2743a70661SBen Skeggs 
2843a70661SBen Skeggs 	int gpu_speedo;
297974dd1bSBen Skeggs };
307974dd1bSBen Skeggs 
317974dd1bSBen Skeggs int nvkm_device_tegra_new(struct platform_device *,
327974dd1bSBen Skeggs 			  const char *cfg, const char *dbg,
337974dd1bSBen Skeggs 			  bool detect, bool mmio, u64 subdev_mask,
347974dd1bSBen Skeggs 			  struct nvkm_device **);
357974dd1bSBen Skeggs #endif
36