video: tegra: gk20a: move pmu firmware to struct gk20a
[linux-3.10.git] / drivers / video / tegra / host / gk20a / gk20a.h
index 677c131..bc96a04 100644 (file)
@@ -3,7 +3,7 @@
  *
  * GK20A Graphics
  *
- * Copyright (c) 2011, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2011-2013, 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,
@@ -35,7 +35,6 @@ struct gr_gk20a;
 struct sim_gk20a;
 
 #include <mach/hardware.h>
-
 #include "clk_gk20a.h"
 #include "fifo_gk20a.h"
 #include "gr_gk20a.h"
@@ -58,7 +57,7 @@ struct gk20a {
        struct resource *bar1_mem;
        void __iomem *bar1;
 
-       bool first_init;
+       bool power_on;
        bool irq_requested;
 
        struct clk_gk20a clk;
@@ -68,6 +67,11 @@ struct gk20a {
        struct mm_gk20a mm;
        struct pmu_gk20a pmu;
 
+       /* Save pmu fw here so that it lives cross suspend/resume.
+          pmu suspend destroys all pmu sw/hw states. Loading pmu
+          fw in resume crashes when the resume is from sys_exit. */
+       const struct firmware *pmu_fw;
+
        void (*remove_support)(struct platform_device *);
 };
 
@@ -76,6 +80,32 @@ static inline struct gk20a *get_gk20a(struct platform_device *dev)
        return (struct gk20a *)nvhost_get_private_data(dev);
 }
 
+enum BAR0_DEBUG_OPERATION {
+       BARO_ZERO_NOP = 0,
+       OP_END,
+       BAR0_READ32,
+       BAR0_WRITE32,
+};
+
+struct share_buffer_head {
+       enum BAR0_DEBUG_OPERATION operation;
+/* size of the operation item */
+       u32 size;
+       u32 failed;
+       u32 completed;
+};
+
+struct gk20a_cyclestate_buffer_elem {
+       struct share_buffer_head        head;
+/* IN */
+       u32                       offsetBAR0;
+       u16                       firstBit;
+       u16                       lastBit;
+/* OUT */
+/* keep 64 bits to be consistent */
+       u64                       data;
+};
+
 extern const struct nvhost_as_moduleops gk20a_as_moduleops;
 
 /* register accessors */
@@ -136,9 +166,11 @@ static inline u32 set_field(u32 val, u32 mask, u32 field)
 /* invalidate channel lookup tlb */
 static inline void gk20a_gr_flush_channel_tlb(struct gr_gk20a *gr)
 {
+       spin_lock(&gr->ch_tlb_lock);
        memset(gr->chid_tlb, 0,
                sizeof(struct gr_channel_map_tlb_entry) *
                GR_CHANNEL_MAP_TLB_SIZE);
+       spin_unlock(&gr->ch_tlb_lock);
 }
 
 /* This function can be called from two places, whichever comes first.
@@ -166,7 +198,7 @@ enum {
 #if defined (CONFIG_TEGRA_GK20A_PMU)
 static inline int support_gk20a_pmu(void)
 {
-       return ((tegra_revision != TEGRA_REVISION_QT) ? 1 : 0);
+       return 1;
 }
 #else
 static inline int support_gk20a_pmu(void){return 0;}