1*78f90aaeSHeinrich Schuchardt/* SPDX-License-Identifier: GPL-2.0+ */ 2*78f90aaeSHeinrich Schuchardt/* 3*78f90aaeSHeinrich Schuchardt * Routines to access the system control register 4*78f90aaeSHeinrich Schuchardt * 5*78f90aaeSHeinrich Schuchardt * Copyright (c) 2018 Heinrich Schuchardt 6*78f90aaeSHeinrich Schuchardt */ 7*78f90aaeSHeinrich Schuchardt 8*78f90aaeSHeinrich Schuchardt#include <linux/linkage.h> 9*78f90aaeSHeinrich Schuchardt 10*78f90aaeSHeinrich Schuchardt/* 11*78f90aaeSHeinrich Schuchardt * void allow_unaligned(void) - allow unaligned access 12*78f90aaeSHeinrich Schuchardt * 13*78f90aaeSHeinrich Schuchardt * This routine clears the aligned flag in the system control register. 14*78f90aaeSHeinrich Schuchardt * After calling this routine unaligned access does no longer lead to a 15*78f90aaeSHeinrich Schuchardt * data abort but is handled by the CPU. 16*78f90aaeSHeinrich Schuchardt */ 17*78f90aaeSHeinrich SchuchardtENTRY(allow_unaligned) 18*78f90aaeSHeinrich Schuchardt mrc p15, 0, r0, c1, c0, 0 @ load system control register 19*78f90aaeSHeinrich Schuchardt bic r0, r0, #2 @ clear aligned flag 20*78f90aaeSHeinrich Schuchardt mcr p15, 0, r0, c1, c0, 0 @ write system control register 21*78f90aaeSHeinrich Schuchardt bx lr @ return 22*78f90aaeSHeinrich SchuchardtENDPROC(allow_unaligned) 23