Lines Matching refs:uc_priv

103 static int ahci_setup_oobr(struct ahci_uc_priv *uc_priv, int clk)  in ahci_setup_oobr()  argument
105 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_setup_oobr()
113 static int ahci_host_init(struct ahci_uc_priv *uc_priv) in ahci_host_init() argument
118 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_host_init()
140 ahci_setup_oobr(uc_priv, 0); in ahci_host_init()
153 uc_priv->cap = readl(&host_mmio->cap); in ahci_host_init()
154 uc_priv->port_map = readl(&host_mmio->pi); in ahci_host_init()
157 uc_priv->n_ports = (uc_priv->cap & SATA_HOST_CAP_NP_MASK) + 1; in ahci_host_init()
160 uc_priv->cap, uc_priv->port_map, uc_priv->n_ports); in ahci_host_init()
162 for (i = 0; i < uc_priv->n_ports; i++) { in ahci_host_init()
163 uc_priv->port[i].port_mmio = ahci_port_base(host_mmio, i); in ahci_host_init()
164 port_mmio = uc_priv->port[i].port_mmio; in ahci_host_init()
258 uc_priv->link_port_map |= (0x01 << i); in ahci_host_init()
270 static void ahci_print_info(struct ahci_uc_priv *uc_priv) in ahci_print_info() argument
272 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in ahci_print_info()
278 cap = uc_priv->cap; in ahci_print_info()
279 impl = uc_priv->port_map; in ahci_print_info()
322 static int ahci_fill_sg(struct ahci_uc_priv *uc_priv, u8 port, in ahci_fill_sg() argument
325 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_fill_sg()
369 static int ahci_exec_ata_cmd(struct ahci_uc_priv *uc_priv, u8 port, in ahci_exec_ata_cmd() argument
373 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_exec_ata_cmd()
393 sg_count = ahci_fill_sg(uc_priv, port, buf, buf_len); in ahci_exec_ata_cmd()
419 static void ahci_set_feature(struct ahci_uc_priv *uc_priv, u8 port) in ahci_set_feature() argument
429 cfis->sector_count = ffs(uc_priv->udma_mask + 1) + 0x3e; in ahci_set_feature()
431 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, READ_CMD); in ahci_set_feature()
434 static int ahci_port_start(struct ahci_uc_priv *uc_priv, u8 port) in ahci_port_start() argument
436 struct ahci_ioports *pp = &uc_priv->port[port]; in ahci_port_start()
526 static void dwc_ahsata_identify(struct ahci_uc_priv *uc_priv, u16 *id) in dwc_ahsata_identify() argument
530 u8 port = uc_priv->hard_port_no; in dwc_ahsata_identify()
538 ahci_exec_ata_cmd(uc_priv, port, cfis, (u8 *)id, ATA_ID_WORDS * 2, in dwc_ahsata_identify()
543 static void dwc_ahsata_xfer_mode(struct ahci_uc_priv *uc_priv, u16 *id) in dwc_ahsata_xfer_mode() argument
545 uc_priv->pio_mask = id[ATA_ID_PIO_MODES]; in dwc_ahsata_xfer_mode()
546 uc_priv->udma_mask = id[ATA_ID_UDMA_MODES]; in dwc_ahsata_xfer_mode()
547 debug("pio %04x, udma %04x\n\r", uc_priv->pio_mask, uc_priv->udma_mask); in dwc_ahsata_xfer_mode()
550 static u32 dwc_ahsata_rw_cmd(struct ahci_uc_priv *uc_priv, u32 start, in dwc_ahsata_rw_cmd() argument
555 u8 port = uc_priv->hard_port_no; in dwc_ahsata_rw_cmd()
573 if (ahci_exec_ata_cmd(uc_priv, port, cfis, buffer, in dwc_ahsata_rw_cmd()
580 static void dwc_ahsata_flush_cache(struct ahci_uc_priv *uc_priv) in dwc_ahsata_flush_cache() argument
584 u8 port = uc_priv->hard_port_no; in dwc_ahsata_flush_cache()
592 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, 0); in dwc_ahsata_flush_cache()
595 static u32 dwc_ahsata_rw_cmd_ext(struct ahci_uc_priv *uc_priv, u32 start, in dwc_ahsata_rw_cmd_ext() argument
600 u8 port = uc_priv->hard_port_no; in dwc_ahsata_rw_cmd_ext()
623 if (ahci_exec_ata_cmd(uc_priv, port, cfis, buffer, in dwc_ahsata_rw_cmd_ext()
630 static void dwc_ahsata_flush_cache_ext(struct ahci_uc_priv *uc_priv) in dwc_ahsata_flush_cache_ext() argument
634 u8 port = uc_priv->hard_port_no; in dwc_ahsata_flush_cache_ext()
642 ahci_exec_ata_cmd(uc_priv, port, cfis, NULL, 0, 0); in dwc_ahsata_flush_cache_ext()
645 static void dwc_ahsata_init_wcache(struct ahci_uc_priv *uc_priv, u16 *id) in dwc_ahsata_init_wcache() argument
648 uc_priv->flags |= SATA_FLAG_WCACHE; in dwc_ahsata_init_wcache()
650 uc_priv->flags |= SATA_FLAG_FLUSH; in dwc_ahsata_init_wcache()
652 uc_priv->flags |= SATA_FLAG_FLUSH_EXT; in dwc_ahsata_init_wcache()
655 static u32 ata_low_level_rw_lba48(struct ahci_uc_priv *uc_priv, u32 blknr, in ata_low_level_rw_lba48() argument
671 if (max_blks != dwc_ahsata_rw_cmd_ext(uc_priv, start, in ata_low_level_rw_lba48()
679 if (blks != dwc_ahsata_rw_cmd_ext(uc_priv, start, blks, in ata_low_level_rw_lba48()
691 static u32 ata_low_level_rw_lba28(struct ahci_uc_priv *uc_priv, u32 blknr, in ata_low_level_rw_lba28() argument
706 if (max_blks != dwc_ahsata_rw_cmd(uc_priv, start, in ata_low_level_rw_lba28()
714 if (blks != dwc_ahsata_rw_cmd(uc_priv, start, blks, in ata_low_level_rw_lba28()
726 static int dwc_ahci_start_ports(struct ahci_uc_priv *uc_priv) in dwc_ahci_start_ports() argument
731 linkmap = uc_priv->link_port_map; in dwc_ahci_start_ports()
738 for (i = 0; i < uc_priv->n_ports; i++) { in dwc_ahci_start_ports()
740 if (ahci_port_start(uc_priv, (u8)i)) { in dwc_ahci_start_ports()
744 uc_priv->hard_port_no = i; in dwc_ahci_start_ports()
752 static int dwc_ahsata_scan_common(struct ahci_uc_priv *uc_priv, in dwc_ahsata_scan_common() argument
759 u8 port = uc_priv->hard_port_no; in dwc_ahsata_scan_common()
763 dwc_ahsata_identify(uc_priv, id); in dwc_ahsata_scan_common()
792 uc_priv->flags &= (~SATA_FLAG_Q_DEP_MASK); in dwc_ahsata_scan_common()
793 uc_priv->flags |= ata_id_queue_depth(id); in dwc_ahsata_scan_common()
796 dwc_ahsata_xfer_mode(uc_priv, id); in dwc_ahsata_scan_common()
799 dwc_ahsata_init_wcache(uc_priv, id); in dwc_ahsata_scan_common()
802 ahci_set_feature(uc_priv, port); in dwc_ahsata_scan_common()
812 static ulong sata_read_common(struct ahci_uc_priv *uc_priv, in sata_read_common() argument
819 rc = ata_low_level_rw_lba48(uc_priv, blknr, blkcnt, buffer, in sata_read_common()
822 rc = ata_low_level_rw_lba28(uc_priv, blknr, blkcnt, buffer, in sata_read_common()
828 static ulong sata_write_common(struct ahci_uc_priv *uc_priv, in sata_write_common() argument
833 u32 flags = uc_priv->flags; in sata_write_common()
836 rc = ata_low_level_rw_lba48(uc_priv, blknr, blkcnt, buffer, in sata_write_common()
839 dwc_ahsata_flush_cache_ext(uc_priv); in sata_write_common()
841 rc = ata_low_level_rw_lba28(uc_priv, blknr, blkcnt, buffer, in sata_write_common()
844 dwc_ahsata_flush_cache(uc_priv); in sata_write_common()
854 struct ahci_uc_priv *uc_priv = NULL; in ahci_init_one() local
856 uc_priv = malloc(sizeof(struct ahci_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()
886 struct ahci_uc_priv *uc_priv = NULL; in init_sata() local
899 uc_priv = sata_dev_desc[dev].priv; in init_sata()
901 return dwc_ahci_start_ports(uc_priv) ? 1 : 0; in init_sata()
906 struct ahci_uc_priv *uc_priv; in reset_sata() local
914 uc_priv = sata_dev_desc[dev].priv; in reset_sata()
915 if (NULL == uc_priv) in reset_sata()
919 host_mmio = uc_priv->mmio_base; in reset_sata()
930 struct ahci_uc_priv *uc_priv = NULL; in sata_port_status() local
938 uc_priv = sata_dev_desc[dev].priv; in sata_port_status()
939 port_mmio = uc_priv->port[port].port_mmio; in sata_port_status()
949 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in sata_read() local
951 return sata_read_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt, in sata_read()
957 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in sata_write() local
959 return sata_write_common(uc_priv, &sata_dev_desc[dev], blknr, blkcnt, in sata_write()
965 struct ahci_uc_priv *uc_priv = sata_dev_desc[dev].priv; in scan_sata() local
968 return dwc_ahsata_scan_common(uc_priv, pdev); in scan_sata()
976 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_port_status() local
979 port_mmio = uc_priv->port[port].port_mmio; in dwc_ahsata_port_status()
985 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_bus_reset() local
986 struct sata_host_regs *host_mmio = uc_priv->mmio_base; in dwc_ahsata_bus_reset()
997 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_scan() local
1018 ret = dwc_ahsata_scan_common(uc_priv, desc); in dwc_ahsata_scan()
1029 struct ahci_uc_priv *uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_probe() local
1032 uc_priv->host_flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | in dwc_ahsata_probe()
1034 uc_priv->mmio_base = (void __iomem *)dev_read_addr(dev); in dwc_ahsata_probe()
1037 ret = ahci_host_init(uc_priv); in dwc_ahsata_probe()
1041 ahci_print_info(uc_priv); in dwc_ahsata_probe()
1043 return dwc_ahci_start_ports(uc_priv); in dwc_ahsata_probe()
1051 struct ahci_uc_priv *uc_priv; in dwc_ahsata_read() local
1053 uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_read()
1054 return sata_read_common(uc_priv, desc, blknr, blkcnt, buffer); in dwc_ahsata_read()
1062 struct ahci_uc_priv *uc_priv; in dwc_ahsata_write() local
1064 uc_priv = dev_get_uclass_priv(dev); in dwc_ahsata_write()
1065 return sata_write_common(uc_priv, desc, blknr, blkcnt, buffer); in dwc_ahsata_write()