History

Merge tag 'misc-habanalabs-next-2021-04-10' of https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux into char-misc-next

Oded writes: This tag contains habanalabs driver changes for v5.13: - Add support to reset device after the user closes the file descriptor. Because we support a single user, we can reset the device (if needs to) after a user closes its file descriptor to make sure the device is in idle and clean state for the next user. - Add a new feature to allow the user to wait on interrupt. This is needed for future ASICs - Replace GFP_ATOMIC with GFP_KERNEL wherever possible and add code to support failure of allocating with GFP_ATOMIC. - Update code to support the latest firmware image: - More security features are done in the firmware - Remove hard-coded assumptions and replace them with values that are sent to the firmware on loading. - Print device unusable error - Reset device in case the communication between driver and firmware gets out of sync. - Support new PCI device ids for secured GAUDI. - Expose current power draw through the INFO IOCTL. - Support resetting the device upon a request from the BMC (through F/W). - Always use only a single MSI in GAUDI, due to H/W limitation. - Improve data-path code by taking out code from spinlock protection. - Allow user to specify custom timeout per Command Submission. - Some enhancements to debugfs. - Various minor changes and improvements. * tag 'misc-habanalabs-next-2021-04-10' of https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux: (41 commits) habanalabs: print f/w boot unknown error habanalabs: update to latest F/W communication header habanalabs/gaudi: skip iATU if F/W security is enabled habanalabs/gaudi: derive security status from pci id habanalabs: move dram scrub to free sequence habanalabs: send dynamic msi-x indexes to f/w habanalabs/gaudi: clear QM errors only if not in stop_on_err mode habanalabs: support DEVICE_UNUSABLE error indication from FW habanalabs: use strscpy instead of sprintf and strlcpy habanalabs: remove the store jobs array from CS IOCTL habanalabs/gaudi: add debugfs to DMA from the device habanalabs/gaudi: sync stream add protection to SOB reset flow habanalabs: add custom timeout flag per cs habanalabs: improve utilization calculation habanalabs: support legacy and new pll indexes habanalabs: move relevant datapath work outside cs lock habanalabs: avoid soft lockup bug upon mapping error habanalabs/gaudi: Update async events header habanalabs/gaudi: unsecure TPC cfg status registers habanalabs/gaudi: always use single-msi mode ...

Greg Kroah-Hartman committed 5 years ago

Commit aa87e312 parents 19ab233 b575a7631 files · +2193 −517Browse files

Showing the changes to include/uapi (1 of 31 files). Show all

Unified · Split

include/uapi/misc/habanalabs.h+57−20
@@ -297,6 +297,7 @@ enum hl_device_status { · 296 unmodified lines
297297 #define HL_INFO_SYNC_MANAGER 14
298298 #define HL_INFO_TOTAL_ENERGY 15
299299 #define HL_INFO_PLL_FREQUENCY 16
300+#define HL_INFO_POWER 17
300301
301302 #define HL_INFO_VERSION_MAX_LEN 128
302303 #define HL_INFO_CARD_NAME_MAX_LEN 16
@@ -410,6 +411,14 @@ struct hl_pll_frequency_info { · 107 unmodified lines
410411 __u16 output[HL_PLL_NUM_OUTPUTS];
411412 };
412413
414+/**
415+ * struct hl_power_info - power information
416+ * @power: power consumption
417+ */
418+struct hl_power_info {
419+ __u64 power;
420+};
421+
413422 /**
414423 * struct hl_info_sync_manager - sync manager information
415424 * @first_available_sync_object: first available sob
@@ -621,6 +630,7 @@ struct hl_cs_chunk { · 205 unmodified lines
621630 #define HL_CS_FLAGS_STAGED_SUBMISSION 0x40
622631 #define HL_CS_FLAGS_STAGED_SUBMISSION_FIRST 0x80
623632 #define HL_CS_FLAGS_STAGED_SUBMISSION_LAST 0x100
633+#define HL_CS_FLAGS_CUSTOM_TIMEOUT 0x200
624634
625635 #define HL_CS_STATUS_SUCCESS 0
626636
@@ -634,17 +644,10 @@ struct hl_cs_in { · 7 unmodified lines
634644 /* holds address of array of hl_cs_chunk for execution phase */
635645 __u64 chunks_execute;
636646
637− union {
638− /* this holds address of array of hl_cs_chunk for store phase -
639− * Currently not in use
640− */
641− __u64 chunks_store;
642−
643− /* Sequence number of a staged submission CS
644− * valid only if HL_CS_FLAGS_STAGED_SUBMISSION is set
645− */
646− __u64 seq;
647− };
647+ /* Sequence number of a staged submission CS
648+ * valid only if HL_CS_FLAGS_STAGED_SUBMISSION is set
649+ */
650+ __u64 seq;
648651
649652 /* Number of chunks in restore phase array. Maximum number is
650653 * HL_MAX_JOBS_PER_CS
@@ -656,8 +659,10 @@ struct hl_cs_in { · 5 unmodified lines
656659 */
657660 __u32 num_chunks_execute;
658661
659− /* Number of chunks in restore phase array - Currently not in use */
660− __u32 num_chunks_store;
662+ /* timeout in seconds - valid only if HL_CS_FLAGS_CUSTOM_TIMEOUT
663+ * is set
664+ */
665+ __u32 timeout;
661666
662667 /* HL_CS_FLAGS_* */
663668 __u32 cs_flags;
@@ -682,14 +687,46 @@ union hl_cs_args { · 18 unmodified lines
682687 struct hl_cs_out out;
683688 };
684689
690+#define HL_WAIT_CS_FLAGS_INTERRUPT 0x2
691+#define HL_WAIT_CS_FLAGS_INTERRUPT_MASK 0xFFF00000
692+
685693 struct hl_wait_cs_in {
686− /* Command submission sequence number */
687− __u64 seq;
688− /* Absolute timeout to wait in microseconds */
689− __u64 timeout_us;
694+ union {
695+ struct {
696+ /* Command submission sequence number */
697+ __u64 seq;
698+ /* Absolute timeout to wait for command submission
699+ * in microseconds
700+ */
701+ __u64 timeout_us;
702+ };
703+
704+ struct {
705+ /* User address for completion comparison.
706+ * upon interrupt, driver will compare the value pointed
707+ * by this address with the supplied target value.
708+ * in order not to perform any comparison, set address
709+ * to all 1s.
710+ * Relevant only when HL_WAIT_CS_FLAGS_INTERRUPT is set
711+ */
712+ __u64 addr;
713+ /* Target value for completion comparison */
714+ __u32 target;
715+ /* Absolute timeout to wait for interrupt
716+ * in microseconds
717+ */
718+ __u32 interrupt_timeout_us;
719+ };
720+ };
721+
690722 /* Context ID - Currently not in use */
691723 __u32 ctx_id;
692− __u32 pad;
724+ /* HL_WAIT_CS_FLAGS_*
725+ * If HL_WAIT_CS_FLAGS_INTERRUPT is set, this field should include
726+ * interrupt id according to HL_WAIT_CS_FLAGS_INTERRUPT_MASK, in order
727+ * not to specify an interrupt id ,set mask to all 1s.
728+ */
729+ __u32 flags;
693730 };
694731
695732 #define HL_WAIT_CS_STATUS_COMPLETED 0
@@ -999,8 +1036,8 @@ struct hl_debug_args { · 303 unmodified lines
9991036 * Each JOB will be enqueued on a specific queue, according to the user's input.
10001037 * There can be more then one JOB per queue.
10011038 *
1002− * The CS IOCTL will receive three sets of JOBS. One set is for "restore" phase,
1003− * a second set is for "execution" phase and a third set is for "store" phase.
1039+ * The CS IOCTL will receive two sets of JOBS. One set is for "restore" phase
1040+ * and a second set is for "execution" phase.
10041041 * The JOBS on the "restore" phase are enqueued only after context-switch
10051042 * (or if its the first CS for this context). The user can also order the
10061043 * driver to run the "restore" phase explicitly