aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux/acern30/regdump.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/linux/linux/acern30/regdump.patch')
-rw-r--r--recipes/linux/linux/acern30/regdump.patch279
1 files changed, 279 insertions, 0 deletions
diff --git a/recipes/linux/linux/acern30/regdump.patch b/recipes/linux/linux/acern30/regdump.patch
new file mode 100644
index 0000000000..9e5ffe370d
--- /dev/null
+++ b/recipes/linux/linux/acern30/regdump.patch
@@ -0,0 +1,279 @@
+Add some code to dump most registers. It's a good way to find in what
+state the bootloader or Windows has left the device.
+
+Index: linux-2.6.14/arch/arm/mach-s3c2410/regdump.c
+===================================================================
+--- /dev/null
++++ linux-2.6.14/arch/arm/mach-s3c2410/regdump.c
+@@ -0,0 +1,261 @@
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++
++#include <asm/arch/map.h>
++#include <asm/arch/regs-adc.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-iic.h>
++#include <asm/arch/regs-iis.h>
++#include <asm/arch/regs-irq.h>
++#include <asm/arch/regs-lcd.h>
++#include <asm/arch/regs-mem.h>
++#include <asm/arch/regs-nand.h>
++#include <asm/arch/regs-rtc.h>
++#include <asm/arch/regs-timer.h>
++#include <asm/arch/regs-udc.h>
++#include <asm/arch/regs-watchdog.h>
++
++#define REGV(reg) { #reg, (reg) }
++#define REGI(va, reg) { #reg, (va) + (reg) }
++
++static struct reginfo {
++ const char *name;
++ void *va;
++} reginfo[] = {
++ /* ADC */
++ REGI(S3C24XX_VA_ADC, S3C2410_ADCCON),
++ REGI(S3C24XX_VA_ADC, S3C2410_ADCTSC),
++ REGI(S3C24XX_VA_ADC, S3C2410_ADCDLY),
++ REGI(S3C24XX_VA_ADC, S3C2410_ADCDAT0),
++ REGI(S3C24XX_VA_ADC, S3C2410_ADCDAT1),
++
++ /* Clocks */
++ REGV(S3C2410_LOCKTIME),
++ REGV(S3C2410_MPLLCON),
++ REGV(S3C2410_UPLLCON),
++ REGV(S3C2410_CLKCON),
++ REGV(S3C2410_CLKSLOW),
++ REGV(S3C2410_CLKDIVN),
++
++ /* GPIO */
++ REGV(S3C2410_GPACON),
++ REGV(S3C2410_GPADAT),
++ REGV(S3C2410_GPBCON),
++ REGV(S3C2410_GPBDAT),
++ REGV(S3C2410_GPBUP),
++ REGV(S3C2410_GPCCON),
++ REGV(S3C2410_GPCDAT),
++ REGV(S3C2410_GPCUP),
++ REGV(S3C2410_GPDCON),
++ REGV(S3C2410_GPDDAT),
++ REGV(S3C2410_GPDUP),
++ REGV(S3C2410_GPECON),
++ REGV(S3C2410_GPEDAT),
++ REGV(S3C2410_GPEUP),
++ REGV(S3C2410_GPFCON),
++ REGV(S3C2410_GPFDAT),
++ REGV(S3C2410_GPFUP),
++ REGV(S3C2410_GPGCON),
++ REGV(S3C2410_GPGDAT),
++ REGV(S3C2410_GPGUP),
++ REGV(S3C2410_GPHCON),
++ REGV(S3C2410_GPHDAT),
++ REGV(S3C2410_GPHUP),
++ REGV(S3C2410_MISCCR),
++ REGV(S3C2410_DCLKCON),
++ REGV(S3C2410_EXTINT0),
++ REGV(S3C2410_EXTINT1),
++ REGV(S3C2410_EXTINT2),
++ REGV(S3C2410_EINFLT0),
++ REGV(S3C2410_EINFLT1),
++ REGV(S3C2410_EINFLT2),
++ REGV(S3C2410_EINFLT3),
++ REGV(S3C2410_GSTATUS0),
++ REGV(S3C2410_GSTATUS1),
++ REGV(S3C2410_GSTATUS2),
++ REGV(S3C2410_GSTATUS3),
++ REGV(S3C2410_GSTATUS4),
++
++#if 0
++ /* IIC */
++ REGI(S3C24XX_VA_IIC, S3C2410_IICCON),
++ REGI(S3C24XX_VA_IIC, S3C2410_IICSTAT),
++ REGI(S3C24XX_VA_IIC, S3C2410_IICADD),
++ REGI(S3C24XX_VA_IIC, S3C2410_IICDS),
++
++ /* IIS */
++ REGI(S3C24XX_VA_IIS, S3C2410_IISCON),
++ REGI(S3C24XX_VA_IIS, S3C2410_IISMOD),
++ REGI(S3C24XX_VA_IIS, S3C2410_IISPSR),
++ REGI(S3C24XX_VA_IIS, S3C2410_IISFCON),
++ REGI(S3C24XX_VA_IIS, S3C2410_IISFIFO),
++#endif
++
++ /* IRQ */
++ REGV(S3C2410_SRCPND),
++ REGV(S3C2410_INTMOD),
++ REGV(S3C2410_INTMSK),
++ REGV(S3C2410_PRIORITY),
++ REGV(S3C2410_INTPND),
++ REGV(S3C2410_INTOFFSET),
++ REGV(S3C2410_SUBSRCPND),
++ REGV(S3C2410_INTSUBMSK),
++ REGV(S3C2410_EINTMASK),
++ REGV(S3C2410_EINTPEND),
++
++ /* LCD */
++ REGV(S3C2410_LCDCON1),
++ REGV(S3C2410_LCDCON2),
++ REGV(S3C2410_LCDCON3),
++ REGV(S3C2410_LCDCON4),
++ REGV(S3C2410_LCDCON5),
++ REGV(S3C2410_LCDSADDR1),
++ REGV(S3C2410_LCDSADDR2),
++ REGV(S3C2410_LCDSADDR3),
++ REGV(S3C2410_REDLUT),
++ REGV(S3C2410_GREENLUT),
++ REGV(S3C2410_BLUELUT),
++ REGV(S3C2410_DITHMODE),
++ REGV(S3C2410_TPAL),
++ REGV(S3C2410_LCDINTPND),
++ REGV(S3C2410_LCDSRCPND),
++ REGV(S3C2410_LCDINTMSK),
++ REGV(S3C2410_LPCSEL),
++
++ // REGV(S3C2410_TFTPAL(x)),
++
++#if 0
++ /* Memory controller */
++ REGV(S3C2410_BWSCON),
++ REGV(S3C2410_BANKCON0),
++ REGV(S3C2410_BANKCON1),
++ REGV(S3C2410_BANKCON2),
++ REGV(S3C2410_BANKCON3),
++ REGV(S3C2410_BANKCON4),
++ REGV(S3C2410_BANKCON5),
++ REGV(S3C2410_BANKCON6),
++ REGV(S3C2410_BANKCON7),
++ REGV(S3C2410_REFRESH),
++ REGV(S3C2410_BANKSIZE),
++ REGV(S3C2410_MRSRB6),
++ REGV(S3C2410_MRSRB7),
++
++ /* Nand flash */
++ REGI(S3C24XX_VA_NAND, S3C2410_NFCONF),
++ REGI(S3C24XX_VA_NAND, S3C2410_NFCMD),
++ REGI(S3C24XX_VA_NAND, S3C2410_NFADDR),
++ REGI(S3C24XX_VA_NAND, S3C2410_NFDATA),
++ REGI(S3C24XX_VA_NAND, S3C2410_NFSTAT),
++ REGI(S3C24XX_VA_NAND, S3C2410_NFECC),
++
++ /* RTC */
++ REGV(S3C2410_RTCCON),
++ REGV(S3C2410_TICNT),
++ REGV(S3C2410_RTCALM),
++ REGV(S3C2410_ALMSEC),
++ REGV(S3C2410_ALMMIN),
++ REGV(S3C2410_ALMHOUR),
++ REGV(S3C2410_ALMDATE),
++ REGV(S3C2410_ALMMON),
++ REGV(S3C2410_ALMYEAR),
++ REGV(S3C2410_RTCRST),
++ REGV(S3C2410_RTCSEC),
++ REGV(S3C2410_RTCMIN),
++ REGV(S3C2410_RTCHOUR),
++ REGV(S3C2410_RTCDATE),
++ REGV(S3C2410_RTCDAY),
++ REGV(S3C2410_RTCMON),
++ REGV(S3C2410_RTCYEAR),
++#endif
++
++ /* Timer */
++ REGV(S3C2410_TCFG0),
++ REGV(S3C2410_TCFG1),
++ REGV(S3C2410_TCON),
++
++ /* USB Device */
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_FUNC_ADDR_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_PWR_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP_INT_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_USB_INT_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP_INT_EN_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_USB_INT_EN_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_FRAME_NUM1_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_FRAME_NUM2_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP0_FIFO_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_FIFO_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_FIFO_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_FIFO_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_FIFO_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_DMA_CON),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_DMA_UNIT),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_DMA_FIFO),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_DMA_TTC_L),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_DMA_TTC_M),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP1_DMA_TTC_H),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_DMA_CON),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_DMA_UNIT),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_DMA_FIFO),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_DMA_TTC_L),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_DMA_TTC_M),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP2_DMA_TTC_H),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_DMA_CON),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_DMA_UNIT),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_DMA_FIFO),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_DMA_TTC_L),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_DMA_TTC_M),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP3_DMA_TTC_H),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_DMA_CON),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_DMA_UNIT),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_DMA_FIFO),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_DMA_TTC_L),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_DMA_TTC_M),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP4_DMA_TTC_H),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_INDEX_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_MAXP_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_EP0_CSR_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_IN_CSR1_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_IN_CSR2_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_OUT_CSR1_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_OUT_CSR2_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_OUT_FIFO_CNT1_REG),
++ REGI(S3C24XX_VA_USBDEV, S3C2410_UDC_OUT_FIFO_CNT2_REG),
++
++ /* Watchdog */
++ REGV(S3C2410_WTCON),
++ REGV(S3C2410_WTDAT),
++ REGV(S3C2410_WTCNT),
++};
++
++static u32 regval[ARRAY_SIZE(reginfo)];
++
++void s3c2410_capture_regs(void)
++{
++ int i;
++
++ for (i = 0; i < ARRAY_SIZE(reginfo); i++)
++ regval[i] = readl(reginfo[i].va);
++}
++
++void s3c2410_dump_regs(void)
++{
++ int i;
++
++ for (i = 0; i < ARRAY_SIZE(reginfo); i++)
++ printk("%-20s = 0x%08x\n", reginfo[i].name, regval[i]);
++}
++
++/*
++ Local variables:
++ compile-command: "make -k -C ../../../.. linux "
++ c-basic-offset: 8
++ End:
++*/
+Index: linux-2.6.14/arch/arm/mach-s3c2410/Makefile
+===================================================================
+--- linux-2.6.14.orig/arch/arm/mach-s3c2410/Makefile
++++ linux-2.6.14/arch/arm/mach-s3c2410/Makefile
+@@ -44,3 +44,5 @@ obj-$(CONFIG_MACH_OTOM) += mach-otom.o
+ obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
+
+ obj-y += gpio-sysfs.o
++obj-y += regdump.o
++