| 2189 | } |
| 2190 | |
| 2191 | void |
| 2192 | decode_win_xor_setup(u_long base) |
| 2193 | { |
| 2194 | uint32_t br, sz; |
| 2195 | int i, j, z, e = 1, m, window; |
| 2196 | |
| 2197 | if (pm_is_disabled(CPU_PM_CTRL_XOR)) |
| 2198 | return; |
| 2199 | |
| 2200 | /* |
| 2201 | * Disable and clear all XOR windows, revoke protection for all |
| 2202 | * channels |
| 2203 | */ |
| 2204 | m = xor_max_eng(); |
| 2205 | for (j = 0; j < m; j++, e--) { |
| 2206 | /* Number of non-remaped windows */ |
| 2207 | window = MV_XOR_NON_REMAP - 1; |
| 2208 | |
| 2209 | for (i = 0; i < MV_WIN_XOR_MAX; i++) { |
| 2210 | win_xor_br_write(base, i, e, 0); |
| 2211 | win_xor_sz_write(base, i, e, 0); |
| 2212 | } |
| 2213 | |
| 2214 | if (win_xor_can_remap(i) == 1) |
| 2215 | win_xor_har_write(base, i, e, 0); |
| 2216 | |
| 2217 | for (i = 0; i < MV_XOR_CHAN_MAX; i++) { |
| 2218 | win_xor_ctrl_write(base, i, e, 0); |
| 2219 | xor_active_dram(base, i, e, &window); |
| 2220 | } |
| 2221 | |
| 2222 | /* |
| 2223 | * Remaining targets -- from a statically defined table |
| 2224 | */ |
| 2225 | for (i = 0; i < xor_wins_no; i++) |
| 2226 | if (xor_wins[i].target > 0) { |
| 2227 | br = (xor_wins[i].base & 0xffff0000) | |
| 2228 | (xor_wins[i].attr << 8) | |
| 2229 | xor_wins[i].target; |
| 2230 | sz = ((xor_wins[i].size - 1) & 0xffff0000); |
| 2231 | |
| 2232 | /* Set the first free XOR window */ |
| 2233 | for (z = 0; z < MV_WIN_XOR_MAX; z++) { |
| 2234 | if (xor_ctrl_read(base, z, 0, e) && |
| 2235 | xor_ctrl_read(base, z, 1, e)) |
| 2236 | continue; |
| 2237 | |
| 2238 | /* Configure window */ |
| 2239 | win_xor_br_write(base, z, e, br); |
| 2240 | win_xor_sz_write(base, z, e, sz); |
| 2241 | if (win_xor_can_remap(z) && |
| 2242 | xor_wins[z].remap >= 0) |
| 2243 | win_xor_har_write(base, z, e, |
| 2244 | xor_wins[z].remap); |
| 2245 | |
| 2246 | /* Set protection RW on all channels */ |
| 2247 | xor_set_prot(base, z, e, 0x3); |
| 2248 |
nothing calls this directly
no test coverage detected