blob: 8722f8380c8c5ce27b6ffeb7a974db250699c5c0 [file] [log] [blame]
Heinrich Schuchardt65e91612019-11-19 04:02:10 +01001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Routines to access the system control register
4 *
5 * Copyright (c) 2019 Heinrich Schuchardt
6 */
7
8#include <linux/linkage.h>
9
10/*
Marek Vasut84a74922023-07-01 17:26:19 +020011 * void arm11_arch_cp15_allow_unaligned(void) - allow unaligned access
Heinrich Schuchardt65e91612019-11-19 04:02:10 +010012 *
13 * This routine sets the enable unaligned data support flag and clears the
14 * aligned flag in the system control register.
15 * After calling this routine unaligned access does no longer leads to a
16 * data abort or undefined behavior but is handled by the CPU.
17 * For details see the "ARM Architecture Reference Manual" for ARMv6.
18 */
Marek Vasut84a74922023-07-01 17:26:19 +020019ENTRY(arm11_arch_cp15_allow_unaligned)
Heinrich Schuchardt65e91612019-11-19 04:02:10 +010020 mrc p15, 0, r0, c1, c0, 0 @ load system control register
21 orr r0, r0, #1 << 22 @ set unaligned data support flag
22 bic r0, r0, #2 @ clear aligned flag
23 mcr p15, 0, r0, c1, c0, 0 @ write system control register
24 bx lr @ return
Marek Vasut84a74922023-07-01 17:26:19 +020025ENDPROC(arm11_arch_cp15_allow_unaligned)