Re: [RFC PATCH v2 03/11] powerpc: gamecube: bootwrapper bits
Add support for the Nintendo GameCube video game console to the powerpc bootwrapper. dtbImage.gamecube is a wrapped image that contains a flat device tree, an entry point compatible with SDload, and an optional initrd. Signed-off-by: Albert Herranz Acked-by: Segher Boessenkool --- v1 -> v2 - Use a separate asm file for the entry point code. Suggestion by Segher Boessenkool and Benjamin Herrenschmidt. - Do not make assumptions about the state of the cache and MMU on entry, eliminating dependencies on a particular bootloader. Suggestion by Segher Boessenkool. - Use consistently the same (easier to read) form of bcl to load the next instruction address in LR. Suggestion by Segher Boessenkool. - Identity map I/O memory too to avoid confusions. Suggestion by Segher Boessenkool. - Probe dinamically for usbgecko. Suggestion by Segher Boessenkool. arch/powerpc/boot/Makefile|4 +- arch/powerpc/boot/gamecube-head.S | 111 ++ +++ arch/powerpc/boot/gamecube.c | 35 arch/powerpc/boot/wrapper |4 + 4 files changed, 153 insertions(+), 1 deletions(-) create mode 100644 arch/powerpc/boot/gamecube-head.S create mode 100644 arch/powerpc/boot/gamecube.c diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 44bce21..3e70aab 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile @@ -76,7 +76,8 @@ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \ cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \ virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \ - cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c + cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c \ + gamecube-head.S gamecube.c src-boot := $(src-wlib) $(src-plat) empty.c src-boot := $(addprefix $(obj)/, $(src-boot)) @@ -254,6 +255,7 @@ image-$(CONFIG_KSI8560) += cuImage.ksi8560 image-$(CONFIG_STORCENTER) += cuImage.storcenter image-$(CONFIG_MPC7448HPC2)+= cuImage.mpc7448hpc2 image-$(CONFIG_PPC_C2K)+= cuImage.c2k +image-$(CONFIG_GAMECUBE) += dtbImage.gamecube # Board port in arch/powerpc/platform/amigaone/Kconfig image-$(CONFIG_AMIGAONE) += cuImage.amigaone diff --git a/arch/powerpc/boot/gamecube-head.S b/arch/powerpc/boot/ gamecube-head.S new file mode 100644 index 000..65a9b2a --- /dev/null +++ b/arch/powerpc/boot/gamecube-head.S @@ -0,0 +1,111 @@ +/* + * arch/powerpc/boot/gamecube-head.S + * + * Nintendo GameCube bootwrapper entry. + * Copyright (C) 2004-2009 The GameCube Linux Team + * Copyright (C) 2008,2009 Albert Herranz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + */ + +#include "ppc_asm.h" + +/* + * The entry code does no assumptions regarding: + * - if the data and instruction caches are enabled or not + * - if the MMU is enabled or not + * + * We enable the caches if not already enabled, enable the MMU with an + * identity mapping scheme and jump to the start code. + */ + + .text + + .globl _zimage_start +_zimage_start: + + /* turn the MMU off */ + mfmsr 9 + rlwinm 9, 9, 0, ~((1<<4)|(1<<5)) /* MSR_DR|MSR_IR */ + bcl 20, 31, 1f +1: + mflr8 + clrlwi 8, 8, 3 /* convert to a real address */ + addi8, 8, _mmu_off - 1b + mtsrr0 8 + mtsrr1 9 + rfi +_mmu_off: + /* MMU disabled */ + + /* setup BATs */ + isync + li 8, 0 + mtspr 0x210, 8/* IBAT0U */ + mtspr 0x212, 8/* IBAT1U */ + mtspr 0x214, 8/* IBAT2U */ + mtspr 0x216, 8/* IBAT3U */ + mtspr 0x218, 8/* DBAT0U */ + mtspr 0x21a, 8/* DBAT1U */ + mtspr 0x21c, 8/* DBAT2U */ + mtspr 0x21e, 8/* DBAT3U */ + + li 8, 0x01ff /* first 16MiB */ + li 9, 0x0002 /* rw */ + mtspr 0x211, 9/* IBAT0L */ + mtspr 0x210, 8/* IBAT0U */ + mtspr 0x219, 9/* DBAT0L */ + mtspr 0x218, 8/* DBAT0U */ + + lis 8, 0x0c00 /* I/O mem */ + ori 8, 8, 0x3ff /* 32MiB */ + lis 9, 0x0c00 + ori 9, 9, 0x002a/* uncached, guarded, rw */ + mtspr 0x21b, 9/* DBAT1L */ + mtspr 0x21a, 8/* DBAT1U */ + + lis 8, 0x0100 /* next 8MiB */ + ori 8, 8, 0x00ff/* 8MiB */ + lis 9, 0x0100 + ori 9, 9, 0x0002/* rw */ + mtspr 0
[RFC PATCH v2 03/11] powerpc: gamecube: bootwrapper bits
Add support for the Nintendo GameCube video game console to the powerpc bootwrapper. dtbImage.gamecube is a wrapped image that contains a flat device tree, an entry point compatible with SDload, and an optional initrd. Signed-off-by: Albert Herranz --- v1 -> v2 - Use a separate asm file for the entry point code. Suggestion by Segher Boessenkool and Benjamin Herrenschmidt. - Do not make assumptions about the state of the cache and MMU on entry, eliminating dependencies on a particular bootloader. Suggestion by Segher Boessenkool. - Use consistently the same (easier to read) form of bcl to load the next instruction address in LR. Suggestion by Segher Boessenkool. - Identity map I/O memory too to avoid confusions. Suggestion by Segher Boessenkool. - Probe dinamically for usbgecko. Suggestion by Segher Boessenkool. arch/powerpc/boot/Makefile|4 +- arch/powerpc/boot/gamecube-head.S | 111 + arch/powerpc/boot/gamecube.c | 35 arch/powerpc/boot/wrapper |4 + 4 files changed, 153 insertions(+), 1 deletions(-) create mode 100644 arch/powerpc/boot/gamecube-head.S create mode 100644 arch/powerpc/boot/gamecube.c diff --git a/arch/powerpc/boot/Makefile b/arch/powerpc/boot/Makefile index 44bce21..3e70aab 100644 --- a/arch/powerpc/boot/Makefile +++ b/arch/powerpc/boot/Makefile @@ -76,7 +76,8 @@ src-plat := of.c cuboot-52xx.c cuboot-824x.c cuboot-83xx.c cuboot-85xx.c holly.c cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \ cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \ virtex405-head.S virtex.c redboot-83xx.c cuboot-sam440ep.c \ - cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c + cuboot-acadia.c cuboot-amigaone.c cuboot-kilauea.c \ + gamecube-head.S gamecube.c src-boot := $(src-wlib) $(src-plat) empty.c src-boot := $(addprefix $(obj)/, $(src-boot)) @@ -254,6 +255,7 @@ image-$(CONFIG_KSI8560) += cuImage.ksi8560 image-$(CONFIG_STORCENTER) += cuImage.storcenter image-$(CONFIG_MPC7448HPC2)+= cuImage.mpc7448hpc2 image-$(CONFIG_PPC_C2K)+= cuImage.c2k +image-$(CONFIG_GAMECUBE) += dtbImage.gamecube # Board port in arch/powerpc/platform/amigaone/Kconfig image-$(CONFIG_AMIGAONE) += cuImage.amigaone diff --git a/arch/powerpc/boot/gamecube-head.S b/arch/powerpc/boot/gamecube-head.S new file mode 100644 index 000..65a9b2a --- /dev/null +++ b/arch/powerpc/boot/gamecube-head.S @@ -0,0 +1,111 @@ +/* + * arch/powerpc/boot/gamecube-head.S + * + * Nintendo GameCube bootwrapper entry. + * Copyright (C) 2004-2009 The GameCube Linux Team + * Copyright (C) 2008,2009 Albert Herranz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + */ + +#include "ppc_asm.h" + +/* + * The entry code does no assumptions regarding: + * - if the data and instruction caches are enabled or not + * - if the MMU is enabled or not + * + * We enable the caches if not already enabled, enable the MMU with an + * identity mapping scheme and jump to the start code. + */ + + .text + + .globl _zimage_start +_zimage_start: + + /* turn the MMU off */ + mfmsr 9 + rlwinm 9, 9, 0, ~((1<<4)|(1<<5)) /* MSR_DR|MSR_IR */ + bcl 20, 31, 1f +1: + mflr8 + clrlwi 8, 8, 3 /* convert to a real address */ + addi8, 8, _mmu_off - 1b + mtsrr0 8 + mtsrr1 9 + rfi +_mmu_off: + /* MMU disabled */ + + /* setup BATs */ + isync + li 8, 0 + mtspr 0x210, 8/* IBAT0U */ + mtspr 0x212, 8/* IBAT1U */ + mtspr 0x214, 8/* IBAT2U */ + mtspr 0x216, 8/* IBAT3U */ + mtspr 0x218, 8/* DBAT0U */ + mtspr 0x21a, 8/* DBAT1U */ + mtspr 0x21c, 8/* DBAT2U */ + mtspr 0x21e, 8/* DBAT3U */ + + li 8, 0x01ff /* first 16MiB */ + li 9, 0x0002 /* rw */ + mtspr 0x211, 9/* IBAT0L */ + mtspr 0x210, 8/* IBAT0U */ + mtspr 0x219, 9/* DBAT0L */ + mtspr 0x218, 8/* DBAT0U */ + + lis 8, 0x0c00 /* I/O mem */ + ori 8, 8, 0x3ff /* 32MiB */ + lis 9, 0x0c00 + ori 9, 9, 0x002a/* uncached, guarded, rw */ + mtspr 0x21b, 9/* DBAT1L */ + mtspr 0x21a, 8/* DBAT1U */ + + lis 8, 0x0100 /* next 8MiB */ + ori 8, 8, 0x00ff/* 8MiB */ + lis 9, 0x0100 + ori 9, 9, 0x0002/* rw */ + mtspr 0x215, 9/* IBAT2L */ + mtspr