summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/s5l8702/nor-target.h28
-rw-r--r--firmware/target/hosted/lcd-linuxfb.c24
-rw-r--r--firmware/target/hosted/samsungypr/lcd-ypr.c14
-rw-r--r--firmware/target/mips/ingenic_jz47xx/app.lds8
-rw-r--r--firmware/target/mips/ingenic_jz47xx/crt0.S2
5 files changed, 51 insertions, 25 deletions
diff --git a/firmware/target/arm/s5l8702/nor-target.h b/firmware/target/arm/s5l8702/nor-target.h
index 4ebe1d58d4..3d2790d123 100644
--- a/firmware/target/arm/s5l8702/nor-target.h
+++ b/firmware/target/arm/s5l8702/nor-target.h
@@ -87,6 +87,34 @@ int bootflash_compare(int port, int offset, void* addr, int size);
87void bootflash_erase_blocks(int port, int first, int n); 87void bootflash_erase_blocks(int port, int first, int n);
88void bootflash_close(int port); 88void bootflash_close(int port);
89 89
90/*
91 * SysCfg
92 */
93struct SysCfgHeader {
94 uint32_t magic; // always 'SCfg'
95 uint32_t size;
96 uint32_t unknown1; // 0x00000200 on iPod classic
97 uint32_t version; // maybe? 0x00010001 on iPod classic
98 uint32_t unknown2; // 0x00000000 on iPod classic
99 uint32_t num_entries;
100}; // 0x18
101
102struct SysCfgEntry {
103 uint32_t tag;
104 uint8_t data[0x10];
105};
106
107#define SYSCFG_MAGIC 0x53436667 // SCfg
108
109#define SYSCFG_TAG_SRNM 0x53724e6d // SrNm
110#define SYSCFG_TAG_FWID 0x46774964 // FwId
111#define SYSCFG_TAG_HWID 0x48774964 // HwId
112#define SYSCFG_TAG_HWVR 0x48775672 // HwVr
113#define SYSCFG_TAG_CODC 0x436f6463 // Codc
114#define SYSCFG_TAG_SWVR 0x53775672 // SwVr
115#define SYSCFG_TAG_MLBN 0x4d4c424e // MLBN
116#define SYSCFG_TAG_MODN 0x4d6f6423 // Mod#
117#define SYSCFG_TAG_REGN 0x5265676e // Regn
90 118
91/* 119/*
92 * IM3 120 * IM3
diff --git a/firmware/target/hosted/lcd-linuxfb.c b/firmware/target/hosted/lcd-linuxfb.c
index 14c8c30f89..5dda5cf1cc 100644
--- a/firmware/target/hosted/lcd-linuxfb.c
+++ b/firmware/target/hosted/lcd-linuxfb.c
@@ -59,14 +59,21 @@ void lcd_init_device(void)
59 panicf("Cannot read framebuffer fixed information"); 59 panicf("Cannot read framebuffer fixed information");
60 } 60 }
61 61
62#if 0 62 if(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0)
63 /* check resolution and framebuffer size */
64 if(vinfo.xres != LCD_WIDTH || vinfo.yres != LCD_HEIGHT || vinfo.bits_per_pixel != LCD_DEPTH)
65 { 63 {
66 panicf("Unexpected framebuffer resolution: %dx%dx%d\n", vinfo.xres, 64 panicf("Cannot read framebuffer variable information");
67 vinfo.yres, vinfo.bits_per_pixel); 65 }
66
67 /* Make sure we match our desired bitdepth */
68 if (vinfo.bits_per_pixel != LCD_DEPTH || vinfo.xres != LCD_WIDTH || vinfo.yres != LCD_HEIGHT) {
69 vinfo.bits_per_pixel = LCD_DEPTH;
70 vinfo.xres = LCD_WIDTH;
71 vinfo.yres = LCD_HEIGHT;
72 if (ioctl(fd, FBIOPUT_VSCREENINFO, &vinfo)) {
73 panicf("Cannot set framebuffer to %dx%dx%d",
74 vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);
75 }
68 } 76 }
69#endif
70 /* Note: we use a framebuffer size of width*height*bbp. We cannot trust the 77 /* Note: we use a framebuffer size of width*height*bbp. We cannot trust the
71 * values returned by the driver for line_length */ 78 * values returned by the driver for line_length */
72 79
@@ -77,11 +84,6 @@ void lcd_init_device(void)
77 panicf("Cannot map framebuffer"); 84 panicf("Cannot map framebuffer");
78 } 85 }
79 86
80 if(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0)
81 {
82 panicf("Cannot read framebuffer variable information");
83 }
84
85 memset(framebuffer, 0, finfo.smem_len); 87 memset(framebuffer, 0, finfo.smem_len);
86 88
87#ifdef HAVE_LCD_ENABLE 89#ifdef HAVE_LCD_ENABLE
diff --git a/firmware/target/hosted/samsungypr/lcd-ypr.c b/firmware/target/hosted/samsungypr/lcd-ypr.c
index b8db2eedd1..035abaeba7 100644
--- a/firmware/target/hosted/samsungypr/lcd-ypr.c
+++ b/firmware/target/hosted/samsungypr/lcd-ypr.c
@@ -66,17 +66,17 @@ void lcd_init_device(void)
66 exit(2); 66 exit(2);
67 } 67 }
68 68
69 /* Now we get the settable settings, and we set 16 bit bpp */ 69 /* Now we get the settable settings */
70 if (ioctl(dev_fd, FBIOGET_VSCREENINFO, &vinfo) == -1) { 70 if (ioctl(dev_fd, FBIOGET_VSCREENINFO, &vinfo) == -1) {
71 perror("Error reading variable information"); 71 perror("Error reading variable information");
72 exit(3); 72 exit(3);
73 } 73 }
74 74
75 vinfo.bits_per_pixel = LCD_DEPTH; 75 vinfo.bits_per_pixel = LCD_DEPTH; /* Explicitly set our desired depth */
76 76
77 if (ioctl(dev_fd, FBIOPUT_VSCREENINFO, &vinfo)) { 77 if (ioctl(dev_fd, FBIOPUT_VSCREENINFO, &vinfo)) {
78 perror("fbset(ioctl)"); 78 perror("fbset(ioctl)");
79 exit(4); 79 exit(4);
80 } 80 }
81 81
82 printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel); 82 printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel);
@@ -84,17 +84,17 @@ void lcd_init_device(void)
84 /* Figure out the size of the screen in bytes */ 84 /* Figure out the size of the screen in bytes */
85 screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8; 85 screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
86 if (screensize != FRAMEBUFFER_SIZE) { 86 if (screensize != FRAMEBUFFER_SIZE) {
87 exit(4);
88 perror("Display and framebuffer mismatch!\n"); 87 perror("Display and framebuffer mismatch!\n");
88 exit(5);
89 } 89 }
90 90
91 /* Map the device to memory */ 91 /* Map the device to memory */
92 dev_fb = mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, 0); 92 dev_fb = mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, 0);
93 if ((int)dev_fb == -1) { 93 if ((int)dev_fb == -1) {
94 perror("Error: failed to map framebuffer device to memory"); 94 perror("Error: failed to map framebuffer device to memory");
95 exit(4); 95 exit(6);
96 } 96 }
97 printf("The framebuffer device was mapped to memory successfully.\n"); 97 printf("Framebuffer device successfully mapped into memory.\n");
98 98
99 /* Be sure to turn on display at startup */ 99 /* Be sure to turn on display at startup */
100 ioctl(dev_fd, FBIOBLANK, VESA_NO_BLANKING); 100 ioctl(dev_fd, FBIOBLANK, VESA_NO_BLANKING);
diff --git a/firmware/target/mips/ingenic_jz47xx/app.lds b/firmware/target/mips/ingenic_jz47xx/app.lds
index 1d300fed82..29a973a0ca 100644
--- a/firmware/target/mips/ingenic_jz47xx/app.lds
+++ b/firmware/target/mips/ingenic_jz47xx/app.lds
@@ -37,15 +37,11 @@ SECTIONS
37{ 37{
38 . = DRAMORIG; 38 . = DRAMORIG;
39 39
40 .startup : 40 .text :
41 { 41 {
42 loadaddress = .; 42 loadaddress = .;
43 _loadaddress = .; 43 _loadaddress = .;
44 *(.startup.text); 44 *(.init.text);
45 } > DRAM
46
47 .text :
48 {
49 *(.text*); 45 *(.text*);
50#ifndef HAVE_INIT_ATTR 46#ifndef HAVE_INIT_ATTR
51 *(.init*); 47 *(.init*);
diff --git a/firmware/target/mips/ingenic_jz47xx/crt0.S b/firmware/target/mips/ingenic_jz47xx/crt0.S
index b73a43d8f2..ee203b3b4d 100644
--- a/firmware/target/mips/ingenic_jz47xx/crt0.S
+++ b/firmware/target/mips/ingenic_jz47xx/crt0.S
@@ -44,7 +44,7 @@
44 .extern main 44 .extern main
45 .global _start 45 .global _start
46 46
47 .section .startup.text,"ax",%progbits 47 .section .init.text
48 .set push 48 .set push
49 .set mips32 49 .set mips32
50 .set noreorder 50 .set noreorder