Add p8dtu platform

This contains the p8dtu platform from SuperMicro.
It has previously lived out of tree.

Like other POWER8 platforms, several Hostboot patches are required.
Since Hostboot does not have the ability to have per-platform code,
this comes in as patches.

Signed-off-by: Jim Yuan <jim.yuan@supermicro.com>
[stewart: cleanup and longer commit message]
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
diff --git a/openpower/patches/p8dtu-patches/hostboot-p8/0008-Fill-board-mfg-time-and-date-in-FRU3.-It-is-read-fro.patch b/openpower/patches/p8dtu-patches/hostboot-p8/0008-Fill-board-mfg-time-and-date-in-FRU3.-It-is-read-fro.patch
new file mode 100644
index 0000000..41c24b3
--- /dev/null
+++ b/openpower/patches/p8dtu-patches/hostboot-p8/0008-Fill-board-mfg-time-and-date-in-FRU3.-It-is-read-fro.patch
@@ -0,0 +1,99 @@
+From ed60d5736559c4e100e5db20de942a584b58b6f0 Mon Sep 17 00:00:00 2001
+From: Jim Yuan <jim.yuan@supermicro.com>
+Date: Wed, 25 May 2016 15:24:40 -0700
+Subject: [PATCH 08/14] Fill board mfg time and date in FRU3. It is read from
+ PVPD:VNDR:IN.
+
+Signed-off-by: Jim Yuan <jim.yuan@supermicro.com>
+---
+ src/usr/ipmiext/ipmifruinv.C | 65 +++++++++++++++++++++++++++++++++-----------
+ 1 file changed, 49 insertions(+), 16 deletions(-)
+
+diff --git a/src/usr/ipmiext/ipmifruinv.C b/src/usr/ipmiext/ipmifruinv.C
+index 23aaf9b97..11fbd7677 100644
+--- a/src/usr/ipmiext/ipmifruinv.C
++++ b/src/usr/ipmiext/ipmifruinv.C
+@@ -1279,31 +1279,64 @@ errlHndl_t backplaneIpmiFruInv::buildChassisInfoArea(
+     return l_errl;
+ }
+ 
++// Quick hexdigit to binary converter.
++// Hopefull someday to replaced by strtoul
++uint8_t aschex2bin(char c)
++{
++    if(c >= 'a' && c <= 'f')
++    {
++        c = c + 10 - 'a';
++    }
++    else if (c >= 'A' && c <= 'F')
++    {
++        c = c + 10 - 'A';
++    }
++    else if (c >= '0' && c <= '9')
++    {
++       c -= '0';
++    }
++    else return 0;// else it's not a hex digit, return 0
++
++    return c;
++}
++
++
+ errlHndl_t backplaneIpmiFruInv::buildBoardInfoArea(
+                                               std::vector<uint8_t> &io_data)
+ {
+     errlHndl_t l_errl = NULL;
++	std::vector<uint8_t> oem_data; //jim052316
++	uint8_t i, data1, data2, data3;//jim052316
+ 
+     do {
+         //Set formatting data that goes at the beginning of the record
+         preFormatProcessing(io_data, true);
+ 
+-        // Set Mfg Build date
+-        // Grab VPD data into seperate data vector
+-        std::vector<uint8_t> mfgDateData;
+-        l_errl = addVpdData(mfgDateData, PVPD::OPFR, PVPD::MB, false, false);
+-        if (l_errl)
+-        {
+-            // The MB keyword was optional on older cards so just ignore
+-            //  any errors
+-            delete l_errl;
+-            l_errl = NULL;
+-        }
+-        else
+-        {
+-            // Pass that to the function that sets the Build date
+-            setMfgData(io_data, mfgDateData);
+-        }
++        l_errl = addVpdData(oem_data, PVPD::VNDR, PVPD::IN, true);
++        if (l_errl) { break; }
++
++		for (i=0; i < oem_data.size(); i++)
++		TRACFCOMP(g_trac_ipmi,"Jimdebug board VNDR:IN data is 0x%x", oem_data[i]);
++
++		data1 = (aschex2bin(oem_data[5]) << 4) | aschex2bin(oem_data[6]);//jim052416
++		data2 = (aschex2bin(oem_data[3]) << 4) | aschex2bin(oem_data[4]);
++		data3 = (aschex2bin(oem_data[1]) << 4) | aschex2bin(oem_data[2]);  
++
++		
++		TRACFCOMP(g_trac_ipmi,"Jimdebug push data1 is 0x%x", data1);
++		TRACFCOMP(g_trac_ipmi,"Jimdebug push data2 is 0x%x", data2);
++		TRACFCOMP(g_trac_ipmi,"Jimdebug push data3 is 0x%x", data3);
++
++		
++        io_data.push_back(data1); 
++        io_data.push_back(data2);
++        io_data.push_back(data3);
++
++
++        //Set MFG Date/Time - Blank
++        //io_data.push_back(0x5E); //jim52016
++        //io_data.push_back(0x9A);
++        //io_data.push_back(0xA3);
+ 
+         //Set Vendor Name - ascii formatted data
+         l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::VN, true);
+-- 
+2.16.2.windows.1
+