ARM11-MMU設定追加。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@57 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2008-12-02 03:13:57 +00:00
parent c3b7cb9bf7
commit adf90ea104
9 changed files with 309 additions and 183 deletions

View File

@ -170,27 +170,14 @@ ASM void stupEnableCP15( void )
//
mrc p15, 0, r0, c1, c0, 0
#if 1 // 0 -> 1 miya
ldr r1, =HW_C1_EXCEPT_VEC_UPPER \
| HW_C1_FORCE_AP_BIT \
| HW_C1_UNALIGN_ACCESS_ENABLE \
| HW_C1_BR_PREDICT_ENABLE \
| HW_C1_MMU_V6 \
| HW_C1_IC_ENABLE \
| HW_C1_DC_ENABLE \
| HW_C1_MMU_ENABLE
#else
ldr r1, =HW_C1_0_SB1 \
| HW_C1_EXCEPT_LITTLE_ENDIAN \
| HW_C1_EXCEPT_VEC_UPPER \
| HW_C1_UNALIGN_ACCESS_ENABLE \
| HW_C1_BR_PREDICT_ENABLE \
| HW_C1_MMU_V6 \
| HW_C1_IC_ENABLE \
| HW_C1_DC_ENABLE \
| HW_C1_MMU_ENABLE
#endif
orr r0, r0, r1
@ -230,7 +217,7 @@ ASM void stupInitMMU( void )
ldr r0, =HW_BROM_MMU_T1
mov r2, #HW_C2_V5_T1_BOUNBRY_16KB
mov r2, #HW_C2_V5_T1_BOUNBARY_16KB
// MMU L1 Table Base
@ -326,9 +313,8 @@ void stupInitMMUTable( void )
paddr += HW_MMU6_T1_SEC_SIZE;
}
#if 0
table = &t2Base[0];
for ( paddr = (u32 )NULL; table < (void *)HW_MAIN_MEM_MMU_T2_END; )
for ( paddr = (u32 )NULL; table < (void *)HW_BROM_MMU_T1_END; )
{
*table++ = HW_MMU6_T2_SP_PACK(
paddr,
@ -336,29 +322,61 @@ void stupInitMMUTable( void )
HW_MMU6_T2_LP_RGT_STRONG_ORDER,
HW_MMU6_T2_GLOBAL,
FALSE,
HW_MMU6_T2_SP_XN);
HW_MMU6_T2_SP_XN);
}
// EDRAM Region (4MB uncache)
table = &t1Base[HW_EDRAM/HW_MMU6_T1_SEC_SIZE];
for ( paddr = HW_EDRAM; paddr < HW_EDRAM_END; )
// BROM Region (64KBx2 cached)
table = &t1Base[HW_BIOS_IMG/HW_MMU6_T1_SEC_SIZE];
paddr = HW_BIOS_IMG;
*table = HW_MMU6_T1_COURSE_PACK( paddr, 0 );
// T2 for Page
table = &t2Base[0];
for ( paddr = HW_BIOS_IMG; paddr < HW_BROM_END; )
{
*table++ = HW_MMU6_T1_SEC_PACK(
*table++ = HW_MMU6_T2_LP_PACK(
paddr,
HW_MMU6_T2_APX_ALL,
HW_MMU6_T2_LP_RGT_L1L2C_WB_WA,
HW_MMU6_T2_GLOBAL,
FALSE,
FALSE);
paddr += HW_MMU6_T2_LP_ALIAS_SIZE;
}
// Coarse page is 1KB boundary
t2Base += MATH_ROUNDUP(HW_BROM_SIZE*2, HW_MMU6_T1_CORS_SIZE)/sizeof(t2Base[0]);
// IO Registers Region (16MB)
table = &t1Base[HW_IOREG/HW_MMU6_T1_SEC_SIZE];
for ( paddr = HW_IOREG; paddr < HW_IOREG + HW_MMU6_T1_SUSEC_SIZE; )
{
*table++ = HW_MMU6_T1_SUSEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_L1L2C_NC,
HW_MMU6_T1_RGT_SHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE
);
paddr += HW_MMU6_T1_SEC_SIZE;
}
// MPCore Registers Region (1MB)
table = &t1Base[HW_MPCORE_REG/HW_MMU6_T1_SEC_SIZE];
paddr = HW_MPCORE_REG;
*table++ = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_NSHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
paddr += HW_MMU6_T1_SEC_SIZE;
}
// EDRAM Region (4MB cache)
table = &t1Base[HW_EDRAM_CACHED/HW_MMU6_T1_SEC_SIZE];
for ( paddr = HW_EDRAM; paddr < HW_EDRAM_END; )
// VRAM Region (4MB cached)
table = &t1Base[HW_VRAM/HW_MMU6_T1_SEC_SIZE];
for ( paddr = HW_VRAM; paddr < HW_VRAM_END; )
{
*table++ = HW_MMU6_T1_SEC_PACK(
paddr,
@ -371,49 +389,36 @@ void stupInitMMUTable( void )
paddr += HW_MMU6_T1_SEC_SIZE;
}
// Main Memory Region (64MB uncache)
table = &t1Base[HW_MAIN_MEM/HW_MMU6_T1_SEC_SIZE];
#ifdef MIYA_MMU
for ( paddr = HW_MAIN_MEM; paddr < HW_MAIN_MEM_SEC_END; )
#else
for ( paddr = HW_MAIN_MEM; paddr < (HW_MAIN_MEM +( 64 * 1024 *1024 )); )
#endif
{
*table++ = HW_MMU6_T1_SEC_PACK(
// AXI-WRAM & DSP-WRAM Region (1MB cached)
table = &t1Base[HW_DSP_WRAM/HW_MMU6_T1_SEC_SIZE];
paddr = HW_DSP_WRAM;
*table++ = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_L1L2C_NC,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
paddr += HW_MMU6_T1_SEC_SIZE;
}
// Main Memory Region (64MB cache)
table = &t1Base[HW_MAIN_MEM_CACHED/HW_MMU6_T1_SEC_SIZE];
#ifdef MIYA_MMU
for ( paddr = HW_MAIN_MEM; paddr < HW_MAIN_MEM_SEC_END; )
#else
for ( paddr = HW_MAIN_MEM; paddr < (HW_MAIN_MEM +( 64 * 1024 *1024 )); )
#endif
{
*table++ = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_L1L2C_WB_WA,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
// Main Memory Region (128MB cached)
table = &t1Base[HW_MAIN_MEM/HW_MMU6_T1_SEC_SIZE];
for ( paddr = HW_MAIN_MEM; paddr < HW_MAIN_MEM_EX_END; )
{
*table++ = HW_MMU6_T1_SUSEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_L1L2C_WB_WA,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE
);
paddr += HW_MMU6_T1_SEC_SIZE;
}
#if 0
#ifdef MIYA_MMU
*table = HW_MMU6_T1_COURSE_PACK( paddr, 0 );
// T2 for Page
@ -459,108 +464,6 @@ void stupInitMMUTable( void )
t2Base += HW_MMU6_T1_CORS_SIZE/sizeof(t2Base[0]);
#endif
// IO Registers Region (4MB)
// IOPIF (4MB) 0x40000000
table = &t1Base[HW_IOPIF/HW_MMU6_T1_SEC_SIZE];
for ( paddr = HW_IOPIF; paddr < (HW_IOPIF + 0x00100000 * 16) ; ) // HW_IOPIF_END
{
*table++ = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_NSHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
paddr += HW_MMU6_T1_SEC_SIZE;
}
// APBIF (64KB) 0x44100000
table = &t1Base[HW_APBIF/HW_MMU6_T1_SEC_SIZE];
paddr = HW_APBIF;
*table = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_NSHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
// GPUIF (64MB) 0x48000000
table = &t1Base[HW_GPUIF/HW_MMU6_T1_SEC_SIZE];
paddr = HW_GPUIF;
*table = HW_MMU6_T1_SUSEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_NSHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE);
// CONFIF (64KB) 0xfe000000 mmio cfg.
table = &t1Base[HW_CONFIF/HW_MMU6_T1_SEC_SIZE];
paddr = HW_CONFIF;
*table = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_NSHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
// MPCore Registers Region (8KB) 0xff000000
table = &t1Base[HW_MPCORE_REG/HW_MMU6_T1_SEC_SIZE];
paddr = HW_MPCORE_REG;
*table = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_NSHARED_DEV,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
// TCRAM Region (4KB)
table = &t1Base[HW_TCRAM/HW_MMU6_T1_SEC_SIZE];
paddr = HW_TCRAM;
*table = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_L1L2C_NC,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
// BIOS Region (32KB) 0xffff0000
table = &t1Base[HW_BIOS/HW_MMU6_T1_SEC_SIZE];
paddr = HW_BIOS;
*table = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_L1L2C_WB_WA,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
// MSelect Region (4KB) = 0xfdff0000
table = &t1Base[HW_MSEL_VIRTUAL/HW_MMU6_T1_SEC_SIZE];
paddr = HW_BIOS;
*table = HW_MMU6_T1_SEC_PACK(
paddr,
HW_MMU6_T1_APX_ALL,
HW_MMU6_T1_RGT_STRONG_ORDER,
HW_MMU6_T1_GLOBAL,
FALSE,
FALSE,
0);
#endif
}

View File

@ -27,11 +27,7 @@ extern "C" {
#endif
//------------------------------------- BROM
#ifdef BROM_ENABLE_WRAMEMU
#define HW_BROM HW_WRAM
#else // BROM_ENABLE_WRAMEMU
#define HW_BROM HW_BIOS
#endif
#define HW_BROM_END (HW_BROM + HW_BROM_SIZE)
#define HW_BROM_SIZE 0x10000 // 64KB

View File

@ -0,0 +1,23 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - include - MATH
File: math.h
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: #$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef BROM_MATH_H_
#define BROM_MATH_H_
#include <brom/math/math.h>
/* BROM_MATH_H_ */
#endif

View File

@ -0,0 +1,203 @@
/*---------------------------------------------------------------------------*
Project: TwlBrom - MATH - include
File: math/math.h
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev:$
$Author:$
*---------------------------------------------------------------------------*/
#ifndef BROM_MATH_MATH_H_
#define BROM_MATH_MATH_H_
#include <brom/misc.h>
#include <brom/types.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------------
// Type definition
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Declaration of function
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Implementation of inline function
//----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*
Name: MATH_ABS
Description:
Arguments: a
Returns: a < 0 -a, a
*---------------------------------------------------------------------------*/
#define MATH_ABS(a) ( ( (a) < 0 ) ? (-(a)) : (a) )
/*---------------------------------------------------------------------------*
Name: MATH_IAbs
Description:
Arguments: a
Returns: a < 0 -a, a
*---------------------------------------------------------------------------*/
SDK_INLINE int MATH_IAbs(int a)
{
return (a < 0) ? -a : a;
}
/*---------------------------------------------------------------------------*
Name: MATH_CLAMP
Description: lowからhighの範囲の値を取得するマクロ
Arguments: x
low
hight
Returns: x < low low, x > high high x
*---------------------------------------------------------------------------*/
#define MATH_CLAMP(x, low, high) ( ( (x) > (high) ) ? (high) : ( ( (x) < (low) ) ? (low) : (x) ) )
/*---------------------------------------------------------------------------*
Name: MATH_MIN
Description: 2
使
Arguments: a, b
Returns: a < b a, b
*---------------------------------------------------------------------------*/
#define MATH_MIN(a,b) (((a) <= (b)) ? (a) : (b))
/*---------------------------------------------------------------------------*
Name: MATH_IMin
Description: 2 int
Arguments: a, b - int
Returns: a <= b a, b
*---------------------------------------------------------------------------*/
SDK_INLINE int MATH_IMin(int a, int b)
{
return (a <= b) ? a : b;
}
/*---------------------------------------------------------------------------*
Name: MATH_MAX
Description: 2
使
Arguments: a, b
Returns: a >= b a, b
*---------------------------------------------------------------------------*/
#define MATH_MAX(a,b) (((a) >= (b)) ? (a) : (b))
/*---------------------------------------------------------------------------*
Name: MATH_IMax
Description: 2 int
Arguments: a, b - int
Returns: a >= b a, b
*---------------------------------------------------------------------------*/
SDK_INLINE int MATH_IMax(int a, int b)
{
return (a >= b) ? a : b;
}
/*---------------------------------------------------------------------------*
Name: MATH_DIVUP
Description: base
Arguments: x:
base: 2
Returns: x base
*---------------------------------------------------------------------------*/
#define MATH_DIVUP(x, base) (((x) + ((base)-1)) / (base))
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDUP
Description:
Arguments: x
base - 2
Returns: x base
*---------------------------------------------------------------------------*/
#define MATH_ROUNDUP(x, base) (((x) + ((base)-1)) & ~((base)-1))
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDDOWN
Description:
Arguments: x
base - 2
Returns: x base
*---------------------------------------------------------------------------*/
#define MATH_ROUNDDOWN(x, base) ((x) & ~((base)-1))
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDUP32
Description: 32
Arguments: x
Returns: x 32
*---------------------------------------------------------------------------*/
#define MATH_ROUNDUP32(x) MATH_ROUNDUP(x, 32)
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDDOWN32
Description: 32
Arguments: x
Returns: x 32
*---------------------------------------------------------------------------*/
#define MATH_ROUNDDOWN32(x) MATH_ROUNDDOWN(x, 32)
#ifdef __cplusplus
}/* extern "C" */
#endif
/* BROM_MATH_MATH_H_ */
#endif

View File

@ -28,6 +28,7 @@ extern "C" {
#include <ctr/os/common/svc.h>
#include <brom/init/crt0.h>
#include <brom/math.h>
#if 0
#include <brom/os/common/systemWork.h>
#include <brom/os/common/system.h>

View File

@ -124,16 +124,16 @@ extern "C" {
// Register 2.0.2 : MMU L1 Table Boundary
#define HW_C2_V5_T1_BOUNBRY_MASK 0x00000007 // the size of the first-level translation table base boundary for MMUv5
#define HW_C2_V5_T1_BOUNBARY_MASK 0x00000007 // the size of the first-level translation table base boundary for MMUv5
#define HW_C2_V5_T1_BOUNBRY_16KB 0 // 16KB
#define HW_C2_V5_T1_BOUNBRY_8KB 1 // 8KB
#define HW_C2_V5_T1_BOUNBRY_4KB 2 // 4KB
#define HW_C2_V5_T1_BOUNBRY_2KB 3 // 2KB
#define HW_C2_V5_T1_BOUNBRY_1KB 4 // 1KB
#define HW_C2_V5_T1_BOUNBRY_512B 5 // 512B
#define HW_C2_V5_T1_BOUNBRY_256B 6 // 256B
#define HW_C2_V5_T1_BOUNBRY_128B 7 // 128B
#define HW_C2_V5_T1_BOUNBARY_16KB 0 // 16KB
#define HW_C2_V5_T1_BOUNBARY_8KB 1 // 8KB
#define HW_C2_V5_T1_BOUNBARY_4KB 2 // 4KB
#define HW_C2_V5_T1_BOUNBARY_2KB 3 // 2KB
#define HW_C2_V5_T1_BOUNBARY_1KB 4 // 1KB
#define HW_C2_V5_T1_BOUNBARY_512B 5 // 512B
#define HW_C2_V5_T1_BOUNBARY_256B 6 // 256B
#define HW_C2_V5_T1_BOUNBARY_128B 7 // 128B
// Register 3 : Domain Access Control

View File

@ -70,12 +70,12 @@ extern "C" {
#define HW_MPCORE_REG_SIZE 0x20000 // 128KB
//----------------------------- System ROM
#define HW_BIOS 0xffff0000
#define HW_BIOS_IMG 0x00000000
#define HW_BIOS 0x00010000
#define HW_BIOS_END (HW_BIOS + HW_BIOS_SIZE)
#define HW_BIOS_EX HW_BIOS_END
#define HW_BIOS_EX_END (HW_BIOS_EX + HW_BIOS_EX_SIZE)
#define HW_BIOS_IMG_END (HW_BIOS_IMG + HW_BIOS_EX_SIZE)
#define HW_BIOS_SIZE 0x8000 // 32KB
#define HW_BIOS_EX_SIZE 0x10000 // 64KB
#define HW_BIOS_IMG_SIZE 0x8000 // 32KB
#define HW_RESET_VECTOR HW_BIOS

View File

@ -27,7 +27,7 @@ extern "C" {
*---------------------------------------------------------------------------*/
//----------------------------- ITCM
#define HW_ITCM_IMAGE 0x01000000
#define HW_ITCM_IMG 0x01000000
#define HW_ITCM 0x01ff8000
#define HW_ITCM_SIZE 0x8000 // 32KB
#define HW_ITCM_END (HW_ITCM + HW_ITCM_SIZE)

View File

@ -22,7 +22,7 @@ extern "C" {
#endif
#ifndef SDK_WIN32
#include <ctr/os/common/printf.h>
//#include <ctr/os/common/printf.h>
#endif
//--------------------------------------------------------------------------------