forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/ata/libata-transport.c
....@@ -1,6 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright 2008 ioogle, Inc. All rights reserved.
3
- * Released under GPL v2.
44 *
55 * Libata transport class.
66 *
....@@ -196,7 +196,7 @@
196196 { XFER_PIO_0, "XFER_PIO_0" },
197197 { XFER_PIO_SLOW, "XFER_PIO_SLOW" }
198198 };
199
-ata_bitfield_name_match(xfer,ata_xfer_names)
199
+ata_bitfield_name_search(xfer, ata_xfer_names)
200200
201201 /*
202202 * ATA Port attributes
....@@ -208,7 +208,7 @@
208208 { \
209209 struct ata_port *ap = transport_class_to_port(dev); \
210210 \
211
- return snprintf(buf, 20, format_string, cast ap->field); \
211
+ return scnprintf(buf, 20, format_string, cast ap->field); \
212212 }
213213
214214 #define ata_port_simple_attr(field, name, format_string, type) \
....@@ -266,6 +266,10 @@
266266 put_device(dev);
267267 }
268268
269
+static const struct device_type ata_port_sas_type = {
270
+ .name = ATA_PORT_TYPE_NAME,
271
+};
272
+
269273 /** ata_tport_add - initialize a transport ATA port structure
270274 *
271275 * @parent: parent device
....@@ -283,7 +287,10 @@
283287 struct device *dev = &ap->tdev;
284288
285289 device_initialize(dev);
286
- dev->type = &ata_port_type;
290
+ if (ap->flags & ATA_FLAG_SAS_HOST)
291
+ dev->type = &ata_port_sas_type;
292
+ else
293
+ dev->type = &ata_port_type;
287294
288295 dev->parent = parent;
289296 ata_host_get(ap->host);
....@@ -301,7 +308,9 @@
301308 pm_runtime_enable(dev);
302309 pm_runtime_forbid(dev);
303310
304
- transport_add_device(dev);
311
+ error = transport_add_device(dev);
312
+ if (error)
313
+ goto tport_transport_add_err;
305314 transport_configure_device(dev);
306315
307316 error = ata_tlink_add(&ap->link);
....@@ -312,12 +321,12 @@
312321
313322 tport_link_err:
314323 transport_remove_device(dev);
324
+ tport_transport_add_err:
315325 device_del(dev);
316326
317327 tport_err:
318328 transport_destroy_device(dev);
319329 put_device(dev);
320
- ata_host_put(ap->host);
321330 return error;
322331 }
323332
....@@ -426,7 +435,9 @@
426435 goto tlink_err;
427436 }
428437
429
- transport_add_device(dev);
438
+ error = transport_add_device(dev);
439
+ if (error)
440
+ goto tlink_transport_err;
430441 transport_configure_device(dev);
431442
432443 ata_for_each_dev(ata_dev, link, ALL) {
....@@ -441,6 +452,7 @@
441452 ata_tdev_delete(ata_dev);
442453 }
443454 transport_remove_device(dev);
455
+ tlink_transport_err:
444456 device_del(dev);
445457 tlink_err:
446458 transport_destroy_device(dev);
....@@ -479,7 +491,7 @@
479491 { \
480492 struct ata_device *ata_dev = transport_class_to_dev(dev); \
481493 \
482
- return snprintf(buf, 20, format_string, cast ata_dev->field); \
494
+ return scnprintf(buf, 20, format_string, cast ata_dev->field); \
483495 }
484496
485497 #define ata_dev_simple_attr(field, format_string, type) \
....@@ -533,7 +545,7 @@
533545 if (ata_dev->class == ATA_DEV_PMP)
534546 return 0;
535547 for(i=0;i<ATA_ID_WORDS;i++) {
536
- written += snprintf(buf+written, 20, "%04x%c",
548
+ written += scnprintf(buf+written, 20, "%04x%c",
537549 ata_dev->id[i],
538550 ((i+1) & 7) ? ' ' : '\n');
539551 }
....@@ -552,7 +564,7 @@
552564 if (ata_dev->class != ATA_DEV_PMP)
553565 return 0;
554566 for(i=0;i<SATA_PMP_GSCR_DWORDS;i++) {
555
- written += snprintf(buf+written, 20, "%08x%c",
567
+ written += scnprintf(buf+written, 20, "%08x%c",
556568 ata_dev->gscr[i],
557569 ((i+1) & 3) ? ' ' : '\n');
558570 }
....@@ -581,7 +593,7 @@
581593 else
582594 mode = "unqueued";
583595
584
- return snprintf(buf, 20, "%s\n", mode);
596
+ return scnprintf(buf, 20, "%s\n", mode);
585597 }
586598
587599 static DEVICE_ATTR(trim, S_IRUGO, show_ata_dev_trim, NULL);
....@@ -678,7 +690,13 @@
678690 return error;
679691 }
680692
681
- transport_add_device(dev);
693
+ error = transport_add_device(dev);
694
+ if (error) {
695
+ device_del(dev);
696
+ ata_tdev_free(ata_dev);
697
+ return error;
698
+ }
699
+
682700 transport_configure_device(dev);
683701 return 0;
684702 }