summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrace <[email protected]>2020-06-08 22:43:08 -0400
committerAlex Doyle <[email protected]>2020-06-09 13:26:44 -0700
commitcdfa419fc88b5e17dd42400cabbbbcd404072a37 (patch)
tree6a164396c2745ddc3d202f3663fe72d40567de29
parent56811a9c66c82461ffb6f314026dce6027c56b23 (diff)
New platform: delta_agcv208sv1
New Project is created for Agema. Signed-off-by: grace <[email protected]> Signed-off-by: Alex Doyle <[email protected]>
-rw-r--r--build-config/scripts/onie-build-targets.json1
-rwxr-xr-xmachine/delta/delta_agcv208sv1/INSTALL86
-rwxr-xr-xmachine/delta/delta_agcv208sv1/busybox/conf/config10
-rwxr-xr-xmachine/delta/delta_agcv208sv1/busybox/patches/series0
-rwxr-xr-xmachine/delta/delta_agcv208sv1/demo/platform.conf1
-rwxr-xr-xmachine/delta/delta_agcv208sv1/firmware/bios/update_bios.sh18
-rwxr-xr-xmachine/delta/delta_agcv208sv1/firmware/cpld/update_cpld.sh17
-rwxr-xr-xmachine/delta/delta_agcv208sv1/firmware/fw-install.sh38
-rwxr-xr-xmachine/delta/delta_agcv208sv1/firmware/fw-version.make10
-rwxr-xr-xmachine/delta/delta_agcv208sv1/installer.conf39
-rwxr-xr-xmachine/delta/delta_agcv208sv1/kernel/config17
-rw-r--r--machine/delta/delta_agcv208sv1/kernel/driver-patch.patch219
-rwxr-xr-xmachine/delta/delta_agcv208sv1/kernel/series2
-rw-r--r--machine/delta/delta_agcv208sv1/kernel/xhci.patch26
-rwxr-xr-xmachine/delta/delta_agcv208sv1/machine.make47
15 files changed, 531 insertions, 0 deletions
diff --git a/build-config/scripts/onie-build-targets.json b/build-config/scripts/onie-build-targets.json
index c6fb9964..eadfc71b 100644
--- a/build-config/scripts/onie-build-targets.json
+++ b/build-config/scripts/onie-build-targets.json
@@ -146,6 +146,7 @@
{ "Vendor": "delta", "Platform": "delta_ag9064", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
{ "Vendor": "delta", "Platform": "delta_agc7648a", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
{ "Vendor": "delta", "Platform": "delta_agc7648s", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
+ { "Vendor": "delta", "Platform": "delta_agcv208sv1", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
{ "Vendor": "delta", "Platform": "delta_ak7448", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
{ "Vendor": "delta", "Platform": "delta_common_bwde", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
{ "Vendor": "delta", "Platform": "delta_common_dnv", "BuildEnv": "Debian9", "Release": "2020.05br", "Architecture": "amd64", "Notes": "No notes." },
diff --git a/machine/delta/delta_agcv208sv1/INSTALL b/machine/delta/delta_agcv208sv1/INSTALL
new file mode 100755
index 00000000..c331c26c
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/INSTALL
@@ -0,0 +1,86 @@
+================================================================================
+Installing ONIE on DELTA agcv208sv1 Switch (CPU Module : Intel Deverton CPU Module)
+================================================================================
+
+Cross-Compiling ONIE
+====================
+
+To compile ONIE first change directories to ``build-config`` and then
+type ``"make MACHINEROOT=../machine/delta MACHINE=delta_agcv208sv1 all"``. For example::
+
+ $ cd build-config
+ $ make -j4 MACHINEROOT=../machine/delta MACHINE=delta_agcv208sv1 all
+
+When complete, the ONIE binaries are located in
+``build/images``::
+
+-rw-r--r-- 1 lsharma ncore 3903568 Dec 6 19:45 delta_agcv208sv1-r0.vmlinuz
+-rw-r--r-- 1 lsharma ncore 5504404 May 28 15:31 9480204 Dec 6 19:41 delta_agcv208sv1-r0.initrd
+-rw-r--r-- 1 lsharma ncore 13539191 Dec 6 19:45 onie-updater-x86_64-delta_agcv208sv1-r0
+-rw-r--r-- 1 lsharma ncore 30670848 Dec 6 19:46 onie-recovery-x86_64-delta_agcv208sv1-r0.iso
+
+Cross-Compiling the DEMO OS
+===========================
+
+To compile the demo OS first change directories to ``build-config``
+and then type ``"make MACHINEROOT=../machine/delta MACHINE=delta_agcv208sv1 demo"``. For example::
+
+ $ cd build-config
+ $ make -j4 MACHINEROOT=../machine/delta MACHINE=delta_agcv208sv1 demo
+
+When complete, the demo OS installer is located in ``build/images``::
+
+ -rw-r--r-- 13415688 Dec 6 19:50 demo-installer-x86_64-delta_agcv208sv1-r0.bin
+
+Installing ONIE on a Blank Machine
+==================================
+
+To install ONIE on a new machine use one of the onie-recovery images.
+
+Overview
+--------
+
+An "ONIE recovery image" is used for:
+
+1. installing ONIE on a blank machine, i.e. what manufacturing would
+ use.
+
+2. recovering a destroyed ONIE system.
+
+The recovery image is:
+
+. <machine>.iso -- a hybrid ISO image.
+
+ISO Recovery Image
+------------------
+
+You can use the .iso image to create a bootable USB memory stick.
+Use ``dd`` to copy the .iso image to a USB stick and boot from that::
+
+ dd if=<machine>.iso of=/dev/sdX bs=10M
+
+Find the correct ``/dev/sdX`` by inspecing the ``dmesg``
+output after inserting the USB stick into your work station.
+
+To enable booting from USB in the BIOS:
+
+1. Insert the USB stick (needs to be in before configuring BIOS)
+
+2. Power on the S6010 and enter the BIOS configuration
+
+3. Set the USB device to "Hard Disk"::
+
+ Advanced-->USB Configuration-->Mass Storage Devices:
+ <Name of your device> [Hard Disk]
+
+ <Name of your device> might be something like "SanDisk 1.26".
+
+4. Set the hard drive boot order::
+
+ Boot-->Hard Drive BBS Priorities-->Boot Option #1
+
+ In "Boot Option #1" select the device that corresponds to your
+ device.
+
+5. Save and Exit the BIOS configuration
+
diff --git a/machine/delta/delta_agcv208sv1/busybox/conf/config b/machine/delta/delta_agcv208sv1/busybox/conf/config
new file mode 100755
index 00000000..53bc6660
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/busybox/conf/config
@@ -0,0 +1,10 @@
+CONFIG_SYS_EEPROM=y
+CONFIG_SYS_EEPROM_DEVICE_I2C=y
+CONFIG_SYS_EEPROM_MAX_SIZE=16384
+CONFIG_SYS_EEPROM_OFFSET=2048
+CONFIG_SYS_EEPROM_SIZE=1024
+CONFIG_SYS_EEPROM_I2C_DEVICE="/dev/i2c-1"
+CONFIG_SYS_EEPROM_I2C_ADDR=0x56
+CONFIG_SYS_EEPROM_I2C_MEM_ADDR_BITS=16
+CONFIG_SYS_EEPROM_I2C_WRITE_3B_DELAY=4000
+CONFIG_SYS_EEPROM_I2C_WRITE_2B_DELAY=4000
diff --git a/machine/delta/delta_agcv208sv1/busybox/patches/series b/machine/delta/delta_agcv208sv1/busybox/patches/series
new file mode 100755
index 00000000..e69de29b
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/busybox/patches/series
diff --git a/machine/delta/delta_agcv208sv1/demo/platform.conf b/machine/delta/delta_agcv208sv1/demo/platform.conf
new file mode 100755
index 00000000..a70c8ee9
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/demo/platform.conf
@@ -0,0 +1 @@
+# delta_agcv208sv1 specific info
diff --git a/machine/delta/delta_agcv208sv1/firmware/bios/update_bios.sh b/machine/delta/delta_agcv208sv1/firmware/bios/update_bios.sh
new file mode 100755
index 00000000..f324ca94
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/firmware/bios/update_bios.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+#
+# Copyright (C) 2016 Curt Brune <[email protected]>
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+
+# This is a sample place holder script for updating a machine BIOS. A
+# real BIOS update script would use a utility like flashrom.
+
+for i in $(seq 1 10) ; do
+ echo -n "."
+ sleep 0.2
+done
+
+# No errors detected
+exit 0
diff --git a/machine/delta/delta_agcv208sv1/firmware/cpld/update_cpld.sh b/machine/delta/delta_agcv208sv1/firmware/cpld/update_cpld.sh
new file mode 100755
index 00000000..7395ea81
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/firmware/cpld/update_cpld.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+#
+# Copyright (C) 2016 Curt Brune <[email protected]>
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+
+# This is a sample place holder script for updating a machine CPLD.
+
+for i in $(seq 1 10) ; do
+ echo -n "."
+ sleep 0.2
+done
+
+# No errors detected
+exit 0
diff --git a/machine/delta/delta_agcv208sv1/firmware/fw-install.sh b/machine/delta/delta_agcv208sv1/firmware/fw-install.sh
new file mode 100755
index 00000000..6a60c198
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/firmware/fw-install.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+#
+# Copyright (C) 2016 Curt Brune <[email protected]>
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+
+# Demonstration of firmware update install script
+
+# This script is the entry point of the of the ONIE firmware update
+# mechanism.
+
+# A machine uses this script to update "firmware", such as:
+# - update BIOS
+# - update CPLDs
+
+# Simulate updating the BIOS
+echo -n "Updating BIOS "
+bios/update_bios.sh || {
+ echo "ERROR: Problems updating the BIOS"
+ exit 1
+}
+echo " done."
+
+# Simulate updating CPLDs
+for cpld in $(seq 1 3) ; do
+ echo -n "Updating CPLD $cpld "
+ cpld/update_cpld.sh || {
+ echo "ERROR: Problems updating CPLD $cpld"
+ exit 1
+ }
+ echo " done."
+done
+
+# No errors detected
+echo "Update complete. No errors detected."
+exit 0
diff --git a/machine/delta/delta_agcv208sv1/firmware/fw-version.make b/machine/delta/delta_agcv208sv1/firmware/fw-version.make
new file mode 100755
index 00000000..5ea46b41
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/firmware/fw-version.make
@@ -0,0 +1,10 @@
+#
+# Copyright (C) 2016 Curt Brune <[email protected]>
+#
+# SPDX-License-Identifier: GPL-2.0
+#
+
+# Demonstration of firmware version
+
+# The firmware version is a free form string
+FW_VERSION = DEMO-FW-1.2.3.4
diff --git a/machine/delta/delta_agcv208sv1/installer.conf b/machine/delta/delta_agcv208sv1/installer.conf
new file mode 100755
index 00000000..34508ad6
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/installer.conf
@@ -0,0 +1,39 @@
+# Delta agcv208sv1
+# CPU Module: Intel deverton
+
+description="Delta agcv208sv1 with Intel deverton CPU Module"
+
+# Default ONIE block device
+install_device_platform()
+{
+ # search SATA SSD
+ for _device in /sys/block/*/device; do
+
+ # work for kernel 4.1.17
+ if readlink -f $_device |egrep -q "pci0000:00\/0000:00:14.0"; then
+ _disk=`echo $_device | cut -f4 -d/`
+ echo /dev/$_disk
+ return 0
+ fi
+ done
+
+ # search PCIe SSD
+ for _nvme_device in /sys/block/*/device; do
+
+ # work for kernel 4.1.17
+ if readlink -f $_nvme_device |egrep -q "pci0000:00\/0000:00:09.0\/0000:02:00.0"; then
+ _nvme_disk=`echo $_nvme_device | cut -f4 -d/`
+ echo /dev/$_nvme_disk
+ return 0
+ fi
+ done
+
+ # nothing found, just return /dev/sda
+ echo /dev/sda
+ return 1
+}
+
+# Local Variables:
+# mode: shell-script
+# eval: (sh-set-shell "/bin/sh" t nil)
+# End:
diff --git a/machine/delta/delta_agcv208sv1/kernel/config b/machine/delta/delta_agcv208sv1/kernel/config
new file mode 100755
index 00000000..e8a44733
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/kernel/config
@@ -0,0 +1,17 @@
+
+CONFIG_I2C_ALGOBIT=n
+CONFIG_I2C_ALGOPCF=n
+CONFIG_I2C_ALGOPCA=n
+CONFIG_I2C_HELPER_AUTO=n
+CONFIG_I2C_SMBUS=y
+CONFIG_I2C_I801=y
+CONFIG_I2C_ISMT=y
+# CONFIG_BLK_DEV_NVME_SCSI is not set
+CONFIG_USB_SERIAL_CONSOLE=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL=y
+CONFIG_USB_SERIAL_CP210X=y
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+CONFIG_HID_FF=y
+CONFIG_HIDRAW=y
diff --git a/machine/delta/delta_agcv208sv1/kernel/driver-patch.patch b/machine/delta/delta_agcv208sv1/kernel/driver-patch.patch
new file mode 100644
index 00000000..1ef96456
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/kernel/driver-patch.patch
@@ -0,0 +1,219 @@
+
+
+diff --git a/drivers/i2c/busses/i2c-ismt.c b/drivers/i2c/busses/i2c-ismt.c
+index 7aea288..78ed75b 100644
+--- a/drivers/i2c/busses/i2c-ismt.c
++++ b/drivers/i2c/busses/i2c-ismt.c
+@@ -16,7 +16,7 @@
+ * General Public License for more details.
+ * The full GNU General Public License is included in this distribution
+ * in the file called LICENSE.GPL.
+- *
++ *
+ * BSD LICENSE
+ *
+ * Redistribution and use in source and binary forms, with or without
+@@ -66,6 +66,7 @@
+ #include <linux/i2c.h>
+ #include <linux/acpi.h>
+ #include <linux/interrupt.h>
++#include <linux/delay.h>
+
+ #include <linux/io-64-nonatomic-lo-hi.h>
+
+@@ -75,6 +76,7 @@
+ /* PCI DIDs for the Intel SMBus Message Transport (SMT) Devices */
+ #define PCI_DEVICE_ID_INTEL_S1200_SMT0 0x0c59
+ #define PCI_DEVICE_ID_INTEL_S1200_SMT1 0x0c5a
++#define PCI_DEVICE_ID_INTEL_CDF_SMT 0x18ac
+ #define PCI_DEVICE_ID_INTEL_DNV_SMT 0x19ac
+ #define PCI_DEVICE_ID_INTEL_AVOTON_SMT 0x1f15
+
+@@ -172,7 +174,7 @@ struct ismt_priv {
+ dma_addr_t io_rng_dma; /* descriptor HW base addr */
+ u8 head; /* ring buffer head pointer */
+ struct completion cmp; /* interrupt completion */
+- u8 dma_buffer[I2C_SMBUS_BLOCK_MAX + 1]; /* temp R/W data buffer */
++ u8 buffer[I2C_SMBUS_BLOCK_MAX + 16]; /* temp R/W data buffer */
+ };
+
+ /**
+@@ -181,6 +183,7 @@ struct ismt_priv {
+ static const struct pci_device_id ismt_ids[] = {
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT0) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_S1200_SMT1) },
++ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CDF_SMT) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DNV_SMT) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMT) },
+ { 0, }
+@@ -189,9 +192,15 @@ static const struct pci_device_id ismt_ids[] = {
+ MODULE_DEVICE_TABLE(pci, ismt_ids);
+
+ /* Bus speed control bits for slow debuggers - refer to the docs for usage */
+-static unsigned int bus_speed;
++//static unsigned int bus_speed;
++static unsigned int bus_speed = 100;
++static unsigned int delay = 1000;
+ module_param(bus_speed, uint, S_IRUGO);
+-MODULE_PARM_DESC(bus_speed, "Bus Speed in kHz (0 = BIOS default)");
++//MODULE_PARM_DESC(bus_speed, "Bus Speed in kHz (0 = BIOS default)");
++
++MODULE_PARM_DESC(bus_speed, "Bus Speed in kHz (1000 by default)");
++module_param(delay, uint, S_IRUGO);
++MODULE_PARM_DESC(delay, "Delay in microsecs before access (1000 by default)");
+
+ /**
+ * __ismt_desc_dump() - dump the contents of a specific descriptor
+@@ -320,10 +329,12 @@ static int ismt_process_desc(const struct ismt_desc *desc,
+ struct ismt_priv *priv, int size,
+ char read_write)
+ {
+- u8 *dma_buffer = priv->dma_buffer;
++ u8 *dma_buffer = PTR_ALIGN(&priv->buffer[0], 16);
+
+ dev_dbg(&priv->pci_dev->dev, "Processing completed descriptor\n");
+ __ismt_desc_dump(&priv->pci_dev->dev, desc);
++ ismt_gen_reg_dump(priv);
++ ismt_mstr_reg_dump(priv);
+
+ if (desc->status & ISMT_DESC_SCS) {
+ if (read_write == I2C_SMBUS_WRITE &&
+@@ -393,11 +404,15 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ struct ismt_desc *desc;
+ struct ismt_priv *priv = i2c_get_adapdata(adap);
+ struct device *dev = &priv->pci_dev->dev;
++ u8 *dma_buffer = PTR_ALIGN(&priv->buffer[0], 16);
++
++ if (delay > 0)
++ udelay(delay);
+
+ desc = &priv->hw[priv->head];
+
+ /* Initialize the DMA buffer */
+- memset(priv->dma_buffer, 0, sizeof(priv->dma_buffer));
++ memset(priv->buffer, 0, sizeof(priv->buffer));
+
+ /* Initialize the descriptor */
+ memset(desc, 0, sizeof(struct ismt_desc));
+@@ -415,7 +430,7 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+
+ switch (size) {
+ case I2C_SMBUS_QUICK:
+- dev_dbg(dev, "I2C_SMBUS_QUICK\n");
++ //dev_dbg(dev, "I2C_SMBUS_QUICK\n");
+ break;
+
+ case I2C_SMBUS_BYTE:
+@@ -446,8 +461,8 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ desc->wr_len_cmd = 2;
+ dma_size = 2;
+ dma_direction = DMA_TO_DEVICE;
+- priv->dma_buffer[0] = command;
+- priv->dma_buffer[1] = data->byte;
++ dma_buffer[0] = command;
++ dma_buffer[1] = data->byte;
+ } else {
+ /* Read Byte */
+ dev_dbg(dev, "I2C_SMBUS_BYTE_DATA: READ\n");
+@@ -466,9 +481,9 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ desc->wr_len_cmd = 3;
+ dma_size = 3;
+ dma_direction = DMA_TO_DEVICE;
+- priv->dma_buffer[0] = command;
+- priv->dma_buffer[1] = data->word & 0xff;
+- priv->dma_buffer[2] = data->word >> 8;
++ dma_buffer[0] = command;
++ dma_buffer[1] = data->word & 0xff;
++ dma_buffer[2] = data->word >> 8;
+ } else {
+ /* Read Word */
+ dev_dbg(dev, "I2C_SMBUS_WORD_DATA: READ\n");
+@@ -486,9 +501,9 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ desc->rd_len = 2;
+ dma_size = 3;
+ dma_direction = DMA_BIDIRECTIONAL;
+- priv->dma_buffer[0] = command;
+- priv->dma_buffer[1] = data->word & 0xff;
+- priv->dma_buffer[2] = data->word >> 8;
++ dma_buffer[0] = command;
++ dma_buffer[1] = data->word & 0xff;
++ dma_buffer[2] = data->word >> 8;
+ break;
+
+ case I2C_SMBUS_BLOCK_DATA:
+@@ -499,8 +514,8 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ dma_direction = DMA_TO_DEVICE;
+ desc->wr_len_cmd = dma_size;
+ desc->control |= ISMT_DESC_BLK;
+- priv->dma_buffer[0] = command;
+- memcpy(&priv->dma_buffer[1], &data->block[1], dma_size - 1);
++ dma_buffer[0] = command;
++ memcpy(&dma_buffer[1], &data->block[1], dma_size - 1);
+ } else {
+ /* Block Read */
+ dev_dbg(dev, "I2C_SMBUS_BLOCK_DATA: READ\n");
+@@ -527,8 +542,8 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ dma_direction = DMA_TO_DEVICE;
+ desc->wr_len_cmd = dma_size;
+ desc->control |= ISMT_DESC_I2C;
+- priv->dma_buffer[0] = command;
+- memcpy(&priv->dma_buffer[1], &data->block[1], dma_size - 1);
++ dma_buffer[0] = command;
++ memcpy(&dma_buffer[1], &data->block[1], dma_size - 1);
+ } else {
+ /* i2c Block Read */
+ dev_dbg(dev, "I2C_SMBUS_I2C_BLOCK_DATA: READ\n");
+@@ -557,23 +572,22 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+ if (dma_size != 0) {
+ dev_dbg(dev, " dev=%p\n", dev);
+ dev_dbg(dev, " data=%p\n", data);
+- dev_dbg(dev, " dma_buffer=%p\n", priv->dma_buffer);
++ dev_dbg(dev, " dma_buffer=%p\n", dma_buffer);
+ dev_dbg(dev, " dma_size=%d\n", dma_size);
+ dev_dbg(dev, " dma_direction=%d\n", dma_direction);
+
+ dma_addr = dma_map_single(dev,
+- priv->dma_buffer,
++ dma_buffer,
+ dma_size,
+ dma_direction);
+
+ if (dma_mapping_error(dev, dma_addr)) {
+ dev_err(dev, "Error in mapping dma buffer %p\n",
+- priv->dma_buffer);
++ dma_buffer);
+ return -EIO;
+ }
+
+- dev_dbg(dev, " dma_addr = 0x%016llX\n",
+- (unsigned long long)dma_addr);
++ dev_dbg(dev, " dma_addr = %pad\n", &dma_addr);
+
+ desc->dptr_low = lower_32_bits(dma_addr);
+ desc->dptr_high = upper_32_bits(dma_addr);
+@@ -589,7 +603,7 @@ static int ismt_access(struct i2c_adapter *adap, u16 addr,
+
+ /* unmap the data buffer */
+ if (dma_size != 0)
+- dma_unmap_single(&adap->dev, dma_addr, dma_size, dma_direction);
++ dma_unmap_single(dev, dma_addr, dma_size, dma_direction);
+
+ if (unlikely(!time_left)) {
+ dev_err(dev, "completion wait timed out\n");
+@@ -759,7 +773,8 @@ static void ismt_hw_init(struct ismt_priv *priv)
+ bus_speed = 1000;
+ break;
+ }
+- dev_dbg(dev, "SMBus clock is running at %d kHz\n", bus_speed);
++ //dev_dbg(dev, "SMBus clock is running at %d kHz\n", bus_speed);
++ dev_info(dev, "SMBus clock is running at %d kHz with delay %d us\n", bus_speed, delay);
+ }
+
+ /**
+@@ -954,4 +969,4 @@ module_pci_driver(ismt_driver);
+
+ MODULE_LICENSE("Dual BSD/GPL");
+ MODULE_AUTHOR("Bill E. Brown <[email protected]>");
+-MODULE_DESCRIPTION("Intel SMBus Message Transport (iSMT) driver");
++MODULE_DESCRIPTION("Intel SMBus Message Transport (iSMT) driver");
+\ No newline at end of file
diff --git a/machine/delta/delta_agcv208sv1/kernel/series b/machine/delta/delta_agcv208sv1/kernel/series
new file mode 100755
index 00000000..ec1633c6
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/kernel/series
@@ -0,0 +1,2 @@
+driver-patch.patch
+xhci.patch
diff --git a/machine/delta/delta_agcv208sv1/kernel/xhci.patch b/machine/delta/delta_agcv208sv1/kernel/xhci.patch
new file mode 100644
index 00000000..0e4c72c0
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/kernel/xhci.patch
@@ -0,0 +1,26 @@
+diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
+index 7c54a19..74ca8ae 100644
+--- a/drivers/usb/core/config.c
++++ b/drivers/usb/core/config.c
+@@ -324,6 +324,21 @@ static int usb_parse_endpoint(struct device *ddev, int cfgno, int inum,
+ endpoint->desc.bInterval = n;
+ }
+
++#if 1 /* defined(_M_DEI_PORTING_) */
++ if ( (le16_to_cpu(0x04d8) == le16_to_cpu(to_usb_device(ddev)->descriptor.idVendor)) &&
++ (le16_to_cpu(0x00de) == le16_to_cpu(to_usb_device(ddev)->descriptor.idProduct)) )
++ {
++ unsigned int eax = 0, ebx = 0, ecx = 0, edx = 0;
++ cpuid(1, &eax, &ebx, &ecx, &edx);
++
++ if ( 0x506F0 == (eax & 0x0FFFF0)) /* Intel Denverton CPU ? */
++ {
++ endpoint->desc.bInterval = 3;
++ printk(KERN_INFO "Intel Denverton CPU board: MCP2210: EP bInterval[1] changed to [%d].\n", endpoint->desc.bInterval);
++ }
++ }
++#endif
++
+ /* Some buggy low-speed devices have Bulk endpoints, which is
+ * explicitly forbidden by the USB spec. In an attempt to make
+ * them usable, we will try treating them as Interrupt endpoints.
diff --git a/machine/delta/delta_agcv208sv1/machine.make b/machine/delta/delta_agcv208sv1/machine.make
new file mode 100755
index 00000000..33cf7071
--- /dev/null
+++ b/machine/delta/delta_agcv208sv1/machine.make
@@ -0,0 +1,47 @@
+# Delta agcv208sv1
+
+ONIE_ARCH ?= x86_64
+SWITCH_ASIC_VENDOR = bcm
+
+VENDOR_REV ?= 0
+
+
+# Translate hardware revision to ONIE hardware revision
+ifeq ($(VENDOR_REV),0)
+ MACHINE_REV = 0
+else
+ $(warning Unknown VENDOR_REV '$(VENDOR_REV)' for MACHINE '$(MACHINE)')
+ $(error Unknown VENDOR_REV)
+endif
+
+# The VENDOR_VERSION string is appended to the overall ONIE version
+# string. HW vendors can use this to appended their own versioning
+# information to the base ONIE version string.
+VENDOR_VERSION = delta_agcv208sv1_v1.0
+
+# Vendor ID -- IANA Private Enterprise Number:
+# http://www.iana.org/assignments/enterprise-numbers
+# Open Compute Project IANA number
+VENDOR_ID = 2254
+
+# Enable the i2ctools and the onie-syseeprom command for this platform
+I2CTOOLS_ENABLE = yes
+
+
+# Set Linux kernel version
+LINUX_VERSION = 4.9
+LINUX_MINOR_VERSION = 95
+
+# Specify uClibc version
+#UCLIBC_VERSION = 0.9.32.1
+
+UEFI_ENABLE = yes
+
+FIRMWARE_UPDATE_ENABLE = yes
+
+IPMITOOL_ENABLE = yes
+#-------------------------------------------------------------------------------
+#
+# Local Variables:
+# mode: makefile-gmake
+# End: