Lines Matching refs:uc_priv
109 static int ahci_setup_oobr(struct ahci_uc_priv *uc_priv, int clk) in ahci_setup_oobr() argument
111 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_setup_oobr()
119 static int ahci_host_init(struct ahci_uc_priv *uc_priv) in ahci_host_init() argument
124 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_host_init()
146 ahci_setup_oobr(uc_priv, 0); in ahci_host_init()
159 uc_priv->cap = readl(&host_mmio->cap); in ahci_host_init()
160 uc_priv->port_map = readl(&host_mmio->pi); in ahci_host_init()
163 uc_priv->n_ports = (uc_priv->cap & SATA_HOST_CAP_NP_MASK) + 1; in ahci_host_init()
166 uc_priv->cap, uc_priv->port_map, uc_priv->n_ports); in ahci_host_init()
168 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_host_init()
169 uc_priv->port[i].port_mmio = ahci_port_base(host_mmio, i); in ahci_host_init()
170 port_mmio = uc_priv->port[i].port_mmio; in ahci_host_init()
264 uc_priv->link_port_map |= (0x01 << i); in ahci_host_init()
276 static void ahci_print_info(struct ahci_uc_priv *uc_priv) in ahci_print_info() argument
278 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_print_info()
284 cap = uc_priv->cap; in ahci_print_info()
285 impl = uc_priv->port_map; in ahci_print_info()
328 static int ahci_fill_sg(struct ahci_uc_priv *uc_priv, u8 port, in ahci_fill_sg() argument
331 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_fill_sg()
375 static int ahci_exec_ata_cmd(struct ahci_uc_priv *uc_priv, u8 port, in ahci_exec_ata_cmd() argument
379 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_exec_ata_cmd()
399 sg_count = ahci_fill_sg(uc_priv, port, buf, buf_len); in ahci_exec_ata_cmd()
425 static void ahci_set_feature(struct ahci_uc_priv *uc_priv, u8 port) in ahci_set_feature() argument
435 cfis->sector_count = ffs(uc_priv->udma_mask + 1) + 0x3e; in ahci_set_feature()
437 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, READ_CMD); in ahci_set_feature()
440 static int ahci_port_start(struct ahci_uc_priv *uc_priv, u8 port) in ahci_port_start() argument
442 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
757 u8 port = uc_priv->hard_port_no; in dwc_ahsata_scan_common()
761 dwc_ahsata_identify(uc_priv, id); in dwc_ahsata_scan_common()
789 uc_priv->flags &= (~SATA_FLAG_Q_DEP_MASK); in dwc_ahsata_scan_common()
790 uc_priv->flags |= ata_id_queue_depth(id); in dwc_ahsata_scan_common()
793 dwc_ahsata_xfer_mode(uc_priv, id); in dwc_ahsata_scan_common()
796 dwc_ahsata_init_wcache(uc_priv, id); in dwc_ahsata_scan_common()
799 ahci_set_feature(uc_priv, port); in dwc_ahsata_scan_common()
809 static ulong sata_read_common(struct ahci_uc_priv *uc_priv, in sata_read_common() argument
816 rc = ata_low_level_rw_lba48(uc_priv, blknr, blkcnt, buffer, in sata_read_common()
819 rc = ata_low_level_rw_lba28(uc_priv, blknr, blkcnt, buffer, in sata_read_common()
825 static ulong sata_write_common(struct ahci_uc_priv *uc_priv, in sata_write_common() argument
830 u32 flags = uc_priv->flags; in sata_write_common()
833 rc = ata_low_level_rw_lba48(uc_priv, blknr, blkcnt, buffer, in sata_write_common()
836 dwc_ahsata_flush_cache_ext(uc_priv); in sata_write_common()
838 rc = ata_low_level_rw_lba28(uc_priv, blknr, blkcnt, buffer, in sata_write_common()
841 dwc_ahsata_flush_cache(uc_priv); in sata_write_common()
851 struct ahci_uc_priv *uc_priv = NULL; in ahci_init_one() local
853 uc_priv = malloc(sizeof(struct ahci_uc_priv)); in ahci_init_one()
854 if (!uc_priv) in ahci_init_one()
857 memset(uc_priv, 0, sizeof(struct ahci_uc_priv)); in ahci_init_one()
858 uc_priv->dev = pdev; in ahci_init_one()
860 uc_priv->host_flags = ATA_FLAG_SATA in ahci_init_one()
866 uc_priv->mmio_base = (void __iomem *)CONFIG_DWC_AHSATA_BASE_ADDR; in ahci_init_one()
869 rc = ahci_host_init(uc_priv); in ahci_init_one()
873 ahci_print_info(uc_priv); in ahci_init_one()
876 sata_dev_desc[pdev].priv = uc_priv; in ahci_init_one()
881 if (uc_priv) in ahci_init_one()
882 free(uc_priv); in ahci_init_one()
888 struct ahci_uc_priv *uc_priv = NULL; in init_sata() local
901 uc_priv = sata_dev_desc[dev].priv; in init_sata()
903 return dwc_ahci_start_ports(uc_priv) ? 1 : 0; in init_sata()
908 struct ahci_uc_priv *uc_priv; in reset_sata() local
916 uc_priv = sata_dev_desc[dev].priv; in reset_sata()
917 if (NULL == uc_priv) in reset_sata()
921 host_mmio = uc_priv->mmio_base; in reset_sata()
926 free(uc_priv); in reset_sata()
935 struct ahci_uc_priv *uc_priv = NULL; in sata_port_status() local
943 uc_priv = sata_dev_desc[dev].priv; in sata_port_status()
944 port_mmio = uc_priv->port[port].port_mmio; in sata_port_status()
954 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in sata_read() local
956 return sata_read_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt, in sata_read()
962 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in sata_write() local
964 return sata_write_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt, in sata_write()
970 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in scan_sata() local
973 return dwc_ahsata_scan_common(uc_priv, pdev); in scan_sata()
981 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_port_status() local
984 port_mmio = uc_priv->port[port].port_mmio; in dwc_ahsata_port_status()
990 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_bus_reset() local
991 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in dwc_ahsata_bus_reset()
1002 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_scan() local
1023 ret = dwc_ahsata_scan_common(uc_priv, desc); in dwc_ahsata_scan()
1034 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_probe() local
1040 uc_priv->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | in dwc_ahsata_probe()
1042 uc_priv->mmio_base = (void __iomem *)dev_read_addr(dev); in dwc_ahsata_probe()
1045 ret = ahci_host_init(uc_priv); in dwc_ahsata_probe()
1049 ahci_print_info(uc_priv); in dwc_ahsata_probe()
1051 return dwc_ahci_start_ports(uc_priv); in dwc_ahsata_probe()
1059 struct ahci_uc_priv *uc_priv; in dwc_ahsata_read() local
1061 uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_read()
1062 return sata_read_common(uc_priv, desc, blknr, blkcnt, buffer); in dwc_ahsata_read()
1070 struct ahci_uc_priv *uc_priv; in dwc_ahsata_write() local
1072 uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_write()
1073 return sata_write_common(uc_priv, desc, blknr, blkcnt, buffer); in dwc_ahsata_write()