Pyon's Diary
2008-02-17 舊 平成廿年戊子睦月拾壹日丁亥 (日・晴) [長年日記]
KURO-BOX/PRO (No.36) Sylver のパッチでの UART0_BASE, UART1_BASE の値。(2.6.25-rc1 に於いて shutdown -hP で電源が落ちる樣に成つた)
(成功した方法は下記の「追記」を參照の事。)
Slyber の micon2 パッチを眺めると、
UART0_BASE, UART1_BASE は include/asm/arch/orion.h で定義されてゐる樣に見えたので遡つて最新版との差分を見て行つた。
其乃結果 2008/02/11 に變更されてゐる事が判つた。
% git diff c9e3de941a1694aeab60a10bd39eb710c975010d 7f74c2c7f760fdd44116e3dd90a5aeeb9d9333c7 orion.h diff --git a/include/asm-arm/arch-orion/orion.h b/include/asm-arm/arch-orion/orion.h index f787f75..4a80254 100644 --- a/include/asm-arm/arch-orion/orion.h +++ b/include/asm-arm/arch-orion/orion.h @@ -14,32 +14,40 @@ #ifndef __ASM_ARCH_ORION_H__ #define __ASM_ARCH_ORION_H__
-/******************************************************************************* +/***************************************************************************** * Orion Address Map - * Use the same mapping (1:1 virtual:physical) of internal registers and - * PCI system (PCI+PCIE) for all machines. - * Each machine defines the rest of its mapping (e.g. device bus flashes) - ******************************************************************************/ -#define ORION_REGS_BASE 0xf1000000 + * + * virt phys size + * f0000000 f0000000 16M PCIe WA space (Orion-NAS only) + * f1000000 f1000000 1M on-chip peripheral registers + * f2000000 f2000000 1M PCIe I/O space + * f2100000 f2100000 1M PCI I/O space + ****************************************************************************/ +#define ORION_REGS_PHYS_BASE 0xf1000000 +#define ORION_REGS_VIRT_BASE 0xf1000000 #define ORION_REGS_SIZE SZ_1M
-#define ORION_PCI_SYS_MEM_BASE 0xe0000000 -#define ORION_PCIE_MEM_BASE ORION_PCI_SYS_MEM_BASE -#define ORION_PCIE_MEM_SIZE SZ_128M -#define ORION_PCI_MEM_BASE (ORION_PCIE_MEM_BASE + ORION_PCIE_MEM_SIZE) -#define ORION_PCI_MEM_SIZE SZ_128M - -#define ORION_PCI_SYS_IO_BASE 0xf2000000 -#define ORION_PCIE_IO_BASE ORION_PCI_SYS_IO_BASE +#define ORION_PCIE_IO_PHYS_BASE 0xf2000000 +#define ORION_PCIE_IO_VIRT_BASE 0xf2000000 +#define ORION_PCIE_IO_BUS_BASE 0x00000000 #define ORION_PCIE_IO_SIZE SZ_1M -#define ORION_PCIE_IO_REMAP (ORION_PCIE_IO_BASE - ORION_PCI_SYS_IO_BASE) -#define ORION_PCI_IO_BASE (ORION_PCIE_IO_BASE + ORION_PCIE_IO_SIZE) + +#define ORION_PCI_IO_PHYS_BASE 0xf2100000 +#define ORION_PCI_IO_VIRT_BASE 0xf2100000 +#define ORION_PCI_IO_BUS_BASE 0x00100000 #define ORION_PCI_IO_SIZE SZ_1M -#define ORION_PCI_IO_REMAP (ORION_PCI_IO_BASE - ORION_PCI_SYS_IO_BASE) + /* Relevant only for Orion-NAS */ -#define ORION_PCIE_WA_BASE 0xf0000000 +#define ORION_PCIE_WA_PHYS_BASE 0xf0000000 +#define ORION_PCIE_WA_VIRT_BASE 0xf0000000 #define ORION_PCIE_WA_SIZE SZ_16M
+#define ORION_PCIE_MEM_PHYS_BASE 0xe0000000 +#define ORION_PCIE_MEM_SIZE SZ_128M + +#define ORION_PCI_MEM_PHYS_BASE 0xe8000000 +#define ORION_PCI_MEM_SIZE SZ_128M + /******************************************************************************* * Supported Devices & Revisions ******************************************************************************/ @@ -57,25 +65,42 @@ /******************************************************************************* * Orion Registers Map ******************************************************************************/ -#define ORION_DDR_REG_BASE (ORION_REGS_BASE | 0x00000) -#define ORION_DEV_BUS_REG_BASE (ORION_REGS_BASE | 0x10000) -#define ORION_BRIDGE_REG_BASE (ORION_REGS_BASE | 0x20000) -#define ORION_PCI_REG_BASE (ORION_REGS_BASE | 0x30000) -#define ORION_PCIE_REG_BASE (ORION_REGS_BASE | 0x40000) -#define ORION_USB0_REG_BASE (ORION_REGS_BASE | 0x50000) -#define ORION_ETH_REG_BASE (ORION_REGS_BASE | 0x70000) -#define ORION_SATA_REG_BASE (ORION_REGS_BASE | 0x80000) -#define ORION_USB1_REG_BASE (ORION_REGS_BASE | 0xa0000) - -#define ORION_DDR_REG(x) (ORION_DDR_REG_BASE | (x)) -#define ORION_DEV_BUS_REG(x) (ORION_DEV_BUS_REG_BASE | (x)) -#define ORION_BRIDGE_REG(x) (ORION_BRIDGE_REG_BASE | (x)) -#define ORION_PCI_REG(x) (ORION_PCI_REG_BASE | (x)) -#define ORION_PCIE_REG(x) (ORION_PCIE_REG_BASE | (x)) -#define ORION_USB0_REG(x) (ORION_USB0_REG_BASE | (x)) -#define ORION_USB1_REG(x) (ORION_USB1_REG_BASE | (x)) -#define ORION_ETH_REG(x) (ORION_ETH_REG_BASE | (x)) -#define ORION_SATA_REG(x) (ORION_SATA_REG_BASE | (x)) +#define ORION_DDR_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x00000) +#define ORION_DDR_REG(x) (ORION_DDR_VIRT_BASE | (x)) + +#define ORION_DEV_BUS_PHYS_BASE (ORION_REGS_PHYS_BASE | 0x10000) +#define ORION_DEV_BUS_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x10000) +#define ORION_DEV_BUS_REG(x) (ORION_DEV_BUS_VIRT_BASE | (x)) +#define I2C_PHYS_BASE (ORION_DEV_BUS_PHYS_BASE | 0x1000) +#define UART0_PHYS_BASE (ORION_DEV_BUS_PHYS_BASE | 0x2000) +#define UART0_VIRT_BASE (ORION_DEV_BUS_VIRT_BASE | 0x2000) +#define UART1_PHYS_BASE (ORION_DEV_BUS_PHYS_BASE | 0x2100) +#define UART1_VIRT_BASE (ORION_DEV_BUS_VIRT_BASE | 0x2100) + +#define ORION_BRIDGE_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x20000) +#define ORION_BRIDGE_REG(x) (ORION_BRIDGE_VIRT_BASE | (x)) + +#define ORION_PCI_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x30000) +#define ORION_PCI_REG(x) (ORION_PCI_VIRT_BASE | (x)) + +#define ORION_PCIE_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x40000) +#define ORION_PCIE_REG(x) (ORION_PCIE_VIRT_BASE | (x)) + +#define ORION_USB0_PHYS_BASE (ORION_REGS_PHYS_BASE | 0x50000) +#define ORION_USB0_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x50000) +#define ORION_USB0_REG(x) (ORION_USB0_VIRT_BASE | (x)) + +#define ORION_ETH_PHYS_BASE (ORION_REGS_PHYS_BASE | 0x70000) +#define ORION_ETH_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x70000) +#define ORION_ETH_REG(x) (ORION_ETH_VIRT_BASE | (x)) + +#define ORION_SATA_PHYS_BASE (ORION_REGS_PHYS_BASE | 0x80000) +#define ORION_SATA_VIRT_BASE (ORION_REGS_VIRT_BASE | 0x80000) +#define ORION_SATA_REG(x) (ORION_SATA_VIRT_BASE | (x)) + +#define ORION_USB1_PHYS_BASE (ORION_REGS_PHYS_BASE | 0xa0000) +#define ORION_USB1_VIRT_BASE (ORION_REGS_VIRT_BASE | 0xa0000) +#define ORION_USB1_REG(x) (ORION_USB1_VIRT_BASE | (x))
/******************************************************************************* * Device Bus Registers @@ -100,9 +125,6 @@ #define DEV_BUS_CTRL ORION_DEV_BUS_REG(0x4c0) #define DEV_BUS_INT_CAUSE ORION_DEV_BUS_REG(0x4d0) #define DEV_BUS_INT_MASK ORION_DEV_BUS_REG(0x4d4) -#define I2C_BASE ORION_DEV_BUS_REG(0x1000) -#define UART0_BASE ORION_DEV_BUS_REG(0x2000) -#define UART1_BASE ORION_DEV_BUS_REG(0x2100) #define GPIO_MAX 32
/***************************************************************************
此を眺めると c9e3de941a1694aeab60a10bd39eb710c975010d では、
0xf1000000 => ORION_REGS_BASE (ORION_REGS_BASE | 0x10000) => ORION_DEV_BUS_REG_BASE (0xf1010000) (ORION_DEV_BUS_REG_BASE | (x)) => ORION_DEV_BUS_REG(x) ORION_DEV_BUS_REG(0x2000) => UART0_BASE (0xf1012000) ORION_DEV_BUS_REG(0x2100) => UART1_BASE (0xf1012100)
なので
UART0_BASE 0xf1012000 UART1_BASE 0xf1012100
と成る。此が新しい 7f74c2c7f760fdd44116e3dd90a5aeeb9d9333c7 で定義されてゐるマクロのどれかと云ふと、
ORION_REGS_PHYS_BASE => 0xf1000000 (ORION_REGS_PHYS_BASE | 0x10000) => ORION_DEV_BUS_PHYS_BASE (0xf1010000) (ORION_DEV_BUS_PHYS_BASE | 0x2000) => UART0_PHYS_BASE (0xf1012000) (ORION_DEV_BUS_PHYS_BASE | 0x2100) => UART1_PHYS_BASE (0xf1012100)
ORION_REGS_VIRT_BASE => 0xf1000000 (ORION_REGS_VIRT_BASE | 0x10000) => ORION_DEV_BUS_VIRT_BASE (0xf1010000) (ORION_DEV_BUS_VIRT_BASE | 0x2000) => UART0_VIRT_BASE (0xf1012000) (ORION_DEV_BUS_VIRT_BASE | 0x2100) => UART1_VIRT_BASE (0xf1012100)
なので、
UART0_PHYS_BASE 0xf1012000 UART0_VIRT_BASE 0xf1012000 UART1_PHYS_BASE 0xf1012100 UART1_VIRT_BASE 0xf1012100
と成る。と云ふ事は
- UART0_BASE の代はりに UART0_PHYS_BASE 亦は UART0_VIRT_BASE の孰れかを、
- UART1_BASE の代はりに UART1_PHYS_BASE 亦は UART1_VIRT_BASE の孰れかを
使用する樣にすればコンパイルが成功しさう。
處が 7f74c2c7f760fdd44116e3dd90a5aeeb9d9333c7 と 8c42da46f3b0ff85ac4f61beaa0633bbb480c49e との差分を見ると、
% git diff 7f74c2c7f760fdd44116e3dd90a5aeeb9d9333c7 8c42da46f3b0ff85ac4f61beaa0633bbb480c49e orion.h diff --git a/include/asm-arm/arch-orion/orion.h b/include/asm-arm/arch-orion/orion.h index 4a80254..673a418 100644 --- a/include/asm-arm/arch-orion/orion.h +++ b/include/asm-arm/arch-orion/orion.h @@ -18,28 +18,28 @@ * Orion Address Map * * virt phys size - * f0000000 f0000000 16M PCIe WA space (Orion-NAS only) - * f1000000 f1000000 1M on-chip peripheral registers - * f2000000 f2000000 1M PCIe I/O space - * f2100000 f2100000 1M PCI I/O space + * fdd00000 f1000000 1M on-chip peripheral registers + * fde00000 f2000000 1M PCIe I/O space + * fdf00000 f2100000 1M PCI I/O space + * fe000000 f0000000 16M PCIe WA space (Orion-NAS only) ****************************************************************************/ #define ORION_REGS_PHYS_BASE 0xf1000000 -#define ORION_REGS_VIRT_BASE 0xf1000000 +#define ORION_REGS_VIRT_BASE 0xfdd00000 #define ORION_REGS_SIZE SZ_1M
#define ORION_PCIE_IO_PHYS_BASE 0xf2000000 -#define ORION_PCIE_IO_VIRT_BASE 0xf2000000 +#define ORION_PCIE_IO_VIRT_BASE 0xfde00000 #define ORION_PCIE_IO_BUS_BASE 0x00000000 #define ORION_PCIE_IO_SIZE SZ_1M
#define ORION_PCI_IO_PHYS_BASE 0xf2100000 -#define ORION_PCI_IO_VIRT_BASE 0xf2100000 +#define ORION_PCI_IO_VIRT_BASE 0xfdf00000 #define ORION_PCI_IO_BUS_BASE 0x00100000 #define ORION_PCI_IO_SIZE SZ_1M
/* Relevant only for Orion-NAS */ #define ORION_PCIE_WA_PHYS_BASE 0xf0000000 -#define ORION_PCIE_WA_VIRT_BASE 0xf0000000 +#define ORION_PCIE_WA_VIRT_BASE 0xfe000000 #define ORION_PCIE_WA_SIZE SZ_16M
#define ORION_PCIE_MEM_PHYS_BASE 0xe0000000
と成つてゐて ORION_REGS_VIRT_BASE の値が 0xfdd00000 に變更されてゐた。と云ふ事は、
ORION_REGS_VIRT_BASE => 0xfdd00000 (ORION_REGS_VIRT_BASE | 0x10000) => ORION_DEV_BUS_VIRT_BASE (0xfdd10000) (ORION_DEV_BUS_VIRT_BASE | 0x2000) => UART0_VIRT_BASE (0xfdd12000) (ORION_DEV_BUS_VIRT_BASE | 0x2100) => UART1_VIRT_BASE (0xfdd12100)
と成つて仕舞ふので結局 UART0_BASE, UART1_BASE の代はりに使用すべきなのは
UART0_PHYS_BASE UART1_PHYS_BASE
に成りさう。(結局違つた模樣)
追記: 成功した方法。
と云ふ事で此で HEAD に micon パッチ、
を當てゝ UART1_BASE を UART1_PHYS_BASE に變更してコンパイルした。
コンパイルは成功した。起動にも成功した。
然し shutdown -hP now で電源が落ち無かつた。
Unmounting local filesystems...done. Will now halt. sd 0:0:0:0: [sda] Synchronizing SCSI cache sd 0:0:0:0: [sda] Stopping disk Power down. kurobox_pro_power_off: triggering power-off... Unable to handle kernel paging request at virtual address f1012104 (後略)
其れならばと UART1_BASE を UART1_VIRT_BASE に変更してやつてみた。
Unmounting local filesystems...done. Will now halt. sd 0:0:0:0: [sda] Synchronizing SCSI cache sd 0:0:0:0: [sda] Stopping disk Power down. kurobox_pro_power_off: triggering power-off...
電源が落ちた。
結論は、Sylver の micon パッチ、
で UART1_BASE を UART1_VIRT_BASE に変更して當てゝやれば shutdown -hP で電源が落ちる事が判つた。(理由は好く判ら無い)
東京ゴッドファーザーズ。
東京ゴッドファーザーズ を見た。
此乃映畫の宣傳を見た時「何か御涙頂戴なんだろうなあ」と思つて映畫を觀に行く氣が餘り起こら無かつた。
ハルヒ・シリーズを借り終はつて次に何を借りようか迷つて、然う云へばと思ひ借りて觀た。
結論。
面白かつた。只の御涙頂戴では無かつた。ドタバタコメディなのだが話にスピード感が在つてあつと云ふ間に觀終はつて仕舞つた。
こんな事なら當時映畫館に觀に行けば好かつた。
悠遊 (江戸川橋)
東京ゴッドファーザーズ を觀終はつたら腹が減つたので、悠遊 に行つた。
此處の湯豆腐鍋は鱈の切り身も入つてゐるのに一人前で 680 圓。
美味しいし暖まるし安いしで云ふ事無し。
暖まつて歸つて來た。