int cbmem_initialize(void) { struct cbmem_root *root; void *top_according_to_root; root = get_root(); /* No recovery possible since root couldn't be recovered. */ if (root == NULL) return cbmem_fail_recovery(); /* Sanity check the root. */ top_according_to_root = (void *)(root->size + (unsigned long)root); if (get_top_aligned() != top_according_to_root) return cbmem_fail_recovery(); if (root->num_entries > root->max_entries) return cbmem_fail_recovery(); if ((root->max_entries * sizeof(struct cbmem_entry)) > (root->size - sizeof(struct cbmem_root_pointer) - sizeof(*root))) return cbmem_fail_recovery(); /* Validate current entries. */ if (validate_entries(root)) return cbmem_fail_recovery(); #if defined(__PRE_RAM__) /* Lock the root in the romstage on a recovery. The assumption is that * recovery is called during romstage on the S3 resume path. */ root->locked = 1; #endif cbmem_arch_init(); /* Migrate cache-as-ram variables. */ car_migrate_variables(); /* Recovery successful. */ return 0; }
int cbmem_initialize(void) { struct cbmem_root *root; uintptr_t top_according_to_root; root = get_root(); /* No recovery possible since root couldn't be recovered. */ if (root == NULL) return cbmem_fail_recovery(); /* Sanity check the root. */ top_according_to_root = (root->size + (uintptr_t)root); if (get_top_aligned() != top_according_to_root) return cbmem_fail_recovery(); if (root->num_entries > root->max_entries) return cbmem_fail_recovery(); if ((root->max_entries * sizeof(struct cbmem_entry)) > (root->size - sizeof(struct cbmem_root_pointer) - sizeof(*root))) return cbmem_fail_recovery(); /* Validate current entries. */ if (validate_entries(root)) return cbmem_fail_recovery(); #if defined(__PRE_RAM__) /* Lock the root in the romstage on a recovery. The assumption is that * recovery is called during romstage on the S3 resume path. */ root->locked = 1; #endif /* Complete migration to CBMEM. */ cbmem_run_init_hooks(); /* Recovery successful. */ return 0; }