| 201 | } |
| 202 | |
| 203 | static void |
| 204 | aw_mc_mp_start_cpu(bus_space_handle_t cpuscfg, bus_space_handle_t cpuxcfg, |
| 205 | bus_space_handle_t prcm, int cluster, int cpu) |
| 206 | { |
| 207 | uint32_t val; |
| 208 | int i; |
| 209 | |
| 210 | /* Assert core reset */ |
| 211 | val = bus_space_read_4(fdtbus_bs_tag, cpuxcfg, CPUX_CL_RST(cluster)); |
| 212 | val &= ~(1 << cpu); |
| 213 | bus_space_write_4(fdtbus_bs_tag, cpuxcfg, CPUX_CL_RST(cluster), val); |
| 214 | |
| 215 | /* Assert power-on reset */ |
| 216 | val = bus_space_read_4(fdtbus_bs_tag, cpuscfg, CPUS_CL_RST(cluster)); |
| 217 | val &= ~(1 << cpu); |
| 218 | bus_space_write_4(fdtbus_bs_tag, cpuscfg, CPUS_CL_RST(cluster), val); |
| 219 | |
| 220 | /* Disable automatic L1 cache invalidate at reset */ |
| 221 | val = bus_space_read_4(fdtbus_bs_tag, cpuxcfg, CPUX_CL_CTRL0(cluster)); |
| 222 | val &= ~(1 << cpu); |
| 223 | bus_space_write_4(fdtbus_bs_tag, cpuxcfg, CPUX_CL_CTRL0(cluster), val); |
| 224 | |
| 225 | /* Release power clamp */ |
| 226 | for (i = 0; i <= CPU_PWR_CLAMP_STEPS; i++) |
| 227 | bus_space_write_4(fdtbus_bs_tag, prcm, |
| 228 | PRCM_CL_PWR_CLAMP(cluster, cpu), 0xff >> i); |
| 229 | while (bus_space_read_4(fdtbus_bs_tag, prcm, |
| 230 | PRCM_CL_PWR_CLAMP(cluster, cpu)) != 0) |
| 231 | ; |
| 232 | |
| 233 | /* Clear power-off gating */ |
| 234 | val = bus_space_read_4(fdtbus_bs_tag, prcm, PRCM_CL_PWROFF(cluster)); |
| 235 | val &= ~(1 << cpu); |
| 236 | bus_space_write_4(fdtbus_bs_tag, prcm, PRCM_CL_PWROFF(cluster), val); |
| 237 | |
| 238 | /* De-assert power-on reset */ |
| 239 | val = bus_space_read_4(fdtbus_bs_tag, cpuscfg, CPUS_CL_RST(cluster)); |
| 240 | val |= (1 << cpu); |
| 241 | bus_space_write_4(fdtbus_bs_tag, cpuscfg, CPUS_CL_RST(cluster), val); |
| 242 | |
| 243 | /* De-assert core reset */ |
| 244 | val = bus_space_read_4(fdtbus_bs_tag, cpuxcfg, CPUX_CL_RST(cluster)); |
| 245 | val |= (1 << cpu); |
| 246 | bus_space_write_4(fdtbus_bs_tag, cpuxcfg, CPUX_CL_RST(cluster), val); |
| 247 | } |
| 248 | |
| 249 | static void |
| 250 | aw_mc_mp_start_ap(bus_space_handle_t cpuscfg, bus_space_handle_t cpuxcfg, |
no test coverage detected