Changeset 5d44981c in rtems


Ignore:
Timestamp:
Mar 20, 2018, 6:34:22 AM (13 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
5cf0656
Parents:
09dd82a
git-author:
Sebastian Huber <sebastian.huber@…> (03/20/18 06:34:22)
git-committer:
Sebastian Huber <sebastian.huber@…> (03/20/18 06:38:39)
Message:

bsp/qoriq: Fix bsp_restart()

Update #3085.

Location:
c/src/lib/libbsp/powerpc/qoriq/startup
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/powerpc/qoriq/startup/bsprestart.c

    r09dd82a r5d44981c  
    88
    99/*
    10  * Copyright (c) 2016 embedded brains GmbH.  All rights reserved.
     10 * Copyright (c) 2016, 2018 embedded brains GmbH.  All rights reserved.
    1111 *
    1212 *  embedded brains GmbH
     
    3030#include <libcpu/powerpc-utility.h>
    3131
     32#include <string.h>
     33
     34static char fdt_copy[BSP_FDT_BLOB_SIZE_MAX];
     35
    3236static RTEMS_NO_RETURN void do_restart(void *addr)
    3337{
    3438  void (*restart)(uintptr_t);
    35   uintptr_t fdt;
    3639
    3740  qoriq_reset_qman_and_bman();
    3841
     42  memcpy(fdt_copy, bsp_fdt_get(), sizeof(fdt_copy));
     43  rtems_cache_flush_multiple_data_lines(fdt_copy, sizeof(fdt_copy));
     44
    3945  restart = addr;
    40 
    41   fdt = (uintptr_t) bsp_fdt_get();
    42 #ifdef BSP_FDT_BLOB_READ_ONLY
    43   fdt -= (uintptr_t) bsp_section_rodata_begin;
    44   fdt += (uintptr_t) bsp_section_rodata_load_begin;
    45 #endif
    46 
    47   (*restart)(fdt);
     46  (*restart)((uintptr_t) fdt_copy);
    4847  bsp_fatal(QORIQ_FATAL_RESTART_FAILED);
    4948}
  • c/src/lib/libbsp/powerpc/qoriq/startup/mmu-config.c

    r09dd82a r5d44981c  
    259259                int len;
    260260                const void *val;
    261                 uint64_t begin;
    262                 uint64_t size;
     261                uint64_t mem_begin;
     262                uint64_t mem_size;
    263263
    264264                val = fdt_getprop(fdt, node, "reg", &len);
    265265                if (len == 8) {
    266                         begin = fdt32_to_cpu(((fdt32_t *) val)[0]);
    267                         size = fdt32_to_cpu(((fdt32_t *) val)[1]);
     266                        mem_begin = fdt32_to_cpu(((fdt32_t *) val)[0]);
     267                        mem_size = fdt32_to_cpu(((fdt32_t *) val)[1]);
    268268                } else if (len == 16) {
    269                         begin = fdt64_to_cpu(((fdt64_t *) val)[0]);
    270                         size = fdt64_to_cpu(((fdt64_t *) val)[1]);
     269                        mem_begin = fdt64_to_cpu(((fdt64_t *) val)[0]);
     270                        mem_size = fdt64_to_cpu(((fdt64_t *) val)[1]);
    271271                } else {
    272                         begin = 0;
    273                         size = 0;
     272                        mem_begin = 0;
     273                        mem_size = 0;
    274274                }
    275275
    276276#ifndef __powerpc64__
    277                 size = MIN(size, 0x80000000U);
     277                mem_size = MIN(mem_size, 0x80000000U);
    278278#endif
    279279
    280280                if (
    281                         begin == 0
    282                                 && size > (uintptr_t) bsp_section_work_end
     281                        mem_begin == 0
     282                                && mem_size > (uintptr_t) bsp_section_work_end
    283283                                && (uintptr_t) bsp_section_nocache_end
    284284                                        < (uintptr_t) bsp_section_work_end
    285285                ) {
    286                         config[WORKSPACE_ENTRY_INDEX].size += (uintptr_t) size
    287                                 - (uintptr_t) bsp_section_work_end;
     286                        /* Assign new value to allow a bsp_restart() */
     287                        config[WORKSPACE_ENTRY_INDEX].size = (uintptr_t) mem_size
     288                                - (uintptr_t) bsp_section_work_begin;
    288289                }
    289290        }
Note: See TracChangeset for help on using the changeset viewer.