Send commitlog mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
[EMAIL PROTECTED]
You can reach the person managing the list at
[EMAIL PROTECTED]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:
1. r3189 - branches/src/target/kernel/2.6.23.x/patches
([EMAIL PROTECTED])
2. r3190 - branches/src/target/kernel/2.6.23.x/patches
([EMAIL PROTECTED])
3. r3191 - branches/src/target/kernel/2.6.23.x/patches
([EMAIL PROTECTED])
4. r3192 - trunk/src/target/OM-2007.2/artwork/sounds
([EMAIL PROTECTED])
5. r3193 - branches/src/target/kernel/2.6.23.x/patches
([EMAIL PROTECTED])
6. r3194 - branches/src/target/kernel/2.6.23.x/patches
([EMAIL PROTECTED])
--- Begin Message ---
Author: shoragan
Date: 2007-10-16 16:59:51 +0200 (Tue, 16 Oct 2007)
New Revision: 3189
Modified:
branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
branches/src/target/kernel/2.6.23.x/patches/lis302dl.patch
Log:
Follow changes in 2.6.22:
(orig r3144): laforge | 2007-10-10 18:23:20 +0200
make lis302dl apply again (fallout from last commit, sorry)
(orig r3143): laforge | 2007-10-10 18:17:35 +0200
fix non-fatal kernel oops during gta02 boot (spi bus number 0 was used twice)
Modified: branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
2007-10-16 14:44:30 UTC (rev 3188)
+++ branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
2007-10-16 14:59:51 UTC (rev 3189)
@@ -2,7 +2,7 @@
===================================================================
--- /dev/null
+++ linux-2.6.22/arch/arm/mach-s3c2440/mach-gta02.c
-@@ -0,0 +1,658 @@
+@@ -0,0 +1,600 @@
+/*
+ * linux/arch/arm/mach-s3c2440/mach-gta02.c
+ *
@@ -315,6 +315,8 @@
+ &s3c_device_usbgadget,
+ &s3c_device_nand,
+ &s3c_device_ts,
++ &s3c_device_spi0,
++ &s3c_device_spi1,
+};
+
+static struct s3c2410_nand_set gta02_nand_sets[] = {
@@ -415,7 +417,7 @@
+ /* controller_data */
+ /* irq */
+ .max_speed_hz = 10 * 1000 * 1000,
-+ .bus_num = 1,
++ .bus_num = 2,
+ /* chip_select */
+ },
+};
@@ -434,66 +436,6 @@
+ .board_info = gta02_spi_board_info,
+};
+
-+#if 0
-+#ifdef SPI_HARD
-+static struct s3c2410_spi_info spi_cfg = {
-+ .pin_cs = S3C2410_GPG3,
-+ .board_size = ARRAY_SIZE(gta01_spi_board_info),
-+ .board_info = gta01_spi_board_info,
-+};
-+#else
-+static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int cs)
-+{
-+ switch (cs) {
-+ case BITBANG_CS_ACTIVE:
-+ s3c2410_gpio_setpin(S3C2410_GPG3, 0);
-+ break;
-+ case BITBANG_CS_INACTIVE:
-+ s3c2410_gpio_setpin(S3C2410_GPG3, 1);
-+ break;
-+ }
-+}
-+
-+static struct s3c2410_spigpio_info spi_gpio_cfg = {
-+ .pin_clk = S3C2410_GPG7,
-+ .pin_mosi = S3C2410_GPG6,
-+ .pin_miso = S3C2410_GPG5,
-+ .board_size = ARRAY_SIZE(gta01_spi_board_info),
-+ .board_info = gta01_spi_board_info,
-+ .chip_select = &spi_gpio_cs,
-+};
-+
-+static struct resource s3c_spi_lcm_resource[] = {
-+ [0] = {
-+ .start = S3C2410_GPG3,
-+ .end = S3C2410_GPG3,
-+ },
-+ [1] = {
-+ .start = S3C2410_GPG5,
-+ .end = S3C2410_GPG5,
-+ },
-+ [2] = {
-+ .start = S3C2410_GPG6,
-+ .end = S3C2410_GPG6,
-+ },
-+ [3] = {
-+ .start = S3C2410_GPG7,
-+ .end = S3C2410_GPG7,
-+ },
-+};
-+
-+struct platform_device s3c_device_spi_lcm = {
-+ .name = "s3c24xx-spi-gpio",
-+ .id = 1,
-+ .num_resources = ARRAY_SIZE(s3c_spi_lcm_resource),
-+ .resource = s3c_spi_lcm_resource,
-+ .dev = {
-+ .platform_data = &spi_gpio_cfg,
-+ },
-+};
-+#endif
-+#endif
-+
+static struct resource gta02_led_resources[] = {
+ [0] = {
+ .start = GTA02_GPIO_VIBRATOR_ON,
Modified: branches/src/target/kernel/2.6.23.x/patches/lis302dl.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/lis302dl.patch 2007-10-16
14:44:30 UTC (rev 3188)
+++ branches/src/target/kernel/2.6.23.x/patches/lis302dl.patch 2007-10-16
14:59:51 UTC (rev 3189)
@@ -14,18 +14,21 @@
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
-@@ -310,6 +311,7 @@
- &s3c_device_usbgadget,
- &s3c_device_nand,
- &s3c_device_ts,
-+ &s3c_device_spi1,
+@@ -403,7 +404,7 @@
+ .oversampling_shift = 5,
};
- static struct s3c2410_nand_set gta02_nand_sets[] = {
-@@ -437,6 +439,47 @@
+-/* SPI */
++/* SPI: LCM control interface attached to Glamo3362 */
+
+ static struct spi_board_info gta02_spi_board_info[] __initdata = {
+ {
+@@ -431,6 +432,48 @@
.board_info = gta02_spi_board_info,
};
++/* SPI: Accelerometers attached to SPI of s3c244x */
++
+static void gta02_spi_acc_set_cs(struct s3c2410_spi_info *spi, int cs, int
pol)
+{
+ s3c2410_gpio_setpin(cs, pol);
@@ -66,11 +69,10 @@
+ .board_info = >a02_spi_acc_bdinfo,
+};
+
-+
- #if 0
- #ifdef SPI_HARD
- static struct s3c2410_spi_info spi_cfg = {
-@@ -626,6 +669,7 @@
+ static struct resource gta02_led_resources[] = {
+ [0] = {
+ .start = GTA02_GPIO_VIBRATOR_ON,
+@@ -560,6 +603,7 @@
s3c_device_usb.dev.platform_data = >a02_usb_info;
s3c_device_nand.dev.platform_data = >a02_nand_info;
s3c_device_sdi.dev.platform_data = >a02_mmc_cfg;
--- End Message ---
--- Begin Message ---
Author: shoragan
Date: 2007-10-16 17:02:36 +0200 (Tue, 16 Oct 2007)
New Revision: 3190
Modified:
branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
Log:
Follow change in 2.6.22:
(orig r3155): laforge | 2007-10-13 03:03:57 +0200
GTA02: add missing GPIO definitions for GTA02v1 .. GTA02v4
Modified: branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
2007-10-16 14:59:51 UTC (rev 3189)
+++ branches/src/target/kernel/2.6.23.x/patches/gta02-core.patch
2007-10-16 15:02:36 UTC (rev 3190)
@@ -2,7 +2,7 @@
===================================================================
--- /dev/null
+++ linux-2.6.22/arch/arm/mach-s3c2440/mach-gta02.c
-@@ -0,0 +1,600 @@
+@@ -0,0 +1,614 @@
+/*
+ * linux/arch/arm/mach-s3c2440/mach-gta02.c
+ *
@@ -253,6 +253,8 @@
+ PMU_VRAIL_F_SUSPEND_ON;
+ break;
+ case GTA02v2_SYSTEM_REV:
++ case GTA02v3_SYSTEM_REV:
++ case GTA02v4_SYSTEM_REV:
+ /* we need to keep the 1.8V going since this is the SDRAM
+ * self-refresh voltage */
+ gta02_pcf_pdata.rails[PCF50633_REGULATOR_DOWN2].flags =
@@ -346,13 +348,15 @@
+ switch (system_rev) {
+ case GTA02v1_SYSTEM_REV:
+ case GTA02v2_SYSTEM_REV:
++ case GTA02v3_SYSTEM_REV:
++ case GTA02v4_SYSTEM_REV:
+ /* FIXME */
+ break;
+ }
+}
+
+static struct s3c24xx_mci_pdata gta02_mmc_cfg = {
-+ .gpio_detect = GTA02_GPIO_nSD_DETECT,
++ .gpio_detect = GTA02v1_GPIO_nSD_DETECT,
+ .set_power = >a02_mmc_set_power,
+ .ocr_avail = MMC_VDD_32_33,
+};
@@ -521,8 +525,8 @@
+ .flags = IORESOURCE_IRQ,
+ },
+ [2] = {
-+ .start = GTA02_GPIO_3D_RESET,
-+ .end = GTA02_GPIO_3D_RESET,
++ .start = GTA02v1_GPIO_3D_RESET,
++ .end = GTA02v1_GPIO_3D_RESET,
+ },
+};
+
@@ -540,9 +544,9 @@
+ switch (system_rev) {
+ case GTA02v1_SYSTEM_REV:
+ break;
-+ case GTA02v2_SYSTEM_REV:
-+ gta02_glamo_resources[2].start = GTA02v2_GPIO_3D_RESET;
-+ gta02_glamo_resources[2].end = GTA02v2_GPIO_3D_RESET;
++ default:
++ gta02_glamo_resources[2].start = GTA02_GPIO_3D_RESET;
++ gta02_glamo_resources[2].end = GTA02_GPIO_3D_RESET;
+ break;
+ }
+}
@@ -566,6 +570,16 @@
+ s3c_device_nand.dev.platform_data = >a02_nand_info;
+ s3c_device_sdi.dev.platform_data = >a02_mmc_cfg;
+
++ /* Only GTA02v1 has a SD_DETECT GPIO. Since the slot is not
++ * hot-pluggable, this is not required anyway */
++ switch (system_rev) {
++ case GTA02v1_SYSTEM_REV:
++ break;
++ default:
++ gta02_mmc_cfg.gpio_detect = 0;
++ break;
++ }
++
+ INIT_WORK(>a02_udc_vbus_drawer.work, __gta02_udc_vbus_draw);
+ s3c24xx_udc_set_platdata(>a02_udc_cfg);
+ set_s3c2410ts_info(>a02_ts_cfg);
@@ -607,7 +621,7 @@
===================================================================
--- /dev/null
+++ linux-2.6.22/include/asm-arm/arch-s3c2410/gta02.h
-@@ -0,0 +1,32 @@
+@@ -0,0 +1,94 @@
+#ifndef _GTA02_H
+#define _GTA02_H
+
@@ -617,28 +631,90 @@
+/* Different hardware revisions, passed in ATAG_REVISION by u-boot */
+#define GTA02v1_SYSTEM_REV 0x00000310
+#define GTA02v2_SYSTEM_REV 0x00000320
++#define GTA02v3_SYSTEM_REV 0x00000330
++#define GTA02v4_SYSTEM_REV 0x00000340
+
-+#define GTA02_GPIO_3D_IRQ S3C2410_GPG4
-+#define GTA02_GPIO_3D_RESET S3C2440_GPJ0
-+#define GTA02_GPIO_nSD_DETECT S3C2410_GPF5
-+#define GTA02_GPIO_USB_PULLUP S3C2410_GPB9
++#define GTA02_GPIO_n3DL_GSM S3C2410_GPA13 /* v1 + v2 + v3 only */
++
+#define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB3
-+#define GTA02_GPIO_HOLD_KEY S3C2410_GPF7
-+#define GTA02_GPIO_AUX_KEY S3C2410_GPF6
-+#define GTA02_GPIO_JACK_INSERT S3C2410_GPF4
++#define GTA02v1_GPIO_GPS_PWRON S3C2410_GPB4 /* v1 only */
++#define GTA02_GPIO_MODEM_RST S3C2410_GPB5
+#define GTA02_GPIO_BT_EN S3C2410_GPB6
-+#define GTA02_GPIO_GSENSOR1_CS S3C2410_GPD12
-+#define GTA02_GPIO_GSENSOR2_CS S3C2410_GPD13
++#define GTA02_GPIO_MODEM_ON S3C2410_GPB7
++#define GTA02v1_GPIO_EN_AGPS3V S3C2410_GPB8 /* v1 only */
++#define GTA02_GPIO_EXTINT8 S3C2410_GPB8
++#define GTA02_GPIO_USB_PULLUP S3C2410_GPB9
+
++#define GTA02v1_GPIO_nGPS_RST S3C2410_GPC0 /* v1 only */
++#define GTA02v12_GPIO_PIO3 S3C2410_GPC5 /* v1 + v2 only */
++#define GTA02_GPIO_PIO5 S3C2410_GPC5 /* v3 + v4 only */
++#define GTA02_GPIO_LCD_RESET S3C2410_GPC6 /* v1 + v2 only */
++#define GTA02v12_GPIO_PIO2 S3C2410_GPC7 /* v1 + v2 only */
++#define GTA02v2_nUSB_FLT S3C2410_GPC9 /* v2 only */
++#define GTA02v2_nUSB_OC S3C2410_GPC10 /* v2 only */
++#define GTA02v2_nGSM_OC S3C2410_GPC12 /* v2 only */
++
++#define GTA02v3_GPIO_nG1_CS S3C2410_GPD12 /* v3 + v4 only */
++#define GTA02v3_GPIO_nG2_CS S3C2410_GPD13 /* v3 + v4 only */
++
++#define GTA02_GPIO_nG1_INT S3C2410_GPF0
++#define GTA02_GPIO_IO1 S3C2410_GPF1
++#define GTA02v1_GPIO_nG2_INT S3C2410_GPF2 /* v1 only */
++#define GTA02_GPIO_PIO_2 S3C2410_GPF2 /* v2 + v3 + v4 only */
++#define GTA02_GPIO_JACK_INSERT S3C2410_GPF4
++#define GTA02v1_GPIO_nSD_DETECT S3C2410_GPF5 /* v1 only */
++#define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF5 /* v2 + v3 + v4 only */
++#define GTA02_GPIO_AUX_KEY S3C2410_GPF6
++#define GTA02_GPIO_HOLD_KEY S3C2410_GPF7
++
++#define GTA02_GPIO_3D_IRQ S3C2410_GPG4
++#define GTA02v1_GPIO_nG1_CS S3C2410_GPG8 /* v1 only */
++#define GTA02v2_GPIO_nG2_INT S3C2410_GPG8 /* v2 + v3 + v4 only */
++#define GTA02v3_GPIO_nUSB_OC S3C2410_GPG9 /* v3 + v4 only */
++#define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG10 /* v3 + v4 only */
++#define GTA02v1_GPIO_nG2_CS S3C2410_GPG11 /* v1 only */
++#define GTA02v3_GPIO_nGSM_OC S3C2410_GPG11 /* v3 + v4 only */
++
++#define GTA02v1_GPIO_3D_RESET S3C2440_GPJ0 /* v1 only */
++#define GTA02v2_GPIO_BAT_ID S3C2440_GPJ0 /* v2 only */
++#define GTA02v1_GPIO_WLAN_GPIO8 S3C2440_GPJ1 /* v1 only */
++#define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1 /* v2 + v3 + v4 only */
++#define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2
++#define GTA02_GPIO_HP_IN S3C2440_GPJ2 /* v2 + v3 + v4 only */
++#define GTA02v1_GPIO_KEEPACT S3C2440_GPJ3 /* v1 only */
++#define GTA02_GPIO_INT0 S3C2440_GPJ3 /* v2 + v3 + v4 only */
++#define GTA02_GPIO_nGSM_EN S3C2440_GPJ4
++#define GTA02_GPIO_3D_RESET S3C2440_GPJ5
++#define GTA02v4_GPIO_nDL_GSM S3C2440_GPJ6 /* v4 only */
++#define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7
++#define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8
++#define GTA02_GPIO_KEEPACT S3C2440_GPJ8
++#define GTA02v1_GPIO_AMP_SHUT S3C2440_GPJ9 /* v1 only */
++#define GTA02v2_nG1_CS S3C2440_GPJ9 /* v2 only */
++#define GTA02v1_GPIO_HP_IN S3C2440_GPJ10
++#define GTA02v2_nG2_CS S3C2440_GPJ10 /* v2 only */
++#define GTA02v1_GPIO_INT0 S3C2440_GPJ11 /* v1 only */
++#define GTA02_CHIP_PWD S3C2440_GPJ11 /* v2 + v3 + v4 only */
++#define GTA02v1_GPIO_nGSM_EN S3C2440_GPJ12 /* v1 only */
++#define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12 /* v2 + v3 + v4 only */
++
++#define GTA02_IRQ_GSENSOR_1 IRQ_EINT0
+#define GTA02_IRQ_MODEM IRQ_EINT1
++#define GTA02v1_IRQ_GSENSOR_2 IRQ_EINT2 /* v1 only */
++#define GTA02_IRQ_PIO_2 IRQ_EINT2 /* v2 + v3 + v4 only */
++#define GTA02_IRQ_nJACK_INSERT IRQ_EINT4
++#define GTA02v1_IRQ_nSD_CD IRQ_EINT5 /* v1 only */
++#define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5
++#define GTA02_IRQ_AUX IRQ_EINT6
++#define GTA02_IRQ_nHOLD IRQ_EINT7
++#define GTA02v1_IRQ_nSIM_CD IRQ_EINT8 /* v1 only */
++#define GTA02_IRQ_PCF50633 IRQ_EINT9
+#define GTA02_IRQ_3D IRQ_EINT12
-+#define GTA02_IRQ_PCF50633 IRQ_EINT9
-+#define GTA02_IRQ_GSENSOR_1 IRQ_EINT0
-+#define GTA02_IRQ_GSENSOR_2 IRQ_EINT16
++#define GTA02_IRQ_GSENSOR_2 IRQ_EINT16 /* v2 + v3 + v4 only */
++#define GTA02v3_IRQ_nUSB_OC IRQ_EINT17 /* v3 + v4 only */
++#define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18 /* v3 + v4 only */
++#define GTA02v3_IRQ_nGSM_OC IRQ_EINT19 /* v3 + v4 only */
+
-+/* Changes in GTA02v2 */
-+#define GTA02v2_GPIO_3D_RESET S3C2440_GPJ4
-+
+#endif /* _GTA02_H */
Index: linux-2.6.22/arch/arm/mach-s3c2440/Kconfig
===================================================================
--- End Message ---
--- Begin Message ---
Author: shoragan
Date: 2007-10-16 17:20:27 +0200 (Tue, 16 Oct 2007)
New Revision: 3191
Added:
branches/src/target/kernel/2.6.23.x/patches/asoc-neo1973_wm8753-power.patch
Modified:
branches/src/target/kernel/2.6.23.x/patches/series
Log:
Follow changes in 2.6.22:
(orig r3168): laforge | 2007-10-15 10:54:10 +0200
add the asoc amplifier power down fix to the series
(orig r3167): laforge | 2007-10-15 10:48:09 +0200
This patch fixes the current leak caused by not shutting down the audio
amplifier during suspend/resume and after power-down. See bug
http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=781
Added:
branches/src/target/kernel/2.6.23.x/patches/asoc-neo1973_wm8753-power.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/asoc-neo1973_wm8753-power.patch
2007-10-16 15:02:36 UTC (rev 3190)
+++ branches/src/target/kernel/2.6.23.x/patches/asoc-neo1973_wm8753-power.patch
2007-10-16 15:20:27 UTC (rev 3191)
@@ -0,0 +1,50 @@
+Index: linux-2.6.22.5-moko/sound/soc/s3c24xx/neo1973_wm8753.c
+===================================================================
+--- linux-2.6.22.5-moko.orig/sound/soc/s3c24xx/neo1973_wm8753.c
++++ linux-2.6.22.5-moko/sound/soc/s3c24xx/neo1973_wm8753.c
+@@ -615,6 +615,35 @@
+ return i2c_probe(adap, &addr_data, lm4857_amp_probe);
+ }
+
++static u8 lm4857_state;
++
++static int lm4857_suspend(struct i2c_client *dev, pm_message_t state)
++{
++ dev_dbg(&dev->dev, "lm4857_suspend\n");
++ lm4857_state = lm4857_regs[LM4857_CTRL] & 0xf;
++ if (lm4857_state) {
++ lm4857_regs[LM4857_CTRL] &= 0xf0;
++ lm4857_write_regs();
++ }
++ return 0;
++}
++
++static int lm4857_resume(struct i2c_client *dev)
++{
++ if (lm4857_state) {
++ lm4857_regs[LM4857_CTRL] |= (lm4857_state & 0x0f);
++ lm4857_write_regs();
++ }
++ return 0;
++}
++
++static void lm4857_shutdown(struct i2c_client *dev)
++{
++ dev_dbg(&dev->dev, "lm4857_shutdown\n");
++ lm4857_regs[LM4857_CTRL] &= 0xf0;
++ lm4857_write_regs();
++}
++
+ /* corgi i2c codec control layer */
+ static struct i2c_driver lm4857_i2c_driver = {
+ .driver = {
+@@ -622,6 +651,9 @@
+ .owner = THIS_MODULE,
+ },
+ .id = I2C_DRIVERID_LM4857,
++ .suspend = lm4857_suspend,
++ .resume = lm4857_resume,
++ .shutdown = lm4857_shutdown,
+ .attach_adapter = lm4857_i2c_attach,
+ .detach_client = lm4857_i2c_detach,
+ .command = NULL,
Modified: branches/src/target/kernel/2.6.23.x/patches/series
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/series 2007-10-16 15:02:36 UTC
(rev 3190)
+++ branches/src/target/kernel/2.6.23.x/patches/series 2007-10-16 15:20:27 UTC
(rev 3191)
@@ -1,5 +1,6 @@
asoc-platform-hw_init-pcm_emulation-fix.patch
asoc-kconfig-fix.patch
+asoc-neo1973_wm8753-power.patch
missing_defs.patch
openmoko-logo.patch
yaffs2-20070905.patch
--- End Message ---
--- Begin Message ---
Author: mickey
Date: 2007-10-16 17:27:57 +0200 (Tue, 16 Oct 2007)
New Revision: 3192
Modified:
trunk/src/target/OM-2007.2/artwork/sounds/startup_unintrusive.wav
Log:
starup_unintrusive.wav: normalize PCM wave
Modified: trunk/src/target/OM-2007.2/artwork/sounds/startup_unintrusive.wav
===================================================================
(Binary files differ)
--- End Message ---
--- Begin Message ---
Author: shoragan
Date: 2007-10-16 17:43:33 +0200 (Tue, 16 Oct 2007)
New Revision: 3193
Added:
branches/src/target/kernel/2.6.23.x/patches/arm-atag-kexec.patch
Modified:
branches/src/target/kernel/2.6.23.x/patches/series
Log:
Follow change in 2.6.22:
(orig r3169): laforge | 2007-10-15 11:07:35 +0200
Add patch to fix kexec() on ARM machines that need the ATAG structure to be
passed from the bootloader in order to properly boot. (Closes:
http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=930)
Added: branches/src/target/kernel/2.6.23.x/patches/arm-atag-kexec.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/arm-atag-kexec.patch
2007-10-16 15:27:57 UTC (rev 3192)
+++ branches/src/target/kernel/2.6.23.x/patches/arm-atag-kexec.patch
2007-10-16 15:43:33 UTC (rev 3193)
@@ -0,0 +1,145 @@
+This patch resolves a kexec boot failure that can occur because
+no ATAGs are passed in to the kexec'd kernel. Currently the
+newly-kexec'd kernel may fail if it requires specific ATAGs, or
+it may fail because the fixed memory location at which it expects
+to find the ATAGs may contain random data instead of ATAGs.
+
+The patch ensures that any ATAGs passed to the current kernel
+at boot time are copied to a static buffer, and are copied back
+when kexec copies the new kernel into place. Thus the new
+kernel sees the same ATAGs from kexec and the boot loader.
+
+The boot parameters are copied without regard to type, content,
+or length -- this patch's scope is limited soley to saving and
+restoring a fixed-size block of memory containing the kernel's
+boot parameters. Additional functionality to examine, alter, or
+replace the ATAGs (using kexec, for example) can be implemented
+by manipulating the static buffer containing the preserved ATAGs.
+
+Note: the size of the buffer (1.5KB) is selected to comfortably
+hold one of each ATAG type, including a maximum-length command
+line and the maximum number of ATAG_MEM structures currently
+supported by the kernel. Should an ATAG list exceed that limit,
+the list will be silently truncated to that limit (to do other-
+wise at that point in the boot process would make a simple
+problem exceedingly complicated).
+
+Kernel version 2.6.22.5
+
+Signed-off-by: Mike Westerhof <mwester at dls.net>
+---
+
+diff -uprN linux-2.6.22.5.orig/arch/arm/kernel/relocate_kernel.S
linux-2.6.22.5/arch/arm/kernel/relocate_kernel.S
+--- linux-2.6.22.5.orig/arch/arm/kernel/relocate_kernel.S 2007-08-22
18:23:54.000000000 -0500
++++ linux-2.6.22.5/arch/arm/kernel/relocate_kernel.S 2007-08-27
20:31:32.000000000 -0500
+@@ -7,6 +7,23 @@
+ .globl relocate_new_kernel
+ relocate_new_kernel:
+
++ /* Move boot params back to where the kernel expects them */
++
++ ldr r0,kexec_boot_params_address
++ teq r0,#0
++ beq 8f
++
++ ldr r1,kexec_boot_params_copy
++ mov r6,#KEXEC_BOOT_PARAMS_SIZE/4
++7:
++ ldr r5,[r1],#4
++ str r5,[r0],#4
++ subs r6,r6,#1
++ bne 7b
++
++8:
++ /* Boot params moved, now go on with the kernel */
++
+ ldr r0,kexec_indirection_page
+ ldr r1,kexec_start_address
+
+@@ -50,7 +67,7 @@ relocate_new_kernel:
+ mov lr,r1
+ mov r0,#0
+ ldr r1,kexec_mach_type
+- mov r2,#0
++ ldr r2,kexec_boot_params_address
+ mov pc,lr
+
+ .globl kexec_start_address
+@@ -65,6 +82,16 @@ kexec_indirection_page:
+ kexec_mach_type:
+ .long 0x0
+
++ /* phy addr where new kernel will expect to find boot params */
++ .globl kexec_boot_params_address
++kexec_boot_params_address:
++ .long 0x0
++
++ /* phy addr where old kernel put a copy of orig boot params */
++ .globl kexec_boot_params_copy
++kexec_boot_params_copy:
++ .long 0x0
++
+ relocate_new_kernel_end:
+
+ .globl relocate_new_kernel_size
+diff -uprN linux-2.6.22.5.orig/arch/arm/kernel/setup.c
linux-2.6.22.5/arch/arm/kernel/setup.c
+--- linux-2.6.22.5.orig/arch/arm/kernel/setup.c 2007-08-22
18:23:54.000000000 -0500
++++ linux-2.6.22.5/arch/arm/kernel/setup.c 2007-08-27 20:31:32.000000000
-0500
+@@ -23,6 +23,7 @@
+ #include <linux/cpu.h>
+ #include <linux/interrupt.h>
+ #include <linux/smp.h>
++#include <linux/kexec.h>
+
+ #include <asm/cpu.h>
+ #include <asm/elf.h>
+@@ -767,6 +768,23 @@ static int __init customize_machine(void
+ }
+ arch_initcall(customize_machine);
+
++#ifdef CONFIG_KEXEC
++
++/* Physical addr of where the boot params should be for this machine */
++extern unsigned long kexec_boot_params_address;
++
++/* Physical addr of the buffer into which the boot params are copied */
++extern unsigned long kexec_boot_params_copy;
++
++/* Pointer to the boot params buffer, for manipulation and display */
++unsigned long kexec_boot_params;
++EXPORT_SYMBOL(kexec_boot_params);
++
++/* The buffer itself - make sure it is sized correctly */
++static unsigned long kexec_boot_params_buf[(KEXEC_BOOT_PARAMS_SIZE + 3) / 4];
++
++#endif
++
+ void __init setup_arch(char **cmdline_p)
+ {
+ struct tag *tags = (struct tag *)&init_tags;
+@@ -783,6 +801,13 @@ void __init setup_arch(char **cmdline_p)
+ if (mdesc->boot_params)
+ tags = phys_to_virt(mdesc->boot_params);
+
++#ifdef CONFIG_KEXEC
++ kexec_boot_params_address = mdesc->boot_params;
++ kexec_boot_params_copy = virt_to_phys(kexec_boot_params_buf);
++ kexec_boot_params = (unsigned long)kexec_boot_params_buf;
++ if (mdesc->boot_params)
++ memcpy((void *)kexec_boot_params, tags, KEXEC_BOOT_PARAMS_SIZE);
++#endif
+ /*
+ * If we have the old style parameters, convert them to
+ * a tag list.
+diff -uprN linux-2.6.22.5.orig/include/asm-arm/kexec.h
linux-2.6.22.5/include/asm-arm/kexec.h
+--- linux-2.6.22.5.orig/include/asm-arm/kexec.h 2007-08-22
18:23:54.000000000 -0500
++++ linux-2.6.22.5/include/asm-arm/kexec.h 2007-08-27 20:31:32.000000000
-0500
+@@ -14,6 +14,8 @@
+
+ #define KEXEC_ARCH KEXEC_ARCH_ARM
+
++#define KEXEC_BOOT_PARAMS_SIZE 1536
++
+ #ifndef __ASSEMBLY__
+
+ struct kimage;
Modified: branches/src/target/kernel/2.6.23.x/patches/series
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/series 2007-10-16 15:27:57 UTC
(rev 3192)
+++ branches/src/target/kernel/2.6.23.x/patches/series 2007-10-16 15:43:33 UTC
(rev 3193)
@@ -1,3 +1,4 @@
+arm-atag-kexec.patch
asoc-platform-hw_init-pcm_emulation-fix.patch
asoc-kconfig-fix.patch
asoc-neo1973_wm8753-power.patch
--- End Message ---
--- Begin Message ---
Author: shoragan
Date: 2007-10-16 18:19:59 +0200 (Tue, 16 Oct 2007)
New Revision: 3194
Modified:
branches/src/target/kernel/2.6.23.x/patches/gta01-vibrator.patch
branches/src/target/kernel/2.6.23.x/patches/s3c2410-pwm.patch
Log:
Follow changes in 2.6.22:
(orig r3173): laforge | 2007-10-15 14:49:23 +0200
increase vibrator PWM frequency to 257kHz (66MHz / 2 / 2 / 64) to be outside
the human-audible range. It's a vibrator, not a 4kHz beeper!
(orig r3171): laforge | 2007-10-15 12:54:10 +0200
S3c24xx timer4 doesn't have PWM support, so don't even try to use it for that.
Also, refuse to reconfigure the prescaler 1 (shared between timer 2,3,4), since
that would modify the kernel timer clock tick.
Modified: branches/src/target/kernel/2.6.23.x/patches/gta01-vibrator.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/gta01-vibrator.patch
2007-10-16 15:43:33 UTC (rev 3193)
+++ branches/src/target/kernel/2.6.23.x/patches/gta01-vibrator.patch
2007-10-16 16:19:59 UTC (rev 3194)
@@ -5,7 +5,7 @@
Index: linux-2.6.23/drivers/leds/leds-gta01.c
===================================================================
--- /dev/null
-+++ linux-2.6.23/drivers/leds/leds-gta01.c
++++ linux-2.6.22.5-moko/drivers/leds/leds-gta01.c
@@ -0,0 +1,188 @@
+/*
+ * LED driver for the FIC GTA01 (Neo1973) GSM Phone Vibrator
@@ -32,7 +32,7 @@
+#include <asm/arch/gta01.h>
+#include <asm/plat-s3c/regs-timer.h>
+
-+#define COUNTER 256
++#define COUNTER 64
+
+struct gta01_vib_priv
+{
@@ -65,7 +65,7 @@
+ */
+ mutex_lock(&vp->mutex);
+ if (vp->has_pwm) {
-+ s3c2410_pwm_duty_cycle(value, vp->pwm);
++ s3c2410_pwm_duty_cycle(value/4, vp->pwm);
+ s3c2410_gpio_cfgpin(vp->gpio, S3C2410_GPB3_TOUT3);
+ } else {
+ if (value)
@@ -101,8 +101,9 @@
+ struct gta01_vib_priv *vp = pdev_to_vpriv(pdev);
+
+ vp->pwm->timerid= PWM3;
-+ vp->pwm->prescaler = 0x0000;
-+ vp->pwm->divider = S3C2410_TCFG1_MUX3_DIV8;
++ /* use same prescaler as arch/arm/plat-s3c24xx/time.c */
++ vp->pwm->prescaler = (6 - 1) / 2;
++ vp->pwm->divider = S3C2410_TCFG1_MUX3_DIV2;
+ vp->pwm->counter = COUNTER;
+ vp->pwm->comparer = COUNTER;
+
Modified: branches/src/target/kernel/2.6.23.x/patches/s3c2410-pwm.patch
===================================================================
--- branches/src/target/kernel/2.6.23.x/patches/s3c2410-pwm.patch
2007-10-16 15:43:33 UTC (rev 3193)
+++ branches/src/target/kernel/2.6.23.x/patches/s3c2410-pwm.patch
2007-10-16 16:19:59 UTC (rev 3194)
@@ -38,7 +38,7 @@
===================================================================
--- /dev/null
+++ linux-2.6.22/arch/arm/mach-s3c2410/pwm.c
-@@ -0,0 +1,222 @@
+@@ -0,0 +1,234 @@
+/*
+ * arch/arm/mach-s3c2410/3c2410-pwm.c
+ *
@@ -118,7 +118,7 @@
+ tcfg0 = __raw_readl(S3C2410_TCFG0);
+
+ /* divider & scaler slection */
-+ switch(s3c2410_pwm->timerid) {
++ switch (s3c2410_pwm->timerid) {
+ case PWM0:
+ tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;
+ tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
@@ -136,8 +136,7 @@
+ tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
+ break;
+ case PWM4:
-+ tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
-+ tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
++ /* timer four is not capable of doing PWM */
+ break;
+ default:
+ return -1;
@@ -145,11 +144,23 @@
+
+ /* divider & scaler values */
+ tcfg1 |= s3c2410_pwm->divider;
-+ tcfg0 |= s3c2410_pwm->prescaler;
-+
+ __raw_writel(tcfg1, S3C2410_TCFG1);
-+ __raw_writel(tcfg0, S3C2410_TCFG0);
+
++ switch (s3c2410_pwm->timerid) {
++ case PWM0:
++ case PWM1:
++ tcfg0 |= s3c2410_pwm->prescaler;
++ __raw_writel(tcfg0, S3C2410_TCFG0);
++ break;
++ default:
++ if ((tcfg0 | s3c2410_pwm->prescaler) != tcfg0) {
++ printk(KERN_WARNING "not changing prescaler of PWM %u,"
++ " since it's shared with timer4 (clock tick)\n",
++ s3c2410_pwm->timerid);
++ }
++ break;
++ }
++
+ /* timer count and compare buffer initial values */
+ tcnt = s3c2410_pwm->counter;
+ tcmp = s3c2410_pwm->comparer;
@@ -189,8 +200,9 @@
+ tcon &= ~S3C2410_TCON_T3MANUALUPD;
+ break;
+ case PWM4:
-+ tcon |= S3C2410_TCON_T4START;
-+ tcon &= ~S3C2410_TCON_T4MANUALUPD;
++ /* timer four is not capable of doing PWM */
++ default:
++ return -1;
+ }
+
+ __raw_writel(tcon, S3C2410_TCON);
@@ -228,9 +240,9 @@
+ tcon |= S3C2410_TCON_T3MANUALUPD;
+ break;
+ case PWM4:
-+ tcon &= ~0x00080000;
-+ tcon |= S3C2410_TCON_T4RELOAD;
-+ tcon |= S3C2410_TCON_T3MANUALUPD;
++ /* timer four is not capable of doing PWM */
++ default:
++ return -1;
+ }
+
+ __raw_writel(tcon, S3C2410_TCON);
--- End Message ---
_______________________________________________
commitlog mailing list
[email protected]
http://lists.openmoko.org/mailman/listinfo/commitlog