forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/scsi/megaraid/megaraid_mbox.c
....@@ -1,13 +1,9 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 *
34 * Linux MegaRAID device driver
45 *
56 * Copyright (c) 2003-2004 LSI Logic Corporation.
6
- *
7
- * This program is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU General Public License
9
- * as published by the Free Software Foundation; either version
10
- * 2 of the License, or (at your option) any later version.
117 *
128 * FILE : megaraid_mbox.c
139 * Version : v2.20.5.1 (Nov 16 2006)
....@@ -37,7 +33,6 @@
3733 * Dell PERC 4e/Di 1028 0013 1028 0170
3834 * Dell PERC 4e/DC 1000 0408 1028 0002
3935 * Dell PERC 4e/SC 1000 0408 1028 0001
40
- *
4136 *
4237 * LSI MegaRAID SCSI 320-0 1000 1960 1000 A520
4338 * LSI MegaRAID SCSI 320-1 1000 1960 1000 0520
....@@ -202,13 +197,6 @@
202197 MODULE_PARM_DESC(debug_level, "Debug level for driver (default=0)");
203198
204199 /*
205
- * ### global data ###
206
- */
207
-static uint8_t megaraid_mbox_version[8] =
208
- { 0x02, 0x20, 0x04, 0x06, 3, 7, 20, 5 };
209
-
210
-
211
-/*
212200 * PCI table for all supported controllers.
213201 */
214202 static struct pci_device_id pci_id_table_g[] = {
....@@ -314,8 +302,8 @@
314302 // definitions for the device attributes for exporting logical drive number
315303 // for a scsi address (Host, Channel, Id, Lun)
316304
317
-DEVICE_ATTR(megaraid_mbox_app_hndl, S_IRUSR, megaraid_sysfs_show_app_hndl,
318
- NULL);
305
+static DEVICE_ATTR(megaraid_mbox_app_hndl, S_IRUSR, megaraid_sysfs_show_app_hndl,
306
+ NULL);
319307
320308 // Host template initializer for megaraid mbox sysfs device attributes
321309 static struct device_attribute *megaraid_shost_attrs[] = {
....@@ -324,7 +312,7 @@
324312 };
325313
326314
327
-DEVICE_ATTR(megaraid_mbox_ld, S_IRUSR, megaraid_sysfs_show_ldnum, NULL);
315
+static DEVICE_ATTR(megaraid_mbox_ld, S_IRUSR, megaraid_sysfs_show_ldnum, NULL);
328316
329317 // Host template initializer for megaraid mbox sysfs device attributes
330318 static struct device_attribute *megaraid_sdev_attrs[] = {
....@@ -343,7 +331,6 @@
343331 .eh_abort_handler = megaraid_abort_handler,
344332 .eh_host_reset_handler = megaraid_reset_handler,
345333 .change_queue_depth = scsi_change_queue_depth,
346
- .use_clustering = ENABLE_CLUSTERING,
347334 .no_write_same = 1,
348335 .sdev_attrs = megaraid_sdev_attrs,
349336 .shost_attrs = megaraid_shost_attrs,
....@@ -457,10 +444,9 @@
457444
458445 // Setup the default DMA mask. This would be changed later on
459446 // depending on hardware capabilities
460
- if (pci_set_dma_mask(adapter->pdev, DMA_BIT_MASK(32)) != 0) {
461
-
447
+ if (dma_set_mask(&adapter->pdev->dev, DMA_BIT_MASK(32))) {
462448 con_log(CL_ANN, (KERN_WARNING
463
- "megaraid: pci_set_dma_mask failed:%d\n", __LINE__));
449
+ "megaraid: dma_set_mask failed:%d\n", __LINE__));
464450
465451 goto out_free_adapter;
466452 }
....@@ -484,7 +470,7 @@
484470 // Start the mailbox based controller
485471 if (megaraid_init_mbox(adapter) != 0) {
486472 con_log(CL_ANN, (KERN_WARNING
487
- "megaraid: maibox adapter did not initialize\n"));
473
+ "megaraid: mailbox adapter did not initialize\n"));
488474
489475 goto out_free_adapter;
490476 }
....@@ -745,7 +731,7 @@
745731 goto out_free_raid_dev;
746732 }
747733
748
- raid_dev->baseaddr = ioremap_nocache(raid_dev->baseport, 128);
734
+ raid_dev->baseaddr = ioremap(raid_dev->baseport, 128);
749735
750736 if (!raid_dev->baseaddr) {
751737
....@@ -878,11 +864,12 @@
878864 adapter->pdev->device == PCI_DEVICE_ID_PERC4_DI_EVERGLADES) ||
879865 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL &&
880866 adapter->pdev->device == PCI_DEVICE_ID_PERC4E_DI_KOBUK)) {
881
- if (pci_set_dma_mask(adapter->pdev, DMA_BIT_MASK(64))) {
867
+ if (dma_set_mask(&adapter->pdev->dev, DMA_BIT_MASK(64))) {
882868 con_log(CL_ANN, (KERN_WARNING
883869 "megaraid: DMA mask for 64-bit failed\n"));
884870
885
- if (pci_set_dma_mask (adapter->pdev, DMA_BIT_MASK(32))) {
871
+ if (dma_set_mask(&adapter->pdev->dev,
872
+ DMA_BIT_MASK(32))) {
886873 con_log(CL_ANN, (KERN_WARNING
887874 "megaraid: 32-bit DMA mask failed\n"));
888875 goto out_free_sysfs_res;
....@@ -950,7 +937,7 @@
950937 * megaraid_alloc_cmd_packets - allocate shared mailbox
951938 * @adapter : soft state of the raid controller
952939 *
953
- * Allocate and align the shared mailbox. This maibox is used to issue
940
+ * Allocate and align the shared mailbox. This mailbox is used to issue
954941 * all the commands. For IO based controllers, the mailbox is also registered
955942 * with the FW. Allocate memory for all commands as well.
956943 * This is our big allocator.
....@@ -975,9 +962,10 @@
975962 * Allocate the common 16-byte aligned memory for the handshake
976963 * mailbox.
977964 */
978
- raid_dev->una_mbox64 = pci_zalloc_consistent(adapter->pdev,
979
- sizeof(mbox64_t),
980
- &raid_dev->una_mbox64_dma);
965
+ raid_dev->una_mbox64 = dma_alloc_coherent(&adapter->pdev->dev,
966
+ sizeof(mbox64_t),
967
+ &raid_dev->una_mbox64_dma,
968
+ GFP_KERNEL);
981969
982970 if (!raid_dev->una_mbox64) {
983971 con_log(CL_ANN, (KERN_WARNING
....@@ -1003,8 +991,8 @@
1003991 align;
1004992
1005993 // Allocate memory for commands issued internally
1006
- adapter->ibuf = pci_zalloc_consistent(pdev, MBOX_IBUF_SIZE,
1007
- &adapter->ibuf_dma_h);
994
+ adapter->ibuf = dma_alloc_coherent(&pdev->dev, MBOX_IBUF_SIZE,
995
+ &adapter->ibuf_dma_h, GFP_KERNEL);
1008996 if (!adapter->ibuf) {
1009997
1010998 con_log(CL_ANN, (KERN_WARNING
....@@ -1082,7 +1070,7 @@
10821070
10831071 scb->scp = NULL;
10841072 scb->state = SCB_FREE;
1085
- scb->dma_direction = PCI_DMA_NONE;
1073
+ scb->dma_direction = DMA_NONE;
10861074 scb->dma_type = MRAID_DMA_NONE;
10871075 scb->dev_channel = -1;
10881076 scb->dev_target = -1;
....@@ -1098,10 +1086,10 @@
10981086 out_free_scb_list:
10991087 kfree(adapter->kscb_list);
11001088 out_free_ibuf:
1101
- pci_free_consistent(pdev, MBOX_IBUF_SIZE, (void *)adapter->ibuf,
1089
+ dma_free_coherent(&pdev->dev, MBOX_IBUF_SIZE, (void *)adapter->ibuf,
11021090 adapter->ibuf_dma_h);
11031091 out_free_common_mbox:
1104
- pci_free_consistent(adapter->pdev, sizeof(mbox64_t),
1092
+ dma_free_coherent(&adapter->pdev->dev, sizeof(mbox64_t),
11051093 (caddr_t)raid_dev->una_mbox64, raid_dev->una_mbox64_dma);
11061094
11071095 return -1;
....@@ -1123,10 +1111,10 @@
11231111
11241112 kfree(adapter->kscb_list);
11251113
1126
- pci_free_consistent(adapter->pdev, MBOX_IBUF_SIZE,
1114
+ dma_free_coherent(&adapter->pdev->dev, MBOX_IBUF_SIZE,
11271115 (void *)adapter->ibuf, adapter->ibuf_dma_h);
11281116
1129
- pci_free_consistent(adapter->pdev, sizeof(mbox64_t),
1117
+ dma_free_coherent(&adapter->pdev->dev, sizeof(mbox64_t),
11301118 (caddr_t)raid_dev->una_mbox64, raid_dev->una_mbox64_dma);
11311119 return;
11321120 }
....@@ -1250,8 +1238,7 @@
12501238 dma_pool_free(raid_dev->sg_pool_handle, sg_pci_blk[i].vaddr,
12511239 sg_pci_blk[i].dma_addr);
12521240 }
1253
- if (raid_dev->sg_pool_handle)
1254
- dma_pool_destroy(raid_dev->sg_pool_handle);
1241
+ dma_pool_destroy(raid_dev->sg_pool_handle);
12551242
12561243
12571244 epthru_pci_blk = raid_dev->epthru_pool;
....@@ -1259,8 +1246,7 @@
12591246 dma_pool_free(raid_dev->epthru_pool_handle,
12601247 epthru_pci_blk[i].vaddr, epthru_pci_blk[i].dma_addr);
12611248 }
1262
- if (raid_dev->epthru_pool_handle)
1263
- dma_pool_destroy(raid_dev->epthru_pool_handle);
1249
+ dma_pool_destroy(raid_dev->epthru_pool_handle);
12641250
12651251
12661252 mbox_pci_blk = raid_dev->mbox_pool;
....@@ -1268,8 +1254,7 @@
12681254 dma_pool_free(raid_dev->mbox_pool_handle,
12691255 mbox_pci_blk[i].vaddr, mbox_pci_blk[i].dma_addr);
12701256 }
1271
- if (raid_dev->mbox_pool_handle)
1272
- dma_pool_destroy(raid_dev->mbox_pool_handle);
1257
+ dma_pool_destroy(raid_dev->mbox_pool_handle);
12731258
12741259 return;
12751260 }
....@@ -1427,12 +1412,6 @@
14271412 mbox->cmdid = scb->sno;
14281413
14291414 adapter->outstanding_cmds++;
1430
-
1431
- if (scb->dma_direction == PCI_DMA_TODEVICE)
1432
- pci_dma_sync_sg_for_device(adapter->pdev,
1433
- scsi_sglist(scb->scp),
1434
- scsi_sg_count(scb->scp),
1435
- PCI_DMA_TODEVICE);
14361415
14371416 mbox->busy = 1; // Set busy
14381417 mbox->poll = 0;
....@@ -1602,7 +1581,7 @@
16021581 return NULL;
16031582 }
16041583
1605
- /* Fall through */
1584
+ fallthrough;
16061585
16071586 case READ_CAPACITY:
16081587 /*
....@@ -2181,31 +2160,6 @@
21812160
21822161
21832162 /**
2184
- * megaraid_mbox_sync_scb - sync kernel buffers
2185
- * @adapter : controller's soft state
2186
- * @scb : pointer to the resource packet
2187
- *
2188
- * DMA sync if required.
2189
- */
2190
-static void
2191
-megaraid_mbox_sync_scb(adapter_t *adapter, scb_t *scb)
2192
-{
2193
- mbox_ccb_t *ccb;
2194
-
2195
- ccb = (mbox_ccb_t *)scb->ccb;
2196
-
2197
- if (scb->dma_direction == PCI_DMA_FROMDEVICE)
2198
- pci_dma_sync_sg_for_cpu(adapter->pdev,
2199
- scsi_sglist(scb->scp),
2200
- scsi_sg_count(scb->scp),
2201
- PCI_DMA_FROMDEVICE);
2202
-
2203
- scsi_dma_unmap(scb->scp);
2204
- return;
2205
-}
2206
-
2207
-
2208
-/**
22092163 * megaraid_mbox_dpc - the tasklet to complete the commands from completed list
22102164 * @devp : pointer to HBA soft state
22112165 *
....@@ -2403,9 +2357,7 @@
24032357 megaraid_mbox_display_scb(adapter, scb);
24042358 }
24052359
2406
- // Free our internal resources and call the mid-layer callback
2407
- // routine
2408
- megaraid_mbox_sync_scb(adapter, scb);
2360
+ scsi_dma_unmap(scp);
24092361
24102362 // remove from local clist
24112363 list_del_init(&scb->list);
....@@ -2577,7 +2529,6 @@
25772529 uint8_t raw_mbox[sizeof(mbox_t)];
25782530 int rval;
25792531 int recovery_window;
2580
- int recovering;
25812532 int i;
25822533 uioc_t *kioc;
25832534
....@@ -2590,7 +2541,6 @@
25902541 "megaraid: hw error, cannot reset\n"));
25912542 return FAILED;
25922543 }
2593
-
25942544
25952545 // Under exceptional conditions, FW can take up to 3 minutes to
25962546 // complete command processing. Wait for additional 2 minutes for the
....@@ -2639,8 +2589,6 @@
26392589 }
26402590
26412591 recovery_window = MBOX_RESET_WAIT + MBOX_RESET_EXT_WAIT;
2642
-
2643
- recovering = adapter->outstanding_cmds;
26442592
26452593 for (i = 0; i < recovery_window; i++) {
26462594
....@@ -2725,13 +2673,10 @@
27252673 mbox_post_sync_cmd(adapter_t *adapter, uint8_t raw_mbox[])
27262674 {
27272675 mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter);
2728
- mbox64_t *mbox64;
27292676 mbox_t *mbox;
27302677 uint8_t status;
27312678 int i;
27322679
2733
-
2734
- mbox64 = raid_dev->mbox64;
27352680 mbox = raid_dev->mbox;
27362681
27372682 /*
....@@ -2948,9 +2893,8 @@
29482893 * Issue an ENQUIRY3 command to find out certain adapter parameters,
29492894 * e.g., max channels, max commands etc.
29502895 */
2951
- pinfo = pci_zalloc_consistent(adapter->pdev, sizeof(mraid_pinfo_t),
2952
- &pinfo_dma_h);
2953
-
2896
+ pinfo = dma_alloc_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t),
2897
+ &pinfo_dma_h, GFP_KERNEL);
29542898 if (pinfo == NULL) {
29552899 con_log(CL_ANN, (KERN_WARNING
29562900 "megaraid: out of memory, %s %d\n", __func__,
....@@ -2971,7 +2915,7 @@
29712915
29722916 con_log(CL_ANN, (KERN_WARNING "megaraid: Inquiry3 failed\n"));
29732917
2974
- pci_free_consistent(adapter->pdev, sizeof(mraid_pinfo_t),
2918
+ dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t),
29752919 pinfo, pinfo_dma_h);
29762920
29772921 return -1;
....@@ -3002,7 +2946,7 @@
30022946 con_log(CL_ANN, (KERN_WARNING
30032947 "megaraid: product info failed\n"));
30042948
3005
- pci_free_consistent(adapter->pdev, sizeof(mraid_pinfo_t),
2949
+ dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t),
30062950 pinfo, pinfo_dma_h);
30072951
30082952 return -1;
....@@ -3038,7 +2982,7 @@
30382982 "megaraid: fw version:[%s] bios version:[%s]\n",
30392983 adapter->fw_version, adapter->bios_version));
30402984
3041
- pci_free_consistent(adapter->pdev, sizeof(mraid_pinfo_t), pinfo,
2985
+ dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), pinfo,
30422986 pinfo_dma_h);
30432987
30442988 return 0;
....@@ -3135,7 +3079,6 @@
31353079 static int
31363080 megaraid_mbox_support_random_del(adapter_t *adapter)
31373081 {
3138
- mbox_t *mbox;
31393082 uint8_t raw_mbox[sizeof(mbox_t)];
31403083 int rval;
31413084
....@@ -3156,8 +3099,6 @@
31563099 con_log(CL_DLEVEL1, ("megaraid: disable random deletion\n"));
31573100 return 0;
31583101 }
3159
-
3160
- mbox = (mbox_t *)raw_mbox;
31613102
31623103 memset((caddr_t)raw_mbox, 0, sizeof(mbox_t));
31633104
....@@ -3263,11 +3204,7 @@
32633204 static void
32643205 megaraid_mbox_flush_cache(adapter_t *adapter)
32653206 {
3266
- mbox_t *mbox;
32673207 uint8_t raw_mbox[sizeof(mbox_t)];
3268
-
3269
-
3270
- mbox = (mbox_t *)raw_mbox;
32713208
32723209 memset((caddr_t)raw_mbox, 0, sizeof(mbox_t));
32733210
....@@ -3299,7 +3236,6 @@
32993236 mbox_t *mbox;
33003237 uint8_t raw_mbox[sizeof(mbox_t)];
33013238 mraid_device_t *raid_dev = ADAP2RAIDDEV(adapter);
3302
- mbox64_t *mbox64;
33033239 int status = 0;
33043240 int i;
33053241 uint32_t dword;
....@@ -3310,7 +3246,6 @@
33103246
33113247 raw_mbox[0] = 0xFF;
33123248
3313
- mbox64 = raid_dev->mbox64;
33143249 mbox = raid_dev->mbox;
33153250
33163251 /* Wait until mailbox is free */
....@@ -3369,7 +3304,6 @@
33693304 * megaraid_mbox_display_scb - display SCB information, mostly debug purposes
33703305 * @adapter : controller's soft state
33713306 * @scb : SCB to be displayed
3372
- * @level : debug level for console print
33733307 *
33743308 * Diplay information about the given SCB iff the current debug level is
33753309 * verbose.
....@@ -3515,7 +3449,7 @@
35153449
35163450 scb->scp = NULL;
35173451 scb->state = SCB_FREE;
3518
- scb->dma_direction = PCI_DMA_NONE;
3452
+ scb->dma_direction = DMA_NONE;
35193453 scb->dma_type = MRAID_DMA_NONE;
35203454 scb->dev_channel = -1;
35213455 scb->dev_target = -1;
....@@ -3653,7 +3587,7 @@
36533587
36543588 scb->state = SCB_ACTIVE;
36553589 scb->dma_type = MRAID_DMA_NONE;
3656
- scb->dma_direction = PCI_DMA_NONE;
3590
+ scb->dma_direction = DMA_NONE;
36573591
36583592 ccb = (mbox_ccb_t *)scb->ccb;
36593593 mbox64 = (mbox64_t *)(unsigned long)kioc->cmdbuf;
....@@ -3794,10 +3728,6 @@
37943728 static int
37953729 gather_hbainfo(adapter_t *adapter, mraid_hba_info_t *hinfo)
37963730 {
3797
- uint8_t dmajor;
3798
-
3799
- dmajor = megaraid_mbox_version[0];
3800
-
38013731 hinfo->pci_vendor_id = adapter->pdev->vendor;
38023732 hinfo->pci_device_id = adapter->pdev->device;
38033733 hinfo->subsys_vendor_id = adapter->pdev->subsystem_vendor;
....@@ -3843,8 +3773,8 @@
38433773
38443774 raid_dev->sysfs_mbox64 = kmalloc(sizeof(mbox64_t), GFP_KERNEL);
38453775
3846
- raid_dev->sysfs_buffer = pci_alloc_consistent(adapter->pdev,
3847
- PAGE_SIZE, &raid_dev->sysfs_buffer_dma);
3776
+ raid_dev->sysfs_buffer = dma_alloc_coherent(&adapter->pdev->dev,
3777
+ PAGE_SIZE, &raid_dev->sysfs_buffer_dma, GFP_KERNEL);
38483778
38493779 if (!raid_dev->sysfs_uioc || !raid_dev->sysfs_mbox64 ||
38503780 !raid_dev->sysfs_buffer) {
....@@ -3881,7 +3811,7 @@
38813811 kfree(raid_dev->sysfs_mbox64);
38823812
38833813 if (raid_dev->sysfs_buffer) {
3884
- pci_free_consistent(adapter->pdev, PAGE_SIZE,
3814
+ dma_free_coherent(&adapter->pdev->dev, PAGE_SIZE,
38853815 raid_dev->sysfs_buffer, raid_dev->sysfs_buffer_dma);
38863816 }
38873817 }
....@@ -4041,7 +3971,8 @@
40413971
40423972 /**
40433973 * megaraid_sysfs_show_app_hndl - display application handle for this adapter
4044
- * @cdev : class device object representation for the host
3974
+ * @dev : class device object representation for the host
3975
+ * @attr : device attribute (unused)
40453976 * @buf : buffer to send data to
40463977 *
40473978 * Display the handle used by the applications while executing management