forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/scsi/hisi_sas/hisi_sas.h
....@@ -1,72 +1,95 @@
1
+/* SPDX-License-Identifier: GPL-2.0-or-later */
12 /*
23 * Copyright (c) 2015 Linaro Ltd.
34 * Copyright (c) 2015 Hisilicon Limited.
4
- *
5
- * This program is free software; you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation; either version 2 of the License, or
8
- * (at your option) any later version.
9
- *
105 */
116
127 #ifndef _HISI_SAS_H_
138 #define _HISI_SAS_H_
149
1510 #include <linux/acpi.h>
11
+#include <linux/blk-mq.h>
12
+#include <linux/blk-mq-pci.h>
1613 #include <linux/clk.h>
14
+#include <linux/debugfs.h>
1715 #include <linux/dmapool.h>
1816 #include <linux/iopoll.h>
1917 #include <linux/lcm.h>
18
+#include <linux/libata.h>
2019 #include <linux/mfd/syscon.h>
2120 #include <linux/module.h>
2221 #include <linux/of_address.h>
2322 #include <linux/pci.h>
2423 #include <linux/platform_device.h>
24
+#include <linux/pm_runtime.h>
2525 #include <linux/property.h>
2626 #include <linux/regmap.h>
27
+#include <linux/timer.h>
2728 #include <scsi/sas_ata.h>
2829 #include <scsi/libsas.h>
2930
3031 #define HISI_SAS_MAX_PHYS 9
3132 #define HISI_SAS_MAX_QUEUES 32
32
-#define HISI_SAS_QUEUE_SLOTS 512
33
+#define HISI_SAS_QUEUE_SLOTS 4096
3334 #define HISI_SAS_MAX_ITCT_ENTRIES 1024
3435 #define HISI_SAS_MAX_DEVICES HISI_SAS_MAX_ITCT_ENTRIES
3536 #define HISI_SAS_RESET_BIT 0
3637 #define HISI_SAS_REJECT_CMD_BIT 1
38
+#define HISI_SAS_PM_BIT 2
39
+#define HISI_SAS_MAX_COMMANDS (HISI_SAS_QUEUE_SLOTS)
40
+#define HISI_SAS_RESERVED_IPTT 96
41
+#define HISI_SAS_UNRESERVED_IPTT \
42
+ (HISI_SAS_MAX_COMMANDS - HISI_SAS_RESERVED_IPTT)
43
+
44
+#define HISI_SAS_IOST_ITCT_CACHE_NUM 64
45
+#define HISI_SAS_IOST_ITCT_CACHE_DW_SZ 10
3746
3847 #define HISI_SAS_STATUS_BUF_SZ (sizeof(struct hisi_sas_status_buffer))
3948 #define HISI_SAS_COMMAND_TABLE_SZ (sizeof(union hisi_sas_command_table))
4049
4150 #define hisi_sas_status_buf_addr(buf) \
42
- (buf + offsetof(struct hisi_sas_slot_buf_table, status_buffer))
43
-#define hisi_sas_status_buf_addr_mem(slot) hisi_sas_status_buf_addr(slot->buf)
51
+ ((buf) + offsetof(struct hisi_sas_slot_buf_table, status_buffer))
52
+#define hisi_sas_status_buf_addr_mem(slot) hisi_sas_status_buf_addr((slot)->buf)
4453 #define hisi_sas_status_buf_addr_dma(slot) \
45
- hisi_sas_status_buf_addr(slot->buf_dma)
54
+ hisi_sas_status_buf_addr((slot)->buf_dma)
4655
4756 #define hisi_sas_cmd_hdr_addr(buf) \
48
- (buf + offsetof(struct hisi_sas_slot_buf_table, command_header))
49
-#define hisi_sas_cmd_hdr_addr_mem(slot) hisi_sas_cmd_hdr_addr(slot->buf)
50
-#define hisi_sas_cmd_hdr_addr_dma(slot) hisi_sas_cmd_hdr_addr(slot->buf_dma)
57
+ ((buf) + offsetof(struct hisi_sas_slot_buf_table, command_header))
58
+#define hisi_sas_cmd_hdr_addr_mem(slot) hisi_sas_cmd_hdr_addr((slot)->buf)
59
+#define hisi_sas_cmd_hdr_addr_dma(slot) hisi_sas_cmd_hdr_addr((slot)->buf_dma)
5160
5261 #define hisi_sas_sge_addr(buf) \
53
- (buf + offsetof(struct hisi_sas_slot_buf_table, sge_page))
54
-#define hisi_sas_sge_addr_mem(slot) hisi_sas_sge_addr(slot->buf)
55
-#define hisi_sas_sge_addr_dma(slot) hisi_sas_sge_addr(slot->buf_dma)
62
+ ((buf) + offsetof(struct hisi_sas_slot_buf_table, sge_page))
63
+#define hisi_sas_sge_addr_mem(slot) hisi_sas_sge_addr((slot)->buf)
64
+#define hisi_sas_sge_addr_dma(slot) hisi_sas_sge_addr((slot)->buf_dma)
65
+
66
+#define hisi_sas_sge_dif_addr(buf) \
67
+ ((buf) + offsetof(struct hisi_sas_slot_dif_buf_table, sge_dif_page))
68
+#define hisi_sas_sge_dif_addr_mem(slot) hisi_sas_sge_dif_addr((slot)->buf)
69
+#define hisi_sas_sge_dif_addr_dma(slot) hisi_sas_sge_dif_addr((slot)->buf_dma)
5670
5771 #define HISI_SAS_MAX_SSP_RESP_SZ (sizeof(struct ssp_frame_hdr) + 1024)
5872 #define HISI_SAS_MAX_SMP_RESP_SZ 1028
5973 #define HISI_SAS_MAX_STP_RESP_SZ 28
60
-
61
-#define DEV_IS_EXPANDER(type) \
62
- ((type == SAS_EDGE_EXPANDER_DEVICE) || \
63
- (type == SAS_FANOUT_EXPANDER_DEVICE))
6474
6575 #define HISI_SAS_SATA_PROTOCOL_NONDATA 0x1
6676 #define HISI_SAS_SATA_PROTOCOL_PIO 0x2
6777 #define HISI_SAS_SATA_PROTOCOL_DMA 0x4
6878 #define HISI_SAS_SATA_PROTOCOL_FPDMA 0x8
6979 #define HISI_SAS_SATA_PROTOCOL_ATAPI 0x10
80
+
81
+#define HISI_SAS_DIF_PROT_MASK (SHOST_DIF_TYPE1_PROTECTION | \
82
+ SHOST_DIF_TYPE2_PROTECTION | \
83
+ SHOST_DIF_TYPE3_PROTECTION)
84
+
85
+#define HISI_SAS_DIX_PROT_MASK (SHOST_DIX_TYPE1_PROTECTION | \
86
+ SHOST_DIX_TYPE2_PROTECTION | \
87
+ SHOST_DIX_TYPE3_PROTECTION)
88
+
89
+#define HISI_SAS_PROT_MASK (HISI_SAS_DIF_PROT_MASK | HISI_SAS_DIX_PROT_MASK)
90
+
91
+#define HISI_SAS_WAIT_PHYUP_TIMEOUT 20
92
+#define CLEAR_ITCT_TIMEOUT 20
7093
7194 struct hisi_hba;
7295
....@@ -76,8 +99,8 @@
7699 };
77100
78101 enum dev_status {
102
+ HISI_SAS_DEV_INIT,
79103 HISI_SAS_DEV_NORMAL,
80
- HISI_SAS_DEV_EH,
81104 };
82105
83106 enum {
....@@ -117,7 +140,6 @@
117140
118141 #define HISI_SAS_DECLARE_RST_WORK_ON_STACK(r) \
119142 DECLARE_COMPLETION_ONSTACK(c); \
120
- DECLARE_WORK(w, hisi_sas_sync_rst_work_handler); \
121143 struct hisi_sas_rst r = HISI_SAS_RST_WORK_INIT(r, c)
122144
123145 enum hisi_sas_bit_err_type {
....@@ -138,6 +160,7 @@
138160 struct asd_sas_phy sas_phy;
139161 struct sas_identify identify;
140162 struct completion *reset_completion;
163
+ struct timer_list timer;
141164 spinlock_t lock;
142165 u64 port_id; /* from hw */
143166 u64 frame_rcvd_size;
....@@ -146,8 +169,11 @@
146169 u8 in_reset;
147170 u8 reserved[2];
148171 u32 phy_type;
172
+ u32 code_violation_err_count;
149173 enum sas_linkrate minimum_linkrate;
150174 enum sas_linkrate maximum_linkrate;
175
+ int enable;
176
+ atomic_t down_cnt;
151177 };
152178
153179 struct hisi_sas_port {
....@@ -158,9 +184,10 @@
158184
159185 struct hisi_sas_cq {
160186 struct hisi_hba *hisi_hba;
161
- struct tasklet_struct tasklet;
187
+ const struct cpumask *irq_mask;
162188 int rd_point;
163189 int id;
190
+ int irq_no;
164191 };
165192
166193 struct hisi_sas_dq {
....@@ -178,9 +205,10 @@
178205 struct hisi_sas_dq *dq;
179206 struct list_head list;
180207 enum sas_device_type dev_type;
208
+ enum dev_status dev_status;
181209 int device_id;
182210 int sata_idx;
183
- u8 dev_status;
211
+ spinlock_t lock; /* For protecting slots */
184212 };
185213
186214 struct hisi_sas_tmf_task {
....@@ -196,12 +224,14 @@
196224 struct sas_task *task;
197225 struct hisi_sas_port *port;
198226 u64 n_elem;
227
+ u64 n_elem_dif;
199228 int dlvry_queue;
200229 int dlvry_queue_slot;
201230 int cmplt_queue;
202231 int cmplt_queue_slot;
203232 int abort;
204233 int ready;
234
+ int device_id;
205235 void *cmd_hdr;
206236 dma_addr_t cmd_hdr_dma;
207237 struct timer_list internal_abort_timer;
....@@ -210,18 +240,84 @@
210240 /* Do not reorder/change members after here */
211241 void *buf;
212242 dma_addr_t buf_dma;
213
- int idx;
243
+ u16 idx;
244
+};
245
+
246
+#define HISI_SAS_DEBUGFS_REG(x) {#x, x}
247
+
248
+struct hisi_sas_debugfs_reg_lu {
249
+ char *name;
250
+ int off;
251
+};
252
+
253
+struct hisi_sas_debugfs_reg {
254
+ const struct hisi_sas_debugfs_reg_lu *lu;
255
+ int count;
256
+ int base_off;
257
+ union {
258
+ u32 (*read_global_reg)(struct hisi_hba *hisi_hba, u32 off);
259
+ u32 (*read_port_reg)(struct hisi_hba *hisi_hba, int port,
260
+ u32 off);
261
+ };
262
+};
263
+
264
+struct hisi_sas_iost_itct_cache {
265
+ u32 data[HISI_SAS_IOST_ITCT_CACHE_DW_SZ];
266
+};
267
+
268
+enum hisi_sas_debugfs_reg_array_member {
269
+ DEBUGFS_GLOBAL = 0,
270
+ DEBUGFS_AXI,
271
+ DEBUGFS_RAS,
272
+ DEBUGFS_REGS_NUM
273
+};
274
+
275
+enum hisi_sas_debugfs_cache_type {
276
+ HISI_SAS_ITCT_CACHE,
277
+ HISI_SAS_IOST_CACHE,
278
+};
279
+
280
+enum hisi_sas_debugfs_bist_ffe_cfg {
281
+ FFE_SAS_1_5_GBPS,
282
+ FFE_SAS_3_0_GBPS,
283
+ FFE_SAS_6_0_GBPS,
284
+ FFE_SAS_12_0_GBPS,
285
+ FFE_RESV,
286
+ FFE_SATA_1_5_GBPS,
287
+ FFE_SATA_3_0_GBPS,
288
+ FFE_SATA_6_0_GBPS,
289
+ FFE_CFG_MAX
290
+};
291
+
292
+enum hisi_sas_debugfs_bist_fixed_code {
293
+ FIXED_CODE,
294
+ FIXED_CODE_1,
295
+ FIXED_CODE_MAX
296
+};
297
+
298
+enum {
299
+ HISI_SAS_BIST_CODE_MODE_PRBS7,
300
+ HISI_SAS_BIST_CODE_MODE_PRBS23,
301
+ HISI_SAS_BIST_CODE_MODE_PRBS31,
302
+ HISI_SAS_BIST_CODE_MODE_JTPAT,
303
+ HISI_SAS_BIST_CODE_MODE_CJTPAT,
304
+ HISI_SAS_BIST_CODE_MODE_SCRAMBED_0,
305
+ HISI_SAS_BIST_CODE_MODE_TRAIN,
306
+ HISI_SAS_BIST_CODE_MODE_TRAIN_DONE,
307
+ HISI_SAS_BIST_CODE_MODE_HFTP,
308
+ HISI_SAS_BIST_CODE_MODE_MFTP,
309
+ HISI_SAS_BIST_CODE_MODE_LFTP,
310
+ HISI_SAS_BIST_CODE_MODE_FIXED_DATA,
214311 };
215312
216313 struct hisi_sas_hw {
217314 int (*hw_init)(struct hisi_hba *hisi_hba);
218315 void (*setup_itct)(struct hisi_hba *hisi_hba,
219316 struct hisi_sas_device *device);
220
- int (*slot_index_alloc)(struct hisi_hba *hisi_hba, int *slot_idx,
317
+ int (*slot_index_alloc)(struct hisi_hba *hisi_hba,
221318 struct domain_device *device);
222319 struct hisi_sas_device *(*alloc_dev)(struct domain_device *device);
223320 void (*sl_notify_ssp)(struct hisi_hba *hisi_hba, int phy_no);
224
- int (*get_free_slot)(struct hisi_hba *hisi_hba, struct hisi_sas_dq *dq);
225321 void (*start_delivery)(struct hisi_sas_dq *dq);
226322 void (*prep_ssp)(struct hisi_hba *hisi_hba,
227323 struct hisi_sas_slot *slot);
....@@ -232,8 +328,6 @@
232328 void (*prep_abort)(struct hisi_hba *hisi_hba,
233329 struct hisi_sas_slot *slot,
234330 int device_id, int abort_flag, int tag_to_abort);
235
- int (*slot_complete)(struct hisi_hba *hisi_hba,
236
- struct hisi_sas_slot *slot);
237331 void (*phys_init)(struct hisi_hba *hisi_hba);
238332 void (*phy_start)(struct hisi_hba *hisi_hba, int phy_no);
239333 void (*phy_disable)(struct hisi_hba *hisi_hba, int phy_no);
....@@ -242,8 +336,8 @@
242336 void (*phy_set_linkrate)(struct hisi_hba *hisi_hba, int phy_no,
243337 struct sas_phy_linkrates *linkrates);
244338 enum sas_linkrate (*phy_get_max_linkrate)(void);
245
- void (*clear_itct)(struct hisi_hba *hisi_hba,
246
- struct hisi_sas_device *dev);
339
+ int (*clear_itct)(struct hisi_hba *hisi_hba,
340
+ struct hisi_sas_device *dev);
247341 void (*free_device)(struct hisi_sas_device *sas_dev);
248342 int (*get_wideport_bitmap)(struct hisi_hba *hisi_hba, int port_id);
249343 void (*dereg_device)(struct hisi_hba *hisi_hba,
....@@ -254,9 +348,55 @@
254348 u8 reg_index, u8 reg_count, u8 *write_data);
255349 void (*wait_cmds_complete_timeout)(struct hisi_hba *hisi_hba,
256350 int delay_ms, int timeout_ms);
257
- int max_command_entries;
351
+ void (*snapshot_prepare)(struct hisi_hba *hisi_hba);
352
+ void (*snapshot_restore)(struct hisi_hba *hisi_hba);
353
+ int (*set_bist)(struct hisi_hba *hisi_hba, bool enable);
354
+ void (*read_iost_itct_cache)(struct hisi_hba *hisi_hba,
355
+ enum hisi_sas_debugfs_cache_type type,
356
+ u32 *cache);
258357 int complete_hdr_size;
259358 struct scsi_host_template *sht;
359
+
360
+ const struct hisi_sas_debugfs_reg *debugfs_reg_array[DEBUGFS_REGS_NUM];
361
+ const struct hisi_sas_debugfs_reg *debugfs_reg_port;
362
+};
363
+
364
+#define HISI_SAS_MAX_DEBUGFS_DUMP (50)
365
+
366
+struct hisi_sas_debugfs_cq {
367
+ struct hisi_sas_cq *cq;
368
+ void *complete_hdr;
369
+};
370
+
371
+struct hisi_sas_debugfs_dq {
372
+ struct hisi_sas_dq *dq;
373
+ struct hisi_sas_cmd_hdr *hdr;
374
+};
375
+
376
+struct hisi_sas_debugfs_regs {
377
+ struct hisi_hba *hisi_hba;
378
+ u32 *data;
379
+};
380
+
381
+struct hisi_sas_debugfs_port {
382
+ struct hisi_sas_phy *phy;
383
+ u32 *data;
384
+};
385
+
386
+struct hisi_sas_debugfs_iost {
387
+ struct hisi_sas_iost *iost;
388
+};
389
+
390
+struct hisi_sas_debugfs_itct {
391
+ struct hisi_sas_itct *itct;
392
+};
393
+
394
+struct hisi_sas_debugfs_iost_cache {
395
+ struct hisi_sas_iost_itct_cache *cache;
396
+};
397
+
398
+struct hisi_sas_debugfs_itct_cache {
399
+ struct hisi_sas_iost_itct_cache *cache;
260400 };
261401
262402 struct hisi_hba {
....@@ -266,6 +406,8 @@
266406 struct platform_device *platform_dev;
267407 struct pci_dev *pci_dev;
268408 struct device *dev;
409
+
410
+ int prot_mask;
269411
270412 void __iomem *regs;
271413 void __iomem *sgpio_regs;
....@@ -320,7 +462,39 @@
320462 const struct hisi_sas_hw *hw; /* Low level hw interface */
321463 unsigned long sata_dev_bitmap[BITS_TO_LONGS(HISI_SAS_MAX_DEVICES)];
322464 struct work_struct rst_work;
465
+ struct work_struct debugfs_work;
323466 u32 phy_state;
467
+ u32 intr_coal_ticks; /* Time of interrupt coalesce in us */
468
+ u32 intr_coal_count; /* Interrupt count to coalesce */
469
+
470
+ int cq_nvecs;
471
+
472
+ /* bist */
473
+ enum sas_linkrate debugfs_bist_linkrate;
474
+ int debugfs_bist_code_mode;
475
+ int debugfs_bist_phy_no;
476
+ int debugfs_bist_mode;
477
+ u32 debugfs_bist_cnt;
478
+ int debugfs_bist_enable;
479
+ u32 debugfs_bist_ffe[HISI_SAS_MAX_PHYS][FFE_CFG_MAX];
480
+ u32 debugfs_bist_fixed_code[FIXED_CODE_MAX];
481
+
482
+ /* debugfs memories */
483
+ /* Put Global AXI and RAS Register into register array */
484
+ struct hisi_sas_debugfs_regs debugfs_regs[HISI_SAS_MAX_DEBUGFS_DUMP][DEBUGFS_REGS_NUM];
485
+ struct hisi_sas_debugfs_port debugfs_port_reg[HISI_SAS_MAX_DEBUGFS_DUMP][HISI_SAS_MAX_PHYS];
486
+ struct hisi_sas_debugfs_cq debugfs_cq[HISI_SAS_MAX_DEBUGFS_DUMP][HISI_SAS_MAX_QUEUES];
487
+ struct hisi_sas_debugfs_dq debugfs_dq[HISI_SAS_MAX_DEBUGFS_DUMP][HISI_SAS_MAX_QUEUES];
488
+ struct hisi_sas_debugfs_iost debugfs_iost[HISI_SAS_MAX_DEBUGFS_DUMP];
489
+ struct hisi_sas_debugfs_itct debugfs_itct[HISI_SAS_MAX_DEBUGFS_DUMP];
490
+ struct hisi_sas_debugfs_iost_cache debugfs_iost_cache[HISI_SAS_MAX_DEBUGFS_DUMP];
491
+ struct hisi_sas_debugfs_itct_cache debugfs_itct_cache[HISI_SAS_MAX_DEBUGFS_DUMP];
492
+
493
+ u64 debugfs_timestamp[HISI_SAS_MAX_DEBUGFS_DUMP];
494
+ int debugfs_dump_index;
495
+ struct dentry *debugfs_dir;
496
+ struct dentry *debugfs_dump_dentry;
497
+ struct dentry *debugfs_bist_dentry;
324498 };
325499
326500 /* Generic HW DMA host memory structures */
....@@ -414,9 +588,14 @@
414588 u8 atapi_cdb[ATAPI_CDB_LEN];
415589 };
416590
417
-#define HISI_SAS_SGE_PAGE_CNT SG_CHUNK_SIZE
591
+#define HISI_SAS_SGE_PAGE_CNT (124)
418592 struct hisi_sas_sge_page {
419593 struct hisi_sas_sge sge[HISI_SAS_SGE_PAGE_CNT];
594
+} __aligned(16);
595
+
596
+#define HISI_SAS_SGE_DIF_PAGE_CNT HISI_SAS_SGE_PAGE_CNT
597
+struct hisi_sas_sge_dif_page {
598
+ struct hisi_sas_sge sge[HISI_SAS_SGE_DIF_PAGE_CNT];
420599 } __aligned(16);
421600
422601 struct hisi_sas_command_table_ssp {
....@@ -449,16 +628,25 @@
449628 struct hisi_sas_sge_page sge_page;
450629 };
451630
631
+struct hisi_sas_slot_dif_buf_table {
632
+ struct hisi_sas_slot_buf_table slot_buf;
633
+ struct hisi_sas_sge_dif_page sge_dif_page;
634
+};
635
+
452636 extern struct scsi_transport_template *hisi_sas_stt;
637
+
638
+extern bool hisi_sas_debugfs_enable;
639
+extern u32 hisi_sas_debugfs_dump_count;
640
+extern struct dentry *hisi_sas_debugfs_dir;
641
+
453642 extern void hisi_sas_stop_phys(struct hisi_hba *hisi_hba);
454
-extern int hisi_sas_alloc(struct hisi_hba *hisi_hba, struct Scsi_Host *shost);
643
+extern int hisi_sas_alloc(struct hisi_hba *hisi_hba);
455644 extern void hisi_sas_free(struct hisi_hba *hisi_hba);
456645 extern u8 hisi_sas_get_ata_protocol(struct host_to_dev_fis *fis,
457646 int direction);
458647 extern struct hisi_sas_port *to_hisi_sas_port(struct asd_sas_port *sas_port);
459648 extern void hisi_sas_sata_done(struct sas_task *task,
460649 struct hisi_sas_slot *slot);
461
-extern int hisi_sas_get_ncq_tag(struct sas_task *task, u32 *tag);
462650 extern int hisi_sas_get_fw_info(struct hisi_hba *hisi_hba);
463651 extern int hisi_sas_probe(struct platform_device *pdev,
464652 const struct hisi_sas_hw *ops);
....@@ -467,8 +655,9 @@
467655 extern int hisi_sas_slave_configure(struct scsi_device *sdev);
468656 extern int hisi_sas_scan_finished(struct Scsi_Host *shost, unsigned long time);
469657 extern void hisi_sas_scan_start(struct Scsi_Host *shost);
470
-extern struct device_attribute *host_attrs[];
471658 extern int hisi_sas_host_reset(struct Scsi_Host *shost, int reset_type);
659
+extern void hisi_sas_phy_enable(struct hisi_hba *hisi_hba, int phy_no,
660
+ int enable);
472661 extern void hisi_sas_phy_down(struct hisi_hba *hisi_hba, int phy_no, int rdy);
473662 extern void hisi_sas_slot_task_free(struct hisi_hba *hisi_hba,
474663 struct sas_task *task,
....@@ -476,11 +665,15 @@
476665 extern void hisi_sas_init_mem(struct hisi_hba *hisi_hba);
477666 extern void hisi_sas_rst_work_handler(struct work_struct *work);
478667 extern void hisi_sas_sync_rst_work_handler(struct work_struct *work);
479
-extern void hisi_sas_kill_tasklets(struct hisi_hba *hisi_hba);
668
+extern void hisi_sas_sync_irqs(struct hisi_hba *hisi_hba);
669
+extern void hisi_sas_phy_oob_ready(struct hisi_hba *hisi_hba, int phy_no);
480670 extern bool hisi_sas_notify_phy_event(struct hisi_sas_phy *phy,
481671 enum hisi_sas_phy_event event);
482672 extern void hisi_sas_release_tasks(struct hisi_hba *hisi_hba);
483673 extern u8 hisi_sas_get_prog_phy_linkrate_mask(enum sas_linkrate max);
484674 extern void hisi_sas_controller_reset_prepare(struct hisi_hba *hisi_hba);
485675 extern void hisi_sas_controller_reset_done(struct hisi_hba *hisi_hba);
676
+extern void hisi_sas_debugfs_init(struct hisi_hba *hisi_hba);
677
+extern void hisi_sas_debugfs_exit(struct hisi_hba *hisi_hba);
678
+extern void hisi_sas_debugfs_work_handler(struct work_struct *work);
486679 #endif