Lines Matching refs:uc_priv

33 static int ata_io_flush(struct ahci_uc_priv *uc_priv, u8 port);
112 int __weak ahci_link_up(struct ahci_uc_priv *uc_priv, u8 port) in ahci_link_up() argument
116 void __iomem *port_mmio = uc_priv->port[port].port_mmio; in ahci_link_up()
169 static int ahci_host_init(struct ahci_uc_priv *uc_priv) in ahci_host_init() argument
173 struct udevice *dev = uc_priv->dev; in ahci_host_init()
176 pci_dev_t pdev = uc_priv->dev; in ahci_host_init()
181 void __iomem *mmio = uc_priv->mmio_base; in ahci_host_init()
193 ret = ahci_reset(uc_priv->mmio_base); in ahci_host_init()
220 uc_priv->cap = readl(mmio + HOST_CAP); in ahci_host_init()
221 uc_priv->port_map = readl(mmio + HOST_PORTS_IMPL); in ahci_host_init()
222 port_map = uc_priv->port_map; in ahci_host_init()
223 uc_priv->n_ports = (uc_priv->cap & 0x1f) + 1; in ahci_host_init()
226 uc_priv->cap, uc_priv->port_map, uc_priv->n_ports); in ahci_host_init()
229 if (uc_priv->n_ports > CONFIG_SYS_SCSI_MAX_SCSI_ID) in ahci_host_init()
230 uc_priv->n_ports = CONFIG_SYS_SCSI_MAX_SCSI_ID; in ahci_host_init()
233 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_host_init()
236 uc_priv->port[i].port_mmio = ahci_port_base(mmio, i); in ahci_host_init()
237 port_mmio = (u8 *)uc_priv->port[i].port_mmio; in ahci_host_init()
266 ret = ahci_link_up(uc_priv, i); in ahci_host_init()
323 uc_priv->link_port_map |= (0x01 << i); in ahci_host_init()
348 static void ahci_print_info(struct ahci_uc_priv *uc_priv) in ahci_print_info() argument
352 struct udevice *dev = uc_priv->dev; in ahci_print_info()
354 pci_dev_t pdev = uc_priv->dev; in ahci_print_info()
358 void __iomem *mmio = uc_priv->mmio_base; in ahci_print_info()
364 cap = uc_priv->cap; in ahci_print_info()
366 impl = uc_priv->port_map; in ahci_print_info()
431 static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev) in ahci_init_one() argument
433 static int ahci_init_one(struct ahci_uc_priv *uc_priv, pci_dev_t dev) in ahci_init_one()
441 uc_priv->dev = dev; in ahci_init_one()
443 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_one()
448 uc_priv->pio_mask = 0x1f; in ahci_init_one()
449 uc_priv->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */ in ahci_init_one()
453 uc_priv->mmio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_5, in ahci_init_one()
464 uc_priv->mmio_base = pci_map_bar(dev, PCI_BASE_ADDRESS_5, in ahci_init_one()
477 uc_priv->mmio_base = (void *)plat->base; in ahci_init_one()
480 debug("ahci mmio_base=0x%p\n", uc_priv->mmio_base); in ahci_init_one()
482 rc = ahci_host_init(uc_priv); in ahci_init_one()
486 ahci_print_info(uc_priv); in ahci_init_one()
497 static int ahci_fill_sg(struct ahci_uc_priv *uc_priv, u8 port, in ahci_fill_sg() argument
500 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_fill_sg()
517 if (ahci_sg->addr_hi && !(uc_priv->cap & AHCI_CAP_S64A)) { in ahci_fill_sg()
559 static int ahci_port_start(struct ahci_uc_priv *uc_priv, u8 port) in ahci_port_start() argument
561 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_port_start()
634 static int ahci_device_data_io(struct ahci_uc_priv *uc_priv, u8 port, u8 *fis, in ahci_device_data_io() argument
638 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_device_data_io()
646 if (port > uc_priv->n_ports) { in ahci_device_data_io()
659 sg_count = ahci_fill_sg(uc_priv, port, buf, buf_len); in ahci_device_data_io()
693 static int ata_scsiop_inquiry(struct ahci_uc_priv *uc_priv, in ata_scsiop_inquiry() argument
725 if (ahci_device_data_io(uc_priv, port, (u8 *)&fis, sizeof(fis), in ata_scsiop_inquiry()
731 if (!uc_priv->ataid[port]) { in ata_scsiop_inquiry()
732 uc_priv->ataid[port] = malloc(ATA_ID_WORDS * 2); in ata_scsiop_inquiry()
733 if (!uc_priv->ataid[port]) { in ata_scsiop_inquiry()
739 idbuf = uc_priv->ataid[port]; in ata_scsiop_inquiry()
758 static int ata_scsiop_read_write(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_write() argument
839 if (ahci_device_data_io(uc_priv, pccb->target, (u8 *)&fis, in ata_scsiop_read_write()
854 if (-EIO == ata_io_flush(uc_priv, pccb->target)) in ata_scsiop_read_write()
870 static int ata_scsiop_read_capacity10(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_capacity10() argument
877 if (!uc_priv->ataid[pccb->target]) { in ata_scsiop_read_capacity10()
884 cap64 = ata_id_n_sectors(uc_priv->ataid[pccb->target]); in ata_scsiop_read_capacity10()
901 static int ata_scsiop_read_capacity16(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_capacity16() argument
907 if (!uc_priv->ataid[pccb->target]) { in ata_scsiop_read_capacity16()
914 cap = ata_id_n_sectors(uc_priv->ataid[pccb->target]); in ata_scsiop_read_capacity16()
928 static int ata_scsiop_test_unit_ready(struct ahci_uc_priv *uc_priv, in ata_scsiop_test_unit_ready() argument
931 return (uc_priv->ataid[pccb->target]) ? 0 : -EPERM; in ata_scsiop_test_unit_ready()
937 struct ahci_uc_priv *uc_priv; in ahci_scsi_exec() local
939 uc_priv = dev_get_uclass_priv(dev->parent); in ahci_scsi_exec()
941 uc_priv = probe_ent; in ahci_scsi_exec()
948 ret = ata_scsiop_read_write(uc_priv, pccb, 0); in ahci_scsi_exec()
951 ret = ata_scsiop_read_write(uc_priv, pccb, 1); in ahci_scsi_exec()
954 ret = ata_scsiop_read_capacity10(uc_priv, pccb); in ahci_scsi_exec()
957 ret = ata_scsiop_read_capacity16(uc_priv, pccb); in ahci_scsi_exec()
960 ret = ata_scsiop_test_unit_ready(uc_priv, pccb); in ahci_scsi_exec()
963 ret = ata_scsiop_inquiry(uc_priv, pccb); in ahci_scsi_exec()
978 static int ahci_start_ports(struct ahci_uc_priv *uc_priv) in ahci_start_ports() argument
983 linkmap = uc_priv->link_port_map; in ahci_start_ports()
985 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_start_ports()
987 if (ahci_port_start(uc_priv, (u8) i)) { in ahci_start_ports()
1000 struct ahci_uc_priv *uc_priv; in scsi_low_level_init() local
1008 uc_priv = probe_ent; in scsi_low_level_init()
1016 ahci_init_one(uc_priv, dev); in scsi_low_level_init()
1018 ahci_init_one(uc_priv, busdevfunc); in scsi_low_level_init()
1021 uc_priv = probe_ent; in scsi_low_level_init()
1024 ahci_start_ports(uc_priv); in scsi_low_level_init()
1032 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in achi_init_one_dm() local
1034 return ahci_init_one(uc_priv, dev); in achi_init_one_dm()
1041 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in achi_start_ports_dm() local
1043 return ahci_start_ports(uc_priv); in achi_start_ports_dm()
1047 static int ahci_init_common(struct ahci_uc_priv *uc_priv, void __iomem *base) in ahci_init_common() argument
1051 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_common()
1056 uc_priv->pio_mask = 0x1f; in ahci_init_common()
1057 uc_priv->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */ in ahci_init_common()
1059 uc_priv->mmio_base = base; in ahci_init_common()
1062 rc = ahci_host_init(uc_priv); in ahci_init_common()
1066 ahci_print_info(uc_priv); in ahci_init_common()
1068 rc = ahci_start_ports(uc_priv); in ahci_init_common()
1077 struct ahci_uc_priv *uc_priv; in ahci_init() local
1085 uc_priv = probe_ent; in ahci_init()
1086 memset(uc_priv, 0, sizeof(struct ahci_uc_priv)); in ahci_init()
1088 return ahci_init_common(uc_priv, base); in ahci_init()
1094 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in ahci_init_dm() local
1096 return ahci_init_common(uc_priv, base); in ahci_init_dm()
1114 static int ata_io_flush(struct ahci_uc_priv *uc_priv, u8 port) in ata_io_flush() argument
1117 struct ahci_ioports *pp = &(uc_priv->port[port]); in ata_io_flush()
1164 struct ahci_uc_priv *uc_priv; in ahci_probe_scsi() local
1177 uc_priv = dev_get_uclass_priv(ahci_dev); in ahci_probe_scsi()
1178 ret = ahci_init_one(uc_priv, dev); in ahci_probe_scsi()
1181 ret = ahci_start_ports(uc_priv); in ahci_probe_scsi()
1190 uc_plat->max_id = max_t(unsigned long, uc_priv->n_ports, in ahci_probe_scsi()
1193 if (uc_priv->n_ports < uc_plat->max_id) in ahci_probe_scsi()
1194 uc_plat->max_id = uc_priv->n_ports; in ahci_probe_scsi()