summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2015-12-20arm: socfpga: Allow DWC2 UDC probing from OFMarek Vasut
The USB gadget framework does not support DM yet, so add this bit to let DWC2 UDC probe from OF on platforms which support it. Signed-off-by: Marek Vasut <[email protected]> Cc: Simon Glass <[email protected]> Cc: Chin Liang See <[email protected]> Cc: Dinh Nguyen <[email protected]> Cc: Lukasz Majewski <[email protected]> Cc: Lukasz Majewski <[email protected]>
2015-12-13lib: split out strtoxxxx functions out of vsprintf.cSjoerd Simons
To allow the various string to number conversion functions to be used when using tiny-printf,split them out into their own file which gets build regardless of what printf implementation is used. Signed-off-by: Sjoerd Simons <[email protected]>
2015-12-13lib: Split panic functions out of vsprintf.cSjoerd Simons
To allow panic and panic_str to still be used when using tiny-printf, split them out into their own file which gets build regardless of what printf implementation is used. Signed-off-by: Sjoerd Simons <[email protected]>
2015-12-13lib/tiny-printf.c: Implement vprintfSjoerd Simons
Implement both printf and vprintf for a bit more flexibility, e.g. allows the panic() function to work with tiny-printf. Signed-off-by: Sjoerd Simons <[email protected]>
2015-12-01dm: tegra: pci: Convert tegra boards to driver model for PCISimon Glass
Adjust the Tegra PCI driver to support driver model and move all boards over at the same time. This can make use of some generic driver model code, such as the range-decoding logic. Signed-off-by: Simon Glass <[email protected]> Tested-by: Stephen Warren <[email protected]>
2015-12-01dm: timer: Support 64-bit counterBin Meng
There are timers with a 64-bit counter value but current timer uclass driver assumes a 32-bit one. Modify timer_get_count() to ask timer driver to always return a 64-bit counter value, and provide an inline helper function timer_conv_64() to handle the 32-bit/64-bit conversion automatically. Signed-off-by: Bin Meng <[email protected]> Acked-by: Simon Glass <[email protected]> Signed-off-by: Simon Glass <[email protected]>
2015-11-23lib/tiny-printf.c: Support numbers bigger than 0xffff and misc updatesStefan Roese
With this patch now, the tiny printf() function also supports numbers bigger than 0xffff. Additionally the code is simplified a bit and some static variables are moved to function parameters. Also the upper case hex variable output support is removed, as its not really needed in this simple printf version. And removing it reduces the complexity and the code size again a bit. Here the new numbers, again on the db-mv784mp-gp (Armada XP): Without this patch: 56542 18536 1956 77034 12cea ./spl/u-boot-spl With this patch: 56446 18536 1936 76918 12c76 ./spl/u-boot-spl Signed-off-by: Stefan Roese <[email protected]> Cc: Simon Glass <[email protected]> Cc: Hans de Goede <[email protected]> Cc: Tom Rini <[email protected]> Cc: Albert Aribaud <[email protected]>
2015-11-23lib/tiny-printf.c: Add tiny printf function for space limited environmentsStefan Roese
This patch adds a small printf() version that supports all basic formats. Its intented to be used in U-Boot SPL versions on platforms with very limited internal RAM sizes. To enable it, just define CONFIG_USE_TINY_PRINTF in your defconfig. This will result in the SPL using this tiny function and the main U-Boot still using the full-blown printf() function. This code was copied from: http://www.sparetimelabs.com/printfrevisited With mostly only coding style related changes so that its checkpatch clean. The size reduction is about 2.5KiB. Here a comparison for the db-mv784mp-gp (Marvell AXP) SPL: Without this patch: 58963 18536 1928 79427 13643 ./spl/u-boot-spl With this patch: 56542 18536 1956 77034 12cea ./spl/u-boot-spl Note: To make it possible to compile tiny-printf.c instead of vsprintf.c when CONFIG_USE_TINY_PRINTF is defined, the functions printf() and vprintf() are moved from common/console.c into vsprintf.c in this patch. Signed-off-by: Stefan Roese <[email protected]> Cc: Simon Glass <[email protected]> Cc: Hans de Goede <[email protected]> Cc: Tom Rini <[email protected]> Cc: Albert Aribaud <[email protected]>
2015-11-19Add a circular memory buffer implementationSimon Glass
This will be used to support console recording. It provides for a circular buffer which can be written at the head and read from the tail. It supports avoiding data copying by providing raw access to the data. Signed-off-by: Simon Glass <[email protected]>
2015-11-19Drop config.h header from display_options.cSimon Glass
Since common.h will always include this automatically, it is not needed. Signed-off-by: Simon Glass <[email protected]>
2015-11-19Move console definitions into a new console.h fileSimon Glass
The console includes a global variable and several functions that are only used by a small subset of U-Boot files. Before adding more functions, move the definitions into their own header file. Signed-off-by: Simon Glass <[email protected]>
2015-11-19dm: tegra: Convert keyboard driver to driver modelSimon Glass
Adjust the tegra keyboard driver to support driver model, using the new uclass. Make this the default for all Tegra boards so that those that use a keyboard will build correctly with this driver. Signed-off-by: Simon Glass <[email protected]>
2015-11-18Fix sandbox build on Ubuntu 10.04Stephen Warren
gcc 4.4.3 (which is the default native compiler on x86-64 Ubuntu 10.04) doesn't seem to like initializers for sub-fields of anonymous unions. Solve this by replacing the initialization with an assignment. This fixes: lib/lz4_wrapper.c: In function ‘ulz4fn’: lib/lz4_wrapper.c:97: error: unknown field ‘raw’ specified in initializer Signed-off-by: Stephen Warren <[email protected]> Reviewed-by: Tom Rini <[email protected]> Acked-by: Simon Glass <[email protected]>
2015-11-12Merge branch 'master' of git://git.denx.de/u-boot-tegraTom Rini
2015-11-12uuid: add selection by string for known partition type GUIDPatrick Delaunay
short strings can be used in type parameter of gpt command to replace the guid string for the types known by u-boot partitions = name=boot,size=0x6bc00,type=data; \ name=root,size=0x7538ba00,type=linux; gpt write mmc 0 $partitions and they are also used to display the type of partition in "part list" command Partition Map for MMC device 0 -- Partition Type: EFI Part Start LBA End LBA Name Attributes Type GUID Partition GUID 1 0x00000022 0x0000037f "boot" attrs: 0x0000000000000000 type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7 type: data guid: d117f98e-6f2c-d04b-a5b2-331a19f91cb2 2 0x00000380 0x003a9fdc "root" attrs: 0x0000000000000000 type: 0fc63daf-8483-4772-8e79-3d69d8477de4 type: linux guid: 25718777-d0ad-7443-9e60-02cb591c9737 Signed-off-by: Patrick Delaunay <[email protected]>
2015-11-12pci: tegra: add/enable support for Tegra210Stephen Warren
This needs a separate compatible value from Tegra124 since the new HW version has bugs that would prevent a driver for previous HW versions from operating at all. Signed-off-by: Stephen Warren <[email protected]> Signed-off-by: Tom Warren <[email protected]>
2015-11-10Various Makefiles: Add SPDX-License-Identifier tagsTom Rini
After consulting with some of the SPDX team, the conclusion is that Makefiles are worth adding SPDX-License-Identifier tags too, and most of ours have one. This adds tags to ones that lack them and converts a few that had full (or in one case, very partial) license blobs into the equivalent tag. Cc: Kate Stewart <[email protected]> Signed-off-by: Tom Rini <[email protected]>
2015-11-05Merge git://git.denx.de/u-boot-socfpgaTom Rini
2015-11-05lib, fdt: Adding fdtdec_get_uint functionChin Liang See
Adding fdtdec_get_uint function which is the unsigned version for fdtdec_get_int Signed-off-by: Chin Liang See <[email protected]> Cc: Dinh Nguyen <[email protected]> Cc: Dinh Nguyen <[email protected]> Cc: Marek Vasut <[email protected]> Cc: Stefan Roese <[email protected]> Cc: Vikas Manocha <[email protected]> Cc: Jagannadh Teki <[email protected]> Cc: Pavel Machek <[email protected]> Cc: Heiko Schocher <[email protected]>
2015-11-04dm: spl: Support device tree when BSS is in a different sectionSimon Glass
At present in SPL we place the device tree immediately after BSS. This avoids needing to copy it out of the way before BSS can be used. However on some boards BSS is not placed with the image - e.g. it can be in RAM if available. Add an option to tell U-Boot that the device tree should be placed at the end of the image binary (_image_binary_end) instead of at the end of BSS. Note: A common reason to place BSS in RAM is to support the FAT filesystem. We should update the code so that it does not use so much BSS. Signed-off-by: Simon Glass <[email protected]> Signed-off-by: Michal Simek <[email protected]>
2015-11-04fdt: Correct handling of alias regionsSimon Glass
At present the last four bytes of the alias region are dropped in the case where the last alias is included. This results in a corrupted device tree. Fix this. Signed-off-by: Simon Glass <[email protected]> Signed-off-by: Michal Simek <[email protected]>
2015-11-04fdt: Add a function to look up a /chosen propertySimon Glass
It is sometimes useful to find a property in the chosen node. Add a function for this. Signed-off-by: Simon Glass <[email protected]> Signed-off-by: Michal Simek <[email protected]>
2015-10-27Merge git://git.denx.de/u-boot-dmTom Rini
2015-10-23fdt: fix fdtdec_get_pci_addr() for CONFIG_PHYS_64BITStephen Warren
PCI addresses are always represented as 3 cells in DT. (one cell for bus and device, and two cells for a 64-bit addres). This does not vary based on either the physical address size of the CPU, nor any #address-cells property in DT (or more precisely, #address-cells must be set to 3 in any PCIe controller's node). Fix fdtdec_get_pci_addr() to use conversion functions that operate on (fixed) cell-sized data rather than (varying) physical-address-sized data, so that the function works on 64-bit systems. Signed-off-by: Stephen Warren <[email protected]> Acked-by: Simon Glass <[email protected]> Reviewed-by: Thierry Reding <[email protected]>
2015-10-23dm: tpm: Drop CONFIG_DM_TPMSimon Glass
Now that all TPM drivers use driver model, we can drop the special driver model CONFIG option. Signed-off-by: Simon Glass <[email protected]> Acked-by: Christophe Ricard<[email protected]>
2015-10-23dm: tpm: Remove every compilation switch for TPM driver modelChristophe Ricard
As every TPM drivers support UCLASS_TPM, we can only rely on DM_TPM functions. This simplify a bit the code. Signed-off-by: Christophe Ricard <[email protected]> Reviewed-by: Tom Rini <[email protected]> Acked-by: Simon Glass <[email protected]>
2015-10-23dm: implement a Timer uclassThomas Chou
Implement a Timer uclass to work with lib/time.c. Signed-off-by: Thomas Chou <[email protected]> Acked-by: Simon Glass <[email protected]>
2015-10-21debug_uart: Adjust the declaration of debug_uart_init()Simon Glass
We want to be able to add other common code to this function. So change the driver's version to have an underscore before it, just like _debug_uart_putc(). Define debug_uart_init() to call this version. Update all drivers to this new method. Signed-off-by: Simon Glass <[email protected]> Reviewed-by: Bin Meng <[email protected]>
2015-10-11Add support for LZ4 decompression algorithmJulius Werner
This patch adds support for LZ4-compressed FIT image contents. This algorithm has a slightly worse compression ration than LZO while being nearly twice as fast to decompress. When loading images from a fast storage medium this usually results in a boot time win. Sandbox-tested only since I don't have a U-Boot development system set up right now. The code was imported unchanged from coreboot where it's proven to work, though. I'm mostly interested in getting this recognized by mkImage for use in a downstream project. Signed-off-by: Julius Werner <[email protected]> Acked-by: Simon Glass <[email protected]>
2015-10-03fdtdec: fix parsing 'reg' property with zero value in '#size-cells'Przemyslaw Marczak
After rework of lib/fdtdec.c by: commit: 02464e3 fdt: add new fdt address parsing functions the function fdtdec_get_addr() doesn't work as previous, because the implementation assumes that properties '#address-cells' and '#size-cells' are equal to 1, which can be not true sometimes. The new API introduced fdtdec_get_addr_size_auto_parent() for the 'reg' property parsing, but the implementation assumes, that #size-cells can't be less than 1. This causes that the following children's 'reg' property can't be reached: parent@0x0 { #address-cells = <1>; #size-cells = <0>; children@0x100 { reg = < 0x100 >; }; }; Change the condition value from '1' to '0', which allows parsing property with at least zero #size-cells, fixes the issue. Now, fdtdec_get_addr_size_auto_parent() works properly. Tested on: Odroid U3/X2, Trats, Trats2, Odroid XU3, Snow (by Simon). Signed-off-by: Przemyslaw Marczak <[email protected]> Acked-by: Stephen Warren <[email protected]> Acked-by: Simon Glass <[email protected]> Tested-by: Simon Glass <[email protected]>
2015-10-03fdt: fix fdtdec_get_addr_size not to require any size cellsStephen Warren
fdtdec_get_addr_size() may be used in two cases: a) With sizep supplied, in which case both an address and a size are parsed from DT. In this case, the DT property must be large enough to contain both values. b) With sizep NULL, in which case only an address is parsed from DT. In this case, the DT property only need be large enough to contain this address value. Commit 02464e386bb5 "fdt: add new fdt address parsing functions" broke this relaxed checking, and required the DT property to contain both an address and a size value in all cases. Fix fdtdec_get_addr_size() to vary ns based on whether the size value is being parsed from the DT or not. This is safe since the function only parses the first entry in the property, so the overall value of (na + ns) need not be accurate, since it is never used to step through the property data to find other entries. Besides, this fixed behaviour essentially matches the original behaviour before the patch this patch fixes. (The original code validated that the property was exactly the length of either na or (na + ns), whereas the current code only validates that the property is at least that long. For non-failure cases, the two behaviours are identical). Cc: Przemyslaw Marczak <[email protected]> Cc: Simon Glass <[email protected]> Cc: Thierry Reding <[email protected]> Cc: Bin Meng <[email protected]> Cc: Michal Suchanek <[email protected]> Fixes: 02464e386bb5 ("fdt: add new fdt address parsing functions") Reported-by: Przemyslaw Marczak <[email protected]> Signed-off-by: Stephen Warren <[email protected]> Tested-by: Przemyslaw Marczak <[email protected]> Acked-by: Simon Glass <[email protected]>
2015-09-16Merge git://git.denx.de/u-boot-fdtTom Rini
2015-09-15env: import: hashtable: Free memory allocated before exiting from himport_r()Lukasz Majewski
ithout this patch memory is not released on early exit. Signed-off-by: Lukasz Majewski <[email protected]>
2015-09-15env: import: hashtable: Prevent buffer overrun when importing environment ↵Lukasz Majewski
from file Lets consider following scenario: - One uses echo -n "key=value" to define environment variable in a file (single variable) - The file content is "key=value" without any terminating byte (e.g. 0x0a or 0x0d). - The file is loaded to u-boot non zero'ed RAM buffer (with load command). - Then "env import -t -r $loadaddr $filesize" is executed. - Due to lack of proper termination byte we have classical example of buffer overrun. This patch prevents from this by allocating one extra byte than size and explicitly null terminate it. There should be no change for normal env import operation after applying this patch. Signed-off-by: Lukasz Majewski <[email protected]>
2015-09-15fdt: add new fdt address parsing functionsStephen Warren
fdtdec_get_addr_size() hard-codes the number of cells used to represent an address or size in DT. This is incorrect in many cases depending on the DT binding for a particular node or property (e.g. it is incorrect for the "reg" property). In most cases, DT parsing code must use the properties #address-cells and #size-cells to parse addres properties. This change splits up the implementation of fdtdec_get_addr_size() so that the core logic can be used for both hard-coded and non-hard-coded cases. Various wrapper functions are implemented that support cases where hard-coded cell counts should or should not be used, and where the client does and doesn't know the parent node ID that contains the properties #address-cells and #size-cells. dev_get_addr() is updated to use the new functions. Core functionality in fdtdec_get_addr_size_fixed() is widely tested via fdtdec_get_addr_size(). I tested fdtdec_get_addr_size_auto_noparent() and dev_get_addr() by manually modifying the Tegra I2C driver to invoke them. Much of the core implementation of fdtdec_get_addr_size_fixed(), fdtdec_get_addr_size_auto_parent(), and fdtdec_get_addr_size_auto_noparent() comes from Thierry Reding's previous commit "fdt: Fix fdtdec_get_addr_size() for 64-bit". Based-on-work-by: Thierry Reding <[email protected]> Cc: Thierry Reding <[email protected]> Cc: Simon Glass <[email protected]> Cc: Michal Suchanek <[email protected]> Signed-off-by: Stephen Warren <[email protected]> Acked-by: Simon Glass <[email protected]> Dropped #define DEBUG at the top of fdtdec.c: Signed-off-by: Simon Glass <[email protected]>
2015-09-11Move malloc_cache_aligned() to its own headerSimon Glass
At present malloc.h is included everywhere since it recently was added to common.h in this commit: 4519668 mtd/nand/ubi: assortment of alignment fixes This seems wasteful and unnecessary. We have been trying to trim down common.h and put separate functions into separate header files and that change goes in the opposite direction. Move malloc_cache_aligned() to a new header so that this can be avoided. The header would perhaps be better named as alignmem.h but it needs to be included after common.h and people might be confused by this. With the name memalign.h it fits nicely after malloc() in most cases. Signed-off-by: Simon Glass <[email protected]> Acked-by: Marcel Ziswiler <[email protected]>
2015-09-04mmc: dw_mmc: Probe the MMC from OFMarek Vasut
Rework the driver to probe the MMC controller from Device Tree and make it mandatory. There is no longer support for probing from the ancient qts-generated header files. This patch now also removes previous temporary workaround. Signed-off-by: Marek Vasut <[email protected]> Cc: Dinh Nguyen <[email protected]> Cc: Pantelis Antoniou <[email protected]> Cc: Tom Rini <[email protected]>
2015-08-31tpm: Add functions to access flags and permissionsSimon Glass
Add a few new functions which will be used by the test command in a future patch. Signed-off-by: Simon Glass <[email protected]> Acked-by: Christophe Ricard<[email protected]> Reviewed-by: Heiko Schocher <[email protected]>
2015-08-31dm: tpm: Convert I2C driver to driver modelSimon Glass
Convert the tpm_tis_i2c driver to use driver model and update boards which use it. Signed-off-by: Simon Glass <[email protected]> Acked-by: Christophe Ricard<[email protected]> Reviewed-by: Heiko Schocher <[email protected]>
2015-08-31dm: tpm: Convert the TPM command and library to driver modelSimon Glass
Add driver model support to the TPM command and the TPM library. Both support only a single TPM at present. Signed-off-by: Simon Glass <[email protected]> Acked-by: Christophe Ricard<[email protected]> Reviewed-by: Heiko Schocher <[email protected]>
2015-08-31tpm: Add Kconfig options for TPMsSimon Glass
Add new Kconfig options for TPMs in preparation for moving boards to use Kconfig for TPM configuration. Signed-off-by: Simon Glass <[email protected]> Acked-by: Christophe Ricard<[email protected]> Reviewed-by: Heiko Schocher <[email protected]>
2015-08-28mtd/nand/ubi: assortment of alignment fixesMarcel Ziswiler
Various U-Boot adoptions/extensions to MTD/NAND/UBI did not take buffer alignment into account which led to failures of the following form: ERROR: v7_dcache_inval_range - start address is not aligned - 0x1f7f0108 ERROR: v7_dcache_inval_range - stop address is not aligned - 0x1f7f1108 Signed-off-by: Marcel Ziswiler <[email protected]> Reviewed-by: Simon Glass <[email protected]> Acked-by: Scott Wood <[email protected]> [trini: Add __UBOOT__ hunk to lib/zlib/zutil.c due to malloc.h in common.h] Signed-off-by: Tom Rini <[email protected]>
2015-08-28lib/display_options: Fix print_freqSuriyan Ramasami
Build without CONFIG_SPL_SERIAL_SUPPORT does not print the cpu freq. I have seen this in the odroid U3 board, where on boot one sees this: CPU: Exynos4412 @ GHz instead of: CPU: Exynos4412 @ 1 GHz I am assuming that this change was done to get rid of compiler warnings related to unused variables when building with CONFIG_SPL_SERIAL_SUPPORT not being defined in an SPL build. Signed-off-by: Suriyan Ramasami <[email protected]> Acked-by: Simon Glass <[email protected]> Acked-by: Heiko Schocher <[email protected]> Reviewed-by: Joe Hershberger <[email protected]>
2015-08-26fdtdec: Fix possible infinite loop in fdtdec_get_pci_vendev()Bin Meng
When there is no valid compatible string in current list, we should advance to next one in the compatible string list. Signed-off-by: Bin Meng <[email protected]> Acked-by: Simon Glass <[email protected]>
2015-08-18of: clean up OF_CONTROL ifdef conditionalsMasahiro Yamada
We have flipped CONFIG_SPL_DISABLE_OF_CONTROL. We have cleansing devices, $(SPL_) and CONFIG_IS_ENABLED(), so we are ready to clear away the ugly logic in include/fdtdec.h: #ifdef CONFIG_OF_CONTROL # if defined(CONFIG_SPL_BUILD) && !defined(SPL_OF_CONTROL) # define OF_CONTROL 0 # else # define OF_CONTROL 1 # endif #else # define OF_CONTROL 0 #endif Now CONFIG_IS_ENABLED(OF_CONTROL) is the substitute. It refers to CONFIG_OF_CONTROL for U-boot proper and CONFIG_SPL_OF_CONTROL for SPL. Also, we no longer have to cancel CONFIG_OF_CONTROL in include/config_uncmd_spl.h and scripts/Makefile.spl. Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Tom Rini <[email protected]> Reviewed-by: Simon Glass <[email protected]> Acked-by: Linus Walleij <[email protected]>
2015-08-18of: flip CONFIG_SPL_DISABLE_OF_CONTROL into CONFIG_SPL_OF_CONTROLMasahiro Yamada
As we discussed a couple of times, negative CONFIG options make our life difficult; CONFIG_SYS_NO_FLASH, CONFIG_SYS_DCACHE_OFF, ... and here is another one. Now, there are three boards enabling OF_CONTROL on SPL: - socfpga_arria5_defconfig - socfpga_cyclone5_defconfig - socfpga_socrates_defconfig This commit adds CONFIG_SPL_OF_CONTROL for them and deletes CONFIG_SPL_DISABLE_OF_CONTROL from the other boards to invert the logic. Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Tom Rini <[email protected]> Reviewed-by: Simon Glass <[email protected]>
2015-08-14Revert "fdt: Fix fdtdec_get_addr_size() for 64-bit"Simon Glass
This reverts commit 5b34436035fc862b5e8d0d2c3eab74ba36f1a7f4. This function has a few problems. It calls fdt_parent_offset() which as mentioned in code review is very slow. https://patchwork.ozlabs.org/patch/499482/ https://patchwork.ozlabs.org/patch/452604/ It also happens to break SPI flash on Minnowboard max which is how I noticed that this was applied. I can send a patch to tidy that up, but in any case I think we should consider a revert until the function is better implemented. Signed-off-by: Simon Glass <[email protected]>
2015-08-14x86: baytrail: Configure FSP UPD from device treeAndrew Bradford
Allow for configuration of FSP UPD from the device tree which will override any settings which the FSP was built with itself. Modify the MinnowMax and BayleyBay boards to transfer sensible UPD settings from the Intel FSPv4 Gold release to the respective dts files, with the condition that the memory-down parameters for MinnowMax are also used. Signed-off-by: Andrew Bradford <[email protected]> Reviewed-by: Bin Meng <[email protected]> Tested-by: Bin Meng <[email protected]> Removed fsp,mrc-debug-msg and fsp,enable-xhci for minnowmax, bayleybay Fixed lines >80col Signed-off-by: Simon Glass <[email protected]>
2015-08-12spl, common, serial: build SPL without serial supportHeiko Schocher
This patch enables building SPL without CONFIG_SPL_SERIAL_SUPPORT support. Signed-off-by: Heiko Schocher <[email protected]> [trini: Ensure we build arch/arm/imx-common on mx28] Signed-off-by: Tom Rini <[email protected]>
2015-08-08arm: socfpga: misc: Reset ethernet from OFMarek Vasut
Reset the GMAC ethernets based on the "resets" OF node instead of ad-hoc hardcoded values in the U-Boot code. Since we don't have a proper reset framework in place yet, we have to do this slightly ad-hoc parsing of the OF tree instead. Signed-off-by: Marek Vasut <[email protected]> Cc: Dinh Nguyen <[email protected]> Cc: Joe Hershberger <[email protected]>