Rev 5060 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5060 | Rev 6084 | ||
---|---|---|---|
Line 47... | Line 47... | ||
47 | 47 | ||
48 | cmd = (devfn << IOSF_DEVFN_SHIFT) | (opcode << IOSF_OPCODE_SHIFT) | |
48 | cmd = (devfn << IOSF_DEVFN_SHIFT) | (opcode << IOSF_OPCODE_SHIFT) | |
49 | (port << IOSF_PORT_SHIFT) | (be << IOSF_BYTE_ENABLES_SHIFT) | |
49 | (port << IOSF_PORT_SHIFT) | (be << IOSF_BYTE_ENABLES_SHIFT) | |
Line 50... | Line 50... | ||
50 | (bar << IOSF_BAR_SHIFT); |
50 | (bar << IOSF_BAR_SHIFT); |
Line 51... | Line 51... | ||
51 | 51 | ||
52 | WARN_ON(!mutex_is_locked(&dev_priv->dpio_lock)); |
52 | WARN_ON(!mutex_is_locked(&dev_priv->sb_lock)); |
53 | 53 | ||
54 | if (wait_for((I915_READ(VLV_IOSF_DOORBELL_REQ) & IOSF_SB_BUSY) == 0, 5)) { |
54 | if (wait_for((I915_READ(VLV_IOSF_DOORBELL_REQ) & IOSF_SB_BUSY) == 0, 5)) { |
Line 73... | Line 73... | ||
73 | I915_WRITE(VLV_IOSF_DATA, 0); |
73 | I915_WRITE(VLV_IOSF_DATA, 0); |
Line 74... | Line 74... | ||
74 | 74 | ||
75 | return 0; |
75 | return 0; |
Line 76... | Line 76... | ||
76 | } |
76 | } |
77 | 77 | ||
78 | u32 vlv_punit_read(struct drm_i915_private *dev_priv, u8 addr) |
78 | u32 vlv_punit_read(struct drm_i915_private *dev_priv, u32 addr) |
Line 79... | Line 79... | ||
79 | { |
79 | { |
Line 80... | Line 80... | ||
80 | u32 val = 0; |
80 | u32 val = 0; |
81 | 81 | ||
82 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
82 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
83 | 83 | ||
Line 84... | Line 84... | ||
84 | mutex_lock(&dev_priv->dpio_lock); |
84 | mutex_lock(&dev_priv->sb_lock); |
85 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_PUNIT, |
85 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_PUNIT, |
Line 86... | Line 86... | ||
86 | SB_CRRDDA_NP, addr, &val); |
86 | SB_CRRDDA_NP, addr, &val); |
87 | mutex_unlock(&dev_priv->dpio_lock); |
87 | mutex_unlock(&dev_priv->sb_lock); |
88 | 88 | ||
Line 89... | Line 89... | ||
89 | return val; |
89 | return val; |
90 | } |
90 | } |
91 | 91 | ||
92 | void vlv_punit_write(struct drm_i915_private *dev_priv, u8 addr, u32 val) |
92 | void vlv_punit_write(struct drm_i915_private *dev_priv, u32 addr, u32 val) |
93 | { |
93 | { |
Line 94... | Line 94... | ||
94 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
94 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
95 | 95 | ||
96 | mutex_lock(&dev_priv->dpio_lock); |
96 | mutex_lock(&dev_priv->sb_lock); |
Line 97... | Line 97... | ||
97 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_PUNIT, |
97 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_PUNIT, |
98 | SB_CRWRDA_NP, addr, &val); |
98 | SB_CRWRDA_NP, addr, &val); |
Line 99... | Line 99... | ||
99 | mutex_unlock(&dev_priv->dpio_lock); |
99 | mutex_unlock(&dev_priv->sb_lock); |
100 | } |
100 | } |
Line 101... | Line 101... | ||
101 | 101 | ||
102 | u32 vlv_bunit_read(struct drm_i915_private *dev_priv, u32 reg) |
102 | u32 vlv_bunit_read(struct drm_i915_private *dev_priv, u32 reg) |
103 | { |
103 | { |
104 | u32 val = 0; |
104 | u32 val = 0; |
105 | 105 | ||
Line 106... | Line 106... | ||
106 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_BUNIT, |
106 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_BUNIT, |
107 | SB_CRRDDA_NP, reg, &val); |
107 | SB_CRRDDA_NP, reg, &val); |
108 | 108 | ||
Line 109... | Line 109... | ||
109 | return val; |
109 | return val; |
Line 110... | Line 110... | ||
110 | } |
110 | } |
111 | 111 | ||
112 | void vlv_bunit_write(struct drm_i915_private *dev_priv, u32 reg, u32 val) |
112 | void vlv_bunit_write(struct drm_i915_private *dev_priv, u32 reg, u32 val) |
113 | { |
113 | { |
Line 114... | Line 114... | ||
114 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_BUNIT, |
114 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_BUNIT, |
115 | SB_CRWRDA_NP, reg, &val); |
115 | SB_CRWRDA_NP, reg, &val); |
Line 116... | Line 116... | ||
116 | } |
116 | } |
117 | 117 | ||
118 | u32 vlv_nc_read(struct drm_i915_private *dev_priv, u8 addr) |
118 | u32 vlv_nc_read(struct drm_i915_private *dev_priv, u8 addr) |
119 | { |
119 | { |
120 | u32 val = 0; |
120 | u32 val = 0; |
121 | 121 | ||
122 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
122 | WARN_ON(!mutex_is_locked(&dev_priv->rps.hw_lock)); |
Line 123... | Line 123... | ||
123 | 123 | ||
124 | mutex_lock(&dev_priv->dpio_lock); |
124 | mutex_lock(&dev_priv->sb_lock); |
125 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_NC, |
125 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_NC, |
126 | SB_CRRDDA_NP, addr, &val); |
126 | SB_CRRDDA_NP, addr, &val); |
127 | mutex_unlock(&dev_priv->dpio_lock); |
127 | mutex_unlock(&dev_priv->sb_lock); |
Line 128... | Line 128... | ||
128 | 128 | ||
129 | return val; |
129 | return val; |
130 | } |
130 | } |
131 | 131 | ||
132 | u32 vlv_gpio_nc_read(struct drm_i915_private *dev_priv, u32 reg) |
132 | u32 vlv_gpio_nc_read(struct drm_i915_private *dev_priv, u32 reg) |
133 | { |
133 | { |
134 | u32 val = 0; |
134 | u32 val = 0; |
Line 135... | Line 135... | ||
135 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_GPIO_NC, |
135 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_GPIO_NC, |
136 | SB_CRRDDA_NP, reg, &val); |
136 | SB_CRRDDA_NP, reg, &val); |
137 | return val; |
137 | return val; |
138 | } |
138 | } |
139 | 139 | ||
Line 140... | Line 140... | ||
140 | void vlv_gpio_nc_write(struct drm_i915_private *dev_priv, u32 reg, u32 val) |
140 | void vlv_gpio_nc_write(struct drm_i915_private *dev_priv, u32 reg, u32 val) |
141 | { |
141 | { |
142 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_GPIO_NC, |
142 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_GPIO_NC, |
143 | SB_CRWRDA_NP, reg, &val); |
143 | SB_CRWRDA_NP, reg, &val); |
144 | } |
144 | } |
145 | 145 | ||
146 | u32 vlv_cck_read(struct drm_i915_private *dev_priv, u32 reg) |
146 | u32 vlv_cck_read(struct drm_i915_private *dev_priv, u32 reg) |
Line 147... | Line 147... | ||
147 | { |
147 | { |
148 | u32 val = 0; |
148 | u32 val = 0; |
149 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_CCK, |
149 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_CCK, |
150 | SB_CRRDDA_NP, reg, &val); |
150 | SB_CRRDDA_NP, reg, &val); |
151 | return val; |
151 | return val; |
Line 152... | Line 152... | ||
152 | } |
152 | } |
153 | 153 | ||
154 | void vlv_cck_write(struct drm_i915_private *dev_priv, u32 reg, u32 val) |
154 | void vlv_cck_write(struct drm_i915_private *dev_priv, u32 reg, u32 val) |
155 | { |
155 | { |
156 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_CCK, |
156 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_CCK, |
157 | SB_CRWRDA_NP, reg, &val); |
157 | SB_CRWRDA_NP, reg, &val); |
158 | } |
158 | } |
Line 159... | Line 159... | ||
159 | 159 | ||
160 | u32 vlv_ccu_read(struct drm_i915_private *dev_priv, u32 reg) |
160 | u32 vlv_ccu_read(struct drm_i915_private *dev_priv, u32 reg) |
161 | { |
161 | { |
162 | u32 val = 0; |
162 | u32 val = 0; |
163 | vlv_sideband_rw(dev_priv, PCI_DEVFN(2, 0), IOSF_PORT_CCU, |
163 | vlv_sideband_rw(dev_priv, PCI_DEVFN(0, 0), IOSF_PORT_CCU, |
Line 164... | Line 164... | ||
164 | SB_CRRDDA_NP, reg, &val); |
164 | SB_CRRDDA_NP, reg, &val); |
165 | return val; |
165 | return val; |
Line 211... | Line 211... | ||
211 | /* SBI access */ |
211 | /* SBI access */ |
212 | u32 intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg, |
212 | u32 intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg, |
213 | enum intel_sbi_destination destination) |
213 | enum intel_sbi_destination destination) |
214 | { |
214 | { |
215 | u32 value = 0; |
215 | u32 value = 0; |
216 | WARN_ON(!mutex_is_locked(&dev_priv->dpio_lock)); |
216 | WARN_ON(!mutex_is_locked(&dev_priv->sb_lock)); |
Line 217... | Line 217... | ||
217 | 217 | ||
218 | if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, |
218 | if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, |
219 | 100)) { |
219 | 100)) { |
220 | DRM_ERROR("timeout waiting for SBI to become ready\n"); |
220 | DRM_ERROR("timeout waiting for SBI to become ready\n"); |
Line 241... | Line 241... | ||
241 | void intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value, |
241 | void intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value, |
242 | enum intel_sbi_destination destination) |
242 | enum intel_sbi_destination destination) |
243 | { |
243 | { |
244 | u32 tmp; |
244 | u32 tmp; |
Line 245... | Line 245... | ||
245 | 245 | ||
Line 246... | Line 246... | ||
246 | WARN_ON(!mutex_is_locked(&dev_priv->dpio_lock)); |
246 | WARN_ON(!mutex_is_locked(&dev_priv->sb_lock)); |
247 | 247 | ||
248 | if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, |
248 | if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_BUSY) == 0, |
249 | 100)) { |
249 | 100)) { |