aboutsummaryrefslogtreecommitdiff
path: root/src/southbridge/via/vt8237r/vt8237r_ide.c
diff options
context:
space:
mode:
authorTobias Diedrich <ranma+coreboot@tdiedrich.de>2010-11-14 14:17:29 +0000
committerRudolf Marek <r.marek@assembler.cz>2010-11-14 14:17:29 +0000
commit5d72eb5e8eda5e7b8a653a4e9b3bba2d4adbba9e (patch)
treef79490daa41273ae5023da4062d6160262b31d34 /src/southbridge/via/vt8237r/vt8237r_ide.c
parentd441afda9106d000ff1d518bad01e98cfb26630e (diff)
Move cable detect logic to a weak function in vt8237r_ide.c and add
an override function in m2v/mainboard.c Signed-off-by: Tobias Diedrich <ranma+coreboot@tdiedrich.de> Acked-by: Rudolf Marek <r.marek@assembler.cz> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@6069 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/southbridge/via/vt8237r/vt8237r_ide.c')
-rw-r--r--src/southbridge/via/vt8237r/vt8237r_ide.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/southbridge/via/vt8237r/vt8237r_ide.c b/src/southbridge/via/vt8237r/vt8237r_ide.c
index ecbcfffc8c..209437b729 100644
--- a/src/southbridge/via/vt8237r/vt8237r_ide.c
+++ b/src/southbridge/via/vt8237r/vt8237r_ide.c
@@ -27,6 +27,19 @@
#include "chip.h"
/**
+ * Cable type detect function, weak so it can be overloaded in mainboard.c
+ */
+u32 __attribute__((weak)) vt8237_ide_80pin_detect(struct device *dev)
+{
+ struct southbridge_via_vt8237r_config *sb =
+ (struct southbridge_via_vt8237r_config *)dev->chip_info;
+ u32 res;
+ res = sb->ide0_80pin_cable ? VT8237R_IDE0_80PIN_CABLE : 0;
+ res |= sb->ide1_80pin_cable ? VT8237R_IDE1_80PIN_CABLE : 0;
+ return res;
+}
+
+/**
* No native mode. Interrupts from unconnected HDDs might occur if
* IRQ14/15 is used for PCI. Therefore no native mode support.
*/
@@ -88,11 +101,8 @@ static void ide_init(struct device *dev)
/* Cable guy... */
cablesel = pci_read_config32(dev, IDE_UDMA);
- cablesel &= ~((1 << 28) | (1 << 20) | (1 << 12) | (1 << 4));
- cablesel |= (sb->ide0_80pin_cable << 28) |
- (sb->ide0_80pin_cable << 20) |
- (sb->ide1_80pin_cable << 12) |
- (sb->ide1_80pin_cable << 4);
+ cablesel &= ~VT8237R_IDE_CABLESEL_MASK;
+ cablesel |= vt8237_ide_80pin_detect(dev);
pci_write_config32(dev, IDE_UDMA, cablesel);
#if CONFIG_EPIA_VT8237R_INIT