[POWERPC] Fixes to allow use of Ebony's flash chips through physmap_of
This patch contains a handful of small fixes to allow the Ebony's flash to be exposed as MTD devices via the physmap_of driver. Specifically it: - Makes a small addition to the device tree and zImage wrapper to record the correct address for the flash in the device tree based on the board switches as reported via an FPGA register. - Prohibits building the old hard-coded "Ebony" flash map on arch/powerpc kernels, in favour of using physmap_of's device tree based approach. - Enables MTD and physmap_of in the Ebony defconfig. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:

committed by
Paul Mackerras

parent
9420dc65ff
commit
0d279d4761
@@ -24,6 +24,7 @@
|
||||
#include "page.h"
|
||||
#include "ops.h"
|
||||
#include "reg.h"
|
||||
#include "io.h"
|
||||
#include "dcr.h"
|
||||
#include "44x.h"
|
||||
|
||||
@@ -92,6 +93,43 @@ void ibm440gp_fixup_clocks(unsigned int sysclk, unsigned int ser_clk)
|
||||
dt_fixup_clock("/plb/opb/serial@40000300", uart1);
|
||||
}
|
||||
|
||||
#define EBONY_FPGA_PATH "/plb/opb/ebc/fpga"
|
||||
#define EBONY_FPGA_FLASH_SEL 0x01
|
||||
#define EBONY_SMALL_FLASH_PATH "/plb/opb/ebc/small-flash"
|
||||
|
||||
static void ebony_flashsel_fixup(void)
|
||||
{
|
||||
void *devp;
|
||||
u32 reg[3] = {0x0, 0x0, 0x80000};
|
||||
u8 *fpga;
|
||||
u8 fpga_reg0 = 0x0;
|
||||
|
||||
devp = finddevice(EBONY_FPGA_PATH);
|
||||
if (!devp)
|
||||
fatal("Couldn't locate FPGA node %s\n\r", EBONY_FPGA_PATH);
|
||||
|
||||
if (getprop(devp, "virtual-reg", &fpga, sizeof(fpga)) != sizeof(fpga))
|
||||
fatal("%s has missing or invalid virtual-reg property\n\r",
|
||||
EBONY_FPGA_PATH);
|
||||
|
||||
fpga_reg0 = in_8(fpga);
|
||||
|
||||
devp = finddevice(EBONY_SMALL_FLASH_PATH);
|
||||
if (!devp)
|
||||
fatal("Couldn't locate small flash node %s\n\r",
|
||||
EBONY_SMALL_FLASH_PATH);
|
||||
|
||||
if (getprop(devp, "reg", reg, sizeof(reg)) != sizeof(reg))
|
||||
fatal("%s has reg property of unexpected size\n\r",
|
||||
EBONY_SMALL_FLASH_PATH);
|
||||
|
||||
/* Invert address bit 14 (IBM-endian) if FLASH_SEL fpga bit is set */
|
||||
if (fpga_reg0 & EBONY_FPGA_FLASH_SEL)
|
||||
reg[1] ^= 0x80000;
|
||||
|
||||
setprop(devp, "reg", reg, sizeof(reg));
|
||||
}
|
||||
|
||||
static void ebony_fixups(void)
|
||||
{
|
||||
// FIXME: sysclk should be derived by reading the FPGA registers
|
||||
@@ -101,6 +139,7 @@ static void ebony_fixups(void)
|
||||
ibm44x_fixup_memsize();
|
||||
dt_fixup_mac_addresses(ebony_mac0, ebony_mac1);
|
||||
ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
|
||||
ebony_flashsel_fixup();
|
||||
}
|
||||
|
||||
void ebony_init(void *mac0, void *mac1)
|
||||
|
Reference in New Issue
Block a user