[LinuxBIOS] [LinuxBIOSv2] WIP Support for RCA RM4100 - i82830 Complete

joe at smittys.pointclark.net joe at smittys.pointclark.net
Tue Sep 18 19:54:23 CEST 2007


Quoting Uwe Hermann <uwe at hermann-uwe.de>:
>
> I'd like to wait with committing until (a) a few issues are resolved,
> and (b) the board boots up to a Linux login prompt, if possible.
>
Ok but the problem now is related to the Southbridge i82801DB not  
anything I have written.
>
>
>> Index: src/mainboard/rca/rm4100/Config.lb
>
> RCA RM4100 is the name of the box as a whole, correct? Can you look at
> the mainboard and search for a vendor and mainboard name/ID?
> If there is one (printed on the PCB), we should use that as the
> target name in LinuxBIOS (as we did with other embedded stuff).
>
Well, it was originally made by Thomson Electronics Model: IP1000 but
RCA now manufactures the device and board as Model: RM4100
>
>
> Very good, you're using the generic 'smscsuperio' code. Once this boots
> to a Linux prompt, please let me know how well the code works for this
> Super I/O. There are still some TODOs in the 'smscsuperio' code.
>
> Which Super I/O model is on your board?
>
I have the SMSC LPC47M192-NC
>
>
>> +					device pnp 2e.0 off # Floppy
>> +						io 0x60 = 0x3f0
>> +						irq 0x70 = 6
>> +						drq 0x74 = 2
>> +					end
>> +					device pnp 2e.3 off # Parallel Port
>> +						io 0x60 = 0x378
>> +						irq 0x70 = 7
>> +					end
>> +					device pnp 2e.4 on # Com1
>> +						io 0x60 = 0x3f8
>> +						irq 0x70 = 4
>> +					end
>> +					device pnp 2e.5 off # Com2 / IR
>> +						io 0x60 = 0x2f8
>> +						irq 0x70 = 3
>> +					end
>> +					device pnp 2e.7 on # Keyboard
>> +						io 0x60 = 0x60
>> +						io 0x62 = 0x64
>> +						irq 0x70 = 1 # Keyboard interrupt
>> +						irq 0x72 = 12 # Mouse interrupt
>> +					end
>> +					device pnp 2e.9 off end # Game Port
>> +					device pnp 2e.a off end # PME
>> +					device pnp 2e.b off end # MPU-401
>
> Did you check whether the above values are all correct?
>
Yes, these are all the devices according to the datasheet.
>
>
>> +	chip cpu/intel/socket_PGA370
>
> Is this a Socket 370 board?
>
It is a Low Voltage Intel® Celeron® processor (Micro-FC-BGA) 733MHz  
but socket_PGA370 seems to work ok.
>
>
> Is this copied from another target, or written manually, or based on
> getpir output?
>
I used getpir output to create this.
>
> Once the board boots, please check if it's correct, i.e. if all devices
> work as expected.
>> +
>> +/* The onboard 128MB PC133 memory does not have a SPD eeprom so the
>> + * values have to be set manually,
>> + * the onboard memory is located in socket1 (0x51).
>> +*/
>> +static inline int spd_read_byte(unsigned device, unsigned address)
>> +{
>> +	int i;
>> +
>> +	if (device == 0x50){
>> +		return smbus_read_byte(device, address);
>
> If 0x51 is RAM, what is 0x50 then?
>
0x50 is a so-dimm socket, 0x51 is onboard memory
>
>
>> +	} else if (device == 0x51){
>> +		for (i=0; i < (sizeof spd_table/sizeof spd_table[0]); i++){
>> +			if (spd_table[i].address == address){
>> +				return spd_table[i].data;
>> +			}
>> +		}
>> +		return 0xFF; /* This line returns 0xFF when address not found */
>> +	} else {
>> +		return 0xFF; /* returns 0xFF on any failures */
>> +	}
>> +}
>> +
>> +static void ac97_io_enable(void)
>> +{
>> +	device_t dev;
>> +
>> +	/* Set the ac97 audio device staticly. */
>> +	dev = PCI_DEV(0x0, 0x1f, 0x5);
>> +
>> +	/* Enable access to the IO space. */
>> +	pci_write_config8(dev, 0x41, 0x01);
>
> Is this really needed? The lines in Config.lb should instruct LinuxBIOS
> to properly enable the device, no?
>
If I don't do this when booting the ac97 memory resuources become read only.
>
>> Index: src/northbridge/intel/i82830/i82830.h
> [...]
>> +#define VID 0X00     /* Vendor Identification Register - Default   
>> Value 0X8086 - 16 bits Read Only */
>> +#define DID 0X02     /* Device Identification Register - Default   
>> Value 0X3575 - 16 bits Read Only */
>> +#define RID 0X08     /* Revision Identification Register - Default  
>>  Value 0X04 - 8 bits Read Only */
>> +#define SUBC 0X0A     /* SUB-Class Code Register - Default Value   
>> 0X00 - 8 bits Read Only */
>> +#define BCC 0X0B     /* Base Class Code Register - Default Value   
>> 0X06 - 8 bits Read Only */
>> +#define MLT 0X0D     /* Master Latency Timer Register - Default   
>> Value 0X00 - 8 bits Read Only */
>> +#define HDR 0X0E     /* Header Type Register - Default Value 0X00   
>> - 8 bits Read Only */
>> +#define CAPPTR 0X34     /* Capablities Pointer - Default Value   
>> 0X40 - 8 bits Read Only */
>> +
>> +#define PCICMD0 0X04  /* PCI Command Register - Default Value   
>> 0X0006 - 16 bits */
>> +#define PCISTS 0X06  /* PCI Status Register - Default Value 0X0010  
>>  - 16 bits */
>
> I think you can drop all of the above (and maybe also SVID/SID), they're
> generic PCI registers, not i82830 specific at all.
>
These are mostly here just for reference.
>
> Not _too_ different to i815, it seems. Any chance this code could be
> merged into the i815 code, with some i830 specifics special-cased?
> If that's possible I'd really prefer it over creating another
> near-duplicate code base.
>
Actually the i830 is more like the i845 chipset, but it is adaptable,  
I'm sure.
>
>
> Did you enable the ram_check() function and did you verify
> that the RAM init actually works?
>
Yes.
>
> After the above fixes, the code is in good shape IMO, so we should be
> able to commit it as soon as a Linux boot works.
>
> You can split out the northbridge code in an extra patch if you want,
> I think we can commit that even before your board works, so that others
> who have i830 boards can work with it.
>
Will Do.
>
> But please consider merging the i830 code into the i815 code, if at all
> possible.
>
>
> Uwe.

Like I said the i830 is more like the i845 chipset, but it is  
adaptable, I'm sure.


Thanks - Joe




More information about the coreboot mailing list