Lines Matching refs:uc_priv

102 static int ahci_setup_oobr(struct ahci_uc_priv *uc_priv, int clk)  in ahci_setup_oobr()  argument
104 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_setup_oobr()
112 static int ahci_host_init(struct ahci_uc_priv *uc_priv) in ahci_host_init() argument
117 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_host_init()
139 ahci_setup_oobr(uc_priv, 0); in ahci_host_init()
152 uc_priv->cap = readl(&host_mmio->cap); in ahci_host_init()
153 uc_priv->port_map = readl(&host_mmio->pi); in ahci_host_init()
156 uc_priv->n_ports = (uc_priv->cap & SATA_HOST_CAP_NP_MASK) + 1; in ahci_host_init()
159 uc_priv->cap, uc_priv->port_map, uc_priv->n_ports); in ahci_host_init()
161 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_host_init()
162 uc_priv->port[i].port_mmio = ahci_port_base(host_mmio, i); in ahci_host_init()
163 port_mmio = uc_priv->port[i].port_mmio; in ahci_host_init()
257 uc_priv->link_port_map |= (0x01 << i); in ahci_host_init()
269 static void ahci_print_info(struct ahci_uc_priv *uc_priv) in ahci_print_info() argument
271 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_print_info()
277 cap = uc_priv->cap; in ahci_print_info()
278 impl = uc_priv->port_map; in ahci_print_info()
321 static int ahci_fill_sg(struct ahci_uc_priv *uc_priv, u8 port, in ahci_fill_sg() argument
324 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_fill_sg()
368 static int ahci_exec_ata_cmd(struct ahci_uc_priv *uc_priv, u8 port, in ahci_exec_ata_cmd() argument
372 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_exec_ata_cmd()
392 sg_count = ahci_fill_sg(uc_priv, port, buf, buf_len); in ahci_exec_ata_cmd()
418 static void ahci_set_feature(struct ahci_uc_priv *uc_priv, u8 port) in ahci_set_feature() argument
428 cfis->sector_count = ffs(uc_priv->udma_mask + 1) + 0x3e; in ahci_set_feature()
430 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, READ_CMD); in ahci_set_feature()
433 static int ahci_port_start(struct ahci_uc_priv *uc_priv, u8 port) in ahci_port_start() argument
435 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_port_start()
525 static void dwc_ahsata_identify(struct ahci_uc_priv *uc_priv, u16 *id) in dwc_ahsata_identify() argument
529 u8 port = uc_priv->hard_port_no; in dwc_ahsata_identify()
537 ahci_exec_ata_cmd(uc_priv, port, cfis, (u8 *)id, ATA_ID_WORDS * 2, in dwc_ahsata_identify()
542 static void dwc_ahsata_xfer_mode(struct ahci_uc_priv *uc_priv, u16 *id) in dwc_ahsata_xfer_mode() argument
544 uc_priv->pio_mask = id[ATA_ID_PIO_MODES]; in dwc_ahsata_xfer_mode()
545 uc_priv->udma_mask = id[ATA_ID_UDMA_MODES]; in dwc_ahsata_xfer_mode()
546 debug("pio %04x, udma %04x\n\r", uc_priv->pio_mask, uc_priv->udma_mask); in dwc_ahsata_xfer_mode()
549 static u32 dwc_ahsata_rw_cmd(struct ahci_uc_priv *uc_priv, u32 start, in dwc_ahsata_rw_cmd() argument
554 u8 port = uc_priv->hard_port_no; in dwc_ahsata_rw_cmd()
572 if (ahci_exec_ata_cmd(uc_priv, port, cfis, buffer, in dwc_ahsata_rw_cmd()
579 static void dwc_ahsata_flush_cache(struct ahci_uc_priv *uc_priv) in dwc_ahsata_flush_cache() argument
583 u8 port = uc_priv->hard_port_no; in dwc_ahsata_flush_cache()
591 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, 0); in dwc_ahsata_flush_cache()
594 static u32 dwc_ahsata_rw_cmd_ext(struct ahci_uc_priv *uc_priv, u32 start, in dwc_ahsata_rw_cmd_ext() argument
599 u8 port = uc_priv->hard_port_no; in dwc_ahsata_rw_cmd_ext()
622 if (ahci_exec_ata_cmd(uc_priv, port, cfis, buffer, in dwc_ahsata_rw_cmd_ext()
629 static void dwc_ahsata_flush_cache_ext(struct ahci_uc_priv *uc_priv) in dwc_ahsata_flush_cache_ext() argument
633 u8 port = uc_priv->hard_port_no; in dwc_ahsata_flush_cache_ext()
641 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, 0); in dwc_ahsata_flush_cache_ext()
644 static void dwc_ahsata_init_wcache(struct ahci_uc_priv *uc_priv, u16 *id) in dwc_ahsata_init_wcache() argument
647 uc_priv->flags |= SATA_FLAG_WCACHE; in dwc_ahsata_init_wcache()
649 uc_priv->flags |= SATA_FLAG_FLUSH; in dwc_ahsata_init_wcache()
651 uc_priv->flags |= SATA_FLAG_FLUSH_EXT; in dwc_ahsata_init_wcache()
654 static u32 ata_low_level_rw_lba48(struct ahci_uc_priv *uc_priv, u32 blknr, in ata_low_level_rw_lba48() argument
670 if (max_blks != dwc_ahsata_rw_cmd_ext(uc_priv, start, in ata_low_level_rw_lba48()
678 if (blks != dwc_ahsata_rw_cmd_ext(uc_priv, start, blks, in ata_low_level_rw_lba48()
690 static u32 ata_low_level_rw_lba28(struct ahci_uc_priv *uc_priv, u32 blknr, in ata_low_level_rw_lba28() argument
705 if (max_blks != dwc_ahsata_rw_cmd(uc_priv, start, in ata_low_level_rw_lba28()
713 if (blks != dwc_ahsata_rw_cmd(uc_priv, start, blks, in ata_low_level_rw_lba28()
725 static int dwc_ahci_start_ports(struct ahci_uc_priv *uc_priv) in dwc_ahci_start_ports() argument
730 linkmap = uc_priv->link_port_map; in dwc_ahci_start_ports()
737 for (i = 0; i < uc_priv->n_ports; i++) { in dwc_ahci_start_ports()
739 if (ahci_port_start(uc_priv, (u8)i)) { in dwc_ahci_start_ports()
743 uc_priv->hard_port_no = i; in dwc_ahci_start_ports()
751 static int dwc_ahsata_scan_common(struct ahci_uc_priv *uc_priv, in dwc_ahsata_scan_common() argument
758 u8 port = uc_priv->hard_port_no; in dwc_ahsata_scan_common()
762 dwc_ahsata_identify(uc_priv, id); in dwc_ahsata_scan_common()
791 uc_priv->flags &= (~SATA_FLAG_Q_DEP_MASK); in dwc_ahsata_scan_common()
792 uc_priv->flags |= ata_id_queue_depth(id); in dwc_ahsata_scan_common()
795 dwc_ahsata_xfer_mode(uc_priv, id); in dwc_ahsata_scan_common()
798 dwc_ahsata_init_wcache(uc_priv, id); in dwc_ahsata_scan_common()
801 ahci_set_feature(uc_priv, port); in dwc_ahsata_scan_common()
811 static ulong sata_read_common(struct ahci_uc_priv *uc_priv, in sata_read_common() argument
818 rc = ata_low_level_rw_lba48(uc_priv, blknr, blkcnt, buffer, in sata_read_common()
821 rc = ata_low_level_rw_lba28(uc_priv, blknr, blkcnt, buffer, in sata_read_common()
827 static ulong sata_write_common(struct ahci_uc_priv *uc_priv, in sata_write_common() argument
832 u32 flags = uc_priv->flags; in sata_write_common()
835 rc = ata_low_level_rw_lba48(uc_priv, blknr, blkcnt, buffer, in sata_write_common()
838 dwc_ahsata_flush_cache_ext(uc_priv); in sata_write_common()
840 rc = ata_low_level_rw_lba28(uc_priv, blknr, blkcnt, buffer, in sata_write_common()
843 dwc_ahsata_flush_cache(uc_priv); in sata_write_common()
853 struct ahci_uc_priv *uc_priv = NULL; in ahci_init_one() local
855 uc_priv = malloc(sizeof(struct ahci_uc_priv)); in ahci_init_one()
856 memset(uc_priv, 0, sizeof(struct ahci_uc_priv)); in ahci_init_one()
857 uc_priv->dev = pdev; in ahci_init_one()
859 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_one()
865 uc_priv->mmio_base = (void __iomem *)CONFIG_DWC_AHSATA_BASE_ADDR; in ahci_init_one()
868 rc = ahci_host_init(uc_priv); in ahci_init_one()
872 ahci_print_info(uc_priv); in ahci_init_one()
875 sata_dev_desc[pdev].priv = uc_priv; in ahci_init_one()
885 struct ahci_uc_priv *uc_priv = NULL; in init_sata() local
898 uc_priv = sata_dev_desc[dev].priv; in init_sata()
900 return dwc_ahci_start_ports(uc_priv) ? 1 : 0; in init_sata()
905 struct ahci_uc_priv *uc_priv; in reset_sata() local
913 uc_priv = sata_dev_desc[dev].priv; in reset_sata()
914 if (NULL == uc_priv) in reset_sata()
918 host_mmio = uc_priv->mmio_base; in reset_sata()
929 struct ahci_uc_priv *uc_priv = NULL; in sata_port_status() local
937 uc_priv = sata_dev_desc[dev].priv; in sata_port_status()
938 port_mmio = uc_priv->port[port].port_mmio; in sata_port_status()
948 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in sata_read() local
950 return sata_read_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt, in sata_read()
956 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in sata_write() local
958 return sata_write_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt, in sata_write()
964 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in scan_sata() local
967 return dwc_ahsata_scan_common(uc_priv, pdev); in scan_sata()
975 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_port_status() local
978 port_mmio = uc_priv->port[port].port_mmio; in dwc_ahsata_port_status()
984 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_bus_reset() local
985 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in dwc_ahsata_bus_reset()
996 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_scan() local
1017 ret = dwc_ahsata_scan_common(uc_priv, desc); in dwc_ahsata_scan()
1028 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_probe() local
1031 uc_priv->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | in dwc_ahsata_probe()
1033 uc_priv->mmio_base = (void __iomem *)dev_read_addr(dev); in dwc_ahsata_probe()
1036 ret = ahci_host_init(uc_priv); in dwc_ahsata_probe()
1040 ahci_print_info(uc_priv); in dwc_ahsata_probe()
1042 return dwc_ahci_start_ports(uc_priv); in dwc_ahsata_probe()
1050 struct ahci_uc_priv *uc_priv; in dwc_ahsata_read() local
1052 uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_read()
1053 return sata_read_common(uc_priv, desc, blknr, blkcnt, buffer); in dwc_ahsata_read()
1061 struct ahci_uc_priv *uc_priv; in dwc_ahsata_write() local
1063 uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_write()
1064 return sata_write_common(uc_priv, desc, blknr, blkcnt, buffer); in dwc_ahsata_write()