drm/radeon: use writel to avoid gcc optimization v3
When using e8860(gcn1) on arm64, the kernel crashed on drm/radeon:
[ 11.240414] pc : __memset+0x4c/0x188
[ 11.244101] lr : radeon_uvd_get_create_msg+0x114/0x1d0 [radeon]
[ 11.249995] sp :
ffff00000d7eb700
[ 11.253295] x29:
ffff00000d7eb700 x28:
ffff8001f632a868
[ 11.258585] x27:
0000000000040000 x26:
ffff00000de00000
[ 11.263875] x25:
0000000000000125 x24:
0000000000000001
[ 11.269168] x23:
0000000000000000 x22:
0000000000000005
[ 11.274459] x21:
ffff00000df24000 x20:
ffff8001f74b4000
[ 11.279753] x19:
0000000000124000 x18:
0000000000000020
[ 11.285043] x17:
0000000000000000 x16:
0000000000000000
[ 11.290336] x15:
ffff000009309000 x14:
ffffffffffffffff
[ 11.290340] x13:
ffff0000094b6f88 x12:
ffff0000094b6bd2
[ 11.290343] x11:
ffff00000d7eb700 x10:
ffff00000d7eb700
[ 11.306246] x9 :
ffff00000d7eb700 x8 :
ffff00000df2402c
[ 11.306254] x7 :
0000000000000000 x6 :
ffff0000094b626a
[ 11.306257] x5 :
0000000000000000 x4 :
0000000000000004
[ 11.306262] x3 :
ffffffffffffffff x2 :
0000000000000fd4
[ 11.306265] x1 :
0000000000000000 x0 :
ffff00000df2402c
[ 11.306272] Call trace:
[ 11.306316] __memset+0x4c/0x188
[ 11.306638] uvd_v1_0_ib_test+0x70/0x1c0 [radeon]
[ 11.306758] radeon_ib_ring_tests+0x54/0xe0 [radeon]
...
Obviously, the __memset call is generated by gcc(8.3.1). It optimizes
this for loop into memset. But this may break on some platforms which
cannot map device memory correctly. So, just invoke `writel` to handle this.
v3 (chk): minor cleanups in code and commit message
Signed-off-by: Chen Li <chenli@uniontech.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>