coreboot-v2/util/romcc/tests/raminit_test4.c
<<
>>
Prefs
   1# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c"
   2# 1 "<built-in>"
   3# 1 "<command line>"
   4# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c"
   5
   6# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/include/stdint.h" 1
   7# 11 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/include/stdint.h"
   8typedef unsigned char uint8_t;
   9typedef signed char int8_t;
  10
  11typedef unsigned short uint16_t;
  12typedef signed short int16_t;
  13
  14typedef unsigned int uint32_t;
  15typedef signed int int32_t;
  16
  17
  18
  19
  20
  21
  22
  23typedef unsigned char uint_least8_t;
  24typedef signed char int_least8_t;
  25
  26typedef unsigned short uint_least16_t;
  27typedef signed short int_least16_t;
  28
  29typedef unsigned int uint_least32_t;
  30typedef signed int int_least32_t;
  31
  32
  33
  34
  35
  36
  37
  38typedef unsigned char uint_fast8_t;
  39typedef signed char int_fast8_t;
  40
  41typedef unsigned int uint_fast16_t;
  42typedef signed int int_fast16_t;
  43
  44typedef unsigned int uint_fast32_t;
  45typedef signed int int_fast32_t;
  46
  47
  48
  49
  50
  51
  52
  53typedef int intptr_t;
  54typedef unsigned int uintptr_t;
  55
  56
  57
  58
  59
  60
  61typedef long int intmax_t;
  62typedef unsigned long int uintmax_t;
  63# 3 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
  64# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/include/device/pci_def.h" 1
  65# 4 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
  66# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/include/arch/romcc_io.h" 1
  67static void outb(unsigned char value, unsigned short port)
  68{
  69        __builtin_outb(value, port);
  70}
  71
  72static void outw(unsigned short value, unsigned short port)
  73{
  74        __builtin_outw(value, port);
  75}
  76
  77static void outl(unsigned int value, unsigned short port)
  78{
  79        __builtin_outl(value, port);
  80}
  81
  82
  83static unsigned char inb(unsigned short port)
  84{
  85        return __builtin_inb(port);
  86}
  87
  88
  89static unsigned char inw(unsigned short port)
  90{
  91        return __builtin_inw(port);
  92}
  93
  94static unsigned char inl(unsigned short port)
  95{
  96        return __builtin_inl(port);
  97}
  98
  99static void hlt(void)
 100{
 101        __builtin_hlt();
 102}
 103
 104typedef __builtin_msr_t msr_t;
 105
 106static msr_t rdmsr(unsigned long index)
 107{
 108        return __builtin_rdmsr(index);
 109}
 110
 111static void wrmsr(unsigned long index, msr_t msr)
 112{
 113        __builtin_wrmsr(index, msr.lo, msr.hi);
 114}
 115# 64 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/include/arch/romcc_io.h"
 116typedef unsigned device_t;
 117
 118static unsigned char pci_read_config8(device_t dev, unsigned where)
 119{
 120        unsigned addr;
 121        addr = dev | where;
 122        outl(0x80000000 | (addr & ~3), 0xCF8);
 123        return inb(0xCFC + (addr & 3));
 124}
 125
 126static unsigned short pci_read_config16(device_t dev, unsigned where)
 127{
 128        unsigned addr;
 129        addr = dev | where;
 130        outl(0x80000000 | (addr & ~3), 0xCF8);
 131        return inw(0xCFC + (addr & 2));
 132}
 133
 134static unsigned int pci_read_config32(device_t dev, unsigned where)
 135{
 136        unsigned addr;
 137        addr = dev | where;
 138        outl(0x80000000 | (addr & ~3), 0xCF8);
 139        return inl(0xCFC);
 140}
 141
 142static void pci_write_config8(device_t dev, unsigned where, unsigned char value)
 143{
 144        unsigned addr;
 145        addr = dev | where;
 146        outl(0x80000000 | (addr & ~3), 0xCF8);
 147        outb(value, 0xCFC + (addr & 3));
 148}
 149
 150static void pci_write_config16(device_t dev, unsigned where, unsigned short value)
 151{
 152        unsigned addr;
 153        addr = dev | where;
 154        outl(0x80000000 | (addr & ~3), 0xCF8);
 155        outw(value, 0xCFC + (addr & 2));
 156}
 157
 158static void pci_write_config32(device_t dev, unsigned where, unsigned int value)
 159{
 160        unsigned addr;
 161        addr = dev | where;
 162        outl(0x80000000 | (addr & ~3), 0xCF8);
 163        outl(value, 0xCFC);
 164}
 165
 166
 167static device_t pci_locate_device(unsigned pci_id, device_t dev)
 168{
 169        for(; dev <= ( (((255) & 0xFF) << 16) | (((31) & 0x1f) << 11) | (((7) & 0x7) << 8)); dev += ( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((1) & 0x7) << 8))) {
 170                unsigned int id;
 171                id = pci_read_config32(dev, 0);
 172                if (id == pci_id) {
 173                        return dev;
 174                }
 175        }
 176        return (0xffffffffU);
 177}
 178# 5 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 179# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/pc80/serial.c" 1
 180# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/include/part/fallback_boot.h" 1
 181# 2 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/pc80/serial.c" 2
 182# 44 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/pc80/serial.c"
 183static int uart_can_tx_byte(void)
 184{
 185        return inb(0x3f8 + 0x05) & 0x20;
 186}
 187
 188static void uart_wait_to_tx_byte(void)
 189{
 190        while(!uart_can_tx_byte())
 191                ;
 192}
 193
 194static void uart_wait_until_sent(void)
 195{
 196        while(!(inb(0x3f8 + 0x05) & 0x40))
 197                ;
 198}
 199
 200static void uart_tx_byte(unsigned char data)
 201{
 202        uart_wait_to_tx_byte();
 203        outb(data, 0x3f8 + 0x00);
 204
 205        uart_wait_until_sent();
 206}
 207
 208static void uart_init(void)
 209{
 210
 211        outb(0x0, 0x3f8 + 0x01);
 212
 213        outb(0x01, 0x3f8 + 0x02);
 214
 215        outb(0x80 | 0x3, 0x3f8 + 0x03);
 216# 87 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/pc80/serial.c"
 217        outb((115200/9600) & 0xFF, 0x3f8 + 0x00);
 218        outb(((115200/9600) >> 8) & 0xFF, 0x3f8 + 0x01);
 219
 220        outb(0x3, 0x3f8 + 0x03);
 221}
 222# 6 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 223# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/lib/console.c" 1
 224# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/include/console/loglevel.h" 1
 225# 2 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/lib/console.c" 2
 226
 227static void __console_tx_byte(unsigned char byte)
 228{
 229        uart_tx_byte(byte);
 230}
 231
 232static void __console_tx_nibble(unsigned nibble)
 233{
 234        unsigned char digit;
 235        digit = nibble + '0';
 236        if (digit > '9') {
 237                digit += 39;
 238        }
 239        __console_tx_byte(digit);
 240}
 241
 242static void __console_tx_char(int loglevel, unsigned char byte)
 243{
 244        if (8 > loglevel) {
 245                uart_tx_byte(byte);
 246        }
 247}
 248
 249static void __console_tx_hex8(int loglevel, unsigned char value)
 250{
 251        if (8 > loglevel) {
 252                __console_tx_nibble((value >> 4U) & 0x0fU);
 253                __console_tx_nibble(value & 0x0fU);
 254        }
 255}
 256
 257static void __console_tx_hex16(int loglevel, unsigned short value)
 258{
 259        if (8 > loglevel) {
 260                __console_tx_nibble((value >> 12U) & 0x0fU);
 261                __console_tx_nibble((value >> 8U) & 0x0fU);
 262                __console_tx_nibble((value >> 4U) & 0x0fU);
 263                __console_tx_nibble(value & 0x0fU);
 264        }
 265}
 266
 267static void __console_tx_hex32(int loglevel, unsigned int value)
 268{
 269        if (8 > loglevel) {
 270                __console_tx_nibble((value >> 28U) & 0x0fU);
 271                __console_tx_nibble((value >> 24U) & 0x0fU);
 272                __console_tx_nibble((value >> 20U) & 0x0fU);
 273                __console_tx_nibble((value >> 16U) & 0x0fU);
 274                __console_tx_nibble((value >> 12U) & 0x0fU);
 275                __console_tx_nibble((value >> 8U) & 0x0fU);
 276                __console_tx_nibble((value >> 4U) & 0x0fU);
 277                __console_tx_nibble(value & 0x0fU);
 278        }
 279}
 280
 281static void __console_tx_string(int loglevel, const char *str)
 282{
 283        if (8 > loglevel) {
 284                unsigned char ch;
 285                while((ch = *str++) != '\0') {
 286                        __console_tx_byte(ch);
 287                }
 288        }
 289}
 290
 291static void print_emerg_char(unsigned char byte) { __console_tx_char(0, byte); }
 292static void print_emerg_hex8(unsigned char value){ __console_tx_hex8(0, value); }
 293static void print_emerg_hex16(unsigned short value){ __console_tx_hex16(0, value); }
 294static void print_emerg_hex32(unsigned int value) { __console_tx_hex32(0, value); }
 295static void print_emerg(const char *str) { __console_tx_string(0, str); }
 296
 297static void print_alert_char(unsigned char byte) { __console_tx_char(1, byte); }
 298static void print_alert_hex8(unsigned char value) { __console_tx_hex8(1, value); }
 299static void print_alert_hex16(unsigned short value){ __console_tx_hex16(1, value); }
 300static void print_alert_hex32(unsigned int value) { __console_tx_hex32(1, value); }
 301static void print_alert(const char *str) { __console_tx_string(1, str); }
 302
 303static void print_crit_char(unsigned char byte) { __console_tx_char(2, byte); }
 304static void print_crit_hex8(unsigned char value) { __console_tx_hex8(2, value); }
 305static void print_crit_hex16(unsigned short value){ __console_tx_hex16(2, value); }
 306static void print_crit_hex32(unsigned int value) { __console_tx_hex32(2, value); }
 307static void print_crit(const char *str) { __console_tx_string(2, str); }
 308
 309static void print_err_char(unsigned char byte) { __console_tx_char(3, byte); }
 310static void print_err_hex8(unsigned char value) { __console_tx_hex8(3, value); }
 311static void print_err_hex16(unsigned short value){ __console_tx_hex16(3, value); }
 312static void print_err_hex32(unsigned int value) { __console_tx_hex32(3, value); }
 313static void print_err(const char *str) { __console_tx_string(3, str); }
 314
 315static void print_warning_char(unsigned char byte) { __console_tx_char(4, byte); }
 316static void print_warning_hex8(unsigned char value) { __console_tx_hex8(4, value); }
 317static void print_warning_hex16(unsigned short value){ __console_tx_hex16(4, value); }
 318static void print_warning_hex32(unsigned int value) { __console_tx_hex32(4, value); }
 319static void print_warning(const char *str) { __console_tx_string(4, str); }
 320
 321static void print_notice_char(unsigned char byte) { __console_tx_char(5, byte); }
 322static void print_notice_hex8(unsigned char value) { __console_tx_hex8(5, value); }
 323static void print_notice_hex16(unsigned short value){ __console_tx_hex16(5, value); }
 324static void print_notice_hex32(unsigned int value) { __console_tx_hex32(5, value); }
 325static void print_notice(const char *str) { __console_tx_string(5, str); }
 326
 327static void print_info_char(unsigned char byte) { __console_tx_char(6, byte); }
 328static void print_info_hex8(unsigned char value) { __console_tx_hex8(6, value); }
 329static void print_info_hex16(unsigned short value){ __console_tx_hex16(6, value); }
 330static void print_info_hex32(unsigned int value) { __console_tx_hex32(6, value); }
 331static void print_info(const char *str) { __console_tx_string(6, str); }
 332
 333static void print_debug_char(unsigned char byte) { __console_tx_char(7, byte); }
 334static void print_debug_hex8(unsigned char value) { __console_tx_hex8(7, value); }
 335static void print_debug_hex16(unsigned short value){ __console_tx_hex16(7, value); }
 336static void print_debug_hex32(unsigned int value) { __console_tx_hex32(7, value); }
 337static void print_debug(const char *str) { __console_tx_string(7, str); }
 338
 339static void print_spew_char(unsigned char byte) { __console_tx_char(8, byte); }
 340static void print_spew_hex8(unsigned char value) { __console_tx_hex8(8, value); }
 341static void print_spew_hex16(unsigned short value){ __console_tx_hex16(8, value); }
 342static void print_spew_hex32(unsigned int value) { __console_tx_hex32(8, value); }
 343static void print_spew(const char *str) { __console_tx_string(8, str); }
 344# 128 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/arch/i386/lib/console.c"
 345static void console_init(void)
 346{
 347        static const char console_test[] =
 348                "\r\n\r\nLinuxBIOS-"
 349                "1.1.0"
 350                ".0Fallback"
 351                " "
 352                "Fri Jun 13 21:02:41 MDT 2003"
 353                " starting...\r\n";
 354        print_info(console_test);
 355}
 356
 357
 358static void die(const char *str)
 359{
 360        print_emerg(str);
 361        do {
 362                hlt();
 363        } while(1);
 364}
 365# 7 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 366# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/ram/ramtest.c" 1
 367static void write_phys(unsigned long addr, unsigned long value)
 368{
 369        volatile unsigned long *ptr;
 370        ptr = (void *)addr;
 371        *ptr = value;
 372}
 373
 374static unsigned long read_phys(unsigned long addr)
 375{
 376        volatile unsigned long *ptr;
 377        ptr = (void *)addr;
 378        return *ptr;
 379}
 380
 381void ram_fill(unsigned long start, unsigned long stop)
 382{
 383        unsigned long addr;
 384
 385
 386
 387        print_debug("DRAM fill: ");
 388        print_debug_hex32(start);
 389        print_debug("-");
 390        print_debug_hex32(stop);
 391        print_debug("\r\n");
 392        for(addr = start; addr < stop ; addr += 4) {
 393
 394                if ((addr & 0xffff) == 0) {
 395                        print_debug_hex32(addr);
 396                        print_debug("\r");
 397                }
 398                write_phys(addr, addr);
 399        };
 400
 401        print_debug_hex32(addr);
 402        print_debug("\r\nDRAM filled\r\n");
 403}
 404
 405void ram_verify(unsigned long start, unsigned long stop)
 406{
 407        unsigned long addr;
 408
 409
 410
 411        print_debug("DRAM verify: ");
 412        print_debug_hex32(start);
 413        print_debug_char('-');
 414        print_debug_hex32(stop);
 415        print_debug("\r\n");
 416        for(addr = start; addr < stop ; addr += 4) {
 417                unsigned long value;
 418
 419                if ((addr & 0xffff) == 0) {
 420                        print_debug_hex32(addr);
 421                        print_debug("\r");
 422                }
 423                value = read_phys(addr);
 424                if (value != addr) {
 425
 426                        print_err_hex32(addr);
 427                        print_err_char(':');
 428                        print_err_hex32(value);
 429                        print_err("\r\n");
 430                }
 431        }
 432
 433        print_debug_hex32(addr);
 434        print_debug("\r\nDRAM verified\r\n");
 435}
 436
 437
 438void ram_check(unsigned long start, unsigned long stop)
 439{
 440        int result;
 441
 442
 443
 444
 445
 446        print_debug("Testing DRAM : ");
 447        print_debug_hex32(start);
 448        print_debug("-");
 449        print_debug_hex32(stop);
 450        print_debug("\r\n");
 451        ram_fill(start, stop);
 452        ram_verify(start, stop);
 453        print_debug("Done.\n");
 454}
 455# 8 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 456# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/early_ht.c" 1
 457static void enumerate_ht_chain(void)
 458{
 459
 460
 461
 462
 463
 464        unsigned next_unitid, last_unitid;;
 465        next_unitid = 1;
 466        do {
 467                uint32_t id;
 468                uint8_t hdr_type, pos;
 469                last_unitid = next_unitid;
 470
 471                id = pci_read_config32(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), 0x00);
 472
 473                if (((id & 0xffff) == 0x0000) || ((id & 0xffff) == 0xffff) ||
 474                        (((id >> 16) & 0xffff) == 0xffff) ||
 475                        (((id >> 16) & 0xffff) == 0x0000)) {
 476                        break;
 477                }
 478                hdr_type = pci_read_config8(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), 0x0e);
 479                pos = 0;
 480                hdr_type &= 0x7f;
 481
 482                if ((hdr_type == 0) ||
 483                        (hdr_type == 1)) {
 484                        pos = pci_read_config8(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), 0x34);
 485                }
 486                while(pos != 0) {
 487                        uint8_t cap;
 488                        cap = pci_read_config8(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), pos + 0);
 489                        if (cap == 0x08) {
 490                                uint16_t flags;
 491                                flags = pci_read_config16(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), pos + 2);
 492                                if ((flags >> 13) == 0) {
 493                                        unsigned count;
 494                                        flags &= ~0x1f;
 495                                        flags |= next_unitid & 0x1f;
 496                                        count = (flags >> 5) & 0x1f;
 497                                        pci_write_config16(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), pos + 2, flags);
 498                                        next_unitid += count;
 499                                        break;
 500                                }
 501                        }
 502                        pos = pci_read_config8(( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8)), pos + 1);
 503                }
 504        } while((last_unitid != next_unitid) && (next_unitid <= 0x1f));
 505}
 506# 9 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 507# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/southbridge/amd/amd8111/amd8111_early_smbus.c" 1
 508# 12 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/southbridge/amd/amd8111/amd8111_early_smbus.c"
 509static void enable_smbus(void)
 510{
 511        device_t dev;
 512        dev = pci_locate_device(((((0x746b) & 0xFFFF) << 16) | ((0x1022) & 0xFFFF)), 0);
 513        if (dev == (0xffffffffU)) {
 514                die("SMBUS controller not found\r\n");
 515        }
 516        uint8_t enable;
 517        print_debug("SMBus controller enabled\r\n");
 518        pci_write_config32(dev, 0x58, 0x1000 | 1);
 519        enable = pci_read_config8(dev, 0x41);
 520        pci_write_config8(dev, 0x41, enable | (1 << 7));
 521}
 522
 523
 524static inline void smbus_delay(void)
 525{
 526        outb(0x80, 0x80);
 527}
 528
 529static int smbus_wait_until_ready(void)
 530{
 531        unsigned long loops;
 532        loops = (100*1000*10);
 533        do {
 534                unsigned short val;
 535                smbus_delay();
 536                val = inw(0x1000 + 0xe0);
 537                if ((val & 0x800) == 0) {
 538                        break;
 539                }
 540        } while(--loops);
 541        return loops?0:-1;
 542}
 543
 544static int smbus_wait_until_done(void)
 545{
 546        unsigned long loops;
 547        loops = (100*1000*10);
 548        do {
 549                unsigned short val;
 550                smbus_delay();
 551
 552                val = inw(0x1000 + 0xe0);
 553                if (((val & 0x8) == 0) || ((val & 0x437) != 0)) {
 554                        break;
 555                }
 556        } while(--loops);
 557        return loops?0:-1;
 558}
 559
 560static int smbus_read_byte(unsigned device, unsigned address)
 561{
 562        unsigned char global_control_register;
 563        unsigned char global_status_register;
 564        unsigned char byte;
 565
 566        if (smbus_wait_until_ready() < 0) {
 567                return -1;
 568        }
 569
 570
 571
 572        outw(inw(0x1000 + 0xe2) & ~((1<<10)|(1<<9)|(1<<8)|(1<<4)), 0x1000 + 0xe2);
 573
 574        outw(((device & 0x7f) << 1) | 1, 0x1000 + 0xe4);
 575
 576        outb(address & 0xFF, 0x1000 + 0xe8);
 577
 578        outw((inw(0x1000 + 0xe2) & ~7) | (0x2), 0x1000 + 0xe2);
 579
 580
 581
 582        outw(inw(0x1000 + 0xe0), 0x1000 + 0xe0);
 583
 584
 585        outw(0, 0x1000 + 0xe6);
 586
 587
 588        outw((inw(0x1000 + 0xe2) | (1 << 3)), 0x1000 + 0xe2);
 589
 590
 591
 592        if (smbus_wait_until_done() < 0) {
 593                return -1;
 594        }
 595
 596        global_status_register = inw(0x1000 + 0xe0);
 597
 598
 599        byte = inw(0x1000 + 0xe6) & 0xff;
 600
 601        if (global_status_register != (1 << 4)) {
 602                return -1;
 603        }
 604        return byte;
 605}
 606# 10 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 607# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c" 1
 608# 10 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 609static void setup_resource_map(const unsigned int *register_values, int max)
 610{
 611        int i;
 612        print_debug("setting up resource map....\r\n");
 613        for(i = 0; i < max; i += 3) {
 614                device_t dev;
 615                unsigned where;
 616                unsigned long reg;
 617
 618
 619
 620
 621
 622
 623                dev = register_values[i] & ~0xff;
 624                where = register_values[i] & 0xff;
 625                reg = pci_read_config32(dev, where);
 626                reg &= register_values[i+1];
 627                reg |= register_values[i+2];
 628                pci_write_config32(dev, where, reg);
 629
 630
 631
 632
 633
 634
 635        }
 636        print_debug("done.\r\n");
 637}
 638
 639static void setup_default_resource_map(void)
 640{
 641        static const unsigned int register_values[] = {
 642# 70 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 643        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x44) & 0xFF)), 0x0000f8f8, 0x00000000,
 644        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x4C) & 0xFF)), 0x0000f8f8, 0x00000001,
 645        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x54) & 0xFF)), 0x0000f8f8, 0x00000002,
 646        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x5C) & 0xFF)), 0x0000f8f8, 0x00000003,
 647        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x64) & 0xFF)), 0x0000f8f8, 0x00000004,
 648        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x6C) & 0xFF)), 0x0000f8f8, 0x00000005,
 649        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x74) & 0xFF)), 0x0000f8f8, 0x00000006,
 650        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x7C) & 0xFF)), 0x0000f8f8, 0x00000007,
 651# 108 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 652        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x40) & 0xFF)), 0x0000f8fc, 0x00000000,
 653        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x48) & 0xFF)), 0x0000f8fc, 0x00000000,
 654        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x50) & 0xFF)), 0x0000f8fc, 0x00000000,
 655        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x58) & 0xFF)), 0x0000f8fc, 0x00000000,
 656        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x60) & 0xFF)), 0x0000f8fc, 0x00000000,
 657        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x68) & 0xFF)), 0x0000f8fc, 0x00000000,
 658        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x70) & 0xFF)), 0x0000f8fc, 0x00000000,
 659        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x78) & 0xFF)), 0x0000f8fc, 0x00000000,
 660# 149 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 661        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x84) & 0xFF)), 0x00000048, 0x00000000,
 662        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x8C) & 0xFF)), 0x00000048, 0x00000000,
 663        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x94) & 0xFF)), 0x00000048, 0x00000000,
 664        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x9C) & 0xFF)), 0x00000048, 0x00000000,
 665        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA4) & 0xFF)), 0x00000048, 0x00000000,
 666        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xAC) & 0xFF)), 0x00000048, 0x00000000,
 667        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB4) & 0xFF)), 0x00000048, 0x00000000,
 668        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xBC) & 0xFF)), 0x00000048, 0x00000000,
 669# 184 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 670        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x80) & 0xFF)), 0x000000f0, 0x00000000,
 671        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x88) & 0xFF)), 0x000000f0, 0x00000000,
 672        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x90) & 0xFF)), 0x000000f0, 0x00000000,
 673        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x98) & 0xFF)), 0x000000f0, 0x00000000,
 674        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA0) & 0xFF)), 0x000000f0, 0x00000000,
 675        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA8) & 0xFF)), 0x000000f0, 0x00000000,
 676        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB0) & 0xFF)), 0x000000f0, 0x00000000,
 677        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB8) & 0xFF)), 0x000000f0, 0x00000000,
 678# 218 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 679        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC4) & 0xFF)), 0xFE000FC8, 0x01fff000,
 680        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xCC) & 0xFF)), 0xFE000FC8, 0x00000000,
 681        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD4) & 0xFF)), 0xFE000FC8, 0x00000000,
 682        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xDC) & 0xFF)), 0xFE000FC8, 0x00000000,
 683# 248 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 684        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC0) & 0xFF)), 0xFE000FCC, 0x00000003,
 685        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC8) & 0xFF)), 0xFE000FCC, 0x00000000,
 686        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD0) & 0xFF)), 0xFE000FCC, 0x00000000,
 687        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD8) & 0xFF)), 0xFE000FCC, 0x00000000,
 688# 289 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 689        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE0) & 0xFF)), 0x0000FC88, 0xff000003,
 690        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE4) & 0xFF)), 0x0000FC88, 0x00000000,
 691        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE8) & 0xFF)), 0x0000FC88, 0x00000000,
 692        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xEC) & 0xFF)), 0x0000FC88, 0x00000000,
 693        };
 694        int max;
 695        max = sizeof(register_values)/sizeof(register_values[0]);
 696        setup_resource_map(register_values, max);
 697}
 698
 699static void sdram_set_registers(void)
 700{
 701        static const unsigned int register_values[] = {
 702# 339 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 703        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x44) & 0xFF)), 0x0000f8f8, 0x003f0000,
 704        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x4C) & 0xFF)), 0x0000f8f8, 0x007f0001,
 705
 706        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x54) & 0xFF)), 0x0000f8f8, 0x00000002,
 707        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x5C) & 0xFF)), 0x0000f8f8, 0x00000003,
 708        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x64) & 0xFF)), 0x0000f8f8, 0x00000004,
 709        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x6C) & 0xFF)), 0x0000f8f8, 0x00000005,
 710        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x74) & 0xFF)), 0x0000f8f8, 0x00000006,
 711        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x7C) & 0xFF)), 0x0000f8f8, 0x00000007,
 712# 378 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 713        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x40) & 0xFF)), 0x0000f8fc, 0x00000003,
 714# 398 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 715        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x48) & 0xFF)), 0x0000f8fc, 0x00400003,
 716        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x50) & 0xFF)), 0x0000f8fc, 0x00800000,
 717        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x58) & 0xFF)), 0x0000f8fc, 0x00800000,
 718        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x60) & 0xFF)), 0x0000f8fc, 0x00800000,
 719        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x68) & 0xFF)), 0x0000f8fc, 0x00800000,
 720        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x70) & 0xFF)), 0x0000f8fc, 0x00800000,
 721        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x78) & 0xFF)), 0x0000f8fc, 0x00800000,
 722        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x78) & 0xFF)), 0x0000f8fc, 0x00800000,
 723# 451 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 724        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x84) & 0xFF)), 0x00000048, 0x00fe2f00,
 725        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x8C) & 0xFF)), 0x00000048, 0x00000000,
 726        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x94) & 0xFF)), 0x00000048, 0x00000000,
 727        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x9C) & 0xFF)), 0x00000048, 0x00000000,
 728        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA4) & 0xFF)), 0x00000048, 0x00fec000,
 729        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xAC) & 0xFF)), 0x00000048, 0x0000b000,
 730        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB4) & 0xFF)), 0x00000048, 0x00000000,
 731        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xBC) & 0xFF)), 0x00000048, 0x00000000,
 732# 503 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 733        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x80) & 0xFF)), 0x000000f0, 0x00fc0003,
 734        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x88) & 0xFF)), 0x000000f0, 0x00000000,
 735        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x90) & 0xFF)), 0x000000f0, 0x00000000,
 736        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0x98) & 0xFF)), 0x000000f0, 0x00000000,
 737        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA0) & 0xFF)), 0x000000f0, 0x00fec00e,
 738        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xA8) & 0xFF)), 0x000000f0, 0x00000a03,
 739        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB0) & 0xFF)), 0x000000f0, 0x00000000,
 740        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xB8) & 0xFF)), 0x000000f0, 0x00000000,
 741# 545 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 742        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC4) & 0xFF)), 0xFE000FC8, 0x01fff000,
 743        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xCC) & 0xFF)), 0xFE000FC8, 0x00000000,
 744        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD4) & 0xFF)), 0xFE000FC8, 0x00000000,
 745        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xDC) & 0xFF)), 0xFE000FC8, 0x00000000,
 746# 583 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 747        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC0) & 0xFF)), 0xFE000FCC, 0x00000033,
 748        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xC8) & 0xFF)), 0xFE000FCC, 0x00000000,
 749        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD0) & 0xFF)), 0xFE000FCC, 0x00000000,
 750        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xD8) & 0xFF)), 0xFE000FCC, 0x00000000,
 751# 632 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 752        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE0) & 0xFF)), 0x0000FC88, 0xff000003,
 753        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE4) & 0xFF)), 0x0000FC88, 0x00000000,
 754        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xE8) & 0xFF)), 0x0000FC88, 0x00000000,
 755        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((1) & 0x07) << 8) | ((0xEC) & 0xFF)), 0x0000FC88, 0x00000000,
 756# 659 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 757        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x40) & 0xFF)), 0x001f01fe, 0x00000001,
 758# 671 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 759        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x44) & 0xFF)), 0x001f01fe, 0x00001001,
 760        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x48) & 0xFF)), 0x001f01fe, 0x00000000,
 761        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x4C) & 0xFF)), 0x001f01fe, 0x00000000,
 762
 763        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x50) & 0xFF)), 0x001f01fe, 0x00000000,
 764        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x54) & 0xFF)), 0x001f01fe, 0x00000000,
 765        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x58) & 0xFF)), 0x001f01fe, 0x00000000,
 766        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x5C) & 0xFF)), 0x001f01fe, 0x00000000,
 767# 711 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 768        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x60) & 0xFF)), 0xC01f01ff, 0x03e0ee00,
 769        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x64) & 0xFF)), 0xC01f01ff, 0x03e0ee00,
 770        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x68) & 0xFF)), 0xC01f01ff, 0x00000000,
 771        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x6C) & 0xFF)), 0xC01f01ff, 0x00000000,
 772
 773        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x70) & 0xFF)), 0xC01f01ff, 0x00000000,
 774        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x74) & 0xFF)), 0xC01f01ff, 0x00000000,
 775        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x78) & 0xFF)), 0xC01f01ff, 0x00000000,
 776        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x7C) & 0xFF)), 0xC01f01ff, 0x00000000,
 777# 747 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 778        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x80) & 0xFF)), 0xffff8888, 0x00000003,
 779# 817 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 780        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x88) & 0xFF)), 0xe8088008, 0x13723335,
 781# 855 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 782        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x8c) & 0xFF)), 0xff8fe08e, 0x00100a20,
 783# 937 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 784        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x90) & 0xFF)), 0xf0000000,
 785        (4 << 25)|(0 << 24)|
 786        (0 << 23)|(0 << 22)|(0 << 21)|(0 << 20)|
 787        (0 << 19)|(0 << 18)|(0 << 17)|(1 << 16)|
 788        (2 << 14)|(0 << 13)|(0 << 12)|
 789        (0 << 11)|(0 << 10)|(0 << 9)|(0 << 8)|
 790        (0 << 3) |(0 << 1) |(0 << 0),
 791# 1016 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 792        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x94) & 0xFF)), 0xc180f0f0, 0x065b0b08,
 793# 1033 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 794        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x07) << 8) | ((0x98) & 0xFF)), 0xfc00ffff, 0x00000000,
 795# 1067 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 796        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((3) & 0x07) << 8) | ((0x58) & 0xFF)), 0xffe0e0e0, 0x00000000,
 797# 1076 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 798        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((3) & 0x07) << 8) | ((0x5C) & 0xFF)), 0x0000003e, 0x00000000,
 799
 800
 801
 802
 803
 804        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((3) & 0x07) << 8) | ((0x60) & 0xFF)), 0xffffff00, 0x00000000,
 805        };
 806        int i;
 807        int max;
 808        print_debug("setting up CPU0 northbridge registers\r\n");
 809        max = sizeof(register_values)/sizeof(register_values[0]);
 810        for(i = 0; i < max; i += 3) {
 811                device_t dev;
 812                unsigned where;
 813                unsigned long reg;
 814
 815
 816
 817
 818
 819
 820                dev = register_values[i] & ~0xff;
 821                where = register_values[i] & 0xff;
 822                reg = pci_read_config32(dev, where);
 823                reg &= register_values[i+1];
 824                reg |= register_values[i+2];
 825                pci_write_config32(dev, where, reg);
 826
 827
 828
 829
 830
 831
 832
 833        }
 834        print_debug("done.\r\n");
 835}
 836# 1132 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 837static void sdram_set_spd_registers(void)
 838{
 839        unsigned long dcl;
 840        dcl = pci_read_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x7) << 8)), 0x90);
 841
 842        dcl &= ~(1<<17);
 843        pci_write_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x7) << 8)), 0x90, dcl);
 844}
 845
 846
 847static void sdram_enable(void)
 848{
 849        unsigned long dcl;
 850
 851
 852        dcl = pci_read_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x7) << 8)), 0x90);
 853        print_debug("dcl: ");
 854        print_debug_hex32(dcl);
 855        print_debug("\r\n");
 856        dcl |= (1<<3);
 857        pci_write_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x7) << 8)), 0x90, dcl);
 858        dcl &= ~(1<<3);
 859        dcl &= ~(1<<0);
 860        dcl &= ~(1<<1);
 861        dcl &= ~(1<<2);
 862        dcl |= (1<<8);
 863        pci_write_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x7) << 8)), 0x90, dcl);
 864
 865        print_debug("Initializing memory: ");
 866        int loops = 0;
 867        do {
 868                dcl = pci_read_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((2) & 0x7) << 8)), 0x90);
 869                loops += 1;
 870                if ((loops & 1023) == 0) {
 871                        print_debug(".");
 872                }
 873        } while(((dcl & (1<<8)) != 0) && (loops < 300000));
 874        if (loops >= 300000) {
 875                print_debug(" failed\r\n");
 876        } else {
 877                print_debug(" done\r\n");
 878        }
 879# 1192 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/raminit.c"
 880}
 881
 882static void sdram_first_normal_reference(void) {}
 883static void sdram_enable_refresh(void) {}
 884static void sdram_special_finishup(void) {}
 885# 11 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 886# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c" 1
 887# 9 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 888static void setup_coherent_ht_domain(void)
 889{
 890        static const unsigned int register_values[] = {
 891# 37 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 892        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x40) & 0xFF)), 0xfff0f0f0, 0x00010101,
 893        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x44) & 0xFF)), 0xfff0f0f0, 0x00010101,
 894        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x48) & 0xFF)), 0xfff0f0f0, 0x00010101,
 895        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x4c) & 0xFF)), 0xfff0f0f0, 0x00010101,
 896        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x50) & 0xFF)), 0xfff0f0f0, 0x00010101,
 897        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x54) & 0xFF)), 0xfff0f0f0, 0x00010101,
 898        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x58) & 0xFF)), 0xfff0f0f0, 0x00010101,
 899        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x5c) & 0xFF)), 0xfff0f0f0, 0x00010101,
 900# 136 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 901        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x68) & 0xFF)), 0x00800000, 0x0f00840f,
 902# 158 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 903        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x6C) & 0xFF)), 0xffffff8c, 0x00000000 | (1 << 6) |(1 << 5)| (1 << 4),
 904# 235 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 905        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x84) & 0xFF)), 0x00009c05, 0x11110020,
 906# 280 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 907        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x88) & 0xFF)), 0xfffff0ff, 0x00000200,
 908# 301 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/northbridge/amd/amdk8/coherent_ht.c"
 909        ( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x07) << 8) | ((0x94) & 0xFF)), 0xff000000, 0x00ff0000,
 910
 911
 912
 913
 914
 915        };
 916        int i;
 917        int max;
 918        print_debug("setting up coherent ht domain....\r\n");
 919        max = sizeof(register_values)/sizeof(register_values[0]);
 920        for(i = 0; i < max; i += 3) {
 921                device_t dev;
 922                unsigned where;
 923                unsigned long reg;
 924
 925
 926
 927
 928
 929
 930                dev = register_values[i] & ~0xff;
 931                where = register_values[i] & 0xff;
 932                reg = pci_read_config32(dev, where);
 933                reg &= register_values[i+1];
 934                reg |= register_values[i+2];
 935                pci_write_config32(dev, where, reg);
 936
 937
 938
 939
 940
 941
 942        }
 943        print_debug("done.\r\n");
 944}
 945# 12 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 946# 1 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/sdram/generic_sdram.c" 1
 947void sdram_no_memory(void)
 948{
 949        print_err("No memory!!\r\n");
 950        while(1) {
 951                hlt();
 952        }
 953}
 954
 955
 956void sdram_initialize(void)
 957{
 958        print_debug("Ram1\r\n");
 959
 960        sdram_set_registers();
 961
 962        print_debug("Ram2\r\n");
 963
 964        sdram_set_spd_registers();
 965
 966        print_debug("Ram3\r\n");
 967
 968
 969
 970
 971        sdram_enable();
 972
 973        print_debug("Ram4\r\n");
 974        sdram_first_normal_reference();
 975
 976        print_debug("Ram5\r\n");
 977        sdram_enable_refresh();
 978        sdram_special_finishup();
 979
 980        print_debug("Ram6\r\n");
 981}
 982# 13 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c" 2
 983
 984static int boot_cpu(void)
 985{
 986        volatile unsigned long *local_apic;
 987        unsigned long apic_id;
 988        int bsp;
 989        msr_t msr;
 990        msr = rdmsr(0x1b);
 991        bsp = !!(msr.lo & (1 << 8));
 992        if (bsp) {
 993                print_debug("Bootstrap cpu\r\n");
 994        }
 995
 996        return bsp;
 997}
 998
 999static int cpu_init_detected(void)
1000{
1001        unsigned long dcl;
1002        int cpu_init;
1003
1004        unsigned long htic;
1005
1006        htic = pci_read_config32(( (((0) & 0xFF) << 16) | (((0x18) & 0x1f) << 11) | (((0) & 0x7) << 8)), 0x6c);
1007# 52 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c"
1008        cpu_init = (htic & (1<<6));
1009        if (cpu_init) {
1010                print_debug("CPU INIT Detected.\r\n");
1011        }
1012        return cpu_init;
1013}
1014
1015
1016static void print_pci_devices(void)
1017{
1018        device_t dev;
1019        for(dev = ( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((0) & 0x7) << 8));
1020                dev <= ( (((0) & 0xFF) << 16) | (((0x1f) & 0x1f) << 11) | (((0x7) & 0x7) << 8));
1021                dev += ( (((0) & 0xFF) << 16) | (((0) & 0x1f) << 11) | (((1) & 0x7) << 8))) {
1022                uint32_t id;
1023                id = pci_read_config32(dev, 0x00);
1024                if (((id & 0xffff) == 0x0000) || ((id & 0xffff) == 0xffff) ||
1025                        (((id >> 16) & 0xffff) == 0xffff) ||
1026                        (((id >> 16) & 0xffff) == 0x0000)) {
1027                        continue;
1028                }
1029                print_debug("PCI: 00:");
1030                print_debug_hex8(dev >> 11);
1031                print_debug_char('.');
1032                print_debug_hex8((dev >> 8) & 7);
1033                print_debug("\r\n");
1034        }
1035}
1036
1037
1038static void dump_spd_registers(void)
1039{
1040        unsigned device;
1041        device = (0xa << 3);
1042        print_debug("\r\n");
1043        while(device <= ((0xa << 3) +7)) {
1044                int i;
1045                print_debug("dimm: ");
1046                print_debug_hex8(device);
1047                for(i = 0; i < 256; i++) {
1048                        int status;
1049                        unsigned char byte;
1050                        if ((i & 0xf) == 0) {
1051                                print_debug("\r\n");
1052                                print_debug_hex8(i);
1053                                print_debug(": ");
1054                        }
1055                        status = smbus_read_byte(device, i);
1056                        if (status < 0) {
1057                                print_debug("bad device\r\n");
1058                                break;
1059                        }
1060                        byte = status & 0xff;
1061                        print_debug_hex8(byte);
1062                        print_debug_char(' ');
1063                }
1064                device += 1;
1065                print_debug("\r\n");
1066        }
1067}
1068
1069static void pnp_write_config(unsigned char port, unsigned char value, unsigned char reg)
1070{
1071        outb(reg, port);
1072        outb(value, port +1);
1073}
1074
1075static unsigned char pnp_read_config(unsigned char port, unsigned char reg)
1076{
1077        outb(reg, port);
1078        return inb(port +1);
1079}
1080
1081static void pnp_set_logical_device(unsigned char port, int device)
1082{
1083        pnp_write_config(port, device, 0x07);
1084}
1085
1086static void pnp_set_enable(unsigned char port, int enable)
1087{
1088        pnp_write_config(port, enable?0x1:0x0, 0x30);
1089}
1090
1091static int pnp_read_enable(unsigned char port)
1092{
1093        return !!pnp_read_config(port, 0x30);
1094}
1095
1096static void pnp_set_iobase0(unsigned char port, unsigned iobase)
1097{
1098        pnp_write_config(port, (iobase >> 8) & 0xff, 0x60);
1099        pnp_write_config(port, iobase & 0xff, 0x61);
1100}
1101
1102static void pnp_set_iobase1(unsigned char port, unsigned iobase)
1103{
1104        pnp_write_config(port, (iobase >> 8) & 0xff, 0x62);
1105        pnp_write_config(port, iobase & 0xff, 0x63);
1106}
1107
1108static void pnp_set_irq0(unsigned char port, unsigned irq)
1109{
1110        pnp_write_config(port, irq, 0x70);
1111}
1112
1113static void pnp_set_irq1(unsigned char port, unsigned irq)
1114{
1115        pnp_write_config(port, irq, 0x72);
1116}
1117
1118static void pnp_set_drq(unsigned char port, unsigned drq)
1119{
1120        pnp_write_config(port, drq & 0xff, 0x74);
1121}
1122# 179 "/home/eric/projects/linuxbios/checkin/hdama/freebios2/src/mainboard/arima/hdama/auto.c"
1123static void pc87360_enable_serial(void)
1124{
1125        pnp_set_logical_device(0x2e, 0x03);
1126        pnp_set_enable(0x2e, 1);
1127        pnp_set_iobase0(0x2e, 0x3f8);
1128}
1129
1130static void main(void)
1131{
1132        pc87360_enable_serial();
1133        uart_init();
1134        console_init();
1135        if (boot_cpu() && !cpu_init_detected()) {
1136                setup_coherent_ht_domain();
1137                enumerate_ht_chain();
1138                print_pci_devices();
1139                enable_smbus();
1140                sdram_initialize();
1141
1142                dump_spd_registers();
1143
1144                ram_check(0x00000000, 0x00001000);
1145                ram_check(0x00000000, 0x00180000);
1146        }
1147}
1148
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.