Hi,<br><br>    These are post codes for TIM-5690 LED debug message.<br>    It's easy show message.<br>    Thanks.<br><br>     Signed-off-by: Libra Li <<a href="http://libra.li/" target="_blank">libra.li</a>@<a href="http://technexion.com/" target="_blank">technexion.com</a>><br>
    <br><br><br>Index: src/mainboard/technexion/tim5690/Makefile.inc<br>===================================================================<br>--- src/mainboard/technexion/tim5690/Makefile.inc    (revision 4927)<br>+++ src/mainboard/technexion/tim5690/Makefile.inc    (working copy)<br>
@@ -29,6 +29,9 @@<br> obj-$(CONFIG_GENERATE_ACPI_TABLES) += acpi_tables.o<br> obj-$(CONFIG_GENERATE_ACPI_TABLES) += fadt.o<br> <br>+# This is debug message for products of Technexion.<br>+obj-y += tn_post_code.o<br>+<br> # This is part of the conversion to init-obj and away from included code.<br>
 <br> initobj-y += crt0.o<br>Index: src/mainboard/technexion/tim5690/cache_as_ram_auto.c<br>===================================================================<br>--- src/mainboard/technexion/tim5690/cache_as_ram_auto.c    (revision 4927)<br>
+++ src/mainboard/technexion/tim5690/cache_as_ram_auto.c    (working copy)<br>@@ -100,6 +100,10 @@<br> <br> #include "cpu/amd/model_fxx/fidvid.c"<br> <br>+#define TECHNEXION_EARLY_SETUP<br>+#include "tn_post_code.c"<br>
+<br>+<br> #if CONFIG_USE_FALLBACK_IMAGE == 1<br> <br> #include "northbridge/amd/amdk8/early_ht.c"<br>@@ -161,6 +165,8 @@<br>     struct cpuid_result cpuid1;<br>     struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);<br>
 <br>+    technexion_post_code_init();<br>+    technexion_post_code(LED_MESSAGE_START);<br> <br>     if (bist == 0) {<br>         bsp_apicid = init_cpus(cpu_init_detectedx, sysinfo);<br>@@ -233,7 +239,11 @@<br>     /* It's the time to set ctrl now; */<br>
     printk_debug("sysinfo->nodes: %2x  sysinfo->ctrl: %2x  spd_addr: %2x\n",<br>              sysinfo->nodes, sysinfo->ctrl, spd_addr);<br>+<br>     fill_mem_ctrl(sysinfo->nodes, sysinfo->ctrl, spd_addr);<br>
+<br>+    technexion_post_code(LED_MESSAGE_RAM);<br>+<br>     sdram_initialize(sysinfo->nodes, sysinfo->ctrl, sysinfo);<br> <br>     rs690_before_pci_init();<br>Index: src/mainboard/technexion/tim5690/tn_post_code.c<br>
===================================================================<br>--- src/mainboard/technexion/tim5690/tn_post_code.c    (revision 0)<br>+++ src/mainboard/technexion/tim5690/tn_post_code.c    (revision 0)<br>@@ -0,0 +1,207 @@<br>
+<br>+#ifdef TECHNEXION_EARLY_SETUP<br>+<br>+#include <arch/cpu.h><br>+#include "southbridge/amd/sb600/sb600.h"<br>+<br>+#else<br>+<br>+#include <device/pci.h><br>+#include <device/pci_ids.h><br>
+<br>+#endif<br>+<br>+#include "tn_post_code.h"<br>+<br>+<br>+#ifdef TECHNEXION_EARLY_SETUP<br>+<br>+// TechNexion's Post Code Initially.<br>+void technexion_post_code_init(void)<br>+{<br>+   uint8_t reg8_data;<br>
+   device_t dev=0;<br>+<br>+   // SMBus Module and ACPI Block (Device 20, Function 0)<br>+   dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SB600_SM), 0);<br>+<br>+   // LED[bit0]:GPIO0<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>
+   reg8_data = pmio_read(0x60);<br>+   reg8_data |= (1<<7);  // 1: GPIO if not used by SATA<br>+   pmio_write(0x60, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0x80);<br>+   reg8_data = ((reg8_data | (1<<0)) & ~(1<<4));<br>
+   pci_write_config8(dev, 0x80, reg8_data);<br>+<br>+   // LED[bit1]:GPIO1<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>+   reg8_data = pci_read_config8(dev, 0x80);<br>+   reg8_data = ((reg8_data | (1<<1)) & ~(1<<5));<br>
+   pci_write_config8(dev, 0x80, reg8_data);<br>+<br>+   // LED[bit2]:GPIO4<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>+   reg8_data = pmio_read(0x5e);<br>+   reg8_data &= ~(1<<7); // 0: GPIO if not used by SATA<br>
+   pmio_write(0x5e, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0xa8);<br>+   reg8_data |= (1<<0);<br>+   pci_write_config8(dev, 0xa8, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0xa9);<br>
+   reg8_data &= ~(1<<0);<br>+   pci_write_config8(dev, 0xa9, reg8_data);<br>+<br>+   // LED[bit3]:GPIO6<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>+   reg8_data = pmio_read(0x60);<br>+   reg8_data |= (1<<7); // 1: GPIO if not used by SATA<br>
+   pmio_write(0x60, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0xa8);<br>+   reg8_data |= (1<<2);<br>+   pci_write_config8(dev, 0xa8, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0xa9);<br>
+   reg8_data &= ~(1<<2);<br>+   pci_write_config8(dev, 0xa9, reg8_data);<br>+   // LED[bit4]:GPIO7<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>+   reg8_data = pci_read_config8(dev, 0xa8);<br>+   reg8_data |= (1<<3);<br>
+   pci_write_config8(dev, 0xa8, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0xa9);<br>+   reg8_data &= ~(1<<3);<br>+   pci_write_config8(dev, 0xa9, reg8_data);<br>+<br>+   // LED[bit5]:GPIO8<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>
+   reg8_data = pci_read_config8(dev, 0xa8);<br>+   reg8_data |= (1<<4);<br>+   pci_write_config8(dev, 0xa8, reg8_data);<br>+<br>+   reg8_data = pci_read_config8(dev, 0xa9);<br>+   reg8_data &= ~(1<<4);<br>
+   pci_write_config8(dev, 0xa9, reg8_data);<br>+<br>+   // LED[bit6]:GPIO10<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>+   reg8_data = pci_read_config8(dev, 0xab);<br>+   reg8_data = ((reg8_data | (1<<0)) & ~(1<<1));<br>
+   pci_write_config8(dev, 0xab, reg8_data);<br>+<br>+   // LED[bit7]:GPIO66<br>+   // This is reference SB600 RRG 4.1.1 GPIO<br>+   reg8_data = pmio_read(0x68);<br>+   reg8_data &= ~(1<<5); // 0: GPIO<br>+   pmio_write(0x68, reg8_data);<br>
+<br>+   reg8_data = pci_read_config8(dev, 0x7e);<br>+   reg8_data = ((reg8_data | (1<<1)) & ~(1<<5));<br>+   pci_write_config8(dev, 0x7e, reg8_data);<br>+<br>+}<br>+<br>+#endif<br>+<br>+/* TechNexion's Post Code.<br>
+ */<br>+void technexion_post_code(uint8_t udata8)<br>+{<br>+   uint8_t u8_data;<br>+   device_t dev=0;<br>+<br>+   // SMBus Module and ACPI Block (Device 20, Function 0)<br>+#ifdef TECHNEXION_EARLY_SETUP<br>+   dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SB600_SM), 0);<br>
+#else<br>+   dev = dev_find_device(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_SB600_SM, 0);<br>+#endif<br>+<br>+   udata8 = ~(udata8);<br>+<br>+   // LED[bit0]:GPIO0<br>+   u8_data = pci_read_config8(dev, 0x80);<br>+   if (udata8 & 0x1) {<br>
+      u8_data |= (1<<0);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<0);<br>+   }<br>+   pci_write_config8(dev, 0x80, u8_data);<br>+<br>+   // LED[bit1]:GPIO1<br>+   u8_data = pci_read_config8(dev, 0x80);<br>
+   if (udata8 & 0x2) {<br>+      u8_data |= (1<<1);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<1);<br>+   }<br>+   pci_write_config8(dev, 0x80, u8_data);<br>+<br>+   // LED[bit2]:GPIO4<br>+   u8_data = pci_read_config8(dev, 0xa8);<br>
+   if (udata8 & 0x4) {<br>+      u8_data |= (1<<0);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<0);<br>+   }<br>+   pci_write_config8(dev, 0xa8, u8_data);<br>+<br>+   // LED[bit3]:GPIO6<br>+   u8_data = pci_read_config8(dev, 0xa8);<br>
+   if (udata8 & 0x8) {<br>+      u8_data |= (1<<2);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<2);<br>+   }<br>+   pci_write_config8(dev, 0xa8, u8_data);<br>+<br>+   // LED[bit4]:GPIO7<br>+   u8_data = pci_read_config8(dev, 0xa8);<br>
+   if (udata8 & 0x10) {<br>+      u8_data |= (1<<3);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<3);<br>+   }<br>+   pci_write_config8(dev, 0xa8, u8_data);<br>+<br>+   // LED[bit5]:GPIO8<br>+   u8_data = pci_read_config8(dev, 0xa8);<br>
+   if (udata8 & 0x20) {<br>+      u8_data |= (1<<4);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<4);<br>+   }<br>+   pci_write_config8(dev, 0xa8, u8_data);<br>+<br>+   // LED[bit6]:GPIO10<br>+   u8_data = pci_read_config8(dev, 0xab);<br>
+   if (udata8 & 0x40) {<br>+      u8_data |= (1<<0);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<0);<br>+   }<br>+   pci_write_config8(dev, 0xab, u8_data);<br>+<br>+   // LED[bit7]:GPIO66<br>+   u8_data = pci_read_config8(dev, 0x7e);<br>
+   if (udata8 & 0x80) {<br>+      u8_data |= (1<<1);<br>+   }<br>+   else {<br>+      u8_data &= ~(1<<1);<br>+   }<br>+   pci_write_config8(dev, 0x7e, u8_data);<br>+<br>+}<br>Index: src/mainboard/technexion/tim5690/tn_post_code.h<br>
===================================================================<br>--- src/mainboard/technexion/tim5690/tn_post_code.h    (revision 0)<br>+++ src/mainboard/technexion/tim5690/tn_post_code.h    (revision 0)<br>@@ -0,0 +1,15 @@<br>
+<br>+<br>+#define LED_MESSAGE_START       0xFF<br>+#define LED_MESSAGE_FINISH      0x99<br>+#define LED_MESSAGE_RAM         0x01<br>+<br>+<br>+#ifdef TECHNEXION_EARLY_SETUP<br>+<br>+// TechNexion's Post Code Initially.<br>
+void technexion_post_code_init(void);<br>+<br>+#endif<br>+<br>+void technexion_post_code(uint8_t udata8);<br>Index: src/mainboard/technexion/tim5690/mainboard.c<br>===================================================================<br>
--- src/mainboard/technexion/tim5690/mainboard.c    (revision 4927)<br>+++ src/mainboard/technexion/tim5690/mainboard.c    (working copy)<br>@@ -27,6 +27,7 @@<br> #include <device/pci_def.h><br> #include <../southbridge/amd/sb600/sb600.h><br>
 #include "chip.h"<br>+#include "tn_post_code.h"<br> <br> #define ADT7461_ADDRESS 0x4C<br> #define ARA_ADDRESS     0x0C /* Alert Response Address */<br>@@ -44,12 +45,18 @@<br> #define ADT7461_write_byte(address, val) \<br>
     do_smbus_write_byte(SMBUS_IO_BASE, ADT7461_ADDRESS, address, val)<br> <br>+/* previous<br>+ */<br>+void tim5690_enable(device_t dev);<br>+int add_mainboard_resources(struct lb_memory *mem);<br>+<br>+<br> uint64_t uma_memory_base, uma_memory_size;<br>
 <br> <br> /* set thermal config<br>  */<br>-static void set_thermal_config()<br>+static void set_thermal_config(void)<br> {<br>     u8 byte;<br>     u16 word;<br>@@ -176,6 +183,7 @@<br>     lb_add_memory_range(mem, LB_MEM_RESERVED,<br>
         uma_memory_base, uma_memory_size);<br> #endif<br>+    technexion_post_code(LED_MESSAGE_FINISH);<br> }<br> <br> struct chip_operations mainboard_ops = {<br><br>