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()
185 static int ahci_host_init(struct ahci_uc_priv *uc_priv) in ahci_host_init() argument
189 struct udevice *dev = uc_priv->dev; in ahci_host_init()
192 pci_dev_t pdev = uc_priv->dev; in ahci_host_init()
197 void __iomem *mmio = uc_priv->mmio_base; in ahci_host_init()
209 ret = ahci_reset(uc_priv->mmio_base); in ahci_host_init()
236 uc_priv->cap = readl(mmio + HOST_CAP); in ahci_host_init()
237 uc_priv->port_map = readl(mmio + HOST_PORTS_IMPL); in ahci_host_init()
238 port_map = uc_priv->port_map; in ahci_host_init()
239 uc_priv->n_ports = (uc_priv->cap & 0x1f) + 1; in ahci_host_init()
242 uc_priv->cap, uc_priv->port_map, uc_priv->n_ports); in ahci_host_init()
245 if (uc_priv->n_ports > CONFIG_SYS_SCSI_MAX_SCSI_ID) in ahci_host_init()
246 uc_priv->n_ports = CONFIG_SYS_SCSI_MAX_SCSI_ID; in ahci_host_init()
249 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_host_init()
250 uc_priv->port[i].port_mmio = ahci_port_base(mmio, i); in ahci_host_init()
253 port_mmio = (u8 *)uc_priv->port[i].port_mmio; in ahci_host_init()
282 ret = ahci_link_up(uc_priv, i); in ahci_host_init()
339 uc_priv->link_port_map |= (0x01 << i); in ahci_host_init()
364 static void ahci_print_info(struct ahci_uc_priv *uc_priv) in ahci_print_info() argument
368 struct udevice *dev = uc_priv->dev; in ahci_print_info()
370 pci_dev_t pdev = uc_priv->dev; in ahci_print_info()
374 void __iomem *mmio = uc_priv->mmio_base; in ahci_print_info()
380 cap = uc_priv->cap; in ahci_print_info()
382 impl = uc_priv->port_map; in ahci_print_info()
447 static int ahci_init_one(struct ahci_uc_priv *uc_priv, struct udevice *dev) in ahci_init_one() argument
449 static int ahci_init_one(struct ahci_uc_priv *uc_priv, pci_dev_t dev) in ahci_init_one()
457 uc_priv->dev = dev; in ahci_init_one()
459 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_one()
464 uc_priv->pio_mask = 0x1f; in ahci_init_one()
465 uc_priv->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */ in ahci_init_one()
469 uc_priv->mmio_base = dm_pci_map_bar(dev, PCI_BASE_ADDRESS_5, in ahci_init_one()
480 uc_priv->mmio_base = pci_map_bar(dev, PCI_BASE_ADDRESS_5, in ahci_init_one()
493 uc_priv->mmio_base = (void *)plat->base; in ahci_init_one()
496 debug("ahci mmio_base=0x%p\n", uc_priv->mmio_base); in ahci_init_one()
498 rc = ahci_host_init(uc_priv); in ahci_init_one()
502 ahci_print_info(uc_priv); in ahci_init_one()
513 static int ahci_fill_sg(struct ahci_uc_priv *uc_priv, u8 port, in ahci_fill_sg() argument
516 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_fill_sg()
533 if (ahci_sg->addr_hi && !(uc_priv->cap & AHCI_CAP_S64A)) { in ahci_fill_sg()
575 static int ahci_port_start(struct ahci_uc_priv *uc_priv, u8 port) in ahci_port_start() argument
577 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_port_start()
650 static int ahci_device_data_io(struct ahci_uc_priv *uc_priv, u8 port, u8 *fis, in ahci_device_data_io() argument
654 struct ahci_ioports *pp = &(uc_priv->port[port]); in ahci_device_data_io()
662 if (port > uc_priv->n_ports) { in ahci_device_data_io()
675 sg_count = ahci_fill_sg(uc_priv, port, buf, buf_len); in ahci_device_data_io()
709 static int ata_scsiop_inquiry(struct ahci_uc_priv *uc_priv, in ata_scsiop_inquiry() argument
741 if (ahci_device_data_io(uc_priv, port, (u8 *)&fis, sizeof(fis), in ata_scsiop_inquiry()
747 if (!uc_priv->ataid[port]) { in ata_scsiop_inquiry()
748 uc_priv->ataid[port] = malloc(ATA_ID_WORDS * 2); in ata_scsiop_inquiry()
749 if (!uc_priv->ataid[port]) { in ata_scsiop_inquiry()
755 idbuf = uc_priv->ataid[port]; in ata_scsiop_inquiry()
774 static int ata_scsiop_read_write(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_write() argument
855 if (ahci_device_data_io(uc_priv, pccb->target, (u8 *)&fis, in ata_scsiop_read_write()
870 if (-EIO == ata_io_flush(uc_priv, pccb->target)) in ata_scsiop_read_write()
886 static int ata_scsiop_read_capacity10(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_capacity10() argument
893 if (!uc_priv->ataid[pccb->target]) { in ata_scsiop_read_capacity10()
900 cap64 = ata_id_n_sectors(uc_priv->ataid[pccb->target]); in ata_scsiop_read_capacity10()
917 static int ata_scsiop_read_capacity16(struct ahci_uc_priv *uc_priv, in ata_scsiop_read_capacity16() argument
923 if (!uc_priv->ataid[pccb->target]) { in ata_scsiop_read_capacity16()
930 cap = ata_id_n_sectors(uc_priv->ataid[pccb->target]); in ata_scsiop_read_capacity16()
944 static int ata_scsiop_test_unit_ready(struct ahci_uc_priv *uc_priv, in ata_scsiop_test_unit_ready() argument
947 return (uc_priv->ataid[pccb->target]) ? 0 : -EPERM; in ata_scsiop_test_unit_ready()
953 struct ahci_uc_priv *uc_priv; in ahci_scsi_exec() local
955 uc_priv = dev_get_uclass_priv(dev->parent); in ahci_scsi_exec()
957 uc_priv = probe_ent; in ahci_scsi_exec()
964 ret = ata_scsiop_read_write(uc_priv, pccb, 0); in ahci_scsi_exec()
967 ret = ata_scsiop_read_write(uc_priv, pccb, 1); in ahci_scsi_exec()
970 ret = ata_scsiop_read_capacity10(uc_priv, pccb); in ahci_scsi_exec()
973 ret = ata_scsiop_read_capacity16(uc_priv, pccb); in ahci_scsi_exec()
976 ret = ata_scsiop_test_unit_ready(uc_priv, pccb); in ahci_scsi_exec()
979 ret = ata_scsiop_inquiry(uc_priv, pccb); in ahci_scsi_exec()
994 static int ahci_start_ports(struct ahci_uc_priv *uc_priv) in ahci_start_ports() argument
999 linkmap = uc_priv->link_port_map; in ahci_start_ports()
1001 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_start_ports()
1003 if (ahci_port_start(uc_priv, (u8) i)) { in ahci_start_ports()
1016 struct ahci_uc_priv *uc_priv; in scsi_low_level_init() local
1024 uc_priv = probe_ent; in scsi_low_level_init()
1032 ahci_init_one(uc_priv, dev); in scsi_low_level_init()
1034 ahci_init_one(uc_priv, busdevfunc); in scsi_low_level_init()
1037 uc_priv = probe_ent; in scsi_low_level_init()
1040 ahci_start_ports(uc_priv); in scsi_low_level_init()
1048 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in achi_init_one_dm() local
1050 return ahci_init_one(uc_priv, dev); in achi_init_one_dm()
1057 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in achi_start_ports_dm() local
1059 return ahci_start_ports(uc_priv); in achi_start_ports_dm()
1063 static int ahci_init_common(struct ahci_uc_priv *uc_priv, void __iomem *base) in ahci_init_common() argument
1067 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_common()
1072 uc_priv->pio_mask = 0x1f; in ahci_init_common()
1073 uc_priv->udma_mask = 0x7f; /*Fixme,assume to support UDMA6 */ in ahci_init_common()
1075 uc_priv->mmio_base = base; in ahci_init_common()
1078 rc = ahci_host_init(uc_priv); in ahci_init_common()
1082 ahci_print_info(uc_priv); in ahci_init_common()
1084 rc = ahci_start_ports(uc_priv); in ahci_init_common()
1093 struct ahci_uc_priv *uc_priv; in ahci_init() local
1101 uc_priv = probe_ent; in ahci_init()
1102 memset(uc_priv, 0, sizeof(struct ahci_uc_priv)); in ahci_init()
1104 return ahci_init_common(uc_priv, base); in ahci_init()
1110 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in ahci_init_dm() local
1112 return ahci_init_common(uc_priv, base); in ahci_init_dm()
1130 static int ata_io_flush(struct ahci_uc_priv *uc_priv, u8 port) in ata_io_flush() argument
1133 struct ahci_ioports *pp = &(uc_priv->port[port]); in ata_io_flush()
1180 struct ahci_uc_priv *uc_priv; in ahci_probe_scsi() local
1193 uc_priv = dev_get_uclass_priv(ahci_dev); in ahci_probe_scsi()
1194 ret = ahci_init_one(uc_priv, dev); in ahci_probe_scsi()
1197 ret = ahci_start_ports(uc_priv); in ahci_probe_scsi()
1206 uc_plat->max_id = max_t(unsigned long, uc_priv->n_ports, in ahci_probe_scsi()
1209 if (uc_priv->n_ports < uc_plat->max_id) in ahci_probe_scsi()
1210 uc_plat->max_id = uc_priv->n_ports; in ahci_probe_scsi()