History

Merge tag 'char-misc-5.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc

Pull char/misc driver fixes Greg KH: "Here are some small char/misc driver fixes for 5.3-rc4. Two of these are for the habanalabs driver for issues found when running on a big-endian system (are they still alive?) The others are tiny fixes reported by people, and a MAINTAINERS update about the location of the fpga development tree. All of these have been in linux-next for a while with no reported issues" * tag 'char-misc-5.3-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: coresight: Fix DEBUG_LOCKS_WARN_ON for uninitialized attribute MAINTAINERS: Move linux-fpga tree to new location nvmem: Use the same permissions for eeprom as for nvmem habanalabs: fix host memory polling in BE architecture habanalabs: fix F/W download in BE architecture

Linus Torvalds committed 7 years ago

Commit 5aa91002 parents 36e630e 5511c0c7 files · +35 −28Browse files

Unified · Split

7 files
  1. MAINTAINERS +1 −1
  2. drivers/hwtracing/coresight/coresight-etm-perf.c +1 −0
  3. drivers/misc/habanalabs/command_submission.c +1 −1
  4. drivers/misc/habanalabs/firmware_if.c +4 −18
  5. drivers/misc/habanalabs/goya/goya.c +3 −2
  6. drivers/misc/habanalabs/habanalabs.h +14 −2
  7. drivers/nvmem/nvmem-sysfs.c +11 −4
MAINTAINERS+1−1
@@ -6344,7 +6344,7 @@ FPGA MANAGER FRAMEWORK · 6343 unmodified lines
63446344 M: Moritz Fischer <mdf@kernel.org>
63456345 L: linux-fpga@vger.kernel.org
63466346 S: Maintained
6347−T: git git://git.kernel.org/pub/scm/linux/kernel/git/atull/linux-fpga.git
6347+T: git git://git.kernel.org/pub/scm/linux/kernel/git/mdf/linux-fpga.git
63486348 Q: http://patchwork.kernel.org/project/linux-fpga/list/
63496349 F: Documentation/fpga/
63506350 F: Documentation/driver-api/fpga/
drivers/hwtracing/coresight/coresight-etm-perf.c+1−0
@@ -544,6 +544,7 @@ int etm_perf_add_symlink_sink(struct coresight_device *csdev) · 543 unmodified lines
544544 /* See function coresight_get_sink_by_id() to know where this is used */
545545 hash = hashlen_hash(hashlen_string(NULL, name));
546546
547+ sysfs_attr_init(&ea->attr.attr);
547548 ea->attr.attr.name = devm_kstrdup(dev, name, GFP_KERNEL);
548549 if (!ea->attr.attr.name)
549550 return -ENOMEM;
drivers/misc/habanalabs/command_submission.c+1−1
@@ -683,7 +683,7 @@ int hl_cs_ioctl(struct hl_fpriv *hpriv, void *data) · 682 unmodified lines
683683
684684 rc = hl_poll_timeout_memory(hdev,
685685 &ctx->thread_ctx_switch_wait_token, tmp, (tmp == 1),
686− 100, jiffies_to_usecs(hdev->timeout_jiffies));
686+ 100, jiffies_to_usecs(hdev->timeout_jiffies), false);
687687
688688 if (rc == -ETIMEDOUT) {
689689 dev_err(hdev->dev,
drivers/misc/habanalabs/firmware_if.c+4−18
@@ -24,7 +24,7 @@ int hl_fw_push_fw_to_device(struct hl_device *hdev, const char *fw_name, · 23 unmodified lines
2424 {
2525 const struct firmware *fw;
2626 const u64 *fw_data;
27− size_t fw_size, i;
27+ size_t fw_size;
2828 int rc;
2929
3030 rc = request_firmware(&fw, fw_name, hdev->dev);
@@ -45,22 +45,7 @@ int hl_fw_push_fw_to_device(struct hl_device *hdev, const char *fw_name, · 14 unmodified lines
4545
4646 fw_data = (const u64 *) fw->data;
4747
48− if ((fw->size % 8) != 0)
49− fw_size -= 8;
50−
51− for (i = 0 ; i < fw_size ; i += 8, fw_data++, dst += 8) {
52− if (!(i & (0x80000 - 1))) {
53− dev_dbg(hdev->dev,
54− "copied so far %zu out of %zu for %s firmware",
55− i, fw_size, fw_name);
56− usleep_range(20, 100);
57− }
58−
59− writeq(*fw_data, dst);
60− }
61−
62− if ((fw->size % 8) != 0)
63− writel(*(const u32 *) fw_data, dst);
48+ memcpy_toio(dst, fw_data, fw_size);
6449
6550 out:
6651 release_firmware(fw);
@@ -112,7 +97,8 @@ int hl_fw_send_cpu_message(struct hl_device *hdev, u32 hw_queue_id, u32 *msg, · 45 unmodified lines
11297 }
11398
11499 rc = hl_poll_timeout_memory(hdev, &pkt->fence, tmp,
115− (tmp == ARMCP_PACKET_FENCE_VAL), 1000, timeout);
100+ (tmp == ARMCP_PACKET_FENCE_VAL), 1000,
101+ timeout, true);
116102
117103 hl_hw_queue_inc_ci_kernel(hdev, hw_queue_id);
118104
drivers/misc/habanalabs/goya/goya.c+3−2
@@ -2864,7 +2864,8 @@ static int goya_send_job_on_qman0(struct hl_device *hdev, struct hl_cs_job *job) · 2863 unmodified lines
28642864 }
28652865
28662866 rc = hl_poll_timeout_memory(hdev, fence_ptr, tmp,
2867− (tmp == GOYA_QMAN0_FENCE_VAL), 1000, timeout);
2867+ (tmp == GOYA_QMAN0_FENCE_VAL), 1000,
2868+ timeout, true);
28682869
28692870 hl_hw_queue_inc_ci_kernel(hdev, GOYA_QUEUE_ID_DMA_0);
28702871
@@ -2945,7 +2946,7 @@ int goya_test_queue(struct hl_device *hdev, u32 hw_queue_id) · 74 unmodified lines
29452946 }
29462947
29472948 rc = hl_poll_timeout_memory(hdev, fence_ptr, tmp, (tmp == fence_val),
2948− 1000, GOYA_TEST_QUEUE_WAIT_USEC);
2949+ 1000, GOYA_TEST_QUEUE_WAIT_USEC, true);
29492950
29502951 hl_hw_queue_inc_ci_kernel(hdev, hw_queue_id);
29512952
drivers/misc/habanalabs/habanalabs.h+14−2
@@ -1062,9 +1062,17 @@ void hl_wreg(struct hl_device *hdev, u32 reg, u32 val); · 1061 unmodified lines
10621062 /*
10631063 * address in this macro points always to a memory location in the
10641064 * host's (server's) memory. That location is updated asynchronously
1065− * either by the direct access of the device or by another core
1065+ * either by the direct access of the device or by another core.
1066+ *
1067+ * To work both in LE and BE architectures, we need to distinguish between the
1068+ * two states (device or another core updates the memory location). Therefore,
1069+ * if mem_written_by_device is true, the host memory being polled will be
1070+ * updated directly by the device. If false, the host memory being polled will
1071+ * be updated by host CPU. Required so host knows whether or not the memory
1072+ * might need to be byte-swapped before returning value to caller.
10661073 */
1067−#define hl_poll_timeout_memory(hdev, addr, val, cond, sleep_us, timeout_us) \
1074+#define hl_poll_timeout_memory(hdev, addr, val, cond, sleep_us, timeout_us, \
1075+ mem_written_by_device) \
10681076 ({ \
10691077 ktime_t __timeout; \
10701078 /* timeout should be longer when working with simulator */ \
@@ -1077,10 +1085,14 @@ void hl_wreg(struct hl_device *hdev, u32 reg, u32 val); · 6 unmodified lines
10771085 /* Verify we read updates done by other cores or by device */ \
10781086 mb(); \
10791087 (val) = *((u32 *) (uintptr_t) (addr)); \
1088+ if (mem_written_by_device) \
1089+ (val) = le32_to_cpu(val); \
10801090 if (cond) \
10811091 break; \
10821092 if (timeout_us && ktime_compare(ktime_get(), __timeout) > 0) { \
10831093 (val) = *((u32 *) (uintptr_t) (addr)); \
1094+ if (mem_written_by_device) \
1095+ (val) = le32_to_cpu(val); \
10841096 break; \
10851097 } \
10861098 if (sleep_us) \
drivers/nvmem/nvmem-sysfs.c+11−4
@@ -224,10 +224,17 @@ int nvmem_sysfs_setup_compat(struct nvmem_device *nvmem, · 223 unmodified lines
224224 if (!config->base_dev)
225225 return -EINVAL;
226226
227− if (nvmem->read_only)
228− nvmem->eeprom = bin_attr_ro_root_nvmem;
229− else
230− nvmem->eeprom = bin_attr_rw_root_nvmem;
227+ if (nvmem->read_only) {
228+ if (config->root_only)
229+ nvmem->eeprom = bin_attr_ro_root_nvmem;
230+ else
231+ nvmem->eeprom = bin_attr_ro_nvmem;
232+ } else {
233+ if (config->root_only)
234+ nvmem->eeprom = bin_attr_rw_root_nvmem;
235+ else
236+ nvmem->eeprom = bin_attr_rw_nvmem;
237+ }
231238 nvmem->eeprom.attr.name = "eeprom";
232239 nvmem->eeprom.size = nvmem->size;
233240 #ifdef CONFIG_DEBUG_LOCK_ALLOC

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t