View | Details | Raw Unified | Return to bug 331610
Collapse All | Expand All

(-)a/drivers/ata/sata_sis.c (-5 / +8 lines)
Lines 166-176 static unsigned int get_scr_cfg_addr(struct ata_port *ap, unsigned int sc_reg) Link Here
166
	return addr;
166
	return addr;
167
}
167
}
168
168
169
static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg)
169
static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg, u32 *val)
170
{
170
{
171
	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
171
	struct pci_dev *pdev = to_pci_dev(ap->host->dev);
172
	unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg);
172
	unsigned int cfg_addr = get_scr_cfg_addr(ap, sc_reg);
173
	u32 val, val2 = 0;
173
	u32 val2 = 0;
174
	u8 pmr;
174
	u8 pmr;
175
175
176
	if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */
176
	if (sc_reg == SCR_ERROR) /* doesn't exist in PCI cfg space */
Lines 178-190 static u32 sis_scr_cfg_read (struct ata_port *ap, unsigned int sc_reg) Link Here
178
178
179
	pci_read_config_byte(pdev, SIS_PMR, &pmr);
179
	pci_read_config_byte(pdev, SIS_PMR, &pmr);
180
180
181
	pci_read_config_dword(pdev, cfg_addr, &val);
181
	pci_read_config_dword(pdev, cfg_addr, val);
182
182
183
	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
183
	if ((pdev->device == 0x0182) || (pdev->device == 0x0183) ||
184
	    (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
184
	    (pdev->device == 0x1182) || (pmr & SIS_PMR_COMBINED))
185
		pci_read_config_dword(pdev, cfg_addr+0x10, &val2);
185
		pci_read_config_dword(pdev, cfg_addr+0x10, &val2);
186
186
187
	return (val|val2) &  0xfffffffb; /* avoid problems with powerdowned ports */
187
	*val |= val2;
188
	*val &= 0xfffffffb;	/* avoid problems with powerdowned ports */
189
190
	return 0;
188
}
191
}
189
192
190
static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
193
static void sis_scr_cfg_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
Lines 214-220 static int sis_scr_read(struct ata_port *ap, unsigned int sc_reg, u32 *val) Link Here
214
		return -EINVAL;
217
		return -EINVAL;
215
218
216
	if (ap->flags & SIS_FLAG_CFGSCR)
219
	if (ap->flags & SIS_FLAG_CFGSCR)
217
		return sis_scr_cfg_read(ap, sc_reg);
220
		return sis_scr_cfg_read(ap, sc_reg, val);
218
221
219
	pci_read_config_byte(pdev, SIS_PMR, &pmr);
222
	pci_read_config_byte(pdev, SIS_PMR, &pmr);
220
223

Return to bug 331610