Lines Matching refs:uc_priv
34 static int ata_io_flush(struct ahci_uc_priv *uc_priv, u8 port);
113 int __weak ahci_link_up(struct ahci_uc_priv *uc_priv, u8 port) in ahci_link_up() argument
117 void __iomem *port_mmio = uc_priv->port[port].port_mmio; in ahci_link_up()
170 static int ahci_host_init(struct ahci_uc_priv *uc_priv) in ahci_host_init() argument
174 struct udevice *dev = uc_priv->dev; in ahci_host_init()
177 pci_dev_t pdev = uc_priv->dev; in ahci_host_init()
182 void __iomem *mmio = uc_priv->mmio_base; in ahci_host_init()
194 ret = ahci_reset(uc_priv->mmio_base); in ahci_host_init()
221 uc_priv->cap = readl(mmio + HOST_CAP); in ahci_host_init()
222 uc_priv->port_map = readl(mmio + HOST_PORTS_IMPL); in ahci_host_init()
223 port_map = uc_priv->port_map; in ahci_host_init()
224 uc_priv->n_ports = (uc_priv->cap & 0x1f) + 1; in ahci_host_init()
227 uc_priv->cap, uc_priv->port_map, uc_priv->n_ports); in ahci_host_init()
230 if (uc_priv->n_ports > CONFIG_SYS_SCSI_MAX_SCSI_ID) in ahci_host_init()
231 uc_priv->n_ports = CONFIG_SYS_SCSI_MAX_SCSI_ID; in ahci_host_init()
234 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_host_init()
237 uc_priv->port[i].port_mmio = ahci_port_base(mmio, i); in ahci_host_init()
238 port_mmio = (u8 *)uc_priv->port[i].port_mmio; in ahci_host_init()
267 ret = ahci_link_up(uc_priv, i); in ahci_host_init()
324 uc_priv->link_port_map |= (0x01 << i); in ahci_host_init()
349 static void ahci_print_info(struct ahci_uc_priv *uc_priv) in ahci_print_info() argument
353 struct udevice *dev = uc_priv->dev; in ahci_print_info()
355 pci_dev_t pdev = uc_priv->dev; in ahci_print_info()
359 void __iomem *mmio = uc_priv->mmio_base; in ahci_print_info()
365 cap = uc_priv->cap; in ahci_print_info()
367 impl = uc_priv->port_map; in ahci_print_info()
432 static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev) in ahci_init_one() argument
434 static int ahci_init_one(struct ahci_uc_priv *uc_priv, pci_dev_t dev) in ahci_init_one()
442 uc_priv->dev = dev; in ahci_init_one()
444 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_one()
449 uc_priv->pio_mask = 0x1f; in ahci_init_one()
450 uc_priv->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */ in ahci_init_one()
454 uc_priv->mmio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_5, in ahci_init_one()
465 uc_priv->mmio_base = pci_map_bar(dev, PCI_BASE_ADDRESS_5, in ahci_init_one()
478 uc_priv->mmio_base = (void *)plat->base; in ahci_init_one()
481 debug("ahci mmio_base=0x%p\n", uc_priv->mmio_base); in ahci_init_one()
483 rc = ahci_host_init(uc_priv); in ahci_init_one()
487 ahci_print_info(uc_priv); in ahci_init_one()
498 static int ahci_fill_sg(struct ahci_uc_priv *uc_priv, u8 port, in ahci_fill_sg() argument
501 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_fill_sg()
518 if (ahci_sg->addr_hi && !(uc_priv->cap & AHCI_CAP_S64A)) { in ahci_fill_sg()
560 static int ahci_port_start(struct ahci_uc_priv *uc_priv, u8 port) in ahci_port_start() argument
562 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_port_start()
635 static int ahci_device_data_io(struct ahci_uc_priv *uc_priv, u8 port, u8 *fis, in ahci_device_data_io() argument
639 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_device_data_io()
647 if (port > uc_priv->n_ports) { in ahci_device_data_io()
660 sg_count = ahci_fill_sg(uc_priv, port, buf, buf_len); in ahci_device_data_io()
694 static int ata_scsiop_inquiry(struct ahci_uc_priv *uc_priv, in ata_scsiop_inquiry() argument
726 if (ahci_device_data_io(uc_priv, port, (u8 *)&fis, sizeof(fis), in ata_scsiop_inquiry()
732 if (!uc_priv->ataid[port]) { in ata_scsiop_inquiry()
733 uc_priv->ataid[port] = malloc(ATA_ID_WORDS * 2); in ata_scsiop_inquiry()
734 if (!uc_priv->ataid[port]) { in ata_scsiop_inquiry()
740 idbuf = uc_priv->ataid[port]; in ata_scsiop_inquiry()
759 static int ata_scsiop_read_write(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_write() argument
840 if (ahci_device_data_io(uc_priv, pccb->target, (u8 *)&fis, in ata_scsiop_read_write()
855 if (-EIO == ata_io_flush(uc_priv, pccb->target)) in ata_scsiop_read_write()
871 static int ata_scsiop_read_capacity10(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_capacity10() argument
878 if (!uc_priv->ataid[pccb->target]) { in ata_scsiop_read_capacity10()
885 cap64 = ata_id_n_sectors(uc_priv->ataid[pccb->target]); in ata_scsiop_read_capacity10()
902 static int ata_scsiop_read_capacity16(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_capacity16() argument
908 if (!uc_priv->ataid[pccb->target]) { in ata_scsiop_read_capacity16()
915 cap = ata_id_n_sectors(uc_priv->ataid[pccb->target]); in ata_scsiop_read_capacity16()
929 static int ata_scsiop_test_unit_ready(struct ahci_uc_priv *uc_priv, in ata_scsiop_test_unit_ready() argument
932 return (uc_priv->ataid[pccb->target]) ? 0 : -EPERM; in ata_scsiop_test_unit_ready()
938 struct ahci_uc_priv *uc_priv; in ahci_scsi_exec() local
940 uc_priv = dev_get_uclass_priv(dev->parent); in ahci_scsi_exec()
942 uc_priv = probe_ent; in ahci_scsi_exec()
949 ret = ata_scsiop_read_write(uc_priv, pccb, 0); in ahci_scsi_exec()
952 ret = ata_scsiop_read_write(uc_priv, pccb, 1); in ahci_scsi_exec()
955 ret = ata_scsiop_read_capacity10(uc_priv, pccb); in ahci_scsi_exec()
958 ret = ata_scsiop_read_capacity16(uc_priv, pccb); in ahci_scsi_exec()
961 ret = ata_scsiop_test_unit_ready(uc_priv, pccb); in ahci_scsi_exec()
964 ret = ata_scsiop_inquiry(uc_priv, pccb); in ahci_scsi_exec()
979 static int ahci_start_ports(struct ahci_uc_priv *uc_priv) in ahci_start_ports() argument
984 linkmap = uc_priv->link_port_map; in ahci_start_ports()
986 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_start_ports()
988 if (ahci_port_start(uc_priv, (u8) i)) { in ahci_start_ports()
1001 struct ahci_uc_priv *uc_priv; in scsi_low_level_init() local
1009 uc_priv = probe_ent; in scsi_low_level_init()
1017 ahci_init_one(uc_priv, dev); in scsi_low_level_init()
1019 ahci_init_one(uc_priv, busdevfunc); in scsi_low_level_init()
1022 uc_priv = probe_ent; in scsi_low_level_init()
1025 ahci_start_ports(uc_priv); in scsi_low_level_init()
1033 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in ahci_init_one_dm() local
1035 return ahci_init_one(uc_priv, dev); in ahci_init_one_dm()
1042 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in ahci_start_ports_dm() local
1044 return ahci_start_ports(uc_priv); in ahci_start_ports_dm()
1048 static int ahci_init_common(struct ahci_uc_priv *uc_priv, void __iomem *base) in ahci_init_common() argument
1052 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_common()
1057 uc_priv->pio_mask = 0x1f; in ahci_init_common()
1058 uc_priv->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */ in ahci_init_common()
1060 uc_priv->mmio_base = base; in ahci_init_common()
1063 rc = ahci_host_init(uc_priv); in ahci_init_common()
1067 ahci_print_info(uc_priv); in ahci_init_common()
1069 rc = ahci_start_ports(uc_priv); in ahci_init_common()
1078 struct ahci_uc_priv *uc_priv; in ahci_init() local
1086 uc_priv = probe_ent; in ahci_init()
1087 memset(uc_priv, 0, sizeof(struct ahci_uc_priv)); in ahci_init()
1089 return ahci_init_common(uc_priv, base); in ahci_init()
1095 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in ahci_init_dm() local
1097 return ahci_init_common(uc_priv, base); in ahci_init_dm()
1115 static int ata_io_flush(struct ahci_uc_priv *uc_priv, u8 port) in ata_io_flush() argument
1118 struct ahci_ioports *pp = &(uc_priv->port[port]); in ata_io_flush()
1165 struct ahci_uc_priv *uc_priv; in ahci_probe_scsi() local
1178 uc_priv = dev_get_uclass_priv(ahci_dev); in ahci_probe_scsi()
1179 ret = ahci_init_one(uc_priv, dev); in ahci_probe_scsi()
1182 ret = ahci_start_ports(uc_priv); in ahci_probe_scsi()
1191 uc_plat->max_id = max_t(unsigned long, uc_priv->n_ports, in ahci_probe_scsi()