From: wdenk Date: Sun, 27 Mar 2005 23:41:39 +0000 (+0000) Subject: Patches by Martin Krause, 22 Mar 2005: X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=8f0b7cbe8027c3745f5e0a199ecd152b032d8ad0;p=u-boot.git Patches by Martin Krause, 22 Mar 2005: - use TQM5200_auto as MAKEALL target for TQM5200 systems - add support for SM501 graphics controller - add support for graphic console on TQM5200 - add support for TQM5200 Rev 200 - cleanup, fix typo in include/configs/TQM5200.h --- diff --git a/CHANGELOG b/CHANGELOG index fa014a2ba7..2c2f0841ae 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,13 @@ Changes for U-Boot 1.1.3: ====================================================================== +* Patches by Martin Krause, 22 Mar 2005: + - use TQM5200_auto as MAKEALL target for TQM5200 systems + - add support for SM501 graphics controller + - add support for graphic console on TQM5200 + - add support for TQM5200 Rev 200 + - cleanup, fix typo in include/configs/TQM5200.h + * Patch by Manfred Baral, 17 Mar 2005: Fix typo diff --git a/MAKEALL b/MAKEALL index 997d96d724..38d4203d41 100644 --- a/MAKEALL +++ b/MAKEALL @@ -26,7 +26,7 @@ LIST_5xx=" \ LIST_5xxx=" \ icecube_5100 icecube_5200 EVAL5200 PM520 \ - Total5100 Total5200 Total5200_Rev2 TQM5200_AA \ + Total5100 Total5200 Total5200_Rev2 TQM5200_auto \ " ######################################################################### diff --git a/board/tqm5200/tqm5200.c b/board/tqm5200/tqm5200.c index 5ac6cb5cec..43d89b0604 100644 --- a/board/tqm5200/tqm5200.c +++ b/board/tqm5200/tqm5200.c @@ -5,7 +5,7 @@ * (C) Copyright 2004 * Mark Jonas, Freescale Semiconductor, mark.jonas@motorola.com. * - * (C) Copyright 2004 + * (C) Copyright 2004-2005 * Martin Krause, TQ-Systems GmbH, martin.krause@tqs.de * * See file CREDITS for list of people who contributed to this @@ -31,11 +31,16 @@ #include #include +#ifdef CONFIG_VIDEO_SM501 +#include +#endif + #if defined(CONFIG_MPC5200_DDR) #include "mt46v16m16-75.h" #else #include "mt48lc16m16a2-75.h" #endif + #ifdef CONFIG_PS2MULT void ps2mult_early_init(void); #endif @@ -246,13 +251,13 @@ long int initdram (int board_type) int checkboard (void) { #if defined (CONFIG_TQM5200_AA) - puts ("Board: TQM5200-AA (TQ-Systems GmbH)\n"); + puts ("Board: TQM5200-AA (TQ-Components GmbH)\n"); #elif defined (CONFIG_TQM5200_AB) - puts ("Board: TQM5200-AB (TQ-Systems GmbH)\n"); + puts ("Board: TQM5200-AB (TQ-Components GmbH)\n"); #elif defined (CONFIG_TQM5200_AC) - puts ("Board: TQM5200-AC (TQ-Systems GmbH)\n"); + puts ("Board: TQM5200-AC (TQ-Components GmbH)\n"); #elif defined (CONFIG_TQM5200) - puts ("Board: TQM5200 (TQ-Systems GmbH)\n"); + puts ("Board: TQM5200 (TQ-Components GmbH)\n"); #endif #if defined (CONFIG_STK52XX) puts (" on a STK52XX baseboard\n"); @@ -501,3 +506,132 @@ int last_stage_init (void) return 0; } #endif /* CONFIG_CS_AUTOCONF */ + +#ifdef CONFIG_VIDEO_SM501 + +#define DISPLAY_WIDTH 640 +#define DISPLAY_HEIGHT 480 + +#ifdef CONFIG_VIDEO_SM501_8BPP +#error CONFIG_VIDEO_SM501_8BPP not supported. +#endif /* CONFIG_VIDEO_SM501_8BPP */ + +#ifdef CONFIG_VIDEO_SM501_16BPP +#error CONFIG_VIDEO_SM501_16BPP not supported. +#endif /* CONFIG_VIDEO_SM501_16BPP */ +#ifdef CONFIG_VIDEO_SM501_32BPP +static const SMI_REGS init_regs [] = +{ +#if 0 /* CRT only */ + {0x00004, 0x0}, + {0x00048, 0x00021807}, + {0x0004C, 0x10090a01}, + {0x00054, 0x1}, + {0x00040, 0x00021807}, + {0x00044, 0x10090a01}, + {0x00054, 0x0}, + {0x80200, 0x00010000}, + {0x80204, 0x0}, + {0x80208, 0x0A000A00}, + {0x8020C, 0x02fa027f}, + {0x80210, 0x004a028b}, + {0x80214, 0x020c01df}, + {0x80218, 0x000201e9}, + {0x80200, 0x00013306}, +#else /* panel + CRT */ + {0x00004, 0x0}, + {0x00048, 0x00021807}, + {0x0004C, 0x091a0a01}, + {0x00054, 0x1}, + {0x00040, 0x00021807}, + {0x00044, 0x091a0a01}, + {0x00054, 0x0}, + {0x80000, 0x0f013106}, + {0x80004, 0xc428bb17}, + {0x8000C, 0x00000000}, + {0x80010, 0x0a000a00}, + {0x80014, 0x02800000}, + {0x80018, 0x01e00000}, + {0x8001C, 0x00000000}, + {0x80020, 0x01e00280}, + {0x80024, 0x02fa027f}, + {0x80028, 0x004a028b}, + {0x8002C, 0x020c01df}, + {0x80030, 0x000201e9}, + {0x80200, 0x00010000}, +#endif + {0, 0} +}; +#endif /* CONFIG_VIDEO_SM501_32BPP */ + +#ifdef CONFIG_CONSOLE_EXTRA_INFO +/* + * Return text to be printed besides the logo. + */ +void video_get_info_str (int line_number, char *info) +{ + if (line_number == 1) { +#if defined (CONFIG_TQM5200_AA) + strcpy (info, " Board: TQM5200-AA (TQ-Components GmbH)"); +#elif defined (CONFIG_TQM5200_AB) + strcpy (info, " Board: TQM5200-AB (TQ-Components GmbH)"); +#elif defined (CONFIG_TQM5200_AC) + strcpy (info, " Board: TQM5200-AC (TQ-Components GmbH)"); +#elif defined (CONFIG_TQM5200) + strcpy (info, " Board: TQM5200 (TQ-Components GmbH)"); +#else +#error No supported board selected +#endif +#if defined (CONFIG_STK52XX) + } else if (line_number == 2) { + strcpy (info, " on a STK52XX baseboard"); +#endif + } + else { + info [0] = '\0'; + } +} +#endif + +/* + * Returns SM501 register base address. First thing called in the driver. + */ +unsigned int board_video_init (void) +{ + return SM501_MMIO_BASE; +} + +/* + * Returns SM501 framebuffer address + */ +unsigned int board_video_get_fb (void) +{ + return SM501_FB_BASE; +} + +/* + * Called after initializing the SM501 and before clearing the screen. + */ +void board_validate_screen (unsigned int base) +{ +} + +/* + * Return a pointer to the initialization sequence. + */ +const SMI_REGS *board_get_regs (void) +{ + return init_regs; +} + +int board_get_width (void) +{ + return DISPLAY_WIDTH; +} + +int board_get_height (void) +{ + return DISPLAY_HEIGHT; +} + +#endif /* CONFIG_VIDEO_SM501 */ diff --git a/cpu/mpc85xx/config.mk b/cpu/mpc85xx/config.mk index 1d0b1929cc..6121074349 100644 --- a/cpu/mpc85xx/config.mk +++ b/cpu/mpc85xx/config.mk @@ -23,4 +23,4 @@ PLATFORM_RELFLAGS += -fPIC -ffixed-r14 -meabi -PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx -DCONFIG_E500 -ffixed-r2 -ffixed-r29 -Wa,-me500 -msoft-float -mno-string +PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx -DCONFIG_E500 -ffixed-r2 -ffixed-r29 -Wa,-me500 -msoft-float -mno-string diff --git a/drivers/Makefile b/drivers/Makefile index cc13a7f221..d70988d121 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -43,7 +43,8 @@ OBJS = 3c589.o 5701rls.o ali512x.o \ sed13806.o sed156x.o \ serial.o serial_max3100.o \ serial_pl010.o serial_pl011.o serial_xuartlite.o \ - sl811_usb.o smc91111.o smiLynxEM.o status_led.o sym53c8xx.o \ + sl811_usb.o sm501.o smc91111.o smiLynxEM.o \ + status_led.o sym53c8xx.o \ ti_pci1410a.o tigon3.o \ usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbtty.o \ videomodes.o w83c553f.o diff --git a/drivers/sm501.c b/drivers/sm501.c new file mode 100644 index 0000000000..23db02cd10 --- /dev/null +++ b/drivers/sm501.c @@ -0,0 +1,150 @@ +/* + * (C) Copyright 2002 + * Stäubli Faverges - + * Pierre AUBERT p.aubert@staubli.com + * + * (C) Copyright 2005 + * Martin Krause TQ-Systems GmbH martin.krause@tqs.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Basic video support for SMI SM501 "Voyager" graphic controller + */ + +#include + +#ifdef CONFIG_VIDEO_SM501 + +#include +#include + +#define read8(ptrReg) \ + *(volatile unsigned char *)(sm501.isaBase + ptrReg) + +#define write8(ptrReg,value) \ + *(volatile unsigned char *)(sm501.isaBase + ptrReg) = value + +#define read16(ptrReg) \ + (*(volatile unsigned short *)(sm501.isaBase + ptrReg)) + +#define write16(ptrReg,value) \ + (*(volatile unsigned short *)(sm501.isaBase + ptrReg) = value) + +#define read32(ptrReg) \ + (*(volatile unsigned int *)(sm501.isaBase + ptrReg)) + +#define write32(ptrReg, value) \ + (*(volatile unsigned int *)(sm501.isaBase + ptrReg) = value) + +GraphicDevice sm501; + +/*----------------------------------------------------------------------------- + * SmiSetRegs -- + *----------------------------------------------------------------------------- + */ +static void SmiSetRegs (void) +{ + /* + * The content of the chipset register depends on the board (clocks, + * ...) + */ + const SMI_REGS *preg = board_get_regs (); + while (preg->Index) { + write32 (preg->Index, preg->Value); + /* + * Insert a delay between + */ + udelay (1000); + preg ++; + } +} + +/*----------------------------------------------------------------------------- + * video_hw_init -- + *----------------------------------------------------------------------------- + */ +void *video_hw_init (void) +{ + unsigned int *vm, i; + + memset (&sm501, 0, sizeof (GraphicDevice)); + + /* + * Initialization of the access to the graphic chipset Retreive base + * address of the chipset (see board/RPXClassic/eccx.c) + */ + if ((sm501.isaBase = board_video_init ()) == 0) { + return (NULL); + } + + if ((sm501.frameAdrs = board_video_get_fb ()) == 0) { + return (NULL); + } + + sm501.winSizeX = board_get_width (); + sm501.winSizeY = board_get_height (); + +#if defined(CONFIG_VIDEO_SM501_8BPP) + sm501.gdfIndex = GDF__8BIT_INDEX; + sm501.gdfBytesPP = 1; + +#elif defined(CONFIG_VIDEO_SM501_16BPP) + sm501.gdfIndex = GDF_16BIT_565RGB; + sm501.gdfBytesPP = 2; + +#elif defined(CONFIG_VIDEO_SM501_32BPP) + sm501.gdfIndex = GDF_32BIT_X888RGB; + sm501.gdfBytesPP = 4; +#else +#error Unsupported SM501 BPP +#endif + + sm501.memSize = sm501.winSizeX * sm501.winSizeY * sm501.gdfBytesPP; + + /* Load Smi registers */ + SmiSetRegs (); + + /* (see board/RPXClassic/RPXClassic.c) */ + board_validate_screen (sm501.isaBase); + + /* Clear video memory */ + i = sm501.memSize/4; + vm = (unsigned int *)sm501.frameAdrs; + while(i--) + *vm++ = 0; + + return (&sm501); +} + +/*----------------------------------------------------------------------------- + * video_set_lut -- + *----------------------------------------------------------------------------- + */ +void video_set_lut ( + unsigned int index, /* color number */ + unsigned char r, /* red */ + unsigned char g, /* green */ + unsigned char b /* blue */ + ) +{ +} + +#endif /* CONFIG_VIDEO_SM501 */ diff --git a/drivers/sm501.h b/drivers/sm501.h new file mode 100644 index 0000000000..d8f26fbf29 --- /dev/null +++ b/drivers/sm501.h @@ -0,0 +1,48 @@ +/* + * (C) Copyright 2002 + * Stäubli Faverges - + * Pierre AUBERT p.aubert@staubli.com + * + * (C) Copyright 2005 + * Martin Krause TQ-Systems GmbH martin.krause@tqs.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Basic video support for SMI SM501 "Voyager" graphic controller + */ + +#ifndef _SM501_H_ +#define _SM501_H_ + +typedef struct { + unsigned int Index; + unsigned int Value; +} SMI_REGS; + +/* Board specific functions */ +unsigned int board_video_init (void); +void board_validate_screen (unsigned int base); +const SMI_REGS *board_get_regs (void); +int board_get_width (void); +int board_get_height (void); +unsigned int board_video_get_fb (void); + +#endif /* _SM501_H_ */ diff --git a/include/configs/NC650.h b/include/configs/NC650.h index 2fc098e8ca..a7957e3859 100644 --- a/include/configs/NC650.h +++ b/include/configs/NC650.h @@ -318,7 +318,7 @@ OR_SCY_15_CLK | OR_EHTR | OR_TRLX) #define CFG_BR2_PRELIM ((CFG_NAND_BASE & BR_BA_MSK) | BR_PS_8 | BR_MS_UPMB | BR_V ) -#define CFG_OR2_PRELIM (((-CFG_NAND_SIZE) & OR_AM_MSK) | OR_BI ) +#define CFG_OR2_PRELIM (((-CFG_NAND_SIZE) & OR_AM_MSK) | OR_BI ) /* * BR3 and OR3 (SDRAM) diff --git a/include/configs/TQM5200.h b/include/configs/TQM5200.h index 87bcc5b305..a5a63443f2 100644 --- a/include/configs/TQM5200.h +++ b/include/configs/TQM5200.h @@ -1,8 +1,8 @@ /* - * (C) Copyright 2003-2004 + * (C) Copyright 2003-2005 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * - * (C) Copyright 2004 + * (C) Copyright 2004-2005 * Martin Krause, TQ-Systems GmbH, martin.krause@tqs.de * * See file CREDITS for list of people who contributed to this @@ -35,6 +35,7 @@ #define CONFIG_MPC5xxx 1 /* This is an MPC5xxx CPU */ #define CONFIG_MPC5200 1 /* (more precisely an MPC5200 CPU) */ #define CONFIG_TQM5200 1 /* ... on TQM5200 module */ +#undef CONFIG_TQM5200_REV100 /* define for revision 100 modules */ #define CONFIG_STK52XX 1 /* ... on a STK52XX base board */ #define CFG_MPC5XXX_CLKIN 33000000 /* ... running at 33.000000MHz */ @@ -62,7 +63,6 @@ #define CONFIG_BOARD_EARLY_INIT_R #endif /* CONFIG_STK52XX */ -#ifdef CONFIG_MPC5200 /* MPC5100 PCI is not supported yet. */ /* * PCI Mapping: * 0x40000000 - 0x4fffffff - PCI Memory @@ -70,9 +70,6 @@ */ #ifdef CONFIG_STK52XX #define CONFIG_PCI 1 -#elif -#define CONFIG_PCI 0 -#endif #define CONFIG_PCI_PNP 1 /* #define CONFIG_PCI_SCAN_SHOW 1 */ @@ -89,21 +86,37 @@ #define CFG_RX_ETH_BUFFER 8 /* use 8 rx buffer on eepro100 */ #define CONFIG_NS8382X 1 -#ifdef CONFIG_STK52XX +#ifdef CONFIG_PCI #define ADD_PCI_CMD CFG_CMD_PCI -#elif +#else #define ADD_PCI_CMD 0 #endif -#else /* MPC5100 */ - -#define ADD_PCI_CMD 0 /* no CFG_CMD_PCI */ +/* + * Video console + */ +#if 1 +#define CONFIG_VIDEO +#define CONFIG_VIDEO_SM501 +#define CONFIG_VIDEO_SM501_32BPP +#define CONFIG_CFB_CONSOLE +#define CONFIG_VIDEO_LOGO +#define CONFIG_VGA_AS_SINGLE_DEVICE +#define CONFIG_CONSOLE_EXTRA_INFO +#define CONFIG_VIDEO_SW_CURSOR +#define CONFIG_SPLASH_SCREEN +#endif +#ifdef CONFIG_VIDEO +#define ADD_BMP_CMD CFG_CMD_BMP +#else +#define ADD_BMP_CMD 0 #endif /* Partitions */ #define CONFIG_MAC_PARTITION #define CONFIG_DOS_PARTITION +#define CONFIG_ISO_PARTITION /* USB */ #ifdef CONFIG_STK52XX @@ -138,6 +151,7 @@ * Supported commands */ #define CONFIG_COMMANDS (CONFIG_CMD_DFL | \ + ADD_BMP_CMD | \ ADD_IDE_CMD | \ ADD_PCI_CMD | \ ADD_USB_CMD | \ @@ -173,7 +187,7 @@ #undef CONFIG_BOOTARGS #if defined (CONFIG_TQM5200_AA) -# define CONFIG_U_BOOT_SUFFIX "-AA" +# define CONFIG_U_BOOT_SUFFIX "-AA\0" #elif defined (CONFIG_TQM5200_AB) # define CONFIG_U_BOOT_SUFFIX "-AB\0" #elif defined (CONFIG_TQM5200_AC) @@ -227,10 +241,10 @@ * I2C configuration */ #define CONFIG_HARD_I2C 1 /* I2C with hardware support */ -#if defined (CONFIG_MINIFAP) -#define CFG_I2C_MODULE 2 /* Select I2C module #1 or #2 */ +#ifdef CONFIG_TQM5200_REV100 +#define CFG_I2C_MODULE 1 /* Select I2C module #1 for rev. 100 board */ #else -#define CFG_I2C_MODULE 1 /* Select I2C module #1 or #2 */ +#define CFG_I2C_MODULE 2 /* Select I2C module #2 for all other revs */ #endif /* @@ -288,8 +302,9 @@ #define CFG_FLASH_CFI_DRIVER 1 /* Use the common driver */ #define CFG_FLASH_BANKS_LIST { CFG_BOOTCS_START } #define CFG_FLASH_EMPTY_INFO -#define CFG_FLASH_SIZE 0x02000000 /* 32 MByte */ -#define CFG_MAX_FLASH_SECT 256 /* max num of sects on one chip */ +#define CFG_FLASH_SIZE 0x04000000 /* 64 MByte */ +#define CFG_MAX_FLASH_SECT 512 /* max num of sects on one chip */ +#undef CFG_FLASH_USE_BUFFER_WRITE /* not supported yet for AMD */ #if !defined(CFG_LOWBOOT) #define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x00760000 + 0x00800000) @@ -357,27 +372,33 @@ * use pin gpio_wkup_6 as second SDRAM chip select (mem_cs1): * Bit 0 (mask: 0x80000000): 1 * use ALT CAN position: Bits 2-3 (mask: 0x30000000): - * 00 -> No Alternatives, I2C1 is used for onboard EEPROM - * 01 -> CAN1 on I2C1, CAN2 on Tmr0/1 do not use on TQM5200 with onboard - * EEPROM + * 00 -> No Alternatives, CAN1/2 on PSC2 according to PSC2 setting. + * Set for rev 100 modules with an onboard EEPROM (because, + * there I2C1 is used as I2C bus) + * 01 -> CAN1 on I2C1, CAN2 on Tmr0/1. + * Set for rev 200 modules * use PSC1 as UART: Bits 28-31 (mask: 0x00000007): 0100 * use PSC6: * on STK52xx: - * use as UART. Pins PSC6_0 to PSC6_3 are used. - Bits 9:11 (mask: 0x00700000): + * use as UART. Pins PSC6_0 to PSC6_3 are used. + * Bits 9:11 (mask: 0x00700000): * 101 -> PSC6 : Extended POST test is not available * on MINI-FAP and TQM5200_IB: - * use PSC6_1 and PSC6_3 as GPIO: Bits 9:11 (mask: 0x00700000): - * 011 -> PSC6 could not be used as UART or CODEC. IrDA still possible. - * GPIO on PSC6_3 is used in post_hotkeys_pressed() to enable extended POST - * tests. + * use PSC6_0 to PSC6_3 as GPIO: Bits 9:11 (mask: 0x00700000): + * 000 -> PSC6 could not be used as UART, CODEC or IrDA + * GPIO on PSC6_3 is used in post_hotkeys_pressed() to enable extended POST + * tests. */ #if defined (CONFIG_MINIFAP) -#define CFG_GPS_PORT_CONFIG 0x91300004 +# define CFG_GPS_PORT_CONFIG 0x91000004 #elif defined (CONFIG_STK52XX) -#define CFG_GPS_PORT_CONFIG 0x81500004 -#else -#define CFG_GPS_PORT_CONFIG 0x81300004 +# if defined (CONFIG_TQM5200_REV100) +# define CFG_GPS_PORT_CONFIG 0x81500004 +# else +# define CFG_GPS_PORT_CONFIG 0x91500004 +# endif +#else /* TMQ5200_IP */ +# define CFG_GPS_PORT_CONFIG 0x81000004 #endif /* @@ -461,14 +482,15 @@ */ #if defined (CONFIG_TQM5200_AB) || defined (CONFIG_TQM5200_AC) || \ defined (CONFIG_CS_AUTOCONF) -#define CFG_CS1_START 0xE0000000 +#define SM501_FB_BASE 0xE0000000 +#define CFG_CS1_START (SM501_FB_BASE) #define CFG_CS1_SIZE 0x4000000 /* 64 MByte */ #define CFG_CS1_CFG 0x8F48FF70 #define SM501_MMIO_BASE CFG_CS1_START + 0x03E00000 #endif #define CFG_CS_BURST 0x00000000 -#define CFG_CS_DEADCYCLE 0x33333333 +#define CFG_CS_DEADCYCLE 0x33333311 /* 1 dead cycle for flash and SM501 */ #define CFG_RESET_ADDRESS 0xff000000 @@ -493,7 +515,7 @@ #define CONFIG_IDE_PREINIT #define CFG_IDE_MAXBUS 1 /* max. 1 IDE bus */ -#define CFG_IDE_MAXDEVICE 1 /* max. 1 drive per IDE bus */ +#define CFG_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */ #define CFG_ATA_IDE0_OFFSET 0x0000