Freescale MPC5121e

Jump to navigationJump to search

Cache Coherency failure with the Freescale MPC5121e v1.5

The CPU cache coherency of the DMA arbiter in the v1.5 series of the MPC5121e is broken. Be sure that you are working with at least the 2.0 version of the 5121e. Earlier versions will work for hours or day under moderate load before corrupting memory. The failure mode is rather subtle because most often IO cache becomes corrupted, which may not immediately cause a kernel or userspace crash. What most often happens is that File data and filesystems may be corrupted because bad data is written to dirty pages, which may eventually be written to disk. The problem is not easily reproducible since it depends on both the state of data in memory and the timing and order of DMA bus arbiter requests to trigger the problem. The best way to stress test for this kind of problem is to force the Linux kernel to use less than the full physical memory (see kernel parameter mem=nn[MKG]), and stress the system with high process loads, high CPU loads, high memory loads, and heavy disk IO (must cover unique blocks to fill as much RAM as possible in the Linux pagecache. Reboot the system periodically then run a full fsck to check for filesystem corruption. Other failure modes include system freeze and processes dying with unspecific memory faults.

framebuffer configuration

These are the settings for 480x272 video mode on the Freescale 5121e SOC (a PowerPC CPU core). Put these settings in the file, /etc/fb.modes. Then you should be able to set the mode using `fbset 480x272-60`.

mode "480x272-60"
    # D: 8.467 MHz, H: 16.800 kHz, V: 59.999 Hz
    geometry 480 272 480 272 32
    timings 118105 8 8 2 4 8 2
    vsync high
    csync high
    nonstd 10
    rgba 8/16,8/8,8/0,8/24

You can fine-tune the position of the display output using `fbset -move`. This changes the values found in the timings section. After moving the display as shown below you can run `fbset -s` to see how this has changed the timings section.

fbset -move down
fbset -move up
fbset -move left
fbset -move right

You can also investigate the values of kernel parameters in /sys/class/graphics/fb*. You can also modify some of the parameters live.

echo "0" > /sys/class/graphics/fbcon/cursor_blink
echo "1" > /sys/class/graphics/fbcon/cursor_blink

You can rotate the display. Note that this will also update the console dimensions shown by `stty -a`:

echo "1" > /sys/class/graphics/fbcon/rotate
echo "0" > /sys/class/graphics/fbcon/rotate