* @associativity: variable to return the calculated associativity in
  * @max_way_size: the maximum size in bytes for the cache ways
  */
-static void __init l2x0_cache_size_of_parse(const struct device_node *np,
+static int __init l2x0_cache_size_of_parse(const struct device_node *np,
                                            u32 *aux_val, u32 *aux_mask,
                                            u32 *associativity,
                                            u32 max_way_size)
        of_property_read_u32(np, "cache-line-size", &line_size);
 
        if (!cache_size || !sets)
-               return;
+               return -ENODEV;
 
        /* All these l2 caches have the same line = block size actually */
        if (!line_size) {
 
        if (way_size > max_way_size) {
                pr_err("L2C OF: set size %dKB is too large\n", way_size);
-               return;
+               return -EINVAL;
        }
 
        pr_info("L2C OF: override cache size: %d bytes (%dKB)\n",
        if (way_size_bits < 1 || way_size_bits > 6) {
                pr_err("L2C OF: cache way size illegal: %dKB is not mapped\n",
                       way_size);
-               return;
+               return -EINVAL;
        }
 
        mask |= L2C_AUX_CTRL_WAY_SIZE_MASK;
        *aux_val &= ~mask;
        *aux_val |= val;
        *aux_mask &= ~mask;
+
+       return 0;
 }
 
 static void __init l2x0_of_parse(const struct device_node *np,
        u32 dirty = 0;
        u32 val = 0, mask = 0;
        u32 assoc;
+       int ret;
 
        of_property_read_u32(np, "arm,tag-latency", &tag);
        if (tag) {
                val |= (dirty - 1) << L2X0_AUX_CTRL_DIRTY_LATENCY_SHIFT;
        }
 
-       l2x0_cache_size_of_parse(np, aux_val, aux_mask, &assoc, SZ_256K);
+       ret = l2x0_cache_size_of_parse(np, aux_val, aux_mask, &assoc, SZ_256K);
+       if (ret)
+               return;
+
        if (assoc > 8) {
                pr_err("l2x0 of: cache setting yield too high associativity\n");
                pr_err("l2x0 of: %d calculated, max 8\n", assoc);
        u32 tag[3] = { 0, 0, 0 };
        u32 filter[2] = { 0, 0 };
        u32 assoc;
+       int ret;
 
        of_property_read_u32_array(np, "arm,tag-latency", tag, ARRAY_SIZE(tag));
        if (tag[0] && tag[1] && tag[2])
                               l2x0_base + L310_ADDR_FILTER_START);
        }
 
-       l2x0_cache_size_of_parse(np, aux_val, aux_mask, &assoc, SZ_512K);
+       ret = l2x0_cache_size_of_parse(np, aux_val, aux_mask, &assoc, SZ_512K);
+       if (ret)
+               return;
+
        switch (assoc) {
        case 16:
                *aux_val &= ~L2X0_AUX_CTRL_ASSOC_MASK;