mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-11 03:24:58 -06:00
Renesas patches queue
- MMU prototype cleanups - Clarify licenses - Fine-grained Kconfig entries for SH-4 devices -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmBDoCYACgkQ4+MsLN6t wN415Q/+PB2dSMspfBe5M93GcYFQlNH5Eqq23hAJ8p6PIddw+4/ESl6xZ0iobQfN DfcP+LBPiDXdtfk3hLkgdzgMkxPfPBbkeYrRl7mYs0BzdJXEP39mUxxaDoOehxba 1uzk2+4Ce5Wa4ge3P8ozAeS/ZRfv1RZkrbvywVPcXemI5iHvYic/P9P1eF3cobak u+FMO+1Zij+FEhK2uiDT+D5RikFFA0XstsJkr3rmmbRCQ+Gi+8mDOEy9iz/pR3rR uh27mcuSsc6IftFUWlxFWl/64mjS1CTuCPZijgJarqH68ktBOanR56/SyjNBBd7f axcGloaXaaWpGBvYI5ssOJDusg89tmC9mSbrxBbEwxOdcpFgaQWnxVLZVAE55p+e 6JXJLNnNYHNe58BOTaAzhRGv8vOykHpY69yLkWBgGkwAUH3E8I1O3JWjD/7yDuaX FcwAIT+NneUs+wXyFivbDIiLos8Edv4x713PlEEGubUP9U5rkmYGRLJiH28DL3gz /3XvLwd20nK0qjCJ5zgZ5V3ZqfXJmLrkaWbA95swLlzZvQ7GR3lefyc+0h0+Bsk6 3C+3EZOK5SM+uSzt3R98JvuJ0j3U9TJ+7v2DuM4hpGuQot0W5wn3SIC0geCk4LJz 3BlQpxTzRVzJgwffLa+SayFQUbv713rofp3eK+izGUrzG8b/dq0= =+iNP -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/philmd-gitlab/tags/renesas-20210306' into staging Renesas patches queue - MMU prototype cleanups - Clarify licenses - Fine-grained Kconfig entries for SH-4 devices # gpg: Signature made Sat 06 Mar 2021 15:30:46 GMT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * remotes/philmd-gitlab/tags/renesas-20210306: hw/sh4/sh7750_regs: Replace link to license by its full content hw/sh4: Remove now unused CONFIG_SH4 from Kconfig hw/pci-host: Introduce SH_PCI Kconfig entry hw/block: Introduce TC58128 eeprom Kconfig entry hw/timer: Introduce SH_TIMER Kconfig entry hw/char: Introduce SH_SCI Kconfig entry hw/intc: Introduce SH_INTC Kconfig entry hw/sh4: Add missing Kconfig dependency on SH7750 for the R2D board hw/sh4: Add missing license target/sh4: Remove unused definitions target/sh4: Let get_physical_address() use MMUAccessType access_type target/sh4: Remove unused 'int access_type' argument target/sh4: Replace magic value by MMUAccessType definitions target/sh4: Fix code style for checkpatch.pl Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
229a834518
19 changed files with 160 additions and 78 deletions
|
@ -1397,16 +1397,22 @@ R2D
|
||||||
M: Yoshinori Sato <ysato@users.sourceforge.jp>
|
M: Yoshinori Sato <ysato@users.sourceforge.jp>
|
||||||
R: Magnus Damm <magnus.damm@gmail.com>
|
R: Magnus Damm <magnus.damm@gmail.com>
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
|
F: hw/char/sh_serial.c
|
||||||
F: hw/sh4/r2d.c
|
F: hw/sh4/r2d.c
|
||||||
F: hw/intc/sh_intc.c
|
F: hw/intc/sh_intc.c
|
||||||
|
F: hw/pci-host/sh_pci.c
|
||||||
|
F: hw/timer/sh_timer.c
|
||||||
F: include/hw/sh4/sh_intc.h
|
F: include/hw/sh4/sh_intc.h
|
||||||
|
|
||||||
Shix
|
Shix
|
||||||
M: Yoshinori Sato <ysato@users.sourceforge.jp>
|
M: Yoshinori Sato <ysato@users.sourceforge.jp>
|
||||||
R: Magnus Damm <magnus.damm@gmail.com>
|
R: Magnus Damm <magnus.damm@gmail.com>
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
|
F: hw/block/tc58128.c
|
||||||
|
F: hw/char/sh_serial.c
|
||||||
F: hw/sh4/shix.c
|
F: hw/sh4/shix.c
|
||||||
F: hw/intc/sh_intc.c
|
F: hw/intc/sh_intc.c
|
||||||
|
F: hw/timer/sh_timer.c
|
||||||
F: include/hw/sh4/sh_intc.h
|
F: include/hw/sh4/sh_intc.h
|
||||||
|
|
||||||
SPARC Machines
|
SPARC Machines
|
||||||
|
|
|
@ -22,6 +22,9 @@ config ECC
|
||||||
config ONENAND
|
config ONENAND
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config TC58128
|
||||||
|
bool
|
||||||
|
|
||||||
config NVME_PCI
|
config NVME_PCI
|
||||||
bool
|
bool
|
||||||
default y if PCI_DEVICES
|
default y if PCI_DEVICES
|
||||||
|
|
|
@ -12,7 +12,7 @@ softmmu_ss.add(when: 'CONFIG_PFLASH_CFI02', if_true: files('pflash_cfi02.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SSI_M25P80', if_true: files('m25p80.c'))
|
softmmu_ss.add(when: 'CONFIG_SSI_M25P80', if_true: files('m25p80.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SWIM', if_true: files('swim.c'))
|
softmmu_ss.add(when: 'CONFIG_SWIM', if_true: files('swim.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_XEN', if_true: files('xen-block.c'))
|
softmmu_ss.add(when: 'CONFIG_XEN', if_true: files('xen-block.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SH4', if_true: files('tc58128.c'))
|
softmmu_ss.add(when: 'CONFIG_TC58128', if_true: files('tc58128.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_NVME_PCI', if_true: files('nvme.c', 'nvme-ns.c'))
|
softmmu_ss.add(when: 'CONFIG_NVME_PCI', if_true: files('nvme.c', 'nvme-ns.c'))
|
||||||
|
|
||||||
specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c'))
|
specific_ss.add(when: 'CONFIG_VIRTIO_BLK', if_true: files('virtio-blk.c'))
|
||||||
|
|
|
@ -1,3 +1,29 @@
|
||||||
|
/*
|
||||||
|
* TC58128 NAND EEPROM emulation
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005 Samuel Tardieu
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
#include "qemu/units.h"
|
#include "qemu/units.h"
|
||||||
#include "hw/sh4/sh.h"
|
#include "hw/sh4/sh.h"
|
||||||
|
|
|
@ -50,6 +50,9 @@ config SCLPCONSOLE
|
||||||
config TERMINAL3270
|
config TERMINAL3270
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SH_SCI
|
||||||
|
bool
|
||||||
|
|
||||||
config RENESAS_SCI
|
config RENESAS_SCI
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ softmmu_ss.add(when: 'CONFIG_OMAP', if_true: files('omap_uart.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_aux.c'))
|
softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_aux.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_RENESAS_SCI', if_true: files('renesas_sci.c'))
|
softmmu_ss.add(when: 'CONFIG_RENESAS_SCI', if_true: files('renesas_sci.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SIFIVE_UART', if_true: files('sifive_uart.c'))
|
softmmu_ss.add(when: 'CONFIG_SIFIVE_UART', if_true: files('sifive_uart.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SH4', if_true: files('sh_serial.c'))
|
softmmu_ss.add(when: 'CONFIG_SH_SCI', if_true: files('sh_serial.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_STM32F2XX_USART', if_true: files('stm32f2xx_usart.c'))
|
softmmu_ss.add(when: 'CONFIG_STM32F2XX_USART', if_true: files('stm32f2xx_usart.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_MCHP_PFSOC_MMUART', if_true: files('mchp_pfsoc_mmuart.c'))
|
softmmu_ss.add(when: 'CONFIG_MCHP_PFSOC_MMUART', if_true: files('mchp_pfsoc_mmuart.c'))
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,9 @@ config OMPIC
|
||||||
config PPC_UIC
|
config PPC_UIC
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SH_INTC
|
||||||
|
bool
|
||||||
|
|
||||||
config RX_ICU
|
config RX_ICU
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ specific_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_ic.c', 'bcm2836_co
|
||||||
specific_ss.add(when: 'CONFIG_RX_ICU', if_true: files('rx_icu.c'))
|
specific_ss.add(when: 'CONFIG_RX_ICU', if_true: files('rx_icu.c'))
|
||||||
specific_ss.add(when: 'CONFIG_S390_FLIC', if_true: files('s390_flic.c'))
|
specific_ss.add(when: 'CONFIG_S390_FLIC', if_true: files('s390_flic.c'))
|
||||||
specific_ss.add(when: 'CONFIG_S390_FLIC_KVM', if_true: files('s390_flic_kvm.c'))
|
specific_ss.add(when: 'CONFIG_S390_FLIC_KVM', if_true: files('s390_flic_kvm.c'))
|
||||||
specific_ss.add(when: 'CONFIG_SH4', if_true: files('sh_intc.c'))
|
specific_ss.add(when: 'CONFIG_SH_INTC', if_true: files('sh_intc.c'))
|
||||||
specific_ss.add(when: 'CONFIG_SIFIVE_CLINT', if_true: files('sifive_clint.c'))
|
specific_ss.add(when: 'CONFIG_SIFIVE_CLINT', if_true: files('sifive_clint.c'))
|
||||||
specific_ss.add(when: 'CONFIG_SIFIVE_PLIC', if_true: files('sifive_plic.c'))
|
specific_ss.add(when: 'CONFIG_SIFIVE_PLIC', if_true: files('sifive_plic.c'))
|
||||||
specific_ss.add(when: 'CONFIG_XICS', if_true: files('xics.c'))
|
specific_ss.add(when: 'CONFIG_XICS', if_true: files('xics.c'))
|
||||||
|
|
|
@ -68,3 +68,7 @@ config PCI_POWERNV
|
||||||
|
|
||||||
config REMOTE_PCIHOST
|
config REMOTE_PCIHOST
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SH_PCI
|
||||||
|
bool
|
||||||
|
select PCI
|
||||||
|
|
|
@ -10,6 +10,7 @@ pci_ss.add(when: 'CONFIG_PCI_I440FX', if_true: files('i440fx.c'))
|
||||||
pci_ss.add(when: 'CONFIG_PCI_SABRE', if_true: files('sabre.c'))
|
pci_ss.add(when: 'CONFIG_PCI_SABRE', if_true: files('sabre.c'))
|
||||||
pci_ss.add(when: 'CONFIG_XEN_IGD_PASSTHROUGH', if_true: files('xen_igd_pt.c'))
|
pci_ss.add(when: 'CONFIG_XEN_IGD_PASSTHROUGH', if_true: files('xen_igd_pt.c'))
|
||||||
pci_ss.add(when: 'CONFIG_REMOTE_PCIHOST', if_true: files('remote.c'))
|
pci_ss.add(when: 'CONFIG_REMOTE_PCIHOST', if_true: files('remote.c'))
|
||||||
|
pci_ss.add(when: 'CONFIG_SH_PCI', if_true: files('sh_pci.c'))
|
||||||
|
|
||||||
# PPC devices
|
# PPC devices
|
||||||
pci_ss.add(when: 'CONFIG_PREP_PCI', if_true: files('prep.c'))
|
pci_ss.add(when: 'CONFIG_PREP_PCI', if_true: files('prep.c'))
|
||||||
|
|
|
@ -9,16 +9,16 @@ config R2D
|
||||||
select USB_OHCI_PCI
|
select USB_OHCI_PCI
|
||||||
select PCI
|
select PCI
|
||||||
select SM501
|
select SM501
|
||||||
select SH4
|
select SH7750
|
||||||
|
select SH_PCI
|
||||||
|
|
||||||
config SHIX
|
config SHIX
|
||||||
bool
|
bool
|
||||||
select SH7750
|
select SH7750
|
||||||
select SH4
|
select TC58128
|
||||||
|
|
||||||
config SH7750
|
config SH7750
|
||||||
bool
|
bool
|
||||||
|
select SH_INTC
|
||||||
config SH4
|
select SH_SCI
|
||||||
bool
|
select SH_TIMER
|
||||||
select PTIMER
|
|
||||||
|
|
|
@ -2,7 +2,6 @@ sh4_ss = ss.source_set()
|
||||||
sh4_ss.add(files(
|
sh4_ss.add(files(
|
||||||
'sh7750.c',
|
'sh7750.c',
|
||||||
'sh7750_regnames.c',
|
'sh7750_regnames.c',
|
||||||
'sh_pci.c'
|
|
||||||
))
|
))
|
||||||
sh4_ss.add(when: 'CONFIG_R2D', if_true: files('r2d.c'))
|
sh4_ss.add(when: 'CONFIG_R2D', if_true: files('r2d.c'))
|
||||||
sh4_ss.add(when: 'CONFIG_SHIX', if_true: files('shix.c'))
|
sh4_ss.add(when: 'CONFIG_SHIX', if_true: files('shix.c'))
|
||||||
|
|
|
@ -10,8 +10,28 @@
|
||||||
* Victor V. Vengerov <vvv@oktet.ru>
|
* Victor V. Vengerov <vvv@oktet.ru>
|
||||||
*
|
*
|
||||||
* The license and distribution terms for this file may be
|
* The license and distribution terms for this file may be
|
||||||
* found in the file LICENSE in this distribution or at
|
* found in this file hereafter or at http://www.rtems.com/license/LICENSE.
|
||||||
* http://www.rtems.com/license/LICENSE.
|
*
|
||||||
|
* LICENSE INFORMATION
|
||||||
|
*
|
||||||
|
* RTEMS is free software; you can redistribute it and/or modify it under
|
||||||
|
* terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2, or (at your option) any
|
||||||
|
* later version. RTEMS is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details. You should have received
|
||||||
|
* a copy of the GNU General Public License along with RTEMS; see
|
||||||
|
* file COPYING. If not, write to the Free Software Foundation, 675
|
||||||
|
* Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*
|
||||||
|
* As a special exception, including RTEMS header files in a file,
|
||||||
|
* instantiating RTEMS generics or templates, or linking other files
|
||||||
|
* with RTEMS objects to produce an executable application, does not
|
||||||
|
* by itself cause the resulting executable application to be covered
|
||||||
|
* by the GNU General Public License. This exception does not
|
||||||
|
* however invalidate any other reasons why the executable file might be
|
||||||
|
* covered by the GNU Public License.
|
||||||
*
|
*
|
||||||
* @(#) sh7750_regs.h,v 1.2.4.1 2003/09/04 18:46:00 joel Exp
|
* @(#) sh7750_regs.h,v 1.2.4.1 2003/09/04 18:46:00 joel Exp
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -36,6 +36,10 @@ config CMSDK_APB_DUALTIMER
|
||||||
bool
|
bool
|
||||||
select PTIMER
|
select PTIMER
|
||||||
|
|
||||||
|
config SH_TIMER
|
||||||
|
bool
|
||||||
|
select PTIMER
|
||||||
|
|
||||||
config RENESAS_TMR
|
config RENESAS_TMR
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ softmmu_ss.add(when: 'CONFIG_OMAP', if_true: files('omap_synctimer.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_PUV3', if_true: files('puv3_ost.c'))
|
softmmu_ss.add(when: 'CONFIG_PUV3', if_true: files('puv3_ost.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_PXA2XX', if_true: files('pxa2xx_timer.c'))
|
softmmu_ss.add(when: 'CONFIG_PXA2XX', if_true: files('pxa2xx_timer.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_systmr.c'))
|
softmmu_ss.add(when: 'CONFIG_RASPI', if_true: files('bcm2835_systmr.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SH4', if_true: files('sh_timer.c'))
|
softmmu_ss.add(when: 'CONFIG_SH_TIMER', if_true: files('sh_timer.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_SLAVIO', if_true: files('slavio_timer.c'))
|
softmmu_ss.add(when: 'CONFIG_SLAVIO', if_true: files('slavio_timer.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_STM32F2XX_TIMER', if_true: files('stm32f2xx_timer.c'))
|
softmmu_ss.add(when: 'CONFIG_STM32F2XX_TIMER', if_true: files('stm32f2xx_timer.c'))
|
||||||
softmmu_ss.add(when: 'CONFIG_XILINX', if_true: files('xilinx_timer.c'))
|
softmmu_ss.add(when: 'CONFIG_XILINX', if_true: files('xilinx_timer.c'))
|
||||||
|
|
|
@ -1,6 +1,31 @@
|
||||||
#ifndef QEMU_SH_H
|
/*
|
||||||
#define QEMU_SH_H
|
* Definitions for SH board emulation
|
||||||
/* Definitions for SH board emulation. */
|
*
|
||||||
|
* Copyright (c) 2005 Samuel Tardieu
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice (including the next
|
||||||
|
* paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
* Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#ifndef QEMU_HW_SH_H
|
||||||
|
#define QEMU_HW_SH_H
|
||||||
|
|
||||||
#include "hw/sh4/sh_intc.h"
|
#include "hw/sh4/sh_intc.h"
|
||||||
#include "target/sh4/cpu-qom.h"
|
#include "target/sh4/cpu-qom.h"
|
||||||
|
|
|
@ -271,17 +271,6 @@ typedef SuperHCPU ArchCPU;
|
||||||
|
|
||||||
#include "exec/cpu-all.h"
|
#include "exec/cpu-all.h"
|
||||||
|
|
||||||
/* Memory access type */
|
|
||||||
enum {
|
|
||||||
/* Privilege */
|
|
||||||
ACCESS_PRIV = 0x01,
|
|
||||||
/* Direction */
|
|
||||||
ACCESS_WRITE = 0x02,
|
|
||||||
/* Type of instruction */
|
|
||||||
ACCESS_CODE = 0x10,
|
|
||||||
ACCESS_INT = 0x20
|
|
||||||
};
|
|
||||||
|
|
||||||
/* MMU control register */
|
/* MMU control register */
|
||||||
#define MMUCR 0x1F000010
|
#define MMUCR 0x1F000010
|
||||||
#define MMUCR_AT (1<<0)
|
#define MMUCR_AT (1<<0)
|
||||||
|
|
|
@ -331,14 +331,14 @@ static int find_utlb_entry(CPUSH4State * env, target_ulong address, int use_asid
|
||||||
*/
|
*/
|
||||||
static int get_mmu_address(CPUSH4State * env, target_ulong * physical,
|
static int get_mmu_address(CPUSH4State * env, target_ulong * physical,
|
||||||
int *prot, target_ulong address,
|
int *prot, target_ulong address,
|
||||||
int rw, int access_type)
|
MMUAccessType access_type)
|
||||||
{
|
{
|
||||||
int use_asid, n;
|
int use_asid, n;
|
||||||
tlb_t *matching = NULL;
|
tlb_t *matching = NULL;
|
||||||
|
|
||||||
use_asid = !(env->mmucr & MMUCR_SV) || !(env->sr & (1u << SR_MD));
|
use_asid = !(env->mmucr & MMUCR_SV) || !(env->sr & (1u << SR_MD));
|
||||||
|
|
||||||
if (rw == 2) {
|
if (access_type == MMU_INST_FETCH) {
|
||||||
n = find_itlb_entry(env, address, use_asid);
|
n = find_itlb_entry(env, address, use_asid);
|
||||||
if (n >= 0) {
|
if (n >= 0) {
|
||||||
matching = &env->itlb[n];
|
matching = &env->itlb[n];
|
||||||
|
@ -371,11 +371,11 @@ static int get_mmu_address(CPUSH4State * env, target_ulong * physical,
|
||||||
if (n >= 0) {
|
if (n >= 0) {
|
||||||
matching = &env->utlb[n];
|
matching = &env->utlb[n];
|
||||||
if (!(env->sr & (1u << SR_MD)) && !(matching->pr & 2)) {
|
if (!(env->sr & (1u << SR_MD)) && !(matching->pr & 2)) {
|
||||||
n = (rw == 1) ? MMU_DTLB_VIOLATION_WRITE :
|
n = (access_type == MMU_DATA_STORE)
|
||||||
MMU_DTLB_VIOLATION_READ;
|
? MMU_DTLB_VIOLATION_WRITE : MMU_DTLB_VIOLATION_READ;
|
||||||
} else if ((rw == 1) && !(matching->pr & 1)) {
|
} else if ((access_type == MMU_DATA_STORE) && !(matching->pr & 1)) {
|
||||||
n = MMU_DTLB_VIOLATION_WRITE;
|
n = MMU_DTLB_VIOLATION_WRITE;
|
||||||
} else if ((rw == 1) && !matching->d) {
|
} else if ((access_type == MMU_DATA_STORE) && !matching->d) {
|
||||||
n = MMU_DTLB_INITIAL_WRITE;
|
n = MMU_DTLB_INITIAL_WRITE;
|
||||||
} else {
|
} else {
|
||||||
*prot = PAGE_READ;
|
*prot = PAGE_READ;
|
||||||
|
@ -384,36 +384,36 @@ static int get_mmu_address(CPUSH4State * env, target_ulong * physical,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (n == MMU_DTLB_MISS) {
|
} else if (n == MMU_DTLB_MISS) {
|
||||||
n = (rw == 1) ? MMU_DTLB_MISS_WRITE :
|
n = (access_type == MMU_DATA_STORE)
|
||||||
MMU_DTLB_MISS_READ;
|
? MMU_DTLB_MISS_WRITE : MMU_DTLB_MISS_READ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (n >= 0) {
|
if (n >= 0) {
|
||||||
n = MMU_OK;
|
n = MMU_OK;
|
||||||
*physical = ((matching->ppn << 10) & ~(matching->size - 1)) |
|
*physical = ((matching->ppn << 10) & ~(matching->size - 1))
|
||||||
(address & (matching->size - 1));
|
| (address & (matching->size - 1));
|
||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_physical_address(CPUSH4State * env, target_ulong * physical,
|
static int get_physical_address(CPUSH4State * env, target_ulong * physical,
|
||||||
int *prot, target_ulong address,
|
int *prot, target_ulong address,
|
||||||
int rw, int access_type)
|
MMUAccessType access_type)
|
||||||
{
|
{
|
||||||
/* P1, P2 and P4 areas do not use translation */
|
/* P1, P2 and P4 areas do not use translation */
|
||||||
if ((address >= 0x80000000 && address < 0xc0000000) ||
|
if ((address >= 0x80000000 && address < 0xc0000000) || address >= 0xe0000000) {
|
||||||
address >= 0xe0000000) {
|
|
||||||
if (!(env->sr & (1u << SR_MD))
|
if (!(env->sr & (1u << SR_MD))
|
||||||
&& (address < 0xe0000000 || address >= 0xe4000000)) {
|
&& (address < 0xe0000000 || address >= 0xe4000000)) {
|
||||||
/* Unauthorized access in user mode (only store queues are available) */
|
/* Unauthorized access in user mode (only store queues are available) */
|
||||||
qemu_log_mask(LOG_GUEST_ERROR, "Unauthorized access\n");
|
qemu_log_mask(LOG_GUEST_ERROR, "Unauthorized access\n");
|
||||||
if (rw == 0)
|
if (access_type == MMU_DATA_LOAD) {
|
||||||
return MMU_DADDR_ERROR_READ;
|
return MMU_DADDR_ERROR_READ;
|
||||||
else if (rw == 1)
|
} else if (access_type == MMU_DATA_STORE) {
|
||||||
return MMU_DADDR_ERROR_WRITE;
|
return MMU_DADDR_ERROR_WRITE;
|
||||||
else
|
} else {
|
||||||
return MMU_IADDR_ERROR;
|
return MMU_IADDR_ERROR;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (address >= 0x80000000 && address < 0xc0000000) {
|
if (address >= 0x80000000 && address < 0xc0000000) {
|
||||||
/* Mask upper 3 bits for P1 and P2 areas */
|
/* Mask upper 3 bits for P1 and P2 areas */
|
||||||
*physical = address & 0x1fffffff;
|
*physical = address & 0x1fffffff;
|
||||||
|
@ -432,7 +432,7 @@ static int get_physical_address(CPUSH4State * env, target_ulong * physical,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We need to resort to the MMU */
|
/* We need to resort to the MMU */
|
||||||
return get_mmu_address(env, physical, prot, address, rw, access_type);
|
return get_mmu_address(env, physical, prot, address, access_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
hwaddr superh_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
|
hwaddr superh_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
|
||||||
|
@ -441,7 +441,8 @@ hwaddr superh_cpu_get_phys_page_debug(CPUState *cs, vaddr addr)
|
||||||
target_ulong physical;
|
target_ulong physical;
|
||||||
int prot;
|
int prot;
|
||||||
|
|
||||||
get_physical_address(&cpu->env, &physical, &prot, addr, 0, 0);
|
get_physical_address(&cpu->env, &physical, &prot, addr, MMU_DATA_LOAD);
|
||||||
|
|
||||||
return physical;
|
return physical;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,11 +814,9 @@ bool superh_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
|
||||||
MMU_DTLB_VIOLATION_READ);
|
MMU_DTLB_VIOLATION_READ);
|
||||||
#else
|
#else
|
||||||
target_ulong physical;
|
target_ulong physical;
|
||||||
int prot, sh_access_type;
|
int prot;
|
||||||
|
|
||||||
sh_access_type = ACCESS_INT;
|
ret = get_physical_address(env, &physical, &prot, address, access_type);
|
||||||
ret = get_physical_address(env, &physical, &prot, address,
|
|
||||||
access_type, sh_access_type);
|
|
||||||
|
|
||||||
if (ret == MMU_OK) {
|
if (ret == MMU_OK) {
|
||||||
address &= TARGET_PAGE_MASK;
|
address &= TARGET_PAGE_MASK;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue