#include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/gfp.h>
+#include <asm/mach-tx39xx/ioremap.h> /* for TXX9_DIRECTMAP_BASE */
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/soc.h>
        int err;
        int irq;
 
-       BUILD_BUG_ON(sizeof(drvdata->physbase) > sizeof(r->start));
-
        irq = platform_get_irq(pdev, 0);
        if (irq < 0)
                return irq;
 
        platform_set_drvdata(pdev, drvdata);
        drvdata->physbase = r->start;
+       if (sizeof(drvdata->physbase) > sizeof(r->start) &&
+           r->start >= TXX9_DIRECTMAP_BASE &&
+           r->start < TXX9_DIRECTMAP_BASE + 0x400000)
+               drvdata->physbase |= 0xf00000000ull;
        err = devm_request_irq(&pdev->dev, irq, txx9aclc_ac97_irq,
                               0, dev_name(&pdev->dev), drvdata);
        if (err < 0)