Walrus,Visit. | 一覧 | 検索 | 更新履歴(RSS/NEcho) | 新規作成
編集 | 編集(管理者用) | 差分

Linuxザウルス開発メモ/ハードウェア - ハードも好きにいじろう。

編集

ハードも好きにいじろう。

とりあえずSL-C700を分解してみました。

ページ作成: ヤマケン
Page created: YamaKen <yamaken at bp.iij4u.or.jp>

Use Excite_web_translation to translate this page into English. Sorry for inconvenience.

関連ページ

編集

SL-C700分解写真

編集

基板全体

編集

SDスロット

編集

SL-C750分解写真

編集

基板全体

編集

SL-C700ハードウェア情報

編集

シャープ本家の情報

編集

CPU

編集

Processor Type:  PXA250
Revision:        B2
Temp:            C (Commercial Temp)
Processor Speed: 400

メインメモリ(SDRAM)

編集

HY: HYNIX
5:  SDRAMs
V:  Vdd=3.3V
2:  128M
6:  x16
C:  C-Version (DIE GENERATION)
L:  LowPower
F:  FBGA
-H: PC133,CL3

フラッシュメモリ

編集

フラッシュメモリコントローラ

編集

P2ROM (Production Programmed ROM)

編集

ビデオコントローラ

編集

ビデオメモリ

編集

オーディオコーデック

編集

アナログインタフェイス

編集

圧電サウンダ

編集

電源

編集

SL-C750ハードウェア情報

編集

シャープ本家の情報

編集
システムブロック図(まだ)

CPU

編集

Processor Type:  PXA255
Revision:        A0
Temp:            C (Commercial Temp)
Processor Speed: 400

メインメモリ(SDRAM)

編集
54balls CSP 
3.0V & 3.3V power supply
4M x 16Bit x 4 Banks Synchronous DRAM
133MHz(CL=3)

SL-5500ハードウェア情報

編集

CPU

編集

製品情報 ここから各種資料をダウンロード可能

メインメモリ(SDRAM)

編集

フラッシュメモリ

編集

圧電サウンダ

編集

各種メニュー

編集
下記のように行うとDIAG MENUやService Menuを表示することができる。

元ネタはZaurus Forum http://externe.net/zaurus/forum の Hardware の P2ROM Contents, flashing and architecture? にあるがこのとおりにやらなくても表示できるかもしれない(英語が苦手なので手順がよくわからなかった)。

また、確認した機種はC750なので他の機種だと違うかもしれない。

DIAG MENU

編集
1.電源をOFFにする

2.バッテリーとAC電源を取り外す

3.バッテリーは取り外したままで、DキーとPキーを押しながらAC電源をつなぐ

4.キーを離すとDIAG MENUが表示される。

SERVICE MENU

編集
危険:EXTRA MENUのZaurus TestのNAND Flash(Full)を実行すると、内蔵Flashに書かれている全てのデータが上書きされるので、Zaurusが今後使用できなくなります。

その他のNAND関係のコマンドを実行すると内蔵Flashにテスト用のデータを書き込む、あるいはFlash消去を行うかもしれないので実行しないでください。

1.電源をOFFにする

2.バッテリーとAC電源を取り外す

3.バッテリーは取り外したままで、DキーとMキーを押しながらAC電源をつなぐ

4.キーを離すとSERVICE MENUが表示される。

各機種共通資料

編集

CPU

編集

SD

編集

カーネルから読み取れる情報

編集

各種定義

編集

機種 コード名 USBD_SERIAL_PRODUCT IDUSBD_NET_PRODUCTID
SL-5000D COLLIE 0x80020x8003
SL-5500 COLLIE 0x80020x8003
SL-A300 DISCOVERY 0x80050x8005
SL-B500 POODLE 0x80060x8006
SL-5600 POODLE 0x80060x8006
SL-C700 CORGI 0x80070x8007
SL-C750 SHEPHERD 0x90310x9031
SL-7500 SHEPHERD 0x90310x9031
SL-C760 HUSKY 0x90310x9031

C700 ROM1.00カーネルとC750 ROM1.10カーネルの差分

編集

dep_bool 'Enable Fast Context Switch Extention' CONFIG_ARM_FCSE $CONFIG_CPU_32
+ *  04-Apr-2003 Sharp for ARM FCSE
+#ifdef CONFIG_ARM_FCSE
+#define TASK_SIZE     ((current->mm->context.cpu_pid > CPU_PID_SPECIAL) ? (CPU_PID_SIZE) : (0xc0000000UL))
+#else
 #define TASK_SIZE	(0xc0000000UL)
+#endif
 /* The ARM doesn't have a mmu context */
+#ifdef CONFIG_ARM_FCSE
+typedef struct {
+	int cpu_pid;
+} mm_context_t;
+#else
 typedef struct { } mm_context_t;
+#endif

static void __init
fixup_corgi(struct machine_desc *desc, struct param_struct *params,
		char **cmdline, struct meminfo *mi)
{
#if defined(CONFIG_ARCH_PXA_SHEPHERD)
	SET_BANK (0, 0xa0000000, 64*1024*1024);
#else
	SET_BANK (0, 0xa0000000, 32*1024*1024);
#endif

#if defined(CONFIG_ARCH_PXA_SHEPHERD)
MACHINE_START(CORGI, "SHARP Shepherd")
#else
MACHINE_START(CORGI, "SHARP Corgi")
#endif

+ *	16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on
+ *	13-Mar-2003 SHARP for PXA255

+#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+		if ( cccr_reg == 0x161 ) {
+			cpu_xscale_sl_change_speed_161();
+		}
+		else if ( cccr_reg == 0x145 ) {
+			cpu_xscale_sl_change_speed_145();
+		} else {
+			cpu_xscale_change_speed_241();
+		}
+#else

 		signed long passcount;
 		int i = 0;
 		passcount = OSCR - OSMR0;
-		if (passcount >= 0) {
+		if ((passcount >= 0) || ( ( idletick != 0) && (passcount < -(idletick+1) * LATCH)) ) {
 			// timer irq has occured
 			(*(unsigned long *)&jiffies)+=idletick;
 			if ((OSSR & OSSR_M0) == 0) {

-			while ((unsigned long)(OSMR0 - OSCR) < 0) {
+			while (((signed long)(OSMR0 - OSCR)) < 0) {

+#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+		sharpsl_restart_nonstop();
+#else
 		sharpsl_restart();
+#endif

-      sleep_on(&fl_key);
+      interruptiblee_sleep_on(&fl_key);

 #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+	sharpsl_chg_freq = (unsigned int)0x00000161;
+	cpu_xscale_sl_change_speed_161();
+#else
 #if 1	// default 400MHz
 	sharpsl_chg_freq = (unsigned int)0x00000241;
 #else
 	cpu_xscale_sl_change_speed_145_without_lcd();
+#endif
 #endif

+ *	16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on
+ *	09-Apr-2003 SHARP for Shaphard (software reset)

+#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+	  case 0x161:
+	    if ( CCCR == 0x0161 ) break;
+		cpu_xscale_sl_change_speed_161();
+	    cccr_reg = CCCR;
+	    break;
+#endif

+#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+	else if ( sharpsl_chg_freq == 0x0161 ) {
+	  cpu_xscale_sl_change_speed_161();
+	}
+#endif

+ *	14-Mar-2003 Sharp for PXA255

+#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+
+ENTRY(cpu_xscale_sl_change_speed_161)
+ 	stmfd	sp!, {r0, r1, r2, r3, r4, lr}
+
+ 	ldr		r0, CMR_BASE
+	ldr		r1, =0x161
+ 	str		r1, [r0, #CMR_CCCR]
+
+ 	ldr		r0, MD_BASE
+	ldr		r2, [r0, #MD_MDREFR]
+
+ 	bl		CodeOnCache_161
+ 
+ 	.align 5
+ 	.text
+CodeOnCache_161:
+	mov		r1, #0x2
+ 	mcr		p14, 0, r1, c6, c0, 0
+ 	str		r2, [r0, #MD_MDREFR]
+	ldr		r2, [r0, #MD_MDREFR]
+
+	ldmfd	sp!, {r0, r1, r2, r3, r4, pc}
+ 		
+ 	.align 5
+ 	.text
+
+#endif

+ *	16-Jan-2003 SHARP enable non-cached bufferable page
+ *	20-Mar-2003 SHARP supported PXA255
+ *	04-Apr-2003 Sharp for ARM FCSE

+#ifdef CONFIG_ARM_FCSE
+	.align  5
+ENTRY(cpu_xscale_set_pgd_without_invalidation)
+	mcr	p15, 0, r0, c2, c0, 0		@ load page table pointer
+	cpwait_ret lr, ip
+
+	.align	5
+ENTRY(cpu_write_pid_register)
+	mov	r0, r0, lsl #25
+	mcr	p15, 0, r0, c13, c0, 0
+	cpwait_ret lr, ip
+#endif

 #if CACHE_WRITE_THROUGH
-	bic	r2, r2, #L_PTE_BUFFERABLE
+	tst	r1, #L_PTE_CACHEABLE
+	bicne	r2, r2, #L_PTE_BUFFERABLE	@ clear B only if C is set
 #else

 	.type	cpu_arch_name, #object
 cpu_arch_name:
-	.asciz	"armv5"
+	.asciz	"armv5te"
 	.size	cpu_arch_name, . - cpu_arch_name

static int rtc_ioctl(struct inode *inode, struct file *file,
		     unsigned int cmd, unsigned long arg)
{
...
 	case RTC_ALM_SET:
+#ifdef CONFIG_ARCH_SHARP_SL
+	{
+		struct rtc_time rtc_tm;
+		unsigned char mon, day, hrs, min, sec;
+		unsigned int yrs;
+
+		if (copy_from_user(&rtc_tm, (struct rtc_time*)arg,
+				sizeof(struct rtc_time)))
+			return -EFAULT;
+
+		yrs = rtc_tm.tm_year + 1900;
+		mon = rtc_tm.tm_mon + 1;   /* tm_mon starts at zero */
+		day = rtc_tm.tm_mday;
+		hrs = rtc_tm.tm_hour;
+		min = rtc_tm.tm_min;
+		sec = rtc_tm.tm_sec;
+
+		if ((yrs < 1970) || (yrs > 2037)) 
+			return -EINVAL;
+		if ((mon > 12) || (day == 0))
+			return -EINVAL;
+		if (day > (days_in_mo[mon-1] + ((mon == 2) && is_leap(yrs))))
+			return -EINVAL;
+		if ((hrs >= 24) || (min >= 60) || (sec >= 60))
+			return -EINVAL;
+
+		RTAR = mktime(yrs, mon, day, hrs, min, sec);
+
+		return 0;
+	}
+#else	
		if (copy_from_user (&tm2, (struct rtc_time*)arg, sizeof (tm2)))
			return -EFAULT;
		decodetime (RCNR, &tm);
		if ((unsigned)tm2.tm_hour < 24)
			tm.tm_hour = tm2.tm_hour;
		if ((unsigned)tm2.tm_min < 60)
			tm.tm_min = tm2.tm_min;
		if ((unsigned)tm2.tm_sec < 60)
			tm.tm_sec = tm2.tm_sec;
		RTAR = mktime (	tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
				tm.tm_hour, tm.tm_min, tm.tm_sec);
		return 0;
#endif

+ *   01-Apr-2003 Sharp   for SL-C750

+#ifdef CONFIG_ARCH_PXA_SHEPHERD
+static duty_vr_t corgibl_duty_table[CORGI_LIGHT_SETTING] = {
+	{0x00, 0},	//   0%		Light Off
+	{0x01, 0},	//  20%		Dim 1
+	{0x05, 0},	//  40%		2
+	{0x0b, 0},	//  70%		3
+	{0x05, 1},	//  40%		4
+	{0x0b, 1},	//  70%		5
+	{0x1f, 1}	// 100%		6
+};
+#else
 static duty_vr_t corgibl_duty_table[CORGI_LIGHT_SETTING] = {
 	{0x00, 0},	//   0%		Light Off
 	{0x01, 0},	//  20%		Dim
 	{0x02, 0},	//  25%		1
 	{0x0b, 0},	//  70%		2
 	{0x05, 1},	//  40%		3
 	{0x0b, 1},	//  70%		4
 	{0x1f, 1}	// 100%		5
 };
+#endif

+ *  28-02-2003 SHARP supported VRAM image cache for ver.1.3
+ *  19-03-2003 SHARP disabled VRAM image cache for ver.1.3
+ *  16-04-2003 SHARP for Shepherd

+//#define _IMAGE_CACHE_SUPPORT // for image cache on video memory

+#ifdef _IMAGE_CACHE_SUPPORT
+#define REMAPPED_FB_LEN   0x200000
+#else //_IMAGE_CACHE_SUPPORT
 #define REMAPPED_FB_LEN   0x15ffff
+#endif //_IMAGE_CACHE_SUPPORT

+#define W100FB_CONFIG_EX       0x57415202 /* WAL\02 */

+#ifdef _IMAGE_CACHE_SUPPORT // for image cache on video memory
+
+#define IMG_CACHE_MALLOC_SIZE 0x1000
+#define IMG_CACHE_OFFSET_VGA (0x97008)
+#define IMG_CACHE_TOTAL_SIZE_VGA (0x200000-0x4000-IMG_CACHE_OFFSET_VGA)
+#define IMG_CACHE_SKIP_MARK (0xffffffff)
+
+static u32 *save_img_cache_ptr=NULL;
+static u32 save_img_alloc_num=0;
+#define __PRINTK(arg...) //printk(arg)
+#undef __SUM //for debug
+
+static u32* save_image_cache(u32 *alloc_num);
+static int restore_image_cache(u32 *img_src,u32 alloc_num);
+static int cleanup_image_cache(u32 *img_src,u32 alloc_num);
+
+// defalut don't skip
+static int start_skip_save_image_no = (-1);
+static int end_skip_save_image_no = (-1);
+#endif //_IMAGE_CACHE_SUPPORT

+#ifdef CONFIG_ARCH_PXA_HUSKY
+	c->blocks = consistent_alloc(GFP_KERNEL,
+				     sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+				     &c->blocks_phys);
+#else
 	c->blocks = kmalloc(sizeof(struct jffs2_eraseblock) * c->nr_blocks, GFP_KERNEL);
+#endif

+#ifdef CONFIG_ARCH_PXA_HUSKY
+		consistent_free( c->blocks,
+				 sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+				 c->blocks_phys );
+#else
 		kfree(c->blocks);
+#endif

+ *     05-Dec-2002 SHARP  adjust REVERVED_BLOCKS values for storage-full
+ *     21-May-2003 SHARP modified JFFS2_RESERVED_BLOCKS_BAD

+#ifdef CONFIG_ARCH_PXA_HUSKY
+#define JFFS2_RESERVED_BLOCKS_BAD 80
+#else
 #define JFFS2_RESERVED_BLOCKS_BAD 24
+#endif

SL-C700詳細解析

編集

/proc/cpuの情報

編集
レジスタ設定を読み書きするカーネルモジュールが提供されている。

insmod /lib/modules/2.4.18-rmk7-pxa3-embedix/kernel/arch/arm/mach-pxa/registers.o
cd /proc/cpu/registers
ls
cat HOGE

cat CCCR
0x241
# Core Clock Configuration Register (CCCR)
# L: 00001 Multiplier = 27 (Memory Frequency is 99.53MHz from 3.6864 MHz crystal)
# M:    10 Multiplier = 2 (Run Mode Frequency is 2 times the Memory Frequency)
# N:   100 Multiplier = 2
#      Run Mode Frequency to Turbo Mode Frequency Multiplier Turbo
#      Mode Freq. = Run Mode Frequency * N

cat MDCNFG
0x01A81AA9
# SDRAM Configuration Register (MDCNFG)
# DE0: 1
# DE1: 0
# DWID0: 0
# DCAC0[1:0]: 01
# DRAC0[1:0]: 01
# DNB0: 1
# DTC0[1:0]: 10
#            tRP=3, CL=3, tRCD=3, tRAS=7, tRC=10 (単位: clk)
# DADDR0: 0
# DLATCH0: 1
# DSA1111_0: 1
# Reserved: 000

SL-C750詳細解析

編集

/proc/cpuの情報

編集
行い方はSL-C700詳細解析を参照

cat CCCR
0x161
# Core Clock Configuration Register (CCCR)
# L(Bit4-0): 00001 Multiplier = 27 (Memory Frequency is 99.53MHz from 3.6864 MHz crystal)
# M(Bit6-5):    11 Multiplier = 3 (run mode frequency is 4 times the memory frequency)
# N(Bit9-7):   010 Multiplier = 1
#      Run Mode Frequency to Turbo Mode Frequency Multiplier Turbo
#      Mode Freq. = Run Mode Frequency * N

MDCNFGレジスタはPXA255 Processor Developer's Manual(6-8)参照。

cat MDCNFG
0x01A81AC9
# SDRAM Configuration Register (MDCNFG)
# DE0(Bit0): 1 SDRAM partition0 enabled
# DE1(Bit1): 0 SDRAM partition1 disabled
# DWID0(Bit2): 0 SDRAM data bus width for partition pair 0/1(32bit)
# DCAC0[1:0](Bit4-3): 01 Number of Column Address bits for partition pair 0/1(9 column address bits)
# DRAC0[1:0](Bit6-5): 10 SDRAM row address bit count for partition pair 0/1(13 row address bits)
# DNB0(Bit7): 1 Number of banks in lower partition pair(4 internal SDRAM banks)
# DTC0[1:0](Bit9-8): 10 Timing Category for SDRAM pair 0/1.
#            tRP=3, CL=3, tRCD=3, tRAS=7, tRC=10 (単位: clk)
# DADDR0(Bit10): 0 reserved
# DLATCH0(Bit11): 1 Return Data from SDRAM latching scheme for pair 0/1
#                   (Latch return data with return clock)
# DSA1111_0(Bit12): 1 Use SA1111 Addressing Muxing Mode for pair 0/1.
# Reserved(Bit15-13: 000

SL-C700はなぜ遅いか(ハードウェア編)

編集

他のサイト

編集

WANTED

編集

コメント

編集

写真貼り付けや情報追加は勝手にやっちゃってください。関連する規格の資料なんかも集約したいですね。


お名前: コメント: 更新

カーネルアップデート関係は、専用のページ「Linuxザウルス開発メモ/独自ビルドカーネル」を作成しました。カーネルアップデート関係のこれ以降の投稿は、専用ページの方へお願いいたします。また、このページに投稿されたカーネルアップデート関係の発言は、専用ページにもコピーしました。

いやな想像をすると、IntelはPXA250型番ではバグを直さず*********つもり
では? ************************するというのは有り得ると
思う。PDAの新機種が出るタイミングでバグを直して「新しいXScaleになったから速く
なった」と****すれば**********。