トップ «前の日記(2008-02-16) 最新 次の日記(2008-02-18)» 編集

Pyon's Diary

[はてなブックマーク登録数] [Google に登録] [RSS フィード] Gourmet Hardware Programming Society Software
成る可くJIS X 0213:2004對應MSフォント(5.0)、IPAフォント(003.02)で御覽下さい

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 で電源が落ちる事が判つた。(理由は好く判ら無い)

Tags: Hardware | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] 東京ゴッドファーザーズ

東京ゴッドファーザーズ 東京ゴッドファーザーズ を見た。

此乃映畫の宣傳を見た時「何か御涙頂戴なんだろうなあ」と思つて映畫を觀に行く氣が餘り起こら無かつた。

ハルヒ・シリーズを借り終はつて次に何を借りようか迷つて、然う云へばと思ひ借りて觀た。

結論。

面白かつた。只の御涙頂戴では無かつた。ドタバタコメディなのだが話にスピード感が在つてあつと云ふ間に觀終はつて仕舞つた。

こんな事なら當時映畫館に觀に行けば好かつた。

Tags: Anime | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] 悠遊 (江戸川橋)

東京ゴッドファーザーズ を觀終はつたら腹が減つたので、悠遊 に行つた。

此處の湯豆腐鍋は鱈の切り身も入つてゐるのに一人前で 680 圓。

美味しいし暖まるし安いしで云ふ事無し。

暖まつて歸つて來た。

Tags: Gourmet | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink
[]

© pyon