diff options
Diffstat (limited to 'recipes/linux/linux/acern30/regdump.patch')
-rw-r--r-- | recipes/linux/linux/acern30/regdump.patch | 279 |
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 ++ |