summaryrefslogtreecommitdiff
path: root/arch
AgeCommit message (Collapse)Author
2016-03-22ARM: 8429/1: disable GCC SRA optimizationArd Biesheuvel
While working on the 32-bit ARM port of UEFI, I noticed a strange corruption in the kernel log. The following snprintf() statement (in drivers/firmware/efi/efi.c:efi_md_typeattr_format()) snprintf(pos, size, "|%3s|%2s|%2s|%2s|%3s|%2s|%2s|%2s|%2s]", was producing the following output in the log: | | | | | |WB|WT|WC|UC] | | | | | |WB|WT|WC|UC] | | | | | |WB|WT|WC|UC] |RUN| | | | |WB|WT|WC|UC]* |RUN| | | | |WB|WT|WC|UC]* | | | | | |WB|WT|WC|UC] |RUN| | | | |WB|WT|WC|UC]* | | | | | |WB|WT|WC|UC] |RUN| | | | | | | |UC] |RUN| | | | | | | |UC] As it turns out, this is caused by incorrect code being emitted for the string() function in lib/vsprintf.c. The following code if (!(spec.flags & LEFT)) { while (len < spec.field_width--) { if (buf < end) *buf = ' '; ++buf; } } for (i = 0; i < len; ++i) { if (buf < end) *buf = *s; ++buf; ++s; } while (len < spec.field_width--) { if (buf < end) *buf = ' '; ++buf; } when called with len == 0, triggers an issue in the GCC SRA optimization pass (Scalar Replacement of Aggregates), which handles promotion of signed struct members incorrectly. This is a known but as yet unresolved issue. (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65932). In this particular case, it is causing the second while loop to be executed erroneously a single time, causing the additional space characters to be printed. So disable the optimization by passing -fno-ipa-sra. Cc: <stable@vger.kernel.org> Acked-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> (cherry picked from commit a077224fd35b2f7fbc93f14cf67074fc792fbac2)
2016-03-21tegra3_clocks.c: fix unusual comparisionMax Krummenacher
newer compilers throw the following error: tegra3_clocks.c:820:31: error: logical not is only applied to the left hand side of comparison [-Werror=logical-not-parentheses] | c->state = (!is_lp_cluster() == (c->u.cpu.mode == MODE_G))? ON : OFF; | ^ Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
2016-03-21ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.hBehan Webster
With compilers which follow the C99 standard (like modern versions of gcc and clang), "extern inline" does the wrong thing (emits code for an externally linkable version of the inline function). In this case using static inline and removing the NULL version of return_address in return_address.c does the right thing. Signed-off-by: Behan Webster <behanw@converseincode.com> Reviewed-by: Mark Charlebois <charlebm@gmail.com> Acked-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> (cherry picked from commit aeea3592a13bf12861943e44fc48f1f270941f8d)
2016-03-21apalis/colibri_t20/t30: synchronize USB serial optionsStefan Agner
Compile USB device classes such as WDM and CDC ACM as modules. Enable USB driver for GSM and CDMA modems (Option and others). Also enable USB serial console option which allows to use a USB serial device as a serial console at boot time. Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
2016-03-21apalis_t30: ixora: optionally support leds, switch, foff and wdisableMarcel Ziswiler
The Ixora carrier board has a few MXM3 pins repurposed as follows: Functionality MXM3 Pin LED4_RED 146 LED4_GREEN 162 LED5_RED 156 LED5_GREEN 152 PCIE1_WDISABLE_N 144 SW3 160 UART2_3_RS232_FOFF_N 164 This patch allows uncommenting an IXORA define in the board header file in order to make use of those repurposed pins. Please note that those pins are usually used for the 8-bit MMC/SD slot aka Apalis MMC1 and the SDHCI controller/driver unfortunately changes the output driver behaviour in a way preventing any regular GPIO use. This patch therefore explicitly does not register the SDHCI driver on this controller instance in the Ixora case to avoid this. Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
2015-12-15colibri_t20/t30: add as0260 camera platform dataColibri_T30_LinuxImageV2.5Beta3_20151215Colibri_T20_LinuxImageV2.5Beta3_20151215Apalis_T30_LinuxImageV2.5Beta3_20151215Marcel Ziswiler
Add Aptina AS0260 camera platform data. Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
2015-12-15apalis/colibri_t20/t30: clean-up board filesMarcel Ziswiler
Purely cosmetic clean-up of board files by fixing indentation, re-ordering camera platform data, splitting lines longer than 80 characters etc. Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
2015-12-15colibri_t20: v4l2: adv7280 integrationBhuvanchandra DV
Integrate ADV7280 video decoder support. Signed-off-by: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
2015-12-15colibri_t30: v4l2: adv7280 integrationBhuvanchandra DV
Integrate ADV7280 video decoder support. Signed-off-by: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com> Acked-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
2015-12-15apalis/colibri_t20/t30: Add multitouch HID supportStefan Agner
Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Acked-by: Max Krummenacher <max.krummenacher@toradex.com>
2015-11-24apalis/colibri_t20/t30: Enable RTL8192CU driverBhuvanchandra DV
Enable RTL8192CU driver to support LM006 USB WiFi adapter. Signed-off-by: Bhuvanchandra DV <bhuvanchandra.dv@toradex.com> Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
2015-11-06Revert "apalis_t30: Make audio and leds-pwm platform devices dependent on ↵Marcel Ziswiler
kconfig symbols" This reverts commit 0b206b99b8b7c27e70fb91bc13e2255cb0cfeb28. Unfortunately there is no CONFIG_AUDIO_SGTL5000_TEGRA! Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
2015-10-23colibri_t30: fix usb host device detection with colibri otg driverMarcel Ziswiler
Turns out the Tegra 3 USB PHY driver had some hard coded dependency on the Tegra OTG driver but we usually just use our own OTG driver purely relying on a cable detect GPIO to determine USB device vs. host role.
2015-10-23apalis_t30: Make audio and leds-pwm platform devices dependent on kconfig ↵Tobias Klauser
symbols Signed-off-by: Tobias Klauser <tobias.klauser@zhinst.com>
2015-09-26apalis/colibri_t30: usb: fix performance regressionMarcel Ziswiler
Unfortunately that utmi_phy_remotewake_detected() function gets called one too many times even quite continuously during data transfers and putting an mdelay() in there has a rather adverse effect on the overall system performance including of course degrading USB transfer speeds. Moving the system lock-up avoidance hack further down into the if clause improves the performance again as this typically is only ever evaluated once upon actually plugging something in behind a hub. This fixes a performance regression introduced by the following commit: apalis/colibri_t30: usb: fix low-speed issue hack 629b91fa046df5213ed3312d2e2b8683e6bdd70c
2015-08-31apalis/colibri_t30: Add comments about i2s pin muxing/operationMarcel Ziswiler
Add a comment about DAP FS pin mux requiring INPUT when operating as I2S slave. Add a comment about DAP SCLK requiring INPUT even when operating as I2S master. Add a comment about is_i2s_master in the platform data meaning T30 SoC is I2S master.
2015-06-12colibri_t20: hack: prevent rare boot lock-upMarcel Ziswiler
A customer reported rare boot lock-ups every odd 500 software reboot cycle. This patch removes the display clock initialisation from the early clock initialisation as the boot loader anyway already initialised the same.
2015-06-09apalis_t30: ov5640 csi camera sensor supportMarcel Ziswiler
Integrate OV5640 CSI camera sensor support.
2015-06-09apalis_t30: clean-up board fileMarcel Ziswiler
2015-06-03colibri_t20: improve pmic rtc accuracyMarcel Ziswiler
It looks like our crystal load capacitance is way off as we just copied NVIDIA's default setting being the lowest possible 1.5 pF due to their boards having 20 pF external caps while our hardware does not have any external caps assembled and we should use the highest 12.5 pF setting.
2015-05-12apalis/colibri_t20/t30: clean-up module deploymentMarcel Ziswiler
Bring the kernel module configuration more in line with what we currently really deploy. As a second step we can then change the way kernel modules are actually deployed by just deploying them all.
2015-05-12Merge branch 'tegra-nand-next' into tegra-nextMarcel Ziswiler
2015-04-27apalis_t30_defconfig add generic PCIe SATA/AHCI driverMarcel Ziswiler
CONFIG_SATA_AHCI=m This allows using PCIe cards with a SATA interface.
2015-04-14ARM: tegra: hack to make IT parts operate like commercial temp for nowMarcel Ziswiler
As NVIDIA so far was unable to provide us with any proper speedo numbers for their industrial temperature aka IT parts just make SKU 0xB0 aka T30IQS-Ax behave identical to the regular commercial temperature 0xB1 aka T30MQS-Ax for the SKU to speedo ID conversion. This prevents them to fall back to fixed 600 MHz operation and crashing thermal throttling once kicking in due to missing table entry causing a null pointer exception.
2015-04-02colibri_t20: initial 16-bit BCH ECC supportMarcel Ziswiler
2015-03-30Merge remote-tracking branch 'remotes/ubifs-v3.1/master' into tegra-nand-nextMarcel Ziswiler
Conflicts: drivers/mtd/ubi/ubi.h drivers/mtd/ubi/wl.c
2015-03-19apalis/colibri_t20/t30: enable module versioning supportColibri_T20_LinuxImageV2.3_20150320Marcel Ziswiler
Enable module versioning support (CONFIG_MODVERSIONS and CONFIG_MODULE_SRCVERSION_ALL) which allows using kernel modules across different kernel builds/versions. While at it also update the Android configurations.
2015-02-03eMMC: Enable deferred resume functionban_feng
Change-Id: I40a8481618b1a5995a713ff343c7532badd20b65 Change-Id: I399302118c9d8d8246a4a304ff7a1ea80889dbc6 Reviewed-on: http://mcrd1-5.corpnet.asus/code-review/master/45568 Reviewed-by: Ban Feng <Ban_Feng@asus.com> Tested-by: Ban Feng <Ban_Feng@asus.com> Reviewed-by: Sam hblee <Sam_hblee@asus.com> (cherry picked from commit 121c0c6dffe16c683f4dbf00ed841fb4de1f70a0) Conflicts: drivers/mmc/core/mmc.c
2015-01-16apalis_t30: fix soc-camera-pdrv warningColibri_T20_LinuxImageV2.3Beta7_20150203Marcel Ziswiler
Commit fe4c58c4b96a24aba8e27956e8158b3002723b17 adding ADV7280 support introduced the following warning being printed during boot: [ 1.121072] sysfs: cannot create duplicate filename '/devices/platform/soc-camera-pdrv.3'
2015-01-16Merge remote-tracking branch 'remotes/nvidia/l4t/l4t-r16-r2' into tegra-nextMarcel Ziswiler
(tegra-l4t-r16-16.5) Conflicts: drivers/media/video/tegra_v4l2_camera.c drivers/mmc/host/sdhci.c drivers/watchdog/tegra_wdt.c include/media/tegra_v4l2_camera.h
2015-01-09media: Added Analog Devices ADV7280 video decoder driverWojciech Bieganski
2014-12-18apalis_t30: optional mmc uhs support (v1.1a and later hw)Colibri_T30_LinuxImageV2.3Beta5_20141219Colibri_T20_LinuxImageV2.3Beta5_20141219Apalis_T30_LinuxImageV2.3Beta5_20141219Marcel Ziswiler
This patch adds optional UHS support for the 8-bit MMC controller. Please note that this requires V1.1A or later module hardware plus the pull-up resistors on the data as well as the command signal lines of your carrier board need to be removed (e.g. R46 to R54 on our Apalis Evaluation Board V1.1A). If those pre-requisites are met support can be enabled using the following kernel command line parameter: mmc_uhs=1
2014-12-18apalis/colibri_t30: usb: fix low-speed issue hackMarcel Ziswiler
Certain low-speed USB devices were not detected correctly when plugged into a running system.
2014-12-01apalis_t30: implement power button optionally acting as power-keyMarcel Ziswiler
Both the Apalis EvalBoard as well as Ixora allow their LTC2954 pushbutton on/off controller to optionally initiate orderly shutdown via GPIO interrupt on GPIO5 upon short power button press (short here meaning really short unless C137 resp. C35 is assembled). For this to work the following wiring is required: Apalis EvalBoard V1.1a X61-4 to X2-6 Ixora V1.0a X5-4 to X27-17 For systemd/logind to actually use this as a power-switch a custom udev rule /etc/udev/rules.d/70-power-switch-apalis_t30.rules as follows is required: # Specific rule for apalis_t30: # # Apalis T30's power button is not part of the kernel acpi subsystem. # Let's manually add the power-switch tag to control its behaviour with # systemd/logind ACTION=="remove", GOTO="power_apalis_t30_end" SUBSYSTEM=="input", KERNEL=="event1", TAG+="power-switch" LABEL="power_apalis_t30_end"
2014-12-01apalis_t30: implement optional force off gpio supportMarcel Ziswiler
Both the Apalis EvalBoard as well as Ixora allow their LTC2954 pushbutton on/off controller to optionally be forced off by using a GPIO. This patch implements this upon poweroff/shutdown using Apalis GPIO6 which happens to be internally pulled-up upon power-on reset (otherwise we would immediately get powered off again). For this to work the following wiring is required: Apalis EvalBoard V1.1a X2-A5 to X61-5 Ixora V1.0a X27-18 to X5-5
2014-12-01apalis_t30: fix wake-up-key (formerly power-key)Marcel Ziswiler
The wake-up-key (formerly power-key) on MXM3 pin 37 aka WAKE1_MICO is actually active-low due to the EvalBoard v1.1a having 4.7 K pull-up. This patch fixes this. While at it also get rid of the custom wakeup_key handling blindly copied from T20 as non of the other T30 boards do this and it anyway might only be required for LP0 which we anyway do not support so far.
2014-10-28apalis/colibri t30: fix audio hub lock-upMarcel Ziswiler
This patch fixes a clock related audio hub driver lock-up observed when booting with mainline U-Boot which we are in the process of migrating to now.
2014-10-13arm: tegra30: pcie: do not disable clk after deasserting resetstegra-l4t-r16-16.5daily-2014.11.07.0_l4t/l4t-r16Shreshtha SAHU
Do not disable and re-enable clocks after deasserting PCIE, AFI and PCIEX resets. Deasserting the resets should be followed by programming the PCIE. Bug 1521306 Change-Id: Idc43bc9b21cac3818852ed059fe512f4cd75b748 Signed-off-by: Shreshtha SAHU <ssahu@nvidia.com> Reviewed-on: http://git-master/r/495616 GVS: Gerrit_Virtual_Submit Reviewed-by: Eric Brower <ebrower@nvidia.com> Reviewed-by: Prashant Gaikwad <pgaikwad@nvidia.com> Reviewed-by: Winnie Hsu <whsu@nvidia.com>
2014-10-10arm: tegra3: PCIe Clock and Reset Conform to SpecificationEric Yuen
PCIe Reset line must be asserted for at least 100us after clock is enabled. PEX 2 Controller Register fix, offsets are not at constant intervals. Bug 1521306 Reviewed-on: http://git-master/r/225399 (cherry picked from commit df0760bf515236bed2e87e590509642ab72a01b5) Change-Id: I7b44ea51e7e02f2bca93cfc75ed85e01ab91fe03 Signed-off-by: Shreshtha Sahu <ssahu@nvidia.com> Reviewed-on: http://git-master/r/435598 Reviewed-by: Jay Agarwal <jagarwal@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Eric Brower <ebrower@nvidia.com> Reviewed-by: Winnie Hsu <whsu@nvidia.com>
2014-09-03arm: tegra30: pcie: do not disable clk after deasserting resetsApalis_T30_LinuxImageV2.3Beta2_20140903Shreshtha SAHU
Do not disable and re-enable clocks after deasserting PCIE, AFI and PCIEX resets. Deasserting the resets should be followed by programming the PCIE. Bug 1521306 Change-Id: Idc43bc9b21cac3818852ed059fe512f4cd75b748 Signed-off-by: Shreshtha SAHU <ssahu@nvidia.com>
2014-07-28ARM: 7670/1: fix the memset fixNicolas Pitre
Commit 455bd4c430b0 ("ARM: 7668/1: fix memset-related crashes caused by recent GCC (4.7.2) optimizations") attempted to fix a compliance issue with the memset return value. However the memset itself became broken by that patch for misaligned pointers. This fixes the above by branching over the entry code from the misaligned fixup code to avoid reloading the original pointer. Also, because the function entry alignment is wrong in the Thumb mode compilation, that fixup code is moved to the end. While at it, the entry instructions are slightly reworked to help dual issue pipelines. Signed-off-by: Nicolas Pitre <nico@linaro.org> Tested-by: Alexander Holler <holler@ahsoftware.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-28ARM: 7668/1: fix memset-related crashes caused by recent GCC (4.7.2) ↵Ivan Djelic
optimizations Recent GCC versions (e.g. GCC-4.7.2) perform optimizations based on assumptions about the implementation of memset and similar functions. The current ARM optimized memset code does not return the value of its first argument, as is usually expected from standard implementations. For instance in the following function: void debug_mutex_lock_common(struct mutex *lock, struct mutex_waiter *waiter) { memset(waiter, MUTEX_DEBUG_INIT, sizeof(*waiter)); waiter->magic = waiter; INIT_LIST_HEAD(&waiter->list); } compiled as: 800554d0 <debug_mutex_lock_common>: 800554d0: e92d4008 push {r3, lr} 800554d4: e1a00001 mov r0, r1 800554d8: e3a02010 mov r2, #16 ; 0x10 800554dc: e3a01011 mov r1, #17 ; 0x11 800554e0: eb04426e bl 80165ea0 <memset> 800554e4: e1a03000 mov r3, r0 800554e8: e583000c str r0, [r3, #12] 800554ec: e5830000 str r0, [r3] 800554f0: e5830004 str r0, [r3, #4] 800554f4: e8bd8008 pop {r3, pc} GCC assumes memset returns the value of pointer 'waiter' in register r0; causing register/memory corruptions. This patch fixes the return value of the assembly version of memset. It adds a 'mov' instruction and merges an additional load+store into existing load/store instructions. For ease of review, here is a breakdown of the patch into 4 simple steps: Step 1 ====== Perform the following substitutions: ip -> r8, then r0 -> ip, and insert 'mov ip, r0' as the first statement of the function. At this point, we have a memset() implementation returning the proper result, but corrupting r8 on some paths (the ones that were using ip). Step 2 ====== Make sure r8 is saved and restored when (! CALGN(1)+0) == 1: save r8: - str lr, [sp, #-4]! + stmfd sp!, {r8, lr} and restore r8 on both exit paths: - ldmeqfd sp!, {pc} @ Now <64 bytes to go. + ldmeqfd sp!, {r8, pc} @ Now <64 bytes to go. (...) tst r2, #16 stmneia ip!, {r1, r3, r8, lr} - ldr lr, [sp], #4 + ldmfd sp!, {r8, lr} Step 3 ====== Make sure r8 is saved and restored when (! CALGN(1)+0) == 0: save r8: - stmfd sp!, {r4-r7, lr} + stmfd sp!, {r4-r8, lr} and restore r8 on both exit paths: bgt 3b - ldmeqfd sp!, {r4-r7, pc} + ldmeqfd sp!, {r4-r8, pc} (...) tst r2, #16 stmneia ip!, {r4-r7} - ldmfd sp!, {r4-r7, lr} + ldmfd sp!, {r4-r8, lr} Step 4 ====== Rewrite register list "r4-r7, r8" as "r4-r8". Signed-off-by: Ivan Djelic <ivan.djelic@parrot.com> Reviewed-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Dirk Behme <dirk.behme@gmail.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-26apalis/colibri t20/t30: enable vlan functionalityMarcel Ziswiler
Enable VLAN networking functionality. While at it also enable some more kernel modules for Apalis T30 PCIe based devices like the Intel E1000E NICs, Intel IWLAGN Wi-Fi cards, PCIe serial cards and XHCI based USB 3.0 controllers.
2014-07-25apalis/colibri t30: use hda hdmi audio and split sound initMarcel Ziswiler
Use HDA HDMI audio now on Colibri T30 as well allowing for up to 7.1 multi-channel playback. Split board sound initialisation between Apalis and Colibri T30 in order to distinguish better between default SPDIF being supported out-of-the-box on Apalis vs. this being an optional feature for the Colibri. Therefore remove SPDIF for the Colibri T30. While at it add csus clock required for vi_sensor camera master clock on Apalis T30 and clk_out_2/extern2 for Colibri T30, fix debug UART1 initialisation, get rid of spurious CONFIG_SND_USB enable and further clean-up both board platform data files.
2014-07-25apalis/colibri t20/t30: enable fhandle for systemdMarcel Ziswiler
Enable CONFIG_FHANDLE required for systemd >= 209 according to lists.freedesktop.org/archives/systemd-devel/2014-February/017362.html While at it put them all 3 on par concerning ARM Errata configuration.
2014-07-22apalis/colibri t20/t30: fix/introduce spi device controller dataMarcel Ziswiler
Fix (Colibri) resp. introduce (Apalis) SPI device controller data to properly use HW based chip select with one clock of setup and hold time each for both MCP2515 CAN controller(s) as well as spidev.
2014-07-21mmc: tegra: use 1.8V quirk only on affected instancesStefan Agner
The 1.8V quirk also affected the internal eMMC which disabled newer modes such as SDR50, SDR104 and DDR50. This in turn lead to an out of spec usage since the clock was still 50MHz. By creating a no_1v8 field in the platform data we can now enable this work around on a per-instance basis. Hence we enable the quirk only on the controllers which are connected to the external SD-slots.
2014-07-16arm: tegra3: PCIe Clock and Reset Conform to SpecificationEric Yuen
PCIe Reset line must be asserted for at least 100us after clock is enabled. PEX 2 Controller Register fix, offsets are not at constant intervals. Bug 1521306 Reviewed-on: http://git-master/r/225399 (cherry picked from commit df0760bf515236bed2e87e590509642ab72a01b5) Change-Id: I7b44ea51e7e02f2bca93cfc75ed85e01ab91fe03 Signed-off-by: Shreshtha Sahu <ssahu@nvidia.com>
2014-07-08media: vi driver on Colibri T20 is working againWojciech Bieganski
This commit resolves an issue of non-working vi camera driver on Colibri T20 occured after a l4t-r16-r4 merge.
2014-06-04media: video: fix clock settings for Tegra VI driverBryan Wu
- remove reduntant emc clock rate set which is controlled by DVFS - VI's maxim working clock freq is 300MHz - Change VI clock divider from an integer to a decimal, so the maxim VI clock on Cardhu should be 272MHz (PLL_P is 408MHz and divider is 1.5) Bug 1478352 Change-Id: I4028ed8531d92300d131befb53a4c9dc9f90930d Signed-off-by: Bryan Wu <pengw@nvidia.com> Reviewed-on: http://git-master/r/419071 Reviewed-by: Winnie Hsu <whsu@nvidia.com> Tested-by: Winnie Hsu <whsu@nvidia.com>