[oe-commits] org.oe.dev mythtv 0.21: update NEON patch to fix cpu deadlocks

koen commit oe at amethyst.openembedded.net
Wed Jul 30 06:57:37 UTC 2008


mythtv 0.21: update NEON patch to fix cpu deadlocks

Author: koen at openembedded.org
Branch: org.openembedded.dev
Revision: 5146c536eb0cda2645e9d50facaffc91be3a1d98
ViewMTN: http://monotone.openembedded.org/revision/info/5146c536eb0cda2645e9d50facaffc91be3a1d98
Files:
1
packages/mythtv/mythtv-0.21/no-cortex-deadlock.patch
packages/mythtv/mythtv_0.21.bb
Diffs:

#
# mt diff -r6a37ab23887bc482e8076490bd0a85582bee483b -r5146c536eb0cda2645e9d50facaffc91be3a1d98
#
#
#
# add_file "packages/mythtv/mythtv-0.21/no-cortex-deadlock.patch"
#  content [f227665cd13dd712c7309a402da4b72121a5effd]
# 
# patch "packages/mythtv/mythtv_0.21.bb"
#  from [590a51ee6de14a40660a5ab607d88ecb36aaa2ff]
#    to [11c9903ba5a2d62b47e984d6c45a432010f6bbab]
#
============================================================
--- packages/mythtv/mythtv-0.21/no-cortex-deadlock.patch	f227665cd13dd712c7309a402da4b72121a5effd
+++ packages/mythtv/mythtv-0.21/no-cortex-deadlock.patch	f227665cd13dd712c7309a402da4b72121a5effd
@@ -0,0 +1,115 @@
+From: Mans Rullgard <mans at mansr.com>
+Date: Tue, 29 Jul 2008 21:13:14 +0000 (+0100)
+Subject: ARM: work around Cortex-A8 erratum 451034
+X-Git-Url: http://git.mansr.com/?p=ffmpeg.mru;a=commitdiff_plain;h=c6bbb0c33f6f681b8265a43f8744735de5a9d45e
+
+ARM: work around Cortex-A8 erratum 451034
+
+On Cortex-A8 r1p0 and r1p1, executing a NEON store with an integer
+store in the store buffer, can cause a processor deadlock under
+certain conditions.
+
+A DMB instruction at the start of every NEON function ensures that
+the integer store buffer is always empty before executing any NEON
+store, thus avoiding the deadlock condition.
+
+See ARM Cortex-A8 Errata Notice (PR120-PRDC-008070) for full details.
+---
+
+diff --git b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c
+index fa0602d..4fbadfc 100644
+--- b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c
++++ b/mythtv/libs/libavcodec/armv4l/dsputil_neon.c
+@@ -28,6 +28,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
+                                         int h, int x, int y);
+ 
+ #define PUT_PIXELS_16_X2(vhadd)                                 \
++        "dmb                                         \n\t"      \
+         "1:                                          \n\t"      \
+         "vld1.64   {d0,d1,d2}, [%[p]], %[line_size]  \n\t"      \
+         "vld1.64   {d4,d5,d6}, [%[p]], %[line_size]  \n\t"      \
+@@ -46,6 +47,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
+         "lsl       %[l2], %[line_size], #1            \n\t"     \
+         "vld1.64   {d0,d1}, [%[p0]], %[l2]            \n\t"     \
+         "vld1.64   {d2,d3}, [%[p1]], %[l2]            \n\t"     \
++        "dmb                                          \n\t"     \
+         "1:                                           \n\t"     \
+         "subs      %[h], %[h], #2                     \n\t"     \
+          vhadd".u8 q2, q0, q1                         \n\t"     \
+@@ -69,6 +71,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
+         "vaddl.u8   q10, d1, d3                          \n\t"  \
+         "vaddl.u8   q9,  d4, d6                          \n\t"  \
+         "vaddl.u8   q11, d5, d7                          \n\t"  \
++        "dmb                                             \n\t"  \
+         "1:                                              \n\t"  \
+         "subs       %[h], %[h], #2                       \n\t"  \
+         "vld1.64    {d0,d1,d2}, [%[p0]], %[l2]           \n\t"  \
+@@ -98,6 +101,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
+         "bgt     1b                                      \n\t"
+ 
+ #define PUT_PIXELS_8_X2(vhadd)                          \
++        "dmb                                      \n\t" \
+         "1:                                       \n\t" \
+         "vld1.64   {d0,d1}, [%[p]], %[line_size]  \n\t" \
+         "vld1.64   {d2,d3}, [%[p]], %[line_size]  \n\t" \
+@@ -116,6 +120,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
+         "lsl       %[l2], %[line_size], #1        \n\t" \
+         "vld1.64   {d0}, [%[p0]], %[l2]           \n\t" \
+         "vld1.64   {d1}, [%[p1]], %[l2]           \n\t" \
++        "dmb                                      \n\t" \
+         "1:                                       \n\t" \
+         "subs      %[h], %[h], #2                 \n\t" \
+          vhadd".u8 d4, d0, d1                     \n\t" \
+@@ -137,6 +142,7 @@ extern void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, int stride,
+         "vext.8     d6, d2, d3, #1                  \n\t"       \
+         "vaddl.u8   q8, d0, d4                      \n\t"       \
+         "vaddl.u8   q9, d2, d6                      \n\t"       \
++        "dmb                                        \n\t"       \
+         "1:                                         \n\t"       \
+         "subs       %[h], %[h], #2                  \n\t"       \
+         "vld1.64    {d0,d1}, [%[p0]], %[l2]         \n\t"       \
+@@ -161,6 +167,7 @@ static void put_pixels16_neon(uint8_t *block, const uint8_t *pixels,
+                               int line_size, int h)
+ {
+     asm volatile(
++        "dmb                                        \n\t"
+         "1:                                         \n\t"
+         "vld1.64 {d0,d1}, [%[pixels]], %[line_size] \n\t"
+         "vld1.64 {d2,d3}, [%[pixels]], %[line_size] \n\t"
+@@ -224,6 +231,7 @@ static void put_pixels8_neon(uint8_t *block, const uint8_t *pixels,
+                              int line_size, int h)
+ {
+     asm volatile(
++        "dmb                                \n\t"
+         "1:                                 \n\t"
+         "vld1.64 {d0}, [%[p]], %[line_size] \n\t"
+         "vld1.64 {d1}, [%[p]], %[line_size] \n\t"
+diff --git b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
+index a766867..8171ee2 100644
+--- b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
++++ b/mythtv/libs/libavcodec/armv4l/h264dsp_neon.S
+@@ -40,6 +40,8 @@ ff_put_h264_chroma_mc8_neon:
+         sub       r4, r4, r5, lsl #3
+         add       r4, r4, #64
+ 
++        dmb
++
+         beq       2f
+ 
+         add       r5, r1, r2
+diff --git b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
+index 943e04f..abda6b2 100644
+--- b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
++++ b/mythtv/libs/libavcodec/armv4l/simple_idct_neon.S
+@@ -307,9 +307,10 @@ idct_col4_st8:
+ const:  .short W1, W2, W3, W4, W5, W6, W7, W4c
+ 
+         .macro idct_start data
++        push {v1-v3, lr}
+         pld [\data]
+         pld [\data, #64]
+-        push {v1-v3, lr}
++        dmb
+         vpush {d8-d15}
+         adr a4, const
+         vld1.64 {d0,d1}, [a4,:128]
============================================================
--- packages/mythtv/mythtv_0.21.bb	590a51ee6de14a40660a5ab607d88ecb36aaa2ff
+++ packages/mythtv/mythtv_0.21.bb	11c9903ba5a2d62b47e984d6c45a432010f6bbab
@@ -2,7 +2,7 @@ inherit qmake qt3x11
 
 inherit qmake qt3x11
 
-PR = "${SRCREV}+r2"
+PR = "${SRCREV}+r3"
 REALPV = "0.21"
 
 SRCREV = "17789"
@@ -10,6 +10,7 @@ SRC_URI += " \
 
 SRC_URI += " \
             file://ffmpeg-arm-update.diff;patch=1 \
+            file://no-cortex-deadlock.patch;patch=1;pnum=2 \
             file://configure.patch;patch=1 \
             file://configh \
 	    file://configmak \






More information about the Openembedded-commits mailing list