cpu.c (910e4f24975f53645d308aa6c895f4599dd47c43) | cpu.c (761c46425e2d2a7a65cbbd1ee65f0abce769618c) |
---|---|
1/* 2 * QEMU ARM CPU 3 * 4 * Copyright (c) 2012 SUSE LINUX Products GmbH 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 --- 477 unchanged lines hidden (view full) --- 486 memset(env->pmsav7.drbar, 0, 487 sizeof(*env->pmsav7.drbar) * cpu->pmsav7_dregion); 488 memset(env->pmsav7.drsr, 0, 489 sizeof(*env->pmsav7.drsr) * cpu->pmsav7_dregion); 490 memset(env->pmsav7.dracr, 0, 491 sizeof(*env->pmsav7.dracr) * cpu->pmsav7_dregion); 492 } 493 } | 1/* 2 * QEMU ARM CPU 3 * 4 * Copyright (c) 2012 SUSE LINUX Products GmbH 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License 8 * as published by the Free Software Foundation; either version 2 --- 477 unchanged lines hidden (view full) --- 486 memset(env->pmsav7.drbar, 0, 487 sizeof(*env->pmsav7.drbar) * cpu->pmsav7_dregion); 488 memset(env->pmsav7.drsr, 0, 489 sizeof(*env->pmsav7.drsr) * cpu->pmsav7_dregion); 490 memset(env->pmsav7.dracr, 0, 491 sizeof(*env->pmsav7.dracr) * cpu->pmsav7_dregion); 492 } 493 } |
494 495 if (cpu->pmsav8r_hdregion > 0) { 496 memset(env->pmsav8.hprbar, 0, 497 sizeof(*env->pmsav8.hprbar) * cpu->pmsav8r_hdregion); 498 memset(env->pmsav8.hprlar, 0, 499 sizeof(*env->pmsav8.hprlar) * cpu->pmsav8r_hdregion); 500 } 501 |
|
494 env->pmsav7.rnr[M_REG_NS] = 0; 495 env->pmsav7.rnr[M_REG_S] = 0; 496 env->pmsav8.mair0[M_REG_NS] = 0; 497 env->pmsav8.mair0[M_REG_S] = 0; 498 env->pmsav8.mair1[M_REG_NS] = 0; 499 env->pmsav8.mair1[M_REG_S] = 0; 500 } 501 --- 1495 unchanged lines hidden (view full) --- 1997 */ 1998 cpu->isar.id_aa64dfr0 = 1999 FIELD_DP64(cpu->isar.id_aa64dfr0, ID_AA64DFR0, PMSVER, 0); 2000 } 2001 2002 /* MPU can be configured out of a PMSA CPU either by setting has-mpu 2003 * to false or by setting pmsav7-dregion to 0. 2004 */ | 502 env->pmsav7.rnr[M_REG_NS] = 0; 503 env->pmsav7.rnr[M_REG_S] = 0; 504 env->pmsav8.mair0[M_REG_NS] = 0; 505 env->pmsav8.mair0[M_REG_S] = 0; 506 env->pmsav8.mair1[M_REG_NS] = 0; 507 env->pmsav8.mair1[M_REG_S] = 0; 508 } 509 --- 1495 unchanged lines hidden (view full) --- 2005 */ 2006 cpu->isar.id_aa64dfr0 = 2007 FIELD_DP64(cpu->isar.id_aa64dfr0, ID_AA64DFR0, PMSVER, 0); 2008 } 2009 2010 /* MPU can be configured out of a PMSA CPU either by setting has-mpu 2011 * to false or by setting pmsav7-dregion to 0. 2012 */ |
2005 if (!cpu->has_mpu) { | 2013 if (!cpu->has_mpu || cpu->pmsav7_dregion == 0) { 2014 cpu->has_mpu = false; |
2006 cpu->pmsav7_dregion = 0; | 2015 cpu->pmsav7_dregion = 0; |
2016 cpu->pmsav8r_hdregion = 0; |
|
2007 } | 2017 } |
2008 if (cpu->pmsav7_dregion == 0) { 2009 cpu->has_mpu = false; 2010 } | |
2011 2012 if (arm_feature(env, ARM_FEATURE_PMSA) && 2013 arm_feature(env, ARM_FEATURE_V7)) { 2014 uint32_t nr = cpu->pmsav7_dregion; 2015 2016 if (nr > 0xff) { 2017 error_setg(errp, "PMSAv7 MPU #regions invalid %" PRIu32, nr); 2018 return; --- 9 unchanged lines hidden (view full) --- 2028 env->pmsav8.rlar[M_REG_S] = g_new0(uint32_t, nr); 2029 } 2030 } else { 2031 env->pmsav7.drbar = g_new0(uint32_t, nr); 2032 env->pmsav7.drsr = g_new0(uint32_t, nr); 2033 env->pmsav7.dracr = g_new0(uint32_t, nr); 2034 } 2035 } | 2018 2019 if (arm_feature(env, ARM_FEATURE_PMSA) && 2020 arm_feature(env, ARM_FEATURE_V7)) { 2021 uint32_t nr = cpu->pmsav7_dregion; 2022 2023 if (nr > 0xff) { 2024 error_setg(errp, "PMSAv7 MPU #regions invalid %" PRIu32, nr); 2025 return; --- 9 unchanged lines hidden (view full) --- 2035 env->pmsav8.rlar[M_REG_S] = g_new0(uint32_t, nr); 2036 } 2037 } else { 2038 env->pmsav7.drbar = g_new0(uint32_t, nr); 2039 env->pmsav7.drsr = g_new0(uint32_t, nr); 2040 env->pmsav7.dracr = g_new0(uint32_t, nr); 2041 } 2042 } |
2043 2044 if (cpu->pmsav8r_hdregion > 0xff) { 2045 error_setg(errp, "PMSAv8 MPU EL2 #regions invalid %" PRIu32, 2046 cpu->pmsav8r_hdregion); 2047 return; 2048 } 2049 2050 if (cpu->pmsav8r_hdregion) { 2051 env->pmsav8.hprbar = g_new0(uint32_t, 2052 cpu->pmsav8r_hdregion); 2053 env->pmsav8.hprlar = g_new0(uint32_t, 2054 cpu->pmsav8r_hdregion); 2055 } |
|
2036 } 2037 2038 if (arm_feature(env, ARM_FEATURE_M_SECURITY)) { 2039 uint32_t nr = cpu->sau_sregion; 2040 2041 if (nr > 0xff) { 2042 error_setg(errp, "v8M SAU #regions invalid %" PRIu32, nr); 2043 return; --- 258 unchanged lines hidden --- | 2056 } 2057 2058 if (arm_feature(env, ARM_FEATURE_M_SECURITY)) { 2059 uint32_t nr = cpu->sau_sregion; 2060 2061 if (nr > 0xff) { 2062 error_setg(errp, "v8M SAU #regions invalid %" PRIu32, nr); 2063 return; --- 258 unchanged lines hidden --- |