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