mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-08 02:58:19 +07:00
libata-sff: prd is BMDMA specific
struct ata_prd and ap->prd are BMDMA specific. Add bmdma_ prefix to them and move them inside CONFIG_ATA_SFF. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
f47451c45f
commit
f60d70113f
@ -2650,6 +2650,7 @@ EXPORT_SYMBOL_GPL(ata_bmdma32_port_ops);
|
|||||||
static void ata_bmdma_fill_sg(struct ata_queued_cmd *qc)
|
static void ata_bmdma_fill_sg(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
|
struct ata_bmdma_prd *prd = ap->bmdma_prd;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
unsigned int si, pi;
|
unsigned int si, pi;
|
||||||
|
|
||||||
@ -2671,8 +2672,8 @@ static void ata_bmdma_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
if ((offset + sg_len) > 0x10000)
|
if ((offset + sg_len) > 0x10000)
|
||||||
len = 0x10000 - offset;
|
len = 0x10000 - offset;
|
||||||
|
|
||||||
ap->prd[pi].addr = cpu_to_le32(addr);
|
prd[pi].addr = cpu_to_le32(addr);
|
||||||
ap->prd[pi].flags_len = cpu_to_le32(len & 0xffff);
|
prd[pi].flags_len = cpu_to_le32(len & 0xffff);
|
||||||
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", pi, addr, len);
|
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", pi, addr, len);
|
||||||
|
|
||||||
pi++;
|
pi++;
|
||||||
@ -2681,7 +2682,7 @@ static void ata_bmdma_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ap->prd[pi - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
|
prd[pi - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2700,6 +2701,7 @@ static void ata_bmdma_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
static void ata_bmdma_fill_sg_dumb(struct ata_queued_cmd *qc)
|
static void ata_bmdma_fill_sg_dumb(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
|
struct ata_bmdma_prd *prd = ap->bmdma_prd;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
unsigned int si, pi;
|
unsigned int si, pi;
|
||||||
|
|
||||||
@ -2722,16 +2724,16 @@ static void ata_bmdma_fill_sg_dumb(struct ata_queued_cmd *qc)
|
|||||||
len = 0x10000 - offset;
|
len = 0x10000 - offset;
|
||||||
|
|
||||||
blen = len & 0xffff;
|
blen = len & 0xffff;
|
||||||
ap->prd[pi].addr = cpu_to_le32(addr);
|
prd[pi].addr = cpu_to_le32(addr);
|
||||||
if (blen == 0) {
|
if (blen == 0) {
|
||||||
/* Some PATA chipsets like the CS5530 can't
|
/* Some PATA chipsets like the CS5530 can't
|
||||||
cope with 0x0000 meaning 64K as the spec
|
cope with 0x0000 meaning 64K as the spec
|
||||||
says */
|
says */
|
||||||
ap->prd[pi].flags_len = cpu_to_le32(0x8000);
|
prd[pi].flags_len = cpu_to_le32(0x8000);
|
||||||
blen = 0x8000;
|
blen = 0x8000;
|
||||||
ap->prd[++pi].addr = cpu_to_le32(addr + 0x8000);
|
prd[++pi].addr = cpu_to_le32(addr + 0x8000);
|
||||||
}
|
}
|
||||||
ap->prd[pi].flags_len = cpu_to_le32(blen);
|
prd[pi].flags_len = cpu_to_le32(blen);
|
||||||
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", pi, addr, len);
|
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", pi, addr, len);
|
||||||
|
|
||||||
pi++;
|
pi++;
|
||||||
@ -2740,7 +2742,7 @@ static void ata_bmdma_fill_sg_dumb(struct ata_queued_cmd *qc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ap->prd[pi - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
|
prd[pi - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2872,7 +2874,7 @@ void ata_bmdma_setup(struct ata_queued_cmd *qc)
|
|||||||
|
|
||||||
/* load PRD table addr. */
|
/* load PRD table addr. */
|
||||||
mb(); /* make sure PRD table writes are visible to controller */
|
mb(); /* make sure PRD table writes are visible to controller */
|
||||||
iowrite32(ap->prd_dma, ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
|
iowrite32(ap->bmdma_prd_dma, ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
|
||||||
|
|
||||||
/* specify data direction, triple-check start bit is clear */
|
/* specify data direction, triple-check start bit is clear */
|
||||||
dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
|
dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
|
||||||
@ -2977,9 +2979,10 @@ EXPORT_SYMBOL_GPL(ata_bmdma_status);
|
|||||||
int ata_bmdma_port_start(struct ata_port *ap)
|
int ata_bmdma_port_start(struct ata_port *ap)
|
||||||
{
|
{
|
||||||
if (ap->mwdma_mask || ap->udma_mask) {
|
if (ap->mwdma_mask || ap->udma_mask) {
|
||||||
ap->prd = dmam_alloc_coherent(ap->host->dev, ATA_PRD_TBL_SZ,
|
ap->bmdma_prd =
|
||||||
&ap->prd_dma, GFP_KERNEL);
|
dmam_alloc_coherent(ap->host->dev, ATA_PRD_TBL_SZ,
|
||||||
if (!ap->prd)
|
&ap->bmdma_prd_dma, GFP_KERNEL);
|
||||||
|
if (!ap->bmdma_prd)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ static void ns87415_bmdma_setup(struct ata_queued_cmd *qc)
|
|||||||
|
|
||||||
/* load PRD table addr. */
|
/* load PRD table addr. */
|
||||||
mb(); /* make sure PRD table writes are visible to controller */
|
mb(); /* make sure PRD table writes are visible to controller */
|
||||||
iowrite32(ap->prd_dma, ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
|
iowrite32(ap->bmdma_prd_dma, ap->ioaddr.bmdma_addr + ATA_DMA_TABLE_OFS);
|
||||||
|
|
||||||
/* specify data direction, triple-check start bit is clear */
|
/* specify data direction, triple-check start bit is clear */
|
||||||
dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
|
dmactl = ioread8(ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
|
||||||
|
@ -441,7 +441,7 @@ static void scc_bmdma_setup (struct ata_queued_cmd *qc)
|
|||||||
void __iomem *mmio = ap->ioaddr.bmdma_addr;
|
void __iomem *mmio = ap->ioaddr.bmdma_addr;
|
||||||
|
|
||||||
/* load PRD table addr */
|
/* load PRD table addr */
|
||||||
out_be32(mmio + SCC_DMA_TABLE_OFS, ap->prd_dma);
|
out_be32(mmio + SCC_DMA_TABLE_OFS, ap->bmdma_prd_dma);
|
||||||
|
|
||||||
/* specify data direction, triple-check start bit is clear */
|
/* specify data direction, triple-check start bit is clear */
|
||||||
dmactl = in_be32(mmio + SCC_DMA_CMD);
|
dmactl = in_be32(mmio + SCC_DMA_CMD);
|
||||||
@ -905,7 +905,7 @@ static int scc_port_start (struct ata_port *ap)
|
|||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
out_be32(mmio + SCC_DMA_PTERADD, ap->prd_dma);
|
out_be32(mmio + SCC_DMA_PTERADD, ap->bmdma_prd_dma);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,7 +272,7 @@ enum ncq_saw_flag_list {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct nv_swncq_port_priv {
|
struct nv_swncq_port_priv {
|
||||||
struct ata_prd *prd; /* our SG list */
|
struct ata_bmdma_prd *prd; /* our SG list */
|
||||||
dma_addr_t prd_dma; /* and its DMA mapping */
|
dma_addr_t prd_dma; /* and its DMA mapping */
|
||||||
void __iomem *sactive_block;
|
void __iomem *sactive_block;
|
||||||
void __iomem *irq_block;
|
void __iomem *irq_block;
|
||||||
@ -2027,7 +2027,7 @@ static void nv_swncq_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
struct nv_swncq_port_priv *pp = ap->private_data;
|
struct nv_swncq_port_priv *pp = ap->private_data;
|
||||||
struct ata_prd *prd;
|
struct ata_bmdma_prd *prd;
|
||||||
unsigned int si, idx;
|
unsigned int si, idx;
|
||||||
|
|
||||||
prd = pp->prd + ATA_MAX_PRD * qc->tag;
|
prd = pp->prd + ATA_MAX_PRD * qc->tag;
|
||||||
|
@ -500,7 +500,7 @@ static int pdc_sata_scr_write(struct ata_link *link,
|
|||||||
static void pdc_atapi_pkt(struct ata_queued_cmd *qc)
|
static void pdc_atapi_pkt(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
dma_addr_t sg_table = ap->prd_dma;
|
dma_addr_t sg_table = ap->bmdma_prd_dma;
|
||||||
unsigned int cdb_len = qc->dev->cdb_len;
|
unsigned int cdb_len = qc->dev->cdb_len;
|
||||||
u8 *cdb = qc->cdb;
|
u8 *cdb = qc->cdb;
|
||||||
struct pdc_port_priv *pp = ap->private_data;
|
struct pdc_port_priv *pp = ap->private_data;
|
||||||
@ -588,6 +588,7 @@ static void pdc_atapi_pkt(struct ata_queued_cmd *qc)
|
|||||||
static void pdc_fill_sg(struct ata_queued_cmd *qc)
|
static void pdc_fill_sg(struct ata_queued_cmd *qc)
|
||||||
{
|
{
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
|
struct ata_bmdma_prd *prd = ap->bmdma_prd;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
const u32 SG_COUNT_ASIC_BUG = 41*4;
|
const u32 SG_COUNT_ASIC_BUG = 41*4;
|
||||||
unsigned int si, idx;
|
unsigned int si, idx;
|
||||||
@ -614,8 +615,8 @@ static void pdc_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
if ((offset + sg_len) > 0x10000)
|
if ((offset + sg_len) > 0x10000)
|
||||||
len = 0x10000 - offset;
|
len = 0x10000 - offset;
|
||||||
|
|
||||||
ap->prd[idx].addr = cpu_to_le32(addr);
|
prd[idx].addr = cpu_to_le32(addr);
|
||||||
ap->prd[idx].flags_len = cpu_to_le32(len & 0xffff);
|
prd[idx].flags_len = cpu_to_le32(len & 0xffff);
|
||||||
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
|
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
|
||||||
|
|
||||||
idx++;
|
idx++;
|
||||||
@ -624,27 +625,27 @@ static void pdc_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
len = le32_to_cpu(ap->prd[idx - 1].flags_len);
|
len = le32_to_cpu(prd[idx - 1].flags_len);
|
||||||
|
|
||||||
if (len > SG_COUNT_ASIC_BUG) {
|
if (len > SG_COUNT_ASIC_BUG) {
|
||||||
u32 addr;
|
u32 addr;
|
||||||
|
|
||||||
VPRINTK("Splitting last PRD.\n");
|
VPRINTK("Splitting last PRD.\n");
|
||||||
|
|
||||||
addr = le32_to_cpu(ap->prd[idx - 1].addr);
|
addr = le32_to_cpu(prd[idx - 1].addr);
|
||||||
ap->prd[idx - 1].flags_len = cpu_to_le32(len - SG_COUNT_ASIC_BUG);
|
prd[idx - 1].flags_len = cpu_to_le32(len - SG_COUNT_ASIC_BUG);
|
||||||
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx - 1, addr, SG_COUNT_ASIC_BUG);
|
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx - 1, addr, SG_COUNT_ASIC_BUG);
|
||||||
|
|
||||||
addr = addr + len - SG_COUNT_ASIC_BUG;
|
addr = addr + len - SG_COUNT_ASIC_BUG;
|
||||||
len = SG_COUNT_ASIC_BUG;
|
len = SG_COUNT_ASIC_BUG;
|
||||||
ap->prd[idx].addr = cpu_to_le32(addr);
|
prd[idx].addr = cpu_to_le32(addr);
|
||||||
ap->prd[idx].flags_len = cpu_to_le32(len);
|
prd[idx].flags_len = cpu_to_le32(len);
|
||||||
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
|
VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
|
||||||
|
|
||||||
idx++;
|
idx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
|
prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pdc_qc_prep(struct ata_queued_cmd *qc)
|
static void pdc_qc_prep(struct ata_queued_cmd *qc)
|
||||||
@ -659,7 +660,7 @@ static void pdc_qc_prep(struct ata_queued_cmd *qc)
|
|||||||
pdc_fill_sg(qc);
|
pdc_fill_sg(qc);
|
||||||
/*FALLTHROUGH*/
|
/*FALLTHROUGH*/
|
||||||
case ATA_PROT_NODATA:
|
case ATA_PROT_NODATA:
|
||||||
i = pdc_pkt_header(&qc->tf, qc->ap->prd_dma,
|
i = pdc_pkt_header(&qc->tf, qc->ap->bmdma_prd_dma,
|
||||||
qc->dev->devno, pp->pkt);
|
qc->dev->devno, pp->pkt);
|
||||||
if (qc->tf.flags & ATA_TFLAG_LBA48)
|
if (qc->tf.flags & ATA_TFLAG_LBA48)
|
||||||
i = pdc_prep_lba48(&qc->tf, pp->pkt, i);
|
i = pdc_prep_lba48(&qc->tf, pp->pkt, i);
|
||||||
|
@ -284,7 +284,7 @@ static void sil_bmdma_setup(struct ata_queued_cmd *qc)
|
|||||||
void __iomem *bmdma = ap->ioaddr.bmdma_addr;
|
void __iomem *bmdma = ap->ioaddr.bmdma_addr;
|
||||||
|
|
||||||
/* load PRD table addr. */
|
/* load PRD table addr. */
|
||||||
iowrite32(ap->prd_dma, bmdma + ATA_DMA_TABLE_OFS);
|
iowrite32(ap->bmdma_prd_dma, bmdma + ATA_DMA_TABLE_OFS);
|
||||||
|
|
||||||
/* issue r/w command */
|
/* issue r/w command */
|
||||||
ap->ops->sff_exec_command(ap, &qc->tf);
|
ap->ops->sff_exec_command(ap, &qc->tf);
|
||||||
@ -311,10 +311,10 @@ static void sil_fill_sg(struct ata_queued_cmd *qc)
|
|||||||
{
|
{
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
struct ata_port *ap = qc->ap;
|
struct ata_port *ap = qc->ap;
|
||||||
struct ata_prd *prd, *last_prd = NULL;
|
struct ata_bmdma_prd *prd, *last_prd = NULL;
|
||||||
unsigned int si;
|
unsigned int si;
|
||||||
|
|
||||||
prd = &ap->prd[0];
|
prd = &ap->bmdma_prd[0];
|
||||||
for_each_sg(qc->sg, sg, qc->n_elem, si) {
|
for_each_sg(qc->sg, sg, qc->n_elem, si) {
|
||||||
/* Note h/w doesn't support 64-bit, so we unconditionally
|
/* Note h/w doesn't support 64-bit, so we unconditionally
|
||||||
* truncate dma_addr_t to u32.
|
* truncate dma_addr_t to u32.
|
||||||
|
@ -224,7 +224,7 @@ static void k2_bmdma_setup_mmio(struct ata_queued_cmd *qc)
|
|||||||
|
|
||||||
/* load PRD table addr. */
|
/* load PRD table addr. */
|
||||||
mb(); /* make sure PRD table writes are visible to controller */
|
mb(); /* make sure PRD table writes are visible to controller */
|
||||||
writel(ap->prd_dma, mmio + ATA_DMA_TABLE_OFS);
|
writel(ap->bmdma_prd_dma, mmio + ATA_DMA_TABLE_OFS);
|
||||||
|
|
||||||
/* specify data direction, triple-check start bit is clear */
|
/* specify data direction, triple-check start bit is clear */
|
||||||
dmactl = readb(mmio + ATA_DMA_CMD);
|
dmactl = readb(mmio + ATA_DMA_CMD);
|
||||||
|
@ -467,7 +467,7 @@ enum ata_ioctls {
|
|||||||
|
|
||||||
/* core structures */
|
/* core structures */
|
||||||
|
|
||||||
struct ata_prd {
|
struct ata_bmdma_prd {
|
||||||
__le32 addr;
|
__le32 addr;
|
||||||
__le32 flags_len;
|
__le32 flags_len;
|
||||||
};
|
};
|
||||||
|
@ -716,14 +716,13 @@ struct ata_port {
|
|||||||
unsigned int print_id; /* user visible unique port ID */
|
unsigned int print_id; /* user visible unique port ID */
|
||||||
unsigned int port_no; /* 0 based port no. inside the host */
|
unsigned int port_no; /* 0 based port no. inside the host */
|
||||||
|
|
||||||
struct ata_prd *prd; /* our SG list */
|
|
||||||
dma_addr_t prd_dma; /* and its DMA mapping */
|
|
||||||
|
|
||||||
#ifdef CONFIG_ATA_SFF
|
#ifdef CONFIG_ATA_SFF
|
||||||
struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
|
struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
|
||||||
u8 ctl; /* cache of ATA control register */
|
u8 ctl; /* cache of ATA control register */
|
||||||
u8 last_ctl; /* Cache last written value */
|
u8 last_ctl; /* Cache last written value */
|
||||||
struct delayed_work sff_pio_task;
|
struct delayed_work sff_pio_task;
|
||||||
|
struct ata_bmdma_prd *bmdma_prd; /* BMDMA SG list */
|
||||||
|
dma_addr_t bmdma_prd_dma; /* and its DMA mapping */
|
||||||
#endif /* CONFIG_ATA_SFF */
|
#endif /* CONFIG_ATA_SFF */
|
||||||
|
|
||||||
unsigned int pio_mask;
|
unsigned int pio_mask;
|
||||||
|
Loading…
Reference in New Issue
Block a user