ron minnich wrote:
attached. It dies and I'm sure it is bad ram settings, but it's a start.
One thing I plan to change pretty soon: power button control can move from stage1 to stage2, and power button control will be managed in dts (another dts setting we would NOT want visible in Kconfig; you could render a board totally unbootable and unrepairable with the wrong setting. Kconfig should be for settings that are safe to change).
This would be great. It should be easy to add a dts item and call cs5536_setup_power_button or not. Moving it to stage 2 should be fine BUT until the power button is setup it won't work. Some people might not like that if you hang or delay somewhere prior to it being setup.
You might be able to move a few of the following but most are needed to do the ram init and the others are a chicken/egg problem.
There are other things in stage1 for the lx that we should try to move to stage 2: cs5536_setup_extmsr();
cs5536_setup_extmsr() can't be moved. It is required to write the MSR in the 5536 which is neeeded to setup the SMBus for RAM init.
cs5536_setup_cis_mode();
These are the sideband signals from the 5536 to the LX. These include int, smi, susp, and some others. You could move it BUT if you setup the IRQ in the uart the 5536 could do an int and then you would miss it. Doing it early avoids issues.
msr = rdmsr(GLCP_SYS_RSTPLL); if (msr.lo & (0x3f << 26)) { /* PLL is already set and we are reboot from PLL reset. */ return; } cs5536_setup_idsel();
Need this to do stage2. Without it the 5536 won't decode PCI.
cs5536_usb_swapsif();
This can move but needs to be done before any the other usbsetup.
cs5536_setup_iobase();
This is required before raminit. Specificly the smbus io bar but if you set one you should probably just set them all. Once VSA loads these settings are reflected in the BAR and then are changed during PCI enumeration.
cs5536_setup_smbus_gpio();
This is required to set SMBUS sda/scl lines. There is a question how common this is in the function header. I have never seen these gpios used for anything else. Their purpose is to be the smbus lines.
/* cs5536_enable_smbus(); -- Leave this out for now. */
I just noticed that this code moved to smbus_initram which isn't really correct. SMBus is important for reading the SPD but it isn't the only device on the SMBus. Even if you don't have an SPD you still might like SMBus setup (thermal, gpio expander, etc). If you need SMBus for RAM init it needs to be done early, if not it can be done in stage2 but I think that it being in two places would be confusing.
// cs5536_setup_power_button();
Discussed it above.
Marc