/******************************************************************************* * This function takes the base address of the CCN's programmer's view (PV), a * region ID of one of the 256 regions (0-255), a register offset within the * region and a value. It converts the first two parameters into a base address * and uses it to write the value in the register at the offset. ******************************************************************************/ static inline void ccn_reg_write(uintptr_t periphbase, unsigned int region_id, unsigned int register_offset, unsigned long long value) { uintptr_t region_base; assert(periphbase); assert(region_id < REGION_ID_LIMIT); region_base = periphbase + region_id_to_base(region_id); mmio_write_64(region_base + register_offset, value); }
void hisi_pwrc_set_core_bx_addr(unsigned int core, unsigned int cluster, uintptr_t entry_point) { uintptr_t *core_entry = (uintptr_t *)PWRCTRL_ACPU_ASM_D_ARM_PARA_AD; unsigned int i; if (!core_entry) { INFO("%s: core entry point is null!\n", __func__); return; } i = cluster * CLUSTER_CORE_COUNT + core; mmio_write_64((uintptr_t)(core_entry + i), entry_point); }